<?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>167990</bug_id>
          
          <creation_ts>2017-02-08 08:14:47 -0800</creation_ts>
          <short_desc>Remove most cases of #if ENABLE(CACHE_PARTITIONING)</short_desc>
          <delta_ts>2017-02-09 03:11:22 -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>Page Loading</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1274336</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-02-08 08:14:47 -0800</bug_when>
    <thetext>This is ifdef is all over the place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274346</commentid>
    <comment_count>1</comment_count>
      <attachid>300901</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-02-08 08:26:17 -0800</bug_when>
    <thetext>Created attachment 300901
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274364</commentid>
    <comment_count>2</comment_count>
      <attachid>300901</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-08 09:00:35 -0800</bug_when>
    <thetext>Comment on attachment 300901
patch

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

I love this!  rs=me when you get it compiling.

&gt; Source/WebCore/loader/FrameLoader.cpp:1204
&gt;          request.setDomainForCachePartition(m_frame.tree().top().document()-&gt;securityOrigin().domainForCachePartition());

Should this be using topOrigin?

&gt; Source/WebCore/loader/cache/MemoryCache.cpp:562
&gt;      static NeverDestroyed&lt;String&gt; httpString(&quot;http&quot;);

This can&apos;t really be necessary now that we have ASCIILiteral, right?

&gt; Source/WebCore/platform/network/ResourceRequestBase.cpp:665
&gt; +#else
&gt; +    return domain;
&gt; +#endif

Is this the right decision? Maybe we should we just return emptyString() if there is no PUBLIC_SUFFIX_LIST support? Or maybe we should #error if you enable ENABLE(CACHE_PARTITIONING) without ENABLE(PUBLIC_SUFFIX_LIST)?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:97
&gt; +    
&gt;  
&gt;      revalidationRequest.makeUnconditional();

No need for this extra newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274785</commentid>
    <comment_count>3</comment_count>
      <attachid>301023</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-02-09 01:21:28 -0800</bug_when>
    <thetext>Created attachment 301023
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274794</commentid>
    <comment_count>4</comment_count>
      <attachid>301026</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-02-09 02:25:23 -0800</bug_when>
    <thetext>Created attachment 301026
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274798</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-02-09 03:11:22 -0800</bug_when>
    <thetext>https://trac.webkit.org/r211946</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300901</attachid>
            <date>2017-02-08 08:26:17 -0800</date>
            <delta_ts>2017-02-09 01:21:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cache-partition-ifdef.patch</filename>
            <type>text/plain</type>
            <size>62049</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE3LTAyLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbW9zdCBjYXNlcyBv
ZiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Nzk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlJ2xsIGp1c3QgcmV0dXJuIGVtcHR5IHN0cmluZyBm
b3IgdGhlIHBhcnRpdGlvbiBpZiBwYXJ0aXRpb25pbmcgaXMgbm90IGVuYWJsZWQuCisKKyAgICAg
ICAgKiBodG1sL0RPTVVSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01VUkw6OnJldm9rZU9i
amVjdFVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmxvYWRVUkwpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKToK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2U6OmNhY2hlUGFydGl0aW9uKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RVc2VyQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlUmVx
dWVzdDo6c2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOgorICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5
Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmV2YWxpZGF0aW9uU3VjY2VlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZUltYWdlRnJvbUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lbW9yeUNhY2hlOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJl
bW92ZVJlc291cmNlc1dpdGhPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6
OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNh
Y2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hl
OjpvcmlnaW5zV2l0aENhY2hlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
aDoKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik6CisgICAgICAgICogcGFn
ZS9TZWN1cml0eU9yaWdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlUGFydGl0aW9uaW5nU2NoZW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2hvdWxkUGFydGl0aW9uQ2FjaGVGb3JVUkxTY2hl
bWUpOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5Lmg6CisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW06CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
QmFzZTo6c2V0QXNJc29sYXRlZENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0QmFzZTo6c2V0Q2FjaGVQYXJ0aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6cGFydGl0aW9uTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpjYWNoZVBhcnRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdDo6Y2FjaGVQYXJ0aXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0OjpzZXRDYWNoZVBhcnRpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3Q6OnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNl
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5h
bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRm
b3JtU2V0QXNJc29sYXRlZENvcHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY29j
b2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QpOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNMb2FkaW5nRnJv
bU1lbW9yeUNhY2hlKToKKwogMjAxNy0wMi0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gQ3JpdGljYWwgd2FybmluZ3Mg
d2hlbiBtZWRpYSBwbGF5ZXIgaXMgZGVzdHJveWVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lv
biAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwxMSArMTI0LDcgQEAgdm9pZCBXZWJT
b2NrZXRDaGFubmVsOjpjb25uZWN0KGNvbnN0IFVSTAogICAgICAgICByZWYoKTsKICAgICAgICAg
UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CiAgICAgICAgIFNlc3Npb25JRCBzZXNzaW9uSUQg
PSBwYWdlID8gcGFnZS0+c2Vzc2lvbklEKCkgOiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgICAgICBTdHJpbmcgcGFydGl0
aW9uID0gbV9kb2N1bWVudC0+dG9wRG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpLmRvbWFpbkZv
ckNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgICAgICBTdHJpbmcgcGFydGl0aW9uID0gZW1w
dHlTdHJpbmcoKTsKLSNlbmRpZgogICAgICAgICBtX2hhbmRsZSA9IG1fc29ja2V0UHJvdmlkZXIt
PmNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZShtX2hhbmRzaGFrZS0+dXJsKCksICp0aGlzLCBzZXNz
aW9uSUQsIHBhcnRpdGlvbik7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9E
T01VUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNwcAko
cmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjAsOSArMTIwLDggQEAgdm9pZCBET01VUkw6OnJldm9rZU9iamVjdFVS
TChTY3JpcHRFeGVjdQogewogICAgIFVSTCB1cmwoVVJMKCksIHVybFN0cmluZyk7CiAgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5H
KQogICAgIHJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC50b3BPcmlnaW4oKS5kb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpKTsKLSNlbmRpZgor
CiAgICAgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlcyhzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCByZXF1ZXN0KTsKIAogICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
cHVibGljVVJMTWFuYWdlcigpLnJldm9rZSh1cmwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDIxMTg2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjAsOSArMjYwLDcgQEAgQ2FjaGVkUmVzb3VyY2UqIEluc3BlY3RvclBhZ2VB
Z2VudDo6Y2FjaAogICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGZyYW1lLT5k
b2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmNhY2hlZFJlc291cmNlKE1lbW9yeUNh
Y2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZCh1cmwpKTsKICAgICBpZiAoIWNh
Y2hlZFJlc291cmNlKSB7CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0j
aWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICAgICAgcmVxdWVzdC5zZXREb21haW5G
b3JDYWNoZVBhcnRpdGlvbihmcmFtZS0+ZG9jdW1lbnQoKS0+dG9wT3JpZ2luKCkuZG9tYWluRm9y
Q2FjaGVQYXJ0aXRpb24oKSk7Ci0jZW5kaWYKICAgICAgICAgY2FjaGVkUmVzb3VyY2UgPSBNZW1v
cnlDYWNoZTo6c2luZ2xldG9uKCkucmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QsIGZyYW1lLT5w
YWdlKCktPnNlc3Npb25JRCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwMCwxMCArMTIwMCw5IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWRVUkwoY29uc3QgRnJhbWVMb2EKICAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiByZWZlcnJlck9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9t
U3RyaW5nKHJlZmVycmVyKTsKICAgICAgICAgYWRkSFRUUE9yaWdpbklmTmVlZGVkKHJlcXVlc3Qs
IHJlZmVycmVyT3JpZ2luLT50b1N0cmluZygpKTsKICAgICB9Ci0jaWYgRU5BQkxFKENBQ0hFX1BB
UlRJVElPTklORykKICAgICBpZiAoJm1fZnJhbWUudHJlZSgpLnRvcCgpICE9ICZtX2ZyYW1lKQog
ICAgICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKG1fZnJhbWUudHJlZSgp
LnRvcCgpLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuZG9tYWluRm9yQ2FjaGVQYXJ0aXRp
b24oKSk7Ci0jZW5kaWYKKwogICAgIGFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KHJlcXVlc3QsIG5l
d0xvYWRUeXBlLCB0cnVlKTsKICAgICBpZiAobmV3TG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZTo6
UmVsb2FkIHx8IG5ld0xvYWRUeXBlID09IEZyYW1lTG9hZFR5cGU6OlJlbG9hZEZyb21PcmlnaW4p
CiAgICAgICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmVsb2FkSWdub3JpbmdDYWNoZURhdGEp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVn
YWN5V2ViQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTQsOSArNTE0LDggQEAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdgog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KHN1YnJlc291cmNlVVJMKTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
ICAgICAgICAgICAgIHJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZnJhbWUuZG9j
dW1lbnQoKS0+dG9wT3JpZ2luKCkuZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKSk7Ci0jZW5kaWYK
KwogICAgICAgICAgICAgICAgIGlmIChhdXRvKiBjYWNoZWRSZXNvdXJjZSA9IE1lbW9yeUNhY2hl
OjpzaW5nbGV0b24oKS5yZXNvdXJjZUZvclJlcXVlc3QocmVxdWVzdCwgZnJhbWUucGFnZSgpLT5z
ZXNzaW9uSUQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzb3VyY2UgPSBB
cmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShjYWNoZWRSZXNvdXJjZS0+cmVzb3VyY2VCdWZmZXIoKSwg
c3VicmVzb3VyY2VVUkwsIGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZS5yZWxlYXNlTm9uTnVs
bCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5oCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDkgKzExNCw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CiAgICAgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QoKSB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdDsgfQogICAgIGNvbnN0IFVSTCYgdXJs
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3QudXJsKCk7fQotI2lmIEVOQUJMRShD
QUNIRV9QQVJUSVRJT05JTkcpCiAgICAgY29uc3QgU3RyaW5nJiBjYWNoZVBhcnRpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7IH0KLSNlbmRp
ZgogICAgIFNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsg
fQogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5j
cHAJKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNywxMCArMjE3LDggQEAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldAogCiBDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dFVzZXJDU1NTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCiB7Ci0j
aWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBBU1NFUlQoZG9jdW1lbnQoKSk7CiAg
ICAgcmVxdWVzdC5zZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbigqZG9jdW1lbnQoKSk7Ci0jZW5k
aWYKIAogICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwog
ICAgIGlmIChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSkgewpAQCAtNzMzLDEwICs3MzEsOCBAQCBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjCiAKICAgICAvLyBTZWUgaWYg
d2UgY2FuIHVzZSBhbiBleGlzdGluZyByZXNvdXJjZSBmcm9tIHRoZSBjYWNoZS4KICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVzb3VyY2U7Ci0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKICAgICBpZiAoZG9jdW1lbnQoKSkKICAgICAgICAgcmVxdWVzdC5z
ZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbigqZG9jdW1lbnQoKSk7Ci0jZW5kaWYKIAogICAgIGlm
IChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSkKICAgICAgICAgcmVzb3VyY2UgPSBtZW1vcnlDYWNo
ZS5yZXNvdXJjZUZvclJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2Vzc2lvbklE
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlUmVxdWVzdC5jcHAJKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjksMTIgKzEyOSwxMCBAQCB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6dXBncmFkZUlu
c2VjCiAgICAgdXBncmFkZUluc2VjdXJlUmVzb3VyY2VSZXF1ZXN0SWZOZWVkZWQobV9yZXNvdXJj
ZVJlcXVlc3QsIGRvY3VtZW50KTsKIH0KIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CiB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24o
RG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldERvbWFpbkZv
ckNhY2hlUGFydGl0aW9uKGRvY3VtZW50LnRvcE9yaWdpbigpLmRvbWFpbkZvckNhY2hlUGFydGl0
aW9uKCkpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGFjY2VwdEhlYWRlclZh
bHVlRnJvbVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgJKHJl
dmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsNyBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGFwcGx5QmxvY2tlZFN0YXR1
cyhjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6QmxvY2tlZFN0YXR1cyYpOwogI2VuZGlmCi0jaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICB2b2lkIHNldERvbWFpbkZvckNhY2hlUGFy
dGl0aW9uKERvY3VtZW50Jik7Ci0jZW5kaWYKICAgICBib29sIGlzTGlua1ByZWxvYWQoKSBjb25z
dCB7IHJldHVybiBtX2lzTGlua1ByZWxvYWQ7IH0KICAgICB2b2lkIHNldElzTGlua1ByZWxvYWQo
KSB7IG1faXNMaW5rUHJlbG9hZCA9IHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsMTEgKzExNSw4IEBAIGJvb2wgTWVtb3J5Q2FjaGU6OmFkZChDYWNoZWRSZXNvdXJjZSYgcmUK
IAogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKIAotI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCiAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihyZXNvdXJjZS51cmwo
KSwgcmVzb3VyY2UuY2FjaGVQYXJ0aXRpb24oKSk7Ci0jZWxzZQotICAgIGF1dG8mIGtleSA9IHJl
c291cmNlLnVybCgpOwotI2VuZGlmCisKICAgICBlbnN1cmVTZXNzaW9uUmVzb3VyY2VNYXAocmVz
b3VyY2Uuc2Vzc2lvbklEKCkpLnNldChrZXksICZyZXNvdXJjZSk7CiAgICAgcmVzb3VyY2Uuc2V0
SW5DYWNoZSh0cnVlKTsKICAgICAKQEAgLTE0NCwxMSArMTQxLDggQEAgdm9pZCBNZW1vcnlDYWNo
ZTo6cmV2YWxpZGF0aW9uU3VjY2VlZGVkKAogICAgIHJlbW92ZShyZXZhbGlkYXRpbmdSZXNvdXJj
ZSk7CiAKICAgICBhdXRvJiByZXNvdXJjZXMgPSBlbnN1cmVTZXNzaW9uUmVzb3VyY2VNYXAocmVz
b3VyY2Uuc2Vzc2lvbklEKCkpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAg
YXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihyZXNvdXJjZS51cmwoKSwgcmVzb3VyY2UuY2FjaGVQ
YXJ0aXRpb24oKSk7Ci0jZWxzZQotICAgIGF1dG8mIGtleSA9IHJlc291cmNlLnVybCgpOwotI2Vu
ZGlmCisKICAgICBBU1NFUlQoIXJlc291cmNlcy5nZXQoa2V5KSk7CiAgICAgcmVzb3VyY2VzLnNl
dChrZXksICZyZXNvdXJjZSk7CiAgICAgcmVzb3VyY2Uuc2V0SW5DYWNoZSh0cnVlKTsKQEAgLTE4
OSwxMSArMTgzLDcgQEAgQ2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvcgog
ICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKICAgICBVUkwgdXJsID0gcmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVxdWVzdC51cmwoKSk7CiAKLSNpZiBFTkFCTEUoQ0FD
SEVfUEFSVElUSU9OSU5HKQogICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIodXJsLCByZXF1
ZXN0LmNhY2hlUGFydGl0aW9uKCkpOwotI2Vsc2UKLSAgICBhdXRvJiBrZXkgPSB1cmw7Ci0jZW5k
aWYKICAgICByZXR1cm4gcmVzb3VyY2VzLmdldChrZXkpOwogfQogCkBAIC0yMzIsOSArMjIyLDgg
QEAgYm9vbCBNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZQogCiAgICAgY2FjaGVk
SW1hZ2UtPmFkZENsaWVudChkdW1teUNhY2hlZEltYWdlQ2xpZW50KCkpOwogICAgIGNhY2hlZElt
YWdlLT5zZXREZWNvZGVkU2l6ZShiaXRtYXBJbWFnZS0+ZGVjb2RlZFNpemUoKSk7Ci0jaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBjYWNoZWRJbWFnZS0+cmVzb3VyY2VSZXF1ZXN0
KCkuc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOwot
I2VuZGlmCisKICAgICByZXR1cm4gYWRkKCpjYWNoZWRJbWFnZS5yZWxlYXNlKCkpOwogfQogCkBA
IC0yNDQsMTIgKzIzMyw4IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUltYWdlRnJvbUNhY2hl
KGMKICAgICBpZiAoIXJlc291cmNlcykKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKICAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHVybCwgUmVz
b3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKGRvbWFpbkZvckNhY2hlUGFydGl0aW9uKSk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik7Ci0gICAgYXV0
byYga2V5ID0gdXJsOwotI2VuZGlmCisKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBy
ZXNvdXJjZXMtPmdldChrZXkpOwogICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsK
QEAgLTQzOSwxMSArNDI0LDggQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlKENhY2hlZFJlc291
cmNlJgogICAgIC8vIFRoZSByZXNvdXJjZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBi
eSBzb21lb25lIG90aGVyIHRoYW4gb3VyIGNhbGxlciwKICAgICAvLyB3aG8gbmVlZGVkIGEgZnJl
c2ggY29weSBmb3IgYSByZWxvYWQuIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI0NzkjYzY+LgogICAgIGlmIChhdXRvKiByZXNvdXJjZXMgPSBzZXNzaW9uUmVz
b3VyY2VNYXAocmVzb3VyY2Uuc2Vzc2lvbklEKCkpKSB7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJ
VElPTklORykKICAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihyZXNvdXJjZS51cmwo
KSwgcmVzb3VyY2UuY2FjaGVQYXJ0aXRpb24oKSk7Ci0jZWxzZQotICAgICAgICBhdXRvJiBrZXkg
PSByZXNvdXJjZS51cmwoKTsKLSNlbmRpZgorCiAgICAgICAgIGlmIChyZXNvdXJjZS5pbkNhY2hl
KCkpIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSByZXNvdXJjZSBmcm9tIHRoZSByZXNvdXJjZSBt
YXAuCiAgICAgICAgICAgICByZXNvdXJjZXMtPnJlbW92ZShrZXkpOwpAQCAtNTI3LDIxICs1MDks
MTcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVzb3VyY2VBY2Nlc3NlZChDYWNoZQogCiB2b2lkIE1l
bW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luJiBvcmln
aW4pCiB7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBTdHJpbmcgb3JpZ2lu
UGFydGl0aW9uID0gUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKG9yaWdpbi5ob3N0KCkp
OwotI2VuZGlmCiAKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiByZXNvdXJjZXNXaXRoT3Jp
Z2luOwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbV9zZXNzaW9uUmVzb3VyY2VzLnZhbHVl
cygpKSB7CiAgICAgICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiAqcmVzb3VyY2VzKSB7CiAgICAg
ICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKLSNpZiBFTkFCTEUoQ0FD
SEVfUEFSVElUSU9OSU5HKQogICAgICAgICAgICAgYXV0byYgcGFydGl0aW9uTmFtZSA9IGtleVZh
bHVlLmtleS5zZWNvbmQ7CiAgICAgICAgICAgICBpZiAocGFydGl0aW9uTmFtZSA9PSBvcmlnaW5Q
YXJ0aXRpb24pIHsKICAgICAgICAgICAgICAgICByZXNvdXJjZXNXaXRoT3JpZ2luLmFwcGVuZCgm
cmVzb3VyY2UpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlc291cmNlT3JpZ2luID0g
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNvdXJjZS51cmwoKSk7CiAgICAgICAgICAgICBpZiAo
cmVzb3VyY2VPcmlnaW4tPmVxdWFsKCZvcmlnaW4pKQogICAgICAgICAgICAgICAgIHJlc291cmNl
c1dpdGhPcmlnaW4uYXBwZW5kKCZyZXNvdXJjZSk7CkBAIC01NTgsMjUgKzUzNiwxOSBAQCB2b2lk
IE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpCiAgICAgaWYgKCFyZXNvdXJjZU1h
cCkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAg
ICBIYXNoU2V0PFN0cmluZz4gb3JpZ2luUGFydGl0aW9uczsKIAogICAgIGZvciAoYXV0byYgb3Jp
Z2luIDogb3JpZ2lucykKICAgICAgICAgb3JpZ2luUGFydGl0aW9ucy5hZGQoUmVzb3VyY2VSZXF1
ZXN0OjpwYXJ0aXRpb25OYW1lKG9yaWdpbi0+aG9zdCgpKSk7Ci0jZW5kaWYKIAogICAgIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IHJlc291cmNlc1RvUmVtb3ZlOwogICAgIGZvciAoYXV0byYga2V5
VmFsdWVQYWlyIDogKnJlc291cmNlTWFwKSB7CiAgICAgICAgIGF1dG8mIHJlc291cmNlID0gKmtl
eVZhbHVlUGFpci52YWx1ZTsKLQotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAg
ICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZVBhaXIua2V5LnNlY29uZDsKICAgICAg
ICAgaWYgKG9yaWdpblBhcnRpdGlvbnMuY29udGFpbnMocGFydGl0aW9uTmFtZSkpIHsKICAgICAg
ICAgICAgIHJlc291cmNlc1RvUmVtb3ZlLmFwcGVuZCgmcmVzb3VyY2UpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIGlmIChvcmlnaW5zLmNvbnRh
aW5zKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkpLnB0cigpKSkKICAgICAg
ICAgICAgIHJlc291cmNlc1RvUmVtb3ZlLmFwcGVuZCgmcmVzb3VyY2UpOwogICAgIH0KQEAgLTU4
NywxOSArNTU5LDE2IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmkK
IAogdm9pZCBNZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNl
dCYgb3JpZ2lucykKIHsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGh0dHBTdHJpbmcoImh0dHAiKTsKLSNlbmRpZgorCiAg
ICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nlc3Npb25SZXNvdXJjZXMudmFsdWVzKCkpIHsK
ICAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICpyZXNvdXJjZXMpIHsKICAgICAgICAgICAg
IGF1dG8mIHJlc291cmNlID0gKmtleVZhbHVlLnZhbHVlOwotI2lmIEVOQUJMRShDQUNIRV9QQVJU
SVRJT05JTkcpCiAgICAgICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5
LnNlY29uZDsKICAgICAgICAgICAgIGlmICghcGFydGl0aW9uTmFtZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShodHRwU3RyaW5n
LCBwYXJ0aXRpb25OYW1lLCAwKSk7CiAgICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAg
ICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkpKTsK
KyAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291
cmNlLnVybCgpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02MTIsMTMgKzU4MSwxMSBAQCBI
YXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IE1lbW9yeUNhCiAgICAgaWYgKGl0ICE9IG1f
c2Vzc2lvblJlc291cmNlcy5lbmQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDog
Kml0LT52YWx1ZSkgewogICAgICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFs
dWU7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICAgICAgICAgIGF1dG8mIHBh
cnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYgKCFwYXJ0
aXRpb25OYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlKCJodHRwIiwgcGFydGl0aW9uTmFtZSwgMCkpOwogICAgICAgICAgICAg
ZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKHJlc291cmNlLnVybCgpKSk7CisgICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZShyZXNvdXJjZS51cmwoKSkpOwogICAgICAgICB9CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24g
MjExODY4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCwxMSArMTY4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUsIGJv
b2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyA9IGZhbHNlKTsK
IAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIHR5cGVkZWYg
SGFzaE1hcDxzdGQ6OnBhaXI8VVJMLCBTdHJpbmcgLyogcGFydGl0aW9uTmFtZSAqLz4sIENhY2hl
ZFJlc291cmNlKj4gQ2FjaGVkUmVzb3VyY2VNYXA7Ci0jZWxzZQotICAgIHR5cGVkZWYgSGFzaE1h
cDxVUkwsIENhY2hlZFJlc291cmNlKj4gQ2FjaGVkUmVzb3VyY2VNYXA7Ci0jZW5kaWYKICAgICB0
eXBlZGVmIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gTFJVTGlzdDsKIAogICAgIE1lbW9y
eUNhY2hlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2
aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5NSw3ICszOTUsNiBAQCB2b2lkIFNlY3VyaXR5T3JpZ2luOjpn
cmFudFN0b3JhZ2VBY2Nlc3NGCiAgICAgbV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNR
dWlyayA9IHRydWU7CiB9CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogU3RyaW5n
IFNlY3VyaXR5T3JpZ2luOjpkb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpIGNvbnN0CiB7CiAgICAg
aWYgKG1fc3RvcmFnZUJsb2NraW5nUG9saWN5ICE9IEJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpCkBA
IC00MDksNyArNDA4LDYgQEAgU3RyaW5nIFNlY3VyaXR5T3JpZ2luOjpkb21haW5Gb3JDYWNoZVBh
cgogCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBTZWN1cml0
eU9yaWdpbjo6ZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbigpCiB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbi5oCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw5ICsxMzgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyaygp
OwogICAgIGJvb2wgbmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoKSBjb25zdCB7
IHJldHVybiBtX25lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrOyB9CiAKLSNpZiBF
TkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBkb21h
aW5Gb3JDYWNoZVBhcnRpdGlvbigpIGNvbnN0OwotI2VuZGlmCiAKICAgICBib29sIGNhbkFjY2Vz
c0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4pIGNvbnN0IHsgcmV0dXJu
IGNhbkFjY2Vzc1N0b3JhZ2UoJnRvcE9yaWdpbik7IH07CiAgICAgYm9vbCBjYW5BY2Nlc3NTZXNz
aW9uU3RvcmFnZShjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luKSBjb25zdCB7IHJldHVy
biBjYW5BY2Nlc3NTdG9yYWdlKCZ0b3BPcmlnaW4sIEFsd2F5c0FsbG93RnJvbVRoaXJkUGFydHkp
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCShy
ZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3Ry
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NywxMyArMTY3LDExIEBAIHN0YXRpYyBVUkxTY2hl
bWVzTWFwJiBDb250ZW50U2VjdXJpdHlQb2wKICAgICByZXR1cm4gc2NoZW1lczsKIH0KIAotI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiBzdGF0aWMgVVJMU2NoZW1lc01hcCYgY2FjaGVQ
YXJ0aXRpb25pbmdTY2hlbWVzKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VVJMU2No
ZW1lc01hcD4gc2NoZW1lczsKICAgICByZXR1cm4gc2NoZW1lczsKIH0KLSNlbmRpZgogCiBzdGF0
aWMgVVJMU2NoZW1lc01hcCYgYWx3YXlzUmV2YWxpZGF0ZWRTY2hlbWVzKCkKIHsKQEAgLTM0Myw3
ICszNDEsNiBAQCBib29sIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRBbHdheXNSZXZhbGlkCiAgICAg
cmV0dXJuIGFsd2F5c1JldmFsaWRhdGVkU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAK
LSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogdm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7
CiAgICAgY2FjaGVQYXJ0aXRpb25pbmdTY2hlbWVzKCkuYWRkKHNjaGVtZSk7CkBAIC0zNTUsNyAr
MzUyLDYgQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkUGFydGl0aW9uQ2FjaAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGNhY2hlUGFydGl0aW9uaW5nU2NoZW1lcygpLmNv
bnRhaW5zKHNjaGVtZSk7CiB9Ci0jZW5kaWYKIAogYm9vbCBTY2hlbWVSZWdpc3RyeTo6aXNVc2Vy
RXh0ZW5zaW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NCwxMSArOTQsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgcmVn
aXN0ZXJVUkxTY2hlbWVBc0Fsd2F5c1JldmFsaWRhdGVkKGNvbnN0IFN0cmluZyYpOwogICAgIHN0
YXRpYyBib29sIHNob3VsZEFsd2F5c1JldmFsaWRhdGVVUkxTY2hlbWUoY29uc3QgU3RyaW5nJik7
CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIC8vIFNjaGVtZXMgd2hvc2Ug
cmVxdWVzdHMgc2hvdWxkIGJlIHBhcnRpdGlvbmVkIGluIHRoZSBjYWNoZQogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNv
bnN0IFN0cmluZyYgc2NoZW1lKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRQYXJ0aXRpb25DYWNo
ZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7Ci0jZW5kaWYKIAogICAgIHN0YXRp
YyBib29sIGlzVXNlckV4dGVuc2lvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CiB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVT
eXN0ZW1JbnRlcmZhY2VJT1MubW0JKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw5ICs2Niw3IEBAIFdFQkNPUkVfRVhQT1JUIENGU3RyaW5nUmVmKCp3a0NhcHRpb25B
cHAKIFdFQkNPUkVfRVhQT1JUIGJvb2wgKCp3a0lzUHVibGljU3VmZml4KShOU1N0cmluZyAqaG9z
dCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiBXRUJDT1JFX0VY
UE9SVCBDRlN0cmluZ1JlZiAoKndrQ2FjaGVQYXJ0aXRpb25LZXkpKHZvaWQpOwotI2VuZGlmCiAK
IFdFQkNPUkVfRVhQT1JUIGludCAoKndrRXhlcm5hbERldmljZVR5cGVGb3JQbGF5ZXIpKEFWUGxh
eWVyICopOwogV0VCQ09SRV9FWFBPUlQgTlNTdHJpbmcgKigqd2tFeGVybmFsRGV2aWNlRGlzcGxh
eU5hbWVGb3JQbGF5ZXIpKEFWUGxheWVyICopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCShyZXZpc2lvbiAyMTE4
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsOSArMjM1LDcgQEAgZXh0ZXJuIENHRmxvYXQgKCp3
a05TUmVib3VuZERlbHRhRm9yRWxhcwogZXh0ZXJuIGJvb2wgKCp3a0lzUHVibGljU3VmZml4KShO
U1N0cmluZyAqaG9zdCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CiBleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0NhY2hlUGFydGl0aW9uS2V5KSh2b2lkKTsKLSNlbmRp
ZgogCiB0eXBlZGVmIGVudW0gewogICAgIHdrRXh0ZXJuYWxQbGF5YmFja1R5cGVOb25lLApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UubW0JKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSAr
MTEzLDcgQEAgQ0dGbG9hdCAoKndrTlNSZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdAogYm9vbCAo
KndrSXNQdWJsaWNTdWZmaXgpKE5TU3RyaW5nICpob3N0KTsKICNlbmRpZgogCi0jaWYgRU5BQkxF
KENBQ0hFX1BBUlRJVElPTklORykKIENGU3RyaW5nUmVmICgqd2tDYWNoZVBhcnRpdGlvbktleSko
dm9pZCk7Ci0jZW5kaWYKIAogaW50ICgqd2tFeGVybmFsRGV2aWNlVHlwZUZvclBsYXllcikoQVZQ
bGF5ZXIgKik7CiBOU1N0cmluZyAqKCp3a0V4ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZUZvclBsYXll
cikoQVZQbGF5ZXIgKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAkocmV2aXNpb24gMjExODY4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDExICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2NsaWVudChjbGllbnQpCiAgICAgICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVzdCkKICAgICAg
ICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpKQotI2lmIEVOQUJMRShD
QUNIRV9QQVJUSVRJT05JTkcpCiAgICAgICAgICwgbV9wYXJ0aXRpb24ocmVxdWVzdC5jYWNoZVBh
cnRpdGlvbigpKQotI2Vsc2UKLSAgICAgICAgLCBtX3BhcnRpdGlvbihlbXB0eVN0cmluZygpKQot
I2VuZGlmCiAgICAgICAgICwgbV9kZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpCiAgICAgICAg
ICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQogICAgICAgICAsIG1f
dXNlc0FzeW5jQ2FsbGJhY2tzKGNsaWVudCAmJiBjbGllbnQtPnVzZXNBc3luY0NhbGxiYWNrcygp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuY3BwCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgogCiAj
aW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCisjaW5jbHVkZSAiUHVibGljU3VmZml4LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJp
c29uLmg+CiAKQEAgLTY2LDYgKzY3LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRB
c0lzb2xhdGVkQwogICAgIHNldFByaW9yaXR5KG90aGVyLnByaW9yaXR5KCkpOwogICAgIHNldFJl
cXVlc3RlcihvdGhlci5yZXF1ZXN0ZXIoKSk7CiAgICAgc2V0SW5pdGlhdG9ySWRlbnRpZmllcihv
dGhlci5pbml0aWF0b3JJZGVudGlmaWVyKCkuaXNvbGF0ZWRDb3B5KCkpOworICAgIHNldENhY2hl
UGFydGl0aW9uKG90aGVyLmNhY2hlUGFydGl0aW9uKCkpOwogCiAgICAgdXBkYXRlUmVzb3VyY2VS
ZXF1ZXN0KCk7CiAgICAgbV9odHRwSGVhZGVyRmllbGRzID0gb3RoZXIuaHR0cEhlYWRlckZpZWxk
cygpLmlzb2xhdGVkQ29weSgpOwpAQCAtODYsOCArODgsNiBAQCB2b2lkIFJlc291cmNlUmVxdWVz
dEJhc2U6OnNldEFzSXNvbGF0ZWRDCiAgICAgaWYgKG90aGVyLm1faHR0cEJvZHkpCiAgICAgICAg
IHNldEhUVFBCb2R5KG90aGVyLm1faHR0cEJvZHktPmlzb2xhdGVkQ29weSgpKTsKICAgICBzZXRB
bGxvd0Nvb2tpZXMob3RoZXIubV9hbGxvd0Nvb2tpZXMpOwotCi0gICAgY29uc3RfY2FzdDxSZXNv
dXJjZVJlcXVlc3QmPihhc1Jlc291cmNlUmVxdWVzdCgpKS5kb1BsYXRmb3JtU2V0QXNJc29sYXRl
ZENvcHkob3RoZXIpOwogfQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmlzRW1wdHkoKSBj
b25zdApAQCAtNjQwLDQgKzY0MCwyOSBAQCBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmRlZmF1
bHRBbGxvd0NvCiB9CiAjZW5kaWYKIAordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRDYWNo
ZVBhcnRpdGlvbihjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKQoreworI2lmIEVOQUJMRShD
QUNIRV9QQVJUSVRJT05JTkcpCisgICAgQVNTRVJUKCFtX2NhY2hlUGFydGl0aW9uLmlzTnVsbCgp
KTsKKyAgICBBU1NFUlQoY2FjaGVQYXJ0aXRpb24gPT0gcGFydGl0aW9uTmFtZShjYWNoZVBhcnRp
dGlvbikpOworICAgIG1fY2FjaGVQYXJ0aXRpb24gPSBjYWNoZVBhcnRpdGlvbjsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGNhY2hlUGFydGl0aW9uKTsKKyNlbmRpZgorfQorCitTdHJpbmcgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6cGFydGl0aW9uTmFtZShjb25zdCBTdHJpbmcmIGRvbWFpbikKK3sK
KyAgICBpZiAoZG9tYWluLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
KyNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQorICAgIFN0cmluZyBoaWdoTGV2ZWwgPSB0
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKGRvbWFpbik7CisgICAgaWYgKGhpZ2hMZXZlbC5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIGhpZ2hM
ZXZlbDsKKyNlbHNlCisgICAgcmV0dXJuIGRvbWFpbjsKKyNlbmRpZgorfQorCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuaAkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYs
MTEgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQcmlvcml0eShSZXNv
dXJjZUxvYWRQcmlvcml0eSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHBh
cnRpdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBkb21haW4pOworICAgIGNvbnN0IFN0cmluZyYgY2Fj
aGVQYXJ0aXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NhY2hlUGFydGl0aW9uOyB9CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRDYWNoZVBhcnRpdGlvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIHNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluKSB7IHNl
dENhY2hlUGFydGl0aW9uKHBhcnRpdGlvbk5hbWUoZG9tYWluKSk7IH0KKwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNDb25kaXRpb25hbCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgbWFrZVVuY29uZGl0aW9uYWwoKTsKIApAQCAtMjM3LDYgKzI0Miw3IEBAIHByb3RlY3RlZDoK
ICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBtX3ByaW9yaXR5IHsgUmVzb3VyY2VMb2FkUHJpb3Jp
dHk6OkxvdyB9OwogICAgIFJlcXVlc3RlciBtX3JlcXVlc3RlciB7IFJlcXVlc3Rlcjo6VW5zcGVj
aWZpZWQgfTsKICAgICBTdHJpbmcgbV9pbml0aWF0b3JJZGVudGlmaWVyOworICAgIFN0cmluZyBt
X2NhY2hlUGFydGl0aW9uIHsgZW1wdHlTdHJpbmcoKSB9OwogCiBwcml2YXRlOgogICAgIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgYXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcAkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM3LDE5ICsxMzcsMTMgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0
aQogICAgICAgICBmaXJzdFJlcXVlc3QoKS5zZXRVUkwodXJsV2l0aENyZWRlbnRpYWxzKTsKICAg
ICB9CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIFN0cmluZyBwYXJ0aXRp
b24gPSBmaXJzdFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlvbigpOwotI2Vsc2UKLSAgICBTdHJpbmcg
cGFydGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgotCiAgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJl
dmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLAogICAgIC8v
IHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5
IFJGQyAyNjE3LgogICAgIGlmIChzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSAmJiBmaXJzdFJl
cXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKICAgICAgICAgaWYgKGQt
Pm1fdXNlci5pc0VtcHR5KCkgJiYgZC0+bV9wYXNzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUgcGF0
aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRp
Y2F0aW9uLCAKICAgICAgICAgICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJl
ZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgotICAgICAgICAgICAgZC0+bV9pbml0
aWFsQ3JlZGVudGlhbCA9IGQtPm1fY29udGV4dC0+c3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFs
U3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAg
ICAgIGQtPm1faW5pdGlhbENyZWRlbnRpYWwgPSBkLT5tX2NvbnRleHQtPnN0b3JhZ2VTZXNzaW9u
KCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQoZmlyc3RSZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24o
KSwgZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBV
UkwsIHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMgYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0Lgog
ICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0
IGJ5IHNlbmRpbmcgYW4gWE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVu
dGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVseQpAQCAtMzA2LDEyICszMDAsNiBAQCBS
ZXNvdXJjZVJlcXVlc3QgUmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kCiAgICAgZC0+bV9sYXN0SFRU
UE1ldGhvZCA9IHJlcXVlc3QuaHR0cE1ldGhvZCgpOwogICAgIHJlcXVlc3QucmVtb3ZlQ3JlZGVu
dGlhbHMoKTsKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgU3RyaW5nIHBh
cnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0
cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCi0KICAgICBpZiAoIXByb3Rv
Y29sSG9zdEFuZFBvcnRBcmVFcXVhbChyZXF1ZXN0LnVybCgpLCByZWRpcmVjdFJlc3BvbnNlLnVy
bCgpKSkgewogICAgICAgICAvLyBUaGUgbmV0d29yayBsYXllciBtaWdodCBjYXJyeSBvdmVyIHNv
bWUgaGVhZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRoYXQKICAgICAgICAgLy8gd2Ug
d2FudCB0byBzdHJpcCBoZXJlIGJlY2F1c2UgdGhlIHJlZGlyZWN0IGlzIGNyb3NzLW9yaWdpbi4K
QEAgLTMyMSw3ICszMDksNyBAQCBSZXNvdXJjZVJlcXVlc3QgUmVzb3VyY2VIYW5kbGU6OndpbGxT
ZW5kCiAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgYXBwbHlpbmcgYXV0aGVudGljYXRpb24gY3Jl
ZGVudGlhbHMgaWYgdGhpcyBpcyBhY3R1YWxseSBhIHJlZGlyZWN0IGFuZCB0aGUgcmVkaXJlY3QK
ICAgICAgICAgLy8gVVJMIGRpZG4ndCBpbmNsdWRlIGNyZWRlbnRpYWxzIG9mIGl0cyBvd24uCiAg
ICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkgJiYg
IXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIENyZWRlbnRpYWwgY3Jl
ZGVudGlhbCA9IGQtPm1fY29udGV4dC0+c3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFn
ZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOworICAgICAgICAgICAgQ3JlZGVudGlh
bCBjcmVkZW50aWFsID0gZC0+bV9jb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxT
dG9yYWdlKCkuZ2V0KGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCksIHJlcXVlc3QudXJs
KCkpOwogICAgICAgICAgICAgaWYgKCFjcmVkZW50aWFsLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRpYWwgPSBjcmVkZW50aWFsOwogICAgICAgICAgICAg
ICAgIApAQCAtMzk1LDEyICszODMsNiBAQCBib29sIFJlc291cmNlSGFuZGxlOjp0cnlIYW5kbGVQ
YXNzd29yZEJhCiAgICAgaWYgKCFjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaXNQYXNzd29y
ZEJhc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJU
SVRJT05JTkcpCi0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFy
dGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwot
I2VuZGlmCi0KICAgICBpZiAoIWQtPm1fdXNlci5pc051bGwoKSAmJiAhZC0+bV9wYXNzLmlzTnVs
bCgpKSB7CiAgICAgICAgIFJldGFpblB0cjxDRlVSTENyZWRlbnRpYWxSZWY+IGNmQ3JlZGVudGlh
bCA9IGFkb3B0Q0YoQ0ZVUkxDcmVkZW50aWFsQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGQt
Pm1fdXNlci5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBkLT5tX3Bhc3MuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgMCwga0NGVVJMQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkpOwogI2lmIFBMQVRG
T1JNKENPQ09BKQpAQCAtNDEyLDggKzM5NCw4IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnRyeUhh
bmRsZVBhc3N3b3JkQmEKICAgICAgICAgVVJMIHVybFRvU3RvcmU7CiAgICAgICAgIGlmIChjaGFs
bGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCiAgICAgICAg
ICAgICB1cmxUb1N0b3JlID0gY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOwotICAg
ICAgICBkLT5tX2NvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5z
ZXQocGFydGl0aW9uLCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIHVy
bFRvU3RvcmUpOwotICAgICAgICAKKyAgICAgICAgZC0+bV9jb250ZXh0LT5zdG9yYWdlU2Vzc2lv
bigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9u
KCksIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9yZSk7
CisKICAgICAgICAgQ0ZVUkxDb25uZWN0aW9uVXNlQ3JlZGVudGlhbChkLT5tX2Nvbm5lY3Rpb24u
Z2V0KCksIGNmQ3JlZGVudGlhbC5nZXQoKSwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5nZVJl
ZigpKTsKICAgICAgICAgZC0+bV91c2VyID0gU3RyaW5nKCk7CiAgICAgICAgIGQtPm1fcGFzcyA9
IFN0cmluZygpOwpAQCAtNDkwLDEzICs0NzIsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNl
aXZlZENyZWRlbnRpYWwoCiAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCku
aHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCiAgICAgICAgICAgICB1cmxUb1N0b3JlID0gY2hhbGxl
bmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOyAKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJ
T05JTkcpCi0gICAgICAgIFN0cmluZyBwYXJ0aXRpb24gPSBmaXJzdFJlcXVlc3QoKS5jYWNoZVBh
cnRpdGlvbigpOwotI2Vsc2UKLSAgICAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGVtcHR5U3RyaW5n
KCk7Ci0jZW5kaWYKLQotICAgICAgICBkLT5tX2NvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkuY3Jl
ZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9uLCB3ZWJDcmVkZW50aWFsLCBjaGFsbGVuZ2Uu
cHJvdGVjdGlvblNwYWNlKCksIHVybFRvU3RvcmUpOworICAgICAgICBkLT5tX2NvbnRleHQtPnN0
b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQoZmlyc3RSZXF1ZXN0KCkuY2Fj
aGVQYXJ0aXRpb24oKSwgd2ViQ3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgp
LCB1cmxUb1N0b3JlKTsKIAogICAgICAgICBpZiAoZC0+bV9jb25uZWN0aW9uKSB7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jl
c291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDE3ICs5NCw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
Q0ZTdHJpbmdSZWYgaXNVc2VySW5pdGlhdGVkS2V5KCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShD
QUNIRV9QQVJUSVRJT05JTkcpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBwYXJ0
aXRpb25OYW1lKGNvbnN0IFN0cmluZyYgZG9tYWluKTsKLSAgICBjb25zdCBTdHJpbmcmIGNhY2hl
UGFydGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZVBhcnRpdGlvbi5pc051bGwoKSA/IGVt
cHR5U3RyaW5nKCkgOiBtX2NhY2hlUGFydGl0aW9uOyB9Ci0gICAgdm9pZCBzZXRDYWNoZVBhcnRp
dGlvbihjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGNhY2hlUGFydGl0aW9uID09IHBhcnRpdGlvbk5hbWUoY2FjaGVQYXJ0aXRpb24pKTsKLSAgICAg
ICAgbV9jYWNoZVBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uOwotICAgIH0KLSAgICB2b2lkIHNl
dERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluKSB7IG1fY2FjaGVQ
YXJ0aXRpb24gPSBwYXJ0aXRpb25OYW1lKGRvbWFpbik7IH0KLSNlbmRpZgotCiAjaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCiAgICAgV0VCQ09SRV9FWFBPUlQgQ0ZV
UkxSZXF1ZXN0UmVmIGNmVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeSkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmKTsKQEAgLTEz
MSw5ICsxMjAsNiBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0
cjxOU1VSTFJlcXVlc3Q+IG1fbnNSZXF1ZXN0OwogI2VuZGlmCi0jaWYgRU5BQkxFKENBQ0hFX1BB
UlRJVElPTklORykKLSAgICBTdHJpbmcgbV9jYWNoZVBhcnRpdGlvbjsKLSNlbmRpZgogCiAgICAg
c3RhdGljIGJvb2wgc19odHRwUGlwZWxpbmluZ0VuYWJsZWQ7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVl
c3RDRk5ldC5jcHAJKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzUsMTQgKzE3NSwxMiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJl
CiAgICAgfQogICAgIHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheShj
ZlJlcXVlc3QsIGVuY29kaW5nRmFsbGJhY2tzLmdldCgpKTsKIAotI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uKCk7CiAg
ICAgaWYgKCFwYXJ0aXRpb24uaXNOdWxsKCkgJiYgIXBhcnRpdGlvbi5pc0VtcHR5KCkpIHsKICAg
ICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcGFydGl0aW9uLnV0ZjgoKTsKICAgICAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBwYXJ0aXRpb25WYWx1ZSA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVh
dGVXaXRoQnl0ZXMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KHV0ZjhTdHJpbmcu
ZGF0YSgpKSwgdXRmOFN0cmluZy5sZW5ndGgoKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4LCBmYWxz
ZSkpOwogICAgICAgICBfQ0ZVUkxSZXF1ZXN0U2V0UHJvdG9jb2xQcm9wZXJ0eShjZlJlcXVlc3Qs
IHdrQ2FjaGVQYXJ0aXRpb25LZXkoKSwgcGFydGl0aW9uVmFsdWUuZ2V0KCkpOwogICAgIH0KLSNl
bmRpZgogCiAgICAgbV9jZlJlcXVlc3QgPSBhZG9wdENGKGNmUmVxdWVzdCk7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCkBAIC0yOTEsMTEgKzI4OSw5IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1Vw
ZGF0ZVJlc291cmNlUmUKICAgICAgICAgfQogICAgIH0KIAotI2lmIEVOQUJMRShDQUNIRV9QQVJU
SVRJT05JTkcpCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjYWNoZVBhcnRpdGlvbiA9IGFk
b3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KF9DRlVSTFJlcXVlc3RDb3B5UHJvdG9jb2xQ
cm9wZXJ0eUZvcktleShtX2NmUmVxdWVzdC5nZXQoKSwgd2tDYWNoZVBhcnRpdGlvbktleSgpKSkp
OwogICAgIGlmIChjYWNoZVBhcnRpdGlvbikKICAgICAgICAgbV9jYWNoZVBhcnRpdGlvbiA9IGNh
Y2hlUGFydGl0aW9uLmdldCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpk
b1VwZGF0ZVJlc291cmNlSFRUUEJvZHkoKQpAQCAtMzYxLDMyICszNTcsNiBAQCB2b2lkIFJlc291
cmNlUmVxdWVzdDo6c2V0SFRUUFBpcGVsaW5pbmdFCiAgICAgc19odHRwUGlwZWxpbmluZ0VuYWJs
ZWQgPSBmbGFnOwogfQogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLVN0cmluZyBS
ZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBkb21haW4pCi17Ci0g
ICAgaWYgKGRvbWFpbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0j
aWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKLSAgICBTdHJpbmcgaGlnaExldmVsID0gdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihkb21haW4pOwotICAgIGlmIChoaWdoTGV2ZWwuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBoaWdoTGV2
ZWw7Ci0jZWxzZQotICAgIHJldHVybiBkb21haW47Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lk
IFJlc291cmNlUmVxdWVzdDo6ZG9QbGF0Zm9ybVNldEFzSXNvbGF0ZWRDb3B5KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgb3RoZXIpCi17Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAg
ICBtX2NhY2hlUGFydGl0aW9uID0gb3RoZXIubV9jYWNoZVBhcnRpdGlvbi5pc29sYXRlZENvcHko
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG90aGVyKTsKLSNlbmRpZgotfQotCi0KIC8vIEZJ
WE1FOiBJdCBpcyBjb25mdXNpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGJvdGggc2V0cyBjb25uZWN0
aW9uIGNvdW50IGFuZCBkZXRlcm1pbmVzIG1heGltdW0gcmVxdWVzdCBjb3VudCBhdCBuZXR3b3Jr
IGxheWVyLiBUaGlzIGNhbiBhbmQgc2hvdWxkIGJlIGRvbmUgc2VwYXJhdGVseS4KIHVuc2lnbmVk
IGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKQogewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
c3BvbnNlLmgJKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcGxhdGZvcm1TdWdnZXN0ZWRGaWxlbmFtZSgpIGNv
bnN0OwogICAgIENlcnRpZmljYXRlSW5mbyBwbGF0Zm9ybUNlcnRpZmljYXRlSW5mbygpIGNvbnN0
OwogCi0gICAgdm9pZCBkb1BsYXRmb3JtU2V0QXNJc29sYXRlZENvcHkoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIGNvbnN0OwotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBpbml0TlNV
UkxSZXNwb25zZSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2Eu
bW0JKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OCwxMyAr
MTQ4LDExIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmUKICAgICAg
ICAgICAgIG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXku
dW5jaGVja2VkQXBwZW5kKENGU3RyaW5nQ29udmVydEVuY29kaW5nVG9JQU5BQ2hhclNldE5hbWUo
ZW5jb2RpbmcpKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
IGlmIChtX25zUmVxdWVzdCkgewogICAgICAgICBOU1N0cmluZyogY2FjaGVQYXJ0aXRpb24gPSBb
TlNVUkxQcm90b2NvbCBwcm9wZXJ0eUZvcktleTooTlNTdHJpbmcgKil3a0NhY2hlUGFydGl0aW9u
S2V5KCkgaW5SZXF1ZXN0Om1fbnNSZXF1ZXN0LmdldCgpXTsKICAgICAgICAgaWYgKGNhY2hlUGFy
dGl0aW9uKQogICAgICAgICAgICAgbV9jYWNoZVBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uOwog
ICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVSZXNvdXJj
ZUhUVFBCb2R5KCkKQEAgLTIxOCwxMyArMjE2LDExIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpk
b1VwZGF0ZVBsYXRmb3JtUmUKICAgICB9CiAgICAgW25zUmVxdWVzdCBzZXRDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6ZW5jb2RpbmdGYWxsYmFja3NdOwogCi0jaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBTdHJpbmcgcGFydGl0aW9uID0gY2FjaGVQYXJ0
aXRpb24oKTsKICAgICBpZiAoIXBhcnRpdGlvbi5pc051bGwoKSAmJiAhcGFydGl0aW9uLmlzRW1w
dHkoKSkgewogICAgICAgICBOU1N0cmluZyAqcGFydGl0aW9uVmFsdWUgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6cGFydGl0aW9uLnV0ZjgoKS5kYXRhKCldOwogICAgICAgICBbTlNV
UkxQcm90b2NvbCBzZXRQcm9wZXJ0eTpwYXJ0aXRpb25WYWx1ZSBmb3JLZXk6KE5TU3RyaW5nICop
d2tDYWNoZVBhcnRpdGlvbktleSgpIGluUmVxdWVzdDpuc1JlcXVlc3RdOwogICAgIH0KLSNlbmRp
ZgogCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDEyMDApCiAgICAgaWYgKG1fdXJsLmlzTG9jYWxGaWxlKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmwuY3BwCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc5LDExICsxNzksNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewotI2lmIEVO
QUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVx
dWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBl
bXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAgICBpZiAoIWQtPm1fdXNlci5pc051bGwoKSAmJiAh
ZC0+bV9wYXNzLmlzTnVsbCgpKSB7CiAgICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbChkLT5t
X3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7CkBAIC0yNDEsMTEg
KzIzNyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCgKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAg
U3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxz
ZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAgICBp
ZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgewogICAgICAgICBpZiAoY2hhbGxlbmdl
LmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNDEsMTEgKzEwNDEsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdl
cjo6YXBwbHlBdXRoZW50CiAgICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2
ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1M
SHR0cFJlcXVlc3Qub3BlbigpLgogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5k
bGUtPmdldEludGVybmFsKCk7CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
IFN0cmluZyBwYXJ0aXRpb24gPSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9u
KCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlm
CiAKICAgICBpZiAoaGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7CiAgICAg
ICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jl
c291cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTQ2LDEyICsxNDYsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVOU1VSTENvbm5l
Y3RpCiAgICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxz
IHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3Ig
SFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCiAgICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNl
IHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgICAgICAgICAgU3RyaW5nIHBhcnRpdGlv
biA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgICAgICAgICAg
U3RyaW5nIHBhcnRpdGlvbiA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGQt
Pm1faW5pdGlhbENyZWRlbnRpYWwgPSBkLT5tX2NvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkuY3Jl
ZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0aW9uLCBmaXJzdFJlcXVlc3QoKS51cmwoKSk7Cisg
ICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gZC0+bV9jb250ZXh0LT5zdG9yYWdl
U2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFy
dGl0aW9uKCksIGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtub3duIGZv
ciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzIGJlZm9yZSBzZW5kaW5nIGEgcmVx
dWVzdC4KICAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50
IGxvZ291dCBieSBzZW5kaW5nIGFuIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0
IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAxLDExICsyMDEsNyBAQCBzdGF0aWMgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0
CiAgICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZv
ciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3Bl
bigpLgogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFs
KCk7CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIFN0cmluZyBwYXJ0aXRp
b24gPSBmaXJzdFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlvbigpOwotI2Vsc2UKLSAgICBTdHJpbmcg
cGFydGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogCiAgICAgaWYgKGhhbmRsZS0+c2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgewogICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1w
dHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKQpAQCAtODI5LDExICs4MjUsNyBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljCiB7CiAgICAgQVNTRVJUKGQtPm1fY3Vy
cmVudFdlYkNoYWxsZW5nZS5pc051bGwoKSk7CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9O
SU5HKQogICAgIFN0cmluZyBwYXJ0aXRpb24gPSBmaXJzdFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlv
bigpOwotI2Vsc2UKLSAgICBTdHJpbmcgcGFydGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKLSNlbmRp
ZgogCiAgICAgLy8gRklYTUU6IFBlciB0aGUgc3BlY2lmaWNhdGlvbiwgdGhlIHVzZXIgc2hvdWxk
bid0IGJlIGFza2VkIGZvciBjcmVkZW50aWFscyBpZiB0aGVyZSB3ZXJlIGluY29ycmVjdCBvbmVz
IHByb3ZpZGVkIGV4cGxpY2l0bHkuCiAgICAgYm9vbCB1c2VDcmVkZW50aWFsU3RvcmFnZSA9IHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CkBAIC04OTksMTEgKzg5MSw3IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCgKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9
IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0
aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAgICBpZiAoc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UoKSkgewogICAgICAgICAvLyBFdmVudHVhbGx5IHdlIHdpbGwgbWFuYWdlIHBl
ci1zZXNzaW9uIGNyZWRlbnRpYWxzIG9ubHkgaW50ZXJuYWxseSBvciB1c2Ugc29tZSBuZXdseS1l
eHBvc2VkIEFQSSBmcm9tIGxpYnNvdXAsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MSw5ICs1NjEsOCBAQCBib29sIEludGVybmFs
czo6aXNMb2FkaW5nRnJvbU1lbW9yeUNhY2hlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGNvbnRleHREb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1
cmwpKTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIHJlcXVlc3Quc2V0RG9t
YWluRm9yQ2FjaGVQYXJ0aXRpb24oY29udGV4dERvY3VtZW50KCktPnRvcE9yaWdpbigpLmRvbWFp
bkZvckNhY2hlUGFydGl0aW9uKCkpOwotI2VuZGlmCisgICAgCiAgICAgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLnJlc291cmNlRm9yUmVxdWVzdChy
ZXF1ZXN0LCBjb250ZXh0RG9jdW1lbnQoKS0+cGFnZSgpLT5zZXNzaW9uSUQoKSk7CiAgICAgcmV0
dXJuIHJlc291cmNlICYmIHJlc291cmNlLT5zdGF0dXMoKSA9PSBDYWNoZWRSZXNvdXJjZTo6Q2Fj
aGVkOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTctMDItMDgg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBtb3N0
IGNhc2VzIG9mICNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3OTkwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNo
ZTo6bWFrZUNhY2hlS2V5KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpjb25zdHJ1Y3RSZXZhbGlkYXRpb25SZXF1ZXN0KToKKyAgICAgICAgKiBTaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxS
ZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJl
c291cmNlUmVxdWVzdD46OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXS0NvbnRleHRSZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
bV9oaWRkZW5QYWdlVGhyb3R0bGluZ1RpbWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmNyZWF0ZU5ld1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5tbToKKyAgICAgICAgKEluaXRXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVk
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTctMDItMDcgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29ycmVjdCBpbml0aWFsaXphdGlvbiBv
ZiBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MgZm9yIHVzZSBpbiBXZWJLaXRUZXN0UnVubmVyCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
ay5jcHAJKHJldmlzaW9uIDIxMTg2OCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtEYXRhVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDExICs2Myw3IEBAIE5l
dHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmsKICAgICA6IG1fZmFpbHVyZVRp
bWVyKCp0aGlzLCAmTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKICAgICAsIG1f
c2Vzc2lvbihzZXNzaW9uKQogICAgICwgbV9jbGllbnQoJmNsaWVudCkKLSNpZiBFTkFCTEUoQ0FD
SEVfUEFSVElUSU9OSU5HKQogICAgICwgbV9wYXJ0aXRpb24ocmVxdWVzdFdpdGhDcmVkZW50aWFs
cy5jYWNoZVBhcnRpdGlvbigpKQotI2Vsc2UKLSAgICAsIG1fcGFydGl0aW9uKGVtcHR5U3RyaW5n
KCkpCi0jZW5kaWYKICAgICAsIG1fc3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMp
CiAgICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMuaHR0cE1ldGhv
ZCgpKQogICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVzdFdpdGhDcmVkZW50aWFscykKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcx
LDE3ICs1NzEsMTIgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQwog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2Uo
ZW50cnktPnJlc3BvbnNlKCksIG5lZWRzQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2VNZXNzYWdl
KSk7CiAKICAgICBpZiAoZW50cnktPnNvdXJjZVN0b3JhZ2VSZWNvcmQoKS5ib2R5SGFzaCAmJiAh
bV9wYXJhbWV0ZXJzLmRlcml2ZWRDYWNoZWREYXRhVHlwZXNUb1JldHJpZXZlLmlzRW1wdHkoKSkg
ewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgICAgIFN0cmluZyBwYXJ0aXRp
b24gPSBvcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlvbigpOwotI2Vsc2UKLSAgICAgICAg
U3RyaW5nIHBhcnRpdGlvbjsKLSNlbmRpZgogICAgICAgICBhdXRvIGJvZHlIYXNoID0gKmVudHJ5
LT5zb3VyY2VTdG9yYWdlUmVjb3JkKCkuYm9keUhhc2g7CiAgICAgICAgIGF1dG8qIGVudHJ5UHRy
ID0gZW50cnkucmVsZWFzZSgpOwogICAgICAgICBhdXRvIHJldHJpZXZlQ291bnQgPSBtX3BhcmFt
ZXRlcnMuZGVyaXZlZENhY2hlZERhdGFUeXBlc1RvUmV0cmlldmUuc2l6ZSgpOwogCiAgICAgICAg
IGZvciAoYXV0byYgdHlwZSA6IG1fcGFyYW1ldGVycy5kZXJpdmVkQ2FjaGVkRGF0YVR5cGVzVG9S
ZXRyaWV2ZSkgewotICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpEYXRhS2V5IGtleSB7IHBhcnRp
dGlvbiwgdHlwZSwgYm9keUhhc2ggfTsKKyAgICAgICAgICAgIE5ldHdvcmtDYWNoZTo6RGF0YUtl
eSBrZXkgeyBvcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlvbigpLCB0eXBlLCBib2R5SGFz
aCB9OwogICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZXRyaWV2ZURhdGEo
a2V5LCBbbG9hZGVyID0gbWFrZVJlZigqdGhpcyksIGVudHJ5UHRyLCB0eXBlLCByZXRyaWV2ZUNv
dW50XSAoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIG11dGFibGUgewogICAgICAg
ICAgICAgICAgIGxvYWRlci0+bV9yZXRyaWV2ZWREZXJpdmVkRGF0YUNvdW50Kys7CiAgICAgICAg
ICAgICAgICAgYm9vbCByZXRyaWV2ZWRBbGwgPSBsb2FkZXItPm1fcmV0cmlldmVkRGVyaXZlZERh
dGFDb3VudCA9PSByZXRyaWV2ZUNvdW50OwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCShyZXZpc2lvbiAyMTE4Njgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTYgKzExNiwxMCBAQCB2b2lkIENhY2hlOjpzZXRDYXBh
Y2l0eShzaXplX3QgbWF4aW11bVNpCiAKIEtleSBDYWNoZTo6bWFrZUNhY2hlS2V5KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFS
VElUSU9OSU5HKQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hlUGFydGl0aW9u
KCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb247Ci0jZW5kaWYKLQogICAgIC8vIEZJWE1F
OiBUaGlzIGltcGxlbWVudHMgbWluaW1hbCBSYW5nZSBoZWFkZXIgZGlzayBjYWNoZSBzdXBwb3J0
LiBXZSBkb24ndCBwYXJzZQogICAgIC8vIHJhbmdlcyBzbyBvbmx5IHRoZSBzYW1lIGV4YWN0IHJh
bmdlIHJlcXVlc3Qgd2lsbCBiZSBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGUuCiAgICAgU3RyaW5nIHJh
bmdlID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlJh
bmdlKTsKLSAgICByZXR1cm4geyBwYXJ0aXRpb24sIHJlc291cmNlVHlwZSgpLCByYW5nZSwgcmVx
dWVzdC51cmwoKS5zdHJpbmcoKSwgbV9zdG9yYWdlLT5zYWx0KCkgfTsKKyAgICByZXR1cm4geyBy
ZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCksIHJlc291cmNlVHlwZSgpLCByYW5nZSwgcmVxdWVzdC51
cmwoKS5zdHJpbmcoKSwgbV9zdG9yYWdlLT5zYWx0KCkgfTsKIH0KIAogc3RhdGljIGJvb2wgY2Fj
aGVQb2xpY3lBbGxvd3NFeHBpcmVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5
IHBvbGljeSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1h
bmFnZXIuY3BwCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODksMTEgKzg5LDEwIEBAIHN0YXRpYyBpbmxpbmUgUmVzb3VyY2VSZXF1ZXN0
IGNvbnN0cnVjdFIKICAgICBSZXNvdXJjZVJlcXVlc3QgcmV2YWxpZGF0aW9uUmVxdWVzdChrZXku
aWRlbnRpZmllcigpKTsKICAgICByZXZhbGlkYXRpb25SZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVs
ZHMoc3ViUmVzb3VyY2VJbmZvLnJlcXVlc3RIZWFkZXJzKCkpOwogICAgIHJldmFsaWRhdGlvblJl
cXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoc3ViUmVzb3VyY2VJbmZvLmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgaWYgKCFr
ZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKQogICAgICAgICByZXZhbGlkYXRpb25SZXF1ZXN0LnNl
dENhY2hlUGFydGl0aW9uKGtleS5wYXJ0aXRpb24oKSk7Ci0jZW5kaWYKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGtleS5yYW5nZSgpLmlzRW1wdHkoKSwgInJhbmdlIGlzIG5vdCBzdXBwb3J0ZWQi
KTsKKyAgICAKIAogICAgIHJldmFsaWRhdGlvblJlcXVlc3QubWFrZVVuY29uZGl0aW9uYWwoKTsK
ICAgICBpZiAoZW50cnkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc5
LDEwICs5NzksNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q3Vyc29yPjo6ZGVjb2RlKERlY29kCiAK
IHZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCiB7Ci0jaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5j
YWNoZVBhcnRpdGlvbigpOwotI2VuZGlmCi0KICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVz
dC5oaWRkZW5Gcm9tSW5zcGVjdG9yKCk7CiAKICAgICBpZiAocmVzb3VyY2VSZXF1ZXN0LmVuY29k
aW5nUmVxdWlyZXNQbGF0Zm9ybURhdGEoKSkgewpAQCAtOTk2LDEyICs5OTMsMTAgQEAgdm9pZCBB
cmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuYwogCiBib29sIEFyZ3VtZW50Q29kZXI8
UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1ZXN0KQogewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAg
ICAgU3RyaW5nIGNhY2hlUGFydGl0aW9uOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2FjaGVQ
YXJ0aXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzb3VyY2VSZXF1ZXN0LnNl
dENhY2hlUGFydGl0aW9uKGNhY2hlUGFydGl0aW9uKTsKLSNlbmRpZgogCiAgICAgYm9vbCBpc0hp
ZGRlbkZyb21JbnNwZWN0b3I7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0hpZGRlbkZyb21J
bnNwZWN0b3IpKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjExODY4KQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw5ICs5MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZW5jb2QKICAgICBlbmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5SXNv
bGF0ZWQ7CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQ7
CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQWx3YXlzUmV2YWxpZGF0ZWQ7
Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBlbmNvZGVyIDw8IHVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNDYWNoZVBhcnRpdGlvbmVkOwotI2VuZGlmCiAgICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKGNhY2hlTW9kZWwpOwogICAgIGVuY29kZXIgPDwgc2hvdWxkQWx3YXlzVXNlQ29tcGxl
eFRleHRDb2RlUGF0aDsKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZU1lbW9yeVByZXNzdXJl
UmVsaWVmTG9nZ2luZzsKQEAgLTIyMSwxMCArMjE5LDggQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpkZWNvZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNBbHdheXNSZXZhbGlk
YXRlZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9O
SU5HKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzQ2FjaGVQYXJ0aXRpb25lZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgog
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHBhcmFtZXRlcnMuY2FjaGVNb2RlbCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuc2hv
dWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9u
IDIxMTg2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5ICsxMDAsNyBAQCBzdHJ1Y3QgV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc0Rpc3BsYXlJc29sYXRlZDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVz
UmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQ7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc0Fsd2F5c1JldmFsaWRhdGVkOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05J
TkcpCiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NhY2hlUGFydGl0
aW9uZWQ7Ci0jZW5kaWYKIAogICAgIENhY2hlTW9kZWwgY2FjaGVNb2RlbDsKIApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAyMTE4
NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODcsMTAgKzE4Nyw4IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNz
UG9vbChBUEk6OlByb2MKICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+
YWx3YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2NoZW1lc1RvUmVnaXN0
ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCi0jaWYgRU5BQkxFKENBQ0hFX1BB
UlRJVElPTklORykKICAgICBmb3IgKGNvbnN0IGF1dG8mIHVybFNjaGVtZSA6IG1fY29uZmlndXJh
dGlvbi0+Y2FjaGVQYXJ0aXRpb25lZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9S
ZWdpc3RlckFzQ2FjaGVQYXJ0aXRpb25lZC5hZGQodXJsU2NoZW1lKTsKLSNlbmRpZgogCiAgICAg
cGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKQEAgLTU5Niw5ICs1OTQsNyBAQCBXZWJQcm9jZXNzUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVOCiAgICAgY29weVRvVmVjdG9yKG1fc2NoZW1lc1Rv
UmVnaXN0ZXJBc0Rpc3BsYXlJc29sYXRlZCwgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzRGlzcGxheUlzb2xhdGVkKTsKICAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3Rl
ckFzQ09SU0VuYWJsZWQsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NPUlNFbmFi
bGVkKTsKICAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxp
ZGF0ZWQsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Fsd2F5c1JldmFsaWRhdGVk
KTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGNvcHlUb1ZlY3RvcihtX3Nj
aGVtZXNUb1JlZ2lzdGVyQXNDYWNoZVBhcnRpdGlvbmVkLCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNDYWNoZVBhcnRpdGlvbmVkKTsKLSNlbmRpZgogCiAgICAgcGFyYW1ldGVycy5z
aG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoID0gbV9hbHdheXNVc2VzQ29tcGxleFRl
eHRDb2RlUGF0aDsKICAgICBwYXJhbWV0ZXJzLnNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBtX3No
b3VsZFVzZUZvbnRTbW9vdGhpbmc7CkBAIC0xMDA0LDEzICsxMDAwLDExIEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkwKICAgICAgICAgcHJvY2Vzc1Bvb2wtPnVucmVn
aXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCi0jaWYgRU5BQkxF
KENBQ0hFX1BBUlRJVElPTklORykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2No
ZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIG1f
c2NoZW1lc1RvUmVnaXN0ZXJBc0NhY2hlUGFydGl0aW9uZWQuYWRkKHVybFNjaGVtZSk7CiAgICAg
c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVt
ZUFzQ2FjaGVQYXJ0aXRpb25lZCh1cmxTY2hlbWUpKTsKIH0KLSNlbmRpZgogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCShyZXZpc2lvbiAyMTE4
NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEwLDkgKzIxMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyVVJM
U2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJlZ2lzdGVyVVJMU2No
ZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCByZWdpc3RlclVS
TFNjaGVtZUFzQ09SU0VuYWJsZWQoY29uc3QgU3RyaW5nJik7Ci0jaWYgRU5BQkxFKENBQ0hFX1BB
UlRJVElPTklORykKICAgICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVk
KGNvbnN0IFN0cmluZyYpOwotI2VuZGlmCiAKICAgICBWaXNpdGVkTGlua1N0b3JlJiB2aXNpdGVk
TGlua1N0b3JlKCkgeyByZXR1cm4gbV92aXNpdGVkTGlua1N0b3JlLmdldCgpOyB9CiAKQEAgLTQ5
OSw5ICs0OTcsNyBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1Jl
Z2lzdGVyQXNEaXNwbGF5SXNvbGF0ZWQ7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fc2NoZW1lc1Rv
UmVnaXN0ZXJBc0NPUlNFbmFibGVkOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1Jl
Z2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZDsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5H
KQogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDYWNoZVBhcnRpdGlv
bmVkOwotI2VuZGlmCiAKICAgICBib29sIG1fYWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGg7
CiAgICAgYm9vbCBtX3Nob3VsZFVzZUZvbnRTbW9vdGhpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkocmV2aXNpb24gMjExODY4KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3OSwxMiArMzc5LDcgQEAgdm9pZCBXS0NvbnRleHRSZWdpc3RlclVSTFNjaGVtZUFz
QnlwYXNzaQogCiB2b2lkIFdLQ29udGV4dFJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlv
bmVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiB1cmxTY2hlbWUpCiB7Ci0j
aWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICB0b0ltcGwoY29udGV4dFJlZiktPnJl
Z2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKHRvSW1wbCh1cmxTY2hlbWUpLT5zdHJp
bmcoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0UmVmKTsKLSAgICBVTlVTRURf
UEFSQU0odXJsU2NoZW1lKTsKLSNlbmRpZgogfQogCiB2b2lkIFdLQ29udGV4dFNldERvbWFpblJl
bGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdL
U3RyaW5nUmVmIHVybFNjaGVtZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDEwICszMzcsOCBAQCB2b2lk
IFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAgICAgZm9yIChhdXRvJiBzY2hl
bWUgOiBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNBbHdheXNSZXZhbGlkYXRlZCkK
ICAgICAgICAgcmVnaXN0ZXJVUkxTY2hlbWVBc0Fsd2F5c1JldmFsaWRhdGVkKHNjaGVtZSk7CiAK
LSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGZvciAoYXV0byYgc2NoZW1lIDog
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ2FjaGVQYXJ0aXRpb25lZCkKICAgICAg
ICAgcmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoc2NoZW1lKTsKLSNlbmRpZgog
CiAgICAgc2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwocGFyYW1ldGVycy5kZWZhdWx0
UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCk7CiAKQEAgLTQ2MiwxMiArNDYwLDEwIEBAIHZvaWQgV2Vi
UHJvY2Vzczo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Fsd2EKICAgICBTY2hlbWVSZWdpc3RyeTo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0Fsd2F5c1JldmFsaWRhdGVkKHVybFNjaGVtZSk7CiB9CiAKLSNpZiBF
TkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogdm9pZCBXZWJQcm9jZXNzOjpyZWdpc3RlclVSTFNj
aGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkgY29uc3QKIHsK
ICAgICBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQo
dXJsU2NoZW1lKTsKIH0KLSNlbmRpZgogCiB2b2lkIFdlYlByb2Nlc3M6OnNldERlZmF1bHRSZXF1
ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMjExODY4KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
Nyw5ICsyNTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3Bs
YXlJc29sYXRlZChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlZ2lzdGVyVVJMU2No
ZW1lQXNDT1JTRW5hYmxlZChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlZ2lzdGVy
VVJMU2NoZW1lQXNBbHdheXNSZXZhbGlkYXRlZChjb25zdCBTdHJpbmcmKSBjb25zdDsKLSNpZiBF
TkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0Nh
Y2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0jZW5kaWYKICAgICB2b2lkIHNl
dERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRBbHdh
eXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChib29sKTsKICAgICB2b2lkIHNldFNob3VsZFVzZUZv
bnRTbW9vdGhpbmcoYm9vbCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTM2LDkgKzM2LDcgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAg
ICAgUmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKFN0cmluZyBzY2hlbWUpCiAgICAgUmVnaXN0
ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChTdHJpbmcgc2NoZW1lKQogICAgIFJlZ2lzdGVy
VVJMU2NoZW1lQXNDT1JTRW5hYmxlZChTdHJpbmcgc2NoZW1lKQotI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCiAgICAgUmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoU3Ry
aW5nIHNjaGVtZSkKLSNlbmRpZgogICAgIFNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFs
KGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCiAgICAgU2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29k
ZVBhdGgoYm9vbCBhbHdheXNVc2VDb21wbGV4VGV4dCkKICAgICBTZXRTaG91bGRVc2VGb250U21v
b3RoaW5nKGJvb2wgdXNlRm9udFNtb290aGluZykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDIxMTg2OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU4OSwxMSArMTU4OSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0Q29va2ll
c0ZvclVSTChjb25zdCAKIAogYm9vbCBQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm8o
Y29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgdXNlcm5hbWUs
IFN0cmluZyYgcGFzc3dvcmQpCiB7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAg
ICBTdHJpbmcgcGFydGl0aW9uTmFtZSA9IG1fcGx1Z2luRWxlbWVudC0+Y29udGVudERvY3VtZW50
KCktPnRvcERvY3VtZW50KCkuc2VjdXJpdHlPcmlnaW4oKS5kb21haW5Gb3JDYWNoZVBhcnRpdGlv
bigpOwotI2Vsc2UKLSAgICBTdHJpbmcgcGFydGl0aW9uTmFtZSA9IGVtcHR5U3RyaW5nKCk7Ci0j
ZW5kaWYKICAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6ZGVm
YXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHBhcnRpdGlvbk5hbWUsIHByb3RlY3Rpb25TcGFj
ZSk7CiAgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQogICAgICAgICBjcmVkZW50aWFsID0g
Q3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldEZyb21QZXJz
aXN0ZW50U3RvcmFnZShwcm90ZWN0aW9uU3BhY2UpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5
c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTEsOSArMTExLDcgQEAgdm9pZCBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFj
ZSh2b2lkKQogICAgICAgICBJTklUKElzUHVibGljU3VmZml4KTsKICNlbmRpZgogCi0jaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICAgICAgSU5JVChDYWNoZVBhcnRpdGlvbktleSk7
Ci0jZW5kaWYKIAogICAgICAgICBJTklUKEV4ZXJuYWxEZXZpY2VUeXBlRm9yUGxheWVyKTsKICAg
ICAgICAgSU5JVChFeGVybmFsRGV2aWNlRGlzcGxheU5hbWVGb3JQbGF5ZXIpOwpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkocmV2aXNpb24gMjExODcwKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDItMDggIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBtb3N0IGNhc2VzIG9m
ICNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3OTkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tX
ZWJDYWNoZSBhZGRJbWFnZVRvQ2FjaGU6Zm9yVVJMOmZvckZyYW1lOl0pOgorICAgICAgICAoK1tX
ZWJDYWNoZSByZW1vdmVJbWFnZUZyb21DYWNoZUZvclVSTDpmb3JGcmFtZTpdKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW06CisgICAgICAgIChJbml0V2Vi
Q29yZVN5c3RlbUludGVyZmFjZSk6CisKIDIwMTctMDItMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBjcmVkZW50aWFscyBzaG91bGQgYmUg
cGFydGl0aW9uZWQgYnkgbWFpbiBkb2N1bWVudCBkb21haW4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDYWNoZS5tbQkocmV2aXNpb24gMjExODY4KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DcmVk
ZW50aWFsU3RvcmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Dcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL01lbW9yeUNhY2hlLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcu
aD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC00OCwxMCArNDksNiBAQAogI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkUnVuLmg+CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCi0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jZW5kaWYKLQog
QGltcGxlbWVudGF0aW9uIFdlYkNhY2hlCiAKICsgKHZvaWQpaW5pdGlhbGl6ZQpAQCAtMTY4LDEw
ICsxNjUsOCBAQCArIChib29sKWFkZEltYWdlVG9DYWNoZTooQ0dJbWFnZVJlZilpbWFnCiAgICAg
aWYgKCFpbWFnZSB8fCAhdXJsIHx8ICFbW3VybCBhYnNvbHV0ZVN0cmluZ10gbGVuZ3RoXSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiB0b3BPcmln
aW4gPSBudWxscHRyOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgaWYgKGZy
YW1lKQogICAgICAgICB0b3BPcmlnaW4gPSAmY29yZShmcmFtZSktPmRvY3VtZW50KCktPnRvcE9y
aWdpbigpOwotI2VuZGlmCiAgICAgcmV0dXJuIFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpzaW5nbGV0
b24oKS5hZGRJbWFnZVRvQ2FjaGUoUmV0YWluUHRyPENHSW1hZ2VSZWY+KGltYWdlKSwgdXJsLCB0
b3BPcmlnaW4gPyB0b3BPcmlnaW4tPmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKCkgOiBlbXB0eVN0
cmluZygpKTsKIH0KIApAQCAtMTg1LDEwICsxODAsOCBAQCArICh2b2lkKXJlbW92ZUltYWdlRnJv
bUNhY2hlRm9yVVJMOihOU1VSCiAgICAgaWYgKCF1cmwpCiAgICAgICAgIHJldHVybjsKICAgICBX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogdG9wT3JpZ2luID0gbnVsbHB0cjsKLSNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGlmIChmcmFtZSkKICAgICAgICAgdG9wT3JpZ2luID0g
JmNvcmUoZnJhbWUpLT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKTsKLSNlbmRpZgogICAgIFdlYkNv
cmU6Ok1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVJbWFnZUZyb21DYWNoZSh1cmwsIHRv
cE9yaWdpbiA/IHRvcE9yaWdpbi0+ZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKSA6IGVtcHR5U3Ry
aW5nKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJT
eXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lvbiAyMTE4NjgpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEyNCw5ICsxMjQsNyBAQCB2b2lkIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlKHZvaWQpCiAgICAgSU5JVChJc1B1YmxpY1N1ZmZpeCk7CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgSU5JVChDYWNoZVBhcnRpdGlvbktleSk7Ci0jZW5k
aWYKIAogICAgIElOSVQoRXhlcm5hbERldmljZVR5cGVGb3JQbGF5ZXIpOwogICAgIElOSVQoRXhl
cm5hbERldmljZURpc3BsYXlOYW1lRm9yUGxheWVyKTsK
</data>
<flag name="review"
          id="322761"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301023</attachid>
            <date>2017-02-09 01:21:28 -0800</date>
            <delta_ts>2017-02-09 02:25:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cache-partition-ifdef-2.patch</filename>
            <type>text/plain</type>
            <size>59867</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE3LTAyLTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbW9zdCBjYXNlcyBv
ZiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Nzk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlJ2xsIGp1c3QgcmV0dXJuIGVtcHR5IHN0cmluZyBm
b3IgdGhlIHBhcnRpdGlvbiBpZiBwYXJ0aXRpb25pbmcgaXMgbm90IGVuYWJsZWQuCisKKyAgICAg
ICAgKiBodG1sL0RPTVVSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01VUkw6OnJldm9rZU9i
amVjdFVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmxvYWRVUkwpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKToK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2U6OmNhY2hlUGFydGl0aW9uKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RVc2VyQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlUmVx
dWVzdDo6c2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOgorICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5
Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmV2YWxpZGF0aW9uU3VjY2VlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZUltYWdlRnJvbUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lbW9yeUNhY2hlOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJl
bW92ZVJlc291cmNlc1dpdGhPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6
OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNh
Y2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hl
OjpvcmlnaW5zV2l0aENhY2hlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
aDoKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik6CisgICAgICAgICogcGFn
ZS9TZWN1cml0eU9yaWdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlUGFydGl0aW9uaW5nU2NoZW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2hvdWxkUGFydGl0aW9uQ2FjaGVGb3JVUkxTY2hl
bWUpOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5Lmg6CisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW06CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
QmFzZTo6c2V0QXNJc29sYXRlZENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0QmFzZTo6c2V0Q2FjaGVQYXJ0aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6cGFydGl0aW9uTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpjYWNoZVBhcnRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdDo6Y2FjaGVQYXJ0aXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0OjpzZXRDYWNoZVBhcnRpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3Q6OnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNl
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5h
bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRm
b3JtU2V0QXNJc29sYXRlZENvcHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY29j
b2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QpOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNMb2FkaW5nRnJv
bU1lbW9yeUNhY2hlKToKKwogMjAxNy0wMi0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNwbGl0IEpTRE9NQ29uc3RydWN0b3IuaC9jcHAgdXAgYnkgY2xhc3MKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0
LDExICsxMjQsNyBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmNvbm5lY3QoY29uc3QgVVJMCiAg
ICAgICAgIHJlZigpOwogICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKICAgICAg
ICAgU2Vzc2lvbklEIHNlc3Npb25JRCA9IHBhZ2UgPyBwYWdlLT5zZXNzaW9uSUQoKSA6IFNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CiAgICAgICAgIFN0cmluZyBwYXJ0aXRpb24gPSBtX2RvY3VtZW50LT50b3BEb2N1bWVudCgpLnNl
Y3VyaXR5T3JpZ2luKCkuZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKTsKLSNlbHNlCi0gICAgICAg
IFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCiAgICAgICAgIG1faGFu
ZGxlID0gbV9zb2NrZXRQcm92aWRlci0+Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKG1faGFuZHNo
YWtlLT51cmwoKSwgKnRoaXMsIHNlc3Npb25JRCwgcGFydGl0aW9uKTsKICAgICB9CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTVVSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9ET01VUkwuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0RPTVVSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw5ICsxMjAsOCBAQCB2b2lk
IERPTVVSTDo6cmV2b2tlT2JqZWN0VVJMKFNjcmlwdEV4ZWN1CiB7CiAgICAgVVJMIHVybChVUkwo
KSwgdXJsU3RyaW5nKTsKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotI2lmIEVO
QUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgcmVxdWVzdC5zZXREb21haW5Gb3JDYWNoZVBh
cnRpdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0LnRvcE9yaWdpbigpLmRvbWFpbkZvckNhY2hl
UGFydGl0aW9uKCkpOwotI2VuZGlmCisKICAgICBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVzdEZy
b21TZXNzaW9uQ2FjaGVzKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHJlcXVlc3QpOwogCiAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC5wdWJsaWNVUkxNYW5hZ2VyKCkucmV2b2tlKHVybCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw5ICsyNjAsNyBAQCBDYWNoZWRS
ZXNvdXJjZSogSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoCiAgICAgQ2FjaGVkUmVzb3VyY2UqIGNh
Y2hlZFJlc291cmNlID0gZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCku
Y2FjaGVkUmVzb3VyY2UoTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVl
ZGVkKHVybCkpOwogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpIHsKICAgICAgICAgUmVzb3VyY2VS
ZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
ICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGZyYW1lLT5kb2N1bWVudCgp
LT50b3BPcmlnaW4oKS5kb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpKTsKLSNlbmRpZgogICAgICAg
ICBjYWNoZWRSZXNvdXJjZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZXNvdXJjZUZvclJl
cXVlc3QocmVxdWVzdCwgZnJhbWUtPnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAxLDEwICsxMjAxLDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFVSTChjb25zdCBGcmFt
ZUxvYQogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlZmVycmVyT3JpZ2luID0gU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcocmVmZXJyZXIpOwogICAgICAgICBhZGRIVFRQ
T3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgcmVmZXJyZXJPcmlnaW4tPnRvU3RyaW5nKCkpOwogICAg
IH0KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGlmICgmbV9mcmFtZS50cmVl
KCkudG9wKCkgIT0gJm1fZnJhbWUpCiAgICAgICAgIHJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQ
YXJ0aXRpb24obV9mcmFtZS50cmVlKCkudG9wKCkuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS5kb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpKTsKLSNlbmRpZgorCiAgICAgYWRkRXh0cmFGaWVs
ZHNUb1JlcXVlc3QocmVxdWVzdCwgbmV3TG9hZFR5cGUsIHRydWUpOwogICAgIGlmIChuZXdMb2Fk
VHlwZSA9PSBGcmFtZUxvYWRUeXBlOjpSZWxvYWQgfHwgbmV3TG9hZFR5cGUgPT0gRnJhbWVMb2Fk
VHlwZTo6UmVsb2FkRnJvbU9yaWdpbikKICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShS
ZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJj
aGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAkocmV2aXNpb24gMjExODkz
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNCw5ICs1MTQsOCBAQCBSZWZQdHI8TGVnYWN5V2ViQXJj
aGl2ZT4gTGVnYWN5V2ViQXJjaGl2CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qoc3VicmVzb3VyY2VVUkwpOwotI2lmIEVOQUJMRShD
QUNIRV9QQVJUSVRJT05JTkcpCiAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXREb21haW5Gb3JD
YWNoZVBhcnRpdGlvbihmcmFtZS5kb2N1bWVudCgpLT50b3BPcmlnaW4oKS5kb21haW5Gb3JDYWNo
ZVBhcnRpdGlvbigpKTsKLSNlbmRpZgorCiAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNhY2hl
ZFJlc291cmNlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLnJlc291cmNlRm9yUmVxdWVzdChy
ZXF1ZXN0LCBmcmFtZS5wYWdlKCktPnNlc3Npb25JRCgpKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoYXV0byByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKGNhY2hlZFJlc291
cmNlLT5yZXNvdXJjZUJ1ZmZlcigpLCBzdWJyZXNvdXJjZVVSTCwgY2FjaGVkUmVzb3VyY2UtPnJl
c3BvbnNlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXMuYXBwZW5k
KHJlc291cmNlLnJlbGVhc2VOb25OdWxsKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsOSArMTE0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KICAgICBSZXNv
dXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0
OyB9CiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVz
dC51cmwoKTt9Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBjb25zdCBTdHJp
bmcmIGNhY2hlUGFydGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3QuY2Fj
aGVQYXJ0aXRpb24oKTsgfQotI2VuZGlmCiAgICAgU2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE3LDEwICsyMTcsOCBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRDU1NTdHls
ZVNoZWV0CiAKIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IENhY2hl
ZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0JiYgcmVxdWVzdCkKIHsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
IEFTU0VSVChkb2N1bWVudCgpKTsKICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNhY2hlUGFydGl0
aW9uKCpkb2N1bWVudCgpKTsKLSNlbmRpZgogCiAgICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1v
cnlDYWNoZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKHJlcXVlc3QuYWxsb3dzQ2FjaGluZygpKSB7
CkBAIC03MzMsMTAgKzczMSw4IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNl
PiBDYWMKIAogICAgIC8vIFNlZSBpZiB3ZSBjYW4gdXNlIGFuIGV4aXN0aW5nIHJlc291cmNlIGZy
b20gdGhlIGNhY2hlLgogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBy
ZXNvdXJjZTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGlmIChkb2N1bWVu
dCgpKQogICAgICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKCpkb2N1bWVu
dCgpKTsKLSNlbmRpZgogCiAgICAgaWYgKHJlcXVlc3QuYWxsb3dzQ2FjaGluZygpKQogICAgICAg
ICByZXNvdXJjZSA9IG1lbW9yeUNhY2hlLnJlc291cmNlRm9yUmVxdWVzdChyZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLCBzZXNzaW9uSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjEx
ODkzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSwxMiArMTI5LDEwIEBAIHZvaWQgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0Ojp1cGdyYWRlSW5zZWMKICAgICB1cGdyYWRlSW5zZWN1cmVSZXNvdXJjZVJl
cXVlc3RJZk5lZWRlZChtX3Jlc291cmNlUmVxdWVzdCwgZG9jdW1lbnQpOwogfQogCi0jaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpzZXRE
b21haW5Gb3JDYWNoZVBhcnRpdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgbV9yZXNv
dXJjZVJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZG9jdW1lbnQudG9wT3JpZ2lu
KCkuZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKSk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGlu
ZSBTdHJpbmcgYWNjZXB0SGVhZGVyVmFsdWVGcm9tVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0
eXBlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
UmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw5ICs3NSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAg
IHZvaWQgYXBwbHlCbG9ja2VkU3RhdHVzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpCbG9ja2Vk
U3RhdHVzJik7CiAjZW5kaWYKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIHZv
aWQgc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oRG9jdW1lbnQmKTsKLSNlbmRpZgogICAgIGJv
b2wgaXNMaW5rUHJlbG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNMaW5rUHJlbG9hZDsgfQogICAg
IHZvaWQgc2V0SXNMaW5rUHJlbG9hZCgpIHsgbV9pc0xpbmtQcmVsb2FkID0gdHJ1ZTsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAJKHJldmlz
aW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMSArMTE1LDggQEAgYm9vbCBNZW1vcnlDYWNoZTo6
YWRkKENhY2hlZFJlc291cmNlJiByZQogCiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkp
OwogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBhdXRvIGtleSA9IHN0ZDo6
bWFrZV9wYWlyKHJlc291cmNlLnVybCgpLCByZXNvdXJjZS5jYWNoZVBhcnRpdGlvbigpKTsKLSNl
bHNlCi0gICAgYXV0byYga2V5ID0gcmVzb3VyY2UudXJsKCk7Ci0jZW5kaWYKKwogICAgIGVuc3Vy
ZVNlc3Npb25SZXNvdXJjZU1hcChyZXNvdXJjZS5zZXNzaW9uSUQoKSkuc2V0KGtleSwgJnJlc291
cmNlKTsKICAgICByZXNvdXJjZS5zZXRJbkNhY2hlKHRydWUpOwogICAgIApAQCAtMTQ0LDExICsx
NDEsOCBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZXZhbGlkYXRpb25TdWNjZWVkZWQoCiAgICAgcmVt
b3ZlKHJldmFsaWRhdGluZ1Jlc291cmNlKTsKIAogICAgIGF1dG8mIHJlc291cmNlcyA9IGVuc3Vy
ZVNlc3Npb25SZXNvdXJjZU1hcChyZXNvdXJjZS5zZXNzaW9uSUQoKSk7Ci0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKICAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHJlc291cmNl
LnVybCgpLCByZXNvdXJjZS5jYWNoZVBhcnRpdGlvbigpKTsKLSNlbHNlCi0gICAgYXV0byYga2V5
ID0gcmVzb3VyY2UudXJsKCk7Ci0jZW5kaWYKKwogICAgIEFTU0VSVCghcmVzb3VyY2VzLmdldChr
ZXkpKTsKICAgICByZXNvdXJjZXMuc2V0KGtleSwgJnJlc291cmNlKTsKICAgICByZXNvdXJjZS5z
ZXRJbkNhY2hlKHRydWUpOwpAQCAtMTg5LDExICsxODMsNyBAQCBDYWNoZWRSZXNvdXJjZSogTWVt
b3J5Q2FjaGU6OnJlc291cmNlRm9yCiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwog
ICAgIFVSTCB1cmwgPSByZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChyZXF1ZXN0LnVy
bCgpKTsKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgYXV0byBrZXkgPSBz
dGQ6Om1ha2VfcGFpcih1cmwsIHJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKSk7Ci0jZWxzZQotICAg
IGF1dG8mIGtleSA9IHVybDsKLSNlbmRpZgogICAgIHJldHVybiByZXNvdXJjZXMuZ2V0KGtleSk7
CiB9CiAKQEAgLTIzMiw5ICsyMjIsOCBAQCBib29sIE1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2Fj
aGUoTmF0aXZlCiAKICAgICBjYWNoZWRJbWFnZS0+YWRkQ2xpZW50KGR1bW15Q2FjaGVkSW1hZ2VD
bGllbnQoKSk7CiAgICAgY2FjaGVkSW1hZ2UtPnNldERlY29kZWRTaXplKGJpdG1hcEltYWdlLT5k
ZWNvZGVkU2l6ZSgpKTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGNhY2hl
ZEltYWdlLT5yZXNvdXJjZVJlcXVlc3QoKS5zZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihkb21h
aW5Gb3JDYWNoZVBhcnRpdGlvbik7Ci0jZW5kaWYKKwogICAgIHJldHVybiBhZGQoKmNhY2hlZElt
YWdlLnJlbGVhc2UoKSk7CiB9CiAKQEAgLTI0NCwxMiArMjMzLDggQEAgdm9pZCBNZW1vcnlDYWNo
ZTo6cmVtb3ZlSW1hZ2VGcm9tQ2FjaGUoYwogICAgIGlmICghcmVzb3VyY2VzKQogICAgICAgICBy
ZXR1cm47CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGF1dG8ga2V5ID0g
c3RkOjptYWtlX3BhaXIodXJsLCBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUoZG9tYWlu
Rm9yQ2FjaGVQYXJ0aXRpb24pKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvbWFpbkZvckNh
Y2hlUGFydGl0aW9uKTsKLSAgICBhdXRvJiBrZXkgPSB1cmw7Ci0jZW5kaWYKKwogICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IHJlc291cmNlcy0+Z2V0KGtleSk7CiAgICAgaWYgKCFyZXNv
dXJjZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDM5LDExICs0MjQsOCBAQCB2b2lkIE1lbW9yeUNh
Y2hlOjpyZW1vdmUoQ2FjaGVkUmVzb3VyY2UmCiAgICAgLy8gVGhlIHJlc291cmNlIG1heSBoYXZl
IGFscmVhZHkgYmVlbiByZW1vdmVkIGJ5IHNvbWVvbmUgb3RoZXIgdGhhbiBvdXIgY2FsbGVyLAog
ICAgIC8vIHdobyBuZWVkZWQgYSBmcmVzaCBjb3B5IGZvciBhIHJlbG9hZC4gU2VlIDxodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ3OSNjNj4uCiAgICAgaWYgKGF1dG8q
IHJlc291cmNlcyA9IHNlc3Npb25SZXNvdXJjZU1hcChyZXNvdXJjZS5zZXNzaW9uSUQoKSkpIHsK
LSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgICAgICBhdXRvIGtleSA9IHN0ZDo6
bWFrZV9wYWlyKHJlc291cmNlLnVybCgpLCByZXNvdXJjZS5jYWNoZVBhcnRpdGlvbigpKTsKLSNl
bHNlCi0gICAgICAgIGF1dG8mIGtleSA9IHJlc291cmNlLnVybCgpOwotI2VuZGlmCisKICAgICAg
ICAgaWYgKHJlc291cmNlLmluQ2FjaGUoKSkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHJlc291
cmNlIGZyb20gdGhlIHJlc291cmNlIG1hcC4KICAgICAgICAgICAgIHJlc291cmNlcy0+cmVtb3Zl
KGtleSk7CkBAIC01MjcsMjEgKzUwOSwxNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUFj
Y2Vzc2VkKENhY2hlCiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmln
aW4oU2VjdXJpdHlPcmlnaW4mIG9yaWdpbikKIHsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9O
SU5HKQogICAgIFN0cmluZyBvcmlnaW5QYXJ0aXRpb24gPSBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRp
dGlvbk5hbWUob3JpZ2luLmhvc3QoKSk7Ci0jZW5kaWYKIAogICAgIFZlY3RvcjxDYWNoZWRSZXNv
dXJjZSo+IHJlc291cmNlc1dpdGhPcmlnaW47CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBt
X3Nlc3Npb25SZXNvdXJjZXMudmFsdWVzKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1
ZSA6ICpyZXNvdXJjZXMpIHsKICAgICAgICAgICAgIGF1dG8mIHJlc291cmNlID0gKmtleVZhbHVl
LnZhbHVlOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgICAgICAgICBhdXRv
JiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKICAgICAgICAgICAgIGlmIChw
YXJ0aXRpb25OYW1lID09IG9yaWdpblBhcnRpdGlvbikgewogICAgICAgICAgICAgICAgIHJlc291
cmNlc1dpdGhPcmlnaW4uYXBwZW5kKCZyZXNvdXJjZSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4gcmVzb3VyY2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291cmNlLnVy
bCgpKTsKICAgICAgICAgICAgIGlmIChyZXNvdXJjZU9yaWdpbi0+ZXF1YWwoJm9yaWdpbikpCiAg
ICAgICAgICAgICAgICAgcmVzb3VyY2VzV2l0aE9yaWdpbi5hcHBlbmQoJnJlc291cmNlKTsKQEAg
LTU1OCwyNSArNTM2LDE5IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dpdGhP
cmkKICAgICBpZiAoIXJlc291cmNlTWFwKQogICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQogICAgIEhhc2hTZXQ8U3RyaW5nPiBvcmlnaW5QYXJ0aXRpb25z
OwogCiAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKQogICAgICAgICBvcmlnaW5QYXJ0
aXRpb25zLmFkZChSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUob3JpZ2luLT5ob3N0KCkp
KTsKLSNlbmRpZgogCiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gcmVzb3VyY2VzVG9SZW1v
dmU7CiAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiAqcmVzb3VyY2VNYXApIHsKICAgICAg
ICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWVQYWlyLnZhbHVlOwotCi0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKICAgICAgICAgYXV0byYgcGFydGl0aW9uTmFtZSA9IGtleVZhbHVl
UGFpci5rZXkuc2Vjb25kOwogICAgICAgICBpZiAob3JpZ2luUGFydGl0aW9ucy5jb250YWlucyhw
YXJ0aXRpb25OYW1lKSkgewogICAgICAgICAgICAgcmVzb3VyY2VzVG9SZW1vdmUuYXBwZW5kKCZy
ZXNvdXJjZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotI2VuZGlmCi0KICAg
ICAgICAgaWYgKG9yaWdpbnMuY29udGFpbnMoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNvdXJj
ZS51cmwoKSkucHRyKCkpKQogICAgICAgICAgICAgcmVzb3VyY2VzVG9SZW1vdmUuYXBwZW5kKCZy
ZXNvdXJjZSk7CiAgICAgfQpAQCAtNTg3LDE5ICs1NTksMTQgQEAgdm9pZCBNZW1vcnlDYWNoZTo6
cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaQogCiB2b2lkIE1lbW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0
aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5zKQogewotI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gaHR0cFN0cmlu
ZygiaHR0cCIpOwotI2VuZGlmCiAgICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nlc3Npb25S
ZXNvdXJjZXMudmFsdWVzKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICpyZXNv
dXJjZXMpIHsKICAgICAgICAgICAgIGF1dG8mIHJlc291cmNlID0gKmtleVZhbHVlLnZhbHVlOwot
I2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgICAgICAgICBhdXRvJiBwYXJ0aXRp
b25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKICAgICAgICAgICAgIGlmICghcGFydGl0aW9u
TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShodHRwU3RyaW5nLCBwYXJ0aXRpb25OYW1lLCAwKSk7CisgICAgICAgICAgICAg
ICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShBU0NJSUxpdGVyYWwoImh0dHAi
KSwgcGFydGl0aW9uTmFtZSwgMCkpOwogICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAg
ICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291cmNlLnVybCgpKSk7
CisgICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNv
dXJjZS51cmwoKSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNjEyLDEzICs1NzksMTEgQEAg
SGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBNZW1vcnlDYQogICAgIGlmIChpdCAhPSBt
X3Nlc3Npb25SZXNvdXJjZXMuZW5kKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6
ICppdC0+dmFsdWUpIHsKICAgICAgICAgICAgIGF1dG8mIHJlc291cmNlID0gKmtleVZhbHVlLnZh
bHVlOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgICAgICAgICBhdXRvJiBw
YXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKICAgICAgICAgICAgIGlmICghcGFy
dGl0aW9uTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZSgiaHR0cCIsIHBhcnRpdGlvbk5hbWUsIDApKTsKICAgICAgICAgICAg
IGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZShyZXNvdXJjZS51cmwoKSkpOworICAgICAgICAgICAgICAgIG9yaWdpbnMuYWRkKFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkpKTsKICAgICAgICAgfQogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJKHJldmlzaW9u
IDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjgsMTEgKzE2OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHBydW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplLCBi
b29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgPSBmYWxzZSk7
CiAKIHByaXZhdGU6Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICB0eXBlZGVm
IEhhc2hNYXA8c3RkOjpwYWlyPFVSTCwgU3RyaW5nIC8qIHBhcnRpdGlvbk5hbWUgKi8+LCBDYWNo
ZWRSZXNvdXJjZSo+IENhY2hlZFJlc291cmNlTWFwOwotI2Vsc2UKLSAgICB0eXBlZGVmIEhhc2hN
YXA8VVJMLCBDYWNoZWRSZXNvdXJjZSo+IENhY2hlZFJlc291cmNlTWFwOwotI2VuZGlmCiAgICAg
dHlwZWRlZiBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IExSVUxpc3Q7CiAKICAgICBNZW1v
cnlDYWNoZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJl
dmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNyArMzk1LDYgQEAgdm9pZCBTZWN1cml0eU9yaWdpbjo6
Z3JhbnRTdG9yYWdlQWNjZXNzRgogICAgIG1fbmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxz
UXVpcmsgPSB0cnVlOwogfQogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKIFN0cmlu
ZyBTZWN1cml0eU9yaWdpbjo6ZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKSBjb25zdAogewogICAg
IGlmIChtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSAhPSBCbG9ja1RoaXJkUGFydHlTdG9yYWdlKQpA
QCAtNDA5LDcgKzQwOCw2IEBAIFN0cmluZyBTZWN1cml0eU9yaWdpbjo6ZG9tYWluRm9yQ2FjaGVQ
YXIKIAogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQotI2VuZGlmCiAKIHZvaWQgU2VjdXJp
dHlPcmlnaW46OmVuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24oKQogewpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOSArMTM4LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmso
KTsKICAgICBib29sIG5lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyazsgfQogCi0jaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZG9t
YWluRm9yQ2FjaGVQYXJ0aXRpb24oKSBjb25zdDsKLSNlbmRpZgogCiAgICAgYm9vbCBjYW5BY2Nl
c3NEYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luKSBjb25zdCB7IHJldHVy
biBjYW5BY2Nlc3NTdG9yYWdlKCZ0b3BPcmlnaW4pOyB9OwogICAgIGJvb2wgY2FuQWNjZXNzU2Vz
c2lvblN0b3JhZ2UoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdpbikgY29uc3QgeyByZXR1
cm4gY2FuQWNjZXNzU3RvcmFnZSgmdG9wT3JpZ2luLCBBbHdheXNBbGxvd0Zyb21UaGlyZFBhcnR5
KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcAko
cmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTMgKzE2NywxMSBAQCBzdGF0aWMgVVJMU2No
ZW1lc01hcCYgQ29udGVudFNlY3VyaXR5UG9sCiAgICAgcmV0dXJuIHNjaGVtZXM7CiB9CiAKLSNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogc3RhdGljIFVSTFNjaGVtZXNNYXAmIGNhY2hl
UGFydGl0aW9uaW5nU2NoZW1lcygpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVSTFNj
aGVtZXNNYXA+IHNjaGVtZXM7CiAgICAgcmV0dXJuIHNjaGVtZXM7CiB9Ci0jZW5kaWYKIAogc3Rh
dGljIFVSTFNjaGVtZXNNYXAmIGFsd2F5c1JldmFsaWRhdGVkU2NoZW1lcygpCiB7CkBAIC0zNDMs
NyArMzQxLDYgQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkQWx3YXlzUmV2YWxpZAogICAg
IHJldHVybiBhbHdheXNSZXZhbGlkYXRlZFNjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOwogfQog
Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKIHZvaWQgU2NoZW1lUmVnaXN0cnk6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgc2NoZW1lKQog
ewogICAgIGNhY2hlUGFydGl0aW9uaW5nU2NoZW1lcygpLmFkZChzY2hlbWUpOwpAQCAtMzU1LDcg
KzM1Miw2IEBAIGJvb2wgU2NoZW1lUmVnaXN0cnk6OnNob3VsZFBhcnRpdGlvbkNhY2gKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBjYWNoZVBhcnRpdGlvbmluZ1NjaGVtZXMoKS5j
b250YWlucyhzY2hlbWUpOwogfQotI2VuZGlmCiAKIGJvb2wgU2NoZW1lUmVnaXN0cnk6OmlzVXNl
ckV4dGVuc2lvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAkocmV2aXNpb24gMjExODkzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAt
OTQsMTEgKzk0LDkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyVVJMU2NoZW1lQXNBbHdheXNSZXZhbGlkYXRlZChjb25zdCBTdHJpbmcmKTsKICAgICBz
dGF0aWMgYm9vbCBzaG91bGRBbHdheXNSZXZhbGlkYXRlVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYp
OwogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICAvLyBTY2hlbWVzIHdob3Nl
IHJlcXVlc3RzIHNob3VsZCBiZSBwYXJ0aXRpb25lZCBpbiB0aGUgY2FjaGUKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChj
b25zdCBTdHJpbmcmIHNjaGVtZSk7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkUGFydGl0aW9uQ2Fj
aGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpOwotI2VuZGlmCiAKICAgICBzdGF0
aWMgYm9vbCBpc1VzZXJFeHRlbnNpb25TY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNl
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlSU9TLm1tCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNjYsOSArNjYsNyBAQCBXRUJDT1JFX0VYUE9SVCBDRlN0cmluZ1JlZigqd2tDYXB0aW9u
QXBwCiBXRUJDT1JFX0VYUE9SVCBib29sICgqd2tJc1B1YmxpY1N1ZmZpeCkoTlNTdHJpbmcgKmhv
c3QpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogV0VCQ09SRV9F
WFBPUlQgQ0ZTdHJpbmdSZWYgKCp3a0NhY2hlUGFydGl0aW9uS2V5KSh2b2lkKTsKLSNlbmRpZgog
CiBXRUJDT1JFX0VYUE9SVCBpbnQgKCp3a0V4ZXJuYWxEZXZpY2VUeXBlRm9yUGxheWVyKShBVlBs
YXllciAqKTsKIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICooKndrRXhlcm5hbERldmljZURpc3Bs
YXlOYW1lRm9yUGxheWVyKShBVlBsYXllciAqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkocmV2aXNpb24gMjEx
ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDkgKzIzNSw3IEBAIGV4dGVybiBDR0Zsb2F0ICgq
d2tOU1JlYm91bmREZWx0YUZvckVsYXMKIGV4dGVybiBib29sICgqd2tJc1B1YmxpY1N1ZmZpeCko
TlNTdHJpbmcgKmhvc3QpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5H
KQogZXh0ZXJuIENGU3RyaW5nUmVmICgqd2tDYWNoZVBhcnRpdGlvbktleSkodm9pZCk7Ci0jZW5k
aWYKIAogdHlwZWRlZiBlbnVtIHsKICAgICB3a0V4dGVybmFsUGxheWJhY2tUeXBlTm9uZSwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLm1tCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkg
KzExMyw3IEBAIENHRmxvYXQgKCp3a05TUmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHQKIGJvb2wg
KCp3a0lzUHVibGljU3VmZml4KShOU1N0cmluZyAqaG9zdCk7CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShDQUNIRV9QQVJUSVRJT05JTkcpCiBDRlN0cmluZ1JlZiAoKndrQ2FjaGVQYXJ0aXRpb25LZXkp
KHZvaWQpOwotI2VuZGlmCiAKIGludCAoKndrRXhlcm5hbERldmljZVR5cGVGb3JQbGF5ZXIpKEFW
UGxheWVyICopOwogTlNTdHJpbmcgKigqd2tFeGVybmFsRGV2aWNlRGlzcGxheU5hbWVGb3JQbGF5
ZXIpKEFWUGxheWVyICopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHJldmlzaW9uIDIxMTg5MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMSArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9jbGllbnQoY2xpZW50KQogICAgICAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3QpCiAgICAg
ICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0Lmh0dHBNZXRob2QoKSkKLSNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQogICAgICAgICAsIG1fcGFydGl0aW9uKHJlcXVlc3QuY2FjaGVQ
YXJ0aXRpb24oKSkKLSNlbHNlCi0gICAgICAgICwgbV9wYXJ0aXRpb24oZW1wdHlTdHJpbmcoKSkK
LSNlbmRpZgogICAgICAgICAsIG1fZGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKQogICAgICAg
ICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKICAgICAgICAgLCBt
X3VzZXNBc3luY0NhbGxiYWNrcyhjbGllbnQgJiYgY2xpZW50LT51c2VzQXN5bmNDYWxsYmFja3Mo
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdEJhc2UuaCIKIAog
I2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgog
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFy
aXNvbi5oPgogCkBAIC02Niw2ICs2Nyw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0
QXNJc29sYXRlZEMKICAgICBzZXRQcmlvcml0eShvdGhlci5wcmlvcml0eSgpKTsKICAgICBzZXRS
ZXF1ZXN0ZXIob3RoZXIucmVxdWVzdGVyKCkpOwogICAgIHNldEluaXRpYXRvcklkZW50aWZpZXIo
b3RoZXIuaW5pdGlhdG9ySWRlbnRpZmllcigpLmlzb2xhdGVkQ29weSgpKTsKKyAgICBzZXRDYWNo
ZVBhcnRpdGlvbihvdGhlci5jYWNoZVBhcnRpdGlvbigpKTsKIAogICAgIHVwZGF0ZVJlc291cmNl
UmVxdWVzdCgpOwogICAgIG1faHR0cEhlYWRlckZpZWxkcyA9IG90aGVyLmh0dHBIZWFkZXJGaWVs
ZHMoKS5pc29sYXRlZENvcHkoKTsKQEAgLTg2LDggKzg4LDYgQEAgdm9pZCBSZXNvdXJjZVJlcXVl
c3RCYXNlOjpzZXRBc0lzb2xhdGVkQwogICAgIGlmIChvdGhlci5tX2h0dHBCb2R5KQogICAgICAg
ICBzZXRIVFRQQm9keShvdGhlci5tX2h0dHBCb2R5LT5pc29sYXRlZENvcHkoKSk7CiAgICAgc2V0
QWxsb3dDb29raWVzKG90aGVyLm1fYWxsb3dDb29raWVzKTsKLQotICAgIGNvbnN0X2Nhc3Q8UmVz
b3VyY2VSZXF1ZXN0Jj4oYXNSZXNvdXJjZVJlcXVlc3QoKSkuZG9QbGF0Zm9ybVNldEFzSXNvbGF0
ZWRDb3B5KG90aGVyKTsKIH0KIAogYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjppc0VtcHR5KCkg
Y29uc3QKQEAgLTY0MCw0ICs2NDAsMzMgQEAgYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWZh
dWx0QWxsb3dDbwogfQogI2VuZGlmCiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0Q2Fj
aGVQYXJ0aXRpb24oY29uc3QgU3RyaW5nJiBjYWNoZVBhcnRpdGlvbikKK3sKKyNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQorICAgIEFTU0VSVCghY2FjaGVQYXJ0aXRpb24uaXNOdWxsKCkp
OworICAgIEFTU0VSVChjYWNoZVBhcnRpdGlvbiA9PSBwYXJ0aXRpb25OYW1lKGNhY2hlUGFydGl0
aW9uKSk7CisgICAgbV9jYWNoZVBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oY2FjaGVQYXJ0aXRpb24pOworI2VuZGlmCit9CisKK1N0cmluZyBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGNvbnN0IFN0cmluZyYgZG9tYWluKQorewor
I2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpICYmICFFTkFCTEUoUFVCTElDX1NVRkZJWF9M
SVNUKQorI2Vycm9yCisjZW5kaWYKKworI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCisg
ICAgaWYgKGRvbWFpbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cisg
ICAgU3RyaW5nIGhpZ2hMZXZlbCA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oZG9tYWlu
KTsKKyAgICBpZiAoaGlnaExldmVsLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKKyAgICByZXR1cm4gaGlnaExldmVsOworI2Vsc2UKKyAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKKyNlbmRpZgorfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gMjExODkzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMTEgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHBhcnRpdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBk
b21haW4pOworICAgIGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlUGFydGl0aW9uOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYWNoZVBh
cnRpdGlvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldERvbWFpbkZvckNhY2hlUGFydGl0
aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluKSB7IHNldENhY2hlUGFydGl0aW9uKHBhcnRpdGlvbk5h
bWUoZG9tYWluKSk7IH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNDb25kaXRpb25hbCgp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWFrZVVuY29uZGl0aW9uYWwoKTsKIApA
QCAtMjM3LDYgKzI0Miw3IEBAIHByb3RlY3RlZDoKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBt
X3ByaW9yaXR5IHsgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB9OwogICAgIFJlcXVlc3RlciBt
X3JlcXVlc3RlciB7IFJlcXVlc3Rlcjo6VW5zcGVjaWZpZWQgfTsKICAgICBTdHJpbmcgbV9pbml0
aWF0b3JJZGVudGlmaWVyOworICAgIFN0cmluZyBtX2NhY2hlUGFydGl0aW9uIHsgZW1wdHlTdHJp
bmcoKSB9OwogCiBwcml2YXRlOgogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYXNSZXNvdXJj
ZVJlcXVlc3QoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkocmV2aXNpb24gMjEx
ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRs
ZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDExICsxMzcsNyBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3RpCiAgICAgICAgIGZpcnN0UmVxdWVzdCgpLnNl
dFVSTCh1cmxXaXRoQ3JlZGVudGlhbHMpOwogICAgIH0KIAotI2lmIEVOQUJMRShDQUNIRV9QQVJU
SVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFy
dGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwot
I2VuZGlmCiAKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0
IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAg
QmFzaWMgYXV0aGVudGljYXRpb24sCiAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlh
bCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCkBAIC0zMDYsMTEgKzMwMiw3
IEBAIFJlc291cmNlUmVxdWVzdCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmQKICAgICBkLT5tX2xh
c3RIVFRQTWV0aG9kID0gcmVxdWVzdC5odHRwTWV0aG9kKCk7CiAgICAgcmVxdWVzdC5yZW1vdmVD
cmVkZW50aWFscygpOwogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBTdHJp
bmcgcGFydGl0aW9uID0gZmlyc3RSZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24oKTsKLSNlbHNlCi0g
ICAgU3RyaW5nIHBhcnRpdGlvbiA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIAogICAgIGlmICgh
cHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKHJlcXVlc3QudXJsKCksIHJlZGlyZWN0UmVzcG9u
c2UudXJsKCkpKSB7CiAgICAgICAgIC8vIFRoZSBuZXR3b3JrIGxheWVyIG1pZ2h0IGNhcnJ5IG92
ZXIgc29tZSBoZWFkZXJzIGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QgdGhhdApAQCAtMzk1LDEx
ICszODcsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjp0cnlIYW5kbGVQYXNzd29yZEJhCiAgICAg
aWYgKCFjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaXNQYXNzd29yZEJhc2VkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAg
U3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxz
ZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAgICBp
ZiAoIWQtPm1fdXNlci5pc051bGwoKSAmJiAhZC0+bV9wYXNzLmlzTnVsbCgpKSB7CiAgICAgICAg
IFJldGFpblB0cjxDRlVSTENyZWRlbnRpYWxSZWY+IGNmQ3JlZGVudGlhbCA9IGFkb3B0Q0YoQ0ZV
UkxDcmVkZW50aWFsQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGQtPm1fdXNlci5jcmVhdGVD
RlN0cmluZygpLmdldCgpLCBkLT5tX3Bhc3MuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMCwga0NG
VVJMQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkpOwpAQCAtNDkwLDEzICs0NzgsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoCiAgICAgICAgIGlmIChjaGFsbGVu
Z2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCiAgICAgICAgICAg
ICB1cmxUb1N0b3JlID0gY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOyAKIAotI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgICAgIFN0cmluZyBwYXJ0aXRpb24gPSBm
aXJzdFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlvbigpOwotI2Vsc2UKLSAgICAgICAgU3RyaW5nIHBh
cnRpdGlvbiA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKLQotICAgICAgICBkLT5tX2NvbnRleHQt
PnN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9uLCB3ZWJD
cmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIHVybFRvU3RvcmUpOworICAg
ICAgICBkLT5tX2NvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5z
ZXQoZmlyc3RSZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24oKSwgd2ViQ3JlZGVudGlhbCwgY2hhbGxl
bmdlLnByb3RlY3Rpb25TcGFjZSgpLCB1cmxUb1N0b3JlKTsKIAogICAgICAgICBpZiAoZC0+bV9j
b25uZWN0aW9uKSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9u
IDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VS
ZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDE3ICs5NCw2IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgQ0ZTdHJpbmdSZWYgaXNVc2VySW5pdGlhdGVkS2V5KCk7CiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyBwYXJ0aXRpb25OYW1lKGNvbnN0IFN0cmluZyYgZG9tYWluKTsKLSAg
ICBjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZVBh
cnRpdGlvbi5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBtX2NhY2hlUGFydGl0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRDYWNoZVBhcnRpdGlvbihjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGNhY2hlUGFydGl0aW9uID09IHBhcnRpdGlvbk5hbWUoY2Fj
aGVQYXJ0aXRpb24pKTsKLSAgICAgICAgbV9jYWNoZVBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9u
OwotICAgIH0KLSAgICB2b2lkIHNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGNvbnN0IFN0cmlu
ZyYgZG9tYWluKSB7IG1fY2FjaGVQYXJ0aXRpb24gPSBwYXJ0aXRpb25OYW1lKGRvbWFpbik7IH0K
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJT04pCiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ0ZVUkxSZXF1ZXN0UmVmIGNmVVJMUmVxdWVzdChIVFRQQm9keVVw
ZGF0ZVBvbGljeSkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmKTsKQEAgLTEzMSw5ICsxMjAsNiBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIFJldGFpblB0cjxOU1VSTFJlcXVlc3Q+IG1fbnNSZXF1ZXN0OwogI2VuZGlm
Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICBTdHJpbmcgbV9jYWNoZVBhcnRp
dGlvbjsKLSNlbmRpZgogCiAgICAgc3RhdGljIGJvb2wgc19odHRwUGlwZWxpbmluZ0VuYWJsZWQ7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3RDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsMTQgKzE3NSwxMiBAQCB2b2lkIFJlc291cmNlUmVxdWVz
dDo6ZG9VcGRhdGVQbGF0Zm9ybVJlCiAgICAgfQogICAgIHNldENvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheShjZlJlcXVlc3QsIGVuY29kaW5nRmFsbGJhY2tzLmdldCgpKTsK
IAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9
IGNhY2hlUGFydGl0aW9uKCk7CiAgICAgaWYgKCFwYXJ0aXRpb24uaXNOdWxsKCkgJiYgIXBhcnRp
dGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcGFydGl0aW9u
LnV0ZjgoKTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXJ0aXRpb25WYWx1ZSA9
IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVSW50OCo+KHV0ZjhTdHJpbmcuZGF0YSgpKSwgdXRmOFN0cmluZy5sZW5ndGgoKSwga0NGU3Ry
aW5nRW5jb2RpbmdVVEY4LCBmYWxzZSkpOwogICAgICAgICBfQ0ZVUkxSZXF1ZXN0U2V0UHJvdG9j
b2xQcm9wZXJ0eShjZlJlcXVlc3QsIHdrQ2FjaGVQYXJ0aXRpb25LZXkoKSwgcGFydGl0aW9uVmFs
dWUuZ2V0KCkpOwogICAgIH0KLSNlbmRpZgogCiAgICAgbV9jZlJlcXVlc3QgPSBhZG9wdENGKGNm
UmVxdWVzdCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0yOTEsMTEgKzI4OSw5IEBAIHZvaWQg
UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmUKICAgICAgICAgfQogICAgIH0KIAot
I2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBjYWNoZVBhcnRpdGlvbiA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KF9DRlVS
TFJlcXVlc3RDb3B5UHJvdG9jb2xQcm9wZXJ0eUZvcktleShtX2NmUmVxdWVzdC5nZXQoKSwgd2tD
YWNoZVBhcnRpdGlvbktleSgpKSkpOwogICAgIGlmIChjYWNoZVBhcnRpdGlvbikKICAgICAgICAg
bV9jYWNoZVBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uLmdldCgpOwotI2VuZGlmCiB9CiAKIHZv
aWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlSFRUUEJvZHkoKQpAQCAtMzYxLDMy
ICszNTcsNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6c2V0SFRUUFBpcGVsaW5pbmdFCiAgICAg
c19odHRwUGlwZWxpbmluZ0VuYWJsZWQgPSBmbGFnOwogfQogCi0jaWYgRU5BQkxFKENBQ0hFX1BB
UlRJVElPTklORykKLVN0cmluZyBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUoY29uc3Qg
U3RyaW5nJiBkb21haW4pCi17Ci0gICAgaWYgKGRvbWFpbi5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci0jaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKLSAgICBT
dHJpbmcgaGlnaExldmVsID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihkb21haW4pOwot
ICAgIGlmIChoaWdoTGV2ZWwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotICAgIHJldHVybiBoaWdoTGV2ZWw7Ci0jZWxzZQotICAgIHJldHVybiBkb21haW47Ci0jZW5k
aWYKLX0KLSNlbmRpZgotCi12b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9QbGF0Zm9ybVNldEFzSXNv
bGF0ZWRDb3B5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgb3RoZXIpCi17Ci0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKLSAgICBtX2NhY2hlUGFydGl0aW9uID0gb3RoZXIubV9jYWNoZVBh
cnRpdGlvbi5pc29sYXRlZENvcHkoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG90aGVyKTsK
LSNlbmRpZgotfQotCi0KIC8vIEZJWE1FOiBJdCBpcyBjb25mdXNpbmcgdGhhdCB0aGlzIGZ1bmN0
aW9uIGJvdGggc2V0cyBjb25uZWN0aW9uIGNvdW50IGFuZCBkZXRlcm1pbmVzIG1heGltdW0gcmVx
dWVzdCBjb3VudCBhdCBuZXR3b3JrIGxheWVyLiBUaGlzIGNhbiBhbmQgc2hvdWxkIGJlIGRvbmUg
c2VwYXJhdGVseS4KIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3Vu
dFBlckhvc3QoKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9S
ZXNvdXJjZVJlc3BvbnNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsOCArMTAzLDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcGxhdGZvcm1T
dWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0OwogICAgIENlcnRpZmljYXRlSW5mbyBwbGF0Zm9ybUNl
cnRpZmljYXRlSW5mbygpIGNvbnN0OwogCi0gICAgdm9pZCBkb1BsYXRmb3JtU2V0QXNJc29sYXRl
ZENvcHkoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIGNvbnN0OwotCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgdm9pZCBpbml0TlNVUkxSZXNwb25zZSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29h
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2Ev
UmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0JKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0OCwxMyArMTQ4LDExIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1Vw
ZGF0ZVJlc291cmNlUmUKICAgICAgICAgICAgIG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25F
bmNvZGluZ0ZhbGxiYWNrQXJyYXkudW5jaGVja2VkQXBwZW5kKENGU3RyaW5nQ29udmVydEVuY29k
aW5nVG9JQU5BQ2hhclNldE5hbWUoZW5jb2RpbmcpKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoQ0FD
SEVfUEFSVElUSU9OSU5HKQogICAgIGlmIChtX25zUmVxdWVzdCkgewogICAgICAgICBOU1N0cmlu
ZyogY2FjaGVQYXJ0aXRpb24gPSBbTlNVUkxQcm90b2NvbCBwcm9wZXJ0eUZvcktleTooTlNTdHJp
bmcgKil3a0NhY2hlUGFydGl0aW9uS2V5KCkgaW5SZXF1ZXN0Om1fbnNSZXF1ZXN0LmdldCgpXTsK
ICAgICAgICAgaWYgKGNhY2hlUGFydGl0aW9uKQogICAgICAgICAgICAgbV9jYWNoZVBhcnRpdGlv
biA9IGNhY2hlUGFydGl0aW9uOwogICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIFJlc291cmNlUmVx
dWVzdDo6ZG9VcGRhdGVSZXNvdXJjZUhUVFBCb2R5KCkKQEAgLTIxOCwxMyArMjE2LDExIEBAIHZv
aWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmUKICAgICB9CiAgICAgW25zUmVx
dWVzdCBzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6ZW5jb2RpbmdG
YWxsYmFja3NdOwogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBTdHJpbmcg
cGFydGl0aW9uID0gY2FjaGVQYXJ0aXRpb24oKTsKICAgICBpZiAoIXBhcnRpdGlvbi5pc051bGwo
KSAmJiAhcGFydGl0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICBOU1N0cmluZyAqcGFydGl0aW9u
VmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cGFydGl0aW9uLnV0ZjgoKS5k
YXRhKCldOwogICAgICAgICBbTlNVUkxQcm90b2NvbCBzZXRQcm9wZXJ0eTpwYXJ0aXRpb25WYWx1
ZSBmb3JLZXk6KE5TU3RyaW5nICopd2tDYWNoZVBhcnRpdGlvbktleSgpIGluUmVxdWVzdDpuc1Jl
cXVlc3RdOwogICAgIH0KLSNlbmRpZgogCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDApCiAgICAgaWYgKG1fdXJsLmlzTG9jYWxG
aWxlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDExICsxNzksNyBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlKQogewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgU3RyaW5n
IHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAg
IFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAgICBpZiAoIWQt
Pm1fdXNlci5pc051bGwoKSAmJiAhZC0+bV9wYXNzLmlzTnVsbCgpKSB7CiAgICAgICAgIENyZWRl
bnRpYWwgY3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlTm9uZSk7CkBAIC0yNDEsMTEgKzIzNyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2Vp
dmVkQ3JlZGVudGlhbCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNh
Y2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmlu
ZygpOwotI2VuZGlmCiAKICAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgewog
ICAgICAgICBpZiAoY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkg
PT0gNDAxKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjEx
ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDEsMTEgKzEwNDEsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6YXBwbHlBdXRoZW50CiAgICAgLy8gbV91c2VyL21fcGFz
cyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFy
Z3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgogICAgIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CiAKLSNpZiBFTkFCTEUoQ0FD
SEVfUEFSVElUSU9OSU5HKQogICAgIFN0cmluZyBwYXJ0aXRpb24gPSBoYW5kbGUtPmZpcnN0UmVx
dWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBl
bXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAgICBpZiAoaGFuZGxlLT5zaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZSgpKSB7CiAgICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1f
cGFzcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiAyMTE4OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDEyICsxNDYsNyBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpjcmVhdGVOU1VSTENvbm5lY3RpCiAgICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgp
ICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZp
b3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCiAgICAgICAg
ICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxs
b3dlZCBieSBSRkMgMjYxNy4KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgICAg
ICAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7
Ci0jZWxzZQotICAgICAgICAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGVtcHR5U3RyaW5nKCk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRpYWwgPSBkLT5tX2NvbnRleHQt
PnN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0aW9uLCBmaXJz
dFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0g
ZC0+bV9jb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KGZp
cnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCksIGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90
ZWN0aW9uIHNwYWNlIGtub3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxz
IGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4KICAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQg
cG9zc2libGUgdG8gaW1wbGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFuIFhNTEh0dHBSZXF1ZXN0
IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRp
YXRlbHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDExICsyMDEsNyBAQCBzdGF0aWMgdm9pZCBhcHBseUF1
dGhlbnRpY2F0aW9uVG9SZXF1ZXN0CiAgICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlh
bHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQg
dG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQg
PSBoYW5kbGUtPmdldEludGVybmFsKCk7CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5H
KQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBmaXJzdFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlvbigp
OwotI2Vsc2UKLSAgICBTdHJpbmcgcGFydGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgor
ICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7CiAKICAgICBp
ZiAoaGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7CiAgICAgICAgIGlmIChk
LT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpCkBAIC04MjksMTEgKzgy
NSw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWMKIHsKICAgICBB
U1NFUlQoZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlLmlzTnVsbCgpKTsKIAotI2lmIEVOQUJMRShD
QUNIRV9QQVJUSVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgp
LmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0
cmluZygpOwotI2VuZGlmCiAKICAgICAvLyBGSVhNRTogUGVyIHRoZSBzcGVjaWZpY2F0aW9uLCB0
aGUgdXNlciBzaG91bGRuJ3QgYmUgYXNrZWQgZm9yIGNyZWRlbnRpYWxzIGlmIHRoZXJlIHdlcmUg
aW5jb3JyZWN0IG9uZXMgcHJvdmlkZWQgZXhwbGljaXRseS4KICAgICBib29sIHVzZUNyZWRlbnRp
YWxTdG9yYWdlID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKQEAgLTg5OSwxMSArODkx
LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBTdHJp
bmcgcGFydGl0aW9uID0gZmlyc3RSZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24oKTsKLSNlbHNlCi0g
ICAgU3RyaW5nIHBhcnRpdGlvbiA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIAogICAgIGlmIChz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7CiAgICAgICAgIC8vIEV2ZW50dWFsbHkgd2Ug
d2lsbCBtYW5hZ2UgcGVyLXNlc3Npb24gY3JlZGVudGlhbHMgb25seSBpbnRlcm5hbGx5IG9yIHVz
ZSBzb21lIG5ld2x5LWV4cG9zZWQgQVBJIGZyb20gbGlic291cCwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDkgKzU2MSw4IEBA
IGJvb2wgSW50ZXJuYWxzOjppc0xvYWRpbmdGcm9tTWVtb3J5Q2FjaGUKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoY29udGV4dERvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKHVybCkpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAg
cmVxdWVzdC5zZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihjb250ZXh0RG9jdW1lbnQoKS0+dG9w
T3JpZ2luKCkuZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKSk7Ci0jZW5kaWYKKyAgICAKICAgICBD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVzb3Vy
Y2VGb3JSZXF1ZXN0KHJlcXVlc3QsIGNvbnRleHREb2N1bWVudCgpLT5wYWdlKCktPnNlc3Npb25J
RCgpKTsKICAgICByZXR1cm4gcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0YXR1cygpID09IENhY2hl
ZFJlc291cmNlOjpDYWNoZWQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTE4OTQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBA
QAorMjAxNy0wMi0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIG1vc3QgY2FzZXMgb2YgI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc5OTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0cmlldmVDYWNoZUVudHJ5KToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkNhY2hlOjptYWtlQ2FjaGVLZXkpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNvbnN0cnVjdFJldmFsaWRhdGlvblJlcXVlc3QpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpB
cmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dFJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBh
cnRpdGlvbmVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAg
ICAgICAoV2ViS2l0OjptX2hpZGRlblBhZ2VUaHJvdHRsaW5nVGltZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlTmV3V2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZCk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tOgorICAgICAgICAo
SW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Nh
Y2hlUGFydGl0aW9uZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKwogMjAxNy0wMi0wOCAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgc3BlY3Vs
YXRpdmUgcmVkaXJlY3RzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrRGF0YVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtEYXRhVGFzay5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDExICs2Myw3IEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmsK
ICAgICA6IG1fZmFpbHVyZVRpbWVyKCp0aGlzLCAmTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGlt
ZXJGaXJlZCkKICAgICAsIG1fc2Vzc2lvbihzZXNzaW9uKQogICAgICwgbV9jbGllbnQoJmNsaWVu
dCkKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgICwgbV9wYXJ0aXRpb24ocmVx
dWVzdFdpdGhDcmVkZW50aWFscy5jYWNoZVBhcnRpdGlvbigpKQotI2Vsc2UKLSAgICAsIG1fcGFy
dGl0aW9uKGVtcHR5U3RyaW5nKCkpCi0jZW5kaWYKICAgICAsIG1fc3RvcmVkQ3JlZGVudGlhbHMo
c3RvcmVkQ3JlZGVudGlhbHMpCiAgICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3RXaXRoQ3Jl
ZGVudGlhbHMuaHR0cE1ldGhvZCgpKQogICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVzdFdpdGhD
cmVkZW50aWFscykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMjExODk0KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcyLDE3ICs1NzIsMTIgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJldHJpZXZlQwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpE
aWRSZWNlaXZlUmVzcG9uc2UoZW50cnktPnJlc3BvbnNlKCksIG5lZWRzQ29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2VNZXNzYWdlKSk7CiAKICAgICBpZiAoZW50cnktPnNvdXJjZVN0b3JhZ2VSZWNv
cmQoKS5ib2R5SGFzaCAmJiAhbV9wYXJhbWV0ZXJzLmRlcml2ZWRDYWNoZWREYXRhVHlwZXNUb1Jl
dHJpZXZlLmlzRW1wdHkoKSkgewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAg
ICAgIFN0cmluZyBwYXJ0aXRpb24gPSBvcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlvbigp
OwotI2Vsc2UKLSAgICAgICAgU3RyaW5nIHBhcnRpdGlvbjsKLSNlbmRpZgogICAgICAgICBhdXRv
IGJvZHlIYXNoID0gKmVudHJ5LT5zb3VyY2VTdG9yYWdlUmVjb3JkKCkuYm9keUhhc2g7CiAgICAg
ICAgIGF1dG8qIGVudHJ5UHRyID0gZW50cnkucmVsZWFzZSgpOwogICAgICAgICBhdXRvIHJldHJp
ZXZlQ291bnQgPSBtX3BhcmFtZXRlcnMuZGVyaXZlZENhY2hlZERhdGFUeXBlc1RvUmV0cmlldmUu
c2l6ZSgpOwogCiAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6IG1fcGFyYW1ldGVycy5kZXJpdmVk
Q2FjaGVkRGF0YVR5cGVzVG9SZXRyaWV2ZSkgewotICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpE
YXRhS2V5IGtleSB7IHBhcnRpdGlvbiwgdHlwZSwgYm9keUhhc2ggfTsKKyAgICAgICAgICAgIE5l
dHdvcmtDYWNoZTo6RGF0YUtleSBrZXkgeyBvcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlv
bigpLCB0eXBlLCBib2R5SGFzaCB9OwogICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0
b24oKS5yZXRyaWV2ZURhdGEoa2V5LCBbbG9hZGVyID0gbWFrZVJlZigqdGhpcyksIGVudHJ5UHRy
LCB0eXBlLCByZXRyaWV2ZUNvdW50XSAoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
IG11dGFibGUgewogICAgICAgICAgICAgICAgIGxvYWRlci0+bV9yZXRyaWV2ZWREZXJpdmVkRGF0
YUNvdW50Kys7CiAgICAgICAgICAgICAgICAgYm9vbCByZXRyaWV2ZWRBbGwgPSBsb2FkZXItPm1f
cmV0cmlldmVkRGVyaXZlZERhdGFDb3VudCA9PSByZXRyaWV2ZUNvdW50OwpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3Bw
CShyZXZpc2lvbiAyMTE4OTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTYgKzExNiwxMCBAQCB2
b2lkIENhY2hlOjpzZXRDYXBhY2l0eShzaXplX3QgbWF4aW11bVNpCiAKIEtleSBDYWNoZTo6bWFr
ZUNhY2hlS2V5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1
ZXN0LmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb247Ci0jZW5k
aWYKLQogICAgIC8vIEZJWE1FOiBUaGlzIGltcGxlbWVudHMgbWluaW1hbCBSYW5nZSBoZWFkZXIg
ZGlzayBjYWNoZSBzdXBwb3J0LiBXZSBkb24ndCBwYXJzZQogICAgIC8vIHJhbmdlcyBzbyBvbmx5
IHRoZSBzYW1lIGV4YWN0IHJhbmdlIHJlcXVlc3Qgd2lsbCBiZSBzZXJ2ZWQgZnJvbSB0aGUgY2Fj
aGUuCiAgICAgU3RyaW5nIHJhbmdlID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6
SFRUUEhlYWRlck5hbWU6OlJhbmdlKTsKLSAgICByZXR1cm4geyBwYXJ0aXRpb24sIHJlc291cmNl
VHlwZSgpLCByYW5nZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgbV9zdG9yYWdlLT5zYWx0KCkg
fTsKKyAgICByZXR1cm4geyByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCksIHJlc291cmNlVHlwZSgp
LCByYW5nZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgbV9zdG9yYWdlLT5zYWx0KCkgfTsKIH0K
IAogc3RhdGljIGJvb2wgY2FjaGVQb2xpY3lBbGxvd3NFeHBpcmVkKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdENhY2hlUG9saWN5IHBvbGljeSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTE4OTQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRN
YW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksMTIgKzg5LDEwIEBAIHN0YXRpYyBpbmxp
bmUgUmVzb3VyY2VSZXF1ZXN0IGNvbnN0cnVjdFIKICAgICBSZXNvdXJjZVJlcXVlc3QgcmV2YWxp
ZGF0aW9uUmVxdWVzdChrZXkuaWRlbnRpZmllcigpKTsKICAgICByZXZhbGlkYXRpb25SZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZHMoc3ViUmVzb3VyY2VJbmZvLnJlcXVlc3RIZWFkZXJzKCkpOwog
ICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoc3ViUmVzb3Vy
Y2VJbmZvLmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJ
T05JTkcpCiAgICAgaWYgKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKQogICAgICAgICByZXZh
bGlkYXRpb25SZXF1ZXN0LnNldENhY2hlUGFydGl0aW9uKGtleS5wYXJ0aXRpb24oKSk7Ci0jZW5k
aWYKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGtleS5yYW5nZSgpLmlzRW1wdHkoKSwgInJhbmdl
IGlzIG5vdCBzdXBwb3J0ZWQiKTsKLQorICAgIAogICAgIHJldmFsaWRhdGlvblJlcXVlc3QubWFr
ZVVuY29uZGl0aW9uYWwoKTsKICAgICBpZiAoZW50cnkpIHsKICAgICAgICAgU3RyaW5nIGVUYWcg
PSBlbnRyeS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkVUYWcp
OwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzksMTAgKzk3OSw3IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxDdXJzb3I+OjpkZWNvZGUoRGVjb2QKIAogdm9pZCBBcmd1bWVudENv
ZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElU
SU9OSU5HKQogICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7
Ci0jZW5kaWYKLQogICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmhpZGRlbkZyb21JbnNw
ZWN0b3IoKTsKIAogICAgIGlmIChyZXNvdXJjZVJlcXVlc3QuZW5jb2RpbmdSZXF1aXJlc1BsYXRm
b3JtRGF0YSgpKSB7CkBAIC05OTYsMTIgKzk5MywxMCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jCiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QpCiB7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBTdHJpbmcgY2FjaGVQ
YXJ0aXRpb247CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZVBhcnRpdGlvbikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXNvdXJjZVJlcXVlc3Quc2V0Q2FjaGVQYXJ0aXRpb24o
Y2FjaGVQYXJ0aXRpb24pOwotI2VuZGlmCiAKICAgICBib29sIGlzSGlkZGVuRnJvbUluc3BlY3Rv
cjsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzSGlkZGVuRnJvbUluc3BlY3RvcikpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDkg
KzkxLDcgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZAogICAgIGVu
Y29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Rpc3BsYXlJc29sYXRlZDsKICAgICBlbmNv
ZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNDT1JTRW5hYmxlZDsKICAgICBlbmNvZGVyIDw8
IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNBbHdheXNSZXZhbGlkYXRlZDsKLSNpZiBFTkFCTEUoQ0FD
SEVfUEFSVElUSU9OSU5HKQogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Nh
Y2hlUGFydGl0aW9uZWQ7Ci0jZW5kaWYKICAgICBlbmNvZGVyLmVuY29kZUVudW0oY2FjaGVNb2Rl
bCk7CiAgICAgZW5jb2RlciA8PCBzaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoOwog
ICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlTWVtb3J5UHJlc3N1cmVSZWxpZWZMb2dnaW5nOwpA
QCAtMjIxLDEwICsyMTksOCBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRl
Y29kCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Fsd2F5c1JldmFsaWRhdGVkKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNDYWNoZVBhcnRp
dGlvbmVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0ocGFyYW1ldGVycy5jYWNoZU1vZGVsKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5zaG91bGRBbHdheXNVc2VDb21w
bGV4VGV4dENvZGVQYXRoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjExODkzKQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDkgKzEwMCw3IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzRGlzcGxh
eUlzb2xhdGVkOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNDT1JT
RW5hYmxlZDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQWx3YXlz
UmV2YWxpZGF0ZWQ7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBWZWN0b3I8
U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ2FjaGVQYXJ0aXRpb25lZDsKLSNlbmRpZgog
CiAgICAgQ2FjaGVNb2RlbCBjYWNoZU1vZGVsOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NywxMCArMTg3LDggQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwog
ICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdheXNSZXZhbGlkYXRl
ZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxp
ZGF0ZWQuYWRkKHNjaGVtZSk7CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
IGZvciAoY29uc3QgYXV0byYgdXJsU2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5jYWNoZVBhcnRp
dGlvbmVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDYWNoZVBh
cnRpdGlvbmVkLmFkZCh1cmxTY2hlbWUpOwotI2VuZGlmCiAKICAgICBwbGF0Zm9ybUluaXRpYWxp
emUoKTsKIApAQCAtNTk2LDkgKzU5NCw3IEBAIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZU4KICAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzRGlzcGxh
eUlzb2xhdGVkLCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5SXNvbGF0
ZWQpOwogICAgIGNvcHlUb1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDT1JTRW5hYmxlZCwg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQpOwogICAgIGNvcHlU
b1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZCwgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQWx3YXlzUmV2YWxpZGF0ZWQpOwotI2lmIEVOQUJMRShD
QUNIRV9QQVJUSVRJT05JTkcpCiAgICAgY29weVRvVmVjdG9yKG1fc2NoZW1lc1RvUmVnaXN0ZXJB
c0NhY2hlUGFydGl0aW9uZWQsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NhY2hl
UGFydGl0aW9uZWQpOwotI2VuZGlmCiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZEFsd2F5c1VzZUNv
bXBsZXhUZXh0Q29kZVBhdGggPSBtX2Fsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoOwogICAg
IHBhcmFtZXRlcnMuc2hvdWxkVXNlRm9udFNtb290aGluZyA9IG1fc2hvdWxkVXNlRm9udFNtb290
aGluZzsKQEAgLTEwMDQsMTMgKzEwMDAsMTEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdp
c3Rlckdsb2JhbFVSTAogICAgICAgICBwcm9jZXNzUG9vbC0+dW5yZWdpc3RlclNjaGVtZUZvckN1
c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9O
SU5HKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0
aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgbV9zY2hlbWVzVG9SZWdpc3Rl
ckFzQ2FjaGVQYXJ0aXRpb25lZC5hZGQodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlv
bmVkKHVybFNjaGVtZSkpOwogfQotI2VuZGlmCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogewpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAs
OSArMjEwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNz
KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29s
YXRlZChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JTRW5h
YmxlZChjb25zdCBTdHJpbmcmKTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
IHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJik7
Ci0jZW5kaWYKIAogICAgIFZpc2l0ZWRMaW5rU3RvcmUmIHZpc2l0ZWRMaW5rU3RvcmUoKSB7IHJl
dHVybiBtX3Zpc2l0ZWRMaW5rU3RvcmUuZ2V0KCk7IH0KIApAQCAtNDk5LDkgKzQ5Nyw3IEBAIHBy
aXZhdGU6CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Rpc3BsYXlJ
c29sYXRlZDsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9zY2hlbWVzVG9SZWdpc3RlckFzQ09SU0Vu
YWJsZWQ7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1Jl
dmFsaWRhdGVkOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgSGFzaFNldDxT
dHJpbmc+IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0NhY2hlUGFydGl0aW9uZWQ7Ci0jZW5kaWYKIAog
ICAgIGJvb2wgbV9hbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aDsKICAgICBib29sIG1fc2hv
dWxkVXNlRm9udFNtb290aGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc5LDEyICsz
NzksNyBAQCB2b2lkIFdLQ29udGV4dFJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpCiAKIHZvaWQg
V0tDb250ZXh0UmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIHVybFNjaGVtZSkKIHsKLSNpZiBFTkFCTEUoQ0FDSEVf
UEFSVElUSU9OSU5HKQogICAgIHRvSW1wbChjb250ZXh0UmVmKS0+cmVnaXN0ZXJVUkxTY2hlbWVB
c0NhY2hlUGFydGl0aW9uZWQodG9JbXBsKHVybFNjaGVtZSktPnN0cmluZygpKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKGNvbnRleHRSZWYpOwotICAgIFVOVVNFRF9QQVJBTSh1cmxTY2hlbWUp
OwotI2VuZGlmCiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRl
bkZvclVSTFNjaGVtZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgdXJsU2No
ZW1lKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZp
c2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsMTAgKzMzNyw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5p
dGlhbGl6ZVdlYlByb2Nlc3MoV2UKICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Fsd2F5c1JldmFsaWRhdGVkKQogICAgICAgICByZWdpc3Rl
clVSTFNjaGVtZUFzQWx3YXlzUmV2YWxpZGF0ZWQoc2NoZW1lKTsKIAotI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkQXNDYWNoZVBhcnRpdGlvbmVkKQogICAgICAgICByZWdpc3RlclVSTFNj
aGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChzY2hlbWUpOwotI2VuZGlmCiAKICAgICBzZXREZWZhdWx0
UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChwYXJhbWV0ZXJzLmRlZmF1bHRSZXF1ZXN0VGltZW91dElu
dGVydmFsKTsKIApAQCAtNDYyLDEyICs0NjAsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpyZWdpc3Rl
clVSTFNjaGVtZUFzQWx3YQogICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFz
QWx3YXlzUmV2YWxpZGF0ZWQodXJsU2NoZW1lKTsKIH0KIAotI2lmIEVOQUJMRShDQUNIRV9QQVJU
SVRJT05JTkcpCiB2b2lkIFdlYlByb2Nlc3M6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRp
dGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKSBjb25zdAogewogICAgIFNjaGVtZVJlZ2lz
dHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZCh1cmxTY2hlbWUpOwogfQot
I2VuZGlmCiAKIHZvaWQgV2ViUHJvY2Vzczo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2
YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDkgKzI1Nyw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0
IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0NPUlNFbmFibGVk
KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0Fsd2F5
c1JldmFsaWRhdGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotI2lmIEVOQUJMRShDQUNIRV9QQVJU
SVRJT05JTkcpCiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChj
b25zdCBTdHJpbmcmKSBjb25zdDsKLSNlbmRpZgogICAgIHZvaWQgc2V0RGVmYXVsdFJlcXVlc3RU
aW1lb3V0SW50ZXJ2YWwoZG91YmxlKTsKICAgICB2b2lkIHNldEFsd2F5c1VzZXNDb21wbGV4VGV4
dENvZGVQYXRoKGJvb2wpOwogICAgIHZvaWQgc2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhib29s
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVz
c2FnZXMuaW4JKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsNyBAQCBt
ZXNzYWdlcyAtPiBXZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBSZWdpc3RlclVSTFNj
aGVtZUFzTm9BY2Nlc3MoU3RyaW5nIHNjaGVtZSkKICAgICBSZWdpc3RlclVSTFNjaGVtZUFzRGlz
cGxheUlzb2xhdGVkKFN0cmluZyBzY2hlbWUpCiAgICAgUmVnaXN0ZXJVUkxTY2hlbWVBc0NPUlNF
bmFibGVkKFN0cmluZyBzY2hlbWUpCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAg
ICBSZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChTdHJpbmcgc2NoZW1lKQotI2Vu
ZGlmCiAgICAgU2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJ
bnRlcnZhbCkKICAgICBTZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChib29sIGFsd2F5
c1VzZUNvbXBsZXhUZXh0KQogICAgIFNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoYm9vbCB1c2VG
b250U21vb3RoaW5nKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg5
LDExICsxNTg5LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRDb29raWVzRm9yVVJMKGNvbnN0IAog
CiBib29sIFBsdWdpblZpZXc6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBQcm90ZWN0aW9u
U3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29y
ZCkKIHsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIFN0cmluZyBwYXJ0aXRp
b25OYW1lID0gbV9wbHVnaW5FbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKS0+dG9wRG9jdW1lbnQo
KS5zZWN1cml0eU9yaWdpbigpLmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAg
IFN0cmluZyBwYXJ0aXRpb25OYW1lID0gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgogICAgIENyZWRl
bnRpYWwgY3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0
b3JhZ2UoKS5nZXQocGFydGl0aW9uTmFtZSwgcHJvdGVjdGlvblNwYWNlKTsKICAgICBpZiAoY3Jl
ZGVudGlhbC5pc0VtcHR5KCkpCiAgICAgICAgIGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFn
ZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKHBy
b3RlY3Rpb25TcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1t
CShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMSw5
ICsxMTEsNyBAQCB2b2lkIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKHZvaWQpCiAgICAgICAg
IElOSVQoSXNQdWJsaWNTdWZmaXgpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElU
SU9OSU5HKQogICAgICAgICBJTklUKENhY2hlUGFydGl0aW9uS2V5KTsKLSNlbmRpZgogCiAgICAg
ICAgIElOSVQoRXhlcm5hbERldmljZVR5cGVGb3JQbGF5ZXIpOwogICAgICAgICBJTklUKEV4ZXJu
YWxEZXZpY2VEaXNwbGF5TmFtZUZvclBsYXllcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wMi0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIG1vc3QgY2FzZXMgb2YgI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjc5OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1pc2MvV2ViQ2FjaGUubW06CisgICAgICAgICgrW1dlYkNhY2hlIGFkZEltYWdl
VG9DYWNoZTpmb3JVUkw6Zm9yRnJhbWU6XSk6CisgICAgICAgICgrW1dlYkNhY2hlIHJlbW92ZUlt
YWdlRnJvbUNhY2hlRm9yVVJMOmZvckZyYW1lOl0pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYlN5c3RlbUludGVyZmFjZS5tbToKKyAgICAgICAgKEluaXRXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlKToKKwogMjAxNy0wMi0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIGNyZWRlbnRpYWxzIHNob3VsZCBiZSBwYXJ0aXRpb25lZCBieSBt
YWluIGRvY3VtZW50IGRvbWFpbgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNo
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCShy
ZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NyZWRlbnRpYWxTdG9yYWdlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWVtb3J5Q2FjaGUu
aD4KICNpbXBvcnQgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2ltcG9ydCA8d3Rm
L01haW5UaHJlYWQuaD4KQEAgLTQ4LDEwICs0OSw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNv
cmVUaHJlYWRSdW4uaD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykK
LSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNlbmRpZgotCiBAaW1wbGVtZW50YXRpb24g
V2ViQ2FjaGUKIAogKyAodm9pZClpbml0aWFsaXplCkBAIC0xNjgsMTAgKzE2NSw4IEBAICsgKGJv
b2wpYWRkSW1hZ2VUb0NhY2hlOihDR0ltYWdlUmVmKWltYWcKICAgICBpZiAoIWltYWdlIHx8ICF1
cmwgfHwgIVtbdXJsIGFic29sdXRlU3RyaW5nXSBsZW5ndGhdKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIHRvcE9yaWdpbiA9IG51bGxwdHI7Ci0j
aWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBpZiAoZnJhbWUpCiAgICAgICAgIHRv
cE9yaWdpbiA9ICZjb3JlKGZyYW1lKS0+ZG9jdW1lbnQoKS0+dG9wT3JpZ2luKCk7Ci0jZW5kaWYK
ICAgICByZXR1cm4gV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLmFkZEltYWdlVG9D
YWNoZShSZXRhaW5QdHI8Q0dJbWFnZVJlZj4oaW1hZ2UpLCB1cmwsIHRvcE9yaWdpbiA/IHRvcE9y
aWdpbi0+ZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKSA6IGVtcHR5U3RyaW5nKCkpOwogfQogCkBA
IC0xODUsMTAgKzE4MCw4IEBAICsgKHZvaWQpcmVtb3ZlSW1hZ2VGcm9tQ2FjaGVGb3JVUkw6KE5T
VVIKICAgICBpZiAoIXVybCkKICAgICAgICAgcmV0dXJuOwogICAgIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luKiB0b3BPcmlnaW4gPSBudWxscHRyOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05J
TkcpCiAgICAgaWYgKGZyYW1lKQogICAgICAgICB0b3BPcmlnaW4gPSAmY29yZShmcmFtZSktPmRv
Y3VtZW50KCktPnRvcE9yaWdpbigpOwotI2VuZGlmCiAgICAgV2ViQ29yZTo6TWVtb3J5Q2FjaGU6
OnNpbmdsZXRvbigpLnJlbW92ZUltYWdlRnJvbUNhY2hlKHVybCwgdG9wT3JpZ2luID8gdG9wT3Jp
Z2luLT5kb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpIDogZW1wdHlTdHJpbmcoKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0
ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI0
LDkgKzEyNCw3IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKICAgICBJ
TklUKElzUHVibGljU3VmZml4KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElP
TklORykKICAgICBJTklUKENhY2hlUGFydGl0aW9uS2V5KTsKLSNlbmRpZgogCiAgICAgSU5JVChF
eGVybmFsRGV2aWNlVHlwZUZvclBsYXllcik7CiAgICAgSU5JVChFeGVybmFsRGV2aWNlRGlzcGxh
eU5hbWVGb3JQbGF5ZXIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301026</attachid>
            <date>2017-02-09 02:25:23 -0800</date>
            <delta_ts>2017-02-09 02:25:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cache-partition-ifdef-3.patch</filename>
            <type>text/plain</type>
            <size>58755</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE3LTAyLTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbW9zdCBjYXNlcyBv
ZiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Nzk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IFNh
bSBXZWluaWcuCisKKyAgICAgICAgV2UnbGwganVzdCByZXR1cm4gZW1wdHkgc3RyaW5nIGZvciB0
aGUgcGFydGl0aW9uIGlmIHBhcnRpdGlvbmluZyBpcyBub3QgZW5hYmxlZC4KKworICAgICAgICAq
IGh0bWwvRE9NVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVVSTDo6cmV2b2tlT2JqZWN0
VVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UpOgorICAgICAg
ICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6bG9hZFVSTCk6CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUpOgorICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6
Y2FjaGVQYXJ0aXRpb24pOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dFVzZXJDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0
OjpzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6YWRkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lbW9yeUNhY2hlOjpyZXZhbGlkYXRpb25TdWNjZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVtb3J5Q2FjaGU6OnJlc291cmNlRm9yUmVxdWVzdEltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZW1vcnlDYWNoZTo6cmVtb3ZlSW1hZ2VGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3Zl
UmVzb3VyY2VzV2l0aE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVt
b3ZlUmVzb3VyY2VzV2l0aE9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6
OmdldE9yaWdpbnNXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6Om9y
aWdpbnNXaXRoQ2FjaGUpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oOgor
ICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW46OmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKToKKyAgICAgICAgKiBwYWdlL1Nl
Y3VyaXR5T3JpZ2luLmg6CisgICAgICAgICogcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FjaGVQYXJ0aXRpb25pbmdTY2hlbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRQYXJ0aXRpb25DYWNoZUZvclVSTFNjaGVtZSk6
CisgICAgICAgICogcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLm1tOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
OjpzZXRBc0lzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXRDYWNoZVBhcnRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3RCYXNlOjpwYXJ0aXRpb25OYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OmNhY2hlUGFydGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
OjpjYWNoZVBhcnRpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OnNldENhY2hlUGFydGl0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdDo6c2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvUGxhdGZvcm1T
ZXRBc0lzb2xhdGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9S
ZXNvdXJjZVJlcXVlc3RDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dDo6ZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCk6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjppc0xvYWRpbmdGcm9tTWVt
b3J5Q2FjaGUpOgorCiAyMDE3LTAyLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgU3BsaXQgSlNET01Db25zdHJ1Y3Rvci5oL2NwcCB1cCBieSBjbGFzcwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRD
aGFubmVsLmNwcAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTEg
KzEyNCw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6Y29ubmVjdChjb25zdCBVUkwKICAgICAg
ICAgcmVmKCk7CiAgICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwogICAgICAgICBT
ZXNzaW9uSUQgc2Vzc2lvbklEID0gcGFnZSA/IHBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCk7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAg
ICAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IG1fZG9jdW1lbnQtPnRvcERvY3VtZW50KCkuc2VjdXJp
dHlPcmlnaW4oKS5kb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpOwotI2Vsc2UKLSAgICAgICAgU3Ry
aW5nIHBhcnRpdGlvbiA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKICAgICAgICAgbV9oYW5kbGUg
PSBtX3NvY2tldFByb3ZpZGVyLT5jcmVhdGVTb2NrZXRTdHJlYW1IYW5kbGUobV9oYW5kc2hha2Ut
PnVybCgpLCAqdGhpcywgc2Vzc2lvbklELCBwYXJ0aXRpb24pOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0RPTVVSTC5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvRE9NVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDkgKzEyMCw4IEBAIHZvaWQgRE9N
VVJMOjpyZXZva2VPYmplY3RVUkwoU2NyaXB0RXhlY3UKIHsKICAgICBVUkwgdXJsKFVSTCgpLCB1
cmxTdHJpbmcpOwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0jaWYgRU5BQkxF
KENBQ0hFX1BBUlRJVElPTklORykKICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNhY2hlUGFydGl0
aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQudG9wT3JpZ2luKCkuZG9tYWluRm9yQ2FjaGVQYXJ0
aXRpb24oKSk7Ci0jZW5kaWYKKwogICAgIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNl
c3Npb25DYWNoZXMoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCk7CiAKICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LnB1YmxpY1VSTE1hbmFnZXIoKS5yZXZva2UodXJsKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShy
ZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDkgKzI2MCw3IEBAIENhY2hlZFJlc291
cmNlKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2gKICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVk
UmVzb3VyY2UgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5jYWNo
ZWRSZXNvdXJjZShNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQo
dXJsKSk7CiAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkgewogICAgICAgICBSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdCh1cmwpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgICAg
IHJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZnJhbWUtPmRvY3VtZW50KCktPnRv
cE9yaWdpbigpLmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKCkpOwotI2VuZGlmCiAgICAgICAgIGNh
Y2hlZFJlc291cmNlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLnJlc291cmNlRm9yUmVxdWVz
dChyZXF1ZXN0LCBmcmFtZS0+cGFnZSgpLT5zZXNzaW9uSUQoKSk7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MDEsMTAgKzEyMDEsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMKGNvbnN0IEZyYW1lTG9h
CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gcmVmZXJyZXJPcmlnaW4gPSBTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhyZWZlcnJlcik7CiAgICAgICAgIGFkZEhUVFBPcmln
aW5JZk5lZWRlZChyZXF1ZXN0LCByZWZlcnJlck9yaWdpbi0+dG9TdHJpbmcoKSk7CiAgICAgfQot
I2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgaWYgKCZtX2ZyYW1lLnRyZWUoKS50
b3AoKSAhPSAmbV9mcmFtZSkKICAgICAgICAgcmVxdWVzdC5zZXREb21haW5Gb3JDYWNoZVBhcnRp
dGlvbihtX2ZyYW1lLnRyZWUoKS50b3AoKS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmRv
bWFpbkZvckNhY2hlUGFydGl0aW9uKCkpOwotI2VuZGlmCisKICAgICBhZGRFeHRyYUZpZWxkc1Rv
UmVxdWVzdChyZXF1ZXN0LCBuZXdMb2FkVHlwZSwgdHJ1ZSk7CiAgICAgaWYgKG5ld0xvYWRUeXBl
ID09IEZyYW1lTG9hZFR5cGU6OlJlbG9hZCB8fCBuZXdMb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBl
OjpSZWxvYWRGcm9tT3JpZ2luKQogICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJlbG9h
ZElnbm9yaW5nQ2FjaGVEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTE0LDkgKzUxNCw4IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBMZWdhY3lXZWJBcmNoaXYKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChzdWJyZXNvdXJjZVVSTCk7Ci0jaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKICAgICAgICAgICAgICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNhY2hl
UGFydGl0aW9uKGZyYW1lLmRvY3VtZW50KCktPnRvcE9yaWdpbigpLmRvbWFpbkZvckNhY2hlUGFy
dGl0aW9uKCkpOwotI2VuZGlmCisKICAgICAgICAgICAgICAgICBpZiAoYXV0byogY2FjaGVkUmVz
b3VyY2UgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVl
c3QsIGZyYW1lLnBhZ2UoKS0+c2Vzc2lvbklEKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChhdXRvIHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoY2FjaGVkUmVzb3VyY2Ut
PnJlc291cmNlQnVmZmVyKCksIHN1YnJlc291cmNlVVJMLCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9u
c2UoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlcy5hcHBlbmQocmVz
b3VyY2UucmVsZWFzZU5vbk51bGwoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw5
ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdDsgfQogICAgIFJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0K
ICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0LnVy
bCgpO30KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGNvbnN0IFN0cmluZyYg
Y2FjaGVQYXJ0aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdC5jYWNoZVBh
cnRpdGlvbigpOyB9Ci0jZW5kaWYKICAgICBTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXNzaW9uSUQ7IH0KICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTcsMTAgKzIxNyw4IEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hl
ZXQKIAogQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJlcXVl
c3QmJiByZXF1ZXN0KQogewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgQVNT
RVJUKGRvY3VtZW50KCkpOwogICAgIHJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24o
KmRvY3VtZW50KCkpOwotI2VuZGlmCiAKICAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNh
Y2hlOjpzaW5nbGV0b24oKTsKICAgICBpZiAocmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkpIHsKQEAg
LTczMywxMCArNzMxLDggQEAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENh
YwogCiAgICAgLy8gU2VlIGlmIHdlIGNhbiB1c2UgYW4gZXhpc3RpbmcgcmVzb3VyY2UgZnJvbSB0
aGUgY2FjaGUuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJlc291
cmNlOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgaWYgKGRvY3VtZW50KCkp
CiAgICAgICAgIHJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKmRvY3VtZW50KCkp
OwotI2VuZGlmCiAKICAgICBpZiAocmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkpCiAgICAgICAgIHJl
c291cmNlID0gbWVtb3J5Q2FjaGUucmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCksIHNlc3Npb25JRCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCShyZXZpc2lvbiAyMTE4OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDEyICsxMjksMTAgQEAgdm9pZCBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3Q6OnVwZ3JhZGVJbnNlYwogICAgIHVwZ3JhZGVJbnNlY3VyZVJlc291cmNlUmVxdWVz
dElmTmVlZGVkKG1fcmVzb3VyY2VSZXF1ZXN0LCBkb2N1bWVudCk7CiB9CiAKLSNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQogdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldERvbWFp
bkZvckNhY2hlUGFydGl0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBtX3Jlc291cmNl
UmVxdWVzdC5zZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihkb2N1bWVudC50b3BPcmlnaW4oKS5k
b21haW5Gb3JDYWNoZVBhcnRpdGlvbigpKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIFN0
cmluZyBhY2NlcHRIZWFkZXJWYWx1ZUZyb21UeXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUp
CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkg
Kzc1LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgdm9p
ZCBhcHBseUJsb2NrZWRTdGF0dXMoY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OkJsb2NrZWRTdGF0
dXMmKTsKICNlbmRpZgotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgdm9pZCBz
ZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihEb2N1bWVudCYpOwotI2VuZGlmCiAgICAgYm9vbCBp
c0xpbmtQcmVsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9pc0xpbmtQcmVsb2FkOyB9CiAgICAgdm9p
ZCBzZXRJc0xpbmtQcmVsb2FkKCkgeyBtX2lzTGlua1ByZWxvYWQgPSB0cnVlOyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAkocmV2aXNpb24g
MjExODkzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE1LDExICsxMTUsOCBAQCBib29sIE1lbW9yeUNhY2hlOjphZGQo
Q2FjaGVkUmVzb3VyY2UmIHJlCiAKICAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CiAK
LSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGF1dG8ga2V5ID0gc3RkOjptYWtl
X3BhaXIocmVzb3VyY2UudXJsKCksIHJlc291cmNlLmNhY2hlUGFydGl0aW9uKCkpOwotI2Vsc2UK
LSAgICBhdXRvJiBrZXkgPSByZXNvdXJjZS51cmwoKTsKLSNlbmRpZgorCiAgICAgZW5zdXJlU2Vz
c2lvblJlc291cmNlTWFwKHJlc291cmNlLnNlc3Npb25JRCgpKS5zZXQoa2V5LCAmcmVzb3VyY2Up
OwogICAgIHJlc291cmNlLnNldEluQ2FjaGUodHJ1ZSk7CiAgICAgCkBAIC0xNDQsMTEgKzE0MSw4
IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZCgKICAgICByZW1vdmUo
cmV2YWxpZGF0aW5nUmVzb3VyY2UpOwogCiAgICAgYXV0byYgcmVzb3VyY2VzID0gZW5zdXJlU2Vz
c2lvblJlc291cmNlTWFwKHJlc291cmNlLnNlc3Npb25JRCgpKTsKLSNpZiBFTkFCTEUoQ0FDSEVf
UEFSVElUSU9OSU5HKQogICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIocmVzb3VyY2UudXJs
KCksIHJlc291cmNlLmNhY2hlUGFydGl0aW9uKCkpOwotI2Vsc2UKLSAgICBhdXRvJiBrZXkgPSBy
ZXNvdXJjZS51cmwoKTsKLSNlbmRpZgorCiAgICAgQVNTRVJUKCFyZXNvdXJjZXMuZ2V0KGtleSkp
OwogICAgIHJlc291cmNlcy5zZXQoa2V5LCAmcmVzb3VyY2UpOwogICAgIHJlc291cmNlLnNldElu
Q2FjaGUodHJ1ZSk7CkBAIC0xODksMTEgKzE4Myw3IEBAIENhY2hlZFJlc291cmNlKiBNZW1vcnlD
YWNoZTo6cmVzb3VyY2VGb3IKICAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CiAgICAg
VVJMIHVybCA9IHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHJlcXVlc3QudXJsKCkp
OwogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBhdXRvIGtleSA9IHN0ZDo6
bWFrZV9wYWlyKHVybCwgcmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpKTsKLSNlbHNlCi0gICAgYXV0
byYga2V5ID0gdXJsOwotI2VuZGlmCiAgICAgcmV0dXJuIHJlc291cmNlcy5nZXQoa2V5KTsKIH0K
IApAQCAtMjMyLDkgKzIyMiw4IEBAIGJvb2wgTWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZShO
YXRpdmUKIAogICAgIGNhY2hlZEltYWdlLT5hZGRDbGllbnQoZHVtbXlDYWNoZWRJbWFnZUNsaWVu
dCgpKTsKICAgICBjYWNoZWRJbWFnZS0+c2V0RGVjb2RlZFNpemUoYml0bWFwSW1hZ2UtPmRlY29k
ZWRTaXplKCkpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgY2FjaGVkSW1h
Z2UtPnJlc291cmNlUmVxdWVzdCgpLnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGRvbWFpbkZv
ckNhY2hlUGFydGl0aW9uKTsKLSNlbmRpZgorCiAgICAgcmV0dXJuIGFkZCgqY2FjaGVkSW1hZ2Uu
cmVsZWFzZSgpKTsKIH0KIApAQCAtMjQ0LDEyICsyMzMsOCBAQCB2b2lkIE1lbW9yeUNhY2hlOjpy
ZW1vdmVJbWFnZUZyb21DYWNoZShjCiAgICAgaWYgKCFyZXNvdXJjZXMpCiAgICAgICAgIHJldHVy
bjsKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgYXV0byBrZXkgPSBzdGQ6
Om1ha2VfcGFpcih1cmwsIFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShkb21haW5Gb3JD
YWNoZVBhcnRpdGlvbikpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZG9tYWluRm9yQ2FjaGVQ
YXJ0aXRpb24pOwotICAgIGF1dG8mIGtleSA9IHVybDsKLSNlbmRpZgorCiAgICAgQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlID0gcmVzb3VyY2VzLT5nZXQoa2V5KTsKICAgICBpZiAoIXJlc291cmNl
KQogICAgICAgICByZXR1cm47CkBAIC00MzksMTEgKzQyNCw4IEBAIHZvaWQgTWVtb3J5Q2FjaGU6
OnJlbW92ZShDYWNoZWRSZXNvdXJjZSYKICAgICAvLyBUaGUgcmVzb3VyY2UgbWF5IGhhdmUgYWxy
ZWFkeSBiZWVuIHJlbW92ZWQgYnkgc29tZW9uZSBvdGhlciB0aGFuIG91ciBjYWxsZXIsCiAgICAg
Ly8gd2hvIG5lZWRlZCBhIGZyZXNoIGNvcHkgZm9yIGEgcmVsb2FkLiBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDc5I2M2Pi4KICAgICBpZiAoYXV0byogcmVz
b3VyY2VzID0gc2Vzc2lvblJlc291cmNlTWFwKHJlc291cmNlLnNlc3Npb25JRCgpKSkgewotI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgICAgIGF1dG8ga2V5ID0gc3RkOjptYWtl
X3BhaXIocmVzb3VyY2UudXJsKCksIHJlc291cmNlLmNhY2hlUGFydGl0aW9uKCkpOwotI2Vsc2UK
LSAgICAgICAgYXV0byYga2V5ID0gcmVzb3VyY2UudXJsKCk7Ci0jZW5kaWYKKwogICAgICAgICBp
ZiAocmVzb3VyY2UuaW5DYWNoZSgpKSB7CiAgICAgICAgICAgICAvLyBSZW1vdmUgcmVzb3VyY2Ug
ZnJvbSB0aGUgcmVzb3VyY2UgbWFwLgogICAgICAgICAgICAgcmVzb3VyY2VzLT5yZW1vdmUoa2V5
KTsKQEAgLTUyNywyMSArNTA5LDE3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlc291cmNlQWNjZXNz
ZWQoQ2FjaGUKIAogdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbihT
ZWN1cml0eU9yaWdpbiYgb3JpZ2luKQogewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CiAgICAgU3RyaW5nIG9yaWdpblBhcnRpdGlvbiA9IFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9u
TmFtZShvcmlnaW4uaG9zdCgpKTsKLSNlbmRpZgogCiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNl
Kj4gcmVzb3VyY2VzV2l0aE9yaWdpbjsKICAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vz
c2lvblJlc291cmNlcy52YWx1ZXMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDog
KnJlc291cmNlcykgewogICAgICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFs
dWU7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICAgICAgICAgIGF1dG8mIHBh
cnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYgKHBhcnRp
dGlvbk5hbWUgPT0gb3JpZ2luUGFydGl0aW9uKSB7CiAgICAgICAgICAgICAgICAgcmVzb3VyY2Vz
V2l0aE9yaWdpbi5hcHBlbmQoJnJlc291cmNlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiByZXNvdXJjZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkp
OwogICAgICAgICAgICAgaWYgKHJlc291cmNlT3JpZ2luLT5lcXVhbCgmb3JpZ2luKSkKICAgICAg
ICAgICAgICAgICByZXNvdXJjZXNXaXRoT3JpZ2luLmFwcGVuZCgmcmVzb3VyY2UpOwpAQCAtNTU4
LDI1ICs1MzYsMTkgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaQog
ICAgIGlmICghcmVzb3VyY2VNYXApCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCiAgICAgSGFzaFNldDxTdHJpbmc+IG9yaWdpblBhcnRpdGlvbnM7CiAK
ICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMpCiAgICAgICAgIG9yaWdpblBhcnRpdGlv
bnMuYWRkKFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShvcmlnaW4tPmhvc3QoKSkpOwot
I2VuZGlmCiAKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiByZXNvdXJjZXNUb1JlbW92ZTsK
ICAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6ICpyZXNvdXJjZU1hcCkgewogICAgICAgICBh
dXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZVBhaXIudmFsdWU7Ci0KLSNpZiBFTkFCTEUoQ0FDSEVf
UEFSVElUSU9OSU5HKQogICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWVQYWly
LmtleS5zZWNvbmQ7CiAgICAgICAgIGlmIChvcmlnaW5QYXJ0aXRpb25zLmNvbnRhaW5zKHBhcnRp
dGlvbk5hbWUpKSB7CiAgICAgICAgICAgICByZXNvdXJjZXNUb1JlbW92ZS5hcHBlbmQoJnJlc291
cmNlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0jZW5kaWYKLQogICAgICAg
ICBpZiAob3JpZ2lucy5jb250YWlucyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291cmNlLnVy
bCgpKS5wdHIoKSkpCiAgICAgICAgICAgICByZXNvdXJjZXNUb1JlbW92ZS5hcHBlbmQoJnJlc291
cmNlKTsKICAgICB9CkBAIC01ODcsMTkgKzU1OSwxNCBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZW1v
dmVSZXNvdXJjZXNXaXRoT3JpCiAKIHZvaWQgTWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2Fj
aGUoU2VjdXJpdHlPcmlnaW5TZXQmIG9yaWdpbnMpCiB7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJ
VElPTklORykKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBodHRwU3RyaW5nKCJo
dHRwIik7Ci0jZW5kaWYKICAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJlc291
cmNlcy52YWx1ZXMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKnJlc291cmNl
cykgewogICAgICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFsdWU7Ci0jaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICAgICAgICAgIGF1dG8mIHBhcnRpdGlvbk5h
bWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYgKCFwYXJ0aXRpb25OYW1l
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKGh0dHBTdHJpbmcsIHBhcnRpdGlvbk5hbWUsIDApKTsKKyAgICAgICAgICAgICAgICBv
cmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEFTQ0lJTGl0ZXJhbCgiaHR0cCIpLCBw
YXJ0aXRpb25OYW1lLCAwKSk7CiAgICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAg
IG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkpKTsKKyAg
ICAgICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291cmNl
LnVybCgpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02MTIsMTMgKzU3OSwxMSBAQCBIYXNo
U2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IE1lbW9yeUNhCiAgICAgaWYgKGl0ICE9IG1fc2Vz
c2lvblJlc291cmNlcy5lbmQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKml0
LT52YWx1ZSkgewogICAgICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFsdWU7
Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICAgICAgICAgIGF1dG8mIHBhcnRp
dGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYgKCFwYXJ0aXRp
b25OYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKCJodHRwIiwgcGFydGl0aW9uTmFtZSwgMCkpOwogICAgICAgICAgICAgZWxz
ZQotI2VuZGlmCi0gICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
KHJlc291cmNlLnVybCgpKSk7CisgICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShyZXNvdXJjZS51cmwoKSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24gMjEx
ODkzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCwxMSArMTY4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUsIGJvb2wg
c2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyA9IGZhbHNlKTsKIAog
cHJpdmF0ZToKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIHR5cGVkZWYgSGFz
aE1hcDxzdGQ6OnBhaXI8VVJMLCBTdHJpbmcgLyogcGFydGl0aW9uTmFtZSAqLz4sIENhY2hlZFJl
c291cmNlKj4gQ2FjaGVkUmVzb3VyY2VNYXA7Ci0jZWxzZQotICAgIHR5cGVkZWYgSGFzaE1hcDxV
UkwsIENhY2hlZFJlc291cmNlKj4gQ2FjaGVkUmVzb3VyY2VNYXA7Ci0jZW5kaWYKICAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gTFJVTGlzdDsKIAogICAgIE1lbW9yeUNh
Y2hlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNp
b24gMjExODkzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5NSw3ICszOTUsNiBAQCB2b2lkIFNlY3VyaXR5T3JpZ2luOjpncmFu
dFN0b3JhZ2VBY2Nlc3NGCiAgICAgbV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWly
ayA9IHRydWU7CiB9CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogU3RyaW5nIFNl
Y3VyaXR5T3JpZ2luOjpkb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpIGNvbnN0CiB7CiAgICAgaWYg
KG1fc3RvcmFnZUJsb2NraW5nUG9saWN5ICE9IEJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpCkBAIC00
MDksNyArNDA4LDYgQEAgU3RyaW5nIFNlY3VyaXR5T3JpZ2luOjpkb21haW5Gb3JDYWNoZVBhcgog
CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBTZWN1cml0eU9y
aWdpbjo6ZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbigpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9TZWN1cml0eU9yaWdpbi5oCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw5ICsxMzgsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyaygpOwog
ICAgIGJvb2wgbmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoKSBjb25zdCB7IHJl
dHVybiBtX25lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrOyB9CiAKLSNpZiBFTkFC
TEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBkb21haW5G
b3JDYWNoZVBhcnRpdGlvbigpIGNvbnN0OwotI2VuZGlmCiAKICAgICBib29sIGNhbkFjY2Vzc0Rh
dGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4pIGNvbnN0IHsgcmV0dXJuIGNh
bkFjY2Vzc1N0b3JhZ2UoJnRvcE9yaWdpbik7IH07CiAgICAgYm9vbCBjYW5BY2Nlc3NTZXNzaW9u
U3RvcmFnZShjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luKSBjb25zdCB7IHJldHVybiBj
YW5BY2Nlc3NTdG9yYWdlKCZ0b3BPcmlnaW4sIEFsd2F5c0FsbG93RnJvbVRoaXJkUGFydHkpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCShyZXZp
c2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NywxMyArMTY3LDExIEBAIHN0YXRpYyBVUkxTY2hlbWVz
TWFwJiBDb250ZW50U2VjdXJpdHlQb2wKICAgICByZXR1cm4gc2NoZW1lczsKIH0KIAotI2lmIEVO
QUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiBzdGF0aWMgVVJMU2NoZW1lc01hcCYgY2FjaGVQYXJ0
aXRpb25pbmdTY2hlbWVzKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VVJMU2NoZW1l
c01hcD4gc2NoZW1lczsKICAgICByZXR1cm4gc2NoZW1lczsKIH0KLSNlbmRpZgogCiBzdGF0aWMg
VVJMU2NoZW1lc01hcCYgYWx3YXlzUmV2YWxpZGF0ZWRTY2hlbWVzKCkKIHsKQEAgLTM0Myw3ICsz
NDEsNiBAQCBib29sIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRBbHdheXNSZXZhbGlkCiAgICAgcmV0
dXJuIGFsd2F5c1JldmFsaWRhdGVkU2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAKLSNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogdm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0
ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7CiAg
ICAgY2FjaGVQYXJ0aXRpb25pbmdTY2hlbWVzKCkuYWRkKHNjaGVtZSk7CkBAIC0zNTUsNyArMzUy
LDYgQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkUGFydGl0aW9uQ2FjaAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGNhY2hlUGFydGl0aW9uaW5nU2NoZW1lcygpLmNvbnRh
aW5zKHNjaGVtZSk7CiB9Ci0jZW5kaWYKIAogYm9vbCBTY2hlbWVSZWdpc3RyeTo6aXNVc2VyRXh0
ZW5zaW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCwx
MSArOTQsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgcmVnaXN0
ZXJVUkxTY2hlbWVBc0Fsd2F5c1JldmFsaWRhdGVkKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRp
YyBib29sIHNob3VsZEFsd2F5c1JldmFsaWRhdGVVUkxTY2hlbWUoY29uc3QgU3RyaW5nJik7CiAK
LSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIC8vIFNjaGVtZXMgd2hvc2UgcmVx
dWVzdHMgc2hvdWxkIGJlIHBhcnRpdGlvbmVkIGluIHRoZSBjYWNoZQogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0
IFN0cmluZyYgc2NoZW1lKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRQYXJ0aXRpb25DYWNoZUZv
clVSTFNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7Ci0jZW5kaWYKIAogICAgIHN0YXRpYyBi
b29sIGlzVXNlckV4dGVuc2lvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0
ZW1JbnRlcmZhY2VJT1MubW0JKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw5ICs2Niw3IEBAIFdFQkNPUkVfRVhQT1JUIENGU3RyaW5nUmVmKCp3a0NhcHRpb25BcHAK
IFdFQkNPUkVfRVhQT1JUIGJvb2wgKCp3a0lzUHVibGljU3VmZml4KShOU1N0cmluZyAqaG9zdCk7
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiBXRUJDT1JFX0VYUE9S
VCBDRlN0cmluZ1JlZiAoKndrQ2FjaGVQYXJ0aXRpb25LZXkpKHZvaWQpOwotI2VuZGlmCiAKIFdF
QkNPUkVfRVhQT1JUIGludCAoKndrRXhlcm5hbERldmljZVR5cGVGb3JQbGF5ZXIpKEFWUGxheWVy
ICopOwogV0VCQ09SRV9FWFBPUlQgTlNTdHJpbmcgKigqd2tFeGVybmFsRGV2aWNlRGlzcGxheU5h
bWVGb3JQbGF5ZXIpKEFWUGxheWVyICopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCShyZXZpc2lvbiAyMTE4OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsOSArMjM1LDcgQEAgZXh0ZXJuIENHRmxvYXQgKCp3a05T
UmVib3VuZERlbHRhRm9yRWxhcwogZXh0ZXJuIGJvb2wgKCp3a0lzUHVibGljU3VmZml4KShOU1N0
cmluZyAqaG9zdCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiBl
eHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0NhY2hlUGFydGl0aW9uS2V5KSh2b2lkKTsKLSNlbmRpZgog
CiB0eXBlZGVmIGVudW0gewogICAgIHdrRXh0ZXJuYWxQbGF5YmFja1R5cGVOb25lLApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UubW0JKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSArMTEz
LDcgQEAgQ0dGbG9hdCAoKndrTlNSZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdAogYm9vbCAoKndr
SXNQdWJsaWNTdWZmaXgpKE5TU3RyaW5nICpob3N0KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKIENGU3RyaW5nUmVmICgqd2tDYWNoZVBhcnRpdGlvbktleSkodm9p
ZCk7Ci0jZW5kaWYKIAogaW50ICgqd2tFeGVybmFsRGV2aWNlVHlwZUZvclBsYXllcikoQVZQbGF5
ZXIgKik7CiBOU1N0cmluZyAqKCp3a0V4ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZUZvclBsYXllciko
QVZQbGF5ZXIgKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAkocmV2aXNpb24gMjExODkzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDExICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Ns
aWVudChjbGllbnQpCiAgICAgICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVzdCkKICAgICAgICAg
LCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpKQotI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCiAgICAgICAgICwgbV9wYXJ0aXRpb24ocmVxdWVzdC5jYWNoZVBhcnRp
dGlvbigpKQotI2Vsc2UKLSAgICAgICAgLCBtX3BhcnRpdGlvbihlbXB0eVN0cmluZygpKQotI2Vu
ZGlmCiAgICAgICAgICwgbV9kZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpCiAgICAgICAgICwg
bV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQogICAgICAgICAsIG1fdXNl
c0FzeW5jQ2FsbGJhY2tzKGNsaWVudCAmJiBjbGllbnQtPnVzZXNBc3luY0NhbGxiYWNrcygpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgogCiAjaW5j
bHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCisjaW5jbHVkZSAiUHVibGljU3VmZml4LmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29u
Lmg+CiAKQEAgLTY2LDYgKzY3LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRBc0lz
b2xhdGVkQwogICAgIHNldFByaW9yaXR5KG90aGVyLnByaW9yaXR5KCkpOwogICAgIHNldFJlcXVl
c3RlcihvdGhlci5yZXF1ZXN0ZXIoKSk7CiAgICAgc2V0SW5pdGlhdG9ySWRlbnRpZmllcihvdGhl
ci5pbml0aWF0b3JJZGVudGlmaWVyKCkuaXNvbGF0ZWRDb3B5KCkpOworICAgIHNldENhY2hlUGFy
dGl0aW9uKG90aGVyLmNhY2hlUGFydGl0aW9uKCkpOwogCiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KCk7CiAgICAgbV9odHRwSGVhZGVyRmllbGRzID0gb3RoZXIuaHR0cEhlYWRlckZpZWxkcygp
Lmlzb2xhdGVkQ29weSgpOwpAQCAtODYsOCArODgsNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJh
c2U6OnNldEFzSXNvbGF0ZWRDCiAgICAgaWYgKG90aGVyLm1faHR0cEJvZHkpCiAgICAgICAgIHNl
dEhUVFBCb2R5KG90aGVyLm1faHR0cEJvZHktPmlzb2xhdGVkQ29weSgpKTsKICAgICBzZXRBbGxv
d0Nvb2tpZXMob3RoZXIubV9hbGxvd0Nvb2tpZXMpOwotCi0gICAgY29uc3RfY2FzdDxSZXNvdXJj
ZVJlcXVlc3QmPihhc1Jlc291cmNlUmVxdWVzdCgpKS5kb1BsYXRmb3JtU2V0QXNJc29sYXRlZENv
cHkob3RoZXIpOwogfQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmlzRW1wdHkoKSBjb25z
dApAQCAtNjQwLDQgKzY0MCwzMiBAQCBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OmRlZmF1bHRB
bGxvd0NvCiB9CiAjZW5kaWYKIAordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRDYWNoZVBh
cnRpdGlvbihjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKQoreworI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCisgICAgQVNTRVJUKCFjYWNoZVBhcnRpdGlvbi5pc051bGwoKSk7Cisg
ICAgQVNTRVJUKGNhY2hlUGFydGl0aW9uID09IHBhcnRpdGlvbk5hbWUoY2FjaGVQYXJ0aXRpb24p
KTsKKyAgICBtX2NhY2hlUGFydGl0aW9uID0gY2FjaGVQYXJ0aXRpb247CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShjYWNoZVBhcnRpdGlvbik7CisjZW5kaWYKK30KKworU3RyaW5nIFJlc291cmNl
UmVxdWVzdEJhc2U6OnBhcnRpdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisjaWYg
RU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKKyAgICBpZiAoZG9tYWluLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBTdHJpbmcgaGlnaExldmVsID0gdG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbihkb21haW4pOworICAgIGlmIChoaWdoTGV2ZWwuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBoaWdoTGV2ZWw7
CisjZWxzZQorI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisjZXJyb3IgQ2FjaGUgcGFy
dGl0aW9uaW5nIHJlcXVpcmVzIFBVQkxJQ19TVUZGSVhfTElTVAorI2VuZGlmCisgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CisjZW5kaWYKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9u
IDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDExIEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkp
OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBwYXJ0aXRpb25OYW1lKGNvbnN0
IFN0cmluZyYgZG9tYWluKTsKKyAgICBjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9jYWNoZVBhcnRpdGlvbjsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0Q2FjaGVQYXJ0aXRpb24oY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXREb21haW5Gb3JD
YWNoZVBhcnRpdGlvbihjb25zdCBTdHJpbmcmIGRvbWFpbikgeyBzZXRDYWNoZVBhcnRpdGlvbihw
YXJ0aXRpb25OYW1lKGRvbWFpbikpOyB9CisKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQ29u
ZGl0aW9uYWwoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1ha2VVbmNvbmRpdGlv
bmFsKCk7CiAKQEAgLTIzNyw2ICsyNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgbV9wcmlvcml0eSB7IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgfTsKICAgICBS
ZXF1ZXN0ZXIgbV9yZXF1ZXN0ZXIgeyBSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkIH07CiAgICAgU3Ry
aW5nIG1faW5pdGlhdG9ySWRlbnRpZmllcjsKKyAgICBTdHJpbmcgbV9jYWNoZVBhcnRpdGlvbiB7
IGVtcHR5U3RyaW5nKCkgfTsKIAogcHJpdmF0ZToKICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHJl
dmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNywxMSArMTM3LDcgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aQogICAgICAgICBmaXJzdFJl
cXVlc3QoKS5zZXRVUkwodXJsV2l0aENyZWRlbnRpYWxzKTsKICAgICB9CiAKLSNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQogICAgIFN0cmluZyBwYXJ0aXRpb24gPSBmaXJzdFJlcXVlc3Qo
KS5jYWNoZVBhcnRpdGlvbigpOwotI2Vsc2UKLSAgICBTdHJpbmcgcGFydGl0aW9uID0gZW1wdHlT
dHJpbmcoKTsKLSNlbmRpZgogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9y
IFVSTHMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2Vk
IGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLAogICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhl
IGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgpAQCAtMzA2
LDExICszMDIsNyBAQCBSZXNvdXJjZVJlcXVlc3QgUmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kCiAg
ICAgZC0+bV9sYXN0SFRUUE1ldGhvZCA9IHJlcXVlc3QuaHR0cE1ldGhvZCgpOwogICAgIHJlcXVl
c3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7
Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCiAK
ICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChyZXF1ZXN0LnVybCgpLCByZWRp
cmVjdFJlc3BvbnNlLnVybCgpKSkgewogICAgICAgICAvLyBUaGUgbmV0d29yayBsYXllciBtaWdo
dCBjYXJyeSBvdmVyIHNvbWUgaGVhZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRoYXQK
QEAgLTM5NSwxMSArMzg3LDcgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6dHJ5SGFuZGxlUGFzc3dv
cmRCYQogICAgIGlmICghY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLmlzUGFzc3dvcmRCYXNl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9O
SU5HKQogICAgIFN0cmluZyBwYXJ0aXRpb24gPSBmaXJzdFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlv
bigpOwotI2Vsc2UKLSAgICBTdHJpbmcgcGFydGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKLSNlbmRp
ZgogCiAgICAgaWYgKCFkLT5tX3VzZXIuaXNOdWxsKCkgJiYgIWQtPm1fcGFzcy5pc051bGwoKSkg
ewogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDcmVkZW50aWFsUmVmPiBjZkNyZWRlbnRpYWwgPSBh
ZG9wdENGKENGVVJMQ3JlZGVudGlhbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkLT5tX3Vz
ZXIuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgZC0+bV9wYXNzLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCksIDAsIGtDRlVSTENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpKTsKQEAgLTQ5MCwxMyArNDc4
LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKAogICAgICAgICBp
ZiAoY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKQog
ICAgICAgICAgICAgdXJsVG9TdG9yZSA9IGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwo
KTsgCiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgICAgICBTdHJpbmcgcGFy
dGl0aW9uID0gZmlyc3RSZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24oKTsKLSNlbHNlCi0gICAgICAg
IFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCi0KLSAgICAgICAgZC0+
bV9jb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRp
dGlvbiwgd2ViQ3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCB1cmxUb1N0
b3JlKTsKKyAgICAgICAgZC0+bV9jb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxT
dG9yYWdlKCkuc2V0KGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCksIHdlYkNyZWRlbnRp
YWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9yZSk7CiAKICAgICAgICAg
aWYgKGQtPm1fY29ubmVjdGlvbikgewogI2lmIFBMQVRGT1JNKENPQ09BKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5o
CShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxNyArOTQsNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENGU3RyaW5nUmVmIGlzVXNlckluaXRpYXRl
ZEtleSgpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcGFydGl0aW9uTmFtZShjb25zdCBTdHJpbmcmIGRv
bWFpbik7Ci0gICAgY29uc3QgU3RyaW5nJiBjYWNoZVBhcnRpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY2FjaGVQYXJ0aXRpb24uaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogbV9jYWNoZVBhcnRp
dGlvbjsgfQotICAgIHZvaWQgc2V0Q2FjaGVQYXJ0aXRpb24oY29uc3QgU3RyaW5nJiBjYWNoZVBh
cnRpdGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjYWNoZVBhcnRpdGlvbiA9PSBwYXJ0aXRp
b25OYW1lKGNhY2hlUGFydGl0aW9uKSk7Ci0gICAgICAgIG1fY2FjaGVQYXJ0aXRpb24gPSBjYWNo
ZVBhcnRpdGlvbjsKLSAgICB9Ci0gICAgdm9pZCBzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihj
b25zdCBTdHJpbmcmIGRvbWFpbikgeyBtX2NhY2hlUGFydGl0aW9uID0gcGFydGl0aW9uTmFtZShk
b21haW4pOyB9Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQ0ZVUkxDT05O
RUNUSU9OKQogICAgIFdFQkNPUkVfRVhQT1JUIENGVVJMUmVxdWVzdFJlZiBjZlVSTFJlcXVlc3Qo
SFRUUEJvZHlVcGRhdGVQb2xpY3kpIGNvbnN0OwogICAgIHZvaWQgc2V0U3RvcmFnZVNlc3Npb24o
Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZik7CkBAIC0xMzEsOSArMTIwLDYgQEAgcHJpdmF0ZToKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBtX25zUmVxdWVz
dDsKICNlbmRpZgotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgU3RyaW5nIG1f
Y2FjaGVQYXJ0aXRpb247Ci0jZW5kaWYKIAogICAgIHN0YXRpYyBib29sIHNfaHR0cFBpcGVsaW5p
bmdFbmFibGVkOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCShyZXZpc2lvbiAyMTE4
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVz
dENGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDMyICszNjEsNiBAQCB2b2lkIFJlc291
cmNlUmVxdWVzdDo6c2V0SFRUUFBpcGVsaW5pbmdFCiAgICAgc19odHRwUGlwZWxpbmluZ0VuYWJs
ZWQgPSBmbGFnOwogfQogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLVN0cmluZyBS
ZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBkb21haW4pCi17Ci0g
ICAgaWYgKGRvbWFpbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0j
aWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKLSAgICBTdHJpbmcgaGlnaExldmVsID0gdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihkb21haW4pOwotICAgIGlmIChoaWdoTGV2ZWwuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBoaWdoTGV2
ZWw7Ci0jZWxzZQotICAgIHJldHVybiBkb21haW47Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lk
IFJlc291cmNlUmVxdWVzdDo6ZG9QbGF0Zm9ybVNldEFzSXNvbGF0ZWRDb3B5KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgb3RoZXIpCi17Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAg
ICBtX2NhY2hlUGFydGl0aW9uID0gb3RoZXIubV9jYWNoZVBhcnRpdGlvbi5pc29sYXRlZENvcHko
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG90aGVyKTsKLSNlbmRpZgotfQotCi0KIC8vIEZJ
WE1FOiBJdCBpcyBjb25mdXNpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGJvdGggc2V0cyBjb25uZWN0
aW9uIGNvdW50IGFuZCBkZXRlcm1pbmVzIG1heGltdW0gcmVxdWVzdCBjb3VudCBhdCBuZXR3b3Jr
IGxheWVyLiBUaGlzIGNhbiBhbmQgc2hvdWxkIGJlIGRvbmUgc2VwYXJhdGVseS4KIHVuc2lnbmVk
IGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKQogewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
c3BvbnNlLmgJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcGxhdGZvcm1TdWdnZXN0ZWRGaWxlbmFtZSgpIGNv
bnN0OwogICAgIENlcnRpZmljYXRlSW5mbyBwbGF0Zm9ybUNlcnRpZmljYXRlSW5mbygpIGNvbnN0
OwogCi0gICAgdm9pZCBkb1BsYXRmb3JtU2V0QXNJc29sYXRlZENvcHkoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIGNvbnN0OwotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBpbml0TlNV
UkxSZXNwb25zZSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2Eu
bW0JKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0OCwxMyAr
MTQ4LDExIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmUKICAgICAg
ICAgICAgIG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXku
dW5jaGVja2VkQXBwZW5kKENGU3RyaW5nQ29udmVydEVuY29kaW5nVG9JQU5BQ2hhclNldE5hbWUo
ZW5jb2RpbmcpKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
IGlmIChtX25zUmVxdWVzdCkgewogICAgICAgICBOU1N0cmluZyogY2FjaGVQYXJ0aXRpb24gPSBb
TlNVUkxQcm90b2NvbCBwcm9wZXJ0eUZvcktleTooTlNTdHJpbmcgKil3a0NhY2hlUGFydGl0aW9u
S2V5KCkgaW5SZXF1ZXN0Om1fbnNSZXF1ZXN0LmdldCgpXTsKICAgICAgICAgaWYgKGNhY2hlUGFy
dGl0aW9uKQogICAgICAgICAgICAgbV9jYWNoZVBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uOwog
ICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVSZXNvdXJj
ZUhUVFBCb2R5KCkKQEAgLTIxOCwxMyArMjE2LDExIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpk
b1VwZGF0ZVBsYXRmb3JtUmUKICAgICB9CiAgICAgW25zUmVxdWVzdCBzZXRDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6ZW5jb2RpbmdGYWxsYmFja3NdOwogCi0jaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBTdHJpbmcgcGFydGl0aW9uID0gY2FjaGVQYXJ0
aXRpb24oKTsKICAgICBpZiAoIXBhcnRpdGlvbi5pc051bGwoKSAmJiAhcGFydGl0aW9uLmlzRW1w
dHkoKSkgewogICAgICAgICBOU1N0cmluZyAqcGFydGl0aW9uVmFsdWUgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6cGFydGl0aW9uLnV0ZjgoKS5kYXRhKCldOwogICAgICAgICBbTlNV
UkxQcm90b2NvbCBzZXRQcm9wZXJ0eTpwYXJ0aXRpb25WYWx1ZSBmb3JLZXk6KE5TU3RyaW5nICop
d2tDYWNoZVBhcnRpdGlvbktleSgpIGluUmVxdWVzdDpuc1JlcXVlc3RdOwogICAgIH0KLSNlbmRp
ZgogCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDEyMDApCiAgICAgaWYgKG1fdXJsLmlzTG9jYWxGaWxlKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmwuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc5LDExICsxNzksNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewotI2lmIEVO
QUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVx
dWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBl
bXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAgICBpZiAoIWQtPm1fdXNlci5pc051bGwoKSAmJiAh
ZC0+bV9wYXNzLmlzTnVsbCgpKSB7CiAgICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbChkLT5t
X3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7CkBAIC0yNDEsMTEg
KzIzNyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCgKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAg
U3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxz
ZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAgICBp
ZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgewogICAgICAgICBpZiAoY2hhbGxlbmdl
LmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNDEsMTEgKzEwNDEsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdl
cjo6YXBwbHlBdXRoZW50CiAgICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2
ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1M
SHR0cFJlcXVlc3Qub3BlbigpLgogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5k
bGUtPmdldEludGVybmFsKCk7CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAg
IFN0cmluZyBwYXJ0aXRpb24gPSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9u
KCk7Ci0jZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlm
CiAKICAgICBpZiAoaGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7CiAgICAg
ICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jl
c291cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTQ2LDEyICsxNDYsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVOU1VSTENvbm5l
Y3RpCiAgICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxz
IHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3Ig
SFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCiAgICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNl
IHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgICAgICAgICAgU3RyaW5nIHBhcnRpdGlv
biA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgICAgICAgICAg
U3RyaW5nIHBhcnRpdGlvbiA9IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGQt
Pm1faW5pdGlhbENyZWRlbnRpYWwgPSBkLT5tX2NvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkuY3Jl
ZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0aW9uLCBmaXJzdFJlcXVlc3QoKS51cmwoKSk7Cisg
ICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gZC0+bV9jb250ZXh0LT5zdG9yYWdl
U2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFy
dGl0aW9uKCksIGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtub3duIGZv
ciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzIGJlZm9yZSBzZW5kaW5nIGEgcmVx
dWVzdC4KICAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50
IGxvZ291dCBieSBzZW5kaW5nIGFuIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0
IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAxLDExICsyMDEsNyBAQCBzdGF0aWMgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0
CiAgICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZv
ciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3Bl
bigpLgogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFs
KCk7CiAKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIFN0cmluZyBwYXJ0aXRp
b24gPSBmaXJzdFJlcXVlc3QoKS5jYWNoZVBhcnRpdGlvbigpOwotI2Vsc2UKLSAgICBTdHJpbmcg
cGFydGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKLSNlbmRpZgorICAgIFN0cmluZyBwYXJ0aXRpb24g
PSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7CiAKICAgICBpZiAoaGFuZGxlLT5zaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZSgpKSB7CiAgICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYm
IGQtPm1fcGFzcy5pc0VtcHR5KCkpCkBAIC04MjksMTEgKzgyNSw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWMKIHsKICAgICBBU1NFUlQoZC0+bV9jdXJyZW50V2Vi
Q2hhbGxlbmdlLmlzTnVsbCgpKTsKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAg
ICAgU3RyaW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0j
ZWxzZQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBlbXB0eVN0cmluZygpOwotI2VuZGlmCiAKICAg
ICAvLyBGSVhNRTogUGVyIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGUgdXNlciBzaG91bGRuJ3QgYmUg
YXNrZWQgZm9yIGNyZWRlbnRpYWxzIGlmIHRoZXJlIHdlcmUgaW5jb3JyZWN0IG9uZXMgcHJvdmlk
ZWQgZXhwbGljaXRseS4KICAgICBib29sIHVzZUNyZWRlbnRpYWxTdG9yYWdlID0gc2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UoKTsKQEAgLTg5OSwxMSArODkxLDcgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBTdHJpbmcgcGFydGl0aW9uID0gZmlyc3RS
ZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24oKTsKLSNlbHNlCi0gICAgU3RyaW5nIHBhcnRpdGlvbiA9
IGVtcHR5U3RyaW5nKCk7Ci0jZW5kaWYKIAogICAgIGlmIChzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSgpKSB7CiAgICAgICAgIC8vIEV2ZW50dWFsbHkgd2Ugd2lsbCBtYW5hZ2UgcGVyLXNlc3Np
b24gY3JlZGVudGlhbHMgb25seSBpbnRlcm5hbGx5IG9yIHVzZSBzb21lIG5ld2x5LWV4cG9zZWQg
QVBJIGZyb20gbGlic291cCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJ
KHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDkgKzU2MSw4IEBAIGJvb2wgSW50ZXJuYWxzOjppc0xv
YWRpbmdGcm9tTWVtb3J5Q2FjaGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QoY29udGV4dERvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkpOwot
I2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgcmVxdWVzdC5zZXREb21haW5Gb3JD
YWNoZVBhcnRpdGlvbihjb250ZXh0RG9jdW1lbnQoKS0+dG9wT3JpZ2luKCkuZG9tYWluRm9yQ2Fj
aGVQYXJ0aXRpb24oKSk7Ci0jZW5kaWYKKyAgICAKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3Qs
IGNvbnRleHREb2N1bWVudCgpLT5wYWdlKCktPnNlc3Npb25JRCgpKTsKICAgICByZXR1cm4gcmVz
b3VyY2UgJiYgcmVzb3VyY2UtPnN0YXR1cygpID09IENhY2hlZFJlc291cmNlOjpDYWNoZWQ7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTE4OTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxNy0wMi0wOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIG1vc3QgY2FzZXMg
b2YgI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc5OTAKKworICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZXRy
aWV2ZUNhY2hlRW50cnkpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6Om1ha2VDYWNo
ZUtleSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29u
c3RydWN0UmV2YWxpZGF0aW9uUmVxdWVzdCk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1
ZXN0Pjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVl
c3Q+OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tD
b250ZXh0UmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1faGlkZGVuUGFn
ZVRocm90dGxpbmdUaW1lcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVh
dGVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJTeXN0ZW1JbnRlcmZhY2UubW06CisgICAgICAgIChJbml0V2ViQ29yZVN5c3RlbUludGVyZmFj
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluOgorCiAyMDE3LTAyLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBzcGVjdWxhdGl2ZSByZWRpcmVjdHMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAko
cmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTEgKzYzLDcgQEAgTmV0d29ya0Rh
dGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29yawogICAgIDogbV9mYWlsdXJlVGltZXIoKnRo
aXMsICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQogICAgICwgbV9zZXNzaW9u
KHNlc3Npb24pCiAgICAgLCBtX2NsaWVudCgmY2xpZW50KQotI2lmIEVOQUJMRShDQUNIRV9QQVJU
SVRJT05JTkcpCiAgICAgLCBtX3BhcnRpdGlvbihyZXF1ZXN0V2l0aENyZWRlbnRpYWxzLmNhY2hl
UGFydGl0aW9uKCkpCi0jZWxzZQotICAgICwgbV9wYXJ0aXRpb24oZW1wdHlTdHJpbmcoKSkKLSNl
bmRpZgogICAgICwgbV9zdG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscykKICAgICAs
IG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhDcmVkZW50aWFscy5odHRwTWV0aG9kKCkpCiAg
ICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0aENyZWRlbnRpYWxzKQpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiAyMTE4OTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzIsMTcgKzU3
MiwxMiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmV0cmlldmVDCiAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShlbnRyeS0+
cmVzcG9uc2UoKSwgbmVlZHNDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZU1lc3NhZ2UpKTsKIAog
ICAgIGlmIChlbnRyeS0+c291cmNlU3RvcmFnZVJlY29yZCgpLmJvZHlIYXNoICYmICFtX3BhcmFt
ZXRlcnMuZGVyaXZlZENhY2hlZERhdGFUeXBlc1RvUmV0cmlldmUuaXNFbXB0eSgpKSB7Ci0jaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IG9y
aWdpbmFsUmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7Ci0jZWxzZQotICAgICAgICBTdHJpbmcg
cGFydGl0aW9uOwotI2VuZGlmCiAgICAgICAgIGF1dG8gYm9keUhhc2ggPSAqZW50cnktPnNvdXJj
ZVN0b3JhZ2VSZWNvcmQoKS5ib2R5SGFzaDsKICAgICAgICAgYXV0byogZW50cnlQdHIgPSBlbnRy
eS5yZWxlYXNlKCk7CiAgICAgICAgIGF1dG8gcmV0cmlldmVDb3VudCA9IG1fcGFyYW1ldGVycy5k
ZXJpdmVkQ2FjaGVkRGF0YVR5cGVzVG9SZXRyaWV2ZS5zaXplKCk7CiAKICAgICAgICAgZm9yIChh
dXRvJiB0eXBlIDogbV9wYXJhbWV0ZXJzLmRlcml2ZWRDYWNoZWREYXRhVHlwZXNUb1JldHJpZXZl
KSB7Ci0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OkRhdGFLZXkga2V5IHsgcGFydGl0aW9uLCB0
eXBlLCBib2R5SGFzaCB9OworICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpEYXRhS2V5IGtleSB7
IG9yaWdpbmFsUmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCksIHR5cGUsIGJvZHlIYXNoIH07CiAg
ICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnJldHJpZXZlRGF0YShrZXksIFts
b2FkZXIgPSBtYWtlUmVmKCp0aGlzKSwgZW50cnlQdHIsIHR5cGUsIHJldHJpZXZlQ291bnRdIChj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgbG9hZGVyLT5tX3JldHJpZXZlZERlcml2ZWREYXRhQ291bnQrKzsKICAgICAgICAgICAgICAg
ICBib29sIHJldHJpZXZlZEFsbCA9IGxvYWRlci0+bV9yZXRyaWV2ZWREZXJpdmVkRGF0YUNvdW50
ID09IHJldHJpZXZlQ291bnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDIxMTg5NCkKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNiwxNiArMTE2LDEwIEBAIHZvaWQgQ2FjaGU6OnNldENhcGFjaXR5KHNp
emVfdCBtYXhpbXVtU2kKIAogS2V5IENhY2hlOjptYWtlQ2FjaGVLZXkoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05J
TkcpCi0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IHJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsKLSNl
bHNlCi0gICAgU3RyaW5nIHBhcnRpdGlvbjsKLSNlbmRpZgotCiAgICAgLy8gRklYTUU6IFRoaXMg
aW1wbGVtZW50cyBtaW5pbWFsIFJhbmdlIGhlYWRlciBkaXNrIGNhY2hlIHN1cHBvcnQuIFdlIGRv
bid0IHBhcnNlCiAgICAgLy8gcmFuZ2VzIHNvIG9ubHkgdGhlIHNhbWUgZXhhY3QgcmFuZ2UgcmVx
dWVzdCB3aWxsIGJlIHNlcnZlZCBmcm9tIHRoZSBjYWNoZS4KICAgICBTdHJpbmcgcmFuZ2UgPSBy
ZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6UmFuZ2UpOwot
ICAgIHJldHVybiB7IHBhcnRpdGlvbiwgcmVzb3VyY2VUeXBlKCksIHJhbmdlLCByZXF1ZXN0LnVy
bCgpLnN0cmluZygpLCBtX3N0b3JhZ2UtPnNhbHQoKSB9OworICAgIHJldHVybiB7IHJlcXVlc3Qu
Y2FjaGVQYXJ0aXRpb24oKSwgcmVzb3VyY2VUeXBlKCksIHJhbmdlLCByZXF1ZXN0LnVybCgpLnN0
cmluZygpLCBtX3N0b3JhZ2UtPnNhbHQoKSB9OwogfQogCiBzdGF0aWMgYm9vbCBjYWNoZVBvbGlj
eUFsbG93c0V4cGlyZWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5
KQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5j
cHAJKHJldmlzaW9uIDIxMTg5NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OSwxMiArODksMTAgQEAgc3RhdGljIGlubGluZSBSZXNvdXJjZVJlcXVlc3QgY29uc3Ry
dWN0UgogICAgIFJlc291cmNlUmVxdWVzdCByZXZhbGlkYXRpb25SZXF1ZXN0KGtleS5pZGVudGlm
aWVyKCkpOwogICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkcyhzdWJS
ZXNvdXJjZUluZm8ucmVxdWVzdEhlYWRlcnMoKSk7CiAgICAgcmV2YWxpZGF0aW9uUmVxdWVzdC5z
ZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhzdWJSZXNvdXJjZUluZm8uZmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBpZiAoIWtleS5wYXJ0
aXRpb24oKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0Q2FjaGVQ
YXJ0aXRpb24oa2V5LnBhcnRpdGlvbigpKTsKLSNlbmRpZgogICAgIEFTU0VSVF9XSVRIX01FU1NB
R0Uoa2V5LnJhbmdlKCkuaXNFbXB0eSgpLCAicmFuZ2UgaXMgbm90IHN1cHBvcnRlZCIpOwotCisg
ICAgCiAgICAgcmV2YWxpZGF0aW9uUmVxdWVzdC5tYWtlVW5jb25kaXRpb25hbCgpOwogICAgIGlm
IChlbnRyeSkgewogICAgICAgICBTdHJpbmcgZVRhZyA9IGVudHJ5LT5yZXNwb25zZSgpLmh0dHBI
ZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6RVRhZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjExODkzKQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3OSwxMCArOTc5LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEN1cnNvcj46
OmRlY29kZShEZWNvZAogCiB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0KQogewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgZW5jb2RlciA8PCBy
ZXNvdXJjZVJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsKLSNlbmRpZgotCiAgICAgZW5jb2RlciA8
PCByZXNvdXJjZVJlcXVlc3QuaGlkZGVuRnJvbUluc3BlY3RvcigpOwogCiAgICAgaWYgKHJlc291
cmNlUmVxdWVzdC5lbmNvZGluZ1JlcXVpcmVzUGxhdGZvcm1EYXRhKCkpIHsKQEAgLTk5NiwxMiAr
OTkzLDEwIEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmMKIAogYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKLSNpZiBFTkFCTEUoQ0FDSEVf
UEFSVElUSU9OSU5HKQogICAgIFN0cmluZyBjYWNoZVBhcnRpdGlvbjsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGNhY2hlUGFydGl0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
c291cmNlUmVxdWVzdC5zZXRDYWNoZVBhcnRpdGlvbihjYWNoZVBhcnRpdGlvbik7Ci0jZW5kaWYK
IAogICAgIGJvb2wgaXNIaWRkZW5Gcm9tSW5zcGVjdG9yOwogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaXNIaWRkZW5Gcm9tSW5zcGVjdG9yKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDIx
MTg5MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsOSArOTEsNyBAQCB2b2lkIFdlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzRGlzcGxheUlzb2xhdGVkOwogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0NPUlNFbmFibGVkOwogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Fs
d2F5c1JldmFsaWRhdGVkOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgZW5j
b2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ2FjaGVQYXJ0aXRpb25lZDsKLSNlbmRpZgog
ICAgIGVuY29kZXIuZW5jb2RlRW51bShjYWNoZU1vZGVsKTsKICAgICBlbmNvZGVyIDw8IHNob3Vs
ZEFsd2F5c1VzZUNvbXBsZXhUZXh0Q29kZVBhdGg7CiAgICAgZW5jb2RlciA8PCBzaG91bGRFbmFi
bGVNZW1vcnlQcmVzc3VyZVJlbGllZkxvZ2dpbmc7CkBAIC0yMjEsMTAgKzIxOSw4IEBAIGJvb2wg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzQWx3YXlzUmV2YWxpZGF0ZWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxF
KENBQ0hFX1BBUlRJVElPTklORykKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NhY2hlUGFydGl0aW9uZWQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwYXJhbWV0ZXJzLmNh
Y2hlTW9kZWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwYXJhbWV0ZXJzLnNob3VsZEFsd2F5c1VzZUNvbXBsZXhUZXh0Q29kZVBhdGgpKQpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCShyZXZpc2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsOSArMTAwLDcg
QEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJp
bmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5SXNvbGF0ZWQ7CiAgICAgVmVjdG9yPFN0
cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NPUlNFbmFibGVkOwogICAgIFZlY3RvcjxTdHJp
bmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNBbHdheXNSZXZhbGlkYXRlZDsKLSNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNDYWNoZVBhcnRpdGlvbmVkOwotI2VuZGlmCiAKICAgICBDYWNoZU1vZGVsIGNhY2hlTW9k
ZWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDEwICsxODcsOCBAQCBXZWJQcm9jZXNz
UG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBt
X2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQogICAgICAgICBt
X3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1lKTsKIAotI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgZm9yIChjb25zdCBhdXRvJiB1cmxTY2hl
bWUgOiBtX2NvbmZpZ3VyYXRpb24tPmNhY2hlUGFydGl0aW9uZWRVUkxTY2hlbWVzKCkpCiAgICAg
ICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0NhY2hlUGFydGl0aW9uZWQuYWRkKHVybFNjaGVtZSk7
Ci0jZW5kaWYKIAogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01OTYsOSArNTk0LDcg
QEAgV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlTgogICAgIGNvcHlUb1Zl
Y3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNEaXNwbGF5SXNvbGF0ZWQsIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0Rpc3BsYXlJc29sYXRlZCk7CiAgICAgY29weVRvVmVjdG9yKG1f
c2NoZW1lc1RvUmVnaXN0ZXJBc0NPUlNFbmFibGVkLCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNDT1JTRW5hYmxlZCk7CiAgICAgY29weVRvVmVjdG9yKG1fc2NoZW1lc1RvUmVnaXN0
ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNB
bHdheXNSZXZhbGlkYXRlZCk7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBj
b3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzQ2FjaGVQYXJ0aXRpb25lZCwgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ2FjaGVQYXJ0aXRpb25lZCk7Ci0jZW5kaWYKIAog
ICAgIHBhcmFtZXRlcnMuc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCA9IG1fYWx3
YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGg7CiAgICAgcGFyYW1ldGVycy5zaG91bGRVc2VGb250
U21vb3RoaW5nID0gbV9zaG91bGRVc2VGb250U21vb3RoaW5nOwpAQCAtMTAwNCwxMyArMTAwMCwx
MSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMCiAgICAgICAgIHBy
b2Nlc3NQb29sLT51bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsK
IH0KIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDYWNoZVBhcnRpdGlvbmVkLmFkZCh1
cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQodXJsU2NoZW1lKSk7CiB9Ci0jZW5k
aWYKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hl
TW9kZWwpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aAkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw5ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCByZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0NPUlNFbmFibGVkKGNvbnN0IFN0cmluZyYpOwotI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFz
Q2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmKTsKLSNlbmRpZgogCiAgICAgVmlzaXRlZExp
bmtTdG9yZSYgdmlzaXRlZExpbmtTdG9yZSgpIHsgcmV0dXJuIG1fdmlzaXRlZExpbmtTdG9yZS5n
ZXQoKTsgfQogCkBAIC00OTksOSArNDk3LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9zY2hlbWVzVG9SZWdpc3RlckFzRGlzcGxheUlzb2xhdGVkOwogICAgIEhhc2hTZXQ8U3Ry
aW5nPiBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDT1JTRW5hYmxlZDsKICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxpZGF0ZWQ7Ci0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKICAgICBIYXNoU2V0PFN0cmluZz4gbV9zY2hlbWVzVG9SZWdpc3Rl
ckFzQ2FjaGVQYXJ0aXRpb25lZDsKLSNlbmRpZgogCiAgICAgYm9vbCBtX2Fsd2F5c1VzZXNDb21w
bGV4VGV4dENvZGVQYXRoOwogICAgIGJvb2wgbV9zaG91bGRVc2VGb250U21vb3RoaW5nOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlz
aW9uIDIxMTg5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksMTIgKzM3OSw3IEBAIHZvaWQgV0tDb250ZXh0UmVn
aXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2kKIAogdm9pZCBXS0NvbnRleHRSZWdpc3RlclVSTFNjaGVt
ZUFzQ2FjaGVQYXJ0aXRpb25lZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYg
dXJsU2NoZW1lKQogewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgdG9JbXBs
KGNvbnRleHRSZWYpLT5yZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZCh0b0ltcGwo
dXJsU2NoZW1lKS0+c3RyaW5nKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dFJl
Zik7Ci0gICAgVU5VU0VEX1BBUkFNKHVybFNjaGVtZSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXS0Nv
bnRleHRTZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiB1cmxTY2hlbWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNywx
MCArMzM3LDggQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZQogICAg
IGZvciAoYXV0byYgc2NoZW1lIDogcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQWx3
YXlzUmV2YWxpZGF0ZWQpCiAgICAgICAgIHJlZ2lzdGVyVVJMU2NoZW1lQXNBbHdheXNSZXZhbGlk
YXRlZChzY2hlbWUpOwogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICBmb3Ig
KGF1dG8mIHNjaGVtZSA6IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NhY2hlUGFy
dGl0aW9uZWQpCiAgICAgICAgIHJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKHNj
aGVtZSk7Ci0jZW5kaWYKIAogICAgIHNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKHBh
cmFtZXRlcnMuZGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwpOwogCkBAIC00NjIsMTIgKzQ2
MCwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OnJlZ2lzdGVyVVJMU2NoZW1lQXNBbHdhCiAgICAgU2No
ZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNBbHdheXNSZXZhbGlkYXRlZCh1cmxTY2hl
bWUpOwogfQogCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKIHZvaWQgV2ViUHJvY2Vz
czo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxT
Y2hlbWUpIGNvbnN0CiB7CiAgICAgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXND
YWNoZVBhcnRpdGlvbmVkKHVybFNjaGVtZSk7CiB9Ci0jZW5kaWYKIAogdm9pZCBXZWJQcm9jZXNz
OjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFs
KQogewpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9u
IDIxMTg5MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTcsOSArMjU3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lzdGVy
VVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9p
ZCByZWdpc3RlclVSTFNjaGVtZUFzQ09SU0VuYWJsZWQoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAg
ICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzQWx3YXlzUmV2YWxpZGF0ZWQoY29uc3QgU3RyaW5n
JikgY29uc3Q7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKICAgICB2b2lkIHJlZ2lz
dGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotI2Vu
ZGlmCiAgICAgdm9pZCBzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUpOwog
ICAgIHZvaWQgc2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYm9vbCk7CiAgICAgdm9p
ZCBzZXRTaG91bGRVc2VGb250U21vb3RoaW5nKGJvb2wpOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjExODkz
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw3IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nlc3MgTGVn
YWN5UmVjZWl2ZXIgewogICAgIFJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2VzcyhTdHJpbmcgc2No
ZW1lKQogICAgIFJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQoU3RyaW5nIHNjaGVt
ZSkKICAgICBSZWdpc3RlclVSTFNjaGVtZUFzQ09SU0VuYWJsZWQoU3RyaW5nIHNjaGVtZSkKLSNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIFJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNo
ZVBhcnRpdGlvbmVkKFN0cmluZyBzY2hlbWUpCi0jZW5kaWYKICAgICBTZXREZWZhdWx0UmVxdWVz
dFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQogICAgIFNldEFsd2F5c1Vz
ZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29tcGxleFRleHQpCiAgICAgU2V0
U2hvdWxkVXNlRm9udFNtb290aGluZyhib29sIHVzZUZvbnRTbW9vdGhpbmcpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZp
c2lvbiAyMTE4OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODksMTEgKzE1ODksNyBAQCB2b2lkIFBsdWdp
blZpZXc6OnNldENvb2tpZXNGb3JVUkwoY29uc3QgCiAKIGJvb2wgUGx1Z2luVmlldzo6Z2V0QXV0
aGVudGljYXRpb25JbmZvKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBT
dHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKQogewotI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCiAgICAgU3RyaW5nIHBhcnRpdGlvbk5hbWUgPSBtX3BsdWdpbkVsZW1lbnQt
PmNvbnRlbnREb2N1bWVudCgpLT50b3BEb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCkuZG9tYWlu
Rm9yQ2FjaGVQYXJ0aXRpb24oKTsKLSNlbHNlCi0gICAgU3RyaW5nIHBhcnRpdGlvbk5hbWUgPSBl
bXB0eVN0cmluZygpOwotI2VuZGlmCiAgICAgQ3JlZGVudGlhbCBjcmVkZW50aWFsID0gQ3JlZGVu
dGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb25OYW1l
LCBwcm90ZWN0aW9uU3BhY2UpOwogICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkKICAgICAg
ICAgY3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3Jh
Z2UoKS5nZXRGcm9tUGVyc2lzdGVudFN0b3JhZ2UocHJvdGVjdGlvblNwYWNlKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVy
ZmFjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDIxMTg5MykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVy
ZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSw3IEBAIHZvaWQgSW5pdFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKICAgICAgICAgSU5JVChJc1B1YmxpY1N1ZmZpeCk7CiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgICAgIElOSVQoQ2Fj
aGVQYXJ0aXRpb25LZXkpOwotI2VuZGlmCiAKICAgICAgICAgSU5JVChFeGVybmFsRGV2aWNlVHlw
ZUZvclBsYXllcik7CiAgICAgICAgIElOSVQoRXhlcm5hbERldmljZURpc3BsYXlOYW1lRm9yUGxh
eWVyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTg5MykKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3
LTAyLTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1v
dmUgbW9zdCBjYXNlcyBvZiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Nzk5MAorCisgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgor
ICAgICAgICAoK1tXZWJDYWNoZSBhZGRJbWFnZVRvQ2FjaGU6Zm9yVVJMOmZvckZyYW1lOl0pOgor
ICAgICAgICAoK1tXZWJDYWNoZSByZW1vdmVJbWFnZUZyb21DYWNoZUZvclVSTDpmb3JGcmFtZTpd
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW06CisgICAg
ICAgIChJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSk6CisKIDIwMTctMDItMDYgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBjcmVkZW50aWFs
cyBzaG91bGQgYmUgcGFydGl0aW9uZWQgYnkgbWFpbiBkb2N1bWVudCBkb21haW4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQkocmV2aXNpb24gMjExODkzKQorKysgU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9DcmVkZW50aWFsU3RvcmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Dcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL01lbW9yeUNhY2hlLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxp
emVUaHJlYWRpbmcuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC00OCwxMCArNDks
NiBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkUnVuLmg+CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+
Ci0jZW5kaWYKLQogQGltcGxlbWVudGF0aW9uIFdlYkNhY2hlCiAKICsgKHZvaWQpaW5pdGlhbGl6
ZQpAQCAtMTY4LDEwICsxNjUsOCBAQCArIChib29sKWFkZEltYWdlVG9DYWNoZTooQ0dJbWFnZVJl
ZilpbWFnCiAgICAgaWYgKCFpbWFnZSB8fCAhdXJsIHx8ICFbW3VybCBhYnNvbHV0ZVN0cmluZ10g
bGVuZ3RoXSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luKiB0b3BPcmlnaW4gPSBudWxscHRyOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CiAgICAgaWYgKGZyYW1lKQogICAgICAgICB0b3BPcmlnaW4gPSAmY29yZShmcmFtZSktPmRvY3Vt
ZW50KCktPnRvcE9yaWdpbigpOwotI2VuZGlmCiAgICAgcmV0dXJuIFdlYkNvcmU6Ok1lbW9yeUNh
Y2hlOjpzaW5nbGV0b24oKS5hZGRJbWFnZVRvQ2FjaGUoUmV0YWluUHRyPENHSW1hZ2VSZWY+KGlt
YWdlKSwgdXJsLCB0b3BPcmlnaW4gPyB0b3BPcmlnaW4tPmRvbWFpbkZvckNhY2hlUGFydGl0aW9u
KCkgOiBlbXB0eVN0cmluZygpKTsKIH0KIApAQCAtMTg1LDEwICsxODAsOCBAQCArICh2b2lkKXJl
bW92ZUltYWdlRnJvbUNhY2hlRm9yVVJMOihOU1VSCiAgICAgaWYgKCF1cmwpCiAgICAgICAgIHJl
dHVybjsKICAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogdG9wT3JpZ2luID0gbnVsbHB0cjsK
LSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGlmIChmcmFtZSkKICAgICAgICAg
dG9wT3JpZ2luID0gJmNvcmUoZnJhbWUpLT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKTsKLSNlbmRp
ZgogICAgIFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVJbWFnZUZyb21D
YWNoZSh1cmwsIHRvcE9yaWdpbiA/IHRvcE9yaWdpbi0+ZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24o
KSA6IGVtcHR5U3RyaW5nKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lvbiAyMTE4
OTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZh
Y2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNCw5ICsxMjQsNyBAQCB2b2lkIEluaXRXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlKHZvaWQpCiAgICAgSU5JVChJc1B1YmxpY1N1ZmZpeCk7CiAjZW5kaWYK
IAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgSU5JVChDYWNoZVBhcnRpdGlv
bktleSk7Ci0jZW5kaWYKIAogICAgIElOSVQoRXhlcm5hbERldmljZVR5cGVGb3JQbGF5ZXIpOwog
ICAgIElOSVQoRXhlcm5hbERldmljZURpc3BsYXlOYW1lRm9yUGxheWVyKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>