<?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>174794</bug_id>
          
          <creation_ts>2017-07-24 12:37:29 -0700</creation_ts>
          <short_desc>ExceptionCode enumeration should use modern exception names</short_desc>
          <delta_ts>2017-07-24 20:59:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1331707</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-24 12:37:29 -0700</bug_when>
    <thetext>ExceptionCode enumeration should use modern exception names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331712</commentid>
    <comment_count>1</comment_count>
      <attachid>316310</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-24 12:48:42 -0700</bug_when>
    <thetext>Created attachment 316310
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331713</commentid>
    <comment_count>2</comment_count>
      <attachid>316311</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-24 12:53:36 -0700</bug_when>
    <thetext>Created attachment 316311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331845</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-24 20:16:32 -0700</bug_when>
    <thetext>Anyone interested in reviewing this big but mechanical change? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331850</commentid>
    <comment_count>4</comment_count>
      <attachid>316311</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-07-24 20:31:01 -0700</bug_when>
    <thetext>Comment on attachment 316311
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331851</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-24 20:31:36 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #4)
&gt; Comment on attachment 316311 [details]
&gt; Patch
&gt; 
&gt; r=me

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331861</commentid>
    <comment_count>6</comment_count>
      <attachid>316311</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-24 20:59:18 -0700</bug_when>
    <thetext>Comment on attachment 316311
Patch

Clearing flags on attachment: 316311

Committed r219856: &lt;http://trac.webkit.org/changeset/219856&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331862</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-24 20:59:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316310</attachid>
            <date>2017-07-24 12:48:42 -0700</date>
            <delta_ts>2017-07-24 12:53:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174794-20170724124841.patch</filename>
            <type>text/plain</type>
            <size>492428</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5ODMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDNmMDZlNjA3MTcyN2Q3
YmIwMzgyOWFlNzExNjM3ODU5NDU3OThmMi4uZGIxNjY1YmFhODBiY2QyZDVhZTZhMDBiODU2N2M0
NTczNGU2NzM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE3LTA3LTI0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlbnVt
ZXJhdGlvbiBzaG91bGQgdXNlIG1vZGVybiBleGNlcHRpb24gbmFtZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDc5NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZW51bWVyYXRp
b24gc2hvdWxkIHVzZSBtb2Rlcm4gZXhjZXB0aW9uIG5hbWVzIGNvbnNpc3RlbnRseS4KKyAgICAg
ICAgVGhpcyBtYWtlcyB0aGUgY29kZSBuaWNlciBhbmQgY2xvc2VyIHRvIHRoZSB0ZXh0IG9mIHRo
ZSBzcGVjaWZpY2F0aW9uLgorCisyMDE3LTA3LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CisKICAgICAgICAgTWFrZSBFeGNlcHRpb25Db2RlIGEgcHJvcGVyIGVudW1lcmF0aW9u
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3NzEK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGNmNzgzOGQyMTU4M2IxYmZhNGQ1Njdj
MjE1NjNmOWFiY2ZhOWE5ODIuLmZhY2M2MTEzMDc0NDUzZTA4YTY5YzNlZmM1ZGVhZGFmMDRhZDdk
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0w
Ny0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZW51bWVyYXRpb24gc2hvdWxkIHVzZSBtb2Rlcm4gZXhjZXB0aW9uIG5hbWVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3OTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9FeGNlcHRp
b25IYW5kbGVycy5tbToKKyAgICAgICAgKHJhaXNlTm90U3VwcG9ydGVkRXJyb3JFeGNlcHRpb24p
OgorCiAyMDE3LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgRHJvcCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAppbmRleCBlZjg3MjFm
NjAxODEzNzAzMGFjMzgzYjkwYWVlMmZhMTBlMDlkZjZjLi4xYzU3ZjNiOWIwYjYzNzBjOGExY2Fm
NzJhMjRkMjIxZWY3MTM3ZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
cHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwCkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIEV4
Y2VwdGlvbk9yPFBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0PiBjb252ZXJ0QW5kVmFsaWRhdGUo
QXBwbGVQYXlQYXltZW4KICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICB9CiAKICAgICBjb252ZXJ0ZWRS
ZXN1bHQuZXJyb3JzLmFwcGVuZFZlY3Rvcihjb252ZXJ0KHJlc3VsdC5lcnJvcnMpKTsKQEAgLTU0
MCwyMSArNTQwLDIxIEBAIHN0YXRpYyBib29sIGlzU2VjdXJlKERvY3VtZW50TG9hZGVyJiBkb2N1
bWVudExvYWRlcikKIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBjYW5DYWxsQXBwbGVQYXlTZXNz
aW9uQVBJcyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFpc1NlY3VyZSgqZG9jdW1l
bnQubG9hZGVyKCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBwbGVQYXlTZXNzaW9uIEFQSSBmcm9tIGFuIGluc2Vj
dXJlIGRvY3VtZW50LiIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciwgIlRyeWluZyB0byBjYWxsIGFuIEFwcGxlUGF5U2Vzc2lvbiBBUEkgZnJvbSBhbiBp
bnNlY3VyZSBkb2N1bWVudC4iIH07CiAKICAgICBhdXRvJiB0b3BEb2N1bWVudCA9IGRvY3VtZW50
LnRvcERvY3VtZW50KCk7CiAgICAgaWYgKCZkb2N1bWVudCAhPSAmdG9wRG9jdW1lbnQpIHsKICAg
ICAgICAgYXV0byYgdG9wT3JpZ2luID0gdG9wRG9jdW1lbnQudG9wT3JpZ2luKCk7CiAKICAgICAg
ICAgaWYgKCFkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpLmlzU2FtZVNjaGVtZUhvc3RQb3J0KHRv
cE9yaWdpbikpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBwbGVQYXlTZXNzaW9uIEFQSSBmcm9tIGEgZG9jdW1l
bnQgd2l0aCBhbiBkaWZmZXJlbnQgc2VjdXJpdHkgb3JpZ2luIHRoYW4gaXRzIHRvcC1sZXZlbCBm
cmFtZS4iIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBwbGVQYXlTZXNzaW9uIEFQSSBmcm9tIGEgZG9jdW1l
bnQgd2l0aCBhbiBkaWZmZXJlbnQgc2VjdXJpdHkgb3JpZ2luIHRoYW4gaXRzIHRvcC1sZXZlbCBm
cmFtZS4iIH07CiAKICAgICAgICAgZm9yIChhdXRvKiBhbmNlc3RvckRvY3VtZW50ID0gZG9jdW1l
bnQucGFyZW50RG9jdW1lbnQoKTsgYW5jZXN0b3JEb2N1bWVudCAhPSAmdG9wRG9jdW1lbnQ7IGFu
Y2VzdG9yRG9jdW1lbnQgPSBhbmNlc3RvckRvY3VtZW50LT5wYXJlbnREb2N1bWVudCgpKSB7CiAg
ICAgICAgICAgICBpZiAoIWlzU2VjdXJlKCphbmNlc3RvckRvY3VtZW50LT5sb2FkZXIoKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgIlRy
eWluZyB0byBjYWxsIGFuIEFwcGxlUGF5U2Vzc2lvbiBBUEkgZnJvbSBhIGRvY3VtZW50IHdpdGgg
YW4gaW5zZWN1cmUgcGFyZW50IGZyYW1lLiIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBwbGVQYXlT
ZXNzaW9uIEFQSSBmcm9tIGEgZG9jdW1lbnQgd2l0aCBhbiBpbnNlY3VyZSBwYXJlbnQgZnJhbWUu
IiB9OwogCiAgICAgICAgICAgICBpZiAoIWFuY2VzdG9yRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCkuaXNTYW1lU2NoZW1lSG9zdFBvcnQodG9wT3JpZ2luKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBw
bGVQYXlTZXNzaW9uIEFQSSBmcm9tIGEgZG9jdW1lbnQgd2l0aCBhbiBkaWZmZXJlbnQgc2VjdXJp
dHkgb3JpZ2luIHRoYW4gaXRzIHRvcC1sZXZlbCBmcmFtZS4iIH07CisgICAgICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIlRyeWluZyB0byBjYWxsIGFu
IEFwcGxlUGF5U2Vzc2lvbiBBUEkgZnJvbSBhIGRvY3VtZW50IHdpdGggYW4gZGlmZmVyZW50IHNl
Y3VyaXR5IG9yaWdpbiB0aGFuIGl0cyB0b3AtbGV2ZWwgZnJhbWUuIiB9OwogICAgICAgICB9CiAg
ICAgfQogCkBAIC01NjgsMTIgKzU2OCwxMiBAQCBFeGNlcHRpb25PcjxSZWY8QXBwbGVQYXlTZXNz
aW9uPj4gQXBwbGVQYXlTZXNzaW9uOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCB1bgogICAg
ICAgICByZXR1cm4gY2FuQ2FsbC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKICAgICBpZiAoIVNjcmlw
dENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSLCAiTXVzdCBjcmVhdGUgYSBuZXcgQXBwbGVQYXlT
ZXNzaW9uIGZyb20gYSB1c2VyIGdlc3R1cmUgaGFuZGxlci4iIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJNdXN0IGNyZWF0ZSBhIG5ldyBBcHBsZVBh
eVNlc3Npb24gZnJvbSBhIHVzZXIgZ2VzdHVyZSBoYW5kbGVyLiIgfTsKIAogICAgIGF1dG8mIHBh
eW1lbnRDb29yZGluYXRvciA9IGRvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLnBheW1lbnRD
b29yZGluYXRvcigpOwogCiAgICAgaWYgKCF2ZXJzaW9uIHx8ICFwYXltZW50Q29vcmRpbmF0b3Iu
c3VwcG9ydHNWZXJzaW9uKHZlcnNpb24pKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9BQ0NFU1NfRVJSLCBtYWtlU3RyaW5nKCJcIiIgKyBTdHJpbmc6Om51bWJlcih2ZXJzaW9u
KSwgIlwiIGlzIG5vdCBhIHN1cHBvcnRlZCB2ZXJzaW9uLiIpIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIG1ha2VTdHJpbmcoIlwiIiArIFN0cmluZzo6
bnVtYmVyKHZlcnNpb24pLCAiXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZlcnNpb24uIikgfTsKIAog
ICAgIGF1dG8gY29udmVydGVkUGF5bWVudFJlcXVlc3QgPSBjb252ZXJ0QW5kVmFsaWRhdGUodmVy
c2lvbiwgV1RGTW92ZShwYXltZW50UmVxdWVzdCkpOwogICAgIGlmIChjb252ZXJ0ZWRQYXltZW50
UmVxdWVzdC5oYXNFeGNlcHRpb24oKSkKQEAgLTU5Niw3ICs1OTYsNyBAQCBBcHBsZVBheVNlc3Np
b246On5BcHBsZVBheVNlc3Npb24oKQogRXhjZXB0aW9uT3I8Ym9vbD4gQXBwbGVQYXlTZXNzaW9u
OjpzdXBwb3J0c1ZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgdW5zaWduZWQgdmVyc2lvbikKIHsKICAgICBpZiAoIXZlcnNpb24pCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKQEAgLTY2Myw3
ICs2NjMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246Om9wZW5QYXltZW50
U2V0dXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaQogICAgICAgICByZXR1cm4gY2FuQ2Fs
bC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKICAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSLCAiTXVzdCBjYWxsIEFwcGxlUGF5U2Vzc2lvbi5vcGVuUGF5bWVudFNldHVwIGZy
b20gYSB1c2VyIGdlc3R1cmUgaGFuZGxlci4iIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IsICJNdXN0IGNhbGwgQXBwbGVQYXlTZXNzaW9uLm9wZW5QYXlt
ZW50U2V0dXAgZnJvbSBhIHVzZXIgZ2VzdHVyZSBoYW5kbGVyLiIgfTsKIAogICAgIFJlZlB0cjxE
ZWZlcnJlZFByb21pc2U+IHByb21pc2UoV1RGTW92ZShwYXNzZWRQcm9taXNlKSk7CiAgICAgYXV0
byYgcGF5bWVudENvb3JkaW5hdG9yID0gZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkucGF5
bWVudENvb3JkaW5hdG9yKCk7CkBAIC02NzgsMTAgKzY3OCwxMCBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBBcHBsZVBheVNlc3Npb246Om9wZW5QYXltZW50U2V0dXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgc2NyaQogRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpiZWdpbigpCiB7CiAg
ICAgaWYgKCFjYW5CZWdpbigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSLCAiUGF5bWVudCBzZXNzaW9uIGlzIGFscmVhZHkgYWN0aXZlLiIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIlBheW1lbnQgc2Vzc2lv
biBpcyBhbHJlYWR5IGFjdGl2ZS4iIH07CiAKICAgICBpZiAocGF5bWVudENvb3JkaW5hdG9yKCku
aGFzQWN0aXZlU2Vzc2lvbigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSLCAiUGFnZSBhbHJlYWR5IGhhcyBhbiBhY3RpdmUgcGF5bWVudCBzZXNzaW9uLiIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIlBhZ2Ug
YWxyZWFkeSBoYXMgYW4gYWN0aXZlIHBheW1lbnQgc2Vzc2lvbi4iIH07CiAKICAgICBhdXRvJiBk
b2N1bWVudCA9ICpkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
IApAQCAtNjkwLDcgKzY5MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6
YmVnaW4oKQogICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKGljb24udXJsKTsKIAogICAgIGlm
ICghcGF5bWVudENvb3JkaW5hdG9yKCkuYmVnaW5QYXltZW50U2Vzc2lvbigqdGhpcywgZG9jdW1l
bnQudXJsKCksIGxpbmtJY29uVVJMcywgbV9wYXltZW50UmVxdWVzdCkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIsICJUaGVyZSBpcyBhbHJlYWR5IGhhcyBh
biBhY3RpdmUgcGF5bWVudCBzZXNzaW9uLiIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciwgIlRoZXJlIGlzIGFscmVhZHkgaGFzIGFuIGFjdGl2ZSBwYXlt
ZW50IHNlc3Npb24uIiB9OwogCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBY3RpdmU7CiAKQEAgLTcw
Miw3ICs3MDIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmJlZ2luKCkK
IEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6YWJvcnQoKQogewogICAgIGlmICgh
Y2FuQWJvcnQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
ICAgICBtX3N0YXRlID0gU3RhdGU6OkFib3J0ZWQ7CiAgICAgcGF5bWVudENvb3JkaW5hdG9yKCku
YWJvcnRQYXltZW50U2Vzc2lvbigpOwpAQCAtNzE1LDcgKzcxNSw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IEFwcGxlUGF5U2Vzc2lvbjo6YWJvcnQoKQogRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlT
ZXNzaW9uOjpjb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSBtZXJjaGFudFNlc3Npb25WYWx1ZSkKIHsKICAgICBpZiAoIWNhbkNvbXBs
ZXRlTWVyY2hhbnRWYWxpZGF0aW9uKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAgICAgaWYgKCFtZXJjaGFudFNlc3Npb25WYWx1ZS5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CkBAIC03MjcsNyArNzI3LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZU1lcmNoYW50VmFs
aWRhdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3QKICAgICBhdXRvIG1lcmNoYW50U2Vzc2lvbiA9IFBh
eW1lbnRNZXJjaGFudFNlc3Npb246OmZyb21KUyhzdGF0ZSwgYXNPYmplY3QobWVyY2hhbnRTZXNz
aW9uVmFsdWUpLCBlcnJvck1lc3NhZ2UpOwogICAgIGlmICghbWVyY2hhbnRTZXNzaW9uKSB7CiAg
ICAgICAgIHdpbmRvdy5wcmludEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICB9CiAKICAgICBtX21lcmNoYW50
VmFsaWRhdGlvblN0YXRlID0gTWVyY2hhbnRWYWxpZGF0aW9uU3RhdGU6OlZhbGlkYXRpb25Db21w
bGV0ZTsKQEAgLTczOSw3ICs3MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdAogRXhjZXB0
aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0
aW9uKEFwcGxlUGF5U2hpcHBpbmdNZXRob2RVcGRhdGUmJiB1cGRhdGUpCiB7CiAgICAgaWYgKCFj
YW5Db21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgYXV0byBjb252ZXJ0ZWRVcGRhdGUgPSBjb252
ZXJ0QW5kVmFsaWRhdGUoV1RGTW92ZSh1cGRhdGUpKTsKICAgICBpZiAoY29udmVydGVkVXBkYXRl
Lmhhc0V4Y2VwdGlvbigpKQpAQCAtNzU0LDcgKzc1NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFw
cGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbihBcHBsZVBheVNo
aXBwCiBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlU2hpcHBpbmdD
b250YWN0U2VsZWN0aW9uKEFwcGxlUGF5U2hpcHBpbmdDb250YWN0VXBkYXRlJiYgdXBkYXRlKQog
ewogICAgIGlmICghY2FuQ29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBhdXRvIGNvbnZlcnRl
ZFVwZGF0ZSA9IGNvbnZlcnRBbmRWYWxpZGF0ZShXVEZNb3ZlKHVwZGF0ZSkpOwogICAgIGlmIChj
b252ZXJ0ZWRVcGRhdGUuaGFzRXhjZXB0aW9uKCkpCkBAIC03NjksNyArNzY5LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVj
dGlvbihBcHBsZVBheVNoaXAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6Y29t
cGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEFwcGxlUGF5UGF5bWVudE1ldGhvZFVwZGF0ZSYm
IHVwZGF0ZSkKIHsKICAgICBpZiAoIWNhbkNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbigp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGF1dG8g
Y29udmVydGVkVXBkYXRlID0gY29udmVydEFuZFZhbGlkYXRlKFdURk1vdmUodXBkYXRlKSk7CiAg
ICAgaWYgKGNvbnZlcnRlZFVwZGF0ZS5oYXNFeGNlcHRpb24oKSkKQEAgLTc4NCw3ICs3ODQsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWVudE1ldGhv
ZFNlbGVjdGlvbihBcHBsZVBheVBheW1lbgogRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNz
aW9uOjpjb21wbGV0ZVBheW1lbnQoQXBwbGVQYXlQYXltZW50QXV0aG9yaXphdGlvblJlc3VsdCYm
IHJlc3VsdCkKIHsKICAgICBpZiAoIWNhbkNvbXBsZXRlUGF5bWVudCgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGF1dG8gY29udmVydGVkUmVzdWx0
T3JFeGNlcHRpb24gPSBjb252ZXJ0QW5kVmFsaWRhdGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICBp
ZiAoY29udmVydGVkUmVzdWx0T3JFeGNlcHRpb24uaGFzRXhjZXB0aW9uKCkpCkBAIC04MjcsNyAr
ODI3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBw
aW5nTWV0aG9kU2VsZWN0aW9uKHVuc2lnbmVkIHNob3IKICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
ICAgIH0KIAogICAgIHVwZGF0ZS5uZXdUb3RhbCA9IFdURk1vdmUobmV3VG90YWwpOwpAQCAtODY4
LDcgKzg2OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVT
aGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24odW5zaWduZWQgc2hvCiAgICAgICAgIGJyZWFrOwogCiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAg
ICAgfQogCiAgICAgaWYgKGVycm9yQ29kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcAppbmRleCBjNDlkZTUw
YzEwOWNkMmNkMWQ2YzJhZGVjZmFlM2ExMTY0OWVjNzNjLi45ZDA1MThkMzBiMzgxMTAyZmY5YzUy
MGRiZjZjYzkxNTNmODE2YzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
Y3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCkBAIC0xMTQsNyArMTE0LDcg
QEAgdm9pZCBNZWRpYUtleVNlc3Npb246OmdlbmVyYXRlUmVxdWVzdChjb25zdCBBdG9taWNTdHJp
bmcmIGluaXREYXRhVHlwZSwgY29uc3QgQnUKICAgICAvLyAxLiBJZiB0aGlzIG9iamVjdCBpcyBj
bG9zZWQsIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBhbiBJbnZhbGlkU3RhdGVFcnJv
ci4KICAgICAvLyAyLiBJZiB0aGlzIG9iamVjdCdzIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgZmFs
c2UsIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBhbiBJbnZhbGlkU3RhdGVFcnJvci4K
ICAgICBpZiAobV9jbG9zZWQgfHwgIW1fdW5pbml0aWFsaXplZCkgewotICAgICAgICBwcm9taXNl
LT5yZWplY3QoSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52
YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OmdlbmVyYXRlUmVxdWVzdChjb25zdCBBdG9taWNT
dHJpbmcmIGluaXREYXRhVHlwZSwgY29uc3QgQnUKICAgICAvLyAgICBpbml0RGF0YVR5cGUgYXMg
YW4gSW5pdGlhbGl6YXRpb24gRGF0YSBUeXBlLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdp
dGggYSBOb3RTdXBwb3J0ZWRFcnJvci4gU3RyaW5nCiAgICAgLy8gICAgY29tcGFyaXNvbiBpcyBj
YXNlLXNlbnNpdGl2ZS4KICAgICBpZiAoIW1faW1wbGVtZW50YXRpb24tPnN1cHBvcnRzSW5pdERh
dGFUeXBlKGluaXREYXRhVHlwZSkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5PVF9TVVBQ
T1JURURfRVJSKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5vdFN1cHBvcnRlZEVycm9yKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgTWVkaWFL
ZXlTZXNzaW9uOjpnZW5lcmF0ZVJlcXVlc3QoY29uc3QgQXRvbWljU3RyaW5nJiBpbml0RGF0YVR5
cGUsIGNvbnN0IEJ1CiAKICAgICAgICAgLy8gMTAuNC4gSWYgc2FuaXRpemVkIGluaXQgZGF0YSBp
cyBlbXB0eSwgcmVqZWN0IHByb21pc2Ugd2l0aCBhIE5vdFN1cHBvcnRlZEVycm9yLgogICAgICAg
ICBpZiAoc2FuaXRpemVkSW5pdERhdGEtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcHJvbWlz
ZS0+cmVqZWN0KE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgICAgIHByb21pc2UtPnJlamVj
dChOb3RTdXBwb3J0ZWRFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjpnZW5lcmF0ZVJlcXVlc3Qo
Y29uc3QgQXRvbWljU3RyaW5nJiBpbml0RGF0YVR5cGUsIGNvbnN0IEJ1CiAgICAgICAgIC8vIDEw
LjkuIFVzZSB0aGUgY2RtIHRvIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAgICAg
Ly8gMTAuOS4xLiBJZiB0aGUgc2FuaXRpemVkIGluaXQgZGF0YSBpcyBub3Qgc3VwcG9ydGVkIGJ5
IHRoZSBjZG0sIHJlamVjdCBwcm9taXNlIHdpdGggYSBOb3RTdXBwb3J0ZWRFcnJvci4KICAgICAg
ICAgaWYgKCFtX2ltcGxlbWVudGF0aW9uLT5zdXBwb3J0c0luaXREYXRhKGluaXREYXRhVHlwZSwg
KnNhbml0aXplZEluaXREYXRhKSkgewotICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5PVF9T
VVBQT1JURURfRVJSKTsKKyAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChOb3RTdXBwb3J0ZWRF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjExLDcgKzIxMSw3
IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjpnZW5lcmF0ZVJlcXVlc3QoY29uc3QgQXRvbWljU3Ry
aW5nJiBpbml0RGF0YVR5cGUsIGNvbnN0IEJ1CiAgICAgICAgICAgICBtX3Rhc2tRdWV1ZS5lbnF1
ZXVlVGFzayhbdGhpcywgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSksIG1lc3NhZ2UgPSBXVEZN
b3ZlKG1lc3NhZ2UpLCBtZXNzYWdlVHlwZSwgc2Vzc2lvbklkLCBzdWNjZWVkZWRdICgpIG11dGFi
bGUgewogICAgICAgICAgICAgICAgIC8vIDEwLjEwLjEuIElmIGFueSBvZiB0aGUgcHJlY2VkaW5n
IHN0ZXBzIGZhaWxlZCwgcmVqZWN0IHByb21pc2Ugd2l0aCBhIG5ldyBET01FeGNlcHRpb24gd2hv
c2UgbmFtZSBpcyB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbmFtZS4KICAgICAgICAgICAgICAgICBp
ZiAoc3VjY2VlZGVkID09IENETUluc3RhbmNlOjpTdWNjZXNzVmFsdWU6OkZhaWxlZCkgewotICAg
ICAgICAgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoTk9UX1NVUFBPUlRFRF9FUlIpOworICAg
ICAgICAgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIC8vIDEwLjEwLjIuIFNldCB0aGUgc2Vzc2lvbklkIGF0dHJpYnV0ZSB0byBzZXNzaW9uIGlk
LgpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjpsb2FkKGNvbnN0IFN0
cmluZyYgc2Vzc2lvbklkLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pCiAgICAgLy8gMS4g
SWYgdGhpcyBvYmplY3QgaXMgY2xvc2VkLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGgg
YW4gSW52YWxpZFN0YXRlRXJyb3IuCiAgICAgLy8gMi4gSWYgdGhpcyBvYmplY3QncyB1bmluaXRp
YWxpemVkIHZhbHVlIGlzIGZhbHNlLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYW4g
SW52YWxpZFN0YXRlRXJyb3IuCiAgICAgaWYgKG1fY2xvc2VkIHx8ICFtX3VuaW5pdGlhbGl6ZWQp
IHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAg
cHJvbWlzZS0+cmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzAxLDcgKzMwMSw3IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjpsb2FkKGNvbnN0
IFN0cmluZyYgc2Vzc2lvbklkLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pCiAgICAgICAg
ICAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChUeXBlRXJyb3IpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgY2FzZSBDRE1JbnN0YW5jZTo6U2Vzc2lvbkxv
YWRGYWlsdXJlOjpRdW90YUV4Y2VlZGVkOgotICAgICAgICAgICAgICAgICAgICBwcm9taXNlLT5y
ZWplY3QoUVVPVEFfRVhDRUVERURfRVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS0+
cmVqZWN0KFF1b3RhRXhjZWVkZWRFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICBjYXNlIENETUluc3RhbmNlOjpTZXNzaW9uTG9hZEZhaWx1cmU6Ok5v
bmU6CiAgICAgICAgICAgICAgICAgY2FzZSBDRE1JbnN0YW5jZTo6U2Vzc2lvbkxvYWRGYWlsdXJl
OjpPdGhlcjoKQEAgLTMxNCw3ICszMTQsNyBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lvbjo6bG9hZChj
b25zdCBTdHJpbmcmIHNlc3Npb25JZCwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taQogICAg
ICAgICAgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIGtub3duS2V5cyA9IFdURk1v
dmUoa25vd25LZXlzKSwgZXhwaXJhdGlvbiA9IFdURk1vdmUoZXhwaXJhdGlvbiksIG1lc3NhZ2Ug
PSBXVEZNb3ZlKG1lc3NhZ2UpLCBzYW5pdGl6ZWRTZXNzaW9uSWQsIHN1Y2NlZWRlZCwgcHJvbWlz
ZSA9IFdURk1vdmUocHJvbWlzZSldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIC8vIDgu
OS4xLiBJZiBhbnkgb2YgdGhlIHByZWNlZGluZyBzdGVwcyBmYWlsZWQsIHJlamVjdCBwcm9taXNl
IHdpdGggYSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbmFtZS4KICAgICAgICAgICAgICAgICBpZiAo
c3VjY2VlZGVkID09IENETUluc3RhbmNlOjpTdWNjZXNzVmFsdWU6OkZhaWxlZCkgewotICAgICAg
ICAgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAg
ICAgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCkBAIC0zNTMsNyArMzUz
LDcgQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OnVwZGF0ZShjb25zdCBCdWZmZXJTb3VyY2UmIHJl
c3BvbnNlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYKICAgICAvLyAxLiBJZiB0aGlzIG9iamVjdCBp
cyBjbG9zZWQsIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBhbiBJbnZhbGlkU3RhdGVF
cnJvci4KICAgICAvLyAyLiBJZiB0aGlzIG9iamVjdCdzIGNhbGxhYmxlIHZhbHVlIGlzIGZhbHNl
LCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYW4gSW52YWxpZFN0YXRlRXJyb3IuCiAg
ICAgaWYgKG1fY2xvc2VkIHx8ICFtX2NhbGxhYmxlKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVj
dChJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkU3Rh
dGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2
b2lkIE1lZGlhS2V5U2Vzc2lvbjo6Y2xvc2UoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNl
KQogCiAgICAgLy8gMy4gSWYgc2Vzc2lvbidzIGNhbGxhYmxlIHZhbHVlIGlzIGZhbHNlLCByZXR1
cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYW4gSW52YWxpZFN0YXRlRXJyb3IuCiAgICAgaWYg
KCFtX2NhbGxhYmxlKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX1NUQVRFX0VS
Uik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lv
bjo6cmVtb3ZlKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKICAgICAvLyAxLiBJZiB0
aGlzIG9iamVjdCBpcyBjbG9zZWQsIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBhbiBJ
bnZhbGlkU3RhdGVFcnJvci4KICAgICAvLyAyLiBJZiB0aGlzIG9iamVjdCdzIGNhbGxhYmxlIHZh
bHVlIGlzIGZhbHNlLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYW4gSW52YWxpZFN0
YXRlRXJyb3IuCiAgICAgaWYgKG1fY2xvc2VkIHx8ICFtX2NhbGxhYmxlKSB7Ci0gICAgICAgIHBy
b21pc2UtPnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21pc2UtPnJlamVj
dChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU1OSw3
ICs1NTksNyBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lvbjo6cmVtb3ZlKFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSkKIAogICAgICAgICAgICAgICAgIC8vIDQuNS4zLiBJZiBhbnkgb2YgdGhl
IHByZWNlZGluZyBzdGVwcyBmYWlsZWQsIHJlamVjdCBwcm9taXNlIHdpdGggYSBuZXcgRE9NRXhj
ZXB0aW9uIHdob3NlIG5hbWUgaXMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIG5hbWUuCiAgICAgICAg
ICAgICAgICAgaWYgKHN1Y2NlZWRlZCA9PSBDRE1JbnN0YW5jZTo6U3VjY2Vzc1ZhbHVlOjpGYWls
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5PVF9TVVBQT1JURURf
RVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5vdFN1cHBvcnRlZEVy
cm9yKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtl
eVN5c3RlbUFjY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U3lzdGVtQWNjZXNzLmNwcAppbmRleCBhODcxZTRlNzZmNGRiOWRjNDY1YzRhMTE2
NWU3NzUwYzNlZDFmYmVmLi5kZDQ4NzZiNmM1M2MxODM2NDM1MTAyY2MzYzE4ZDFjZmU3ZjFhYWJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlh
S2V5U3lzdGVtQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRl
ZG1lZGlhL01lZGlhS2V5U3lzdGVtQWNjZXNzLmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIE1l
ZGlhS2V5U3lzdGVtQWNjZXNzOjpjcmVhdGVNZWRpYUtleXMoUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlKQogICAgICAgICAvLyAyLjUuIExldCBpbnN0YW5jZSBiZSBhIG5ldyBpbnN0YW5j
ZSBvZiB0aGUgS2V5IFN5c3RlbSBpbXBsZW1lbnRhdGlvbiByZXByZXNlbnRlZCBieSB0aGlzIG9i
amVjdCdzIGNkbSBpbXBsZW1lbnRhdGlvbiB2YWx1ZS4KICAgICAgICAgYXV0byBpbnN0YW5jZSA9
IG1faW1wbGVtZW50YXRpb24tPmNyZWF0ZUluc3RhbmNlKCk7CiAgICAgICAgIGlmICghaW5zdGFu
Y2UpIHsKLSAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7Cisg
ICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcAppbmRleCBjOGJjNWFlMjliYjEzOTRiMDc1MjJi
YTUwYmQxNDBjMWEzNDE0NzA3Li5iODcxMDNjNDliZjg0NWFlY2UwZjNkNmE2M2IxNTZmZWJiN2Iz
ZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01l
ZGlhS2V5cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9N
ZWRpYUtleXMuY3BwCkBAIC01NywxMSArNTcsMTEgQEAgRXhjZXB0aW9uT3I8UmVmPE1lZGlhS2V5
U2Vzc2lvbj4+IE1lZGlhS2V5czo6Y3JlYXRlU2Vzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXgK
ICAgICAvLyBXaGVuIHRoaXMgbWV0aG9kIGlzIGludm9rZWQsIHRoZSB1c2VyIGFnZW50IG11c3Qg
cnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgICAgLy8gMS4gSWYgdGhpcyBvYmplY3QncyBzdXBw
b3J0ZWQgc2Vzc2lvbiB0eXBlcyB2YWx1ZSBkb2VzIG5vdCBjb250YWluIHNlc3Npb25UeXBlLCB0
aHJvdyBbV2ViSURMXSBhIE5vdFN1cHBvcnRlZEVycm9yLgogICAgIGlmICghbV9zdXBwb3J0ZWRT
ZXNzaW9uVHlwZXMuY29udGFpbnMoc2Vzc2lvblR5cGUpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbihOb3RTdXBw
b3J0ZWRFcnJvcik7CiAKICAgICAvLyAyLiBJZiB0aGUgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qg
c3VwcG9ydCBNZWRpYUtleVNlc3Npb24gb3BlcmF0aW9ucyBpbiB0aGUgY3VycmVudCBzdGF0ZSwg
dGhyb3cgW1dlYklETF0gYW4gSW52YWxpZFN0YXRlRXJyb3IuCiAgICAgaWYgKCFtX2ltcGxlbWVu
dGF0aW9uLT5zdXBwb3J0c1Nlc3Npb25zKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24oSU5W
QUxJRF9TVEFURV9FUlIpOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uKEludmFsaWRTdGF0ZUVy
cm9yKTsKIAogICAgIC8vIDMuIExldCBzZXNzaW9uIGJlIGEgbmV3IE1lZGlhS2V5U2Vzc2lvbiBv
YmplY3QsIGFuZCBpbml0aWFsaXplIGl0IGFzIGZvbGxvd3M6CiAgICAgLy8gTk9URTogQ29udGlu
dWVkIGluIE1lZGlhS2V5U2Vzc2lvbi4KQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBNZWRpYUtleXM6
OnNldFNlcnZlckNlcnRpZmljYXRlKGNvbnN0IEJ1ZmZlclNvdXJjZSYgc2VydmVyQ2VydGlmaWNh
dGUsIFJlZjwKICAgICAgICAgLy8gNS4xLiBVc2UgdGhpcyBvYmplY3QncyBjZG0gaW5zdGFuY2Ug
dG8gcHJvY2VzcyBjZXJ0aWZpY2F0ZS4KICAgICAgICAgaWYgKG1faW5zdGFuY2UtPnNldFNlcnZl
ckNlcnRpZmljYXRlKFdURk1vdmUoY2VydGlmaWNhdGUpKSA9PSBDRE1JbnN0YW5jZTo6RmFpbGVk
KSB7CiAgICAgICAgICAgICAvLyA1LjIuIElmIHRoZSBwcmVjZWRpbmcgc3RlcCBmYWlsZWQsIHJl
c29sdmUgcHJvbWlzZSB3aXRoIGEgbmV3IERPTUV4Y2VwdGlvbiB3aG9zZSBuYW1lIGlzIHRoZSBh
cHByb3ByaWF0ZSBlcnJvciBuYW1lLgotICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFM
SURfU1RBVEVfRVJSKTsKKyAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkU3RhdGVF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9OYXZpZ2F0b3JFTUUuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9OYXZpZ2F0b3JFTUUuY3BwCmluZGV4
IDBiYmU5Zjk2ZDk2MDY3MmQ4YzRhYTRiZjQzZDExNjk4Mjc4MTUyMmUuLmQ5NDVlNzExNzhjMjhi
N2YyOWQ0M2Q0M2MyYzM4ZjEwZThlNDZjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW5jcnlwdGVkbWVkaWEvTmF2aWdhdG9yRU1FLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL05hdmlnYXRvckVNRS5jcHAKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBOYXZpZ2F0b3JFTUU6OnJlcXVlc3RNZWRpYUtleVN5c3RlbUFjY2VzcyhOYXZpZ2F0
b3ImLCBEb2N1bWVudCYgZG9jdW1lbnQsIGMKICAgICAgICAgLy8gNi4xLiBJZiBrZXlTeXN0ZW0g
aXMgbm90IG9uZSBvZiB0aGUgS2V5IFN5c3RlbXMgc3VwcG9ydGVkIGJ5IHRoZSB1c2VyIGFnZW50
LCByZWplY3QgcHJvbWlzZSB3aXRoIGEgTm90U3VwcG9ydGVkRXJyb3IuCiAgICAgICAgIC8vICAg
ICAgU3RyaW5nIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgIGlmICghQ0RN
OjpzdXBwb3J0c0tleVN5c3RlbShrZXlTeXN0ZW0pKSB7Ci0gICAgICAgICAgICBwcm9taXNlLT5y
ZWplY3QoTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5v
dFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0x
MDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgdHJ5TmV4dFN1cHBvcnRlZENvbmZpZ3VyYXRpb24o
UmVmUHRyPENETT4mJiBpbXBsZW1lbnRhdGlvbiwgVmVjdG9yPE0KIAogCiAgICAgLy8gNi40LiBS
ZWplY3QgcHJvbWlzZSB3aXRoIGEgTm90U3VwcG9ydGVkRXJyb3IuCi0gICAgcHJvbWlzZS0+cmVq
ZWN0KE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICBwcm9taXNlLT5yZWplY3QoTm90U3VwcG9ydGVk
RXJyb3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9XZWJLaXRNZWRpYUtleVNlc3Np
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvV2Vi
S2l0TWVkaWFLZXlTZXNzaW9uLmNwcAppbmRleCAyMmVhMjQzNDY2OGFlYTA4MDEyN2UwZjAwN2Q5
NDkzODllNjVhOTRjLi4yODUxNTA2NTA3NDNkZGQ3MWUyYTdmNWMxZGI0YjJhNDcxM2JiNGMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9X
ZWJLaXRNZWRpYUtleVNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5j
cnlwdGVkbWVkaWEvbGVnYWN5L1dlYktpdE1lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTEzNCwxMCAr
MTM0LDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYktpdE1lZGlhS2V5U2Vzc2lvbjo6dXBkYXRl
KFJlZjxVaW50OEFycmF5PiYmIGtleSkKIHsKICAgICAvLyBGcm9tIDxodHRwOi8vZHZjcy53My5v
cmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS90aXAvZW5jcnlwdGVkLW1lZGlhL2VuY3J5cHRlZC1t
ZWRpYS5odG1sI2RvbS1hZGRrZXk+OgogICAgIC8vIFRoZSBhZGRLZXkoa2V5KSBtZXRob2QgbXVz
dCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAvLyAxLiBJZiB0aGUgZmlyc3Qgb3Igc2Vj
b25kIGFyZ3VtZW50IFtzaWNdIGlzIGFuIGVtcHR5IGFycmF5LCB0aHJvdyBhbiBJTlZBTElEX0FD
Q0VTU19FUlIuCisgICAgLy8gMS4gSWYgdGhlIGZpcnN0IG9yIHNlY29uZCBhcmd1bWVudCBbc2lj
XSBpcyBhbiBlbXB0eSBhcnJheSwgdGhyb3cgYW4gSW52YWxpZEFjY2Vzc0Vycm9yLgogICAgIC8v
IE5PVEU6IHRoZSByZWZlcmVuY2UgdG8gYSAic2Vjb25kIGFyZ3VtZW50IiBpcyBhIHNwZWMgYnVn
LgogICAgIGlmICgha2V5LT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAKICAgICAvLyAyLiBTY2hlZHVsZSBhIHRhc2sgdG8gaGFuZGxlIHRoZSBj
YWxsLCBwcm92aWRpbmcga2V5LgogICAgIG1fcGVuZGluZ0tleXMuYXBwZW5kKFdURk1vdmUoa2V5
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xl
Z2FjeS9XZWJLaXRNZWRpYUtleXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9sZWdhY3kvV2ViS2l0TWVkaWFLZXlzLmNwcAppbmRleCBjNzY1NTFmOGU5YTJlZmYx
OTc1ZTE2Njc3NTBhZWExYTk1MDhhMjkwLi5kOWQ5YjExMTZmMGQwYjM3NjRkMjE0ZjM0NjZkNTll
Mzg5MmYzZjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL2xlZ2FjeS9XZWJLaXRNZWRpYUtleXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L1dlYktpdE1lZGlhS2V5cy5jcHAKQEAgLTM4LDEzICsz
OCwxMyBAQCBFeGNlcHRpb25PcjxSZWY8V2ViS2l0TWVkaWFLZXlzPj4gV2ViS2l0TWVkaWFLZXlz
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZQogICAgIC8vIEZyb20gPGh0dHA6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9lbmNyeXB0ZWQtbWVkaWEvZW5jcnlw
dGVkLW1lZGlhLmh0bWwjZG9tLW1lZGlhLWtleXMtY29uc3RydWN0b3I+OgogICAgIC8vIFRoZSBN
ZWRpYUtleXMoa2V5U3lzdGVtKSBjb25zdHJ1Y3RvciBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0
ZXBzOgogCi0gICAgLy8gMS4gSWYga2V5U3lzdGVtIGlzIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5n
LCB0aHJvdyBhbiBJTlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KKyAgICAvLyAxLiBJZiBrZXlTeXN0ZW0gaXMgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcs
IHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0
ZXBzLgogICAgIGlmIChrZXlTeXN0ZW0uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIC8vIDIuIElmIGtleVN5c3RlbSBpcyBub3Qgb25l
IG9mIHRoZSB1c2VyIGFnZW50J3Mgc3VwcG9ydGVkIEtleSBTeXN0ZW1zLCB0aHJvdyBhIE5PVF9T
VVBQT1JURURfRVJSIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyAyLiBJZiBrZXlTeXN0
ZW0gaXMgbm90IG9uZSBvZiB0aGUgdXNlciBhZ2VudCdzIHN1cHBvcnRlZCBLZXkgU3lzdGVtcywg
dGhyb3cgYSBOb3RTdXBwb3J0ZWRFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAgaWYg
KCFDRE06OnN1cHBvcnRzS2V5U3lzdGVtKGtleVN5c3RlbSkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIDMuIExldCBjZG0gYmUgdGhlIGNvbnRlbnQg
ZGVjcnlwdGlvbiBtb2R1bGUgY29ycmVzcG9uZGluZyB0byBrZXlTeXN0ZW0uCiAgICAgLy8gNC4g
TG9hZCBjZG0gaWYgbmVjZXNzYXJ5LgpAQCAtNzksMTggKzc5LDE4IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxXZWJLaXRNZWRpYUtleVNlc3Npb24+PiBXZWJLaXRNZWRpYUtleXM6OmNyZWF0ZVNlc3Npb24o
U2NyaXB0RXhlCiAgICAgLy8gVGhlIGNyZWF0ZVNlc3Npb24odHlwZSwgaW5pdERhdGEpIG1ldGhv
ZCBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgIC8vIE5vdGU6IFRoZSBjb250ZW50
cyBvZiBpbml0RGF0YSBhcmUgY29udGFpbmVyLXNwZWNpZmljIEluaXRpYWxpemF0aW9uIERhdGEu
CiAKLSAgICAvLyAxLiBJZiBjb250ZW50VHlwZSBpcyBudWxsIG9yIGFuIGVtcHR5IHN0cmluZywg
dGhyb3cgYW4gSU5WQUxJRF9BQ0NFU1NfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3Rl
cHMuCisgICAgLy8gMS4gSWYgY29udGVudFR5cGUgaXMgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcs
IHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0
ZXBzLgogICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAvLyAyLiBJZiBpbml0RGF0YSBpcyBhbiBlbXB0eSBhcnJh
eSwgdGhyb3cgYW4gSU5WQUxJRF9BQ0NFU1NfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ug
c3RlcHMuCisgICAgLy8gMi4gSWYgaW5pdERhdGEgaXMgYW4gZW1wdHkgYXJyYXksIHRocm93IGFu
IEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAg
IGlmICghaW5pdERhdGEtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNj
ZXNzRXJyb3IgfTsKIAogICAgIC8vIDMuIElmIHR5cGUgY29udGFpbnMgYSBNSU1FIHR5cGUgdGhh
dCBpcyBub3Qgc3VwcG9ydGVkIG9yIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGtleVN5c3RlbSwg
dGhyb3cKLSAgICAvLyBhIE5PVF9TVVBQT1JURURfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhl
c2Ugc3RlcHMuCisgICAgLy8gYSBOb3RTdXBwb3J0ZWRFcnJvciBleGNlcHRpb24gYW5kIGFib3J0
IHRoZXNlIHN0ZXBzLgogICAgIGlmICghbV9jZG0tPnN1cHBvcnRzTUlNRVR5cGUodHlwZSkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIDQuIENyZWF0
ZSBhIG5ldyBNZWRpYUtleVNlc3Npb24gb2JqZWN0LgogICAgIC8vIDQuMSBMZXQgdGhlIGtleVN5
c3RlbSBhdHRyaWJ1dGUgYmUga2V5U3lzdGVtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5LmgKaW5kZXggZmNiYTJkNzgxMDdhMTdiNTExMjRlMjMyYjAyMDRjMDdhNjRhMWZi
OS4uZWJhZmM5Yjk5ZmIwZDVhYTJkMjVjNjczYzNiN2FkYWFmMWYxMGRkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGJsb2IoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGpzb24oRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmKTsKICAgICB2b2lkIHRleHQoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmKTsKLSAgICB2b2lkIGZvcm1EYXRhKEZldGNoQm9keU93bmVyJiwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKSB7IHByb21pc2UuZ2V0KCkucmVqZWN0KE5PVF9TVVBQ
T1JURURfRVJSKTsgfQorICAgIHZvaWQgZm9ybURhdGEoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UpIHsgcHJvbWlzZS5nZXQoKS5yZWplY3QoTm90U3VwcG9y
dGVkRXJyb3IpOyB9CiAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAgICAgdm9pZCBjb25zdW1l
QXNTdHJlYW0oRmV0Y2hCb2R5T3duZXImLCBGZXRjaFJlc3BvbnNlU291cmNlJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCmluZGV4IGFmNzFl
MWM0MzhmZjQ1NTVlMWIwNTQ3NDhmZGNmYTNlMjdjZWQ4MGQuLjY1MGZhYWI0MTliODQwMDI4OWY2
OThkMDY4MGU0MWMyYWE1Nzk1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0
Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBGZXRjaEJvZHlP
d25lcjo6Zm9ybURhdGEoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogdm9pZCBGZXRj
aEJvZHlPd25lcjo6anNvbihSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7CiAgICAg
aWYgKGlzQm9keU51bGwoKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3QoU1lOVEFYX0VSUik7
CisgICAgICAgIHByb21pc2UtPnJlamVjdChTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKGlzRGlzdHVyYmVkT3JMb2NrZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggOGYxN2I5YTQ2OTE1Mjg5
M2I4NTNiMmI1YTcyNzU1MjE3YWFlOWRhMi4uNzZkNTM2ZGFkYjUxMTVlNGRjY2QzZjJhZjQ0ODI3
ZmM0NmFhMTA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+
PiBJREJDdXJzb3I6OnVwZGF0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2Fj
dGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoc291cmNlc0Rl
bGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBU
aGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVs
ZXRlZC4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Is
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6
IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBk
ZWxldGVkLiIpIH07CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRyYW5z
YWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0xMjAsMTAgKzEyMCwxMCBA
QCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkN1cnNvcjo6dXBkYXRlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSZWFk
b25seUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJ
REJDdXJzb3InOiBUaGUgcmVjb3JkIG1heSBub3QgYmUgdXBkYXRlZCBpbnNpZGUgYSByZWFkLW9u
bHkgdHJhbnNhY3Rpb24uIikgfTsKIAogICAgIGlmICghbV9nb3RWYWx1ZSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5nIGl0
ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIikgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5nIGl0ZXJh
dGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIikgfTsKIAogICAgIGlmICghaXNLZXlD
dXJzb3JXaXRoVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RB
VEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJD
dXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1cnNvci4iKSB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYSBrZXkgY3Vyc29y
LiIpIH07CiAKICAgICBhdXRvJiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7
CiAgICAgYXV0byYgb3B0aW9uYWxLZXlQYXRoID0gb2JqZWN0U3RvcmUuaW5mbygpLmtleVBhdGgo
KTsKQEAgLTE1Miw3ICsxNTIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJDdXJzb3I6OmFkdmFu
Y2UodW5zaWduZWQgY291bnQpCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBlZmZlY3Rp
dmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgp
KTsKIAogICAgIGlmICghbV9yZXF1ZXN0KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
VHlwZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAn
SURCQ3Vyc29yJzogQSBjb3VudCBhcmd1bWVudCB3aXRoIHZhbHVlIDAgKHplcm8pIHdhcyBzdXBw
bGllZCwgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iKSB9OwpAQCAtMTYxLDEwICsxNjEsMTAgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vyc29yOjphZHZhbmNlKHVuc2lnbmVkIGNvdW50KQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRy
YW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CiAKICAgICBpZiAoc291cmNl
c0RlbGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJS
LCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29y
JzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVu
IGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vy
c29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBi
ZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmICghbV9nb3RWYWx1ZSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVy
YXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnYWR2YW5jZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0
ZWQgb3IgaGFzIGl0ZXJhdGVkIHBhc3QgaXRzIGVuZC4iKSB9OwogCiAgICAgbV9nb3RWYWx1ZSA9
IGZhbHNlOwogCkBAIC0xNzksMTcgKzE3OSwxNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJDdXJz
b3I6OmNvbnRpbnVlUHJpbWFyeUtleShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGtleVZhbAog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZVByaW1hcnlLZXknIG9uICdJREJD
dXJzb3InOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIikgfTsKIAog
ICAgIGlmIChzb3VyY2VzRGVsZXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVl
UHJpbWFyeUtleScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0
aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnY29udGludWVQcmltYXJ5S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNv
dXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAog
ICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJj
ZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtleScgb24gJ0lEQkN1
cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2UgaXMgbm90IGFuIGluZGV4LiIpIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtleScgb24gJ0lEQkN1cnNvcic6IFRoZSBj
dXJzb3IncyBzb3VyY2UgaXMgbm90IGFuIGluZGV4LiIpIH07CiAKICAgICBhdXRvIGRpcmVjdGlv
biA9IG1faW5mby5jdXJzb3JEaXJlY3Rpb24oKTsKICAgICBpZiAoZGlyZWN0aW9uICE9IEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0ICYmIGRpcmVjdGlvbiAhPSBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbjo6UHJldikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmlt
YXJ5S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIGRpcmVjdGlvbiBtdXN0IGJlIGVp
dGhlciBcIm5leHRcIiBvciBcInByZXZcIi4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdj
b250aW51ZVByaW1hcnlLZXknIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3MgZGlyZWN0aW9u
IG11c3QgYmUgZWl0aGVyIFwibmV4dFwiIG9yIFwicHJldlwiLiIpIH07CiAKICAgICBpZiAoIW1f
Z290VmFsdWUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmltYXJ5S2V5JyBvbiAn
SURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQg
cGFzdCBpdHMgZW5kLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmltYXJ5
S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMg
aXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpIH07CiAKICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBz
Y3JpcHRWYWx1ZVRvSURCS2V5KHN0YXRlLCBrZXlWYWx1ZSk7CiAgICAgaWYgKCFrZXktPmlzVmFs
aWQoKSkKQEAgLTIzNywxNiArMjM3LDE2IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElEQkN1cnNvcjo6
Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRhJiBrZXkpCiAgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJh
c2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmICghbV9yZXF1ZXN0KQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uKCku
aXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJ
REJDdXJzb3InOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIikgfTsK
IAogICAgIGlmIChzb3VyY2VzRGVsZXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRp
bnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2Jq
ZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdj
b250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZl
IG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fZ290VmFs
dWUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUg
Y3Vyc29yIGlzIGJlaW5nIGl0ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIikg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBj
dXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQgb3IgaGFzIGl0ZXJhdGVkIHBhc3QgaXRzIGVuZC4iKSB9
OwogCiAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIWtleS5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBEYXRhRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxp
ZCBrZXkuIikgfTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBFeGNlcHRpb25PcjxSZWY8V2ViQ29yZTo6
SURCUmVxdWVzdD4+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZQog
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFu
c2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoc291cmNl
c0RlbGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJS
LCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3In
OiBUaGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4g
ZGVsZXRlZC4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNv
cic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVl
biBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRy
YW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0zMDEsMTAgKzMwMSwx
MCBAQCBFeGNlcHRpb25PcjxSZWY8V2ViQ29yZTo6SURCUmVxdWVzdD4+IElEQkN1cnNvcjo6ZGVs
ZXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
UmVhZG9ubHlFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBv
biAnSURCQ3Vyc29yJzogVGhlIHJlY29yZCBtYXkgbm90IGJlIGRlbGV0ZWQgaW5zaWRlIGEgcmVh
ZC1vbmx5IHRyYW5zYWN0aW9uLiIpIH07CiAKICAgICBpZiAoIW1fZ290VmFsdWUpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWlu
ZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBp
dGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpIH07CiAKICAgICBpZiAoIWlz
S2V5Q3Vyc29yV2l0aFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElE
X1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAn
SURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBhIGtleSBjdXJzb3IuIikgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1
cnNvci4iKSB9OwogCiAgICAgYXV0byByZXN1bHQgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLmRl
bGV0ZUZ1bmN0aW9uKHN0YXRlLCBtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKTsKICAgICBpZiAo
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IGE5NTQxYTAwMDZmZGNjOWRmZTgzOWMzMGM2NjY2
MTVmODcyMDFkMDAuLmE4MjQxYTM3NjkxODMwMGFlNmU0ODJlMTNjNGFjNDJkNTVjNzdhNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAK
QEAgLTEzOSw3ICsxMzksNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+PiBJREJE
YXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYQogICAgIEFTU0VSVCgh
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24t
PmlzVmVyc2lvbkNoYW5nZSgpKTsKIAogICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRh
YmFzZSc6IFRoZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hhbmdlIHRyYW5z
YWN0aW9uLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9u
ICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hh
bmdlIHRyYW5zYWN0aW9uLiIpIH07CiAKICAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLT5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25J
bmFjdGl2ZUVycm9yIH07CkBAIC0xNDksMTAgKzE0OSwxMCBAQCBFeGNlcHRpb25PcjxSZWY8SURC
T2JqZWN0U3RvcmU+PiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYQogCiAgICAgYXV0byYga2V5UGF0aCA9IHBhcmFtZXRlcnMua2V5UGF0aDsKICAgICBpZiAo
a2V5UGF0aCAmJiAhaXNJREJLZXlQYXRoVmFsaWQoa2V5UGF0aC52YWx1ZSgpKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUga2V5UGF0aCBv
cHRpb24gaXMgbm90IGEgdmFsaWQga2V5IHBhdGguIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVh
dGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGtleVBhdGggb3B0aW9uIGlzIG5v
dCBhIHZhbGlkIGtleSBwYXRoLiIpIH07CiAKICAgICBpZiAoa2V5UGF0aCAmJiBwYXJhbWV0ZXJz
LmF1dG9JbmNyZW1lbnQgJiYgKChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0
aC52YWx1ZSgpKSAmJiBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgudmFsdWUoKSkuaXNFbXB0eSgp
KSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoLnZhbHVl
KCkpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJE
YXRhYmFzZSc6IFRoZSBhdXRvSW5jcmVtZW50IG9wdGlvbiB3YXMgc2V0IGJ1dCB0aGUga2V5UGF0
aCBvcHRpb24gd2FzIGVtcHR5IG9yIGFuIGFycmF5LiIpIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgYXV0b0luY3JlbWVu
dCBvcHRpb24gd2FzIHNldCBidXQgdGhlIGtleVBhdGggb3B0aW9uIHdhcyBlbXB0eSBvciBhbiBh
cnJheS4iKSB9OwogCiAgICAgLy8gSW5zdGFsbCB0aGUgbmV3IE9iamVjdFN0b3JlIGludG8gdGhl
IGNvbm5lY3Rpb24ncyBtZXRhZGF0YS4KICAgICBhdXRvIGluZm8gPSBtX2luZm8uY3JlYXRlTmV3
T2JqZWN0U3RvcmUobmFtZSwgV1RGTW92ZShrZXlQYXRoKSwgcGFyYW1ldGVycy5hdXRvSW5jcmVt
ZW50KTsKQEAgLTE2OCw3ICsxNjgsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCVHJhbnNhY3Rpb24+
PiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU3RyaW5nT3JWZWN0b3JPZlN0cmluZwogICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9j
bG9zZVBlbmRpbmcpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJE
YXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIGNsb3NpbmcuIikgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFi
YXNlIGNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKSB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2Jq
ZWN0U3RvcmVzOwogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+
PihzdG9yZU5hbWVzKSkKQEAgLTE3NywxMyArMTc3LDEzIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJU
cmFuc2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3Ry
aW5nCiAgICAgICAgIG9iamVjdFN0b3Jlcy5hcHBlbmQoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+
KHN0b3JlTmFtZXMpKSk7CiAKICAgICBpZiAob2JqZWN0U3RvcmVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzdG9y
ZU5hbWVzIHBhcmFtZXRlciB3YXMgZW1wdHkuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
dHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzdG9yZU5hbWVzIHBhcmFtZXRlciB3
YXMgZW1wdHkuIikgfTsKIAogICAgIGlmIChtb2RlICE9IElEQlRyYW5zYWN0aW9uTW9kZTo6UmVh
ZG9ubHkgJiYgbW9kZSAhPSBJREJUcmFuc2FjdGlvbk1vZGU6OlJlYWR3cml0ZSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCiAgICAgaWYgKG1fdmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uICYmICFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aXNGaW5pc2hlZE9y
RmluaXNoaW5nKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJE
YXRhYmFzZSc6IEEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24gaXMgcnVubmluZy4iKSB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBBIHZl
cnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcuIikgfTsKIAogICAgIC8vIEl0IGlz
IHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBzdG9yZSBu
YW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAogICAgIC8vIHNvIHdlIG5lZWQg
dG8gcHV0IHRoZW0gYWxsIGluIGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0LgpAQCAtMTk3LDcg
KzE5Nyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0
cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5nCiAgICAgZm9yIChhdXRvJiBvYmplY3RT
dG9yZU5hbWUgOiBvYmplY3RTdG9yZXMpIHsKICAgICAgICAgaWYgKG1faW5mby5oYXNPYmplY3RT
dG9yZShvYmplY3RTdG9yZU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogT25lIG9mIHRoZSBzcGVjaWZp
ZWQgb2JqZWN0IHN0b3JlcyB3YXMgbm90IGZvdW5kLiIpIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RGb3VuZEVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd0
cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogT25lIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0
IHN0b3JlcyB3YXMgbm90IGZvdW5kLiIpIH07CiAgICAgfQogCiAgICAgYXV0byBpbmZvID0gSURC
VHJhbnNhY3Rpb25JbmZvOjpjbGllbnRUcmFuc2FjdGlvbihtX2Nvbm5lY3Rpb25Qcm94eS5nZXQo
KSwgb2JqZWN0U3RvcmVzLCBtb2RlKTsKQEAgLTIxOSwxMyArMjE5LDEzIEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVj
dFN0b3JlTmFtZSkKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElE
KCkpOwogCiAgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFi
YXNlIGlzIG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIikgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzog
VGhlIGRhdGFiYXNlIGlzIG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24u
IikgfTsKIAogICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IgfTsK
IAogICAgIGlmICghbV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIHNw
ZWNpZmllZCBvYmplY3Qgc3RvcmUgd2FzIG5vdCBmb3VuZC4iKSB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnZGVsZXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzcGVjaWZpZWQgb2Jq
ZWN0IHN0b3JlIHdhcyBub3QgZm91bmQuIikgfTsKIAogICAgIG1faW5mby5kZWxldGVPYmplY3RT
dG9yZShvYmplY3RTdG9yZU5hbWUpOwogICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5k
ZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAppbmRleCA3NDJlN2U5NDhjMDJiYTdjNjIw
ZDVjM2MzNjc5NzE0MzU3MzJjOGVjLi5iODhhYzM0MDFhNWYwMTkyNmE2YzYwMTRjNTBhN2FlMTgz
ZjJhN2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmNwcApAQCAtOTAsNyArOTAsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCT3BlbkRCUmVxdWVz
dD4+IElEQkZhY3Rvcnk6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCBBU0NJSUxpdGVyYWwoIklEQkZhY3Rvcnku
b3BlbigpIGNhbGxlZCB3aXRob3V0IGEgZGF0YWJhc2UgbmFtZSIpIH07CiAKICAgICBpZiAoc2hv
dWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNFQ1VSSVRZX0VSUiwgQVNDSUlMaXRlcmFsKCJJREJGYWN0b3J5Lm9wZW4oKSBjYWxs
ZWQgaW4gYW4gaW52YWxpZCBzZWN1cml0eSBjb250ZXh0IikgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiSURCRmFjdG9yeS5vcGVuKCkg
Y2FsbGVkIGluIGFuIGludmFsaWQgc2VjdXJpdHkgY29udGV4dCIpIH07CiAKICAgICBBU1NFUlQo
Y29udGV4dC5zZWN1cml0eU9yaWdpbigpKTsKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgZGF0
YWJhc2VJZGVudGlmaWVyKG5hbWUsICpjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCksIGNvbnRleHQu
dG9wT3JpZ2luKCkpOwpAQCAtMTEwLDcgKzExMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJPcGVu
REJSZXF1ZXN0Pj4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiSURC
RmFjdG9yeS5kZWxldGVEYXRhYmFzZSgpIGNhbGxlZCB3aXRob3V0IGEgZGF0YWJhc2UgbmFtZSIp
IH07CiAKICAgICBpZiAoc2hvdWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0KSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiwgQVNDSUlMaXRlcmFsKCJJREJG
YWN0b3J5LmRlbGV0ZURhdGFiYXNlKCkgY2FsbGVkIGluIGFuIGludmFsaWQgc2VjdXJpdHkgY29u
dGV4dCIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yLCBBU0NJ
SUxpdGVyYWwoIklEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UoKSBjYWxsZWQgaW4gYW4gaW52YWxp
ZCBzZWN1cml0eSBjb250ZXh0IikgfTsKIAogICAgIEFTU0VSVChjb250ZXh0LnNlY3VyaXR5T3Jp
Z2luKCkpOwogICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBkYXRhYmFzZUlkZW50aWZpZXIobmFt
ZSwgKmNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgY29udGV4dC50b3BPcmlnaW4oKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKaW5kZXggZDcxNzcy
NzdiZDVkOGY5YTI4NzhkODcwZWQwOTJjODc2NjBjNjUyYi4uMmI4MGMxMjZiMmQwMDQ4NzA1Yjdi
Y2UwMTdhNDQzMGZmMTA2YzE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4LmNwcApAQCAtODQsMTMgKzg0LDEzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElE
QkluZGV4OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRo
cmVhZElEKCkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQgcHJvcGVydHkg
J25hbWUnIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBoYXMgYmVlbiBkZWxldGVkLiIpIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFs
KCJGYWlsZWQgc2V0IHByb3BlcnR5ICduYW1lJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggaGFz
IGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgc2V0IHByb3BlcnR5ICduYW1lJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXgn
cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHNldCBwcm9w
ZXJ0eSAnbmFtZScgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4J3Mgb2JqZWN0IHN0b3JlIGhhcyBi
ZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmICghbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigp
LmlzVmVyc2lvbkNoYW5nZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9T
VEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHNldCBwcm9wZXJ0eSAnbmFtZScgb24gJ0lE
QkluZGV4JzogVGhlIGluZGV4J3MgdHJhbnNhY3Rpb24gaXMgbm90IGEgdmVyc2lvbiBjaGFuZ2Ug
dHJhbnNhY3Rpb24uIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQgcHJvcGVydHkgJ25hbWUnIG9uICdJREJJ
bmRleCc6IFRoZSBpbmRleCdzIHRyYW5zYWN0aW9uIGlzIG5vdCBhIHZlcnNpb24gY2hhbmdlIHRy
YW5zYWN0aW9uLiIpIH07CiAKICAgICBpZiAoIW1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5p
c0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQgcHJvcGVydHkgJ25hbWUnIG9uICdJREJJ
bmRleCc6IFRoZSBpbmRleCdzIHRyYW5zYWN0aW9uIGlzIG5vdCBhY3RpdmUuIikgfTsKQEAgLTE1
NSw3ICsxNTUsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpvcGVu
Q3Vyc29yKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBJREJLZXlSYQogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxl
dGVkKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4Jzog
VGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBv
ciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmICghbV9v
YmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBp
bmFjdGl2ZSBvciBmaW5pc2hlZC4iKSB9OwpAQCAtMTg4LDcgKzE4OCw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoRXhlY1N0YXRlJiBleGVj
U3RhdGUsIElEQktlCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3Jl
LnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmICht
X2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdvcGVuS2V5Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3Bl
bktleUN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUg
aGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX29iamVjdFN0b3JlLnRyYW5zYWN0
aW9uKCkuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9u
SW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1
cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlz
aGVkLiIpIH07CkBAIC0yMzAsNyArMjMwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+
PiBJREJJbmRleDo6ZG9Db3VudChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgSURCS2UKICAg
ICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29i
amVjdFN0b3JlLmlzRGVsZXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAn
SURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVk
LiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRoZSBp
bmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlm
ICghcmFuZ2UuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRGF0YUVycm9y
IH07CkBAIC0yNjUsNyArMjY1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJ
bmRleDo6ZG9HZXQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IElEQktleVIKICAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFz
ZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0
b3JlLmlzRGVsZXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQkluZGV4
JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0
cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKHJhbmdlLmlz
TnVsbCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IERhdGFFcnJvciB9OwpAQCAtMzAwLDcg
KzMwMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRvR2V0S2V5
KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBJREJLCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJl
YWQoKSA9PSBtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQo
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBpbmRl
eCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0
IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmIChyYW5nZS5pc051bGwpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhRXJyb3IgfTsKQEAgLTMxOCw3ICszMTgsNyBA
QCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRBbGwoRXhlY1N0YXRl
JiBleGVjU3RhdGUsIFJlZlB0cjxJREJLZQogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7
CiAKICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRz
IG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnZ2V0QWxsJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fb2JqZWN0U3RvcmUudHJhbnNhY3Rp
b24oKS5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25J
bmFjdGl2ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRBbGwnIG9u
ICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKSB9
OwpAQCAtMzQxLDcgKzM0MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5k
ZXg6OmdldEFsbEtleXMoRXhlY1N0YXRlJiBleGVjU3RhdGUsIFJlZlB0cjxJCiAgICAgQVNTRVJU
KGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2Uo
KS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9y
ZS5pc0RlbGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRBbGxLZXlzJyBvbiAnSURC
SW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIp
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsS2V5cycgb24gJ0lEQkluZGV4JzogVGhl
IGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAg
aWYgKCFtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsS2V5cycgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0
aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggOGQxNTUwOGE3NDM3
ODIyYjEyNjRhZmU3NTlmY2I1MDUxNjdjZTQ0Yi4uYTkzZjVjMzJlZTVlMWZiNzE3Mjc0NzFiOTdl
ODkwZTE5Yjg3NDZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtOTcsMTAgKzk3LDEwIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IElEQk9iamVjdFN0b3JlOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgc2V0IHByb3BlcnR5ICdu
YW1lJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0
ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBB
U0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQgcHJvcGVydHkgJ25hbWUnIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFt
X3RyYW5zYWN0aW9uLmlzVmVyc2lvbkNoYW5nZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHNldCBwcm9wZXJ0eSAn
bmFtZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSdzIHRyYW5zYWN0aW9u
IGlzIG5vdCBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIpIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgc2V0
IHByb3BlcnR5ICduYW1lJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlJ3Mg
dHJhbnNhY3Rpb24gaXMgbm90IGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIikgfTsKIAog
ICAgIGlmICghbV90cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQg
cHJvcGVydHkgJ25hbWUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUncyB0
cmFuc2FjdGlvbiBpcyBub3QgYWN0aXZlLiIpIH07CkBAIC0xNTYsNyArMTU2LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihFeGVjU3Rh
dGUmIGV4ZWNTdGF0ZSwgUmUKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNh
Y3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzog
VGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fdHJhbnNhY3Rpb24uaXNBY3RpdmUo
KSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBA
IC0xODAsNyArMTgwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RT
dG9yZTo6b3BlbktleUN1cnNvcihFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwKICAgICBBU1NFUlQoY3Vy
cmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgp
KTsKIAogICAgIGlmIChtX2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1
cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxl
dGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQk9i
amVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9u
IGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0yMDQsNyArMjA0LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEV4ZWNTdGF0ZSYgZXhl
Y1N0YXRlLCBKU1ZhbHVlIGsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNh
Y3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2Jq
ZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdn
ZXQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRl
ZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0
aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0yMjIsNyArMjIyLDcgQEAgRXhj
ZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEV4ZWNTdGF0ZSYg
ZXhlY1N0YXRlLCBJREJLZXlSYW4KICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJh
bnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0
ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUg
b2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdnZXQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVs
ZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IgfTsKQEAgLTI0MCw3
ICsyNDAsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpn
ZXRLZXkoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdQogICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAg
ICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RB
VEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRLZXknIG9uICdJREJP
YmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fdHJhbnNhY3Rpb24u
aXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURC
T2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIikg
fTsKQEAgLTI1OCw3ICsyNTgsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9i
amVjdFN0b3JlOjpnZXRLZXkoRXhlY1N0YXRlJiBleGVjU3RhdGUsIElEQktleQogICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZElEKCkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRL
ZXknIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRl
ZC4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1f
dHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5z
YWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0
S2V5JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3Ig
ZmluaXNoZWQuIikgfTsKQEAgLTMwNCw3ICszMDQsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQk9iamVjdFN0b3JlOjpwdXRPckFkZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUgYmVjYXVzZSBpdCBkb2VzIG5v
dCBoYXZlIGEgdmFsaWQgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IikgfTsKIAogICAgIGlmICht
X2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3Jl
OiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBz
dG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJl
ZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IsIEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhl
IHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0zMTcsNyArMzE3
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6cHV0T3JB
ZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZQogICAgICAgICAvLyBDbGVhciB0aGUgRE9NIGV4
Y2VwdGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0YXJnZXRl
ZCBleGNlcHRpb24uCiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IERBVEFfQ0xPTkVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEFuIG9iamVjdCBjb3VsZCBub3Qg
YmUgY2xvbmVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhQ2xvbmVFcnJv
ciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0
b3JlOiBBbiBvYmplY3QgY291bGQgbm90IGJlIGNsb25lZC4iKSB9OwogICAgIH0KIAogICAgIGJv
b2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IGZhbHNlOwpAQCAtMzI4LDcgKzMyOCw3IEBAIEV4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUKIAogICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmhhc0Jsb2JV
UkxzKCkgJiYgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgewogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MzQ3IC0gU3VwcG9ydCBCbG9icyBpbiBw
cml2YXRlIGJyb3dzaW5nLgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgREFUQV9DTE9ORV9F
UlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RT
dG9yZTogQmxvYlVSTHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiIpIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBEYXRhQ2xvbmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3Rv
cmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBCbG9iVVJMcyBhcmUgbm90IHlldCBzdXBw
b3J0ZWQuIikgfTsKICAgICB9CiAKICAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkKQEAg
LTM3Nyw3ICszNzcsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0
b3JlOjpkb0RlbGV0ZShFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSURCSwogICAgIC8vIEFkZGl0aW9u
YWxseSwgQ2hyb21lIGFuZCBFZGdlIGFncmVlIHdpdGggdGhlIHRlc3QsIGFzIGRvZXMgTGVnYWN5
IElEQiBpbiBXZWJLaXQuCiAgICAgLy8gVW50aWwgdGhpcyBpcyBzb3J0ZWQgb3V0LCB3ZSdsbCBh
Z3JlZSB3aXRoIHRoZSB0ZXN0IGFuZCB0aGUgbWFqb3JpdHkgc2hhcmUgYnJvd3NlcnMuCiAgICAg
aWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJPYmpl
Y3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBz
dG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fdHJhbnNhY3Rpb24uaXNB
Y3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCT2Jq
ZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIikgfTsK
QEAgLTQxMSw3ICs0MTEsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVj
dFN0b3JlOjpjbGVhcihFeGVjU3RhdGUmIGV4ZWNTdGF0ZSkKICAgICAvLyBBZGRpdGlvbmFsbHks
IENocm9tZSBhbmQgRWRnZSBhZ3JlZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2VzIExlZ2FjeSBJREIg
aW4gV2ViS2l0LgogICAgIC8vIFVudGlsIHRoaXMgaXMgc29ydGVkIG91dCwgd2UnbGwgYWdyZWUg
d2l0aCB0aGUgdGVzdCBhbmQgdGhlIG1ham9yaXR5IHNoYXJlIGJyb3dzZXJzLgogICAgIGlmICht
X2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY2xlYXInIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NsZWFyJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhh
cyBiZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmICghbV90cmFuc2FjdGlvbi5pc0FjdGl2ZSgp
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjbGVhcicgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC00Mjgs
MTAgKzQyOCwxMCBAQCBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+PiBJREJPYmplY3RTdG9yZTo6
Y3JlYXRlSW5kZXgoRXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJgogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwog
CiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzVmVyc2lvbkNoYW5nZSgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2Ug
aXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKSB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0
YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKSB9Owog
CiAgICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
U1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcg
b24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIp
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFt
X3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Ny
ZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3Rp
dmUuIil9OwpAQCAtNDQwLDEzICs0NDAsMTMgQEAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KEV4ZWNTdGF0ZSYsIGNvbnN0IFN0cmluZyYKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IENvbnN0cmFpbnRFcnJvciwgQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IEFuIGlu
ZGV4IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpIH07CiAKICAgICBp
ZiAoIWlzSURCS2V5UGF0aFZhbGlkKGtleVBhdGgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5k
ZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBrZXlQYXRoIGFyZ3VtZW50IGNvbnRhaW5zIGFu
IGludmFsaWQga2V5IHBhdGguIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgY29udGFpbnMgYW4gaW52YWxp
ZCBrZXkgcGF0aC4iKSB9OwogCiAgICAgaWYgKG5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAogICAgIGlmIChwYXJhbWV0ZXJzLm11bHRpRW50
cnkgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBU
aGUga2V5UGF0aCBhcmd1bWVudCB3YXMgYW4gYXJyYXkgYW5kIHRoZSBtdWx0aUVudHJ5IG9wdGlv
biBpcyB0cnVlLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0aCBhcmd1bWVudCB3YXMgYW4gYXJyYXkgYW5kIHRo
ZSBtdWx0aUVudHJ5IG9wdGlvbiBpcyB0cnVlLiIpIH07CiAKICAgICAvLyBJbnN0YWxsIHRoZSBu
ZXcgSW5kZXggaW50byB0aGUgT2JqZWN0U3RvcmUncyBpbmZvLgogICAgIElEQkluZGV4SW5mbyBp
bmZvID0gbV9pbmZvLmNyZWF0ZU5ld0luZGV4KG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHBhcmFt
ZXRlcnMudW5pcXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOwpAQCAtNDY5LDEzICs0NjksMTMg
QEAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0
IFN0cmluZyYgaW5kZXhOYW1lKQogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFu
c2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKCFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NU
QVRFX0VSUiB9OyAvLyBGSVhNRTogSXMgdGhpcyBjb2RlIHRlc3RlZD8gSXMgaXRldmVuIHJlYWNo
YWJsZT8KKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07IC8v
IEZJWE1FOiBJcyB0aGlzIGNvZGUgdGVzdGVkPyBJcyBpdGV2ZW4gcmVhY2hhYmxlPwogCiAgICAg
aWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdpbmRleCcgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnaW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3Rv
cmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKG1fdHJhbnNhY3Rpb24uaXNGaW5p
c2hlZE9yRmluaXNoaW5nKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NU
QVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5kZXgnIG9uICdJREJP
YmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZC4iKSB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24g
aXMgZmluaXNoZWQuIikgfTsKIAogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2Vk
SW5kZXhMb2NrKTsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZlcmVuY2VkSW5kZXhlcy5maW5k
KGluZGV4TmFtZSk7CkBAIC00ODQsNyArNDg0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4
Pj4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQogCiAgICAg
YXV0byogaW5mbyA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdJbmRleChpbmRleE5hbWUpOwogICAg
IGlmICghaW5mbykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUn
OiBUaGUgc3BlY2lmaWVkIGluZGV4IHdhcyBub3QgZm91bmQuIikgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4IHdhcyBu
b3QgZm91bmQuIikgfTsKIAogICAgIGF1dG8gaW5kZXggPSBzdGQ6Om1ha2VfdW5pcXVlPElEQklu
ZGV4Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaW5mbywgKnRoaXMpOwogCkBAIC01MDEs
MTYgKzUwMSwxNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKG1fZGVs
ZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnZGVsZXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qg
c3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlz
VmVyc2lvbkNoYW5nZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNo
YW5nZSB0cmFuc2FjdGlvbi4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4
JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJz
aW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlz
QWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZl
RXJyb3IsICBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVk
LiIpIH07CiAKICAgICBpZiAoIW1faW5mby5oYXNJbmRleChuYW1lKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4
IHdhcyBub3QgZm91bmQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5k
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4IHdhcyBub3QgZm91bmQuIikgfTsK
IAogICAgIGF1dG8qIGluZm8gPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nSW5kZXgobmFtZSk7CiAg
ICAgQVNTRVJUKGluZm8pOwpAQCAtNTU5LDcgKzU1OSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvQ291bnQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIGNv
bnN0CiAgICAgLy8gQWRkaXRpb25hbGx5LCBDaHJvbWUgYW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUg
dGVzdCwgYXMgZG9lcyBMZWdhY3kgSURCIGluIFdlYktpdC4KICAgICAvLyBVbnRpbCB0aGlzIGlz
IHNvcnRlZCBvdXQsIHdlJ2xsIGFncmVlIHdpdGggdGhlIHRlc3QgYW5kIHRoZSBtYWpvcml0eSBz
aGFyZSBicm93c2Vycy4KICAgICBpZiAobV9kZWxldGVkKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J2NvdW50JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9y
LCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAo
IW1fdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRy
YW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
Y291bnQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBv
ciBmaW5pc2hlZC4iKSB9OwpAQCAtNTc2LDcgKzU3Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEFsbChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgUmVm
UHRyCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0aW9uLmRhdGFiYXNl
KCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2dldEFsbCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsJyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsK
IAogICAgIGlmICghbV90cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdnZXRBbGwnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBp
cyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKSB9OwpAQCAtNTk5LDcgKzU5OSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEFsbEtleXMoRXhlY1N0YXRl
JiBleGVjU3RhdGUsIFJlCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0
aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEFsbEtleXMnIG9uICdJREJPYmplY3RTdG9yZSc6IFRo
ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2dldEFsbEtleXMnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFz
IGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEFsbEtleXMnIG9uICdJREJPYmplY3RT
dG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0
LmNwcAppbmRleCA4NzRiYzJjZmYyZWRlMzM3MmM4ZmY1YzdjZDY4OWIzNDY0OWNjOGQyLi4wYmY2
Zjk0MDk4ZWQ0ODZkMTUwMDYzZDQyNDY3YTA2ZDQ2OGY2MGZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcApAQCAtMTA0
LDcgKzEwNCw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9u
Q2hhbmdlQ29tcGxldGlvbigpCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5U
aHJlYWRJRCgpKTsKICAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOwogCi0gICAgSURC
RXJyb3IgaWRiRXJyb3IoQUJPUlRfRVJSKTsKKyAgICBJREJFcnJvciBpZGJFcnJvcihBYm9ydEVy
cm9yKTsKICAgICBtX2RvbUVycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShpZGJFcnJvci5uYW1lKCks
IGlkYkVycm9yLm1lc3NhZ2UoKSk7CiAgICAgc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCA3
ZjVmZjEzZTg0NWE0MzMzYmM1NGUwNjEyYWIxNTQ1ZGFhYTYxM2IwLi4xZTFiODdkMDUxZWYxNmVl
YjNjNDdiOGVmZGYwZjhmMmY3NTZiODFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIElEQlJlcXVlc3Q6
On5JREJSZXF1ZXN0KCkKIEV4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9uYWw8SURCUmVxdWVzdDo6UmVz
dWx0Pj4gSURCUmVxdWVzdDo6cmVzdWx0KCkgY29uc3QKIHsKICAgICBpZiAoIWlzRG9uZSgpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIHJlYWQgdGhlICdyZXN1bHQnIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVlc3Qn
OiBUaGUgcmVxdWVzdCBoYXMgbm90IGZpbmlzaGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gcmVhZCB0
aGUgJ3Jlc3VsdCcgcHJvcGVydHkgZnJvbSAnSURCUmVxdWVzdCc6IFRoZSByZXF1ZXN0IGhhcyBu
b3QgZmluaXNoZWQuIikgfTsKIAogICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPElEQlJlcXVlc3Q6
OlJlc3VsdD4geyBtX3Jlc3VsdCB9OwogfQpAQCAtMTY2LDcgKzE2Niw3IEBAIEV4Y2VwdGlvbk9y
PERPTUVycm9yKj4gSURCUmVxdWVzdDo6ZXJyb3IoKSBjb25zdAogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoIWlzRG9uZSgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIHJlYWQgdGhlICdlcnJvcicgcHJvcGVydHkgZnJvbSAnSURCUmVxdWVzdCc6IFRo
ZSByZXF1ZXN0IGhhcyBub3QgZmluaXNoZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFkIHRoZSAn
ZXJyb3InIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVlc3QnOiBUaGUgcmVxdWVzdCBoYXMgbm90IGZp
bmlzaGVkLiIpIH07CiAKICAgICByZXR1cm4gbV9kb21FcnJvci5nZXQoKTsKIH0KQEAgLTM1Myw3
ICszNTMsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRs
ZXIoKQogCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsK
IAotICAgIGlmIChtX3RyYW5zYWN0aW9uICYmIG1faWRiRXJyb3IuY29kZSgpICE9IEFCT1JUX0VS
UikKKyAgICBpZiAobV90cmFuc2FjdGlvbiAmJiBtX2lkYkVycm9yLmNvZGUoKSAhPSBBYm9ydEVy
cm9yKQogICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01F
cnJvcjo6Y3JlYXRlKCJBYm9ydEVycm9yIiwgQVNDSUlMaXRlcmFsKCJJREJUcmFuc2FjdGlvbiB3
aWxsIGFib3J0IGR1ZSB0byB1bmNhdWdodCBleGNlcHRpb24gaW4gYW4gZXZlbnQgaGFuZGxlciIp
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcAppbmRleCA4NjlhNzQyZDg5ZDUzZjlmZDI2MTk2NWFiOWU3MTY3MjE0MmVj
OGVmLi4xYTk4ZDdmODVmNWVjMWIxOGZhN2YyOTk0MDA5YjAwZDQ5OWM2OTk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBA
IC0xNDYsMTAgKzE0NiwxMCBAQCBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+PiBJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplYwogICAgIEFTU0VSVChj
dXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBp
ZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogCiAgICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ29iamVjdFN0b3JlJyBvbiAnSURCVHJhbnNhY3Rpb24nOiBUaGUgdHJh
bnNhY3Rpb24gZmluaXNoZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvYmplY3RTdG9y
ZScgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHRyYW5zYWN0aW9uIGZpbmlzaGVkLiIpIH07CiAK
ICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZE9iamVjdFN0b3JlTG9jayk7CiAK
QEAgLTE2NywxMSArMTY3LDExIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJPYmplY3RTdG9yZT4+IElE
QlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjCiAKICAgICBhdXRv
KiBpbmZvID0gbV9kYXRhYmFzZS0+aW5mbygpLmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9i
amVjdFN0b3JlTmFtZSk7CiAgICAgaWYgKCFpbmZvKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX0ZPVU5EX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0
U3RvcmUnIG9uICdJREJUcmFuc2FjdGlvbic6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdh
cyBub3QgZm91bmQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJy
b3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29iamVjdFN0b3JlJyBvbiAnSURC
VHJhbnNhY3Rpb24nOiBUaGUgc3BlY2lmaWVkIG9iamVjdCBzdG9yZSB3YXMgbm90IGZvdW5kLiIp
IH07CiAKICAgICAvLyBWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbnMgYXJlIHNjb3BlZCB0byBl
dmVyeSBvYmplY3Qgc3RvcmUgaW4gdGhlIGRhdGFiYXNlLgogICAgIGlmICghaW5mbyB8fCAoIWZv
dW5kICYmICFpc1ZlcnNpb25DaGFuZ2UoKSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfRk9VTkRfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvYmplY3RTdG9y
ZScgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHNwZWNpZmllZCBvYmplY3Qgc3RvcmUgd2FzIG5v
dCBmb3VuZC4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0U3RvcmUnIG9uICdJREJUcmFu
c2FjdGlvbic6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdhcyBub3QgZm91bmQuIikgfTsK
IAogICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQk9iamVjdFN0b3Jl
Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaW5mbywgKnRoaXMpOwogICAgIGF1dG8qIHJh
d09iamVjdFN0b3JlID0gb2JqZWN0U3RvcmUuZ2V0KCk7CkBAIC0yMDgsNyArMjA4LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSURCVHJhbnNhY3Rpb246OmFib3J0KCkKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKGlz
RmluaXNoZWRPckZpbmlzaGluZygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Fib3J0JyBvbiAn
SURCVHJhbnNhY3Rpb24nOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQu
IikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhYm9ydCcgb24gJ0lEQlRyYW5zYWN0aW9uJzog
VGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CiAKICAgICBpbnRl
cm5hbEFib3J0KCk7CiAKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjph
Ym9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJh
dAogCiAgICAgbV9jdXJyZW50bHlDb21wbGV0aW5nUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgCi0g
ICAgSURCRXJyb3IgZXJyb3IoQUJPUlRfRVJSKTsKKyAgICBJREJFcnJvciBlcnJvcihBYm9ydEVy
cm9yKTsKIAogICAgIGFib3J0SW5Qcm9ncmVzc09wZXJhdGlvbnMoZXJyb3IpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFj
a2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDdlMDM3ZTRkNzJhOTYwN2RmNWE2ZWYzMmM0
M2YwNWQ2YjE0N2JlOWYuLjJmYzY3OTkzZTk4ZjRhOWVhNmM2NTgyMzZjNDMyZDg5MGEwMThmZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC04Miw3ICs4Miw3IEBAIElE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJU
cmFuc2FjdGlvbkluZm8mIGluZm8pCiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbiIpOwogCiAgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNv
bnRhaW5zKGluZm8uaWRlbnRpZmllcigpKSkKLSAgICAgICAgcmV0dXJuIHsgSU5WQUxJRF9TVEFU
RV9FUlIsICJCYWNraW5nIHN0b3JlIGFza2VkIHRvIGNyZWF0ZSB0cmFuc2FjdGlvbiBpdCBhbHJl
YWR5IGhhcyBhIHJlY29yZCBvZiIgfTsKKyAgICAgICAgcmV0dXJuIHsgSW52YWxpZFN0YXRlRXJy
b3IsICJCYWNraW5nIHN0b3JlIGFza2VkIHRvIGNyZWF0ZSB0cmFuc2FjdGlvbiBpdCBhbHJlYWR5
IGhhcyBhIHJlY29yZCBvZiIgfTsKIAogICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBNZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKIApAQCAtMTA4LDcgKzEw
OCw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YWJvcnRUcmFuc2FjdGlvbihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyCiAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJh
bnNhY3Rpb24pCi0gICAgICAgIHJldHVybiB7IElOVkFMSURfU1RBVEVfRVJSLCAiQmFja2luZyBz
dG9yZSBhc2tlZCB0byBhYm9ydCB0cmFuc2FjdGlvbiBpdCBkaWRuJ3QgaGF2ZSByZWNvcmQgb2Yi
IH07CisgICAgICAgIHJldHVybiB7IEludmFsaWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9yZSBh
c2tlZCB0byBhYm9ydCB0cmFuc2FjdGlvbiBpdCBkaWRuJ3QgaGF2ZSByZWNvcmQgb2YiIH07CiAK
ICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKIApAQCAtMTIxLDcgKzEyMSw3IEBAIElEQkVycm9y
IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0CiAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
dGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAg
ICAgIHJldHVybiB7IElOVkFMSURfU1RBVEVfRVJSLCAiQmFja2luZyBzdG9yZSBhc2tlZCB0byBj
b21taXQgdHJhbnNhY3Rpb24gaXQgZGlkbid0IGhhdmUgcmVjb3JkIG9mIiB9OworICAgICAgICBy
ZXR1cm4geyBJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgYXNrZWQgdG8gY29tbWl0
IHRyYW5zYWN0aW9uIGl0IGRpZG4ndCBoYXZlIHJlY29yZCBvZiIgfTsKIAogICAgIHRyYW5zYWN0
aW9uLT5jb21taXQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggOTk1NDJmODlm
NmFlNGNmZjcyMDk3ZjUxZGY4NjFiYjljMjI0ODZkNy4uNWY2ZjYyOTFjNTMwMjUxZWI1NDY2NWZi
YmM5NGNjZTNlMDY3YWNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC05NzgsNyAr
OTc4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKIAogICAgIGF1dG8qIG9iamVjdFN0b3Jl
SW5mbyA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykgewotICAgICAgICBlcnJvciA9IElE
QkVycm9yKElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIk9iamVjdCBzdG9yZSBjYW5u
b3QgYmUgZm91bmQgaW4gdGhlIGJhY2tpbmcgc3RvcmUiKSk7CisgICAgICAgIGVycm9yID0gSURC
RXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiT2JqZWN0IHN0b3JlIGNhbm5v
dCBiZSBmb3VuZCBpbiB0aGUgYmFja2luZyBzdG9yZSIpKTsKICAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggMDExYjgxODk4NTIzNDRmZThlZjdh
NGNlYjk1ZWJmMGEwYTEyNjU4Mi4uYzJjZWZjNjliMDhhZTgwY2E0YjU3M2M5ZjlmM2UxNWRkMjk1
MTMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBNZWRpYVNv
dXJjZTo6c2V0TGl2ZVNlZWthYmxlUmFuZ2UoZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kKQogCiAg
ICAgLy8gSWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIG5vdCAib3BlbiIgdGhlbiB0aHJv
dyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgog
ICAgIGlmICghaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NU
QVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Ig
fTsKIAogICAgIC8vIElmIHN0YXJ0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBlbmQsIHRo
ZW4gdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAg
ICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gZW5kKQpAQCAtMzI3LDcgKzMyNyw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IE1lZGlhU291cmNlOjpjbGVhckxpdmVTZWVrYWJsZVJhbmdlKCkKIAogICAg
IC8vIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBub3QgIm9wZW4iIHRoZW4gdGhyb3cg
YW4gSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAg
ICBpZiAoIWlzT3BlbigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
CiAgICAgbV9saXZlU2Vla2FibGUgPSBudWxscHRyOwogICAgIHJldHVybiB7IH07CiB9CkBAIC00
NzIsMTMgKzQ3MiwxMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBNZWRpYVNvdXJjZTo6c2V0RHVyYXRp
b24oZG91YmxlIGR1cmF0aW9uKQogCiAgICAgLy8gMi4gSWYgdGhlIHJlYWR5U3RhdGUgYXR0cmli
dXRlIGlzIG5vdCAib3BlbiIgdGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRp
b24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmICghaXNPcGVuKCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDMuIElmIHRoZSB1cGRhdGlu
ZyBhdHRyaWJ1dGUgZXF1YWxzIHRydWUgb24gYW55IFNvdXJjZUJ1ZmZlciBpbiBzb3VyY2VCdWZm
ZXJzLCB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yCiAgICAgLy8gZXhjZXB0aW9uIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6ICptX3Nv
dXJjZUJ1ZmZlcnMpIHsKICAgICAgICAgaWYgKHNvdXJjZUJ1ZmZlci0+dXBkYXRpbmcoKSkKLSAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgfQogCiAg
ICAgLy8gNC4gUnVuIHRoZSBkdXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtIHdpdGggbmV3IGR1cmF0
aW9uIHNldCB0byB0aGUgdmFsdWUgYmVpbmcgYXNzaWduZWQgdG8gdGhpcyBhdHRyaWJ1dGUuCkBA
IC01MDgsNyArNTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVkaWFTb3VyY2U6OnNldER1cmF0
aW9uSW50ZXJuYWwoY29uc3QgTWVkaWFUaW1lJiBkdXJhdGlvbikKICAgICAgICAgaGlnaGVzdEVu
ZFRpbWUgPSBzdGQ6Om1heChoaWdoZXN0RW5kVGltZSwgc291cmNlQnVmZmVyLT5idWZmZXJlZElu
dGVybmFsKCkucmFuZ2VzKCkubWF4aW11bUJ1ZmZlcmVkVGltZSgpKTsKICAgICB9CiAgICAgaWYg
KGhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAuaXNWYWxpZCgpICYmIG5ld0R1cmF0aW9uIDwg
aGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogCiAgICAgLy8gNC4gSWYgbmV3IGR1cmF0aW9uIGlzIGxlc3MgdGhhbiBo
aWdoZXN0IGVuZCB0aW1lLCB0aGVuCiAgICAgLy8gNC4xLiBVcGRhdGUgbmV3IGR1cmF0aW9uIHRv
IGVxdWFsIGhpZ2hlc3QgZW5kIHRpbWUuCkBAIC01NDIsMTQgKzU0MiwxNCBAQCBFeGNlcHRpb25P
cjx2b2lkPiBNZWRpYVNvdXJjZTo6ZW5kT2ZTdHJlYW0oc3RkOjpvcHRpb25hbDxFbmRPZlN0cmVh
bUVycm9yPiBlcnJvcgogewogICAgIC8vIDIuMiBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwt
bWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCN3aWRsLU1l
ZGlhU291cmNlLWVuZE9mU3RyZWFtLXZvaWQtRW5kT2ZTdHJlYW1FcnJvci1lcnJvcgogICAgIC8v
IDEuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBub3QgaW4gdGhlICJvcGVuIiBzdGF0
ZSB0aGVuIHRocm93IGFuCi0gICAgLy8gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFuZCBh
Ym9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5k
IGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmICghaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDIuIElmIHRoZSB1cGRhdGluZyBhdHRy
aWJ1dGUgZXF1YWxzIHRydWUgb24gYW55IFNvdXJjZUJ1ZmZlciBpbiBzb3VyY2VCdWZmZXJzLCB0
aGVuIHRocm93IGFuCi0gICAgLy8gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFuZCBhYm9y
dCB0aGVzZSBzdGVwcy4KKyAgICAvLyBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmIChzdGQ6OmFueV9vZihtX3NvdXJjZUJ1ZmZlcnMtPmJl
Z2luKCksIG1fc291cmNlQnVmZmVycy0+ZW5kKCksIFtdKGF1dG8mIHNvdXJjZUJ1ZmZlcikgeyBy
ZXR1cm4gc291cmNlQnVmZmVyLT51cGRhdGluZygpOyB9KSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gMy4gUnVuIHRoZSBlbmQgb2Ygc3RyZWFtIGFs
Z29yaXRobSB3aXRoIHRoZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvIGVycm9yLgogICAgIHN0cmVh
bUVuZGVkV2l0aEVycm9yKGVycm9yKTsKQEAgLTYzMCwyMiArNjMwLDIyIEBAIEV4Y2VwdGlvbk9y
PFNvdXJjZUJ1ZmZlciY+IE1lZGlhU291cmNlOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5n
JiB0eXBlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKICAgICAv
LyAyLiBJZiB0eXBlIGNvbnRhaW5zIGEgTUlNRSB0eXBlIHRoYXQgaXMgbm90IHN1cHBvcnRlZCAu
Li4sIHRoZW4gdGhyb3cgYQotICAgIC8vIE5PVF9TVVBQT1JURURfRVJSIGV4Y2VwdGlvbiBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gTm90U3VwcG9ydGVkRXJyb3IgZXhjZXB0aW9uIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoIWlzVHlwZVN1cHBvcnRlZCh0eXBlKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgLy8gNC4gSWYgdGhl
IHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIG5vdCBpbiB0aGUgIm9wZW4iIHN0YXRlIHRoZW4gdGhy
b3cgYW4KLSAgICAvLyBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgorICAgIC8vIEludmFsaWRTdGF0ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhl
c2Ugc3RlcHMuCiAgICAgaWYgKCFpc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogCiAgICAgLy8gNS4gQ3JlYXRlIGEgbmV3IFNvdXJjZUJ1ZmZlciBvYmpl
Y3QgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgogICAgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBl
KHR5cGUpOwogICAgIGF1dG8gc291cmNlQnVmZmVyUHJpdmF0ZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZl
clByaXZhdGUoY29udGVudFR5cGUpOwogCiAgICAgaWYgKHNvdXJjZUJ1ZmZlclByaXZhdGUuaGFz
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgLy8gMi4gSWYgdHlwZSBjb250YWlucyBhIE1JTUUgdHlw
ZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgLi4uLCB0aGVuIHRocm93IGEgTk9UX1NVUFBPUlRFRF9F
UlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KLSAgICAgICAgLy8gMy4gSWYgdGhl
IHVzZXIgYWdlbnQgY2FuJ3QgaGFuZGxlIGFueSBtb3JlIFNvdXJjZUJ1ZmZlciBvYmplY3RzIHRo
ZW4gdGhyb3cgYSBRVU9UQV9FWENFRURFRF9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcworICAgICAgICAvLyAyLiBJZiB0eXBlIGNvbnRhaW5zIGEgTUlNRSB0eXBlIHRoYXQgaXMg
bm90IHN1cHBvcnRlZCAuLi4sIHRoZW4gdGhyb3cgYSBOb3RTdXBwb3J0ZWRFcnJvciBleGNlcHRp
b24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICAvLyAzLiBJZiB0aGUgdXNlciBhZ2Vu
dCBjYW4ndCBoYW5kbGUgYW55IG1vcmUgU291cmNlQnVmZmVyIG9iamVjdHMgdGhlbiB0aHJvdyBh
IFF1b3RhRXhjZWVkZWRFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzCiAgICAg
ICAgIHJldHVybiBzb3VyY2VCdWZmZXJQcml2YXRlLnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9
CiAKQEAgLTY4MCw5ICs2ODAsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBNZWRpYVNvdXJjZTo6cmVt
b3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlciYgYnVmZmVyKQogICAgIFJlZjxTb3VyY2VCdWZm
ZXI+IHByb3RlY3QoYnVmZmVyKTsKIAogICAgIC8vIDIuIElmIHNvdXJjZUJ1ZmZlciBzcGVjaWZp
ZXMgYW4gb2JqZWN0IHRoYXQgaXMgbm90IGluIHNvdXJjZUJ1ZmZlcnMgdGhlbgotICAgIC8vIHRo
cm93IGEgTk9UX0ZPVU5EX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAg
IC8vIHRocm93IGEgTm90Rm91bmRFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBz
LgogICAgIGlmICghbV9zb3VyY2VCdWZmZXJzLT5sZW5ndGgoKSB8fCAhbV9zb3VyY2VCdWZmZXJz
LT5jb250YWlucyhidWZmZXIpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5E
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAg
ICAgLy8gMy4gSWYgdGhlIHNvdXJjZUJ1ZmZlci51cGRhdGluZyBhdHRyaWJ1dGUgZXF1YWxzIHRy
dWUsIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6IC4uLgogICAgIGJ1ZmZlci5hYm9ydElm
VXBkYXRpbmcoKTsKQEAgLTk4MywxNyArOTgzLDE3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTb3VyY2VC
dWZmZXJQcml2YXRlPj4gTWVkaWFTb3VyY2U6OmNyZWF0ZVNvdXJjZUJ1ZmZlclByaXZhdGUoY29u
CiAgICAgICAgIC8vIDIuMiBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZp
bGUvZGVmYXVsdC9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjd2lkbC1NZWRpYVNvdXJj
ZS1hZGRTb3VyY2VCdWZmZXItU291cmNlQnVmZmVyLURPTVN0cmluZy10eXBlCiAgICAgICAgIC8v
IFN0ZXAgMjogSWYgdHlwZSBjb250YWlucyBhIE1JTUUgdHlwZSAuLi4gdGhhdCBpcyBub3Qgc3Vw
cG9ydGVkIHdpdGggdGhlIHR5cGVzCiAgICAgICAgIC8vIHNwZWNpZmllZCBmb3IgdGhlIG90aGVy
IFNvdXJjZUJ1ZmZlciBvYmplY3RzIGluIHNvdXJjZUJ1ZmZlcnMsIHRoZW4gdGhyb3cKLSAgICAg
ICAgLy8gYSBOT1RfU1VQUE9SVEVEX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBz
LgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAg
ICAgLy8gYSBOb3RTdXBwb3J0ZWRFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBz
LgorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBj
YXNlIE1lZGlhU291cmNlUHJpdmF0ZTo6UmVhY2hlZElkTGltaXQ6CiAgICAgICAgIC8vIDIuMiBo
dHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvZGVmYXVsdC9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLmh0bWwjd2lkbC1NZWRpYVNvdXJjZS1hZGRTb3VyY2VCdWZmZXIt
U291cmNlQnVmZmVyLURPTVN0cmluZy10eXBlCiAgICAgICAgIC8vIFN0ZXAgMzogSWYgdGhlIHVz
ZXIgYWdlbnQgY2FuJ3QgaGFuZGxlIGFueSBtb3JlIFNvdXJjZUJ1ZmZlciBvYmplY3RzIHRoZW4g
dGhyb3cKLSAgICAgICAgLy8gYSBRVU9UQV9FWENFRURFRF9FUlIgZXhjZXB0aW9uIGFuZCBhYm9y
dCB0aGVzZSBzdGVwcy4KLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFFVT1RBX0VYQ0VFREVE
X0VSUiB9OworICAgICAgICAvLyBhIFF1b3RhRXhjZWVkZWRFcnJvciBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUXVvdGFFeGNlZWRl
ZEVycm9yIH07CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFFVT1RBX0VYQ0VFREVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24g
eyBRdW90YUV4Y2VlZGVkRXJyb3IgfTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZTo6c2NoZWR1bGVF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCA0Y2NjOGQ5Njli
ZjQ3YzAxYmIwMDkwMTNmZmY5ZWI3YmQzMmY4NGExLi5iNzQ3YTlkODM4ZmIwMGZmM2ZmN2M5NmNm
OGNkY2RhOWE5ZDY1MmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCkBAIC0xMjcsOSArMTI3LDkgQEAgRXhjZXB0aW9uT3I8
UmVmPFRpbWVSYW5nZXM+PiBTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVkKCkgY29uc3QKICAgICAvLyBT
ZWN0aW9uIDMuMSBidWZmZXJlZCBhdHRyaWJ1dGUgc3RlcHMuCiAgICAgLy8gaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1bHQvbWVkaWEtc291cmNlL21lZGlh
LXNvdXJjZS5odG1sI2F0dHJpYnV0ZXMtMQogICAgIC8vIDEuIElmIHRoaXMgb2JqZWN0IGhhcyBi
ZWVuIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlQnVmZmVycyBhdHRyaWJ1dGUgb2YgdGhlIHBhcmVu
dCBtZWRpYSBzb3VyY2UgdGhlbiB0aHJvdyBhbgotICAgIC8vICAgIElOVkFMSURfU1RBVEVfRVJS
IGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gICAgSW52YWxpZFN0YXRl
RXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoaXNSZW1vdmVk
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDIu
IFJldHVybiBhIG5ldyBzdGF0aWMgbm9ybWFsaXplZCBUaW1lUmFuZ2VzIG9iamVjdCBmb3IgdGhl
IG1lZGlhIHNlZ21lbnRzIGJ1ZmZlcmVkLgogICAgIHJldHVybiBtX2J1ZmZlcmVkLT5jb3B5KCk7
CkBAIC0xNDYsMTkgKzE0NiwxOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OnNl
dFRpbWVzdGFtcE9mZnNldChkb3VibGUgb2Zmc2V0KQogICAgIC8vIGh0dHBzOi8vZHZjcy53My5v
cmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UuaHRtbCNhdHRyaWJ1dGVzLTEKICAgICAvLyAxLiBMZXQgbmV3IHRpbWVzdGFtcCBvZmZzZXQg
ZXF1YWwgdGhlIG5ldyB2YWx1ZSBiZWluZyBhc3NpZ25lZCB0byB0aGlzIGF0dHJpYnV0ZS4KICAg
ICAvLyAyLiBJZiB0aGlzIG9iamVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZUJ1
ZmZlcnMgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlLCB0aGVuIHRocm93IGFu
Ci0gICAgLy8gICAgSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KLSAgICAvLyAzLiBJZiB0aGUgdXBkYXRpbmcgYXR0cmlidXRlIGVxdWFscyB0cnVlLCB0
aGVuIHRocm93IGFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ug
c3RlcHMuCisgICAgLy8gICAgSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0
aGVzZSBzdGVwcy4KKyAgICAvLyAzLiBJZiB0aGUgdXBkYXRpbmcgYXR0cmlidXRlIGVxdWFscyB0
cnVlLCB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQg
dGhlc2Ugc3RlcHMuCiAgICAgaWYgKGlzUmVtb3ZlZCgpIHx8IG1fdXBkYXRpbmcpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDQuIElmIHRoZSByZWFk
eVN0YXRlIGF0dHJpYnV0ZSBvZiB0aGUgcGFyZW50IG1lZGlhIHNvdXJjZSBpcyBpbiB0aGUgImVu
ZGVkIiBzdGF0ZSB0aGVuIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgIC8vIDQuMSBTZXQg
dGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlIHRvICJv
cGVuIgogICAgIC8vIDQuMiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1l
ZCBzb3VyY2VvcGVuIGF0IHRoZSBwYXJlbnQgbWVkaWEgc291cmNlLgogICAgIG1fc291cmNlLT5v
cGVuSWZJbkVuZGVkU3RhdGUoKTsKIAotICAgIC8vIDUuIElmIHRoZSBhcHBlbmQgc3RhdGUgZXF1
YWxzIFBBUlNJTkdfTUVESUFfU0VHTUVOVCwgdGhlbiB0aHJvdyBhbiBJTlZBTElEX1NUQVRFX0VS
UiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gNS4gSWYgdGhlIGFwcGVuZCBzdGF0ZSBl
cXVhbHMgUEFSU0lOR19NRURJQV9TRUdNRU5ULCB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVy
cm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAobV9hcHBlbmRTdGF0ZSA9PSBQYXJz
aW5nTWVkaWFTZWdtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
CiAKICAgICBNZWRpYVRpbWUgbmV3VGltZXN0YW1wT2Zmc2V0ID0gTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRG91YmxlKG9mZnNldCk7CiAKQEAgLTE4Niw3ICsxODYsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBTb3VyY2VCdWZmZXI6OnNldEFwcGVuZFdpbmRvd1N0YXJ0KGRvdWJsZSBuZXdWYWx1ZSkKICAg
ICAvLyAgICB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yICBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgogICAgIC8vIDIuIElmIHRoZSB1cGRhdGluZyBhdHRyaWJ1dGUgZXF1
YWxzIHRydWUsIHRoZW4gdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBh
Ym9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoaXNSZW1vdmVkKCkgfHwgbV91cGRhdGluZykKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gMy4gSWYgdGhl
IG5ldyB2YWx1ZSBpcyBsZXNzIHRoYW4gMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYXBw
ZW5kV2luZG93RW5kIHRoZW4KICAgICAvLyAgICB0aHJvdyBhbiBUeXBlRXJyb3IgZXhjZXB0aW9u
IGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KQEAgLTIxMyw3ICsyMTMsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBTb3VyY2VCdWZmZXI6OnNldEFwcGVuZFdpbmRvd0VuZChkb3VibGUgbmV3VmFsdWUpCiAg
ICAgLy8gICAgdGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgogICAgIC8vIDIuIElmIHRoZSB1cGRhdGluZyBhdHRyaWJ1dGUgZXF1
YWxzIHRydWUsIHRoZW4gdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBh
Ym9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoaXNSZW1vdmVkKCkgfHwgbV91cGRhdGluZykKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gMy4gSWYgdGhl
IG5ldyB2YWx1ZSBlcXVhbHMgTmFOLCB0aGVuIHRocm93IGFuIFR5cGVFcnJvciBhbmQgYWJvcnQg
dGhlc2Ugc3RlcHMuCiAgICAgLy8gNC4gSWYgdGhlIG5ldyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3Ig
ZXF1YWwgdG8gYXBwZW5kV2luZG93U3RhcnQgdGhlbiB0aHJvdyBhbiBUeXBlRXJyb3IgZXhjZXB0
aW9uCkBAIC0yNjQsMTUgKzI2NCwxNSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6
OmFib3J0KCkKICAgICAvLyBTZWN0aW9uIDMuMiBhYm9ydCgpIG1ldGhvZCBzdGVwcy4KICAgICAv
LyBodHRwczovL3Jhd2dpdC5jb20vdzNjL21lZGlhLXNvdXJjZS80NTYyNzY0NjM0NGVlYTAxNzBk
ZDFjYmM1YTNkNTA4Y2E3NTFhYmI4L21lZGlhLXNvdXJjZS1yZXNwZWMuaHRtbCNkb20tc291cmNl
YnVmZmVyLWFib3J0CiAgICAgLy8gMS4gSWYgdGhpcyBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBm
cm9tIHRoZSBzb3VyY2VCdWZmZXJzIGF0dHJpYnV0ZSBvZiB0aGUgcGFyZW50IG1lZGlhIHNvdXJj
ZQotICAgIC8vICAgIHRoZW4gdGhyb3cgYW4gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyAgICB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0
ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAgLy8gMi4gSWYgdGhl
IHJlYWR5U3RhdGUgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlIGlzIG5vdCBp
biB0aGUgIm9wZW4iIHN0YXRlCi0gICAgLy8gICAgdGhlbiB0aHJvdyBhbiBJTlZBTElEX1NUQVRF
X0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIC8vICAgIHRoZW4gdGhy
b3cgYW4gSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4K
ICAgICBpZiAoaXNSZW1vdmVkKCkgfHwgIW1fc291cmNlLT5pc09wZW4oKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gMy4gSWYgdGhlIHJhbmdlIHJl
bW92YWwgYWxnb3JpdGhtIGlzIHJ1bm5pbmcsIHRoZW4gdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJy
b3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAobV9yZW1vdmVUaW1l
ci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAK
ICAgICAvLyA0LiBJZiB0aGUgc291cmNlQnVmZmVyLnVwZGF0aW5nIGF0dHJpYnV0ZSBlcXVhbHMg
dHJ1ZSwgdGhlbiBydW4gdGhlIGZvbGxvd2luZyBzdGVwczogLi4uCiAgICAgYWJvcnRJZlVwZGF0
aW5nKCk7CkBAIC0zMDQsNyArMzA0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU291cmNlQnVmZmVy
OjpyZW1vdmUoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJgogICAgIC8v
ICAgIGFuIEludmFsaWRTdGF0ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMu
CiAgICAgLy8gMi4gSWYgdGhlIHVwZGF0aW5nIGF0dHJpYnV0ZSBlcXVhbHMgdHJ1ZSwgdGhlbiB0
aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBz
LgogICAgIGlmIChpc1JlbW92ZWQoKSB8fCBtX3VwZGF0aW5nKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICAvLyAzLiBJZiBkdXJhdGlvbiBlcXVhbHMgTmFO
LCB0aGVuIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMu
CiAgICAgLy8gNC4gSWYgc3RhcnQgaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIGR1cmF0aW9u
LCB0aGVuIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMu
CkBAIC00OTYsMTAgKzQ5NiwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OmFw
cGVuZEJ1ZmZlckludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCiAgICAgLy8gU2Vj
dGlvbiAzLjUuNCBQcmVwYXJlIEFwcGVuZEFsZ29yaXRobQogCiAgICAgLy8gMS4gSWYgdGhlIFNv
dXJjZUJ1ZmZlciBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZUJ1ZmZlcnMgYXR0cmli
dXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlCi0gICAgLy8gdGhlbiB0aHJvdyBhbiBJTlZB
TElEX1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgotICAgIC8vIDIu
IElmIHRoZSB1cGRhdGluZyBhdHRyaWJ1dGUgZXF1YWxzIHRydWUsIHRoZW4gdGhyb3cgYW4gSU5W
QUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyB0
aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ug
c3RlcHMuCisgICAgLy8gMi4gSWYgdGhlIHVwZGF0aW5nIGF0dHJpYnV0ZSBlcXVhbHMgdHJ1ZSwg
dGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgogICAgIGlmIChpc1JlbW92ZWQoKSB8fCBtX3VwZGF0aW5nKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICAvLyAzLiBJZiB0aGUgcmVhZHlTdGF0
ZSBhdHRyaWJ1dGUgb2YgdGhlIHBhcmVudCBtZWRpYSBzb3VyY2UgaXMgaW4gdGhlICJlbmRlZCIg
c3RhdGUgdGhlbiBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAvLyAzLjEuIFNldCB0aGUg
cmVhZHlTdGF0ZSBhdHRyaWJ1dGUgb2YgdGhlIHBhcmVudCBtZWRpYSBzb3VyY2UgdG8gIm9wZW4i
CkBAIC01MTEsMTAgKzUxMSwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OmFw
cGVuZEJ1ZmZlckludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCiAKICAgICAvLyBG
SVhNRTogZW5hYmxlIHRoaXMgY29kZSB3aGVuIE1TRSBsaWJyYXJpZXMgaGF2ZSBiZWVuIHVwZGF0
ZWQgdG8gc3VwcG9ydCBpdC4KICNpZiBVU0UoR1NUUkVBTUVSKQotICAgIC8vIDUuIElmIHRoZSBi
dWZmZXIgZnVsbCBmbGFnIGVxdWFscyB0cnVlLCB0aGVuIHRocm93IGEgUVVPVEFfRVhDRUVERURf
RVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcC4KKyAgICAvLyA1LiBJZiB0aGUgYnVm
ZmVyIGZ1bGwgZmxhZyBlcXVhbHMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFF1b3RhRXhjZWVkZWRFcnJv
ciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXAuCiAgICAgaWYgKG1fYnVmZmVyRnVsbCkg
ewotICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlcklu
dGVybmFsKCVwKSAtICBidWZmZXIgZnVsbCwgZmFpbGluZyB3aXRoIFFVT1RBX0VYQ0VFREVEX0VS
UiBlcnJvciIsIHRoaXMpOwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUVVPVEFfRVhDRUVE
RURfRVJSIH07CisgICAgICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6YXBwZW5k
QnVmZmVySW50ZXJuYWwoJXApIC0gIGJ1ZmZlciBmdWxsLCBmYWlsaW5nIHdpdGggUXVvdGFFeGNl
ZWRlZEVycm9yIGVycm9yIiwgdGhpcyk7CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBRdW90
YUV4Y2VlZGVkRXJyb3IgfTsKICAgICB9CiAjZW5kaWYKIApAQCAtMjA0NSwxNCArMjA0NSwxNCBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OnNldE1vZGUoQXBwZW5kTW9kZSBuZXdN
b2RlKQogICAgIC8vIE9uIHNldHRpbmcsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogCiAgICAg
Ly8gMS4gTGV0IG5ldyBtb2RlIGVxdWFsIHRoZSBuZXcgdmFsdWUgYmVpbmcgYXNzaWduZWQgdG8g
dGhpcyBhdHRyaWJ1dGUuCi0gICAgLy8gMi4gSWYgZ2VuZXJhdGUgdGltZXN0YW1wcyBmbGFnIGVx
dWFscyB0cnVlIGFuZCBuZXcgbW9kZSBlcXVhbHMgInNlZ21lbnRzIiwgdGhlbiB0aHJvdyBhbiBJ
TlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAv
LyAyLiBJZiBnZW5lcmF0ZSB0aW1lc3RhbXBzIGZsYWcgZXF1YWxzIHRydWUgYW5kIG5ldyBtb2Rl
IGVxdWFscyAic2VnbWVudHMiLCB0aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNl
cHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmIChtX3Nob3VsZEdlbmVyYXRlVGlt
ZXN0YW1wcyAmJiBuZXdNb2RlID09IEFwcGVuZE1vZGU6OlNlZ21lbnRzKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIC8vIDMuIElmIHRoaXMgb2JqZWN0
IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlQnVmZmVycyBhdHRyaWJ1dGUgb2YgdGhl
IHBhcmVudCBtZWRpYSBzb3VyY2UsIHRoZW4gdGhyb3cgYW4gSU5WQUxJRF9TVEFURV9FUlIgZXhj
ZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KLSAgICAvLyA0LiBJZiB0aGUgdXBkYXRpbmcg
YXR0cmlidXRlIGVxdWFscyB0cnVlLCB0aGVuIHRocm93IGFuIElOVkFMSURfU1RBVEVfRVJSIGV4
Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gMy4gSWYgdGhpcyBvYmplY3Qg
aGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2VCdWZmZXJzIGF0dHJpYnV0ZSBvZiB0aGUg
cGFyZW50IG1lZGlhIHNvdXJjZSwgdGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNl
cHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIC8vIDQuIElmIHRoZSB1cGRhdGluZyBh
dHRyaWJ1dGUgZXF1YWxzIHRydWUsIHRoZW4gdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3IgZXhj
ZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoaXNSZW1vdmVkKCkgfHwgbV91
cGRhdGluZykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAg
Ly8gNS4gSWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291
cmNlIGlzIGluIHRoZSAiZW5kZWQiIHN0YXRlIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6
CiAgICAgaWYgKG1fc291cmNlLT5pc0VuZGVkKCkpIHsKQEAgLTIwNjEsOSArMjA2MSw5IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFNvdXJjZUJ1ZmZlcjo6c2V0TW9kZShBcHBlbmRNb2RlIG5ld01vZGUp
CiAgICAgICAgIG1fc291cmNlLT5vcGVuSWZJbkVuZGVkU3RhdGUoKTsKICAgICB9CiAKLSAgICAv
LyA2LiBJZiB0aGUgYXBwZW5kIHN0YXRlIGVxdWFscyBQQVJTSU5HX01FRElBX1NFR01FTlQsIHRo
ZW4gdGhyb3cgYW4gSU5WQUxJRF9TVEFURV9FUlIgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAg
IC8vIDYuIElmIHRoZSBhcHBlbmQgc3RhdGUgZXF1YWxzIFBBUlNJTkdfTUVESUFfU0VHTUVOVCwg
dGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAg
ICAgaWYgKG1fYXBwZW5kU3RhdGUgPT0gUGFyc2luZ01lZGlhU2VnbWVudCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gNy4gSWYgdGhlIG5ldyBtb2Rl
IGVxdWFscyAic2VxdWVuY2UiLCB0aGVuIHNldCB0aGUgZ3JvdXAgc3RhcnQgdGltZXN0YW1wIHRv
IHRoZSBncm91cCBlbmQgdGltZXN0YW1wLgogICAgIGlmIChuZXdNb2RlID09IEFwcGVuZE1vZGU6
OlNlcXVlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYURldmljZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYURldmljZXMuY3BwCmluZGV4IDQxZTU5NWQ2MjFmOWM0ZTk2MDk5YTA2MTBjNDZlZDYxZmJk
ODdkZmUuLjZlNDBjN2Y2MjE4YjQxMWNlODY3NDBjMjBlNzI0YzMyZTJlYjgwZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAK
QEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVkaWFEZXZpY2VzOjpnZXRVc2Vy
TWVkaWEoY29uc3QgU3RyZWFtQ29uc3RyYWludHMmIGNvbnN0cmFpbnQKIHsKICAgICBhdXRvKiBk
b2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgYXV0byBhdWRpb0NvbnN0cmFp
bnRzID0gY3JlYXRlTWVkaWFDb25zdHJhaW50cyhjb25zdHJhaW50cy5hdWRpbyk7CiAgICAgYXV0
byB2aWRlb0NvbnN0cmFpbnRzID0gY3JlYXRlTWVkaWFDb25zdHJhaW50cyhjb25zdHJhaW50cy52
aWRlbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggODM1N2VkOWQ3
MWY5OWYwNTA3OGVkYTE2OGRjYTAxMWI4ODQ0ZWJmZC4uMWU5MjUyN2FlMmZkNjc2YTc3MzlkNGY3
OWM5NmRmNjZmZTA1YjBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcApA
QCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVh
dGVBbnN3ZXJUYXNrKGNvbnN0IFJUQ0Fuc3dlck9wdGlvbnMmKQogICAgIEFTU0VSVCghbV9kdGxz
RmluZ2VycHJpbnQuaXNFbXB0eSgpKTsKIAogICAgIGlmICghaW50ZXJuYWxSZW1vdGVEZXNjcmlw
dGlvbigpKSB7Ci0gICAgICAgIGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRpb24geyBJTlZBTElE
X1NUQVRFX0VSUiwgIk5vIHJlbW90ZSBkZXNjcmlwdGlvbiBzZXQiIH0pOworICAgICAgICBjcmVh
dGVBbnN3ZXJGYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUg
ZGVzY3JpcHRpb24gc2V0IiB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjE4LDcg
KzYxOCw3IEBAIHZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0FkZEljZUNhbmRp
ZGF0ZShSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRpZGF0CiB2b2lkIE1lZGlhRW5kcG9pbnRQZWVy
Q29ubmVjdGlvbjo6YWRkSWNlQ2FuZGlkYXRlVGFzayhSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRp
ZGF0ZSkKIHsKICAgICBpZiAoIWludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSkgewotICAgICAg
ICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQoRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsICJO
byByZW1vdGUgZGVzY3JpcHRpb24gc2V0IiB9KTsKKyAgICAgICAgYWRkSWNlQ2FuZGlkYXRlRmFp
bGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRlc2NyaXB0aW9u
IHNldCIgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRT
ZXNzaW9uRGVzY3JpcHRpb24uY3BwCmluZGV4IDM5MzZiNGUzMTliZjAxMTkxZTQyNGRlMzcwODg1
MDdkOGE4MjRhMTcuLjFjNjA2ZjUwYzJhOWRkN2VlODEyM2NiZTMzOWY3NDdmNzQ0MGZlNzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFNlc3Npb25EZXNjcmlwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcApAQCAtNjIsOSArNjIs
OSBAQCBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4+IE1l
ZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpbwogICAgIGF1dG8gcmVzdWx0ID0gc2RwUHJvY2Vz
c29yLnBhcnNlKHJ0Y0Rlc2NyaXB0aW9uLT5zZHAoKSwgY29uZmlndXJhdGlvbik7CiAgICAgaWYg
KHJlc3VsdCAhPSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6U3VjY2VzcykgewogICAgICAgICBpZiAo
cmVzdWx0ID09IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJTRFAg
Y29udGVudCBpcyBpbnZhbGlkIikgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiU0RQIGNvbnRlbnQgaXMgaW52YWxpZCIp
IH07CiAgICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7Ci0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBBQk9SVF9FUlIsIEFTQ0lJTGl0ZXJhbCgiSW50ZXJu
YWwgZXJyb3IiKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgQWJvcnRFcnJvciwgQVND
SUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpIH07CiAgICAgfQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24ocnRjRGVzY3JpcHRpb24tPnR5
cGUoKSwgV1RGTW92ZShjb25maWd1cmF0aW9uKSwgV1RGTW92ZShydGNEZXNjcmlwdGlvbikpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNv
bm5lY3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAppbmRleCAyMmRlZjJiMmYxZDFkZTJjOWVlN2I5NzIy
NjE5ZDA3MzY5ZmI0NDJmLi5lMTNiODhhYTZhMTIxMDBkMWFjZjZmMzNjYTkxZTliOTNlY2I3MTJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnNldExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uJiBzZXNzaW9uRGUKICAgICBBU1NFUlQoIW1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSk7
CiAKICAgICBpZiAoIWlzTG9jYWxEZXNjcmlwdGlvblR5cGVWYWxpZEZvclN0YXRlKHNlc3Npb25E
ZXNjcmlwdGlvbi50eXBlKCksIG1fcGVlckNvbm5lY3Rpb24uc2lnbmFsaW5nU3RhdGUoKSkpIHsK
LSAgICAgICAgcHJvbWlzZS5yZWplY3QoSU5WQUxJRF9TVEFURV9FUlIsICJEZXNjcmlwdGlvbiB0
eXBlIGluY29tcGF0aWJsZSB3aXRoIGN1cnJlbnQgc2lnbmFsaW5nIHN0YXRlIik7CisgICAgICAg
IHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yLCAiRGVzY3JpcHRpb24gdHlwZSBpbmNv
bXBhdGlibGUgd2l0aCBjdXJyZW50IHNpZ25hbGluZyBzdGF0ZSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OnNldFJlbW90ZURlc2NyaXB0aW9uKFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgc2Vzc2lvbkQKICAg
ICBBU1NFUlQoIW1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSk7CiAKICAgICBpZiAoIWlzUmVt
b3RlRGVzY3JpcHRpb25UeXBlVmFsaWRGb3JTdGF0ZShzZXNzaW9uRGVzY3JpcHRpb24udHlwZSgp
LCBtX3BlZXJDb25uZWN0aW9uLnNpZ25hbGluZ1N0YXRlKCkpKSB7Ci0gICAgICAgIHByb21pc2Uu
cmVqZWN0KElOVkFMSURfU1RBVEVfRVJSLCAiRGVzY3JpcHRpb24gdHlwZSBpbmNvbXBhdGlibGUg
d2l0aCBjdXJyZW50IHNpZ25hbGluZyBzdGF0ZSIpOworICAgICAgICBwcm9taXNlLnJlamVjdChJ
bnZhbGlkU3RhdGVFcnJvciwgIkRlc2NyaXB0aW9uIHR5cGUgaW5jb21wYXRpYmxlIHdpdGggY3Vy
cmVudCBzaWduYWxpbmcgc3RhdGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAK
aW5kZXggOWRiMWVjNWJkNjdmMWQ3M2E0NzZjMDZlOGFhZjVjODFiZjlkM2I3YS4uYmY3ZDhiMDcz
MjU5MDQxOTNkMzViMzA0ZTdiOTI1ZGM1MDU0MzUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC03MywxOCArNzMs
MTggQEAgU3RyaW5nIFJUQ0RUTUZTZW5kZXI6OnRvbmVCdWZmZXIoKSBjb25zdAogRXhjZXB0aW9u
T3I8dm9pZD4gUlRDRFRNRlNlbmRlcjo6aW5zZXJ0RFRNRihjb25zdCBTdHJpbmcmLCBzdGQ6Om9w
dGlvbmFsPGludD4gZHVyYXRpb24sIHN0ZDo6b3B0aW9uYWw8aW50PiBpbnRlclRvbmVHYXApCiB7
CiAgICAgaWYgKCFjYW5JbnNlcnREVE1GKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9y
dGVkRXJyb3IgfTsKIAogICAgIGlmIChkdXJhdGlvbiAmJiAoZHVyYXRpb24udmFsdWUoKSA+IG1h
eFRvbmVEdXJhdGlvbk1zIHx8IGR1cmF0aW9uLnZhbHVlKCkgPCBtaW5Ub25lRHVyYXRpb25Ncykp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgaWYgKGludGVyVG9uZUdhcCAmJiBp
bnRlclRvbmVHYXAudmFsdWUoKSA8IG1pbkludGVyVG9uZUdhcE1zKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3lu
dGF4RXJyb3IgfTsKIAogICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbi52YWx1ZV9vcihkZWZhdWx0
VG9uZUR1cmF0aW9uTXMpOwogICAgIG1faW50ZXJUb25lR2FwID0gaW50ZXJUb25lR2FwLnZhbHVl
X29yKGRlZmF1bHRJbnRlclRvbmVHYXBNcyk7CiAKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lO
VEFYX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogfQogCiB2
b2lkIFJUQ0RUTUZTZW5kZXI6OmRpZFBsYXlUb25lKGNvbnN0IFN0cmluZyYgdG9uZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5j
cHAKaW5kZXggMmE1ODE0NTM3YmQ3NGYyZTg5MTBkMTY1ODM2NDVmNTU1MDJlMWE0Yy4uY2MwZTli
NTRkMTA1MDg4YmZiNDYxMzkyYjEwZjM5NjZkN2QzMjY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTk1LDIz
ICs5NSwyMyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJUQ0RhdGFDaGFubmVsOjpiaW5hcnlUeXBl
KCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IFJUQ0RhdGFDaGFubmVsOjpzZXRCaW5hcnlUeXBl
KGNvbnN0IEF0b21pY1N0cmluZyYgYmluYXJ5VHlwZSkKIHsKICAgICBpZiAoYmluYXJ5VHlwZSA9
PSBibG9iS2V5d29yZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRF
RF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07
CiAgICAgaWYgKGJpbmFyeVR5cGUgPT0gYXJyYXlidWZmZXJLZXl3b3JkKCkpIHsKICAgICAgICAg
bV9iaW5hcnlUeXBlID0gQmluYXJ5VHlwZTo6QXJyYXlCdWZmZXI7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQotICAgIHJldHVybiBFeGNlcHRpb24geyBUWVBFX01JU01BVENIX0VSUiB9Owor
ICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlTWlzbWF0Y2hFcnJvciB9OwogfQogCiBFeGNlcHRp
b25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcmIGRhdGEpCiB7CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IHRocm93IGluIENvbm5lY3RlZCBzdGF0ZS4KICAg
ICBpZiAobV9yZWFkeVN0YXRlICE9IFJUQ0RhdGFDaGFubmVsU3RhdGU6Ok9wZW4pCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlmICghbV9oYW5kbGVyLT5z
ZW5kU3RyaW5nRGF0YShkYXRhKSkgewogICAgICAgICAvLyBGSVhNRTogRGVjaWRlIHdoYXQgdGhl
IHJpZ2h0IGV4Y2VwdGlvbiBoZXJlIGlzLgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lO
VEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAg
ICB9CiAKICAgICByZXR1cm4geyB9OwpAQCAtMTIxLDcgKzEyMSw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFJUQ0RhdGFDaGFubmVsOjpzZW5kKEFycmF5QnVmZmVyJiBkYXRhKQogewogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgb25seSB0aHJvdyBpbiBDb25uZWN0ZWQgc3RhdGUuCiAgICAgaWYgKG1f
cmVhZHlTdGF0ZSAhPSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpPcGVuKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBzaXplX3QgZGF0YUxlbmd0aCA9IGRhdGEu
Ynl0ZUxlbmd0aCgpOwogICAgIGlmICghZGF0YUxlbmd0aCkKQEAgLTEzMSw3ICsxMzEsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChBcnJheUJ1ZmZlciYgZGF0YSkK
IAogICAgIGlmICghbV9oYW5kbGVyLT5zZW5kUmF3RGF0YShkYXRhUG9pbnRlciwgZGF0YUxlbmd0
aCkpIHsKICAgICAgICAgLy8gRklYTUU6IERlY2lkZSB3aGF0IHRoZSByaWdodCBleGNlcHRpb24g
aGVyZSBpcy4KLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgfQogCiAgICAgcmV0dXJu
IHsgfTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5l
bDo6c2VuZChBcnJheUJ1ZmZlclZpZXcmIGRhdGEpCiBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRh
Q2hhbm5lbDo6c2VuZChCbG9iJikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRp
b24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiB2b2lkIFJUQ0RhdGFDaGFubmVsOjpjbG9z
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDhkYzg4YmU0M2Y5MTVmYWIzYmQ4NTcxODU5MjJlYWM3
OWRhNmE5ZjEuLjkwYjIxZWE2MjNjMTQ3ZTQ1OTEyYjU5ODE1YmRjYTFkN2RkNzBkODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwCkBAIC05NiwxMCArOTYsMTAgQEAgUlRDUGVlckNvbm5lY3Rpb246On5SVENQ
ZWVyQ29ubmVjdGlvbigpCiBFeGNlcHRpb25Pcjx2b2lkPiBSVENQZWVyQ29ubmVjdGlvbjo6aW5p
dGlhbGl6ZVdpdGgoRG9jdW1lbnQmIGRvY3VtZW50LCBSVENDb25maWd1cmF0aW9uJiYgY29uZmln
dXJhdGlvbikKIHsKICAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGlmICghbV9iYWNrZW5kKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICByZXR1cm4gaW5pdGlhbGl6ZUNv
bmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSk7CiB9CkBAIC0xMDcsMTEgKzEwNywx
MSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSVENQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbGl6ZVdpdGgo
RG9jdW1lbnQmIGRvY3VtZW50LCBSVENDb25maQogRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFNlbmRl
cj4+IFJUQ1BlZXJDb25uZWN0aW9uOjphZGRUcmFjayhSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB0
cmFjaywgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8TWVkaWFTdHJlYW0+PiYg
c3RyZWFtcykKIHsKICAgICBpZiAoaXNDbG9zZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciB9OwogCiAgICAgZm9yIChSVENSdHBTZW5kZXImIHNlbmRlciA6IG1fdHJh
bnNjZWl2ZXJTZXQtPnNlbmRlcnMoKSkgewogICAgICAgICBpZiAoc2VuZGVyLnRyYWNrSWQoKSA9
PSB0cmFjay0+aWQoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FD
Q0VTU19FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKICAgICB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtZWRpYVN0cmVhbUlkczsKQEAg
LTE2MSw3ICsxNjEsNyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDUnRwU2VuZGVyPj4gUlRDUGVlckNv
bm5lY3Rpb246OmFkZFRyYWNrKFJlZjxNZWRpYVN0cmVhbVRyYWNrPgogRXhjZXB0aW9uT3I8dm9p
ZD4gUlRDUGVlckNvbm5lY3Rpb246OnJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyKQog
ewogICAgIGlmIChpc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CiAKICAgICBib29sIHNob3VsZEFib3J0ID0gdHJ1ZTsKICAgICBmb3IgKFJUQ1J0cFNl
bmRlciYgc2VuZGVySW5TZXQgOiBtX3RyYW5zY2VpdmVyU2V0LT5zZW5kZXJzKCkpIHsKQEAgLTIy
MCw3ICsyMjAsNyBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpxdWV1ZWRDcmVhdGVPZmZlcihS
VENPZmZlck9wdGlvbnMmJiBvcHRpb25zLCBTZXNzaW9uRGVzYwogewogICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkNyZWF0aW5nIG9mZmVyXG4iKTsKICAgICBpZiAoaXNDbG9zZWQoKSkgewotICAg
ICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21pc2Uu
cmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjMxLDcgKzIzMSw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnF1ZXVlZENyZWF0ZUFuc3dl
cihSVENBbnN3ZXJPcHRpb25zJiYgb3B0aW9ucywgU2Vzc2lvbkRlCiB7CiAgICAgUkVMRUFTRV9M
T0coV2ViUlRDLCAiQ3JlYXRpbmcgYW5zd2VyXG4iKTsKICAgICBpZiAoaXNDbG9zZWQoKSkgewot
ICAgICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21p
c2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnF1ZXVlZFNldExvY2Fs
RGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmlwCiB7CiAgICAgUkVMRUFT
RV9MT0coV2ViUlRDLCAiU2V0dGluZyBsb2NhbCBkZXNjcmlwdGlvbjpcbiV7cHVibGljfXNcbiIs
IGRlc2NyaXB0aW9uLnNkcCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmIChpc0Nsb3NlZCgpKSB7
Ci0gICAgICAgIHByb21pc2UucmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJv
bWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6cXVldWVkU2V0UmVt
b3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmkKICAgICBSRUxFQVNF
X0xPRyhXZWJSVEMsICJTZXR0aW5nIHJlbW90ZSBkZXNjcmlwdGlvbjpcbiV7cHVibGljfXNcbiIs
IGRlc2NyaXB0aW9uLnNkcCgpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKGlzQ2xvc2VkKCkp
IHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICBw
cm9taXNlLnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgbV9iYWNrZW5kLT5zZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbiwgV1RGTW92
ZShwcm9taXNlKSk7CkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6
cXVldWVkQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSogcnRjQ2FuZGlkYXRlLCBET00K
ICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWNlaXZlZCBpY2UgY2FuZGlkYXRlOlxuJXtwdWJs
aWN9c1xuIiwgcnRjQ2FuZGlkYXRlID8gcnRjQ2FuZGlkYXRlLT5jYW5kaWRhdGUoKS51dGY4KCku
ZGF0YSgpIDogIm51bGwiKTsKIAogICAgIGlmIChpc0Nsb3NlZCgpKSB7Ci0gICAgICAgIHByb21p
c2UucmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52
YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMzEsNyArMzMx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUlRDUGVlckNvbm5lY3Rpb246OmluaXRpYWxpemVDb25m
aWd1cmF0aW9uKFJUQ0NvbmZpZ3VyYXRpb24mJgogewogICAgIGF1dG8gc2VydmVycyA9IGljZVNl
cnZlcnNGcm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKICAgICBpZiAoIXNlcnZlcnMp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5MzgKICAgICAv
LyBBbHNvIGRlY2lkZSB3aGV0aGVyIHRvIHJlcG9ydCBhbiBleGNlcHRpb24gb3Igb3V0cHV0IGEg
bWVzc2FnZSBpbiB0aGUgY29uc29sZSBsb2cgaWYgc2V0dGluZyBjb25maWd1cmF0aW9uIGZhaWxz
LgpAQCAtMzQ0LDExICszNDQsMTEgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUlRDUGVlckNvbm5lY3Rp
b246OmluaXRpYWxpemVDb25maWd1cmF0aW9uKFJUQ0NvbmZpZ3VyYXRpb24mJgogRXhjZXB0aW9u
T3I8dm9pZD4gUlRDUGVlckNvbm5lY3Rpb246OnNldENvbmZpZ3VyYXRpb24oUlRDQ29uZmlndXJh
dGlvbiYmIGNvbmZpZ3VyYXRpb24pCiB7CiAgICAgaWYgKGlzQ2xvc2VkKCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGF1dG8gc2VydmVycyA9IGljZVNl
cnZlcnNGcm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKICAgICBpZiAoIXNlcnZlcnMp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5MzgKICAgICAv
LyBBbHNvIGRlY2lkZSB3aGV0aGVyIHRvIHJlcG9ydCBhbiBleGNlcHRpb24gb3Igb3V0cHV0IGEg
bWVzc2FnZSBpbiB0aGUgY29uc29sZSBsb2cgaWYgc2V0dGluZyBjb25maWd1cmF0aW9uIGZhaWxz
LgpAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmdldFN0YXRzKE1l
ZGlhU3RyZWFtVHJhY2sqIHNlbGVjdG9yLCBSZWY8RGVmZXJyZWRQcm9taXNlCiBFeGNlcHRpb25P
cjxSZWY8UlRDRGF0YUNoYW5uZWw+PiBSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlRGF0YUNoYW5u
ZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgU3RyaW5nJiYgbGFiZWwsIFJUQ0Rh
dGFDaGFubmVsSW5pdCYmIG9wdGlvbnMpCiB7CiAgICAgaWYgKGlzQ2xvc2VkKCkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlmIChvcHRpb25zLm5lZ290
aWF0ZWQgJiYgIW9wdGlvbnMubmVnb3RpYXRlZC52YWx1ZSgpICYmIChsYWJlbC5sZW5ndGgoKSA+
IDY1NTM1IHx8IG9wdGlvbnMucHJvdG9jb2wubGVuZ3RoKCkgPiA2NTUzNSkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKQEAgLTM3OCw3ICszNzgsNyBAQCBFeGNlcHRp
b25PcjxSZWY8UlRDRGF0YUNoYW5uZWw+PiBSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlRGF0YUNo
YW5uZWwoU2NyaXB0RXhlYwogICAgIAogICAgIGF1dG8gY2hhbm5lbEhhbmRsZXIgPSBtX2JhY2tl
bmQtPmNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihsYWJlbCwgb3B0aW9ucyk7CiAgICAgaWYgKCFj
aGFubmVsSGFuZGxlcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9Owog
CiAgICAgcmV0dXJuIFJUQ0RhdGFDaGFubmVsOjpjcmVhdGUoY29udGV4dCwgV1RGTW92ZShjaGFu
bmVsSGFuZGxlciksIFdURk1vdmUobGFiZWwpLCBXVEZNb3ZlKG9wdGlvbnMpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2VuZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2VuZGVyLmNwcApp
bmRleCA4ZTU5ZjJjOWY2ZTYxOGExYThkZDIyNWUzNDU3ODk2MDVjN2Q4NzZkLi44NjRiYjk4MmQ0
Nzk3OTQ0MmVkMDkwNmFjMTllM2ZiNjlhMDJkNjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNlbmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTZW5kZXIuY3BwCkBAIC03Myw3ICs3Myw3IEBA
IHZvaWQgUlRDUnRwU2VuZGVyOjpzZXRUcmFjayhSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB0cmFj
aykKIHZvaWQgUlRDUnRwU2VuZGVyOjpyZXBsYWNlVHJhY2soUmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2s+JiYgd2l0aFRyYWNrLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQogewog
ICAgIGlmIChpc1N0b3BwZWQoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NU
QVRFX0VSUik7CisgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVxdWVzdC5jcHAKaW5kZXggOWQxZTU3NjA0MDZmYTUy
YmUwNWI0ZjAxZDZmZTlmMjRkNDRjMDFhOS4uMDY5ZjcxMjI4OGE1OTNlN2VmODViYTBkMDYwNTM3
ZWY1ZjE5NjNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1VzZXJNZWRpYVJlcXVlc3QuY3BwCkBAIC01Myw3ICs1Myw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFVzZXJNZWRpYVJlcXVlc3Q6OnN0YXJ0KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFD
b25zdHJhaW50cyYmCiB7CiAgICAgYXV0byogdXNlck1lZGlhID0gVXNlck1lZGlhQ29udHJvbGxl
cjo6ZnJvbShkb2N1bWVudC5wYWdlKCkpOwogICAgIGlmICghdXNlck1lZGlhKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsgLy8gRklYTUU6IFdoeSBpcyBp
dCBiZXR0ZXIgdG8gcmV0dXJuIGFuIGV4Y2VwdGlvbiBoZXJlIGluc3RlYWQgb2YgcmVqZWN0aW5n
IHRoZSBwcm9taXNlIGFzIHdlIGRvIGp1c3QgYmVsb3c/CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OyAvLyBGSVhNRTogV2h5IGlzIGl0IGJldHRlciB0byBy
ZXR1cm4gYW4gZXhjZXB0aW9uIGhlcmUgaW5zdGVhZCBvZiByZWplY3RpbmcgdGhlIHByb21pc2Ug
YXMgd2UgZG8ganVzdCBiZWxvdz8KIAogICAgIGlmICghYXVkaW9Db25zdHJhaW50cy5pc1ZhbGlk
ICYmICF2aWRlb0NvbnN0cmFpbnRzLmlzVmFsaWQpIHsKICAgICAgICAgcHJvbWlzZS5yZWplY3Qo
VHlwZUVycm9yKTsKQEAgLTIwOCwxMSArMjA4LDExIEBAIHZvaWQgVXNlck1lZGlhUmVxdWVzdDo6
ZGVueShNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbiByZWFzb24sIGNvbnN0IFN0cmluZyYgaW52YWxp
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246OlVzZXJN
ZWRpYURpc2FibGVkOgogICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlVzZXJNZWRp
YVJlcXVlc3Q6OmRlbnkgLSB1c2VyIG1lZGlhIGRpc2FibGVkIik7Ci0gICAgICAgIG1fcHJvbWlz
ZS5yZWplY3QoU0VDVVJJVFlfRVJSKTsKKyAgICAgICAgbV9wcm9taXNlLnJlamVjdChTZWN1cml0
eUVycm9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYUFjY2Vzc0RlbmlhbFJlYXNv
bjo6Tm9DYXB0dXJlRGV2aWNlczoKICAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJV
c2VyTWVkaWFSZXF1ZXN0OjpkZW55IC0gbm8gY2FwdHVyZSBkZXZpY2VzIik7Ci0gICAgICAgIG1f
cHJvbWlzZS5yZWplY3QoTk9UX0ZPVU5EX0VSUik7CisgICAgICAgIG1fcHJvbWlzZS5yZWplY3Qo
Tm90Rm91bmRFcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFBY2Nlc3NEZW5p
YWxSZWFzb246OkludmFsaWRDb25zdHJhaW50OgogICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0
cmVhbSwgIlVzZXJNZWRpYVJlcXVlc3Q6OmRlbnkgLSBpbnZhbGlkIGNvbnN0cmFpbnQgLSAlcyIs
IGludmFsaWRDb25zdHJhaW50LnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHZv
aWQgVXNlck1lZGlhUmVxdWVzdDo6ZGVueShNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbiByZWFzb24s
IGNvbnN0IFN0cmluZyYgaW52YWxpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFBY2Nl
c3NEZW5pYWxSZWFzb246Ok90aGVyRmFpbHVyZToKICAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFT
dHJlYW0sICJVc2VyTWVkaWFSZXF1ZXN0OjpkZW55IC0gb3RoZXIgZmFpbHVyZSIpOwotICAgICAg
ICBtX3Byb21pc2UucmVqZWN0KEFCT1JUX0VSUik7CisgICAgICAgIG1fcHJvbWlzZS5yZWplY3Qo
QWJvcnRFcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFBY2Nlc3NEZW5pYWxS
ZWFzb246OlBlcm1pc3Npb25EZW5pZWQ6CiAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFt
LCAiVXNlck1lZGlhUmVxdWVzdDo6ZGVueSAtIHBlcm1pc3Npb24gZGVuaWVkIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJS
VENNZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
bGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCmluZGV4IDhiMmQzZGYzZTZhYzRl
ZDQ0MzQ3N2I5MDhlZDljOGQ3OGJkNjQ2NzguLjg2Nzk4MDU0MWQ4MzdlMGYwYzFhMWIwNWNmZDJj
YTRhYTI0YWU3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQu
Y3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBMaWJXZWJSVENNZWRpYUVuZHBvaW50Ojpkb1Nl
dExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmkKIAogICAgIC8v
IEZJWE1FOiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzc4
My4gUmVtb3ZlIHRoaXMgdGVzdCBvbmNlIGZpeGVkIGF0IExpYldlYlJUQyBsZXZlbC4KICAgICBp
ZiAoZGVzY3JpcHRpb24udHlwZSgpID09IFJUQ1NkcFR5cGU6OkFuc3dlciAmJiAhbV9iYWNrZW5k
LT5wZW5kaW5nX3JlbW90ZV9kZXNjcmlwdGlvbigpKSB7Ci0gICAgICAgIG1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgSU5WQUxJRF9T
VEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHNldCBsb2NhbCBhbnN3ZXIgc2RwOiBu
byBwZW5kaW5nIHJlbW90ZSBkZXNjcmlwdGlvbi4iKSB9KTsKKyAgICAgICAgbV9wZWVyQ29ubmVj
dGlvbkJhY2tlbmQuc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc2V0IGxvY2FsIGFuc3dlciBzZHA6
IG5vIHBlbmRpbmcgcmVtb3RlIGRlc2NyaXB0aW9uLiIpIH0pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9MaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmNwcAppbmRleCBlMWE3YTM0ODk1OWI4NDc5M2RjNzEzMDEwNTIwMjU2MDZhZmNkYjAy
Li4xOGY0ZjU2ZWU0ZTQ4ZTYzNmRlZjJkODNkYTY2MDVmZDU3MjVhNjk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKQEAgLTE3
NSw3ICsxNzUsNyBAQCB2b2lkIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVh
dGVPZmZlcihSVENPZmZlck9wdGlvbnMmJiBvcHRpb25zKQogdm9pZCBMaWJXZWJSVENQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikKIHsKICAg
ICBpZiAoIW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkgewotICAgICAgICBjcmVhdGVBbnN3ZXJG
YWlsZWQoRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsICJObyByZW1vdGUgZGVzY3JpcHRp
b24gc2V0IiB9KTsKKyAgICAgICAgY3JlYXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRlc2NyaXB0aW9uIHNldCIgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVBbnN3ZXIoKTsKQEAgLTM3Miwz
NCArMzcyLDM0IEBAIHZvaWQgTGliV2ViUlRDUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXBsYWNl
VHJhY2soUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxNZWRpCiAgICAgc3dpdGNoIChjdXJyZW50
VHJhY2stPnNvdXJjZSgpLnR5cGUoKSkgewogICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6Tm9uZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHByb21p
c2UucmVqZWN0KElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUik7CisgICAgICAgIHByb21pc2UucmVq
ZWN0KEludmFsaWRNb2RpZmljYXRpb25FcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86IHsKICAgICAgICAgZm9yIChhdXRvJiBh
dWRpb1NvdXJjZSA6IG1fYXVkaW9Tb3VyY2VzKSB7CiAgICAgICAgICAgICBpZiAoJmF1ZGlvU291
cmNlLT5zb3VyY2UoKSA9PSAmY3VycmVudFRyYWNrLT5wcml2YXRlVHJhY2soKSkgewogICAgICAg
ICAgICAgICAgIGlmICghYXVkaW9Tb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNr
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KElOVkFMSURfTU9ESUZJ
Q0FUSU9OX0VSUik7CisgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRN
b2RpZmljYXRpb25FcnJvcik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbigpLmVucXVldWVSZXBsYWNlVHJh
Y2tUYXNrKHNlbmRlciwgV1RGTW92ZSh0cmFjayksIFdURk1vdmUocHJvbWlzZSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwcm9t
aXNlLnJlamVjdChJTlZBTElEX01PRElGSUNBVElPTl9FUlIpOworICAgICAgICBwcm9taXNlLnJl
amVjdChJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzogewogICAgICAgICBmb3Ig
KGF1dG8mIHZpZGVvU291cmNlIDogbV92aWRlb1NvdXJjZXMpIHsKICAgICAgICAgICAgIGlmICgm
dmlkZW9Tb3VyY2UtPnNvdXJjZSgpID09ICZjdXJyZW50VHJhY2stPnByaXZhdGVUcmFjaygpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF2aWRlb1NvdXJjZS0+c2V0U291cmNlKHRyYWNrLT5wcml2
YXRlVHJhY2soKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoSU5WQUxJ
RF9NT0RJRklDQVRJT05fRVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3Qo
SW52YWxpZE1vZGlmaWNhdGlvbkVycm9yKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb25uZWN0aW9uKCkuZW5xdWV1ZVJl
cGxhY2VUcmFja1Rhc2soc2VuZGVyLCBXVEZNb3ZlKHRyYWNrKSwgV1RGTW92ZShwcm9taXNlKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIHByb21pc2UucmVqZWN0KElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUik7CisgICAgICAgIHBy
b21pc2UucmVqZWN0KEludmFsaWRNb2RpZmljYXRpb25FcnJvcik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRv
cmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmNwcApp
bmRleCA1YzdlYzQwYTg0MWE5MjE3OGE5Mzk3ZWI5ZGYzZjBhMmM4ZTU0OGQyLi45YjQxNmFiODVl
Yjc0OGExNjM3MzdjMmY0NjlhOTEwMWUzMTY4ZTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmln
YXRvckNvbnRlbnRVdGlscy5jcHAKQEAgLTQxLDE0ICs0MSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBib29sIHZlcmlmeUN1c3RvbUhhbmRsZXJVUkwoY29uc3QgVVJMJiBiYXNl
VVJMLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiByZXF1
aXJlcyB0aGF0IGl0IGlzIGEgU1lOVEFYX0VSUiBpZiB0aGUgIiVzIiB0b2tlbiBpcworICAgIC8v
IFRoZSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoYXQgaXQgaXMgYSBTeW50YXhFcnJvciBpZiB0
aGUgIiVzIiB0b2tlbiBpcwogICAgIC8vIG5vdCBwcmVzZW50LgogICAgIHN0YXRpYyBjb25zdCBj
aGFyIHRva2VuW10gPSAiJXMiOwogICAgIGludCBpbmRleCA9IHVybC5maW5kKHRva2VuKTsKICAg
ICBpZiAoLTEgPT0gaW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEl0IGlz
IGFsc28gYSBTWU5UQVhfRVJSIGlmIHRoZSBjdXN0b20gaGFuZGxlciBVUkwsIGFzIGNyZWF0ZWQg
YnkgcmVtb3ZpbmcKKyAgICAvLyBJdCBpcyBhbHNvIGEgU3ludGF4RXJyb3IgaWYgdGhlIGN1c3Rv
bSBoYW5kbGVyIFVSTCwgYXMgY3JlYXRlZCBieSByZW1vdmluZwogICAgIC8vIHRoZSAiJXMiIHRv
a2VuIGFuZCBwcmVwZW5kaW5nIHRoZSBiYXNlIHVybCwgZG9lcyBub3QgcmVzb2x2ZS4KICAgICBT
dHJpbmcgbmV3VVJMID0gdXJsOwogICAgIG5ld1VSTC5yZW1vdmUoaW5kZXgsIFdURl9BUlJBWV9M
RU5HVEgodG9rZW4pIC0gMSk7CkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKE5hdmlnYXRv
ciYgbmF2aQogICAgIFVSTCBiYXNlVVJMID0gbmF2aWdhdG9yLmZyYW1lKCktPmRvY3VtZW50KCkt
PmJhc2VVUkwoKTsKIAogICAgIGlmICghdmVyaWZ5Q3VzdG9tSGFuZGxlclVSTChiYXNlVVJMLCB1
cmwpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGlmICghdmVyaWZ5UHJvdG9j
b2xIYW5kbGVyU2NoZW1lKHNjaGVtZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNV
UklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsK
IAogICAgIE5hdmlnYXRvckNvbnRlbnRVdGlsczo6ZnJvbShuYXZpZ2F0b3IuZnJhbWUoKS0+cGFn
ZSgpKS0+Y2xpZW50KCktPnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKHNjaGVtZSwgYmFzZVVSTCwg
VVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgbmF2aWdhdG9yLmZyYW1lKCktPmRpc3BsYXlTdHJp
bmdNb2RpZmllZEJ5RW5jb2RpbmcodGl0bGUpKTsKICAgICByZXR1cm4geyB9OwpAQCAtMTQ0LDEw
ICsxNDQsMTAgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6Omlz
UHJvdG9jb2xIYW5kbGVyUmVnaXN0ZXJlZChOYXZpZ2F0b3IKICAgICBVUkwgYmFzZVVSTCA9IG5h
dmlnYXRvci5mcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7CiAKICAgICBpZiAoIXZlcmlm
eUN1c3RvbUhhbmRsZXJVUkwoYmFzZVVSTCwgdXJsKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CiAKICAgICBpZiAoIXZlcmlmeVByb3RvY29sSGFuZGxlclNjaGVtZShzY2hlbWUpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICByZXR1cm4gY3VzdG9tSGFuZGxlcnNT
dGF0ZVN0cmluZyhOYXZpZ2F0b3JDb250ZW50VXRpbHM6OmZyb20obmF2aWdhdG9yLmZyYW1lKCkt
PnBhZ2UoKSktPmNsaWVudCgpLT5pc1Byb3RvY29sSGFuZGxlclJlZ2lzdGVyZWQoc2NoZW1lLCBi
YXNlVVJMLCBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKSk7CiB9CkBAIC0xNjAsMTAgKzE2MCwx
MCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnVucmVnaXN0ZXJQ
cm90b2NvbEhhbmRsZXIoTmF2aWdhdG9yJiBuYQogICAgIFVSTCBiYXNlVVJMID0gbmF2aWdhdG9y
LmZyYW1lKCktPmRvY3VtZW50KCktPmJhc2VVUkwoKTsKIAogICAgIGlmICghdmVyaWZ5Q3VzdG9t
SGFuZGxlclVSTChiYXNlVVJMLCB1cmwpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lO
VEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAog
ICAgIGlmICghdmVyaWZ5UHJvdG9jb2xIYW5kbGVyU2NoZW1lKHNjaGVtZSkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIE5hdmlnYXRvckNvbnRlbnRVdGlsczo6ZnJvbShu
YXZpZ2F0b3IuZnJhbWUoKS0+cGFnZSgpKS0+Y2xpZW50KCktPnVucmVnaXN0ZXJQcm90b2NvbEhh
bmRsZXIoc2NoZW1lLCBiYXNlVVJMLCBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKTsKICAgICBy
ZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9xdW90YS9TdG9y
YWdlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL1N0b3JhZ2VJbmZvLmNw
cAppbmRleCAzNWEwZjJkMTRhNzk0YzgzOWJmM2YzNWM2NTQ2MWE1OTljZWUwYWYyLi45ZmMyOTk0
YmRhODI3MTI1MmJkNzIxMmYwMjQyNzY2NTczNTkyZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3F1b3RhL1N0b3JhZ2VJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3F1b3RhL1N0b3JhZ2VJbmZvLmNwcApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFN0b3Jh
Z2VJbmZvOjpxdWVyeVVzYWdlQW5kUXVvdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0
RXhlY3V0aW9uQ29udAogICAgIFN0b3JhZ2VRdW90YSogc3RvcmFnZVF1b3RhID0gZ2V0U3RvcmFn
ZVF1b3RhKHN0b3JhZ2VUeXBlKTsKICAgICBpZiAoIXN0b3JhZ2VRdW90YSkgewogICAgICAgICAv
LyBVbmtub3duIHN0b3JhZ2UgdHlwZSBpcyByZXF1ZXN0ZWQuCi0gICAgICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnBvc3RUYXNrKFN0b3JhZ2VFcnJvckNhbGxiYWNrOjpDYWxsYmFja1Rhc2s6
OmNyZWF0ZShXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBOT1RfU1VQUE9SVEVEX0VSUikpOworICAg
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhTdG9yYWdlRXJyb3JDYWxsYmFj
azo6Q2FsbGJhY2tUYXNrOjpjcmVhdGUoV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgTm90U3VwcG9y
dGVkRXJyb3IpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBzdG9yYWdlUXVvdGEtPnF1
ZXJ5VXNhZ2VBbmRRdW90YShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXVEZNb3ZlKHN1Y2Nlc3ND
YWxsYmFjayksIFdURk1vdmUoZXJyb3JDYWxsYmFjaykpOwpAQCAtNjksNyArNjksNyBAQCB2b2lk
IFN0b3JhZ2VJbmZvOjpyZXF1ZXN0UXVvdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgaQogICAgIFN0b3JhZ2VRdW90YSogc3RvcmFnZVF1b3RhID0gZ2V0
U3RvcmFnZVF1b3RhKHN0b3JhZ2VUeXBlKTsKICAgICBpZiAoIXN0b3JhZ2VRdW90YSkgewogICAg
ICAgICAvLyBVbmtub3duIHN0b3JhZ2UgdHlwZSBpcyByZXF1ZXN0ZWQuCi0gICAgICAgIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFN0b3JhZ2VFcnJvckNhbGxiYWNrOjpDYWxsYmFj
a1Rhc2s6OmNyZWF0ZShXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBOT1RfU1VQUE9SVEVEX0VSUikp
OworICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhTdG9yYWdlRXJyb3JD
YWxsYmFjazo6Q2FsbGJhY2tUYXNrOjpjcmVhdGUoV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgTm90
U3VwcG9ydGVkRXJyb3IpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBzdG9yYWdlUXVv
dGEtPnJlcXVlc3RRdW90YShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuZXdRdW90YUluQnl0ZXMs
IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FuYWx5c2VyTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FuYWx5c2VyTm9kZS5jcHAKaW5kZXgg
NmFmZjlhNjNkNjNiNDFiYzE4NmYwOTVjZjFkY2ZkZmM1YzYzYTk3ZC4uNTg4NzU1YzQ1MzkwOTMw
MjRhMWE3OWI0ZjViZWUyMGU0MTZlMjYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BbmFseXNlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQW5hbHlzZXJOb2RlLmNwcApAQCAtNzQsMTQgKzc0LDE0IEBAIHZvaWQgQW5h
bHlzZXJOb2RlOjpyZXNldCgpCiBFeGNlcHRpb25Pcjx2b2lkPiBBbmFseXNlck5vZGU6OnNldEZm
dFNpemUodW5zaWduZWQgc2l6ZSkKIHsKICAgICBpZiAoIW1fYW5hbHlzZXIuc2V0RmZ0U2l6ZShz
aXplKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIHJldHVybiB7IH07
CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEFuYWx5c2VyTm9kZTo6c2V0TWluRGVjaWJlbHMoZG91
YmxlIGspCiB7CiAgICAgaWYgKGsgPiBtYXhEZWNpYmVscygpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAKICAgICBtX2FuYWx5c2VyLnNldE1pbkRlY2liZWxzKGspOwogICAg
IHJldHVybiB7IH07CkBAIC05MCw3ICs5MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFuYWx5c2Vy
Tm9kZTo6c2V0TWluRGVjaWJlbHMoZG91YmxlIGspCiBFeGNlcHRpb25Pcjx2b2lkPiBBbmFseXNl
ck5vZGU6OnNldE1heERlY2liZWxzKGRvdWJsZSBrKQogewogICAgIGlmIChrIDwgbWluRGVjaWJl
bHMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgbV9hbmFseXNl
ci5zZXRNYXhEZWNpYmVscyhrKTsKICAgICByZXR1cm4geyB9OwpAQCAtOTksNyArOTksNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBBbmFseXNlck5vZGU6OnNldE1heERlY2liZWxzKGRvdWJsZSBrKQog
RXhjZXB0aW9uT3I8dm9pZD4gQW5hbHlzZXJOb2RlOjpzZXRTbW9vdGhpbmdUaW1lQ29uc3RhbnQo
ZG91YmxlIGspCiB7CiAgICAgaWYgKGsgPCAwIHx8IGsgPiAxKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAKICAgICBtX2FuYWx5c2VyLnNldFNtb290aGluZ1RpbWVDb25zdGFu
dChrKTsKICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyLmNwcAppbmRleCA2NWFhZDM3NjJhNTI1YTAxZTJkNjUxMmY0OTg1YzVk
MTllZjVmZThiLi4wODdlMmI2ODBjZjIyMjU1Nzc0NDcwODE5MDI2MDJhNjBjN2UyZmRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcApAQCAt
MTEzLDcgKzExMyw3IEBAIHZvaWQgQXVkaW9CdWZmZXI6OnJlbGVhc2VNZW1vcnkoKQogRXhjZXB0
aW9uT3I8UmVmPEZsb2F0MzJBcnJheT4+IEF1ZGlvQnVmZmVyOjpnZXRDaGFubmVsRGF0YSh1bnNp
Z25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBtX2NoYW5uZWxz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgYXV0byYgY2hhbm5lbERh
dGEgPSAqbV9jaGFubmVsc1tjaGFubmVsSW5kZXhdOwogICAgIGF1dG8gYXJyYXkgPSBGbG9hdDMy
QXJyYXk6OmNyZWF0ZShjaGFubmVsRGF0YS51bnNoYXJlZEJ1ZmZlcigpLCBjaGFubmVsRGF0YS5i
eXRlT2Zmc2V0KCksIGNoYW5uZWxEYXRhLmxlbmd0aCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChh
cnJheSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAKaW5kZXggMTEzMTlhODVjZTk5MjBmMWNlMmY3YTk4Yjgw
YzNjNzFiMGE3ODBmNi4uMWZhM2QxODc4YmVhOTdlNWViNGYyMmJkNTFlNGIzYzc5NGIyM2FjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmNwcApAQCAtNDU1LDE2ICs0NTUsMTYgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpzdGFydFBsYXlpbmcoQnVmZmVyUGxheWJhY2tNb2Rl
IHBsYXliYWMKICAgICBjb250ZXh0KCkubm9kZVdpbGxCZWdpblBsYXliYWNrKCk7CiAKICAgICBp
ZiAobV9wbGF5YmFja1N0YXRlICE9IFVOU0NIRURVTEVEX1NUQVRFKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUod2hlbikg
fHwgKHdoZW4gPCAwKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGdyYWluT2Zmc2V0KSB8fCAoZ3JhaW5PZmZzZXQgPCAw
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgaWYgKCFz
dGQ6OmlzZmluaXRlKGdyYWluRHVyYXRpb24pIHx8IChncmFpbkR1cmF0aW9uIDwgMCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlmICghYnVmZmVyKCkp
CiAgICAgICAgIHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggNWM1NzVjNjNkZmIwYTg5ZjJiYzQ2ZmQ4ZDdhMmZh
YzViOTVkYWYwMy4uZDk1MDQ3YzkwMzA1MWMwYmMzZDVlNjM4YjI3YjQ1ODU0MjRiMDUzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApA
QCAtNDAyLDcgKzQwMiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxBdWRpb0J1ZmZlcj4+IEF1ZGlvQ29u
dGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lCiB7CiAgICAgYXV0byBh
dWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVy
T2ZGcmFtZXMsIHNhbXBsZVJhdGUpOwogICAgIGlmICghYXVkaW9CdWZmZXIpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICByZXR1cm4gYXVkaW9CdWZmZXIucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIApAQCAtNDEwLDcgKzQxMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxB
dWRpb0J1ZmZlcj4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyJiBhcnJh
eUJ1ZmZlCiB7CiAgICAgYXV0byBhdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9t
QXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci5kYXRhKCksIGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgo
KSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKCkpOwogICAgIGlmICghYXVkaW9CdWZmZXIpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIHJldHVybiBhdWRpb0J1ZmZlci5yZWxlYXNlTm9u
TnVsbCgpOwogfQogCkBAIC00NDAsNyArNDQwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U28K
ICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIAogICAgIGlmIChtZWRpYUVsZW1lbnQuYXVkaW9T
b3VyY2VOb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAog
ICAgIGF1dG8gbm9kZSA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKCp0aGlz
LCBtZWRpYUVsZW1lbnQpOwogCkBAIC00NjAsNyArNDYwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPE1l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVh
bVNvdXIKIAogICAgIGF1dG8gYXVkaW9UcmFja3MgPSBtZWRpYVN0cmVhbS5nZXRBdWRpb1RyYWNr
cygpOwogICAgIGlmIChhdWRpb1RyYWNrcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIE1lZGlhU3RyZWFtVHJhY2sqIHByb3ZpZGVyVHJh
Y2sgPSBudWxscHRyOwogICAgIGZvciAoYXV0byYgdHJhY2sgOiBhdWRpb1RyYWNrcykgewpAQCAt
NDcwLDcgKzQ3MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyCiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKCFwcm92aWRlclRyYWNrKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogCkBAIC01MjAsNyArNTIwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmPFNjcmlwdFByb2Nlc3Nvck5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QKICAgICBjYXNlIDE2Mzg0OgogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgfQog
CiAgICAgLy8gQW4gSW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIGlmIGJ1
ZmZlclNpemUgb3IgbnVtYmVyT2ZJbnB1dENoYW5uZWxzIG9yIG51bWJlck9mT3V0cHV0Q2hhbm5l
bHMKQEAgLTUyOCwxOSArNTI4LDE5IEBAIEV4Y2VwdGlvbk9yPFJlZjxTY3JpcHRQcm9jZXNzb3JO
b2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90CiAgICAgLy8g
SW4gdGhpcyBjYXNlIGFuIEluZGV4U2l6ZUVycm9yIG11c3QgYmUgdGhyb3duLgogCiAgICAgaWYg
KCFudW1iZXJPZklucHV0Q2hhbm5lbHMgJiYgIW51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIFRoaXMgcGFyYW1l
dGVyIFtudW1iZXJPZklucHV0Q2hhbm5lbHNdIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBjaGFu
bmVscyBmb3IgdGhpcyBub2RlJ3MgaW5wdXQuIFZhbHVlcyBvZgogICAgIC8vIHVwIHRvIDMyIG11
c3QgYmUgc3VwcG9ydGVkLiBBIE5vdFN1cHBvcnRlZEVycm9yIG11c3QgYmUgdGhyb3duIGlmIHRo
ZSBudW1iZXIgb2YgY2hhbm5lbHMgaXMgbm90IHN1cHBvcnRlZC4KIAogICAgIGlmIChudW1iZXJP
ZklucHV0Q2hhbm5lbHMgPiBtYXhOdW1iZXJPZkNoYW5uZWxzKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIFRoaXMgcGFyYW1ldGVyIFtudW1iZXJP
Zk91dHB1dENoYW5uZWxzXSBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgZm9yIHRo
aXMgbm9kZSdzIG91dHB1dC4gVmFsdWVzIG9mCiAgICAgLy8gdXAgdG8gMzIgbXVzdCBiZSBzdXBw
b3J0ZWQuIEEgTm90U3VwcG9ydGVkRXJyb3IgbXVzdCBiZSB0aHJvd24gaWYgdGhlIG51bWJlciBv
ZiBjaGFubmVscyBpcyBub3Qgc3VwcG9ydGVkLgogCiAgICAgaWYgKG51bWJlck9mT3V0cHV0Q2hh
bm5lbHMgPiBtYXhOdW1iZXJPZkNoYW5uZWxzKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3Vw
cG9ydGVkRXJyb3IgfTsKIAogICAgIGF1dG8gbm9kZSA9IFNjcmlwdFByb2Nlc3Nvck5vZGU6OmNy
ZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgYnVmZmVyU2l6ZSwg
bnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzKTsKIApAQCAtNjEw
LDcgKzYxMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxDaGFubmVsU3BsaXR0ZXJOb2RlPj4gQXVkaW9D
b250ZXh0OjpjcmVhdGVDaGFubmVsU3BsaXR0ZXIoc2l6ZV90CiAgICAgbGF6eUluaXRpYWxpemUo
KTsKICAgICBhdXRvIG5vZGUgPSBDaGFubmVsU3BsaXR0ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIG1f
ZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG51bWJlck9mT3V0cHV0cyk7CiAgICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgcmV0dXJuIG5v
ZGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIApAQCAtNjIwLDcgKzYyMCw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxDaGFubmVsTWVyZ2VyTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdl
cihzaXplX3QgbnVtCiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICBhdXRvIG5vZGUgPSBDaGFu
bmVsTWVyZ2VyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0
ZSgpLCBudW1iZXJPZklucHV0cyk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAgICAgcmV0dXJuIG5vZGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIApA
QCAtNjQyLDcgKzY0Miw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxQZXJpb2RpY1dhdmU+PiBBdWRpb0Nv
bnRleHQ6OmNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkmIHJlCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAocmVhbC5sZW5ndGgoKSAhPSBpbWFnaW5hcnkubGVu
Z3RoKCkgfHwgKHJlYWwubGVuZ3RoKCkgPiBNYXhQZXJpb2RpY1dhdmVMZW5ndGgpIHx8ICFyZWFs
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgbGF6eUlu
aXRpYWxpemUoKTsKICAgICByZXR1cm4gUGVyaW9kaWNXYXZlOjpjcmVhdGUoc2FtcGxlUmF0ZSgp
LCByZWFsLCBpbWFnaW5hcnkpOwogfQpAQCAtMTA5OSw3ICsxMDk5LDcgQEAgdm9pZCBBdWRpb0Nv
bnRleHQ6OmRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkKIHZvaWQgQXVkaW9Db250ZXh0Ojpz
dXNwZW5kKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCiB7CiAgICAgaWYgKGlz
T2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NUQVRF
X0VSUik7CisgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9pZCBBdWRpb0NvbnRl
eHQ6OnN1c3BlbmQoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHZvaWQgQXVk
aW9Db250ZXh0OjpyZXN1bWUoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsK
ICAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KElO
VkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJy
b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTU3LDcgKzExNTcsNyBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6cmVzdW1lKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2Up
CiB2b2lkIEF1ZGlvQ29udGV4dDo6Y2xvc2UoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJv
bWlzZSkKIHsKICAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgIHByb21pc2Uu
cmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxp
ZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggNzAzODdjZjFlNjMyYmIyNWM3
ZmY5MWFmZDIwZWZlMTU2NmM2ZTliMi4uZjIwMGIwNTBlNzI2MTI3Y2MxZDZmNmI1YTYzNWY2N2Fm
MmI0ZTc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmNwcApAQCAtMTI5LDEzICsxMjksMTMgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXVkaW9Ob2RlOjpj
b25uZWN0KEF1ZGlvTm9kZSYgZGVzdGluYXRpb24sIHVuc2lnbmVkIG91dHB1dEluZGUKIAogICAg
IC8vIFNhbml0eSBjaGVjayBpbnB1dCBhbmQgb3V0cHV0IGluZGljZXMuCiAgICAgaWYgKG91dHB1
dEluZGV4ID49IG51bWJlck9mT3V0cHV0cygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVy
cm9yIH07CiAKICAgICBpZiAoaW5wdXRJbmRleCA+PSBkZXN0aW5hdGlvbi5udW1iZXJPZklucHV0
cygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICBpZiAoY29udGV4
dCgpICE9IGRlc3RpbmF0aW9uLmNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKICAgICBhdXRvKiBpbnB1dCA9IGRlc3RpbmF0aW9uLmlucHV0KGlucHV0SW5kZXgpOwogICAg
IGF1dG8qIG91dHB1dCA9IHRoaXMtPm91dHB1dChvdXRwdXRJbmRleCk7CkBAIC0xNTMsMTAgKzE1
MywxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb05vZGU6OmNvbm5lY3QoQXVkaW9QYXJhbSYg
cGFyYW0sIHVuc2lnbmVkIG91dHB1dEluZGV4KQogICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tl
ciBsb2NrZXIoY29udGV4dCgpKTsKIAogICAgIGlmIChvdXRwdXRJbmRleCA+PSBudW1iZXJPZk91
dHB1dHMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgaWYgKGNv
bnRleHQoKSAhPSBwYXJhbS5jb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
WU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9Owog
CiAgICAgYXV0byogb3V0cHV0ID0gdGhpcy0+b3V0cHV0KG91dHB1dEluZGV4KTsKICAgICBwYXJh
bS5jb25uZWN0KG91dHB1dCk7CkBAIC0xNzEsNyArMTcxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
QXVkaW9Ob2RlOjpkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4KQogCiAgICAgLy8gU2Fu
aXR5IGNoZWNrIGlucHV0IGFuZCBvdXRwdXQgaW5kaWNlcy4KICAgICBpZiAob3V0cHV0SW5kZXgg
Pj0gbnVtYmVyT2ZPdXRwdXRzKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9T
SVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
IAogICAgIGF1dG8qIG91dHB1dCA9IHRoaXMtPm91dHB1dChvdXRwdXRJbmRleCk7CiAgICAgb3V0
cHV0LT5kaXNjb25uZWN0QWxsKCk7CkBAIC0xOTAsNyArMTkwLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gQXVkaW9Ob2RlOjpzZXRDaGFubmVsQ291bnQodW5zaWduZWQgY2hhbm5lbENvdW50KQogICAg
IEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKIAogICAgIGlmICgh
KGNoYW5uZWxDb3VudCA+IDAgJiYgY2hhbm5lbENvdW50IDw9IEF1ZGlvQ29udGV4dDo6bWF4TnVt
YmVyT2ZDaGFubmVscygpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RB
VEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9
OwogCiAgICAgaWYgKG1fY2hhbm5lbENvdW50ID09IGNoYW5uZWxDb3VudCkKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTIyOSw3ICsyMjksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb05vZGU6
OnNldENoYW5uZWxDb3VudE1vZGUoY29uc3QgU3RyaW5nJiBtb2RlKQogICAgIGVsc2UgaWYgKG1v
ZGUgPT0gImV4cGxpY2l0IikKICAgICAgICAgbV9jaGFubmVsQ291bnRNb2RlID0gRXhwbGljaXQ7
CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAg
ICBpZiAobV9jaGFubmVsQ291bnRNb2RlICE9IG9sZE1vZGUpCiAgICAgICAgIHVwZGF0ZUNoYW5u
ZWxzRm9ySW5wdXRzKCk7CkBAIC0yNTksNyArMjU5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXVk
aW9Ob2RlOjpzZXRDaGFubmVsSW50ZXJwcmV0YXRpb24oY29uc3QgU3RyaW5nJiBpbnRlcnByZXRh
dGkKICAgICBlbHNlIGlmIChpbnRlcnByZXRhdGlvbiA9PSAiZGlzY3JldGUiKQogICAgICAgICBt
X2NoYW5uZWxJbnRlcnByZXRhdGlvbiA9IEF1ZGlvQnVzOjpEaXNjcmV0ZTsKICAgICBlbHNlCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIHJldHVybiB7IH07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU2No
ZWR1bGVkU291cmNlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHAKaW5kZXggZGEwNzU2N2ZmMTVkNGNkMjEwYTdlMDc0
MzIxYWQ0OTdmMDhmNGNjYy4uODAzNmZkOWZhOWQ5NzNiMWQ1ZjcwYTY0N2QzMTEwYjAyMzA2NTA2
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVk
dWxlZFNvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmNwcApAQCAtMTMzLDkgKzEzMyw5IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6c3RhcnQoZG91YmxlIHdoZW4pCiAg
ICAgY29udGV4dCgpLm5vZGVXaWxsQmVnaW5QbGF5YmFjaygpOwogCiAgICAgaWYgKG1fcGxheWJh
Y2tTdGF0ZSAhPSBVTlNDSEVEVUxFRF9TVEFURSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogICAgIGlmICghc3RkOjppc2Zpbml0ZSh3aGVuKSB8fCB3aGVuIDwgMCkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgbV9zdGFydFRp
bWUgPSB3aGVuOwogICAgIG1fcGxheWJhY2tTdGF0ZSA9IFNDSEVEVUxFRF9TVEFURTsKQEAgLTE0
OCw5ICsxNDgsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6
OnN0b3AoZG91YmxlIHdoZW4pCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIGlm
IChtX3BsYXliYWNrU3RhdGUgPT0gVU5TQ0hFRFVMRURfU1RBVEUgfHwgbV9lbmRUaW1lICE9IFVu
a25vd25UaW1lKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAg
aWYgKCFzdGQ6OmlzZmluaXRlKHdoZW4pIHx8IHdoZW4gPCAwKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBtX2VuZFRpbWUgPSB3aGVuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAppbmRleCAy
ZDE4YWJhMTFkNTlkOTJlODc3MjI1NmZjMTRmYjFlMmUwNzRkOTdlLi5jMjQwZWI4YThiNzNjYjZj
YTg3ZmQ3N2NiZTJlZjExZDQyMGZiOGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKQEAgLTEyMSw3ICsxMjEsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZXIqIGJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChidWZmZXItPnNhbXBsZVJhdGUoKSAhPSBj
b250ZXh0KCkuc2FtcGxlUmF0ZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NV
UFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVy
cm9yIH07CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVmZmVyLT5udW1iZXJP
ZkNoYW5uZWxzKCk7CiAgICAgc2l6ZV90IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci0+bGVuZ3RoKCk7
CkBAIC0xMzEsNyArMTMxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udm9sdmVyTm9kZTo6c2V0
QnVmZmVyKEF1ZGlvQnVmZmVyKiBidWZmZXIpCiAgICAgYm9vbCBpc0NoYW5uZWxDb3VudEdvb2Qg
PSAobnVtYmVyT2ZDaGFubmVscyA9PSAxIHx8IG51bWJlck9mQ2hhbm5lbHMgPT0gMiB8fCBudW1i
ZXJPZkNoYW5uZWxzID09IDQpICYmIGJ1ZmZlckxlbmd0aDsKIAogICAgIGlmICghaXNDaGFubmVs
Q291bnRHb29kKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAg
ICAvLyBXcmFwIHRoZSBBdWRpb0J1ZmZlciBieSBhbiBBdWRpb0J1cy4gSXQncyBhbiBlZmZpY2ll
bnQgcG9pbnRlciBzZXQgYW5kIG5vdCBhIG1lbWNweSgpLgogICAgIC8vIFRoaXMgbWVtb3J5IGlz
IHNpbXBseSB1c2VkIGluIHRoZSBSZXZlcmIgY29uc3RydWN0b3IgYW5kIG5vIHJlZmVyZW5jZSB0
byBpdCBpcyBrZXB0IGZvciBsYXRlciB1c2UgaW4gdGhhdCBjbGFzcy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmNwcAppbmRleCBiMjU0MmQzMjYzZWQwYThlMTI3MTMxMTg1MDNjNmY2ZTQwN2Nh
YTFlLi4xN2FkODcxNzNlZjVhYWVlMjA2ZjRhYzA3YThlZGI2OWVhODBiNTRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzZXRDaGFubmVsQ291bnQodW5zaWduZWQg
Y2hhbm5lbEMKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKCFtYXhDaGFu
bmVsQ291bnQoKSB8fCBjaGFubmVsQ291bnQgPiBtYXhDaGFubmVsQ291bnQoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgYXV0byBvbGRDaGFubmVsQ291
bnQgPSB0aGlzLT5jaGFubmVsQ291bnQoKTsKICAgICBhdXRvIHJlc3VsdCA9IEF1ZGlvTm9kZTo6
c2V0Q2hhbm5lbENvdW50KGNoYW5uZWxDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAKaW5kZXggN2VhZTgwOTFjNzJmY2RiODYxNTYxM2U0MjZl
MjNiYzUzODgxMzcwYS4uZDQ0YzMyMjg0YTA3OTBhOGUzOWQ3NzkzMDZmMTlmMmYyMTA4N2U3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcApAQCAt
NDQsNyArNDQsNyBAQCBpbmxpbmUgRGVsYXlOb2RlOjpEZWxheU5vZGUoQXVkaW9Db250ZXh0JiBj
b250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RAogRXhjZXB0aW9uT3I8UmVmPERl
bGF5Tm9kZT4+IERlbGF5Tm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgZmxvYXQg
c2FtcGxlUmF0ZSwgZG91YmxlIG1heERlbGF5VGltZSkKIHsKICAgICBpZiAobWF4RGVsYXlUaW1l
IDw9IDAgfHwgbWF4RGVsYXlUaW1lID49IG1heGltdW1BbGxvd2VkRGVsYXlUaW1lKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRGVsYXlOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUsIG1heERlbGF5VGltZSkpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b250ZXh0LmNwcAppbmRleCBiYTVlNDlmYWUyZTlkY2VlMGM3MmY4ZDg1ZTk4ODY0YjA1NjZiNjY4
Li5iNTZmN2YyOWFiZmZiMDM3YmY2ODY0M2JhNjU5ZTc0ZWZjNGE5ODZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5j
cHAKQEAgLTQxLDkgKzQxLDkgQEAgRXhjZXB0aW9uT3I8UmVmPE9mZmxpbmVBdWRpb0NvbnRleHQ+
PiBPZmZsaW5lQXVkaW9Db250ZXh0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW8KIHsKICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIHdvcmtlcnMuCiAgICAgaWYgKCFpczxEb2N1bWVudD4oY29u
dGV4dCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBpZiAo
IW51bWJlck9mQ2hhbm5lbHMgfHwgbnVtYmVyT2ZDaGFubmVscyA+IDEwIHx8ICFudW1iZXJPZkZy
YW1lcyB8fCAhaXNTYW1wbGVSYXRlUmFuZ2VHb29kKHNhbXBsZVJhdGUpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKICAgICBhdXRvIGF1ZGlvQ29udGV4dCA9IGFkb3B0UmVmKCpuZXcgT2Zm
bGluZUF1ZGlvQ29udGV4dChkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksIG51bWJlck9mQ2hh
bm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKSk7CiAgICAgYXVkaW9Db250ZXh0LT5z
dXNwZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gV1RGTW92ZShhdWRpb0NvbnRleHQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcApp
bmRleCBkMzhmOWYzYzZkZjE2N2M3MTA1YzdlNjg0NmI2NTU5YjYwYWQ1MWZhLi5jN2U5MGU4Mzc2
ZWNhZDQxYWI1YWQ5MzZiODM3ZjAwZjBjNDM0MGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IE9zY2lsbGF0b3JOb2RlOjpzZXRUeXBlKFR5cGUgdHlwZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBUeXBlOjpDdXN0b206CiAgICAgICAgIGlmIChtX3R5cGUg
IT0gVHlwZTo6Q3VzdG9tKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
U1RBVEVfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IgfTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5j
cHAKaW5kZXggZjFmMGNhY2U2ZDQ1YWQ5NzQzMGY4ZjA5MmZhY2ZhNDkwYzBlYzI1MC4uNGU4ZDE1
YjZmMGY5NDVlNzBkMDg1N2Q1ZDk2OWJiZDgyODNkMzYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5j
cHAKQEAgLTQxLDEzICs0MSwxMyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8RGF0YWJhc2U+PiBET01X
aW5kb3dXZWJEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKERPTVdpbmRvdyYgd2luZAogICAgICAgICBy
ZXR1cm4gUmVmUHRyPERhdGFiYXNlPiB7IG51bGxwdHIgfTsKICAgICBhdXRvJiBtYW5hZ2VyID0g
RGF0YWJhc2VNYW5hZ2VyOjpzaW5nbGV0b24oKTsKICAgICBpZiAoIW1hbmFnZXIuaXNBdmFpbGFi
bGUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogICAgIGF1dG8qIGRvY3VtZW50
ID0gd2luZG93LmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U2VjdXJpdHlFcnJvciB9OwogICAgIGF1dG8mIHNlY3VyaXR5T3JpZ2luID0gZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCk7CiAgICAgaWYgKCFzZWN1cml0eU9yaWdpbi5jYW5BY2Nlc3NEYXRhYmFz
ZShkb2N1bWVudC0+dG9wT3JpZ2luKCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VD
VVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07
CiAgICAgYXV0byByZXN1bHQgPSBtYW5hZ2VyLm9wZW5EYXRhYmFzZSgqd2luZG93LmRvY3VtZW50
KCksIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBXVEZNb3ZlKGNy
ZWF0aW9uQ2FsbGJhY2spKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBUbyBwcmVzZXJ2ZSBvdXIgcGFzdCBiZWhhdmlvciwgdGhpcyBkaXNjYXJk
cyB0aGUgZXJyb3Igc3RyaW5nIGluIHRoZSBleGNlcHRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4IGY1NWQ2NTRlNTA1ZTg1NzRl
Y2JkOWJhYmFlYzNlYmJkMzVjMzBjZDMuLjc4M2Y5MjFmMTI3YTVhMzRlY2ViNThhYzZkNWFhOGRm
MzM2YjIxZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwCkBAIC0yNTEsNyArMjUxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRGF0YWJhc2U6
Om9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpCiAgICAg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKICAgICBhdXRvJiB0aHJlYWQg
PSBkYXRhYmFzZVRocmVhZCgpOwogICAgIGlmICh0aHJlYWQudGVybWluYXRpb25SZXF1ZXN0ZWQo
JnN5bmNocm9uaXplcikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRF
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsK
IAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlc3VsdDsKICAgICBhdXRvIHRhc2sgPSBzdGQ6Om1h
a2VfdW5pcXVlPERhdGFiYXNlT3BlblRhc2s+KCp0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgc3luY2hyb25pemVyLCByZXN1bHQpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNp
b25Jbk5ld0RhdGFiCiAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOwogCiAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9m
aWxlbmFtZSwgdHJ1ZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRF
X0VSUiwgZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3Fs
aXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgZm9ybWF0
RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpIH07CiAgICAgaWYg
KCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQogICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtICgl
ZCAlcykiLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKIApAQCAtMzcxLDcgKzM3MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERh
dGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0Rh
dGFiCiAgICAgICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkgewogICAgICAg
ICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8g
b3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHN0YXJ0IHRyYW5zYWN0aW9uIiwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgV1RGTW92ZShtZXNzYWdlKSB9Owor
ICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgV1RG
TW92ZShtZXNzYWdlKSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTdHJpbmcgdGFi
bGVOYW1lKHVucXVhbGlmaWVkSW5mb1RhYmxlTmFtZSk7CkBAIC0zODIsMTMgKzM4MiwxMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91
bGRTZXRWZXJzaW9uSW5OZXdEYXRhYgogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2Fn
ZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0
byBjcmVhdGUgJ2luZm8nIHRhYmxlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5z
YWN0aW9uLnJvbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uu
Y2xvc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIsIFdURk1vdmUobWVzc2FnZSkgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIFdURk1vdmUobWVzc2FnZSkgfTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1
cnJlbnRWZXJzaW9uLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9
IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBy
ZWFkIGN1cnJlbnQgdmVyc2lvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3Fs
aXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9u
LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgV1RG
TW92ZShtZXNzYWdlKSB9OworICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciwgV1RGTW92ZShtZXNzYWdlKSB9OwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKQEAgLTM5OSw3ICszOTksNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBz
aG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYgogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVz
c2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxl
ZCB0byB3cml0ZSBjdXJyZW50IHZlcnNpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgICAgICAgICAg
dHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRh
YmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9TVEFURV9FUlIsIFdURk1vdmUobWVzc2FnZSkgfTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBXVEZNb3ZlKG1lc3NhZ2UpIH07
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gbV9l
eHBlY3RlZFZlcnNpb247CiAgICAgICAgICAgICB9CkBAIC00MTcsNyArNDE3LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0
VmVyc2lvbkluTmV3RGF0YWIKICAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUg
ZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGFsd2F5cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9u
IG9mIHRoZSBkYXRhYmFzZSB3ZSBoYXZlLgogICAgIGlmICgoIW1fbmV3IHx8IHNob3VsZFNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlKSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4
cGVjdGVkVmVyc2lvbiAhPSBjdXJyZW50VmVyc2lvbikgewogICAgICAgICBtX3NxbGl0ZURhdGFi
YXNlLmNsb3NlKCk7Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiwgInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCB2ZXJzaW9uIG1pc21hdGNoLCAnIiArIG1fZXhw
ZWN0ZWRWZXJzaW9uICsgIicgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnRWZXJzaW9uIG9mICci
ICsgY3VycmVudFZlcnNpb24gKyAiJyIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRTdGF0ZUVycm9yLCAidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIHZlcnNpb24gbWlzbWF0
Y2gsICciICsgbV9leHBlY3RlZFZlcnNpb24gKyAiJyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVu
dFZlcnNpb24gb2YgJyIgKyBjdXJyZW50VmVyc2lvbiArICInIiB9OwogICAgIH0KIAogICAgIG1f
c3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplci5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
TWFuYWdlci5jcHAKaW5kZXggNmNlMDQyMjdkYjk2ZTI1ZTY1ZWZiY2IwNjQ1MGNlYzgyNWFjZDg5
Ny4uYTE4MTA0YzRjZmVjNGFlMzU4NWI3NGFkNTAyNzA5MWM4NDI5ZDhmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNw
cApAQCAtMTIzLDcgKzEyMyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxEYXRhYmFzZT4+IERhdGFiYXNl
TWFuYWdlcjo6b3BlbkRhdGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byBi
YWNrZW5kID0gdHJ5VG9PcGVuRGF0YWJhc2VCYWNrZW5kKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVk
VmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlLCBGaXJzdFRyeVRvT3BlbkRhdGFiYXNlKTsKIAogICAgIGlmIChiYWNrZW5kLmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGlmIChiYWNrZW5kLmV4Y2VwdGlvbigpLmNvZGUoKSA9PSBRVU9U
QV9FWENFRURFRF9FUlIpIHsKKyAgICAgICAgaWYgKGJhY2tlbmQuZXhjZXB0aW9uKCkuY29kZSgp
ID09IFF1b3RhRXhjZWVkZWRFcnJvcikgewogICAgICAgICAgICAgLy8gTm90aWZ5IHRoZSBjbGll
bnQgdGhhdCB3ZSd2ZSBleGNlZWRlZCB0aGUgZGF0YWJhc2UgcXVvdGEuCiAgICAgICAgICAgICAv
LyBUaGUgY2xpZW50IG1heSB3YW50IHRvIGluY3JlYXNlIHRoZSBxdW90YSwgYW5kIHdlJ2xsIGdp
dmUgaXQKICAgICAgICAgICAgIC8vIG9uZSBtb3JlIHRyeSBhZnRlciBpZiB0aGF0IGlzIHRoZSBj
YXNlLgpAQCAtMTM3LDcgKzEzNyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxEYXRhYmFzZT4+IERhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRpb25DCiAgICAgfQog
CiAgICAgaWYgKGJhY2tlbmQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgaWYgKGJhY2tlbmQu
ZXhjZXB0aW9uKCkuY29kZSgpID09IElOVkFMSURfU1RBVEVfRVJSKQorICAgICAgICBpZiAoYmFj
a2VuZC5leGNlcHRpb24oKS5jb2RlKCkgPT0gSW52YWxpZFN0YXRlRXJyb3IpCiAgICAgICAgICAg
ICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwgYmFja2VuZC5leGNlcHRpb24oKS5tZXNzYWdlKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2dPcGVuRGF0YWJhc2VFcnJvcihjb250ZXh0
LCBuYW1lKTsKQEAgLTE1MiwxMiArMTUyLDEyIEBAIEV4Y2VwdGlvbk9yPFJlZjxEYXRhYmFzZT4+
IERhdGFiYXNlTWFuYWdlcjo6dHJ5VG9PcGVuRGF0YWJhc2VCYWNrZW5kKFNjcmlwdEV4ZWN1CiAg
ICAgaWYgKGlzPERvY3VtZW50Pigmc2NyaXB0Q29udGV4dCkpIHsKICAgICAgICAgYXV0byogcGFn
ZSA9IGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRDb250ZXh0KS5wYWdlKCk7CiAgICAgICAgIGlm
ICghcGFnZSB8fCBwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKQotICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAKICAgICBpZiAoc2NyaXB0Q29udGV4dC5p
c1dvcmtlckdsb2JhbFNjb3BlKCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAKICAgICBhdXRvIGJhY2tlbmRD
b250ZXh0ID0gdGhpcy0+ZGF0YWJhc2VDb250ZXh0KHNjcmlwdENvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
CmluZGV4IGVhZmRhN2UxMGM0ZjJjNTBhYzgwMjYzMjA4Y2RkOWI2ZDQzNzE2NjYuLmExOTFhODEy
YTFhOTY0MWE4ZDRlODgxZGQ3ODQ3NjZjOTJlMWE2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKQEAgLTE0NCwx
MCArMTQ0LDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVh
dGVRdW90YUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpCiAgICAgYXV0byByZXF1aXJlbWVu
dCA9IHVzYWdlICsgc3RkOjptYXg8dW5zaWduZWQgbG9uZyBsb25nPigxLCBlc3RpbWF0ZWRTaXpl
KTsKICAgICBpZiAocmVxdWlyZW1lbnQgPCB1c2FnZSkgewogICAgICAgICAvLyBUaGUgZXN0aW1h
dGVkIHNpemUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxvdzsgZG9uJ3QgYWxsb3cgY3Jl
YXRpb24uCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAgICAgaWYgKHJl
cXVpcmVtZW50ID4gcXVvdGFOb0xvY2sob3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFFVT1RBX0VYQ0VFREVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUXVv
dGFFeGNlZWRlZEVycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTU5LDcgKzE1OSw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJh
c2UoRGF0YWJhc2VDb250ZXh0JiBjb250ZXh0CiAgICAgYXV0byBvcmlnaW4gPSBjb250ZXh0LnNl
Y3VyaXR5T3JpZ2luKCk7CiAKICAgICBpZiAoaXNEZWxldGluZ0RhdGFiYXNlT3JPcmlnaW5Gb3Io
b3JpZ2luLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgcmVj
b3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogCkBAIC0xODUsNyArMTg1LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShE
YXRhYmFzZUNvbnRleHQmIGNvbnRleHQKICAgICAvLyBhZ2Fpbi4gSGVuY2UsIHdlIGRvbid0IGNh
bGwgZG9uZUNyZWF0aW5nRGF0YWJhc2UoKSB5ZXQgaW4gdGhhdCBjYXNlLgogCiAgICAgYXV0byBl
eGNlcHRpb24gPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIGlmIChleGNlcHRpb24u
Y29kZSgpICE9IFFVT1RBX0VYQ0VFREVEX0VSUikKKyAgICBpZiAoZXhjZXB0aW9uLmNvZGUoKSAh
PSBRdW90YUV4Y2VlZGVkRXJyb3IpCiAgICAgICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKG9yaWdp
biwgbmFtZSk7CiAKICAgICByZXR1cm4gV1RGTW92ZShleGNlcHRpb24pOwpAQCAtMjE2LDcgKzIx
Niw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxp
c2hEYXRhYmFzZShEYXRhYmFzZUNvbnRleHQmIGNvCiAgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBhdXRvIGV4Y2VwdGlvbiA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJU
KGV4Y2VwdGlvbi5jb2RlKCkgPT0gUVVPVEFfRVhDRUVERURfRVJSKTsKKyAgICBBU1NFUlQoZXhj
ZXB0aW9uLmNvZGUoKSA9PSBRdW90YUV4Y2VlZGVkRXJyb3IpOwogICAgIGRvbmVDcmVhdGluZ0Rh
dGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAKICAgICByZXR1cm4gV1RGTW92ZShleGNlcHRpb24pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFcnJvci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFcnJvci5oCmluZGV4IDRl
Mjc2Y2E3OGZjOTVkNzU5Y2FkMzBkZWFkMDdhZDZhMTc4ZTczMjYuLmI3ZmFhZmMxOTllMzQ0NGIx
ZWQyNWQ3ZGFhNzA1YWFkYzA2YTcwOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTEVycm9yLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICBW
RVJTSU9OX0VSUiA9IDIsCiAgICAgICAgIFRPT19MQVJHRV9FUlIgPSAzLAogICAgICAgICBRVU9U
QV9FUlIgPSA0LAotICAgICAgICBTWU5UQVhfRVJSID0gNSwKKyAgICAgICAgU3ludGF4RXJyb3Ig
PSA1LAogICAgICAgICBDT05TVFJBSU5UX0VSUiA9IDYsCiAgICAgICAgIFRJTUVPVVRfRVJSID0g
NwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFJlc3VsdFNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFJlc3VsdFNldC5jcHAKaW5kZXggNmNiYTJlZWZjZWQ4YmRlODYyMGY0YThiMmIwYTJhOGMxNzM1
M2Q0Yi4uMjE2NTc2ZWQ4MDcyZWYyMTUwNDA1M2RkMTQwOTlhYWQxZjViYTMxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmNwcApA
QCAtMzksOSArMzksOSBAQCBTUUxSZXN1bHRTZXQ6OlNRTFJlc3VsdFNldCgpCiBFeGNlcHRpb25P
cjxpbnQ2NF90PiBTUUxSZXN1bHRTZXQ6Omluc2VydElkKCkgY29uc3QKIHsKICAgICAvLyA0LjEx
LjQgLSBSZXR1cm4gdGhlIGlkIG9mIHRoZSBsYXN0IHJvdyBpbnNlcnRlZCBhcyBhIHJlc3VsdCBv
ZiB0aGUgcXVlcnkKLSAgICAvLyBJZiB0aGUgcXVlcnkgZGlkbid0IHJlc3VsdCBpbiBhbnkgcm93
cyBiZWluZyBhZGRlZCwgcmFpc2UgYW4gSU5WQUxJRF9BQ0NFU1NfRVJSIGV4Y2VwdGlvbgorICAg
IC8vIElmIHRoZSBxdWVyeSBkaWRuJ3QgcmVzdWx0IGluIGFueSByb3dzIGJlaW5nIGFkZGVkLCBy
YWlzZSBhbiBJbnZhbGlkQWNjZXNzRXJyb3IgZXhjZXB0aW9uCiAgICAgaWYgKCFtX2luc2VydElk
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICByZXR1cm4g
bV9pbnNlcnRJZC52YWx1ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcAppbmRleCA2NWFhMDBk
NTYyNGVmNDJlZmQ0ODczZGJiYTlkYTY5M2NiYzkyZDY5Li40OTViYjE4YjM5NjZjNmFhNGZmNGIz
NWYzOTcxMmM5YWZiNmE3NjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAKQEAgLTQ0LDcgKzQ0LDcg
QEAgdW5zaWduZWQgU1FMUmVzdWx0U2V0Um93TGlzdDo6bGVuZ3RoKCkgY29uc3QKIEV4Y2VwdGlv
bk9yPFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFNRTFZhbHVlPj4+IFNRTFJlc3Vs
dFNldFJvd0xpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGluZGV4
ID49IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICBW
ZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTUUxWYWx1ZT4+IHJlc3VsdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3Bw
CmluZGV4IGUyNDNmOGUyN2NlMjFkODE2OGIzMTVkYzhkNzIwYTEyM2ZmOWY3NmMuLmMxZWFlMWE2
OGQ0ZTYwZDdjMDJhMWUwOTcyMzA4ZTViYTBiZTQxZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAKQEAgLTEyMSw3ICsxMjEs
NyBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0lOVEVSUlVQVCkKICAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBz
dGF0ZW1lbnQiLCByZXN1bHQsICJpbnRlcnJ1cHRlZCIpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgImNv
dWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCIsIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlN5
bnRheEVycm9yLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IiwgcmVzdWx0LCBkYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEy
OSw3ICsxMjksNyBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSYgZGIpCiAg
ICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhleSBtaWdodCBiZSB0cnlpbmcgdG8gZG8gc29t
ZXRoaW5nIGZpc2h5IG9yIG1hbGljaW91cwogICAgIGlmIChzdGF0ZW1lbnQuYmluZFBhcmFtZXRl
ckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiQmluZCBwYXJhbWV0ZXIgY291bnQgZG9lc24ndCBtYXRjaCBudW1iZXIgb2YgcXVlc3Rpb24g
bWFya3MiKTsKLSAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZ
TlRBWF9FUlIsICJudW1iZXIgb2YgJz8ncyBpbiBzdGF0ZW1lbnQgc3RyaW5nIGRvZXMgbm90IG1h
dGNoIGFyZ3VtZW50IGNvdW50Iik7CisgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRl
KFNRTEVycm9yOjpTeW50YXhFcnJvciwgIm51bWJlciBvZiAnPydzIGluIHN0YXRlbWVudCBzdHJp
bmcgZG9lcyBub3QgbWF0Y2ggYXJndW1lbnQgY291bnQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uLmNwcAppbmRleCBmODk5NDMwZGNiNjUxYzg0MjNlZDk0ZTBiMTkyNzJh
MjNkZThjZjJiLi5mMDIxNjIwNWFjYjIxMzhlZDAxMDJiM2Q3YmZmZTBhMjNkNWQzM2E0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uLmNwcApAQCAtNzUsNyArNzUsNyBAQCBTUUxUcmFuc2FjdGlvbjo6flNRTFRyYW5zYWN0aW9u
KCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKGNvbnN0IFN0
cmluZyYgc3FsU3RhdGVtZW50LCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTUUxWYWx1ZT4+JiYgYXJn
dW1lbnRzLCBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+JiYgY2FsbGJhY2ssIFJlZlB0cjxT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiYmIGNhbGxiYWNrRXJyb3IpCiB7CiAgICAgaWYgKCFt
X2V4ZWN1dGVTcWxBbGxvd2VkIHx8ICFtX2RhdGFiYXNlLT5vcGVuZWQoKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgaW50IHBlcm1pc3Npb25zID0gRGF0
YWJhc2VBdXRob3JpemVyOjpSZWFkV3JpdGVNYXNrOwogICAgIGlmICghbV9kYXRhYmFzZS0+ZGF0
YWJhc2VDb250ZXh0KCkuYWxsb3dEYXRhYmFzZUFjY2VzcygpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCA5NzcwMDBhNWQ2OGJmMThh
MmRmOWRlY2Y1NWE2Y2YzNzM1ZWYwYWY2Li5mYmY0OTZkYTU4NDllZjNkN2Q1ZjA0MjE2YTlmMTZi
MTQ1ZTYwZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0LmNwcApAQCAtMTc3LDcgKzE3Nyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxXZWJTb2NrZXQ+
PiBXZWJTb2NrZXQ6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjCiBF
eGNlcHRpb25PcjxSZWY8V2ViU29ja2V0Pj4gV2ViU29ja2V0OjpjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwcm90b2NvbHMpCiB7CiAgICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5
bnRheEVycm9yIH07CiAKICAgICBhdXRvIHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgV2ViU29ja2V0
KGNvbnRleHQpKTsKICAgICBzb2NrZXQtPnN1c3BlbmRJZk5lZWRlZCgpOwpAQCAtMjI3LDE4ICsy
MjcsMTggQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHIKICAgICBpZiAoIW1fdXJsLmlzVmFsaWQo
KSkgewogICAgICAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpT
LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiSW52YWxpZCB1cmwgZm9yIFdlYlNvY2tldCAiICsgbV91
cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkpOwogICAgICAgICBtX3N0YXRlID0g
Q0xPU0VEOwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICB9CiAKICAgICBpZiAoIW1f
dXJsLnByb3RvY29sSXMoIndzIikgJiYgIW1fdXJsLnByb3RvY29sSXMoIndzcyIpKSB7CiAgICAg
ICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsICJXcm9uZyB1cmwgc2NoZW1lIGZvciBXZWJTb2NrZXQgIiArIG1fdXJsLnN0
cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpKTsKICAgICAgICAgbV9zdGF0ZSA9IENMT1NF
RDsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgfQogICAgIGlmIChtX3VybC5oYXNG
cmFnbWVudElkZW50aWZpZXIoKSkgewogICAgICAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiVVJMIGhhcyBmcmFnbWVu
dCBjb21wb25lbnQgIiArIG1fdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpKTsK
ICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZ
TlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAg
ICAgfQogCiAgICAgQVNTRVJUKGNvbnRleHQuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwpAQCAt
MjU0LDcgKzI1NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVjdChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByCiAgICAgICAgICAgICBtZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJXZWJTb2NrZXQgd2l0aG91dCBwb3J0IGJsb2NrZWQiKTsKICAg
ICAgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgbWVzc2FnZSk7CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogQ29udmVy
dCB0aGlzIHRvIGNoZWNrIHRoZSBpc29sYXRlZCB3b3JsZCdzIENvbnRlbnQgU2VjdXJpdHkgUG9s
aWN5IG9uY2Ugd2Via2l0Lm9yZy9iLzEwNDUyMCBpcyBzb2x2ZWQuCkBAIC0yNjIsNyArMjYyLDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHIKICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKIAog
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdGhyb3dpbmcgYW4gZXhjZXB0aW9uPwot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIHBy
b3ZpZGVyID0gY29udGV4dC5zb2NrZXRQcm92aWRlcigpKQpAQCAtMjc2LDEzICsyNzYsMTMgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcHIKICAgICAvLyBpbXBvc2VzIGEgc3RyaWN0ZXIgcnVsZTog
InRoZSBlbGVtZW50cyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBh
cyBkZWZpbmVkIGluIFtSRkMyNjE2XSwKICAgICAvLyBhbmQgTVVTVCBhbGwgYmUgdW5pcXVlIHN0
cmluZ3MuIgogICAgIC8vCi0gICAgLy8gSGVyZSwgd2UgdGhyb3cgU1lOVEFYX0VSUiBpZiB0aGUg
Z2l2ZW4gcHJvdG9jb2xzIGRvIG5vdCBtZWV0IHRoZSBsYXR0ZXIgY3JpdGVyaWEuIFRoaXMgYmVo
YXZpb3IgZG9lcyBub3QKKyAgICAvLyBIZXJlLCB3ZSB0aHJvdyBTeW50YXhFcnJvciBpZiB0aGUg
Z2l2ZW4gcHJvdG9jb2xzIGRvIG5vdCBtZWV0IHRoZSBsYXR0ZXIgY3JpdGVyaWEuIFRoaXMgYmVo
YXZpb3IgZG9lcyBub3QKICAgICAvLyBjb21wbHkgd2l0aCBXZWJTb2NrZXQgQVBJIHNwZWNpZmlj
YXRpb24sIGJ1dCBpdCBzZWVtcyB0byBiZSB0aGUgb25seSByZWFzb25hYmxlIHdheSB0byBoYW5k
bGUgdGhpcyBjb25mbGljdC4KICAgICBmb3IgKGF1dG8mIHByb3RvY29sIDogcHJvdG9jb2xzKSB7
CiAgICAgICAgIGlmICghaXNWYWxpZFByb3RvY29sU3RyaW5nKHByb3RvY29sKSkgewogICAgICAg
ICAgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgIldyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJyIgKyBlbmNvZGVQ
cm90b2NvbFN0cmluZyhwcm90b2NvbCkgKyAiJyIpOwogICAgICAgICAgICAgbV9zdGF0ZSA9IENM
T1NFRDsKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICAgICAgfQogICAg
IH0KICAgICBIYXNoU2V0PFN0cmluZz4gdmlzaXRlZDsKQEAgLTI5MCw3ICsyOTAsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwcgogICAgICAgICBpZiAoIXZpc2l0ZWQuYWRkKHByb3RvY29sKS5p
c05ld0VudHJ5KSB7CiAgICAgICAgICAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViU29ja2V0IHByb3RvY29scyBj
b250YWluIGR1cGxpY2F0ZXM6ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpICsg
IiciKTsKICAgICAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMzOSw3ICszMzksNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBXZWJTb2NrZXQ6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0ICVwIHNlbmQoKSBTZW5kaW5nIFN0cmluZyAn
JXMnIiwgdGhpcywgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9zdGF0ZSA9PSBD
T05ORUNUSU5HKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAg
Ly8gTm8gZXhjZXB0aW9uIGlzIHJhaXNlZCBpZiB0aGUgY29ubmVjdGlvbiB3YXMgb25jZSBlc3Rh
Ymxpc2hlZCBidXQgaGFzIHN1YnNlcXVlbnRseSBiZWVuIGNsb3NlZC4KICAgICBpZiAobV9zdGF0
ZSA9PSBDTE9TSU5HIHx8IG1fc3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIHNpemVfdCBwYXls
b2FkU2l6ZSA9IG1lc3NhZ2UudXRmOCgpLmxlbmd0aCgpOwpAQCAtMzU2LDcgKzM1Niw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6c2VuZChBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSkK
IHsKICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldCAlcCBzZW5kKCkgU2VuZGluZyBBcnJheUJ1
ZmZlciAlcCIsIHRoaXMsICZiaW5hcnlEYXRhKTsKICAgICBpZiAobV9zdGF0ZSA9PSBDT05ORUNU
SU5HKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgaWYgKG1f
c3RhdGUgPT0gQ0xPU0lORyB8fCBtX3N0YXRlID09IENMT1NFRCkgewogICAgICAgICB1bnNpZ25l
ZCBwYXlsb2FkU2l6ZSA9IGJpbmFyeURhdGEuYnl0ZUxlbmd0aCgpOwogICAgICAgICBtX2J1ZmZl
cmVkQW1vdW50QWZ0ZXJDbG9zZSA9IHNhdHVyYXRlQWRkKG1fYnVmZmVyZWRBbW91bnRBZnRlckNs
b3NlLCBwYXlsb2FkU2l6ZSk7CkBAIC0zNzMsNyArMzczLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
V2ViU29ja2V0OjpzZW5kKEFycmF5QnVmZmVyVmlldyYgYXJyYXlCdWZmZXJWaWV3KQogICAgIExP
RyhOZXR3b3JrLCAiV2ViU29ja2V0ICVwIHNlbmQoKSBTZW5kaW5nIEFycmF5QnVmZmVyVmlldyAl
cCIsIHRoaXMsICZhcnJheUJ1ZmZlclZpZXcpOwogCiAgICAgaWYgKG1fc3RhdGUgPT0gQ09OTkVD
VElORykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIGlmICht
X3N0YXRlID09IENMT1NJTkcgfHwgbV9zdGF0ZSA9PSBDTE9TRUQpIHsKICAgICAgICAgdW5zaWdu
ZWQgcGF5bG9hZFNpemUgPSBhcnJheUJ1ZmZlclZpZXcuYnl0ZUxlbmd0aCgpOwogICAgICAgICBt
X2J1ZmZlcmVkQW1vdW50QWZ0ZXJDbG9zZSA9IHNhdHVyYXRlQWRkKG1fYnVmZmVyZWRBbW91bnRB
ZnRlckNsb3NlLCBwYXlsb2FkU2l6ZSk7CkBAIC0zODksNyArMzg5LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gV2ViU29ja2V0OjpzZW5kKEJsb2ImIGJpbmFyeURhdGEpCiB7CiAgICAgTE9HKE5ldHdv
cmssICJXZWJTb2NrZXQgJXAgc2VuZCgpIFNlbmRpbmcgQmxvYiAnJXMnIiwgdGhpcywgYmluYXJ5
RGF0YS51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKS51dGY4KCkuZGF0YSgp
KTsKICAgICBpZiAobV9zdGF0ZSA9PSBDT05ORUNUSU5HKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRTdGF0ZUVycm9yIH07CiAgICAgaWYgKG1fc3RhdGUgPT0gQ0xPU0lORyB8fCBtX3N0YXRl
ID09IENMT1NFRCkgewogICAgICAgICB1bnNpZ25lZCBwYXlsb2FkU2l6ZSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihiaW5hcnlEYXRhLnNpemUoKSk7CiAgICAgICAgIG1fYnVmZmVyZWRBbW91bnRB
ZnRlckNsb3NlID0gc2F0dXJhdGVBZGQobV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2UsIHBheWxv
YWRTaXplKTsKQEAgLTQwOSwxMSArNDA5LDExIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tl
dDo6Y2xvc2Uoc3RkOjpvcHRpb25hbDx1bnNpZ25lZCBzaG9ydD4gb3B0aW9uYWxDb2RlLCBjCiAg
ICAgZWxzZSB7CiAgICAgICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0ICVwIGNsb3NlKCkgY29k
ZT0lZCByZWFzb249JyVzJyIsIHRoaXMsIGNvZGUsIHJlYXNvbi51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgaWYgKCEoY29kZSA9PSBXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZU5vcm1h
bENsb3N1cmUgfHwgKFdlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlTWluaW11bVVzZXJE
ZWZpbmVkIDw9IGNvZGUgJiYgY29kZSA8PSBXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29k
ZU1heGltdW1Vc2VyRGVmaW5lZCkpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRBY2Nlc3NFcnJvciB9OwogICAgICAgICBDU3RyaW5nIHV0ZjggPSByZWFzb24udXRmOChTdHJp
Y3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQpOwogICAgICAg
ICBpZiAodXRmOC5sZW5ndGgoKSA+IG1heFJlYXNvblNpemVJbkJ5dGVzKSB7CiAgICAgICAgICAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBBU0NJSUxpdGVyYWwoIldlYlNvY2tldCBjbG9z
ZSBtZXNzYWdlIGlzIHRvbyBsb25nLiIpKTsKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTWU5UQVhfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJy
b3IgfTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDgzLDcgKzQ4Myw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFdlYlNvY2tldDo6c2V0QmluYXJ5VHlwZShjb25zdCBTdHJpbmcmIGJpbmFyeVR5cGUp
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICInIiArIGJpbmFyeVR5cGUgKyAiJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgYmluYXJ5
VHlwZTsgYmluYXJ5VHlwZSByZW1haW5zIHVuY2hhbmdlZC4iKTsKLSAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU1lOVEFYX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogfQogCiBFdmVudFRhcmdldEludGVyZmFjZSBXZWJTb2NrZXQ6OmV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCmluZGV4IGM2MGIwNWE3ZjUwOTlkZTVjNjNhNzg5NWI4
ZDMwMjQzM2U4Mzc1YmQuLjExMjdmYTRkMzgzYWMyOGU5ZWYyYjUwZWRmYjI1MjMzZDExOWE0OWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVt
ZW50SW50ZXJmYWNlLmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50
SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogICAgIEVsZW1lbnQq
IHdyYXBwZWRFbGVtZW50ID0gSlNFbGVtZW50Ojp0b1dyYXBwZWQodm0sIHJldHVybmVkRWxlbWVu
dCk7CiAgICAgaWYgKCF3cmFwcGVkRWxlbWVudCB8fCB3cmFwcGVkRWxlbWVudCAhPSAmZWxlbWVu
dCkgewogICAgICAgICBlbGVtZW50LnNldElzRmFpbGVkQ3VzdG9tRWxlbWVudCgqdGhpcyk7Ci0g
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBJ
TlZBTElEX1NUQVRFX0VSUiwgIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yIGZhaWxlZCB0byB1
cGdyYWRlIGFuIGVsZW1lbnQiKSk7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgY3Jl
YXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBJbnZhbGlkU3RhdGVFcnJvciwgIkN1c3RvbSBlbGVtZW50
IGNvbnN0cnVjdG9yIGZhaWxlZCB0byB1cGdyYWRlIGFuIGVsZW1lbnQiKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgZWxlbWVudC5zZXRJc0RlZmluZWRDdXN0b21FbGVtZW50KCp0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmNwcAppbmRleCBmOTNjZDUyOGQ1OTY4NTk5OTI0MjYxNmY1ZWUyZTQwMDg5MGRl
OTU0Li45ZGFlNjgzOGM3NDIwMzQ3MTM4Yzc0MDhlOThlMDA1YzY3NTE4YzlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwCkBAIC00OSw3ICs0OSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxKU0N1c3RvbVhQYXRoTlNSZXNv
bHZlcj4+IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUoRXhlY1N0CiAKICAgICBhdXRv
KiByZXNvbHZlck9iamVjdCA9IHZhbHVlLmdldE9iamVjdCgpOwogICAgIGlmICghcmVzb2x2ZXJP
YmplY3QpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUWVBFX01JU01BVENIX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZU1pc21hdGNoRXJyb3IgfTsKIAogICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyKHN0YXRlLnZtKCksIHJl
c29sdmVyT2JqZWN0LCBhc0pTRE9NV2luZG93KHN0YXRlLnZtRW50cnlHbG9iYWxPYmplY3QoKSkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRp
b25IYW5kbGluZy5jcHAKaW5kZXggZDllZTNhYjE5Y2U3NjcwZDc5MjZkOGI5NmU4NjljYjgxYWNm
ODJkOS4uNmU2NDUyYTM4NjE0MzNiZjYxNTRhYWNkYTk4NWZiMmExYTgxZTY0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5j
cHAKQEAgLTIxMCwyNyArMjEwLDI3IEBAIHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtCiB2b2lkIHRo
cm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKQogewogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NV
UFBPUlRFRF9FUlIpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVE
T01FeGNlcHRpb24oJnN0YXRlLCBOb3RTdXBwb3J0ZWRFcnJvcikpOwogfQogCiB2b2lkIHRocm93
Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBP
UlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBz
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTm90U3VwcG9ydGVkRXJyb3IsICZtZXNz
YWdlU3RyaW5nKSk7CiB9CiAKIHZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
CiB7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBTdHJpbmcgbWVzc2FnZVN0
cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVE
T01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0
YXRlLCBJbnZhbGlkU3RhdGVFcnJvciwgJm1lc3NhZ2VTdHJpbmcpKTsKIH0KIAogdm9pZCB0aHJv
d1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1lc3NhZ2UpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTZWN1cml0eUVycm9yLCBt
ZXNzYWdlKSk7CiB9CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVu
dW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVu
c2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQpAQCAtMzQxLDI1ICszNDEsMjUgQEAgSlNDOjpFbmNvZGVk
SlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdAogdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKIHsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlv
bigmc3RhdGUsIFNZTlRBWF9FUlIpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTeW50YXhFcnJvcikpOwogfQogCiB2b2lkIHRo
cm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKQogewogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9O
RV9FUlIpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNl
cHRpb24oJnN0YXRlLCBEYXRhQ2xvbmVFcnJvcikpOwogfQogCiB2b2lkIHRocm93SW5kZXhTaXpl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQogewog
ICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKKyAg
ICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRl
LCBJbmRleFNpemVFcnJvcikpOwogfQogCiB2b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQogewogICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpKTsKKyAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBUeXBl
TWlzbWF0Y2hFcnJvcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHAKaW5kZXgg
ODgyOTgwNDIyNzBkZmY1MjZmZDUwMTU1NmM0ZDRjNjNhMmYwZWFjZS4uOGU0OWE3MjE1YTcyNzM0
ZTliMDk5MGY1Y2I2YmEwY2I3OWY4NjBhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Qcm9taXNlRGVmZXJyZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVycmVkLmNwcApAQCAtMTk1LDcgKzE5NSw3IEBAIHZv
aWQgZnVsZmlsbFByb21pc2VXaXRoSlNPTihSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Us
IGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSBwYXJzZUFz
SlNPTihwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBkYXRhKTsKICAgICBp
ZiAoIXZhbHVlKQotICAgICAgICBwcm9taXNlLT5yZWplY3QoU1lOVEFYX0VSUik7CisgICAgICAg
IHByb21pc2UtPnJlamVjdChTeW50YXhFcnJvcik7CiAgICAgZWxzZQogICAgICAgICBwcm9taXNl
LT5yZXNvbHZlPElETEFueT4odmFsdWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCmluZGV4IDg1NGRkY2E5OTI1MmZjZTI3
N2E0YjhmYWI3OTAzMDlkMTFjOTk1NDkuLmVkNjYzOGY3MGE2NGMzNmVjNzg1OGI5NTdiNzBhNmEy
NDdmNDE5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxl
Q3J5cHRvQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRs
ZUNyeXB0b0N1c3RvbS5jcHAKQEAgLTQxMiwxNiArNDEyLDE2IEBAIHN0YXRpYyBDcnlwdG9LZXlV
c2FnZUJpdG1hcCBjcnlwdG9LZXlVc2FnZUJpdG1hcEZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTCiBzdGF0aWMgdm9pZCByZWplY3RXaXRoRXhjZXB0aW9uKFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcGFzc2VkUHJvbWlzZSwgRXhjZXB0aW9uQ29kZSBlYykKIHsKICAgICBzd2l0Y2ggKGVj
KSB7Ci0gICAgY2FzZSBOT1RfU1VQUE9SVEVEX0VSUjoKKyAgICBjYXNlIE5vdFN1cHBvcnRlZEVy
cm9yOgogICAgICAgICBwYXNzZWRQcm9taXNlLT5yZWplY3QoZWMsIEFTQ0lJTGl0ZXJhbCgiVGhl
IGFsZ29yaXRobSBpcyBub3Qgc3VwcG9ydGVkIikpOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBTWU5UQVhfRVJSOgorICAgIGNhc2UgU3ludGF4RXJyb3I6CiAgICAgICAgIHBhc3NlZFByb21p
c2UtPnJlamVjdChlYywgQVNDSUlMaXRlcmFsKCJBIHJlcXVpcmVkIHBhcmFtZXRlciB3YXMgbWlz
c2luZyBvciBvdXQtb2YtcmFuZ2UiKSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIElOVkFM
SURfU1RBVEVfRVJSOgorICAgIGNhc2UgSW52YWxpZFN0YXRlRXJyb3I6CiAgICAgICAgIHBhc3Nl
ZFByb21pc2UtPnJlamVjdChlYywgQVNDSUlMaXRlcmFsKCJUaGUgcmVxdWVzdGVkIG9wZXJhdGlv
biBpcyBub3QgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcm92aWRlZCBrZXki
KSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIElOVkFMSURfQUNDRVNTX0VSUjoKKyAgICBj
YXNlIEludmFsaWRBY2Nlc3NFcnJvcjoKICAgICAgICAgcGFzc2VkUHJvbWlzZS0+cmVqZWN0KGVj
LCBBU0NJSUxpdGVyYWwoIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIG5vdCB2YWxpZCBmb3Ig
dGhlIHByb3ZpZGVkIGtleSIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVW5rbm93bkVy
cm9yOgpAQCAtNTQwLDEyICs1NDAsMTIgQEAgc3RhdGljIHZvaWQganNTdWJ0bGVDcnlwdG9GdW5j
dGlvbkVuY3J5cHRQcm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUsIFJlZjxEZWZlcnJlZFAKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHBhcmFtcy0+aWRl
bnRpZmllciAhPSBrZXktPmFsZ29yaXRobUlkZW50aWZpZXIoKSkgewotICAgICAgICBwcm9taXNl
LT5yZWplY3QoSU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vz
bid0IG1hdGNoIEFsZ29yaXRobUlkZW50aWZpZXIiKSk7CisgICAgICAgIHByb21pc2UtPnJlamVj
dChJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3QgbWF0
Y2ggQWxnb3JpdGhtSWRlbnRpZmllciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmICgha2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSkgewotICAgICAgICBwcm9t
aXNlLT5yZWplY3QoSU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBk
b2Vzbid0IHN1cHBvcnQgZW5jcnlwdGlvbiIpKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElu
dmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9lc24ndCBzdXBwb3J0
IGVuY3J5cHRpb24iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU4NywxMiArNTg3
LDEyIEBAIHN0YXRpYyB2b2lkIGpzU3VidGxlQ3J5cHRvRnVuY3Rpb25EZWNyeXB0UHJvbWlzZShF
eGVjU3RhdGUmIHN0YXRlLCBSZWY8RGVmZXJyZWRQCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChwYXJhbXMtPmlkZW50aWZpZXIgIT0ga2V5LT5hbGdv
cml0aG1JZGVudGlmaWVyKCkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUND
RVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9lc24ndCBtYXRjaCBBbGdvcml0aG1J
ZGVudGlmaWVyIikpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9y
LCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IG1hdGNoIEFsZ29yaXRobUlkZW50aWZp
ZXIiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIWtleS0+YWxsb3dzKENy
eXB0b0tleVVzYWdlRGVjcnlwdCkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURf
QUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9lc24ndCBzdXBwb3J0IGRlY3J5
cHRpb24iKSk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNjZXNzRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9ydCBkZWNyeXB0aW9uIikpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MzQsMTIgKzYzNCwxMiBAQCBzdGF0aWMgdm9pZCBq
c1N1YnRsZUNyeXB0b0Z1bmN0aW9uU2lnblByb21pc2UoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERl
ZmVycmVkUHJvbQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAg
ICBpZiAocGFyYW1zLT5pZGVudGlmaWVyICE9IGtleS0+YWxnb3JpdGhtSWRlbnRpZmllcigpKSB7
Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJh
bCgiQ3J5cHRvS2V5IGRvZXNuJ3QgbWF0Y2ggQWxnb3JpdGhtSWRlbnRpZmllciIpKTsKKyAgICAg
ICAgcHJvbWlzZS0+cmVqZWN0KEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJDcnlw
dG9LZXkgZG9lc24ndCBtYXRjaCBBbGdvcml0aG1JZGVudGlmaWVyIikpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVNpZ24pKSB7
Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJh
bCgiQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9ydCBzaWduaW5nIikpOworICAgICAgICBwcm9taXNl
LT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vz
bid0IHN1cHBvcnQgc2lnbmluZyIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjg0
LDEyICs2ODQsMTIgQEAgc3RhdGljIHZvaWQganNTdWJ0bGVDcnlwdG9GdW5jdGlvblZlcmlmeVBy
b21pc2UoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmVkUHIKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHBhcmFtcy0+aWRlbnRpZmllciAhPSBr
ZXktPmFsZ29yaXRobUlkZW50aWZpZXIoKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3QoSU5W
QUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IG1hdGNoIEFs
Z29yaXRobUlkZW50aWZpZXIiKSk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNj
ZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3QgbWF0Y2ggQWxnb3JpdGht
SWRlbnRpZmllciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICgha2V5LT5h
bGxvd3MoQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChJ
TlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9y
dCB2ZXJpZmljYXRpb24iKSk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNjZXNz
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9ydCB2ZXJpZmljYXRp
b24iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTc3NCwxNCArNzc0LDE0IEBAIHN0
YXRpYyB2b2lkIGpzU3VidGxlQ3J5cHRvRnVuY3Rpb25HZW5lcmF0ZUtleVByb21pc2UoRXhlY1N0
YXRlJiBzdGF0ZSwgUmVmPERlZmVyCiAgICAgICAgIFdURjo6c3dpdGNoT24oa2V5T3JLZXlQYWly
LAogICAgICAgICAgICAgWyZjYXB0dXJlZFByb21pc2VdIChSZWZQdHI8Q3J5cHRvS2V5PiYga2V5
KSB7CiAgICAgICAgICAgICAgICAgaWYgKChrZXktPnR5cGUoKSA9PSBDcnlwdG9LZXlUeXBlOjpQ
cml2YXRlIHx8IGtleS0+dHlwZSgpID09IENyeXB0b0tleVR5cGU6OlNlY3JldCkgJiYgIWtleS0+
dXNhZ2VzQml0bWFwKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aEV4Y2VwdGlv
bihXVEZNb3ZlKGNhcHR1cmVkUHJvbWlzZSksIFNZTlRBWF9FUlIpOworICAgICAgICAgICAgICAg
ICAgICByZWplY3RXaXRoRXhjZXB0aW9uKFdURk1vdmUoY2FwdHVyZWRQcm9taXNlKSwgU3ludGF4
RXJyb3IpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGNhcHR1cmVkUHJvbWlzZS0+cmVzb2x2ZTxJRExJbnRlcmZhY2U8Q3J5
cHRvS2V5Pj4oKmtleSk7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgWyZjYXB0dXJlZFBy
b21pc2VdIChDcnlwdG9LZXlQYWlyJiBrZXlQYWlyKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFr
ZXlQYWlyLnByaXZhdGVLZXktPnVzYWdlc0JpdG1hcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlamVjdFdpdGhFeGNlcHRpb24oV1RGTW92ZShjYXB0dXJlZFByb21pc2UpLCBTWU5UQVhfRVJS
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aEV4Y2VwdGlvbihXVEZNb3ZlKGNhcHR1
cmVkUHJvbWlzZSksIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29s
dmU8SURMRGljdGlvbmFyeTxDcnlwdG9LZXlQYWlyPj4oa2V5UGFpcik7CkBAIC04MjcsMTIgKzgy
NywxMiBAQCBzdGF0aWMgdm9pZCBqc1N1YnRsZUNyeXB0b0Z1bmN0aW9uRGVyaXZlS2V5UHJvbWlz
ZShFeGVjU3RhdGUmIHN0YXRlLCBSZWY8RGVmZXJyZQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAocGFyYW1zLT5pZGVudGlmaWVyICE9IGJhc2VLZXkt
PmFsZ29yaXRobUlkZW50aWZpZXIoKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3QoSU5WQUxJ
RF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IG1hdGNoIEFsZ29y
aXRobUlkZW50aWZpZXIiKSk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNjZXNz
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3QgbWF0Y2ggQWxnb3JpdGhtSWRl
bnRpZmllciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghYmFzZUtleS0+
YWxsb3dzKENyeXB0b0tleVVzYWdlRGVyaXZlS2V5KSkgewotICAgICAgICBwcm9taXNlLT5yZWpl
Y3QoSU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IHN1
cHBvcnQgQ3J5cHRvS2V5IGRlcml2YXRpb24iKSk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJ
bnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9y
dCBDcnlwdG9LZXkgZGVyaXZhdGlvbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
ODY1LDcgKzg2NSw3IEBAIHN0YXRpYyB2b2lkIGpzU3VidGxlQ3J5cHRvRnVuY3Rpb25EZXJpdmVL
ZXlQcm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUsIFJlZjxEZWZlcnJlCiAgICAgICAgIEtleURhdGEg
ZGF0YSA9IGRlcml2ZWRLZXk7CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBbY2FwdHVyZWRQcm9t
aXNlID0gcHJvbWlzZS5jb3B5UmVmKCldKENyeXB0b0tleSYga2V5KSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIGlmICgoa2V5LnR5cGUoKSA9PSBDcnlwdG9LZXlUeXBlOjpQcml2YXRlIHx8IGtleS50
eXBlKCkgPT0gQ3J5cHRvS2V5VHlwZTo6U2VjcmV0KSAmJiAha2V5LnVzYWdlc0JpdG1hcCgpKSB7
Ci0gICAgICAgICAgICAgICAgcmVqZWN0V2l0aEV4Y2VwdGlvbihXVEZNb3ZlKGNhcHR1cmVkUHJv
bWlzZSksIFNZTlRBWF9FUlIpOworICAgICAgICAgICAgICAgIHJlamVjdFdpdGhFeGNlcHRpb24o
V1RGTW92ZShjYXB0dXJlZFByb21pc2UpLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FwdHVyZWRQcm9taXNlLT5yZXNv
bHZlPElETEludGVyZmFjZTxDcnlwdG9LZXk+PihrZXkpOwpAQCAtOTA1LDEyICs5MDUsMTIgQEAg
c3RhdGljIHZvaWQganNTdWJ0bGVDcnlwdG9GdW5jdGlvbkRlcml2ZUJpdHNQcm9taXNlKEV4ZWNT
dGF0ZSYgc3RhdGUsIFJlZjxEZWZlcnIKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogCiAgICAgaWYgKHBhcmFtcy0+aWRlbnRpZmllciAhPSBiYXNlS2V5LT5hbGdvcml0
aG1JZGVudGlmaWVyKCkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNT
X0VSUiwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9lc24ndCBtYXRjaCBBbGdvcml0aG1JZGVu
dGlmaWVyIikpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBB
U0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IG1hdGNoIEFsZ29yaXRobUlkZW50aWZpZXIi
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIWJhc2VLZXktPmFsbG93cyhD
cnlwdG9LZXlVc2FnZURlcml2ZUJpdHMpKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChJTlZB
TElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9ydCBi
aXRzIGRlcml2YXRpb24iKSk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNjZXNz
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9ydCBiaXRzIGRlcml2
YXRpb24iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk2NSw3ICs5NjUsNyBAQCBz
dGF0aWMgdm9pZCBqc1N1YnRsZUNyeXB0b0Z1bmN0aW9uSW1wb3J0S2V5UHJvbWlzZShFeGVjU3Rh
dGUmIHN0YXRlLCBSZWY8RGVmZXJyZQogCiAgICAgYXV0byBjYWxsYmFjayA9IFtjYXB0dXJlZFBy
b21pc2UgPSBwcm9taXNlLmNvcHlSZWYoKV0oQ3J5cHRvS2V5JiBrZXkpIG11dGFibGUgewogICAg
ICAgICBpZiAoKGtleS50eXBlKCkgPT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSB8fCBrZXkudHlw
ZSgpID09IENyeXB0b0tleVR5cGU6OlNlY3JldCkgJiYgIWtleS51c2FnZXNCaXRtYXAoKSkgewot
ICAgICAgICAgICAgcmVqZWN0V2l0aEV4Y2VwdGlvbihXVEZNb3ZlKGNhcHR1cmVkUHJvbWlzZSks
IFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmVqZWN0V2l0aEV4Y2VwdGlvbihXVEZNb3ZlKGNh
cHR1cmVkUHJvbWlzZSksIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNlPENyeXB0
b0tleT4+KGtleSk7CkBAIC0xMDAwLDcgKzEwMDAsNyBAQCBzdGF0aWMgdm9pZCBqc1N1YnRsZUNy
eXB0b0Z1bmN0aW9uRXhwb3J0S2V5UHJvbWlzZShFeGVjU3RhdGUmIHN0YXRlLCBSZWY8RGVmZXJy
ZQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoIWtl
eS0+ZXh0cmFjdGFibGUoKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3QoSU5WQUxJRF9BQ0NF
U1NfRVJSLCBBU0NJSUxpdGVyYWwoIlRoZSBDcnlwdG9LZXkgaXMgbm9uZXh0cmFjdGFibGUiKSk7
CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiVGhlIENyeXB0b0tleSBpcyBub25leHRyYWN0YWJsZSIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTA2NSwxMiArMTA2NSwxMiBAQCBzdGF0aWMgdm9pZCBqc1N1YnRsZUNyeXB0
b0Z1bmN0aW9uV3JhcEtleVByb21pc2UoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmVkUAog
ICAgIH0KIAogICAgIGlmICh3cmFwUGFyYW1zLT5pZGVudGlmaWVyICE9IHdyYXBwaW5nS2V5LT5h
bGdvcml0aG1JZGVudGlmaWVyKCkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURf
QUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJXcmFwcGluZyBDcnlwdG9LZXkgZG9lc24ndCBtYXRj
aCBBbGdvcml0aG1JZGVudGlmaWVyIikpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxp
ZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIldyYXBwaW5nIENyeXB0b0tleSBkb2Vzbid0IG1h
dGNoIEFsZ29yaXRobUlkZW50aWZpZXIiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoIXdyYXBwaW5nS2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VXcmFwS2V5KSkgewotICAg
ICAgICBwcm9taXNlLT5yZWplY3QoSU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIldy
YXBwaW5nIENyeXB0b0tleSBkb2Vzbid0IHN1cHBvcnQgd3JhcEtleSBvcGVyYXRpb24iKSk7Cisg
ICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
V3JhcHBpbmcgQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9ydCB3cmFwS2V5IG9wZXJhdGlvbiIpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA3OCw3ICsxMDc4LDcgQEAgc3RhdGljIHZv
aWQganNTdWJ0bGVDcnlwdG9GdW5jdGlvbldyYXBLZXlQcm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUs
IFJlZjxEZWZlcnJlZFAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
CiAgICAgaWYgKCFrZXktPmV4dHJhY3RhYmxlKCkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0
KElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJUaGUgQ3J5cHRvS2V5IGlzIG5vbmV4
dHJhY3RhYmxlIikpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9y
LCBBU0NJSUxpdGVyYWwoIlRoZSBDcnlwdG9LZXkgaXMgbm9uZXh0cmFjdGFibGUiKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExODEsMTIgKzExODEsMTIgQEAgc3RhdGljIHZvaWQg
anNTdWJ0bGVDcnlwdG9GdW5jdGlvblVud3JhcEtleVByb21pc2UoRXhlY1N0YXRlJiBzdGF0ZSwg
UmVmPERlZmVycmUKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAg
ICAgaWYgKHVud3JhcFBhcmFtcy0+aWRlbnRpZmllciAhPSB1bndyYXBwaW5nS2V5LT5hbGdvcml0
aG1JZGVudGlmaWVyKCkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNT
X0VSUiwgQVNDSUlMaXRlcmFsKCJVbndyYXBwaW5nIENyeXB0b0tleSBkb2Vzbid0IG1hdGNoIHVu
d3JhcCBBbGdvcml0aG1JZGVudGlmaWVyIikpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52
YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIlVud3JhcHBpbmcgQ3J5cHRvS2V5IGRvZXNu
J3QgbWF0Y2ggdW53cmFwIEFsZ29yaXRobUlkZW50aWZpZXIiKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoIXVud3JhcHBpbmdLZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVVu
d3JhcEtleSkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNTX0VSUiwg
QVNDSUlMaXRlcmFsKCJVbndyYXBwaW5nIENyeXB0b0tleSBkb2Vzbid0IHN1cHBvcnQgdW53cmFw
S2V5IG9wZXJhdGlvbiIpKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEludmFsaWRBY2Nlc3NF
cnJvciwgQVNDSUlMaXRlcmFsKCJVbndyYXBwaW5nIENyeXB0b0tleSBkb2Vzbid0IHN1cHBvcnQg
dW53cmFwS2V5IG9wZXJhdGlvbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTIy
OSw3ICsxMjI5LDcgQEAgc3RhdGljIHZvaWQganNTdWJ0bGVDcnlwdG9GdW5jdGlvblVud3JhcEtl
eVByb21pc2UoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmUKIAogICAgICAgICBhdXRvIGNh
bGxiYWNrID0gW3Byb21pc2UgPSBwcm9taXNlLmNvcHlSZWYoKV0oQ3J5cHRvS2V5JiBrZXkpIG11
dGFibGUgewogICAgICAgICAgICAgaWYgKChrZXkudHlwZSgpID09IENyeXB0b0tleVR5cGU6OlBy
aXZhdGUgfHwga2V5LnR5cGUoKSA9PSBDcnlwdG9LZXlUeXBlOjpTZWNyZXQpICYmICFrZXkudXNh
Z2VzQml0bWFwKCkpIHsKLSAgICAgICAgICAgICAgICByZWplY3RXaXRoRXhjZXB0aW9uKFdURk1v
dmUocHJvbWlzZSksIFNZTlRBWF9FUlIpOworICAgICAgICAgICAgICAgIHJlamVjdFdpdGhFeGNl
cHRpb24oV1RGTW92ZShwcm9taXNlKSwgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByb21pc2UtPnJlc29sdmU8SURMSW50
ZXJmYWNlPENyeXB0b0tleT4+KGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA1ZDhjZTc4YWY1ZmE0OGRmMmZj
NzhiY2JjM2I4NzU0ZmViMTNjZTBlLi40NGNlOWNkMzMzY2M2YTY1N2E4MWUwM2M0MjRjMzVmYmJm
NzQyYjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTMyMzMsNyArMzIzMyw3IEBAIHN0YXRpYyBFeGNlcHRpb24g
ZXhjZXB0aW9uRm9yU2VyaWFsaXphdGlvbkZhaWx1cmUoU2VyaWFsaXphdGlvblJldHVybkNvZGUg
Y29kZSkKICAgICBjYXNlIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I6
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKICAgICBjYXNlIFNlcmlh
bGl6YXRpb25SZXR1cm5Db2RlOjpEYXRhQ2xvbmVFcnJvcjoKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IERBVEFfQ0xPTkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRh
Q2xvbmVFcnJvciB9OwogICAgIGNhc2UgU2VyaWFsaXphdGlvblJldHVybkNvZGU6OkV4aXN0aW5n
RXhjZXB0aW9uRXJyb3I6CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2Vw
dGlvbkVycm9yIH07CiAgICAgY2FzZSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VW5zcGVjaWZp
ZWRFcnJvcjoKQEAgLTMyODcsNyArMzI4Nyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShFeGVjU3RhdGUmCiAg
ICAgZm9yIChhdXRvJiB0cmFuc2ZlcmFibGUgOiB0cmFuc2Zlckxpc3QpIHsKICAgICAgICAgaWYg
KGF1dG8gYXJyYXlCdWZmZXIgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXIodm0sIHRyYW5z
ZmVyYWJsZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChhcnJheUJ1ZmZlci0+aXNOZXV0ZXJl
ZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEQVRBX0NMT05FX0VSUiB9
OworICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhQ2xvbmVFcnJvciB9Owog
ICAgICAgICAgICAgaWYgKGFycmF5QnVmZmVyLT5pc0xvY2tlZCgpKSB7CiAgICAgICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNhc2dlRm9yVHJhbnNmZXIo
YXJyYXlCdWZmZXIpKTsKQEAgLTMzMDIsNyArMzMwMiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShFeGVjU3Rh
dGUmCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBEQVRBX0NMT05FX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
RGF0YUNsb25lRXJyb3IgfTsKICAgICB9CiAKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmNwcAppbmRleCAwODM2NjA4Nzk3
YmU5NmYxODZkZTdlMjg2OTVhYTdhOTQ3YTYzOGRiLi42NzhlMzk3NGU4MWM2YzJjNzhhZmY3N2Vj
ZDM1OTE0MTBkY2ExYTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRv
QWxnb3JpdGhtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGht
LmNwcApAQCAtMzIsMTA3ICszMiwxMDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIENy
eXB0b0FsZ29yaXRobTo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNh
bGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQogewotICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5P
VF9TVVBQT1JURURfRVJSKTsKKyAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJv
cik7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWlu
dDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25D
YWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCiB7Ci0gICAgZXhj
ZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KE5vdFN1cHBvcnRlZEVycm9yKTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG06OnNpZ24oc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+
JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFj
ayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVl
JikKIHsKLSAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29y
aXRobTo6dmVyaWZ5KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
LCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYs
IEJvb2xDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKIHsKLSAgICBleGNlcHRpb25DYWxs
YmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9y
dGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobTo6ZGlnZXN0KFZlY3Rvcjx1aW50
OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNh
bGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKIHsKLSAgICBleGNl
cHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhjZXB0aW9uQ2FsbGJhY2so
Tm90U3VwcG9ydGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobTo6Z2VuZXJhdGVL
ZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGJvb2wsIENyeXB0b0tleVVzYWdl
Qml0bWFwLCBLZXlPcktleVBhaXJDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2Vw
dGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JikKIHsKLSAgICBleGNlcHRpb25D
YWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3Vw
cG9ydGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobTo6ZGVyaXZlQml0cyhzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4m
Jiwgc2l6ZV90LCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlv
bkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKIHsKLSAgICBl
eGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soTm90U3VwcG9ydGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobTo6aW1wb3J0
S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0LCBLZXlEYXRhJiYsIGNvbnN0IHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJp
dG1hcCwgS2V5Q2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aykKIHsKLSAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29y
aXRobTo6ZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0LCBSZWY8Q3J5cHRvS2V5PiYm
LCBLZXlEYXRhQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aykKIHsKLSAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29y
aXRobTo6d3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9y
Q2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKIHsKLSAg
ICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobTo6dW53
cmFwS2V5KFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFj
ayYmLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrKQogewotICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICBleGNlcHRpb25DYWxsYmFjayhO
b3RTdXBwb3J0ZWRFcnJvcik7CiB9CiAKIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3Jp
dGhtOjpnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCiB7Ci0g
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENy
eXB0b0FsZ29yaXRobTo6ZW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVw
cmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBW
ZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKIHsKLSAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9y
dGVkRXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtOjpkZWNy
eXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiwgY29uc3QgQ3J5
cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZv
aWRDYWxsYmFjayYmKQogewotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VS
UiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiBF
eGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG06OnNpZ24oY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCiB7Ci0gICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0
b0FsZ29yaXRobTo6dmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNh
dGVkJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIGNvbnN0
IENyeXB0b09wZXJhdGlvbkRhdGEmLCBCb29sQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCiB7
Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+
IENyeXB0b0FsZ29yaXRobTo6ZGlnZXN0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNE
ZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYs
IFZvaWRDYWxsYmFjayYmKQogewotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVE
X0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQog
CiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG06OmdlbmVyYXRlS2V5KGNvbnN0IENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VC
aXRtYXAsIEtleU9yS2V5UGFpckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0JikKIHsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9F
UlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAog
RXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtOjpkZXJpdmVLZXkoY29uc3QgQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXkmLCBDcnlwdG9B
bGdvcml0aG0qLCBib29sLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCwgS2V5Q2FsbGJhY2smJiwgVm9p
ZENhbGxiYWNrJiYpCiB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJS
IH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4
Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobTo6ZGVyaXZlQml0cyhjb25zdCBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleSYsIHNpemVfdCwg
VmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCiB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBv
cnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobTo6aW1w
b3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiwgY29uc3Qg
Q3J5cHRvS2V5RGF0YSYsIGJvb2wsIENyeXB0b0tleVVzYWdlQml0bWFwLCBLZXlDYWxsYmFjayYm
LCBWb2lkQ2FsbGJhY2smJikKIHsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRF
RF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0K
IAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtOjplbmNyeXB0Rm9yV3JhcEtleShj
b25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYgcGFyYW1ldGVycywgY29u
c3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3Rv
ckNhbGxiYWNrJiYgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjaykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19DQkMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5jcHAKaW5kZXggMjQzYjI4YzE4YWIyOTA2ZDVjNDkyMTk1YjFiMjcwNzE0
ODhkZTYzYi4uODYzOTA1OWEzOTI3Zjk4OWUzOWQ3OTE1N2M5NmVjNzYxYTMyNzcwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfQ0JDOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJh
bWUKICAgICBjb25zdCBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3Jp
dGhtQWVzS2V5UGFyYW1zPihwYXJhbWV0ZXJzKTsKIAogICAgIGlmICh1c2FnZXNBcmVJbnZhbGlk
Rm9yQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQyh1c2FnZXMpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJv
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBm
b3JtYXQsIEtleURhdGEmJgogewogICAgIEFTU0VSVChwYXJhbWV0ZXJzKTsKICAgICBpZiAodXNh
Z2VzQXJlSW52YWxpZEZvckNyeXB0b0FsZ29yaXRobUFFU19DQkModXNhZ2VzKSkgewotICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzQsNyArMTM0
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRv
OjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhJiYKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsK
KyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmICghcmVzdWx0KSB7CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpleHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3Jt
YXQgZm9ybWF0LCBSZWY8Q3J5cHQKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xOTQsNyArMTk0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQzo6ZW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKIHsKICAg
ICBhdXRvJiBhZXNDQkNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2Jj
UGFyYW1zRGVwcmVjYXRlZD4ocGFyYW1ldGVycyk7CiAgICAgaWYgKCFrZXlBbGdvcml0aG1NYXRj
aGVzKGFlc0NCQ1BhcmFtZXRlcnMsIGtleSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9y
dGVkRXJyb3IgfTsKICAgICByZXR1cm4gcGxhdGZvcm1FbmNyeXB0KGFlc0NCQ1BhcmFtZXRlcnMs
IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjayksIFdU
Rk1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7CiB9CiAKQEAgLTIwMiw3ICsyMDIsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpkZWNyeXB0KGNvbnN0IENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcgogewogICAgIGF1dG8mIGFlc0NCQ1BhcmFtZXRlcnMgPSBkb3duY2Fz
dDxDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkPihwYXJhbWV0ZXJzKTsKICAg
ICBpZiAoIWtleUFsZ29yaXRobU1hdGNoZXMoYWVzQ0JDUGFyYW1ldGVycywga2V5KSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIHJldHVybiBwbGF0Zm9ybURl
Y3J5cHQoYWVzQ0JDUGFyYW1ldGVycywgZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpLCBkYXRh
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIApAQCAt
MjIzLDcgKzIyMyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6
OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtCiBFeGNlcHRpb25Pcjx2b2lk
PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlEYXRhJiBrZXlEYXRhLCBib29s
IGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZSwgS2V5Q2FsbGJhY2smJiBj
YWxsYmFjaywgVm9pZENhbGxiYWNrJiYpCiB7CiAgICAgaWYgKCFpczxDcnlwdG9LZXlEYXRhT2N0
ZXRTZXF1ZW5jZT4oa2V5RGF0YSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQ
UE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJy
b3IgfTsKICAgICBhdXRvJiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSA9IGRvd25jYXN0PENyeXB0b0tl
eURhdGFPY3RldFNlcXVlbmNlPihrZXlEYXRhKTsKICAgICBjYWxsYmFjayhDcnlwdG9LZXlBRVM6
OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDLCBrZXlEYXRhT2N0ZXRT
ZXF1ZW5jZS5vY3RldFNlcXVlbmNlKCksIGV4dHJhY3RhYmxlLCB1c2FnZSkpOwogICAgIHJldHVy
biB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0ZCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwCmluZGV4IDBlODRjMzNhZjA5MThmNjhkYjg4MTAz
YjYyNmIyNWU3MmFkM2Y3MWQuLjVmMWM2MTRkNzkzNzEyYjQ2MmQ3MWVlN2VkMDgxZjI3ZWNmYjFj
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DRkIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgQ3J5cHRv
QWxnb3JpdGhtQUVTX0NGQjo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYgcGFyYW1lCiAgICAgY29uc3QgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENy
eXB0b0FsZ29yaXRobUFlc0tleVBhcmFtcz4ocGFyYW1ldGVycyk7CiAKICAgICBpZiAodXNhZ2Vz
QXJlSW52YWxpZEZvckNyeXB0b0FsZ29yaXRobUFFU19DRkIodXNhZ2VzKSkgewotICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
U3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05OCw3ICs5OCw3IEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5
Rm9ybWF0IGZvcm1hdCwgS2V5RGF0YSYmCiB7CiAgICAgQVNTRVJUKHBhcmFtZXRlcnMpOwogICAg
IGlmICh1c2FnZXNBcmVJbnZhbGlkRm9yQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQih1c2FnZXMpKSB7
Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEy
Myw3ICsxMjMsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmltcG9ydEtleShTdWJ0
bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJgogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRF
RF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKQEAgLTE2Nyw3ICsxNjcs
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmV4cG9ydEtleShTdWJ0bGVDcnlwdG86
OktleUZvcm1hdCBmb3JtYXQsIFJlZjxDcnlwdAogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIpOwor
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAKaW5kZXggMmZmNTU2MTMxMjJmNDgw
MTk4YmJmYzU1ZmJiMDYxMzYxNGJlZjQyNC4uNWI4NTg0NDkzMDk0MjI3NmU1NTQyZjlmNDE0ZGZl
NzMyNWQxNDUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzJiBwYXJhbWUKICAgICBjb25zdCBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93
bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzS2V5UGFyYW1zPihwYXJhbWV0ZXJzKTsKIAogICAgIGlm
ICh1c2FnZXNBcmVJbnZhbGlkRm9yQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUih1c2FnZXMpKSB7Ci0g
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNyw3
ICsxMDcsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmltcG9ydEtleShTdWJ0bGVD
cnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJgogewogICAgIEFTU0VSVChwYXJhbWV0
ZXJzKTsKICAgICBpZiAodXNhZ2VzQXJlSW52YWxpZEZvckNyeXB0b0FsZ29yaXRobUFFU19DVFIo
dXNhZ2VzKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjppbXBv
cnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhJiYKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5P
VF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVk
RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghcmVzdWx0KSB7CkBAIC0x
NzYsNyArMTc2LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpleHBvcnRLZXkoU3Vi
dGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBSZWY8Q3J5cHQKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JU
RURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCmluZGV4IGZkOTBm
OTU3NTBhYjk1YTI3NTZjNzVlYTJhNzQxMGYyMWYxY2M1M2EuLmY2Nzc5ODZjZWQyMTAxOTM0M2Uz
MmNlMzE1Y2JmNDNlZGY1ZjRkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCkBAIC0xMzAsNyAr
MTMwLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpnZW5lcmF0ZUtleShjb25zdCBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWUKICAgICBjb25zdCBhdXRvJiBhZXNQYXJh
bWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzS2V5UGFyYW1zPihwYXJhbWV0ZXJz
KTsKIAogICAgIGlmICh1c2FnZXNBcmVJbnZhbGlkRm9yQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTSh1
c2FnZXMpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OmltcG9y
dEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJgogewogICAgIEFT
U0VSVChwYXJhbWV0ZXJzKTsKICAgICBpZiAodXNhZ2VzQXJlSW52YWxpZEZvckNyeXB0b0FsZ29y
aXRobUFFU19HQ00odXNhZ2VzKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhf
RVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfR0NNOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRh
JiYKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
Tm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghcmVz
dWx0KSB7CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpl
eHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBSZWY8Q3J5cHQKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9y
dGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcApp
bmRleCA1MGFmYjQzMWY4MDcwNjlkMDE5ZWQ4ZjQ0NTdlNWEzYTRiMGU5YWZmLi5kMTgwZjgyMGYy
N2I1OGFjMjI2MTY1MjdlZTljNmYyZmY4MWRmMzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAKQEAg
LTY2LDcgKzY2LDcgQEAgYm9vbCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmtleUFsZ29yaXRobU1h
dGNoZXMoY29uc3QgQ3J5cHRvS2V5JiBrZXkpIGNvbnN0CiB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19LVzo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1l
dGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzLCBLZXlP
cktleVBhaXJDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlv
bkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JikKIHsKICAgICBpZiAodXNhZ2VzQXJl
SW52YWxpZEZvckNyeXB0b0FsZ29yaXRobUFFU19LVyh1c2FnZXMpKSB7Ci0gICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50
YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgzLDcgKzgzLDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1h
dCBmb3JtYXQsIEtleURhdGEmJgogewogICAgIEFTU0VSVChwYXJhbWV0ZXJzKTsKICAgICBpZiAo
dXNhZ2VzQXJlSW52YWxpZEZvckNyeXB0b0FsZ29yaXRobUFFU19LVyh1c2FnZXMpKSB7Ci0gICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNyw3ICsx
MDcsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0
bzo6S2V5Rm9ybWF0IGZvcm1hdCwgS2V5RGF0YSYmCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBkZWZhdWx0OgotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7
CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkgewpAQCAtMTUxLDcgKzE1MSw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpleHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3Jt
YXQgZm9ybWF0LCBSZWY8Q3J5cHRvCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0
OgotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTgwLDE0ICsxODAsMTQgQEAgRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9B
bGdvcml0aG1BRVNfS1c6OmdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXIKIEV4
Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6ZW5jcnlwdEZvcldyYXBLZXko
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9L
ZXkmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrKQogewogICAgIGlmICgh
a2V5QWxnb3JpdGhtTWF0Y2hlcyhrZXkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRl
ZEVycm9yIH07CiAgICAgcmV0dXJuIHBsYXRmb3JtRW5jcnlwdChkb3duY2FzdDxDcnlwdG9LZXlB
RVM+KGtleSksIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFj
aykpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmRlY3J5
cHRGb3JVbndyYXBLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQm
LCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwg
VmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNr
KQogewogICAgIGlmICgha2V5QWxnb3JpdGhtTWF0Y2hlcyhrZXkpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIHBsYXRmb3JtRGVjcnlwdChkb3du
Y2FzdDxDcnlwdG9LZXlBRVM+KGtleSksIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3Zl
KGZhaWx1cmVDYWxsYmFjaykpOwogfQogCkBAIC0yMDYsNyArMjA2LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdv
cml0aG1QYXJhbWUKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1w
b3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiwgY29uc3Qg
Q3J5cHRvS2V5RGF0YSYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VC
aXRtYXAgdXNhZ2UsIEtleUNhbGxiYWNrJiYgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayYmKQogewog
ICAgIGlmICghaXM8Q3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2U+KGtleURhdGEpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgY2FsbGJhY2soQ3J5cHRvS2V5
QUVTOjpjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXLCBkb3duY2FzdDxD
cnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4oa2V5RGF0YSkub2N0ZXRTZXF1ZW5jZSgpLCBleHRy
YWN0YWJsZSwgdXNhZ2UpKTsKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNESC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcAppbmRl
eCAxOWZjMTljYzEyMzA2YmQ5MDA2MTA4MmEzM2IzMjM4ZDI0NmYxMGNlLi4xYzc5OWY2M2QyNGYw
MWRiMzMxYjBhYzFkMmExYjAyZTIxYTUxMjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcApAQCAtNDksNyAr
NDksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcgogICAgIGNvbnN0IGF1dG8mIGVjUGFyYW1l
dGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUVjS2V5UGFyYW1zPihwYXJhbWV0ZXJzKTsK
IAogICAgIGlmICh1c2FnZXMgJiAoQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0IHwgQ3J5cHRvS2V5VXNh
Z2VEZWNyeXB0IHwgQ3J5cHRvS2V5VXNhZ2VTaWduIHwgQ3J5cHRvS2V5VXNhZ2VWZXJpZnkgfCBD
cnlwdG9LZXlVc2FnZVdyYXBLZXkgfCBDcnlwdG9LZXlVc2FnZVVud3JhcEtleSkpIHsKLSAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzcsMjIgKzc3
LDIyIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNESDo6ZGVyaXZlQml0cyhzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgYXV0byYgZWNQYXJhbWV0ZXJzID0g
ZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtRWNkaEtleURlcml2ZVBhcmFtcz4oKnBhcmFtZXRlcnMp
OwogCiAgICAgaWYgKGJhc2VLZXktPnR5cGUoKSAhPSBDcnlwdG9LZXk6OlR5cGU6OlByaXZhdGUp
IHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soSU5WQUxJRF9BQ0NFU1NfRVJSKTsKKyAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soSW52YWxpZEFjY2Vzc0Vycm9yKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBBU1NFUlQoZWNQYXJhbWV0ZXJzLnB1YmxpY0tleSk7CiAgICAgaWYgKGVj
UGFyYW1ldGVycy5wdWJsaWNLZXktPnR5cGUoKSAhPSBDcnlwdG9LZXk6OlR5cGU6OlB1YmxpYykg
ewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElEX0FDQ0VTU19FUlIpOworICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJyb3IpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmIChiYXNlS2V5LT5hbGdvcml0aG1JZGVudGlmaWVyKCkgIT0gZWNQYXJh
bWV0ZXJzLnB1YmxpY0tleS0+YWxnb3JpdGhtSWRlbnRpZmllcigpKSB7Ci0gICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKElOVkFMSURfQUNDRVNTX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKEludmFsaWRBY2Nlc3NFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0
byYgZWNCYXNlS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5RUM+KGJhc2VLZXkuZ2V0KCkpOwogICAg
IGF1dG8mIGVjUHVibGljS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5RUM+KCooZWNQYXJhbWV0ZXJz
LnB1YmxpY0tleS5nZXQoKSkpOwogICAgIGlmIChlY0Jhc2VLZXkubmFtZWRDdXJ2ZSgpICE9IGVj
UHVibGljS2V5Lm5hbWVkQ3VydmUoKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZB
TElEX0FDQ0VTU19FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNz
RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1FQ0RIOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQg
Zm9ybWF0LCBLZXlEYXRhJiYgZGEKICAgICAgICAgfQogICAgICAgICBpc1VzYWdlc0FsbG93ZWQg
PSBpc1VzYWdlc0FsbG93ZWQgfHwgIXVzYWdlczsKICAgICAgICAgaWYgKCFpc1VzYWdlc0FsbG93
ZWQpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTE0NywyMSArMTQ3LDIxIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGht
RUNESDo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgS2V5RGF0YSYm
IGRhCiAgICAgfQogICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlJhdzoKICAgICAg
ICAgaWYgKHVzYWdlcykgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VS
Uik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6Omlt
cG9ydFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUs
IFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0
OjpTcGtpOgogICAgICAgICBpZiAodXNhZ2VzKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVy
cm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBD
cnlwdG9LZXlFQzo6aW1wb3J0U3BraShlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0
ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN1YnRsZUNy
eXB0bzo6S2V5Rm9ybWF0OjpQa2NzODoKICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4g
Q3J5cHRvS2V5VXNhZ2VEZXJpdmVLZXkpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlcml2
ZUJpdHMpICYmICh1c2FnZXMgXiAoQ3J5cHRvS2V5VXNhZ2VEZXJpdmVLZXkgfCBDcnlwdG9LZXlV
c2FnZURlcml2ZUJpdHMpKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFY
X0VSUik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6
OmltcG9ydFBrY3M4KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRD
dXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAKaW5kZXggMjhkZGU0NDA1ZGU3MWZlYjk3OWVk
MjViZWNhM2JjMTEyMWZjZGM1ZS4uNTUzMzc1ZmE3ZTgyZjBlMzgxMDIzNzgxYWRiN2NjOTQ0YjUx
MjllOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtRUNEU0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUVDRFNBLmNwcApAQCAtNTEsNyArNTEsNyBAQCBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIENyeXB0b0FsZ29yaXRobUVDRFNBOjppZGVudGlmaWVyKCkgY29uc3QKIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtRUNEU0E6OnNpZ24oc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rv
cjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNh
bGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQogewogICAgIGlmIChrZXktPnR5cGUoKSAhPSBDcnlw
dG9LZXlUeXBlOjpQcml2YXRlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKElOVkFMSURf
QUNDRVNTX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKEludmFsaWRBY2Nlc3NFcnJv
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGxhdGZvcm1TaWduKFdURk1vdmUocGFy
YW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShkYXRhKSwgV1RGTW92ZShjYWxsYmFjayks
IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOwpAQCAtNjAs
NyArNjAsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDRFNBOjpzaWduKHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcgogdm9pZCBDcnlwdG9BbGdvcml0aG1F
Q0RTQTo6dmVyaWZ5KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
IHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBzaWdu
YXR1cmUsIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIEJvb2xDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKIHsKICAgICBpZiAoa2V5LT50eXBl
KCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHVibGljKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KElOVkFMSURfQUNDRVNTX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKEludmFsaWRB
Y2Nlc3NFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGxhdGZvcm1WZXJpZnko
V1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHNpZ25hdHVyZSksIFdU
Rk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSwgY29udGV4dCwgd29ya1F1ZXVlKTsKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1FQ0RTQTo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYg
cGFyYW1ldGUKICAgICBjb25zdCBhdXRvJiBlY1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9B
bGdvcml0aG1FY0tleVBhcmFtcz4ocGFyYW1ldGVycyk7CiAKICAgICBpZiAodXNhZ2VzICYgKENy
eXB0b0tleVVzYWdlRW5jcnlwdCB8IENyeXB0b0tleVVzYWdlRGVjcnlwdCB8IENyeXB0b0tleVVz
YWdlRGVyaXZlS2V5IHwgQ3J5cHRvS2V5VXNhZ2VEZXJpdmVCaXRzIHwgQ3J5cHRvS2V5VXNhZ2VX
cmFwS2V5IHwgQ3J5cHRvS2V5VXNhZ2VVbndyYXBLZXkpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJv
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1h
dCwgS2V5RGF0YSYmIGQKICAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0
PEpzb25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlz
TnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB8fCAoa2V5LmQuaXNOdWxs
KCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkpKSB7Ci0gICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICBpZiAodXNhZ2VzICYmICFrZXkudXNlLmlzTnVsbCgpICYmIGtleS51c2UgIT0gInNpZyIpIHsK
QEAgLTEyMSwyMSArMTIxLDIxIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNEU0E6OmltcG9ydEtl
eShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJiBkCiAgICAgfQogICAg
IGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlJhdzoKICAgICAgICAgaWYgKHVzYWdlcyAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5
bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UmF3KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1Bh
cmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3Vi
dGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlNwa2k6CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdl
cyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soU1lOVEFYX0VSUik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJv
cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVy
cy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdWJ0bGVDcnlw
dG86OktleUZvcm1hdDo6UGtjczg6CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENy
eXB0b0tleVVzYWdlU2lnbikpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRB
WF9FUlIpOworICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVD
OjppbXBvcnRQa2NzOChlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVk
Q3VydmUsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3Rh
YmxlLCB1c2FnZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtSEtERi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNwcAppbmRleCA2NzY1MmFlM2I0ZTBmMmJlZjUwZTFj
MjM1ZGMyZTZmODY3NDAyYTk2Li5kOTI4ODFkZTliMzAyMmFjMDFjMjVhOTUxNzBmMTVmYWY4ODc5
YjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1IS0RGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1IS0RGLmNwcApAQCAtNTUsMTUgKzU1LDE1IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtSEtERjo6ZGVyaXZlQml0cyhzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4mCiB2b2lkIENyeXB0b0FsZ29yaXRobUhLREY6OmltcG9ydEtleShTdWJ0bGVDcnlw
dG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJiBkYXRhLCBjb25zdCBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3Rh
YmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMsIEtleUNhbGxiYWNrJiYgY2FsbGJhY2ss
IEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCiB7CiAgICAgaWYgKGZvcm1h
dCAhPSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UmF3KSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90
U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh1c2FnZXMg
JiAoQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0IHwgQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0IHwgQ3J5cHRv
S2V5VXNhZ2VTaWduIHwgQ3J5cHRvS2V5VXNhZ2VWZXJpZnkgfCBDcnlwdG9LZXlVc2FnZVdyYXBL
ZXkgfCBDcnlwdG9LZXlVc2FnZVVud3JhcEtleSkpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soU1lOVEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoZXh0cmFjdGFibGUpIHsKLSAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KFN5bnRheEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcApp
bmRleCBiZTkwNTVmODdiZDE5NzJlMDk0NWM5ZmI1OWZmMTUwODY0OTFmNGM2Li5mN2FmZWFkNzY1
YTBlYzFjNmM5ZTk5YzM0Y2Q2ZTE4OGFmYTFlYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcApAQCAtODQs
NyArODQsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmdlbmVyYXRlS2V5KGNvbnN0IENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcgogICAgIGNvbnN0IGF1dG8mIGhtYWNQ
YXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcz4ocGFyYW1l
dGVycyk7CiAKICAgICBpZiAodXNhZ2VzQXJlSW52YWxpZEZvckNyeXB0b0FsZ29yaXRobUhNQUMo
dXNhZ2VzKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjppbXBvcnRL
ZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhJiYgZGEKICAgICBjb25z
dCBhdXRvJiBobWFjUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUhtYWNLZXlQ
YXJhbXM+KCpwYXJhbWV0ZXJzKTsKIAogICAgIGlmICh1c2FnZXNBcmVJbnZhbGlkRm9yQ3J5cHRv
QWxnb3JpdGhtSE1BQyh1c2FnZXMpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRB
WF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRo
bUhNQUM6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEm
JiBkYQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhOb3RTdXBwb3J0ZWRFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFy
ZXN1bHQpIHsKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmV4
cG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIFJlZjxDcnlwdG9LZQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBw
b3J0ZWRFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIwNSw3ICsyMDUsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZQogewogICAgIGF1dG8mIGhtYWNQYXJhbWV0ZXJzID0g
ZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtc0RlcHJlY2F0ZWQ+KHBhcmFtZXRlcnMp
OwogICAgIGlmICgha2V5QWxnb3JpdGhtTWF0Y2hlcyhobWFjUGFyYW1ldGVycywga2V5KSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIHJldHVybiBwbGF0Zm9y
bVNpZ24oaG1hY1BhcmFtZXRlcnMsIGRvd25jYXN0PENyeXB0b0tleUhNQUM+KGtleSksIGRhdGEs
IFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwogfQogCkBAIC0y
MTMsNyArMjEzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtSE1BQzo6dmVy
aWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXAKIHsKICAgICBhdXRvJiBobWFj
UGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXNEZXByZWNhdGVk
PihwYXJhbWV0ZXJzKTsKICAgICBpZiAoIWtleUFsZ29yaXRobU1hdGNoZXMoaG1hY1BhcmFtZXRl
cnMsIGtleSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBy
ZXR1cm4gcGxhdGZvcm1WZXJpZnkoaG1hY1BhcmFtZXRlcnMsIGRvd25jYXN0PENyeXB0b0tleUhN
QUM+KGtleSksIGV4cGVjdGVkU2lnbmF0dXJlLCBkYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RG
TW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIApAQCAtMjMyLDcgKzIzMiw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUhNQUM6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1ITUFDOjpp
bXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmIHBhcmFt
ZXRlcnMsIGNvbnN0IENyeXB0b0tleURhdGEmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENy
eXB0b0tleVVzYWdlQml0bWFwIHVzYWdlLCBLZXlDYWxsYmFjayYmIGNhbGxiYWNrLCBWb2lkQ2Fs
bGJhY2smJikKIHsKICAgICBpZiAoIWlzPENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlPihrZXlE
YXRhKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIGNhbGxi
YWNrKENyeXB0b0tleUhNQUM6OmNyZWF0ZShkb3duY2FzdDxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1
ZW5jZT4oa2V5RGF0YSkub2N0ZXRTZXF1ZW5jZSgpLCBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1I
bWFjUGFyYW1zRGVwcmVjYXRlZD4ocGFyYW1ldGVycykuaGFzaCwgZXh0cmFjdGFibGUsIHVzYWdl
KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktERjIuY3BwCmluZGV4IGU5NDJmNjk2
NmU5ZWQzZGE4M2M0OTAxMzRkNjBhNzY3YzU1YjcwMDYuLjVhMGU3NzJkZDQwNjI1MDdkZjFhNjRk
NDE2NDU3ODViOTA0ZjhmZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUEJLREYyLmNwcApAQCAtNTUsMTUgKzU1LDE1
IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjpkZXJpdmVCaXRzKHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzCiB2b2lkIENyeXB0b0FsZ29yaXRobVBCS0RGMjo6
aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgS2V5RGF0YSYmIGRhdGEs
IGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFt
ZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5
Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aykKIHsKICAgICBpZiAoZm9ybWF0ICE9IFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpSYXcpIHsK
LSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKHVzYWdlcyAmIChDcnlwdG9LZXlVc2FnZUVuY3J5cHQgfCBDcnlwdG9LZXlV
c2FnZURlY3J5cHQgfCBDcnlwdG9LZXlVc2FnZVNpZ24gfCBDcnlwdG9LZXlVc2FnZVZlcmlmeSB8
IENyeXB0b0tleVVzYWdlV3JhcEtleSB8IENyeXB0b0tleVVzYWdlVW53cmFwS2V5KSkgewotICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChleHRy
YWN0YWJsZSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1SU0FFU19QS0NTMV92MV81LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzUuY3BwCmluZGV4IDY2NGZiZDhi
ZmE1ODVjNTY5MzIyZDI1MjZmMmM5NWMxYWFhOWMxZDMuLmZlZjA0ZWI1ZGIxM2ZlOWUzYjkwODA0
YzIxYTVkNTIxNzVlZTQwYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzUu
Y3BwCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFf
NTo6a2V5QWxnb3JpdGhtTWF0Y2hlcyhjb25zdCBDcnlwdG9LZXkmIGtleSkKIHZvaWQgQ3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50
OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2Fs
bGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCiB7CiAgICAgaWYgKGtleS0+dHlwZSgpICE9IENyeXB0
b0tleVR5cGU6OlB1YmxpYykgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElEX0FD
Q0VTU19FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJyb3Ip
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBsYXRmb3JtRW5jcnlwdChXVEZNb3ZlKGtl
eSksIFdURk1vdmUocGxhaW5UZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOwpAQCAtNzEsNyArNzEsNyBAQCB2b2lk
IENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmVuY3J5cHQoc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobVBhcgogdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81
OjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBS
ZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9y
Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUp
CiB7CiAgICAgaWYgKGtleS0+dHlwZSgpICE9IENyeXB0b0tleVR5cGU6OlByaXZhdGUpIHsKLSAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soSU5WQUxJRF9BQ0NFU1NfRVJSKTsKKyAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soSW52YWxpZEFjY2Vzc0Vycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBwbGF0Zm9ybURlY3J5cHQoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKGNpcGhlclRleHQp
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQs
IHdvcmtRdWV1ZSk7CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNf
UEtDUzFfdjFfNTo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAg
ICAgY29uc3QgYXV0byYgcnNhUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobVJz
YUtleUdlblBhcmFtcz4ocGFyYW1ldGVycyk7CiAKICAgICBpZiAodXNhZ2VzICYgKENyeXB0b0tl
eVVzYWdlU2lnbiB8IENyeXB0b0tleVVzYWdlVmVyaWZ5IHwgQ3J5cHRvS2V5VXNhZ2VEZXJpdmVL
ZXkgfCBDcnlwdG9LZXlVc2FnZURlcml2ZUJpdHMgfCBDcnlwdG9LZXlVc2FnZVdyYXBLZXkgfCBD
cnlwdG9LZXlVc2FnZVVud3JhcEtleSkpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lO
VEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtUlNBRVNfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZv
cm1hdCwKICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpKd2s6IHsKICAgICAgICAg
SnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKICAg
ICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRv
S2V5VXNhZ2VEZWNyeXB0KSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9L
ZXlVc2FnZUVuY3J5cHQpKSkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRB
WF9FUlIpOworICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh1c2FnZXMgJiYgIWtleS51
c2UuaXNOdWxsKCkgJiYga2V5LnVzZSAhPSAiZW5jIikgewpAQCAtMTIyLDcgKzEyMiw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0
bzo6S2V5Rm9ybWF0IGZvcm1hdCwKICAgICB9CiAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZv
cm1hdDo6U3BraTogewogICAgICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlV
c2FnZUVuY3J5cHQpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJS
KTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6Omlt
cG9ydFNwa2kocGFyYW1ldGVycy0+aWRlbnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKFdU
Rjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKQEAg
LTEzMCwxNCArMTMwLDE0IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6
aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwKICAgICB9CiAgICAgY2Fz
ZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UGtjczg6IHsKICAgICAgICAgaWYgKHVzYWdlcyAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0KSkgewotICAgICAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhT
eW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcmVz
dWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBz
dGQ6Om51bGxvcHQsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4
dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmV4cG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1h
dCBmb3JtYXQsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTk0LDE0ICsxOTQsMTQgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81Ojpl
eHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LAogRXhjZXB0aW9uT3I8dm9p
ZD4gQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6ZW5jcnlwdChjb25zdCBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25z
dCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBW
b2lkQ2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJhY2spCiB7CiAgICAgaWYgKCFrZXlBbGdvcml0aG1N
YXRjaGVzKGtleSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAg
ICByZXR1cm4gcGxhdGZvcm1FbmNyeXB0KGRvd25jYXN0PENyeXB0b0tleVJTQT4oa2V5KSwgZGF0
YSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7CiB9CiAKIEV4
Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmRlY3J5cHQo
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9L
ZXkmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrKQogewogICAgIGlmICgh
a2V5QWxnb3JpdGhtTWF0Y2hlcyhrZXkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRl
ZEVycm9yIH07CiAgICAgcmV0dXJuIHBsYXRmb3JtRGVjcnlwdChkb3duY2FzdDxDcnlwdG9LZXlS
U0E+KGtleSksIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFj
aykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAKaW5kZXgg
YWE0YzE3Y2ExN2I5OTE5MWZjYTBkNWEyMWNjMDAxM2IzOTcyYzAwNi4uYmUyNmM1YjZhMmEyODgw
YWM0YzJmNjA0NWVkMzI0NjgxMTg5YWZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81LmNwcApAQCAtNzEsNyArNzEsNyBAQCBib29sIENyeXB0b0FsZ29yaXRobVJTQVNT
QV9QS0NTMV92MV81OjprZXlBbGdvcml0aG1NYXRjaGVzKGNvbnN0IENyeXB0b0FsZ29yaXRobQog
dm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6c2lnbihzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiBrZXksIFZl
Y3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlv
bkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQogewogICAgIGlmIChrZXktPnR5cGUoKSAhPSBD
cnlwdG9LZXlUeXBlOjpQcml2YXRlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKElOVkFM
SURfQUNDRVNTX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKEludmFsaWRBY2Nlc3NF
cnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGxhdGZvcm1TaWduKFdURk1vdmUo
a2V5KSwgV1RGTW92ZShkYXRhKSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOwpAQCAtODAsNyArODAsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpzaWduKHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbQogdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6
dmVyaWZ5KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8
Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc2lnbmF0dXJlLCBWZWN0b3I8dWlu
dDhfdD4mJiBkYXRhLCBCb29sQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2sm
JiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29y
a1F1ZXVlJiB3b3JrUXVldWUpCiB7CiAgICAgaWYgKGtleS0+dHlwZSgpICE9IENyeXB0b0tleVR5
cGU6OlB1YmxpYykgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElEX0FDQ0VTU19F
UlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIHBsYXRmb3JtVmVyaWZ5KFdURk1vdmUoa2V5KSwgV1RG
TW92ZShzaWduYXR1cmUpLCBXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtRdWV1ZSk7CkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmdlbmVyYXRlS2V5KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlCiAgICAgY29uc3QgYXV0byYgcnNhUGFyYW1ldGVy
cyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtleUdlblBhcmFtcz4ocGFyYW1l
dGVycyk7CiAKICAgICBpZiAodXNhZ2VzICYgKENyeXB0b0tleVVzYWdlRGVjcnlwdCB8IENyeXB0
b0tleVVzYWdlRW5jcnlwdCB8IENyeXB0b0tleVVzYWdlRGVyaXZlS2V5IHwgQ3J5cHRvS2V5VXNh
Z2VEZXJpdmVCaXRzIHwgQ3J5cHRvS2V5VXNhZ2VXcmFwS2V5IHwgQ3J5cHRvS2V5VXNhZ2VVbndy
YXBLZXkpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81OjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LAogICAgICAgICBK
c29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpOwogCiAg
ICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0
b0tleVVzYWdlU2lnbikpIHx8IChrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5
VXNhZ2VWZXJpZnkpKSkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9F
UlIpOworICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh1c2FnZXMgJiYgIWtleS51c2Uu
aXNOdWxsKCkgJiYga2V5LnVzZSAhPSAic2lnIikgewpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86
OktleUZvcm1hdCBmb3JtYXQsCiAgICAgfQogICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3Jt
YXQ6OlNwa2k6IHsKICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNh
Z2VWZXJpZnkpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsK
KyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0
MzY+CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFf
djFfNTo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwKICAgICB9CiAg
ICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UGtjczg6IHsKICAgICAgICAgaWYgKHVz
YWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgewotICAgICAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ly8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86
OktleUZvcm1hdCBmb3JtYXQsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0Ogot
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoIXJlc3VsdCkgewpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmV4cG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1h
dCBmb3JtYXQsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjQ4LDcgKzI0OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81OjpzaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhCiB7CiAgICAgYXV0byYgcnNh
U1NBUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtc0RlcHJl
Y2F0ZWQ+KHBhcmFtZXRlcnMpOwogICAgIGlmICgha2V5QWxnb3JpdGhtTWF0Y2hlcyhyc2FTU0FQ
YXJhbWV0ZXJzLCBrZXkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRF
RF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07
CiAgICAgcmV0dXJuIHBsYXRmb3JtU2lnbihyc2FTU0FQYXJhbWV0ZXJzLCBkb3duY2FzdDxDcnlw
dG9LZXlSU0E+KGtleSksIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVD
YWxsYmFjaykpOwogfQogCkBAIC0yNTYsNyArMjU2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0
aG0KIHsKICAgICBhdXRvJiByc2FTU0FQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3Jp
dGhtUnNhU3NhUGFyYW1zRGVwcmVjYXRlZD4ocGFyYW1ldGVycyk7CiAgICAgaWYgKCFrZXlBbGdv
cml0aG1NYXRjaGVzKHJzYVNTQVBhcmFtZXRlcnMsIGtleSkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICByZXR1cm4gcGxhdGZvcm1WZXJpZnkocnNhU1NBUGFy
YW1ldGVycywgIGRvd25jYXN0PENyeXB0b0tleVJTQT4oa2V5KSwgc2lnbmF0dXJlLCBkYXRhLCBX
VEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNB
X09BRVAuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtUlNBX09BRVAuY3BwCmluZGV4IDkwZGFjMzJlYjM4N2Y5YzIxOWEzNzI1NDQ0Y2ZhNmVmMzhh
NTVlMzYuLmNiNTEzYjUzOTIxOGQxMTRhZjc3ZThhZWM4ZDUwZTQxMWU1ZjBkNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9P
QUVQLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1SU0FfT0FFUC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1S
U0FfT0FFUDo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4KIHsKICAgICBBU1NFUlQocGFyYW1ldGVycyk7CiAgICAgaWYgKGtleS0+dHlwZSgpICE9IENy
eXB0b0tleVR5cGU6OlB1YmxpYykgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElE
X0FDQ0VTU19FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJy
b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBsYXRmb3JtRW5jcnlwdChXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUocGxhaW5UZXh0KSwgV1RGTW92ZShj
YWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUp
OwpAQCAtODIsNyArODIsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpkZWNyeXB0
KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogewogICAgIEFTU0VS
VChwYXJhbWV0ZXJzKTsKICAgICBpZiAoa2V5LT50eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHJp
dmF0ZSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElEX0FDQ0VTU19FUlIpOwor
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJyb3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIHBsYXRmb3JtRGVjcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEZNb3ZlKGtleSksIFdURk1vdmUoY2lwaGVyVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKQEAgLTkzLDcgKzkz
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW0KICAgICBjb25zdCBhdXRvJiByc2FQYXJhbWV0
ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zPihwYXJh
bWV0ZXJzKTsKIAogICAgIGlmICh1c2FnZXMgJiAoQ3J5cHRvS2V5VXNhZ2VTaWduIHwgQ3J5cHRv
S2V5VXNhZ2VWZXJpZnkgfCBDcnlwdG9LZXlVc2FnZURlcml2ZUtleSB8IENyeXB0b0tleVVzYWdl
RGVyaXZlQml0cykpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7Cisg
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6
OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmCiAgICAg
ICAgIH0KICAgICAgICAgaXNVc2FnZXNBbGxvd2VkID0gaXNVc2FnZXNBbGxvd2VkIHx8ICF1c2Fn
ZXM7CiAgICAgICAgIGlmICghaXNVc2FnZXNBbGxvd2VkKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5
bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNjksNyAr
MTY5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KFN1YnRsZUNy
eXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgS2V5RGF0YSYKICAgICB9CiAgICAgY2FzZSBTdWJ0bGVD
cnlwdG86OktleUZvcm1hdDo6U3BraTogewogICAgICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMg
XiBDcnlwdG9LZXlVc2FnZUVuY3J5cHQpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVdyYXBL
ZXkpICYmICh1c2FnZXMgXiAoQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0IHwgQ3J5cHRvS2V5VXNhZ2VX
cmFwS2V5KSkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOwor
ICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQz
Nj4KQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBv
cnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhJgogICAgIH0KICAg
ICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODogewogICAgICAgICBpZiAodXNh
Z2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlY3J5cHQpICYmICh1c2FnZXMgXiBDcnlw
dG9LZXlVc2FnZVVud3JhcEtleSkgJiYgKHVzYWdlcyBeIChDcnlwdG9LZXlVc2FnZURlY3J5cHQg
fCBDcnlwdG9LZXlVc2FnZVVud3JhcEtleSkpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVy
cm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTog
PHdlYmtpdC5vcmcvYi8xNjU0MzY+CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwg
S2V5RGF0YSYKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICghcmVzdWx0KSB7CkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0Ff
T0FFUDo6ZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgUmVmPENyeXAK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90
U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjQsNyArMjY0
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmVuY3J5cHQo
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGUKIHsKICAgICBhdXRvJiByc2FPQUVQUGFyYW1l
dGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXNEZXByZWNhdGVkPihw
YXJhbWV0ZXJzKTsKICAgICBpZiAoIWtleUFsZ29yaXRobU1hdGNoZXMocnNhT0FFUFBhcmFtZXRl
cnMsIGtleSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBy
ZXR1cm4gcGxhdGZvcm1FbmNyeXB0KHJzYU9BRVBQYXJhbWV0ZXJzLCBkb3duY2FzdDxDcnlwdG9L
ZXlSU0E+KGtleSksIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxs
YmFjaykpOwogfQogCkBAIC0yNzIsNyArMjcyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRv
QWxnb3JpdGhtUlNBX09BRVA6OmRlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGUK
IHsKICAgICBhdXRvJiByc2FPQUVQUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRo
bVJzYU9hZXBQYXJhbXNEZXByZWNhdGVkPihwYXJhbWV0ZXJzKTsKICAgICBpZiAoIWtleUFsZ29y
aXRobU1hdGNoZXMocnNhT0FFUFBhcmFtZXRlcnMsIGtleSkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICByZXR1cm4gcGxhdGZvcm1EZWNyeXB0KHJzYU9BRVBQ
YXJhbWV0ZXJzLCBkb3duY2FzdDxDcnlwdG9LZXlSU0E+KGtleSksIGRhdGEsIFdURk1vdmUoY2Fs
bGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1Mu
Y3BwCmluZGV4IGMxZDFmNTljNjU4YThmZTJiNjA0ZjlhYTMxNTgyMTlhM2QyZGJiMzguLjM2YWYz
YTk3NGUxYTRmNzI3NWIwYTYxNGIzMzVjYjZhMDc0MmIwNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1Mu
Y3BwCkBAIC01NSw3ICs1NSw3IEBAIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgQ3J5cHRvQWxn
b3JpdGhtUlNBX1BTUzo6aWRlbnRpZmllcigpIGNvbnN0CiB2b2lkIENyeXB0b0FsZ29yaXRobVJT
QV9QU1M6OnNpZ24oc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYg
cGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEs
IFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9u
Q2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29y
a1F1ZXVlKQogewogICAgIGlmIChrZXktPnR5cGUoKSAhPSBDcnlwdG9LZXlUeXBlOjpQcml2YXRl
KSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKElOVkFMSURfQUNDRVNTX0VSUik7CisgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKEludmFsaWRBY2Nlc3NFcnJvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgcGxhdGZvcm1TaWduKFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUo
a2V5KSwgV1RGTW92ZShkYXRhKSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOwpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQV9QU1M6OnNpZ24oc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+JiYgcAogdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfUFNTOjp2ZXJpZnkoc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVm
PENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHNpZ25hdHVyZSwgVmVjdG9yPHVp
bnQ4X3Q+JiYgZGF0YSwgQm9vbENhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNr
JiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdv
cmtRdWV1ZSYgd29ya1F1ZXVlKQogewogICAgIGlmIChrZXktPnR5cGUoKSAhPSBDcnlwdG9LZXlU
eXBlOjpQdWJsaWMpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soSU5WQUxJRF9BQ0NFU1Nf
RVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soSW52YWxpZEFjY2Vzc0Vycm9yKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBwbGF0Zm9ybVZlcmlmeShXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUoc2lnbmF0dXJlKSwgV1RGTW92ZShkYXRhKSwgV1RG
TW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3Jr
UXVldWUpOwpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6Omdl
bmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZQogICAgIGNv
bnN0IGF1dG8mIHJzYVBhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1Sc2FIYXNo
ZWRLZXlHZW5QYXJhbXM+KHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKHVzYWdlcyAmIChDcnlwdG9L
ZXlVc2FnZURlY3J5cHQgfCBDcnlwdG9LZXlVc2FnZUVuY3J5cHQgfCBDcnlwdG9LZXlVc2FnZURl
cml2ZUtleSB8IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cyB8IENyeXB0b0tleVVzYWdlV3JhcEtl
eSB8IENyeXB0b0tleVVzYWdlVW53cmFwS2V5KSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhTWU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBDcnlwdG9B
bGdvcml0aG1SU0FfUFNTOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0
LCBLZXlEYXRhJiYKICAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpz
b25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlzTnVs
bCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB8fCAoa2V5LmQuaXNOdWxsKCkg
JiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkpKSB7Ci0gICAgICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBp
ZiAodXNhZ2VzICYmICFrZXkudXNlLmlzTnVsbCgpICYmIGtleS51c2UgIT0gInNpZyIpIHsKQEAg
LTEzOSw3ICsxMzksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShT
dWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJgogICAgIH0KICAgICBjYXNl
IFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpTcGtpOiB7CiAgICAgICAgIGlmICh1c2FnZXMgJiYg
KHVzYWdlcyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkgewotICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50
YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklY
TUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgQ3J5cHRv
QWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1h
dCwgS2V5RGF0YSYmCiAgICAgfQogICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlBr
Y3M4OiB7CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2ln
bikpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KQEAg
LTE1Niw3ICsxNTYsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShT
dWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJgogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBP
UlRFRF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKQEAgLTIyMSw3ICsy
MjEsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmV4cG9ydEtleShTdWJ0bGVDcnlw
dG86OktleUZvcm1hdCBmb3JtYXQsIFJlZjxDcnlwdAogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIp
OworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwCmluZGV4IGRiNDQ4N2Jk
YTgxYTcyMDJkZGNlY2VkZDQ2ZmQyZGUzZTA1ZjBiOTYuLmNmN2IzZTZiN2ZkNWE3ZGQ3MjQzZDZj
Mzc2NTUzMjhmY2IwZmIyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcApAQCAtMjI2LDEz
ICsyMjYsMTMgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQo
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmEKIEV4Y2VwdGlvbk9yPHZvaWQ+IENy
eXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0
aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5
cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JU
RURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9
CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVj
cnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkJiwgY29uc3Qg
Q3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNr
JiYsIFZvaWRDYWxsYmFjayYmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tX
R0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGht
QUVTX0tXR0NyeXB0LmNwcAppbmRleCA3ZGQxODZjYzc5YjQ2MGZmOGJmZWU1MzlkMWQ2NmRkMmM1
NDQ3MjE3Li5jNWY0NTBkYzkyODVmYmQwNWI0ODc1Mjc5YTQxNGE3ODcyODAzYWYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dD
cnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0
aG1BRVNfS1dHQ3J5cHQuY3BwCkBAIC0xNDMsMTMgKzE0MywxMyBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rv
cjx1aW50OAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9y
bUVuY3J5cHQoY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYs
IFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0b0tl
eUFFUyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lk
Q2FsbGJhY2smJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRp
b24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUhNQUNHQ3J5cHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1ITUFDR0NyeXB0
LmNwcAppbmRleCA2NTkwZTFmYzhjZTU1Njc3Njc2OTA3ODY2NGVhZWQxODAwODljMmRkLi40OWM5
NThjYmNkZGU0Y2M4ZWRlM2E3NGM5Yjc1YWU5ZGYzMGQ2MjJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUhNQUNHQ3J5cHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtSE1BQ0dDcnlwdC5j
cHAKQEAgLTE0NSw3ICsxNDUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1I
TUFDOjpwbGF0Zm9ybVNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcgogewogICAgIGlu
dCBhbGdvcml0aG0gPSBnZXRHQ3J5cHREaWdlc3RBbGdvcml0aG0ocGFyYW1ldGVycy5oYXNoKTsK
ICAgICBpZiAoYWxnb3JpdGhtID09IEdDUllfTUFDX05PTkUpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGF1dG8gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2ln
bmF0dXJlKGFsZ29yaXRobSwga2V5LmtleSgpLCBkYXRhKTsKICAgICBpZiAoc2lnbmF0dXJlKQpA
QCAtMTU5LDcgKzE1OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUhNQUM6
OnBsYXRmb3JtVmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQCiB7CiAgICAgaW50IGFs
Z29yaXRobSA9IGdldEdDcnlwdERpZ2VzdEFsZ29yaXRobShwYXJhbWV0ZXJzLmhhc2gpOwogICAg
IGlmIChhbGdvcml0aG0gPT0gR0NSWV9NQUNfTk9ORSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RT
dXBwb3J0ZWRFcnJvciB9OwogCiAgICAgYXV0byBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1
cmUoYWxnb3JpdGhtLCBrZXkua2V5KCksIGRhdGEpOwogICAgIGlmICghc2lnbmF0dXJlKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJT
QUVTX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R0NyeXB0LmNwcAppbmRleCBlMjAzYzZlNmJh
NDZlYWEzNDBjZmU5YmYyNTA2YzM1MGU4OGEwMzUxLi4xNmE5ZTI1ZDU2Y2ExYzBiMjEzYzJkNDNl
ZjA4MjNjN2YwYTc5ZTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNUdDcnlw
dC5jcHAKQEAgLTE1MiwxMyArMTUyLDEzIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtD
UzFfdjFfNTo6cGxhdGZvcm1EZWNyeXB0KFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0CiBFeGNl
cHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjpwbGF0Zm9ybUVu
Y3J5cHQoY29uc3QgQ3J5cHRvS2V5UlNBJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZl
Y3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+
IENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRGVjcnlwdChjb25zdCBD
cnlwdG9LZXlSU0EmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2sm
JiwgVm9pZENhbGxiYWNrJiYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNUdDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81R0NyeXB0LmNwcAppbmRleCA5MzBjNDYwMTE2NDQ2
MTEzYTM2NzBmNzg4ZjAzOTM5Y2VlYzdmNDU0Li4zMzg5Njg2ZGE0OWRmYTAzMTFjMzAxMjY0MDBl
MWEyYTU3YTM3MTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0Ny
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81R0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81R0NyeXB0
LmNwcApAQCAtMTkzLDEzICsxOTMsMTMgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtD
UzFfdjFfNTo6cGxhdGZvcm1WZXJpZnkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3QKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVNp
Z24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENy
eXB0b0tleVJTQSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYm
LCBWb2lkQ2FsbGJhY2smJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBF
eGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBO
b3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1WZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UnNhU3NhUGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleVJTQSYsIGNvbnN0IENyeXB0
b09wZXJhdGlvbkRhdGEmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgQm9vbENhbGxiYWNr
JiYsIFZvaWRDYWxsYmFjayYmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBX09B
RVBHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0
aG1SU0FfT0FFUEdDcnlwdC5jcHAKaW5kZXggZDVlN2MwZTBiZWFiMzdiZmIyNmI0NTRkYjAyZDkz
OTMxNjY0M2EwMS4uNWNmZjFmMDRlNjkzZDUwNjBkZGYyMmQwNzgwMmM5MTVlM2U2YWFhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0Ff
T0FFUEdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1SU0FfT0FFUEdDcnlwdC5jcHAKQEAgLTE3MCwxMyArMTcwLDEzIEBAIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtUlNBX09BRVA6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FfT0FF
UDo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXNEZXBy
ZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5UlNBJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYs
IFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRv
QWxnb3JpdGhtUnNhT2FlcFBhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlSU0EmLCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNr
JiYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X1NVUFBPUlRFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJy
b3IgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCmluZGV4IGMxNGZlODg1YWE4
MjE0ODg4N2Q2MTk4NDU2MzgyMWM2OWQ4YTBiYWIuLmMxZTY1YWM0MmI5MTEyZDBhMzM4OWQxZjg1
YmZkMDc4M2YxOTg3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
Q3J5cHRvS2V5UlNBR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAKQEAgLTQxOCw3ICs0MTgsNyBAQCBSZWZQdHI8Q3J5cHRv
S2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgaWRlbnRpZgogRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlSU0E6OmV4
cG9ydFNwa2koKSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHVi
bGljKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIFBB
TDo6VEFTTjE6OlN0cnVjdHVyZSByc2FQdWJsaWNLZXk7CiAgICAgewpAQCAtNDg4LDcgKzQ4OCw3
IEBAIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRTcGtp
KCkgY29uc3QKIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBv
cnRQa2NzOCgpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBDcnlwdG9LZXlUeXBlOjpQcml2
YXRlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIFBB
TDo6VEFTTjE6OlN0cnVjdHVyZSByc2FQcml2YXRlS2V5OwogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAppbmRleCBhYzM1NTI0M2NmNDBiZGYwN2YyNjRl
Y2MzYjIwMzg3MjViOTE1YTIxLi5iYjVmMzM1MDA4MDUzYTFmYjMzMDhmMWJiM2ZjNzRkNzQ4YWM4
ZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCkBAIC01
OSw3ICs1OSw3IEBAIEV4Y2VwdGlvbk9yPENyeXB0b0tleVBhaXI+IENyeXB0b0tleUVDOjpnZW5l
cmF0ZVBhaXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpCiB7CiAgICAgYXV0byBuYW1lZEN1
cnZlID0gdG9OYW1lZEN1cnZlKGN1cnZlKTsKICAgICBpZiAoIW5hbWVkQ3VydmUpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGF1dG8gcmVzdWx0ID0gcGxh
dGZvcm1HZW5lcmF0ZVBhaXIoaWRlbnRpZmllciwgKm5hbWVkQ3VydmUsIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgIGlmICghcmVzdWx0KQpAQCAtMTMzLDcgKzEzMyw3IEBAIFJlZlB0cjxDcnlw
dG9LZXlFQz4gQ3J5cHRvS2V5RUM6OmltcG9ydFBrY3M4KENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgaWRlbnRpZmllCiBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleUVDOjpl
eHBvcnRSYXcoKSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gQ3J5cHRvS2V5OjpUeXBlOjpQ
dWJsaWMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAg
cmV0dXJuIHBsYXRmb3JtRXhwb3J0UmF3KCk7CiB9CkBAIC0xNTksNyArMTU5LDcgQEAgSnNvbldl
YktleSBDcnlwdG9LZXlFQzo6ZXhwb3J0SndrKCkgY29uc3QKIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1
aW50OF90Pj4gQ3J5cHRvS2V5RUM6OmV4cG9ydFNwa2koKSBjb25zdAogewogICAgIGlmICh0eXBl
KCkgIT0gQ3J5cHRvS2V5OjpUeXBlOjpQdWJsaWMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIHBsYXRmb3JtRXhwb3J0U3BraSgpOwogfQpA
QCAtMTY3LDcgKzE2Nyw3IEBAIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5
RUM6OmV4cG9ydFNwa2koKSBjb25zdAogRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlw
dG9LZXlFQzo6ZXhwb3J0UGtjczgoKSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gQ3J5cHRv
S2V5OjpUeXBlOjpQcml2YXRlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKIAogICAgIHJldHVybiBwbGF0Zm9ybUV4cG9ydFBrY3M4KCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcAppbmRl
eCBiMDhkMjI2Y2IzOTQ1ZDc0NDk1MTdjOGQ4NzNlODk5Yjk1MTU4ZjM5Li5mODgyMWMwM2Y4ZGUz
NmNmNmI3NjIzZWFjYjk4MDAxZTBkNjYxNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAKQEAgLTEzOCw3ICsxMzgsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVNpZ24oY29u
c3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcgogewogICAgIGF1dG8gYWxnb3JpdGhtID0gY29tbW9u
Q3J5cHRvSE1BQ0FsZ29yaXRobShwYXJhbWV0ZXJzLmhhc2gpOwogICAgIGlmICghYWxnb3JpdGht
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgY2FsbGJhY2so
Y2FsY3VsYXRlU2lnbmF0dXJlKCphbGdvcml0aG0sIGtleS5rZXkoKSwgZGF0YS5maXJzdCwgZGF0
YS5zZWNvbmQpKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUhNQUM6OnBsYXRmb3JtVmVyaWZ5KGNvbnN0IENy
eXB0b0FsZ29yaXRobUhtYWNQCiB7CiAgICAgYXV0byBhbGdvcml0aG0gPSBjb21tb25DcnlwdG9I
TUFDQWxnb3JpdGhtKHBhcmFtZXRlcnMuaGFzaCk7CiAgICAgaWYgKCFhbGdvcml0aG0pCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGF1dG8gc2lnbmF0dXJl
ID0gY2FsY3VsYXRlU2lnbmF0dXJlKCphbGdvcml0aG0sIGtleS5rZXkoKSwgZGF0YS5maXJzdCwg
ZGF0YS5zZWNvbmQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0Ny
eXB0b0tleVJTQU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJT
QU1hYy5jcHAKaW5kZXggZGNiNGFmM2Q1NjA0ZjJkMDgzZWQwZmIyMTE1YzIzZWJlNDE1N2ZkYi4u
NWY4MWZlMWVmMmYxMmU2YmMxMjE3N2MxMjc2NWI5ZTI2YjZiOTY5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcApAQCAtMzE2LDcgKzMxNiw3IEBA
IFJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGlkZW50aWZpCiBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENy
eXB0b0tleVJTQTo6ZXhwb3J0U3BraSgpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBDcnlw
dG9LZXlUeXBlOjpQdWJsaWMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FD
Q0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJv
ciB9OwogCiAgICAgLy8gVGhlIGN1cnJlbnQgU2VjTGlicmFyeSBjYW5ub3Qgb3V0cHV0IGEgdmFs
aWQgU1BLSSBmb3JtYXQgYmluYXJ5LiBIZW5jZSwgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGhhY2su
CiAgICAgLy8gVGhpcyBoYWNrIGNhbiBiZSByZW1vdmVkIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzI5
NTIzMjg2PiBpcyByZXNvbHZlZC4KQEAgLTM3Myw3ICszNzMsNyBAQCBSZWZQdHI8Q3J5cHRvS2V5
UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIg
aWRlbnRpZgogRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlSU0E6OmV4cG9y
dFBrY3M4KCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IENyeXB0b0tleVR5cGU6OlByaXZh
dGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgLy8g
VGhlIGN1cnJlbnQgU2VjTGlicmFyeSBjYW5ub3Qgb3V0cHV0IGEgdmFsaWQgUEtDUzggZm9ybWF0
IGJpbmFyeS4gSGVuY2UsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBoYWNrLgogICAgIC8vIFRoaXMg
aGFjayBjYW4gYmUgcmVtb3ZlZCB3aGVuIDxyZGFyOi8vcHJvYmxlbS8yOTUyMzI4Nj4gaXMgcmVz
b2x2ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwCmluZGV4IDI3YjNjMTAxYTU2ZDBhYWJiYjg2YzA2NDhjOWYxZTVmMmFmYTU3Nzgu
LmZhMjIyNDg0OTkyMmJhYWIyZTdiOWU5MmE1N2M4NjU2Y2E4ODlmZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0xNzAx
LDcgKzE3MDEsNyBAQCBTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0
KCkgY29uc3QKIAogRXhjZXB0aW9uT3I8dm9pZD4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OjpzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb01v
ZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogfQogCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmdldEZvbnRTaXplQ1NTVmFsdWVQcmVmZXJyaW5nS2V5
d29yZCgpCkBAIC00MjY0LDEyICs0MjY0LDEyIEBAIGJvb2wgQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJikKIAogRXhjZXB0aW9uT3I8
dm9pZD4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBFeGNlcHRp
b24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5n
PiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmlu
ZyYpCiB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9
OwogfQogICAgIAogUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCkBA
IC00Mjg0LDcgKzQyODQsNyBAQCBTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZQogCiBFeGNlcHRpb25P
cjxib29sPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwo
Q1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCkKIHsKLSAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiB9CiAKIFJlZjxDU1NWYWx1ZUxpc3Q+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmdldEJhY2tncm91bmRTaG9ydGhhbmRWYWx1ZSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAppbmRleCA1MmRhYTM3ZmFlZDhkYTViZDA3
ZDRhNWM2MWQyNjIxOTA4ZjlkNmZlLi5jODBhMjVjZTA1MTg0NjJkOTY1NmUwYjA2OTNmNzMyMGY1
ZWQ2YjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAKQEAgLTMzMywxMyAr
MzMzLDEzIEBAIEV4Y2VwdGlvbk9yPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0Zv
bnRGYWNlPj4+IENTU0ZvbnRGYWNlU2V0OjptYXRjaGluCiAgICAgYXV0byBzdHlsZSA9IE11dGFi
bGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Rm9udCwgZm9udCwgdHJ1ZSwgSFRN
TFN0YW5kYXJkTW9kZSk7CiAgICAgaWYgKHBhcnNlUmVzdWx0ID09IENTU1BhcnNlcjo6UGFyc2VS
ZXN1bHQ6OkVycm9yKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIEZvbnRTZWxl
Y3Rpb25SZXF1ZXN0IHJlcXVlc3QgPSBjb21wdXRlRm9udFNlbGVjdGlvblJlcXVlc3Qoc3R5bGUu
Z2V0KCkpOwogCiAgICAgYXV0byBmYW1pbHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwogICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PihmYW1pbHku
Z2V0KCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBDU1NWYWx1ZUxpc3QmIGZh
bWlseUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpmYW1pbHkpOwogCiAgICAgSGFzaFNl
dDxBdG9taWNTdHJpbmc+IHVuaXF1ZUZhbWlsaWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyb3VwaW5nUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JvdXBp
bmdSdWxlLmNwcAppbmRleCA3Yzk5N2ZjNzQxYzVlZThhYWRkN2Y3MmI4ZjI4MWMwYTE5MjZhZWUz
Li5kZTZmMzlkM2Y1ZDg3MzFkOTllNWViM2M5NjhlMjlhZDFlYWNiZmU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JvdXBpbmdSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JvdXBpbmdSdWxlLmNwcApAQCAtNjEsMjYgKzYxLDI2IEBAIEV4Y2VwdGlvbk9y
PHVuc2lnbmVkPiBDU1NHcm91cGluZ1J1bGU6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxl
U3RyaW5nLCB1bnNpCiAgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCkg
PT0gbV9ncm91cFJ1bGUtPmNoaWxkUnVsZXMoKS5zaXplKCkpOwogCiAgICAgaWYgKGluZGV4ID4g
bV9ncm91cFJ1bGUtPmNoaWxkUnVsZXMoKS5zaXplKCkpIHsKLSAgICAgICAgLy8gSU5ERVhfU0la
RV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIG5vdCBhIHZhbGlkIGluc2Vy
dGlvbiBwb2ludC4KLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07
CisgICAgICAgIC8vIEluZGV4U2l6ZUVycm9yOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBpbmRl
eCBpcyBub3QgYSB2YWxpZCBpbnNlcnRpb24gcG9pbnQuCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbmRleFNpemVFcnJvciB9OwogICAgIH0KIAogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IG5l
d1J1bGUgPSBDU1NQYXJzZXI6OnBhcnNlUnVsZShwYXJzZXJDb250ZXh0KCksIHN0eWxlU2hlZXQg
PyAmc3R5bGVTaGVldC0+Y29udGVudHMoKSA6IG51bGxwdHIsIHJ1bGVTdHJpbmcpOwogICAgIGlm
ICghbmV3UnVsZSkgewotICAgICAgICAvLyBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNp
ZmllZCBydWxlIGhhcyBhIHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgLy8gU3ludGF4RXJyb3I6
IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHJ1bGUgaGFzIGEgc3ludGF4IGVycm9yIGFuZCBpcyB1
bnBhcnNhYmxlLgorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAg
ICB9CiAKICAgICBpZiAobmV3UnVsZS0+aXNJbXBvcnRSdWxlKCkgfHwgbmV3UnVsZS0+aXNOYW1l
c3BhY2VSdWxlKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGFuIEhJRVJBUkNIWV9SRVFVRVNUX0VS
UiBzaG91bGQgYWxzbyBiZSB0aHJvd24gZm9yIGEgQGNoYXJzZXQgb3IgYSBuZXN0ZWQKLSAgICAg
ICAgLy8gQG1lZGlhIHJ1bGUuIFRoZXkgYXJlIGN1cnJlbnRseSBub3QgZ2V0dGluZyBwYXJzZWQs
IHJlc3VsdGluZyBpbiBhIFNZTlRBWF9FUlIKKyAgICAgICAgLy8gRklYTUU6IGFuIEhpZXJhcmNo
eVJlcXVlc3RFcnJvciBzaG91bGQgYWxzbyBiZSB0aHJvd24gZm9yIGEgQGNoYXJzZXQgb3IgYSBu
ZXN0ZWQKKyAgICAgICAgLy8gQG1lZGlhIHJ1bGUuIFRoZXkgYXJlIGN1cnJlbnRseSBub3QgZ2V0
dGluZyBwYXJzZWQsIHJlc3VsdGluZyBpbiBhIFN5bnRheEVycm9yCiAgICAgICAgIC8vIHRvIGdl
dCByYWlzZWQgYWJvdmUuCiAKLSAgICAgICAgLy8gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBSYWlz
ZWQgaWYgdGhlIHJ1bGUgY2Fubm90IGJlIGluc2VydGVkIGF0IHRoZSBzcGVjaWZpZWQKKyAgICAg
ICAgLy8gSGllcmFyY2h5UmVxdWVzdEVycm9yOiBSYWlzZWQgaWYgdGhlIHJ1bGUgY2Fubm90IGJl
IGluc2VydGVkIGF0IHRoZSBzcGVjaWZpZWQKICAgICAgICAgLy8gaW5kZXgsIGUuZy4sIGlmIGFu
IEBpbXBvcnQgcnVsZSBpcyBpbnNlcnRlZCBhZnRlciBhIHN0YW5kYXJkIHJ1bGUgc2V0IG9yIG90
aGVyCiAgICAgICAgIC8vIGF0LXJ1bGUuCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBISUVS
QVJDSFlfUkVRVUVTVF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNo
eVJlcXVlc3RFcnJvciB9OwogICAgIH0KICAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25T
Y29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwogCkBAIC05NSw5ICs5NSw5IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IENTU0dyb3VwaW5nUnVsZTo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCkKICAgICBB
U1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBtX2dyb3VwUnVsZS0+Y2hp
bGRSdWxlcygpLnNpemUoKSk7CiAKICAgICBpZiAoaW5kZXggPj0gbV9ncm91cFJ1bGUtPmNoaWxk
UnVsZXMoKS5zaXplKCkpIHsKLSAgICAgICAgLy8gSU5ERVhfU0laRV9FUlI6IFJhaXNlZCBpZiB0
aGUgc3BlY2lmaWVkIGluZGV4IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYQorICAgICAgICAvLyBJ
bmRleFNpemVFcnJvcjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgaW5kZXggZG9lcyBub3QgY29y
cmVzcG9uZCB0byBhCiAgICAgICAgIC8vIHJ1bGUgaW4gdGhlIG1lZGlhIHJ1bGUgbGlzdC4KLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIH0KIAogICAgIENTU1N0eWxlU2hl
ZXQ6OlJ1bGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAppbmRleCAxMDlmZGMyMmQyNDkwZjA4ZjdjNmRmMDNh
ZTc2YzcwNWZiNTgxMDFkLi40YmM0OWIzZDkzZTk0Y2Q1MTdkMmI2M2NhOThiNDY1NjQ4ODk3Zjdh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKQEAgLTcyMiw3ICs3
MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0RmxvYXRWYWx1
ZSh1bnNpZ25lZCBzaG9ydCwgZG91YmxlKQogICAgIC8vIEtlZXBpbmcgdmFsdWVzIGltbXV0YWJs
ZSBtYWtlcyBvcHRpbWl6YXRpb25zIGVhc2llciBhbmQgYWxsb3dzIHNoYXJpbmcgb2YgdGhlIHBy
aW1pdGl2ZSB2YWx1ZSBvYmplY3RzLgogICAgIC8vIE5vIG90aGVyIGVuZ2luZSBzdXBwb3J0cyBt
dXRhdGluZyBzdHlsZSB0aHJvdWdoIHRoaXMgQVBJLiBDb21wdXRlZCBzdHlsZSBpcyBhbHdheXMg
cmVhZC1vbmx5IGFueXdheS4KICAgICAvLyBTdXBwb3J0aW5nIHNldHRlciB3b3VsZCByZXF1aXJl
IG1ha2luZyBwcmltaXRpdmUgdmFsdWUgY29weS1vbi13cml0ZSBhbmQgdGFraW5nIGNhcmUgb2Yg
c3R5bGUgaW52YWxpZGF0aW9uLgotICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25B
bGxvd2VkRXJyb3IgfTsKIH0KIAogZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJzaW9u
VG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKFVuaXRUeXBlIHVuaXRUeXBlKQpAQCAtNzgxLDcg
Kzc4MSw3IEBAIEV4Y2VwdGlvbk9yPGZsb2F0PiBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0RmxvYXRW
YWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkgY29uCiB7CiAgICAgYXV0byByZXN1bHQgPSBk
b3VibGVWYWx1ZUludGVybmFsKHN0YXRpY19jYXN0PFVuaXRUeXBlPih1bml0VHlwZSkpOwogICAg
IGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
ICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4ocmVzdWx0LnZhbHVlKCkpOwogfQogCkBAIC04NzQs
NyArODc0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ1NTUHJpbWl0aXZlVmFsdWU6OnNldFN0cmlu
Z1ZhbHVlKHVuc2lnbmVkIHNob3J0LCBjb25zdCBTdHJpbmcKICAgICAvLyBLZWVwaW5nIHZhbHVl
cyBpbW11dGFibGUgbWFrZXMgb3B0aW1pemF0aW9ucyBlYXNpZXIgYW5kIGFsbG93cyBzaGFyaW5n
IG9mIHRoZSBwcmltaXRpdmUgdmFsdWUgb2JqZWN0cy4KICAgICAvLyBObyBvdGhlciBlbmdpbmUg
c3VwcG9ydHMgbXV0YXRpbmcgc3R5bGUgdGhyb3VnaCB0aGlzIEFQSS4gQ29tcHV0ZWQgc3R5bGUg
aXMgYWx3YXlzIHJlYWQtb25seSBhbnl3YXkuCiAgICAgLy8gU3VwcG9ydGluZyBzZXR0ZXIgd291
bGQgcmVxdWlyZSBtYWtpbmcgcHJpbWl0aXZlIHZhbHVlIGNvcHktb24td3JpdGUgYW5kIHRha2lu
ZyBjYXJlIG9mIHN0eWxlIGludmFsaWRhdGlvbi4KLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9k
aWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmluZz4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmdldFN0cmluZ1ZhbHVlKCkgY29uc3QKQEAgLTg5MSw3ICs4OTEsNyBAQCBF
eGNlcHRpb25PcjxTdHJpbmc+IENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRTdHJpbmdWYWx1ZSgpIGNv
bnN0CiAgICAgY2FzZSBDU1NfUFJPUEVSVFlfSUQ6CiAgICAgICAgIHJldHVybiBTdHJpbmcgeyBw
cm9wZXJ0eU5hbWUobV92YWx1ZS5wcm9wZXJ0eUlEKS5zdHJpbmcoKSB9OwogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIH0KIH0KIApA
QCAtOTE2LDIxICs5MTYsMjEgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpzdHJpbmdWYWx1
ZSgpIGNvbnN0CiBFeGNlcHRpb25PcjxDb3VudGVyJj4gQ1NTUHJpbWl0aXZlVmFsdWU6OmdldENv
dW50ZXJWYWx1ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcHJpbWl0aXZlVW5pdFR5cGUgIT0gQ1NT
X0NPVU5URVIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAg
IHJldHVybiAqbV92YWx1ZS5jb3VudGVyOwogfQogCiBFeGNlcHRpb25PcjxSZWN0Jj4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmdldFJlY3RWYWx1ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcHJpbWl0aXZl
VW5pdFR5cGUgIT0gQ1NTX1JFQ1QpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElE
X0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NF
cnJvciB9OwogICAgIHJldHVybiAqbV92YWx1ZS5yZWN0OwogfQogCiBFeGNlcHRpb25PcjxSZWY8
UkdCQ29sb3I+PiBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0UkdCQ29sb3JWYWx1ZSgpIGNvbnN0CiB7
CiAgICAgaWYgKG1fcHJpbWl0aXZlVW5pdFR5cGUgIT0gQ1NTX1JHQkNPTE9SKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBub3QgcmV0dXJuIGEgbmV3IG9iamVjdCBmb3IgZWFjaCBpbnZvY2F0aW9uLgogICAgIHJl
dHVybiBSR0JDb2xvcjo6Y3JlYXRlKG1fdmFsdWUuY29sb3ItPnJnYigpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCBjYzU1OTQyOTRjZDVlMzQzYjA3YmFkZTkwZTY4YjE4
M2JjZGU2YTBhLi4xZWNjNWJhMzcwODc5MmZhNjM3ZjE2YjEyY2Q3M2UxMWVmYjA0YTYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBAIC0yNzEsMTcgKzI3MSwxNyBAQCBFeGNl
cHRpb25Pcjx1bnNpZ25lZD4gQ1NTU3R5bGVTaGVldDo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcm
IHJ1bGVTdHJpbmcsIHVuc2lnbgogICAgIEFTU0VSVChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMu
aXNFbXB0eSgpIHx8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCkgPT0gbV9jb250ZW50
cy0+cnVsZUNvdW50KCkpOwogCiAgICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSA9
IENTU1BhcnNlcjo6cGFyc2VSdWxlKG1fY29udGVudHMuZ2V0KCkucGFyc2VyQ29udGV4dCgpLCBt
X2NvbnRlbnRzLnB0cigpLCBydWxlU3RyaW5nKTsKIAogICAgIGlmICghcnVsZSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiAKICAgICBSdWxlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3Bl
KHRoaXMsIFJ1bGVJbnNlcnRpb24sIGlzPFN0eWxlUnVsZUtleWZyYW1lcz4oKnJ1bGUpID8gZG93
bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlLmdldCgpKSA6IG51bGxwdHIpOwogCiAgICAg
Ym9vbCBzdWNjZXNzID0gbV9jb250ZW50cy5nZXQoKS53cmFwcGVySW5zZXJ0UnVsZShydWxlLnJl
bGVhc2VOb25OdWxsKCksIGluZGV4KTsKICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBISUVSQVJDSFlfUkVRVUVTVF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9OwogICAgIGlmICghbV9jaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzLmlzRW1wdHkoKSkKICAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJz
Lmluc2VydChpbmRleCwgUmVmUHRyPENTU1J1bGU+KCkpOwogCkBAIC0yOTMsNyArMjkzLDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gQ1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRl
eCkKICAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1wdHkoKSB8fCBtX2No
aWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IG1fY29udGVudHMtPnJ1bGVDb3VudCgpKTsK
IAogICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVF
cnJvciB9OwogICAgIFJ1bGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CiAKICAg
ICBtX2NvbnRlbnRzLT53cmFwcGVyRGVsZXRlUnVsZShpbmRleCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVhZE9ubHkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0RPTU1hdHJpeFJlYWRPbmx5LmNwcAppbmRleCAwYTEzYjRkMDg0ZmMwMjIzYWU0YzliZTNjOGY0
ZGJkOTE3MGI0NjQxLi41NmVjZjYxNmQxMzM5M2I2MjMyZWM0NDdmZjlmYmZlOTk1Mjg0OWUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVhZE9ubHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5jcHAKQEAgLTE3MSw3ICsxNzEs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01NYXRyaXhSZWFkT25seTo6c2V0TWF0cml4VmFsdWUo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiAKICAgICBhdXRvIHN0eWxlRGVjbGFyYXRpb24gPSBNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKHN0eWxlRGVjbGFyYXRpb24sIENTU1Byb3BlcnR5VHJhbnNmb3JtLCBzdHJpbmcsIHRydWUs
IEhUTUxTdGFuZGFyZE1vZGUpID09IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIC8vIENvbnZlcnQgdG8gVHJhbnNmb3JtT3Bl
cmF0aW9ucy4gVGhpcyBjYW4gZmFpbCBpZiBhIHByb3BlcnR5IHJlcXVpcmVzIHN0eWxlIChpLmUu
LCBwYXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQogICAgIGF1dG8gdmFsdWUgPSBzdHlsZURlY2xh
cmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKQEAgLTE4
MiwxNCArMTgyLDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTU1hdHJpeFJlYWRPbmx5OjpzZXRN
YXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIAogICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKICAgICBpZiAoIXRyYW5zZm9ybXNGb3JWYWx1ZSgqdmFsdWUsIENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgb3BlcmF0aW9ucykpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhF
cnJvciB9OwogCiAgICAgbV9pczJEID0gdHJ1ZTsKICAgICAvLyBDb252ZXJ0IHRyYW5zZm9ybSBv
cGVyYXRpb25zIHRvIGEgVHJhbnNmb3JtYXRpb25NYXRyaXguIFRoaXMgY2FuIGZhaWwgaWYgYSBw
YXJhbWV0ZXIgaGFzIGEgcGVyY2VudGFnZSAoJyUnKS4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXg7CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKSkgewogICAgICAgICBpZiAob3BlcmF0aW9uLT5hcHBseShtYXRyaXgsIEludFNpemUoMCwg
MCkpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgICAgICBpZiAob3Bl
cmF0aW9uLT5pczNET3BlcmF0aW9uKCkpCiAgICAgICAgICAgICBtX2lzMkQgPSBmYWxzZTsKICAg
ICB9CkBAIC0zNTUsNyArMzU1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPEZsb2F0NjRBcnJheT4+IERP
TU1hdHJpeFJlYWRPbmx5Ojp0b0Zsb2F0NjRBcnJheSgpIGNvbnN0CiBFeGNlcHRpb25PcjxTdHJp
bmc+IERPTU1hdHJpeFJlYWRPbmx5Ojp0b1N0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX21h
dHJpeC5jb250YWluc09ubHlGaW5pdGVWYWx1ZXMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIk1hdHJpeCBjb250YWlucyBub24t
ZmluaXRlIHZhbHVlcyIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciwgQVNDSUlMaXRlcmFsKCJNYXRyaXggY29udGFpbnMgbm9uLWZpbml0ZSB2YWx1ZXMi
KSB9OwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGlmIChpczJEKCkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWUu
Y3BwCmluZGV4IDUwZTI2YTM4NjQxOWJiOWJlZjJhZGZkNTkzM2MzNzVlOWYzNDBhYzIuLjVhZjBj
ZGU0YTllMDY4NzIwYzg4OGMxZjhlYTlhMDkxMGJjOTYyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlLmNwcApAQCAtNjYsNyAr
NjYsNyBAQCBFeGNlcHRpb25PcjxSZWY8RGVwcmVjYXRlZENTU09NQ291bnRlcj4+IERlcHJlY2F0
ZWRDU1NPTVByaW1pdGl2ZVZhbHVlOjpnZXRDb3VudAogewogICAgIEV4Y2VwdGlvbk9yPENvdW50
ZXImPiBjb3VudGVyID0gbV92YWx1ZS0+Z2V0Q291bnRlclZhbHVlKCk7CiAgICAgaWYgKGNvdW50
ZXIuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FD
Q0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJv
ciB9OwogICAgIHJldHVybiBEZXByZWNhdGVkQ1NTT01Db3VudGVyOjpjcmVhdGUoY291bnRlci5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSwgbV9vd25lci5nZXQoKSk7CiB9CiAgICAgCkBAIC03NCw3ICs3
NCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxEZXByZWNhdGVkQ1NTT01SZWN0Pj4gRGVwcmVjYXRlZENT
U09NUHJpbWl0aXZlVmFsdWU6OmdldFJlY3RWYWx1CiB7CiAgICAgRXhjZXB0aW9uT3I8UmVjdCY+
IHJlY3QgPSBtX3ZhbHVlLT5nZXRSZWN0VmFsdWUoKTsKICAgICBpZiAocmVjdC5oYXNFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgcmV0
dXJuIERlcHJlY2F0ZWRDU1NPTVJlY3Q6OmNyZWF0ZShyZWN0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
LCBtX293bmVyLmdldCgpKTsKIH0KIApAQCAtODIsNyArODIsNyBAQCBFeGNlcHRpb25PcjxSZWY8
RGVwcmVjYXRlZENTU09NUkdCQ29sb3I+PiBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZTo6
Z2V0UkdCQwogewogICAgIEV4Y2VwdGlvbk9yPFJlZjxSR0JDb2xvcj4+IGNvbG9yID0gbV92YWx1
ZS0+Z2V0UkdCQ29sb3JWYWx1ZSgpOwogICAgIGlmIChjb2xvci5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgcmV0dXJuIERlcHJl
Y2F0ZWRDU1NPTVJHQkNvbG9yOjpjcmVhdGUoY29sb3IucmVsZWFzZVJldHVyblZhbHVlKCksIG1f
b3duZXIuZ2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAppbmRleCA2MmQ3NDM5ZTQ4
ZjI5NzU2MGJhOGRlNjVkNzljOTk3NmI5Yzg3NDVhLi42Y2ZmN2ZlMDljM2JiNjc1MzI5N2IxZDBi
MzQwMjBlMGUwZTY4MTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKQEAgLTY2LDcgKzY2LDcg
QEAgRXhjZXB0aW9uT3I8UmVmPEZvbnRGYWNlPj4gRm9udEZhY2U6OmNyZWF0ZShEb2N1bWVudCYg
ZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZmEKICAgICAgICAgWyZdIChTdHJpbmcmIHN0cmluZykg
LT4gRXhjZXB0aW9uT3I8dm9pZD4gewogICAgICAgICAgICAgYXV0byB2YWx1ZSA9IEZvbnRGYWNl
OjpwYXJzZVN0cmluZyhzdHJpbmcsIENTU1Byb3BlcnR5U3JjKTsKICAgICAgICAgICAgIGlmICgh
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IgfTsKICAgICAgICAgICAgIENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2Vz
KHJlc3VsdC0+YmFja2luZygpLCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSksICZkb2N1
bWVudCwgZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfSwKQEAgLTE1
Miw3NCArMTUyLDc0IEBAIFJlZlB0cjxDU1NWYWx1ZT4gRm9udEZhY2U6OnBhcnNlU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQcm9wZXJ0eUlEIHByb3BlCiBFeGNlcHRpb25Pcjx2b2lk
PiBGb250RmFjZTo6c2V0RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIGlmIChm
YW1pbHkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwogICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VTdHJpbmcoZmFtaWx5
LCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpKQogICAgICAgICBzdWNjZXNzID0gbV9iYWNraW5nLT5z
ZXRGYW1pbGllcygqdmFsdWUpOwogICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZh
Y2U6OnNldFN0eWxlKGNvbnN0IFN0cmluZyYgc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBpZiAoYXV0byB2YWx1ZSA9
IHBhcnNlU3RyaW5nKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSkpIHsKICAgICAgICAgbV9i
YWNraW5nLT5zZXRTdHlsZSgqdmFsdWUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KLSAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24g
eyBTeW50YXhFcnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0V2Vp
Z2h0KGNvbnN0IFN0cmluZyYgd2VpZ2h0KQogewogICAgIGlmICh3ZWlnaHQuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VT
dHJpbmcod2VpZ2h0LCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpKSB7CiAgICAgICAgIG1fYmFja2lu
Zy0+c2V0V2VpZ2h0KCp2YWx1ZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQotICAgIHJl
dHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5
bnRheEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNo
KGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKIHsKICAgICBpZiAoc3RyZXRjaC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0
cmluZyhzdHJldGNoLCBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoKSkgewogICAgICAgICBtX2JhY2tp
bmctPnNldFN0cmV0Y2goKnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9Ci0gICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldFVuaWNv
ZGVSYW5nZShjb25zdCBTdHJpbmcmIHVuaWNvZGVSYW5nZSkKIHsKICAgICBpZiAodW5pY29kZVJh
bmdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKHVuaWNvZGVS
YW5nZSwgQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2UpKQogICAgICAgICBzdWNjZXNzID0gbV9iYWNr
aW5nLT5zZXRVbmljb2RlUmFuZ2UoKnZhbHVlKTsKICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTeW50YXhFcnJvciB9OwogICAgIHJldHVybiB7IH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IEZvbnRGYWNlOjpzZXRWYXJpYW50KGNvbnN0IFN0cmluZyYgdmFyaWFudCkKIHsKICAgICBp
ZiAodmFyaWFudC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAg
YXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIGF1dG8g
cmVzdWx0ID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRWYXJp
YW50LCB2YXJpYW50LCB0cnVlLCBIVE1MU3RhbmRhcmRNb2RlKTsKICAgICBpZiAocmVzdWx0ID09
IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3Ig
fTsKIAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBtdWNoIGJldHRlciB0byBzdGFnZSB0aGUgbmV3
IHNldHRpbmdzIGFuZCBzZXQgdGhlbSBhbGwgYXQgb25jZQogICAgIC8vIGluc3RlYWQgb2YgdGhp
cyBkYW5jZSB3aGVyZSB3ZSBtYWtlIGEgYmFja3VwIGFuZCByZXZlcnQgdG8gaXQgaWYgc29tZXRo
aW5nIGZhaWxzLgpAQCAtMjYwLDcgKzI2MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNl
OjpzZXRWYXJpYW50KGNvbnN0IFN0cmluZyYgdmFyaWFudCkKIAogICAgIGlmICghc3VjY2Vzcykg
ewogICAgICAgICBtX2JhY2tpbmctPnNldFZhcmlhbnRTZXR0aW5ncyhiYWNrdXApOwotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwpAQCAtMjY5LDEx
ICsyNjksMTEgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldFZhcmlhbnQoY29uc3Qg
U3RyaW5nJiB2YXJpYW50KQogRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldEZlYXR1cmVT
ZXR0aW5ncyhjb25zdCBTdHJpbmcmIGZlYXR1cmVTZXR0aW5ncykKIHsKICAgICBpZiAoZmVhdHVy
ZVNldHRpbmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBh
dXRvIHZhbHVlID0gcGFyc2VTdHJpbmcoZmVhdHVyZVNldHRpbmdzLCBDU1NQcm9wZXJ0eUZvbnRG
ZWF0dXJlU2V0dGluZ3MpOwogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwogICAgIG1fYmFja2luZy0+c2V0RmVhdHVyZVNldHRpbmdzKCp2YWx1ZSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KQEAgLTQyNyw3ICs0MjcsNyBAQCB2b2lkIEZvbnRGYWNlOjpmb250U3RhdGVD
aGFuZ2VkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzLCBDU1NGb250Rgog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NGb250RmFjZTo6U3RhdHVzOjpGYWlsdXJlOgog
ICAgICAgICBpZiAobV9wcm9taXNlKQotICAgICAgICAgICAgc3RkOjpleGNoYW5nZShtX3Byb21p
c2UsIHN0ZDo6bnVsbG9wdCktPnJlamVjdChORVRXT1JLX0VSUik7CisgICAgICAgICAgICBzdGQ6
OmV4Y2hhbmdlKG1fcHJvbWlzZSwgc3RkOjpudWxsb3B0KS0+cmVqZWN0KE5ldHdvcmtFcnJvcik7
CiAgICAgICAgIGRlcmVmKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU0ZvbnRGYWNl
OjpTdGF0dXM6OlBlbmRpbmc6CkBAIC00NDksNyArNDQ5LDcgQEAgdm9pZCBGb250RmFjZTo6cmVn
aXN0ZXJMb2FkZWQoUHJvbWlzZSYmIHByb21pc2UpCiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVkT3V0OgogICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0
YXR1czo6RmFpbHVyZToKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoTkVUV09SS19FUlIpOworICAg
ICAgICBwcm9taXNlLnJlamVjdChOZXR3b3JrRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5jcHAKaW5kZXggMGI0OTY4NTAzMTM1NjIyZTc2
NGE5MTQzYmE3YmY1YTVmMTFlMjg2Zi4uZmQ4YzU4YzIzYmUyYzZjNjM3YTliNGJkM2JiZGIwYzAw
ODE4MzBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwCkBAIC0xNDAsNyArMTQwLDcg
QEAgdm9pZCBGb250RmFjZVNldDo6bG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgTG9hZFByb21pc2UmJiBwcm8KIAogICAgIGZvciAoYXV0byYgZmFjZSA6IG1hdGNo
aW5nRmFjZXMpIHsKICAgICAgICAgaWYgKGZhY2UuZ2V0KCkuc3RhdHVzKCkgPT0gQ1NTRm9udEZh
Y2U6OlN0YXR1czo6RmFpbHVyZSkgewotICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoTkVUV09S
S19FUlIpOworICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoTmV0d29ya0Vycm9yKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lk
IEZvbnRGYWNlU2V0OjpmYWNlRmluaXNoZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENTU0ZvbnRGYWNl
OjpTdGF0dXMgbmV3U3RhdHVzKQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgQVNTRVJUKG5ld1N0YXR1cyA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpGYWlsdXJl
KTsKLSAgICAgICAgICAgIHBlbmRpbmdQcm9taXNlLT5wcm9taXNlLnJlamVjdChORVRXT1JLX0VS
Uik7CisgICAgICAgICAgICBwZW5kaW5nUHJvbWlzZS0+cHJvbWlzZS5yZWplY3QoTmV0d29ya0Vy
cm9yKTsKICAgICAgICAgICAgIHBlbmRpbmdQcm9taXNlLT5oYXNSZWFjaGVkVGVybWluYWxTdGF0
ZSA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCmluZGV4
IDg4Y2EyZTE4Y2E3ZTc1MjI5YTAyYjVlMDIxNGQ1NmQ2MDAxMjY5NTAuLjQyZmExZjE4YTIyNTY3
NzJmOGJiM2RhZjE3ODBjNTEyOGY0MzM3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCkBA
IC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAqIGRvY3VtZW50LnN0eWxlU2hl
ZXRzWzBdLm1lZGlhLm1lZGlhVGV4dCA9ICJzY3JlZW4gYW5kIHJlc29sdXRpb24gPiA0MGRwaSIg
d2lsbCBiZSBvayBhbmQKICAqIGVuYWJsZWQsIHdoaWxlCiAgKiBkb2N1bWVudC5zdHlsZVNoZWV0
c1swXS5jc3NSdWxlc1swXS5tZWRpYS5tZWRpYVRleHQgPSAic2NyZWVuIGFuZCByZXNvbHV0aW9u
ID4gNDBkcGkiIHdpbGwKLSAqIHRocm93IFNZTlRBWF9FUlIgZXhjZXB0aW9uLgorICogdGhyb3cg
U3ludGF4RXJyb3IgZXhjZXB0aW9uLgogICovCiAgICAgCiBSZWY8TWVkaWFRdWVyeVNldD4gTWVk
aWFRdWVyeVNldDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWVkaWFTdHJpbmcpCkBAIC0yMDQsNyAr
MjA0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVkaWFMaXN0OjpkZWxldGVNZWRpdW0oY29uc3Qg
U3RyaW5nJiBtZWRpdW0pCiAKICAgICBib29sIHN1Y2Nlc3MgPSBtX21lZGlhUXVlcmllcy0+cmVt
b3ZlKG1lZGl1bSk7CiAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRF
cnJvciB9OwogICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpCiAgICAgICAgIG1fcGFyZW50U3R5
bGVTaGVldC0+ZGlkTXV0YXRlKCk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTIxNiw4ICsyMTYsOCBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBNZWRpYUxpc3Q6OmFwcGVuZE1lZGl1bShjb25zdCBTdHJpbmcm
IG1lZGl1bSkKIAogICAgIGJvb2wgc3VjY2VzcyA9IG1fbWVkaWFRdWVyaWVzLT5hZGQobWVkaXVt
KTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHJl
YWxseSBiZSBJTlZBTElEX0NIQVJBQ1RFUl9FUlI/Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgfTsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlz
IHJlYWxseSBiZSBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I/CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKICAgICB9CiAgICAgaWYgKG1fcGFyZW50U3R5
bGVTaGVldCkKICAgICAgICAgbV9wYXJlbnRTdHlsZVNoZWV0LT5kaWRNdXRhdGUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5j
cHAKaW5kZXggODFlODEwYmJjYWE2YTQxZWI5ZWZhMjM3Y2M0MzZkYjI0NDExYmFjMC4uMDg0Y2Jj
YTA0ZWM4NmNkNmY1YWU3MzZhZjk5ZDRlNTFlZDAzYjM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTI0OSw3
ICsyNDksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcAogICAgIGRpZE11dGF0ZShjaGFuZ2Vk
ID8gUHJvcGVydHlDaGFuZ2VkIDogTm9DaGFuZ2VzKTsKIAogICAgIGlmIChjaGFuZ2VkKSB7Ci0g
ICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIG9mIHBhcnNpbmcg
ZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5LAorICAg
ICAgICAvLyBDU1MgRE9NIHJlcXVpcmVzIHJhaXNpbmcgU3ludGF4RXJyb3Igb2YgcGFyc2luZyBm
YWlsZWQsIGJ1dCB0aGlzIGlzIHRvbyBkYW5nZXJvdXMgZm9yIGNvbXBhdGliaWxpdHksCiAgICAg
ICAgIC8vIHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5Nj4u
CiAgICAgICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAppbmRleCBkOTA4OGUwYTBmYzIzMGNk
NTJkY2M4MjVhYzE5ZDk5MTZmNjkwYmY2Li4wYzVkNjk1MGFiMWY1MGM3YzhkYmM3ZjZhNDI5ZWZk
N2EzOTNkZmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcApAQCAtNjgs
NyArNjgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZh
bHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogCiAgICAgYXV0byBzdHlsZURlY2xhcmF0aW9uID0g
TXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgaWYgKENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShzdHlsZURlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgc3RyaW5nLCB0
cnVlLCBIVE1MU3RhbmRhcmRNb2RlKSA9PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcikK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICAvLyBDb252ZXJ0IHRvIFRyYW5zZm9y
bU9wZXJhdGlvbnMuIFRoaXMgY2FuIGZhaWwgaWYgYSBwcm9wZXJ0eSByZXF1aXJlcyBzdHlsZSAo
aS5lLiwgcGFyYW0gdXNlcyAnZW1zJyBvciAnZXhzJykKICAgICBhdXRvIHZhbHVlID0gc3R5bGVE
ZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CkBA
IC03OSwxMyArNzksMTMgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViS2l0Q1NTTWF0cml4OjpzZXRN
YXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIAogICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKICAgICBpZiAoIXRyYW5zZm9ybXNGb3JWYWx1ZSgqdmFsdWUsIENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgb3BlcmF0aW9ucykpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhF
cnJvciB9OwogCiAgICAgLy8gQ29udmVydCB0cmFuc2Zvcm0gb3BlcmF0aW9ucyB0byBhIFRyYW5z
Zm9ybWF0aW9uTWF0cml4LiBUaGlzIGNhbiBmYWlsIGlmIGEgcGFyYW1ldGVyIGhhcyBhIHBlcmNl
bnRhZ2UgKCclJykuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgIGZvciAo
YXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKICAgICAgICAgaWYg
KG9wZXJhdGlvbi0+YXBwbHkobWF0cml4LCBJbnRTaXplKDAsIDApKSkKLSAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICB9CiAgICAgbV9tYXRyaXggPSBtYXRyaXg7CiAgICAg
cmV0dXJuIHsgfTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBFeGNlcHRpb25PcjxSZWY8V2ViS2l0Q1NT
TWF0cml4Pj4gV2ViS2l0Q1NTTWF0cml4OjppbnZlcnNlKCkgY29uc3QKIHsKICAgICBhdXRvIGlu
dmVyc2UgPSBtX21hdHJpeC5pbnZlcnNlKCk7CiAgICAgaWYgKCFpbnZlcnNlKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIGNyZWF0ZShpbnZlcnNl
LnZhbHVlKCkpOwogfQogCkBAIC0yMDAsNyArMjAwLDcgQEAgUmVmPFdlYktpdENTU01hdHJpeD4g
V2ViS2l0Q1NTTWF0cml4Ojpza2V3WShkb3VibGUgYW5nbGUpIGNvbnN0CiBFeGNlcHRpb25PcjxT
dHJpbmc+IFdlYktpdENTU01hdHJpeDo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIGlmICghbV9t
YXRyaXguY29udGFpbnNPbmx5RmluaXRlVmFsdWVzKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJNYXRyaXggY29udGFpbnMgbm9u
LWZpbml0ZSB2YWx1ZXMiKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0
YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTWF0cml4IGNvbnRhaW5zIG5vbi1maW5pdGUgdmFsdWVz
IikgfTsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBpZiAobV9tYXRyaXguaXNB
ZmZpbmUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCmluZGV4IGZhYWY2ZDcwYWQ2ZWEzNTAxOWJmOTNmNjA3
ODU0YzIwMDUzNWE4ZjUuLmQwMTk4YTRmNDA1NWFjMTIxNzM1MWEyZDllYjUzM2E0MmI2ODdkMGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQXR0ci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXR0
cjo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQogICAgICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKIAogICAgIGlmICgocHJlZml4ID09IHhtbG5zQXRv
bSgpICYmIG5hbWVzcGFjZVVSSSgpICE9IFhNTE5TTmFtZXM6OnhtbG5zTmFtZXNwYWNlVVJJKSB8
fCBxdWFsaWZpZWROYW1lKCkgPT0geG1sbnNBdG9tKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOQU1FU1BBQ0VfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOYW1lc3Bh
Y2VFcnJvciB9OwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdQcmVmaXggPSBwcmVmaXgu
aXNFbXB0eSgpID8gbnVsbEF0b20oKSA6IHByZWZpeDsKICAgICBpZiAobV9lbGVtZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDEyZmQzNDQ5MGMyMjE4OGU4ZmQ1YzAx
YTNhYjQ1MGExMzY0MGQ0NTkuLmFlNTZkNjlkMGVkNGMyZTY4YmU5ZDk1ZjAxYjRjNzA0YzVmMTUx
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTY3LDcgKzY3LDcgQEAg
dm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKIEV4Y2VwdGlv
bk9yPFN0cmluZz4gQ2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGNvdW50KQogewogICAgIGlmIChvZmZzZXQgPiBsZW5ndGgoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgcmV0dXJuIG1fZGF0YS5zdWJzdHJpbmco
b2Zmc2V0LCBjb3VudCk7CiB9CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRh
OjphcHBlbmREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IENoYXJh
Y3RlckRhdGE6Omluc2VydERhdGEodW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRhdGEp
CiB7CiAgICAgaWYgKG9mZnNldCA+IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6
ZUVycm9yIH07CiAKICAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRhOwogICAgIG5ld1N0ci5pbnNl
cnQoZGF0YSwgb2Zmc2V0KTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBD
aGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiBk
YXRhKQogRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogewogICAgIGlmIChvZmZzZXQgPiBsZW5ndGgoKSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgY291bnQgPSBzdGQ6Om1p
bihjb3VudCwgbGVuZ3RoKCkgLSBvZmZzZXQpOwogCkBAIC0xNTMsNyArMTUzLDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGNvdW50KQogRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURh
dGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiBkYXRhKQog
ewogICAgIGlmIChvZmZzZXQgPiBsZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVF
cnJvciB9OwogCiAgICAgY291bnQgPSBzdGQ6Om1pbihjb3VudCwgbGVuZ3RoKCkgLSBvZmZzZXQp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggZmQ4MTY4M2IxMzk4NDU2
NTY2ODI3NDMwYWU1ODViZjYzNmZmZGY5NS4uNDIxNTg0MGM0YzE4MjNhZmUzMjEwMTE5MzhlNDAy
ZTk0YTMwNmI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtMTk0LDI4
ICsxOTQsMjggQEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25Pcjx2b2lkPiBjaGVja0FjY2VwdENo
aWxkKENvbnRhaW5lck5vZGUmIG5ld1BhcmVudCwgTm9kZSYKICAgICAgICAgQVNTRVJUKCFuZXdQ
YXJlbnQuaXNEb2N1bWVudFR5cGVOb2RlKCkpOwogICAgICAgICBBU1NFUlQoaXNDaGlsZFR5cGVB
bGxvd2VkKG5ld1BhcmVudCwgbmV3Q2hpbGQpKTsKICAgICAgICAgaWYgKGNvbnRhaW5zQ29uc2lk
ZXJpbmdIb3N0RWxlbWVudHMobmV3Q2hpbGQsIG5ld1BhcmVudCkpCi0gICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIH07CisgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgICAgIGlmIChvcGVy
YXRpb24gPT0gRG9jdW1lbnQ6OkFjY2VwdENoaWxkT3BlcmF0aW9uOjpJbnNlcnRPckFkZCAmJiBy
ZWZDaGlsZCAmJiByZWZDaGlsZC0+cGFyZW50Tm9kZSgpICE9ICZuZXdQYXJlbnQpCi0gICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBhbHNvIHByb3RlY3Qg
cmVsZWFzZSBidWlsZHMgZnJvbSB0cmVlIGNvcnJ1cHRpb24uCiAgICAgQVNTRVJUKCFuZXdDaGls
ZC5pc1BzZXVkb0VsZW1lbnQoKSk7CiAgICAgaWYgKG5ld0NoaWxkLmlzUHNldWRvRWxlbWVudCgp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJyb3IgfTsKIAogICAg
IGlmIChjb250YWluc0NvbnNpZGVyaW5nSG9zdEVsZW1lbnRzKG5ld0NoaWxkLCBuZXdQYXJlbnQp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJyb3IgfTsKIAogICAg
IGlmIChvcGVyYXRpb24gPT0gRG9jdW1lbnQ6OkFjY2VwdENoaWxkT3BlcmF0aW9uOjpJbnNlcnRP
ckFkZCAmJiByZWZDaGlsZCAmJiByZWZDaGlsZC0+cGFyZW50Tm9kZSgpICE9ICZuZXdQYXJlbnQp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAKICAgICBpZiAoaXM8RG9jdW1lbnQ+
KG5ld1BhcmVudCkpIHsKICAgICAgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4obmV3UGFyZW50
KS5jYW5BY2NlcHRDaGlsZChuZXdDaGlsZCwgcmVmQ2hpbGQsIG9wZXJhdGlvbikpCi0gICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIH07CisgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgfSBl
bHNlIGlmICghaXNDaGlsZFR5cGVBbGxvd2VkKG5ld1BhcmVudCwgbmV3Q2hpbGQpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJyb3IgfTsKIAogICAgIHJldHVybiB7
IH07CiB9CkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25Pcjx2b2lk
PiBjaGVja0FjY2VwdENoaWxkR3VhcmFudGVlZE5vZGVUeXBlcyhDb250YWluZXJOb2QKICAgICBB
U1NFUlQoIW5ld1BhcmVudC5pc0RvY3VtZW50VHlwZU5vZGUoKSk7CiAgICAgQVNTRVJUKGlzQ2hp
bGRUeXBlQWxsb3dlZChuZXdQYXJlbnQsIG5ld0NoaWxkKSk7CiAgICAgaWYgKG5ld0NoaWxkLmNv
bnRhaW5zKCZuZXdQYXJlbnQpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZ
X1JFUVVFU1RfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1
ZXN0RXJyb3IgfTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC00MTMsOSArNDEzLDkgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKE5vZGUmIG5ld0NoaWxk
LCBOb2RlJiBvbGRDaGlsZCkKICAgICBpZiAodmFsaWRpdHlSZXN1bHQuaGFzRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiB2YWxpZGl0eVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKLSAg
ICAvLyBOT1RfRk9VTkRfRVJSOiBSYWlzZWQgaWYgb2xkQ2hpbGQgaXMgbm90IGEgY2hpbGQgb2Yg
dGhpcyBub2RlLgorICAgIC8vIE5vdEZvdW5kRXJyb3I6IFJhaXNlZCBpZiBvbGRDaGlsZCBpcyBu
b3QgYSBjaGlsZCBvZiB0aGlzIG5vZGUuCiAgICAgaWYgKG9sZENoaWxkLnBhcmVudE5vZGUoKSAh
PSB0aGlzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAgUmVmUHRyPE5v
ZGU+IHJlZkNoaWxkID0gb2xkQ2hpbGQubmV4dFNpYmxpbmcoKTsKICAgICBpZiAocmVmQ2hpbGQu
Z2V0KCkgPT0gJm5ld0NoaWxkKQpAQCAtNTI1LDkgKzUyNSw5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkKE5vZGUmIG9sZENoaWxkKQogCiAgICAgUmVmPENv
bnRhaW5lck5vZGU+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCi0gICAgLy8gTk9UX0ZPVU5EX0VS
UjogUmFpc2VkIGlmIG9sZENoaWxkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS4KKyAgICAv
LyBOb3RGb3VuZEVycm9yOiBSYWlzZWQgaWYgb2xkQ2hpbGQgaXMgbm90IGEgY2hpbGQgb2YgdGhp
cyBub2RlLgogICAgIGlmIChvbGRDaGlsZC5wYXJlbnROb2RlKCkgIT0gdGhpcykKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAogICAgIFJlZjxOb2RlPiBjaGlsZChvbGRDaGlsZCk7
CiAKQEAgLTUzNSw3ICs1MzUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDb250YWluZXJOb2RlOjpy
ZW1vdmVDaGlsZChOb2RlJiBvbGRDaGlsZCkKIAogICAgIC8vIE11dGF0aW9uIGV2ZW50cyBpbiB3
aWxsUmVtb3ZlQ2hpbGQgbWlnaHQgaGF2ZSBtb3ZlZCB0aGlzIGNoaWxkIGludG8gYSBkaWZmZXJl
bnQgcGFyZW50LgogICAgIGlmIChjaGlsZC0+cGFyZW50Tm9kZSgpICE9IHRoaXMpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAKICAgICB7CiAgICAgICAgIFdpZGdldEhpZXJhcmNo
eVVwZGF0ZXNTdXNwZW5zaW9uU2NvcGUgc3VzcGVuZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKaW5kZXggYTQzOTE5MGI1
MjdhNDlmYTM1NzUyMTc4NjQ2NWI0MDFhMzliZmZmMy4uZjJkODQyMDdiOTdhMzM2NDk1NGQ3MzBh
MTBiNDg4ZTNlMzgzYzY0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRE
T01TdHJpbmdNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5n
TWFwLmNwcApAQCAtMjE5LDcgKzIxOSw3IEBAIFN0cmluZyBEYXRhc2V0RE9NU3RyaW5nTWFwOjpu
YW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogRXhjZXB0aW9uT3I8dm9p
ZD4gRGF0YXNldERPTVN0cmluZ01hcDo6c2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAoIWlzVmFsaWRQcm9wZXJ0eU5hbWUobmFt
ZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIHJldHVybiBtX2VsZW1lbnQuc2V0
QXR0cmlidXRlKGNvbnZlcnRQcm9wZXJ0eU5hbWVUb0F0dHJpYnV0ZU5hbWUobmFtZSksIHZhbHVl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggN2EyZTIwN2NjY2ZjM2U3YTMzNjVl
ZGYwY2U3ZjQ3N2NkN2M4ZGE2YS4uNjdiMzZhOGIzM2UzN2Y1YzczMjBiMmU5ZmM2MjQ3MWQ0MTJi
N2Y0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC03MzksNyArNzM5LDcgQEAgSFRNTElt
YWdlRWxlbWVudCogRG9jdW1lbnQ6OmltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwmIG5hbWUpIGMKIEV4Y2VwdGlvbk9yPFNlbGVjdG9yUXVlcnkmPiBEb2N1bWVudDo6
c2VsZWN0b3JRdWVyeUZvclN0cmluZyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQogewog
ICAgIGlmIChzZWxlY3RvclN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwogICAgIGlmICghbV9zZWxlY3RvclF1ZXJ5Q2FjaGUpCiAgICAgICAgIG1fc2VsZWN0b3JR
dWVyeUNhY2hlID0gc3RkOjptYWtlX3VuaXF1ZTxTZWxlY3RvclF1ZXJ5Q2FjaGU+KCk7CiAgICAg
cmV0dXJuIG1fc2VsZWN0b3JRdWVyeUNhY2hlLT5hZGQoc2VsZWN0b3JTdHJpbmcsICp0aGlzKTsK
QEAgLTg3NCw3ICs4NzQsNyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEVsZW1lbnQ+PiBjcmVh
dGVIVE1MRWxlbWVudFdpdGhOYW1lVmFsaWRhdGlvbihEb2N1bWVudCYgZAogICAgIH0KIAogICAg
IGlmIChVTkxJS0VMWSghaXNWYWxpZEhUTUxFbGVtZW50TmFtZShuYW1lKSkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9OwogCiAgICAgcmV0dXJuIFJlZjxF
bGVtZW50PiB7IGNyZWF0ZVVwZ3JhZGVDYW5kaWRhdGVFbGVtZW50KGRvY3VtZW50LCBuYW1lKSB9
OwogfQpAQCAtODg4LDcgKzg4OCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxFbGVtZW50Pj4gRG9jdW1l
bnQ6OmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyhjb25zdCBBdG9taWNTdHJpbmcmCiAgICAgICAg
IHJldHVybiBjcmVhdGVIVE1MRWxlbWVudFdpdGhOYW1lVmFsaWRhdGlvbigqdGhpcywgbmFtZSk7
CiAKICAgICBpZiAoIWlzVmFsaWROYW1lKG5hbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAogICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFF1YWxp
ZmllZE5hbWUobnVsbEF0b20oKSwgbmFtZSwgbnVsbEF0b20oKSksIGZhbHNlKTsKIH0KQEAgLTkx
MSwxNyArOTExLDE3IEBAIFJlZjxDb21tZW50PiBEb2N1bWVudDo6Y3JlYXRlQ29tbWVudChjb25z
dCBTdHJpbmcmIGRhdGEpCiBFeGNlcHRpb25PcjxSZWY8Q0RBVEFTZWN0aW9uPj4gRG9jdW1lbnQ6
OmNyZWF0ZUNEQVRBU2VjdGlvbihjb25zdCBTdHJpbmcmIGRhdGEpCiB7CiAgICAgaWYgKGlzSFRN
TERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAg
ICByZXR1cm4gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoKnRoaXMsIGRhdGEpOwogfQogCiBFeGNlcHRp
b25PcjxSZWY8UHJvY2Vzc2luZ0luc3RydWN0aW9uPj4gRG9jdW1lbnQ6OmNyZWF0ZVByb2Nlc3Np
bmdJbnN0cnVjdGlvbihjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKQog
ewogICAgIGlmICghaXNWYWxpZE5hbWUodGFyZ2V0KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKICAgICBpZiAoZGF0YS5jb250YWlucygiPz4iKSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKICAgICBy
ZXR1cm4gUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjcmVhdGUoKnRoaXMsIHRhcmdldCwgZGF0YSk7
CiB9CkBAIC05NjAsNyArOTYwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPE5vZGU+PiBEb2N1bWVudDo6
aW1wb3J0Tm9kZShOb2RlJiBub2RlVG9JbXBvcnQsIGJvb2wgZGVlcCkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Cisg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIApAQCAtOTcw
LDcgKzk3MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxOb2RlPj4gRG9jdW1lbnQ6OmFkb3B0Tm9kZShO
b2RlJiBzb3VyY2UpCiAKICAgICBzd2l0Y2ggKHNvdXJjZS5ub2RlVHlwZSgpKSB7CiAgICAgY2Fz
ZSBET0NVTUVOVF9OT0RFOgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRF
RF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07
CiAgICAgY2FzZSBBVFRSSUJVVEVfTk9ERTogewogICAgICAgICBhdXRvJiBhdHRyID0gZG93bmNh
c3Q8QXR0cj4oc291cmNlKTsKICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBhdHRyLm93bmVy
RWxlbWVudCgpKSB7CkBAIC05ODMsMTIgKzk4MywxMiBAQCBFeGNlcHRpb25PcjxSZWY8Tm9kZT4+
IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlKQogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGlmIChzb3VyY2UuaXNTaGFkb3dSb290KCkpIHsKICAgICAgICAgICAgIC8vIFNoYWRvd1Jvb3Qg
Y2Fubm90IGRpc2Nvbm5lY3QgaXRzZWxmIGZyb20gdGhlIGhvc3Qgbm9kZS4KLSAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBISUVSQVJDSFlfUkVRVUVTVF9FUlIgfTsKKyAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJyb3IgfTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaXM8SFRNTEZyYW1lT3duZXJFbGVtZW50Pihzb3VyY2UpKSB7CiAgICAgICAg
ICAgICBhdXRvJiBmcmFtZU93bmVyRWxlbWVudCA9IGRvd25jYXN0PEhUTUxGcmFtZU93bmVyRWxl
bWVudD4oc291cmNlKTsKICAgICAgICAgICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPnRyZWUo
KS5pc0Rlc2NlbmRhbnRPZihmcmFtZU93bmVyRWxlbWVudC5jb250ZW50RnJhbWUoKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9Owor
ICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJyb3Ig
fTsKICAgICAgICAgfQogICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS5yZW1vdmUoKTsKICAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKQEAgLTExOTUsNyArMTE5NSw3IEBAIEV4
Y2VwdGlvbk9yPFJlZjxFbGVtZW50Pj4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnROUyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjCiAgICAgICAgIHJldHVybiBwYXJzZVJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAgICAgUXVhbGlmaWVkTmFtZSBwYXJzZWROYW1lIHsgcGFyc2VSZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCkgfTsKICAgICBpZiAoIWhhc1ZhbGlkTmFtZXNwYWNlRm9yRWxl
bWVudHMocGFyc2VkTmFtZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOQU1FU1BBQ0Vf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOYW1lc3BhY2VFcnJvciB9OwogCiAg
ICAgaWYgKHBhcnNlZE5hbWUubmFtZXNwYWNlVVJJKCkgPT0geGh0bWxOYW1lc3BhY2VVUkkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVIVE1MRWxlbWVudFdpdGhOYW1lVmFsaWRhdGlvbigqdGhpcywg
cGFyc2VkTmFtZSk7CkBAIC0xMzUyLDcgKzEzNTIsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb250
ZW50TGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IERv
Y3VtZW50OjpzZXRYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKICAgICBpZiAo
IVhNTERvY3VtZW50UGFyc2VyOjpzdXBwb3J0c1hNTFZlcnNpb24odmVyc2lvbikpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIG1feG1sVmVyc2lvbiA9IHZl
cnNpb247CiAgICAgcmV0dXJuIHsgfTsKQEAgLTI1MDQsNyArMjUwNCw3IEBAIFNjcmlwdGFibGVE
b2N1bWVudFBhcnNlciogRG9jdW1lbnQ6OnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpIGNvbnN0
CiBFeGNlcHRpb25PcjxSZWZQdHI8RE9NV2luZG93Pj4gRG9jdW1lbnQ6Om9wZW5Gb3JCaW5kaW5n
cyhET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93JiBmaXJzdFdpbmRvdywgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBmZWF0
dXJlcykKIHsKICAgICBpZiAoIW1fZG9tV2luZG93KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBtX2RvbVdpbmRvdy0+b3BlbihhY3RpdmVX
aW5kb3csIGZpcnN0V2luZG93LCB1cmwsIG5hbWUsIGZlYXR1cmVzKTsKIH0KQEAgLTI1MTMsNyAr
MjUxMyw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxET01XaW5kb3c+PiBEb2N1bWVudDo6b3BlbkZv
ckJpbmRpbmdzKERPTVdpbmRvdyYgYWN0aXZlV2luZG93CiBFeGNlcHRpb25PcjxEb2N1bWVudCY+
IERvY3VtZW50OjpvcGVuRm9yQmluZGluZ3MoRG9jdW1lbnQqIHJlc3BvbnNpYmxlRG9jdW1lbnQs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgaWYgKCFpc0hUTUxEb2N1bWVu
dCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYWxzbyB0aHJvdyBpZiAiZG9jdW1lbnQncyB0aHJvdy1vbi1keW5h
bWljLW1hcmt1cC1pbnNlcnRpb24gY291bnRlciBpcyBncmVhdGVyIHRoYW4gMCIuCiAKQEAgLTI2
MTQsMTQgKzI2MTQsMTQgQEAgSFRNTEVsZW1lbnQqIERvY3VtZW50Ojpib2R5T3JGcmFtZXNldCgp
IGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6c2V0Qm9keU9yRnJhbWVzZXQoUmVm
UHRyPEhUTUxFbGVtZW50PiYmIG5ld0JvZHkpCiB7CiAgICAgaWYgKCFpczxIVE1MQm9keUVsZW1l
bnQ+KG5ld0JvZHkuZ2V0KCkpICYmICFpczxIVE1MRnJhbWVTZXRFbGVtZW50PihuZXdCb2R5Lmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAK
ICAgICBhdXRvKiBjdXJyZW50Qm9keSA9IGJvZHlPckZyYW1lc2V0KCk7CiAgICAgaWYgKG5ld0Jv
ZHkgPT0gY3VycmVudEJvZHkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoIW1fZG9j
dW1lbnRFbGVtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVF
U1RfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJy
b3IgfTsKIAogICAgIGlmIChjdXJyZW50Qm9keSkKICAgICAgICAgcmV0dXJuIG1fZG9jdW1lbnRF
bGVtZW50LT5yZXBsYWNlQ2hpbGQoKm5ld0JvZHksICpjdXJyZW50Qm9keSk7CkBAIC0yNjUwLDcg
KzI2NTAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6Y2xvc2VGb3JCaW5kaW5ncygp
CiAgICAgLy8gICAgICAgIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvI2RvbS1kb2N1bWVudC1jbG9zZQogCiAgICAgaWYgKCFpc0hUTUxEb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYWxzbyB0aHJvdyBpZiAiZG9jdW1lbnQncyB0aHJvdy1vbi1keW5hbWlj
LW1hcmt1cC1pbnNlcnRpb24gY291bnRlciBpcyBncmVhdGVyIHRoYW4gMCIuCiAKQEAgLTI4NzUs
NyArMjg3NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OndyaXRlKERvY3VtZW50KiByZXNwb25zaWJsZURv
Y3VtZW50LCBTZWdtZW50ZWRTdHJpbmcmJiB0ZXh0KQogRXhjZXB0aW9uT3I8dm9pZD4gRG9jdW1l
bnQ6OndyaXRlKERvY3VtZW50KiByZXNwb25zaWJsZURvY3VtZW50LCBWZWN0b3I8U3RyaW5nPiYm
IHN0cmluZ3MpCiB7CiAgICAgaWYgKCFpc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxz
byB0aHJvdyBpZiAiZG9jdW1lbnQncyB0aHJvdy1vbi1keW5hbWljLW1hcmt1cC1pbnNlcnRpb24g
Y291bnRlciBpcyBncmVhdGVyIHRoYW4gMCIuCiAKQEAgLTI4OTEsNyArMjg5MSw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IERvY3VtZW50Ojp3cml0ZShEb2N1bWVudCogcmVzcG9uc2libGVEb2N1bWVu
dCwgVmVjdG9yPFN0cmluZz4mCiBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6d3JpdGVsbihE
b2N1bWVudCogcmVzcG9uc2libGVEb2N1bWVudCwgVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQog
ewogICAgIGlmICghaXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gdGhyb3cgaWYg
ImRvY3VtZW50J3MgdGhyb3ctb24tZHluYW1pYy1tYXJrdXAtaW5zZXJ0aW9uIGNvdW50ZXIgaXMg
Z3JlYXRlciB0aGFuIDAiLgogCkBAIC00MjkyLDcgKzQyOTIsNyBAQCBFeGNlcHRpb25PcjxSZWY8
RXZlbnQ+PiBEb2N1bWVudDo6Y3JlYXRlRXZlbnQoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgICAg
ICByZXR1cm4gUmVmPEV2ZW50PiB7IERldmljZU9yaWVudGF0aW9uRXZlbnQ6OmNyZWF0ZUZvckJp
bmRpbmdzKCkgfTsKICNlbmRpZgogCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JU
RURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9
CiAKIGJvb2wgRG9jdW1lbnQ6Omhhc0xpc3RlbmVyVHlwZUZvckV2ZW50VHlwZShQbGF0Zm9ybUV2
ZW50OjpUeXBlIGV2ZW50VHlwZSkgY29uc3QKQEAgLTQzODgsNyArNDM4OCw3IEBAIEV4Y2VwdGlv
bk9yPFN0cmluZz4gRG9jdW1lbnQ6OmNvb2tpZSgpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAogICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3NDb29raWVzKCkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIFVSTCBjb29raWVVUkwgPSB0aGlzLT5jb29r
aWVVUkwoKTsKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkKQEAgLTQ0MDksNyArNDQwOSw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS5j
YW5BY2Nlc3NDb29raWVzKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAg
IFVSTCBjb29raWVVUkwgPSB0aGlzLT5jb29raWVVUkwoKTsKICAgICBpZiAoY29va2llVVJMLmlz
RW1wdHkoKSkKQEAgLTQ0NDAsNyArNDQ0MCw3IEBAIFN0cmluZyBEb2N1bWVudDo6ZG9tYWluKCkg
Y29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IERvY3VtZW50OjpzZXREb21haW4oY29uc3QgU3RyaW5n
JiBuZXdEb21haW4pCiB7CiAgICAgaWYgKFNjaGVtZVJlZ2lzdHJ5Ojppc0RvbWFpblJlbGF4YXRp
b25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoc2VjdXJpdHlPcmlnaW4oKS5wcm90b2NvbCgpKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgLy8gQm90aCBOUyBhbmQgSUUgc3Bl
Y2lmeSB0aGF0IGNoYW5naW5nIHRoZSBkb21haW4gaXMgb25seSBhbGxvd2VkIHdoZW4KICAgICAv
LyB0aGUgbmV3IGRvbWFpbiBpcyBhIHN1ZmZpeCBvZiB0aGUgb2xkIGRvbWFpbi4KQEAgLTQ0NjQs
MTcgKzQ0NjQsMTcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRG9jdW1lbnQ6OnNldERvbWFpbihjb25z
dCBTdHJpbmcmIG5ld0RvbWFpbikKICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBvbGREb21haW4u
bGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gbmV3RG9tYWluLmxlbmd0aCgpOwog
ICAgIGlmIChuZXdMZW5ndGggPj0gb2xkTGVuZ3RoKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVy
cm9yIH07CiAKICAgICBhdXRvIGlwQWRkcmVzc1NldHRpbmcgPSBzZXR0aW5ncygpLnRyZWF0SVBB
ZGRyZXNzQXNEb21haW4oKSA/IE9yaWdpbkFjY2Vzc0VudHJ5OjpUcmVhdElQQWRkcmVzc0FzRG9t
YWluIDogT3JpZ2luQWNjZXNzRW50cnk6OlRyZWF0SVBBZGRyZXNzQXNJUEFkZHJlc3M7CiAgICAg
T3JpZ2luQWNjZXNzRW50cnkgYWNjZXNzRW50cnkgeyBzZWN1cml0eU9yaWdpbigpLnByb3RvY29s
KCksIG5ld0RvbWFpbiwgT3JpZ2luQWNjZXNzRW50cnk6OkFsbG93U3ViZG9tYWlucywgaXBBZGRy
ZXNzU2V0dGluZyB9OwogICAgIGlmICghYWNjZXNzRW50cnkubWF0Y2hlc09yaWdpbihzZWN1cml0
eU9yaWdpbigpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgaWYgKG9s
ZERvbWFpbltvbGRMZW5ndGggLSBuZXdMZW5ndGggLSAxXSAhPSAnLicpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNlY3VyaXR5RXJyb3IgfTsKICAgICBpZiAoU3RyaW5nVmlldyB7IG9sZERvbWFpbiB9LnN1YnN0
cmluZyhvbGRMZW5ndGggLSBuZXdMZW5ndGgpICE9IG5ld0RvbWFpbikKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U2VjdXJpdHlFcnJvciB9OwogCiAgICAgc2VjdXJpdHlPcmlnaW4oKS5zZXREb21haW5Gcm9tRE9N
KG5ld0RvbWFpbik7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTQ1ODIsNyArNDU4Miw3IEBAIEV4Y2Vw
dGlvbk9yPHN0ZDo6cGFpcjxBdG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4+IERvY3VtZW50Ojpw
YXJzZVF1YWxpZmllZE5hbWUoCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gcXVhbGlmaWVkTmFtZS5s
ZW5ndGgoKTsKIAogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAogICAgIGJvb2wgbmFtZVN0YXJ0ID0gdHJ1ZTsKICAgICBi
b29sIHNhd0NvbG9uID0gZmFsc2U7CkBAIC00NTkzLDE3ICs0NTkzLDE3IEBAIEV4Y2VwdGlvbk9y
PHN0ZDo6cGFpcjxBdG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4+IERvY3VtZW50OjpwYXJzZVF1
YWxpZmllZE5hbWUoCiAgICAgICAgIFUxNl9ORVhUKHF1YWxpZmllZE5hbWUsIGksIGxlbmd0aCwg
YykKICAgICAgICAgaWYgKGMgPT0gJzonKSB7CiAgICAgICAgICAgICBpZiAoc2F3Q29sb24pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9
OworICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJy
b3IgfTsKICAgICAgICAgICAgIG5hbWVTdGFydCA9IHRydWU7CiAgICAgICAgICAgICBzYXdDb2xv
biA9IHRydWU7CiAgICAgICAgICAgICBjb2xvblBvc2l0aW9uID0gaSAtIDE7CiAgICAgICAgIH0g
ZWxzZSBpZiAobmFtZVN0YXJ0KSB7CiAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lU3RhcnQo
YykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVS
X0VSUiB9OworICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFj
dGVyRXJyb3IgfTsKICAgICAgICAgICAgIG5hbWVTdGFydCA9IGZhbHNlOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaWYgKCFpc1ZhbGlkTmFtZVBhcnQoYykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9OworICAgICAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtNDYxMSw3ICs0NjExLDcgQEAgRXhjZXB0aW9uT3I8c3RkOjpwYWly
PEF0b21pY1N0cmluZywgQXRvbWljU3RyaW5nPj4gRG9jdW1lbnQ6OnBhcnNlUXVhbGlmaWVkTmFt
ZSgKICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjxBdG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4g
eyB7IH0sIHsgcXVhbGlmaWVkTmFtZSB9IH07CiAKICAgICBpZiAoIWNvbG9uUG9zaXRpb24gfHwg
bGVuZ3RoIC0gY29sb25Qb3NpdGlvbiA8PSAxKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAogICAgIHJldHVybiBzdGQ6OnBhaXI8QXRvbWljU3RyaW5n
LCBBdG9taWNTdHJpbmc+IHsgU3RyaW5nVmlldyB7IHF1YWxpZmllZE5hbWUgfS5zdWJzdHJpbmco
MCwgY29sb25Qb3NpdGlvbikudG9BdG9taWNTdHJpbmcoKSwgU3RyaW5nVmlldyB7IHF1YWxpZmll
ZE5hbWUgfS5zdWJzdHJpbmcoY29sb25Qb3NpdGlvbiArIDEpLnRvQXRvbWljU3RyaW5nKCkgfTsK
IH0KQEAgLTUwNjAsNyArNTA2MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxBdHRyPj4gRG9jdW1lbnQ6
OmNyZWF0ZUF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlCiAgICAgICAg
IHJldHVybiBwYXJzZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgUXVhbGlmaWVkTmFt
ZSBwYXJzZWROYW1lIHsgcGFyc2VSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgfTsKICAgICBp
ZiAoIXNob3VsZElnbm9yZU5hbWVzcGFjZUNoZWNrcyAmJiAhaGFzVmFsaWROYW1lc3BhY2VGb3JB
dHRyaWJ1dGVzKHBhcnNlZE5hbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTkFNRVNQ
QUNFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTmFtZXNwYWNlRXJyb3IgfTsK
ICAgICByZXR1cm4gQXR0cjo6Y3JlYXRlKCp0aGlzLCBwYXJzZWROYW1lLCBlbXB0eVN0cmluZygp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDIwOTdkNzI0MGFmYjllNzVhMTM4OTM5
ZGQyNGIxMTQ1NDI2MmQzODMuLjhlY2U5ZGU0NWI3ZTZlZjVmOTk3M2U4OWU3YWExYjFjZjkyNmU0
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEyMjgsNyArMTIyOCw3IEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkksIGNvCiBFeGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRBdHRyaWJ1dGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CiB7CiAgICAgaWYgKCFEb2N1bWVudDo6aXNWYWxpZE5hbWUobG9jYWxOYW1lKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKICAgICBzeW5jaHJvbml6
ZUF0dHJpYnV0ZShsb2NhbE5hbWUpOwogICAgIGF1dG8gY2FzZUFkanVzdGVkTG9jYWxOYW1lID0g
c2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykgPyBsb2NhbE5hbWUuY29udmVydFRvQVND
SUlMb3dlcmNhc2UoKSA6IGxvY2FsTmFtZTsKQEAgLTE4MjQsOSArMTgyNCw5IEBAIHN0YXRpYyBi
b29sIGNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3QoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIEV4
Y2VwdGlvbk9yPFNoYWRvd1Jvb3QmPiBFbGVtZW50OjphdHRhY2hTaGFkb3coY29uc3QgU2hhZG93
Um9vdEluaXQmIGluaXQpCiB7CiAgICAgaWYgKCFjYW5BdHRhY2hBdXRob3JTaGFkb3dSb290KCp0
aGlzKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIGlmIChz
aGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKICAg
ICBpZiAoaW5pdC5tb2RlID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKICAgICBhdXRvIHNoYWRvdyA9IFNoYWRvd1Jv
b3Q6OmNyZWF0ZShkb2N1bWVudCgpLCBpbml0Lm1vZGUpOwpAQCAtMjE0MiwxMCArMjE0MiwxMCBA
QCBFeGNlcHRpb25PcjxSZWZQdHI8QXR0cj4+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoQXR0
ciYgYXR0ck5vZGUpCiAgICAgaWYgKG9sZEF0dHJOb2RlLmdldCgpID09ICZhdHRyTm9kZSkKICAg
ICAgICAgcmV0dXJuIFdURk1vdmUob2xkQXR0ck5vZGUpOwogCi0gICAgLy8gSU5VU0VfQVRUUklC
VVRFX0VSUjogUmFpc2VkIGlmIG5vZGUgaXMgYW4gQXR0ciB0aGF0IGlzIGFscmVhZHkgYW4gYXR0
cmlidXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmplY3QuCisgICAgLy8gSW5Vc2VBdHRyaWJ1dGVF
cnJvcjogUmFpc2VkIGlmIG5vZGUgaXMgYW4gQXR0ciB0aGF0IGlzIGFscmVhZHkgYW4gYXR0cmli
dXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmplY3QuCiAgICAgLy8gVGhlIERPTSB1c2VyIG11c3Qg
ZXhwbGljaXRseSBjbG9uZSBBdHRyIG5vZGVzIHRvIHJlLXVzZSB0aGVtIGluIG90aGVyIGVsZW1l
bnRzLgogICAgIGlmIChhdHRyTm9kZS5vd25lckVsZW1lbnQoKSAmJiBhdHRyTm9kZS5vd25lckVs
ZW1lbnQoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5VU0VfQVRUUklC
VVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5Vc2VBdHRyaWJ1dGVFcnJv
ciB9OwogCiAgICAgewogICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50
RGlzcGF0Y2g7CkBAIC0yMTg5LDEwICsyMTg5LDEwIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxBdHRy
Pj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlKQogICAgIGlmIChv
bGRBdHRyTm9kZS5nZXQoKSA9PSAmYXR0ck5vZGUpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG9s
ZEF0dHJOb2RlKTsKIAotICAgIC8vIElOVVNFX0FUVFJJQlVURV9FUlI6IFJhaXNlZCBpZiBub2Rl
IGlzIGFuIEF0dHIgdGhhdCBpcyBhbHJlYWR5IGFuIGF0dHJpYnV0ZSBvZiBhbm90aGVyIEVsZW1l
bnQgb2JqZWN0LgorICAgIC8vIEluVXNlQXR0cmlidXRlRXJyb3I6IFJhaXNlZCBpZiBub2RlIGlz
IGFuIEF0dHIgdGhhdCBpcyBhbHJlYWR5IGFuIGF0dHJpYnV0ZSBvZiBhbm90aGVyIEVsZW1lbnQg
b2JqZWN0LgogICAgIC8vIFRoZSBET00gdXNlciBtdXN0IGV4cGxpY2l0bHkgY2xvbmUgQXR0ciBu
b2RlcyB0byByZS11c2UgdGhlbSBpbiBvdGhlciBlbGVtZW50cy4KICAgICBpZiAoYXR0ck5vZGUu
b3duZXJFbGVtZW50KCkgJiYgYXR0ck5vZGUub3duZXJFbGVtZW50KCkgIT0gdGhpcykKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVVNFX0FUVFJJQlVURV9FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEluVXNlQXR0cmlidXRlRXJyb3IgfTsKIAogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKICAgICAKQEAgLTIyMjQsMTggKzIyMjQsMTggQEAgRXhjZXB0aW9uT3I8UmVmUHRy
PEF0dHI+PiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciYgYXR0ck5vZGUpCiBFeGNl
cHRpb25PcjxSZWY8QXR0cj4+IEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciYgYXR0
cikKIHsKICAgICBpZiAoYXR0ci5vd25lckVsZW1lbnQoKSAhPSB0aGlzKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAgQVNTRVJUKCZkb2N1bWVudCgpID09ICZhdHRyLmRv
Y3VtZW50KCkpOwogCiAgICAgc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7CiAKICAgICBpZiAo
IW1fZWxlbWVudERhdGEpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAKICAgICBh
dXRvIGV4aXN0aW5nQXR0cmlidXRlSW5kZXggPSBtX2VsZW1lbnREYXRhLT5maW5kQXR0cmlidXRl
SW5kZXhCeU5hbWUoYXR0ci5xdWFsaWZpZWROYW1lKCkpOwogICAgIGlmIChleGlzdGluZ0F0dHJp
YnV0ZUluZGV4ID09IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vdEZvdW5kRXJyb3IgfTsKIAogICAgIFJlZjxBdHRyPiBvbGRBdHRyTm9kZSB7IGF0dHIg
fTsKIApAQCAtMjI1Miw3ICsyMjUyLDcgQEAgRXhjZXB0aW9uT3I8UXVhbGlmaWVkTmFtZT4gRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXMKICAgICAg
ICAgcmV0dXJuIHBhcnNlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICBRdWFsaWZpZWRO
YW1lIHBhcnNlZEF0dHJpYnV0ZU5hbWUgeyBwYXJzZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSB9OwogICAgIGlmICghRG9jdW1lbnQ6Omhhc1ZhbGlkTmFtZXNwYWNlRm9yQXR0cmlidXRlcyhw
YXJzZWRBdHRyaWJ1dGVOYW1lKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5BTUVTUEFD
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5hbWVzcGFjZUVycm9yIH07CiAg
ICAgcmV0dXJuIFdURk1vdmUocGFyc2VkQXR0cmlidXRlTmFtZSk7CiB9CiAKQEAgLTI1NTgsNyAr
MjU1OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEVsZW1lbnQ6OnNldE91dGVySFRNTChjb25zdCBT
dHJpbmcmIGh0bWwpCiB7CiAgICAgYXV0byogcGFyZW50RWxlbWVudCA9IHRoaXMtPnBhcmVudEVs
ZW1lbnQoKTsKICAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihwYXJlbnRFbGVtZW50KSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAog
ICAgIFJlZjxIVE1MRWxlbWVudD4gcGFyZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpwYXJl
bnRFbGVtZW50KTsKICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IHByZXZpb3VzU2libGluZygpOwpA
QCAtMzY1OSw3ICszNjU5LDcgQEAgRXhjZXB0aW9uT3I8Tm9kZSo+IEVsZW1lbnQ6Omluc2VydEFk
amFjZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIFJlZjxOb2RlPiYmIG5ld0MKICAgICAgICAgcmV0
dXJuIG5ld0NoaWxkLnB0cigpOwogICAgIH0KIAotICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5U
QVhfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKIEV4
Y2VwdGlvbk9yPEVsZW1lbnQqPiBFbGVtZW50OjppbnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3Qg
U3RyaW5nJiB3aGVyZSwgRWxlbWVudCYgbmV3Q2hpbGQpCkBAIC0zNjc2LDEyICszNjc2LDEyIEBA
IHN0YXRpYyBFeGNlcHRpb25PcjxDb250YWluZXJOb2RlJj4gY29udGV4dE5vZGVGb3JJbnNlcnRp
b24oY29uc3QgU3RyaW5nJiB3aGVyZSwKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uod2hlcmUsICJiZWZvcmViZWdpbiIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHdoZXJlLCAiYWZ0ZXJlbmQiKSkgewogICAgICAgICBhdXRvKiBwYXJlbnQgPSBlbGVtZW50
LnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFwYXJlbnQgfHwgaXM8RG9jdW1lbnQ+KCpwYXJl
bnQpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9u
QWxsb3dlZEVycm9yIH07CiAgICAgICAgIHJldHVybiAqcGFyZW50OwogICAgIH0KICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uod2hlcmUsICJhZnRlcmJlZ2luIikgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uod2hlcmUsICJiZWZvcmVlbmQiKSkKICAgICAgICAg
cmV0dXJuIGVsZW1lbnQ7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIH0KIAogLy8gU3RlcCAyIG9mIGh0
dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZG9tLWVsZW1lbnQtaW5zZXJ0YWRqYWNl
bnRodG1sLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggY2YwYzFmZDIwNjBjNjVh
MDM0OTUwYTJmM2I2MTk0NzAwNzg2YTJkOC4uMDRjYjNiZjQ0YTY4MzhkYjQwZTJhMTY3ZDJkOTI4
YmFkZDY1N2I5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0xNDYsNyArMTQ2
LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnRGb3JCaW5k
aW5ncyhFdmVudCYgZXZlbnQpCiAgICAgZXZlbnQuc2V0VW50cnVzdGVkKCk7CiAKICAgICBpZiAo
IWV2ZW50LmlzSW5pdGlhbGl6ZWQoKSB8fCBldmVudC5pc0JlaW5nRGlzcGF0Y2hlZCgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FeGNl
cHRpb25Db2RlLmgKaW5kZXggM2Q0OTBiNWZhZGFhNTFiNmM4NzI1ZjczYTdhZmM1OGM3ZWY5OGQ4
Ny4uOWJjYzZjOTY1ZjIyMmI2MDIyNmRiZWI1MDY0Yjg3NGEyOGNhZTAwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXhjZXB0aW9uQ29kZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDM2ICsyNCwzNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAvLyBjaGFuZ2VkIG9yIHJlbW92ZWQgZnJvbSB0aGUgc3BlY2lmaWNhdGlvbnMuCiBlbnVtIEV4
Y2VwdGlvbkNvZGUgewogICAgIE5vRXhjZXB0aW9uID0gMCwKLSAgICBJTkRFWF9TSVpFX0VSUiA9
IDEsCi0gICAgSElFUkFSQ0hZX1JFUVVFU1RfRVJSID0gMywKLSAgICBXUk9OR19ET0NVTUVOVF9F
UlIgPSA0LAotICAgIElOVkFMSURfQ0hBUkFDVEVSX0VSUiA9IDUsCi0gICAgTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSID0gNywKLSAgICBOT1RfRk9VTkRfRVJSID0gOCwKLSAgICBOT1RfU1VQ
UE9SVEVEX0VSUiA9IDksCi0gICAgSU5VU0VfQVRUUklCVVRFX0VSUiA9IDEwLCAvLyBIaXN0b3Jp
Y2FsLiBPbmx5IHVzZWQgaW4gc2V0QXR0cmlidXRlTm9kZSBldGMgd2hpY2ggaGF2ZSBiZWVuIHJl
bW92ZWQgZnJvbSB0aGUgRE9NIHNwZWNzLgorICAgIEluZGV4U2l6ZUVycm9yID0gMSwKKyAgICBI
aWVyYXJjaHlSZXF1ZXN0RXJyb3IgPSAzLAorICAgIFdyb25nRG9jdW1lbnRFcnJvciA9IDQsCisg
ICAgSW52YWxpZENoYXJhY3RlckVycm9yID0gNSwKKyAgICBOb01vZGlmaWNhdGlvbkFsbG93ZWRF
cnJvciA9IDcsCisgICAgTm90Rm91bmRFcnJvciA9IDgsCisgICAgTm90U3VwcG9ydGVkRXJyb3Ig
PSA5LAorICAgIEluVXNlQXR0cmlidXRlRXJyb3IgPSAxMCwgLy8gSGlzdG9yaWNhbC4gT25seSB1
c2VkIGluIHNldEF0dHJpYnV0ZU5vZGUgZXRjIHdoaWNoIGhhdmUgYmVlbiByZW1vdmVkIGZyb20g
dGhlIERPTSBzcGVjcy4KIAogICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6Ci0gICAg
SU5WQUxJRF9TVEFURV9FUlIgPSAxMSwKLSAgICBTWU5UQVhfRVJSID0gMTIsCi0gICAgSU5WQUxJ
RF9NT0RJRklDQVRJT05fRVJSID0gMTMsCi0gICAgTkFNRVNQQUNFX0VSUiA9IDE0LAotICAgIElO
VkFMSURfQUNDRVNTX0VSUiA9IDE1LAorICAgIEludmFsaWRTdGF0ZUVycm9yID0gMTEsCisgICAg
U3ludGF4RXJyb3IgPSAxMiwKKyAgICBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IgPSAxMywKKyAg
ICBOYW1lc3BhY2VFcnJvciA9IDE0LAorICAgIEludmFsaWRBY2Nlc3NFcnJvciA9IDE1LAogCiAg
ICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMzoKLSAgICBUWVBFX01JU01BVENIX0VSUiA9
IDE3LCAvLyBIaXN0b3JpY2FsOyB1c2UgVHlwZUVycm9yIGluc3RlYWQKKyAgICBUeXBlTWlzbWF0
Y2hFcnJvciA9IDE3LCAvLyBIaXN0b3JpY2FsOyB1c2UgVHlwZUVycm9yIGluc3RlYWQKIAogICAg
IC8vIFhNTEh0dHBSZXF1ZXN0IGV4dGVuc2lvbjoKLSAgICBTRUNVUklUWV9FUlIgPSAxOCwKKyAg
ICBTZWN1cml0eUVycm9yID0gMTgsCiAKICAgICAvLyBPdGhlcnMgaW50cm9kdWNlZCBpbiBIVE1M
NToKLSAgICBORVRXT1JLX0VSUiA9IDE5LAotICAgIEFCT1JUX0VSUiA9IDIwLAotICAgIFVSTF9N
SVNNQVRDSF9FUlIgPSAyMSwKLSAgICBRVU9UQV9FWENFRURFRF9FUlIgPSAyMiwKLSAgICBUSU1F
T1VUX0VSUiA9IDIzLAotICAgIElOVkFMSURfTk9ERV9UWVBFX0VSUiA9IDI0LAotICAgIERBVEFf
Q0xPTkVfRVJSID0gMjUsCisgICAgTmV0d29ya0Vycm9yID0gMTksCisgICAgQWJvcnRFcnJvciA9
IDIwLAorICAgIFVSTE1pc21hdGNoRXJyb3IgPSAyMSwKKyAgICBRdW90YUV4Y2VlZGVkRXJyb3Ig
PSAyMiwKKyAgICBUaW1lb3V0RXJyb3IgPSAyMywKKyAgICBJbnZhbGlkTm9kZVR5cGVFcnJvciA9
IDI0LAorICAgIERhdGFDbG9uZUVycm9yID0gMjUsCiAKICAgICAvLyBPdGhlcnMgaW50cm9kdWNl
ZCBpbiBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtZXhjZXB0aW9ucwogICAg
IEVuY29kaW5nRXJyb3IsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCA0NWQ3YTQ1
ZGMwYjhkNWJmZWRjNjU0NDNjY2U5ZjdhNDQ2MWQ1OTNmLi4xZTYzMTZlNWI1YTQyMzI2NDYxZTcx
YTgyODA0YjQxMjY5MThjMTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTY1
LDcgKzY1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIG0KICAgICBpZiAoIXBvcnRzLmlzRW1w
dHkoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGRhdGFQb3J0IDogcG9ydHMpIHsKICAgICAgICAg
ICAgIGlmIChkYXRhUG9ydCA9PSB0aGlzIHx8IG1fZW50YW5nbGVkQ2hhbm5lbC0+aXNDb25uZWN0
ZWRUbyhkYXRhUG9ydC5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IERBVEFfQ0xPTkVfRVJSIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IERh
dGFDbG9uZUVycm9yIH07CiAgICAgICAgIH0KICAgICAgICAgYXV0byBkaXNlbnRhbmdsZVJlc3Vs
dCA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKFdURk1vdmUocG9ydHMpKTsKICAgICAg
ICAgaWYgKGRpc2VudGFuZ2xlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpAQCAtMTg2LDcgKzE4Niw3
IEBAIEV4Y2VwdGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4+
IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvCiAgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+IHBv
cnRTZXQ7CiAgICAgZm9yIChhdXRvJiBwb3J0IDogcG9ydHMpIHsKICAgICAgICAgaWYgKCFwb3J0
IHx8IHBvcnQtPmlzTmV1dGVyZWQoKSB8fCAhcG9ydFNldC5hZGQocG9ydC5nZXQoKSkuaXNOZXdF
bnRyeSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEQVRBX0NMT05FX0VSUiB9Owor
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IERhdGFDbG9uZUVycm9yIH07CiAgICAgfQog
CiAgICAgLy8gUGFzc2VkLWluIHBvcnRzIHBhc3NlZCB2YWxpZGl0eSBjaGVja3MsIHNvIHdlIGNh
biBkaXNlbnRhbmdsZSB0aGVtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVk
Tm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCA0
NzNjMzljZGE4MTY3YTQ4ZDU5YzEwODdhMTdlNTFhMzVhZmY4NjVhLi41Yjc0YTJiMzU5ODg0ZDI1
NjUyZmRlZTI4MGFmOGYyMjY3MGI1MmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TmFtZWROb2RlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNw
cApAQCAtNTYsMTAgKzU2LDEwIEBAIFJlZlB0cjxBdHRyPiBOYW1lZE5vZGVNYXA6OmdldE5hbWVk
SXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zCiBFeGNlcHRpb25P
cjxSZWY8QXR0cj4+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKIHsKICAgICBpZiAoIW1fZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgYXV0byBpbmRleCA9IG1fZWxlbWVudC5m
aW5kQXR0cmlidXRlSW5kZXhCeU5hbWUobmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSht
X2VsZW1lbnQpKTsKICAgICBpZiAoaW5kZXggPT0gRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZv
dW5kKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogICAgIHJldHVybiBtX2VsZW1l
bnQuZGV0YWNoQXR0cmlidXRlKGluZGV4KTsKIH0KIApAQCAtODEsMTAgKzgxLDEwIEBAIFZlY3Rv
cjxTdHJpbmc+IE5hbWVkTm9kZU1hcDo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0CiBF
eGNlcHRpb25PcjxSZWY8QXR0cj4+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtTlMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxO
YW1lKQogewogICAgIGlmICghbV9lbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vdEZvdW5kRXJyb3IgfTsKICAgICBhdXRvIGluZGV4ID0gbV9lbGVtZW50LmZpbmRBdHRy
aWJ1dGVJbmRleEJ5TmFtZShRdWFsaWZpZWROYW1lIHsgbnVsbEF0b20oKSwgbG9jYWxOYW1lLCBu
YW1lc3BhY2VVUkkgfSk7CiAgICAgaWYgKGluZGV4ID09IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVO
b3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKICAgICByZXR1cm4gbV9l
bGVtZW50LmRldGFjaEF0dHJpYnV0ZShpbmRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA0
NDk5MDc3ZjQ5Njk1NWUxYWZkNWJlYzI0NmI3MWEzYjczNGVkOGRhLi41Yjk3YzY4ZTdiN2RhODM2
ZjNjNDg2MDEzNTgxOTAyNGIyZjA5YWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC00MDgsMjggKzQw
OCwyOCBAQCBFbGVtZW50KiBOb2RlOjpuZXh0RWxlbWVudFNpYmxpbmcoKSBjb25zdAogRXhjZXB0
aW9uT3I8dm9pZD4gTm9kZTo6aW5zZXJ0QmVmb3JlKE5vZGUmIG5ld0NoaWxkLCBOb2RlKiByZWZD
aGlsZCkKIHsKICAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgcmV0dXJuIGRvd25jYXN0
PENvbnRhaW5lck5vZGU+KCp0aGlzKS5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIHJlZkNoaWxkKTsK
IH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6cmVwbGFjZUNoaWxkKE5vZGUmIG5ld0NoaWxk
LCBOb2RlJiBvbGRDaGlsZCkKIHsKICAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgcmV0
dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGQs
IG9sZENoaWxkKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6cmVtb3ZlQ2hpbGQoTm9k
ZSYgb2xkQ2hpbGQpCiB7CiAgICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqdGhpcykpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5l
ck5vZGU+KCp0aGlzKS5yZW1vdmVDaGlsZChvbGRDaGlsZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IE5vZGU6OmFwcGVuZENoaWxkKE5vZGUmIG5ld0NoaWxkKQogewogICAgIGlmICghaXM8Q29u
dGFpbmVyTm9kZT4oKnRoaXMpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZ
X1JFUVVFU1RfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1
ZXN0RXJyb3IgfTsKICAgICByZXR1cm4gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnRoaXMpLmFw
cGVuZENoaWxkKG5ld0NoaWxkKTsKIH0KIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgTm9kZTo6
bm9ybWFsaXplKCkKIEV4Y2VwdGlvbk9yPFJlZjxOb2RlPj4gTm9kZTo6Y2xvbmVOb2RlRm9yQmlu
ZGluZ3MoYm9vbCBkZWVwKQogewogICAgIGlmIChVTkxJS0VMWShpc1NoYWRvd1Jvb3QoKSkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICByZXR1cm4gY2xvbmVO
b2RlKGRlZXApOwogfQogCkBAIC02MzUsOCArNjM1LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gTm9k
ZTo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYpCiB7CiAgICAgLy8gVGhlIHNwZWMgc2F5
cyB0aGF0IGZvciBub2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLCBwcmVm
aXggaXMgYWx3YXlzIG51bGwuCiAgICAgLy8gSXQgZG9lcyBub3Qgc2F5IHdoYXQgdG8gZG8gd2hl
biB0aGUgdXNlciB0cmllcyB0byBzZXQgdGhlIHByZWZpeCBvbiBhbm90aGVyIHR5cGUgb2YKLSAg
ICAvLyBub2RlLCBob3dldmVyIE1vemlsbGEgdGhyb3dzIGEgTkFNRVNQQUNFX0VSUiBleGNlcHRp
b24uCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5BTUVTUEFDRV9FUlIgfTsKKyAgICAvLyBub2Rl
LCBob3dldmVyIE1vemlsbGEgdGhyb3dzIGEgTmFtZXNwYWNlRXJyb3IgZXhjZXB0aW9uLgorICAg
IHJldHVybiBFeGNlcHRpb24geyBOYW1lc3BhY2VFcnJvciB9OwogfQogCiBjb25zdCBBdG9taWNT
dHJpbmcmIE5vZGU6OmxvY2FsTmFtZSgpIGNvbnN0CkBAIC05MjMsMTUgKzkyMywxNSBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBOb2RlOjpjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCkKICAgICAvLyBFbGVtZW50OjpzZXRQcmVmaXgoKSBhbmQgQXR0cjo6c2V0UHJlZml4KCkK
IAogICAgIGlmICghcHJlZml4LmlzRW1wdHkoKSAmJiAhRG9jdW1lbnQ6OmlzVmFsaWROYW1lKHBy
ZWZpeCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9Owog
Ci0gICAgLy8gRklYTUU6IFJhaXNlIE5BTUVTUEFDRV9FUlIgaWYgcHJlZml4IGlzIG1hbGZvcm1l
ZCBwZXIgdGhlIE5hbWVzcGFjZXMgaW4gWE1MIHNwZWNpZmljYXRpb24uCisgICAgLy8gRklYTUU6
IFJhaXNlIE5hbWVzcGFjZUVycm9yIGlmIHByZWZpeCBpcyBtYWxmb3JtZWQgcGVyIHRoZSBOYW1l
c3BhY2VzIGluIFhNTCBzcGVjaWZpY2F0aW9uLgogCiAgICAgYXV0byYgbmFtZXNwYWNlVVJJID0g
dGhpcy0+bmFtZXNwYWNlVVJJKCk7CiAgICAgaWYgKG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkgJiYg
IXByZWZpeC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOQU1FU1BBQ0Vf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOYW1lc3BhY2VFcnJvciB9OwogICAg
IGlmIChwcmVmaXggPT0geG1sQXRvbSgpICYmIG5hbWVzcGFjZVVSSSAhPSBYTUxOYW1lczo6eG1s
TmFtZXNwYWNlVVJJKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTkFNRVNQQUNFX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTmFtZXNwYWNlRXJyb3IgfTsKIAogICAgIC8v
IEF0dHJpYnV0ZS1zcGVjaWZpYyBjaGVja3MgYXJlIGluIEF0dHI6OnNldFByZWZpeCgpLgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcAppbmRleCBjNTNjMzBiM2M0MjQzZGM1YjVhZmYxMmZiODg3Mzk4MjQ0ZjQ4
ZjBmLi4wNDk0Y2IyYmU5MDVhNDIyMDc5MGM2NjI1MmVlMDIxMGY4ZjM1OGVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAKQEAgLTI1NiwxNCArMjU2LDE0IEBAIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6
Y29tcGFyZVBvaW50KE5vZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICAv
LyBUaGlzIG1ldGhvZCByZXR1cm5zIC0xLCAwIG9yIDEgZGVwZW5kaW5nIG9uIGlmIHRoZSBwb2lu
dCBkZXNjcmliZWQgYnkgdGhlIAogICAgIC8vIHJlZk5vZGUgbm9kZSBhbmQgYW4gb2Zmc2V0IHdp
dGhpbiB0aGUgbm9kZSBpcyBiZWZvcmUsIHNhbWUgYXMsIG9yIGFmdGVyIHRoZSByYW5nZSByZXNw
ZWN0aXZlbHkuCiAgICAgaWYgKCZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdST05HX0RPQ1VNRU5UX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07CiAKICAgICBhdXRv
IGNoZWNrTm9kZVJlc3VsdCA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0KTsKICAg
ICBpZiAoY2hlY2tOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIC8vIERPTTQg
c3BlYyByZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRh
aW5lciBoYXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKICAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGlu
IHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9u
IGNhc2UuCiAgICAgICAgIGlmICghcmVmTm9kZS5pc0Nvbm5lY3RlZCgpICYmICFjb21tb25BbmNl
c3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFdST05HX0RPQ1VNRU5UX0VSUiB9OworICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwogICAgICAgICByZXR1cm4gY2hl
Y2tOb2RlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9CiAKQEAgLTMwNSw3ICszMDUs
NyBAQCBFeGNlcHRpb25PcjxSYW5nZTo6Q29tcGFyZVJlc3VsdHM+IFJhbmdlOjpjb21wYXJlTm9k
ZShOb2RlJiByZWZOb2RlKSBjb25zdAogICAgIGlmICghcGFyZW50Tm9kZSkgewogICAgICAgICAv
LyBJZiB0aGUgbm9kZSBpcyB0aGUgdG9wIG9mIHRoZSB0cmVlIHdlIHNob3VsZCByZXR1cm4gTk9E
RV9CRUZPUkVfQU5EX0FGVEVSLAogICAgICAgICAvLyBidXQgd2UgdGhyb3cgdG8gbWF0Y2ggZmly
ZWZveCBiZWhhdmlvci4KLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKICAgICB9CiAg
ICAgYXV0byBub2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKIApAQCAtMzM3
LDcgKzMzNyw3IEBAIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKENvbXBhcmVIb3cgaG93LCBjb25zdCBSYW5nZSYgc291CiAgICAgYXV0byogdGhpc0NvbnRh
aW5lciA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7CiAgICAgYXV0byogc291cmNlQ29udGFp
bmVyID0gc291cmNlUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKICAgICBpZiAoIXRo
aXNDb250YWluZXIgfHwgIXNvdXJjZUNvbnRhaW5lciB8fCAmdGhpc0NvbnRhaW5lci0+ZG9jdW1l
bnQoKSAhPSAmc291cmNlQ29udGFpbmVyLT5kb2N1bWVudCgpIHx8IHRvcCgqdGhpc0NvbnRhaW5l
cikgIT0gdG9wKCpzb3VyY2VDb250YWluZXIpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
V1JPTkdfRE9DVU1FTlRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0Rv
Y3VtZW50RXJyb3IgfTsKIAogICAgIHN3aXRjaCAoaG93KSB7CiAgICAgY2FzZSBTVEFSVF9UT19T
VEFSVDoKQEAgLTM1MCw3ICszNTAsNyBAQCBFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29uc3QgUmFuZ2UmIHNvdQogICAgICAg
ICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fZW5k
KTsKICAgICB9CiAKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogfQogCiBFeGNlcHRpb25PcjxzaG9ydD4g
UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2lnbmVkIHNob3J0IGhv
dywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlKSBjb25zdApAQCAtMzYyLDcgKzM2Miw3IEBAIEV4
Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3Mo
dW5zaWduZWQgc2hvcnQgaG93LCBjCiAgICAgY2FzZSBFTkRfVE9fU1RBUlQ6CiAgICAgICAgIHJl
dHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMoc3RhdGljX2Nhc3Q8Q29tcGFyZUhvdz4oaG93KSwg
c291cmNlUmFuZ2UpOwogICAgIH0KLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRF
RF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0K
IAogRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSog
Y29udGFpbmVyQSwgdW5zaWduZWQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgdW5zaWduZWQg
b2Zmc2V0QikKQEAgLTQyMiw3ICs0MjIsNyBAQCBFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250YWluZXJBLCB1bnNpZ25lZCBvZmZzZQogICAg
IC8vICMjIyB3ZSBuZWVkIHRvIGRvIGEgdHJhdmVyc2FsIGhlcmUgaW5zdGVhZAogICAgIGF1dG8q
IGNvbW1vbkFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoY29udGFpbmVyQSwgY29u
dGFpbmVyQik7CiAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFdST05HX0RPQ1VNRU5UX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
V3JvbmdEb2N1bWVudEVycm9yIH07CiAgICAgTm9kZSogY2hpbGRBID0gY29udGFpbmVyQTsKICAg
ICB3aGlsZSAoY2hpbGRBICYmIGNoaWxkQS0+cGFyZW50Tm9kZSgpICE9IGNvbW1vbkFuY2VzdG9y
KQogICAgICAgICBjaGlsZEEgPSBjaGlsZEEtPnBhcmVudE5vZGUoKTsKQEAgLTc1Miw3ICs3NTIs
NyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBwcm9jZXNzQ29udGVudHNCZXR3
ZWVuT2Zmc2V0cyhSYW5nZTo6QWN0aW9uVHlwZQogICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJs
aW5nKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0T2Zmc2V0OyBuICYmIGkgPCBl
bmRPZmZzZXQ7IGkrKywgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChh
Y3Rpb24gIT0gUmFuZ2U6OkRlbGV0ZSAmJiBuLT5pc0RvY3VtZW50VHlwZU5vZGUoKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBISUVSQVJDSFlfUkVRVUVTVF9FUlIgfTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9y
IH07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoKm4pOwogICAgICAg
ICB9CkBAIC04ODQsMTcgKzg4NCwxNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6aW5zZXJ0
Tm9kZShSZWY8Tm9kZT4mJiBub2RlKQogICAgIGF1dG8gc3RhcnRDb250YWluZXJOb2RlVHlwZSA9
IHN0YXJ0Q29udGFpbmVyKCkubm9kZVR5cGUoKTsKIAogICAgIGlmIChzdGFydENvbnRhaW5lck5v
ZGVUeXBlID09IE5vZGU6OkNPTU1FTlRfTk9ERSB8fCBzdGFydENvbnRhaW5lck5vZGVUeXBlID09
IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgYm9vbCBzdGFydElzVGV4dCA9IHN0YXJ0
Q29udGFpbmVyTm9kZVR5cGUgPT0gTm9kZTo6VEVYVF9OT0RFOwogICAgIGlmIChzdGFydElzVGV4
dCAmJiAhc3RhcnRDb250YWluZXIoKS5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBISUVSQVJDSFlfUkVRVUVTVF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9OwogICAgIGlmIChub2RlLnB0cigpID09ICZzdGFy
dENvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVF
U1RfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJy
b3IgfTsKIAogICAgIFJlZlB0cjxOb2RlPiByZWZlcmVuY2VOb2RlID0gc3RhcnRJc1RleHQgPyAm
c3RhcnRDb250YWluZXIoKSA6IHN0YXJ0Q29udGFpbmVyKCkudHJhdmVyc2VUb0NoaWxkQXQoc3Rh
cnRPZmZzZXQoKSk7CiAgICAgTm9kZSogcGFyZW50Tm9kZSA9IHJlZmVyZW5jZU5vZGUgPyByZWZl
cmVuY2VOb2RlLT5wYXJlbnROb2RlKCkgOiAmc3RhcnRDb250YWluZXIoKTsKICAgICBpZiAoIWlz
PENvbnRhaW5lck5vZGU+KHBhcmVudE5vZGUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SElFUkFSQ0hZX1JFUVVFU1RfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVy
YXJjaHlSZXF1ZXN0RXJyb3IgfTsKIAogICAgIFJlZjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBk
b3duY2FzdDxDb250YWluZXJOb2RlPigqcGFyZW50Tm9kZSk7CiAKQEAgLTk5MSwxMyArOTkxLDEz
IEBAIEV4Y2VwdGlvbk9yPE5vZGUqPiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlJiBub2Rl
LCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6Ci0gICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9OT0RFX1RZUEVfRVJSIH07CisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKICAgICAgICAgY2FzZSBO
b2RlOjpDREFUQV9TRUNUSU9OX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RF
OgogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpQUk9D
RVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CiAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gZG93bmNh
c3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpE
T0NVTUVOVF9GUkFHTUVOVF9OT0RFOgpAQCAtMTAwNywxMiArMTAwNywxMiBAQCBFeGNlcHRpb25P
cjxOb2RlKj4gUmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zm
c2V0KSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAg
Tm9kZSogY2hpbGRCZWZvcmUgPSBub2RlLnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpOwog
ICAgICAgICAgICAgaWYgKCFjaGlsZEJlZm9yZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICAgICAgICAgIHJldHVybiBjaGlsZEJlZm9yZTsK
ICAgICAgICAgfQogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9OT0RFX1RZUEVfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWROb2RlVHlwZUVycm9yIH07CiB9CiAKIFJlZjxSYW5nZT4gUmFuZ2U6OmNsb25l
UmFuZ2UoKSBjb25zdApAQCAtMTAyMywyOCArMTAyMywyOCBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpj
bG9uZVJhbmdlKCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydEFmdGVy
KE5vZGUmIHJlZk5vZGUpCiB7CiAgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfTk9ERV9UWVBFX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKICAgICByZXR1cm4gc2V0
U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSAr
IDEpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kQmVmb3JlKE5vZGUmIHJl
Zk5vZGUpCiB7CiAgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfTk9ERV9UWVBFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKICAgICByZXR1cm4gc2V0RW5kKCpyZWZO
b2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkpOwogfQogCiBFeGNl
cHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSYgcmVmTm9kZSkKIHsKICAgICBp
ZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9OT0RFX1RZUEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
Tm9kZVR5cGVFcnJvciB9OwogICAgIHJldHVybiBzZXRFbmQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSArIDEpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lk
PiBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiByZWZOb2RlKQogewogICAgIGlmICghcmVmTm9kZS5w
YXJlbnROb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX05PREVfVFlQ
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9y
IH07CiAKICAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQog
ICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwpAQCAtMTA1OSw3ICsxMDU5
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNlbGVjdE5vZGUoTm9kZSYgcmVmTm9kZSkK
IEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZWxlY3ROb2RlQ29udGVudHMoTm9kZSYgcmVmTm9k
ZSkKIHsKICAgICBpZiAocmVmTm9kZS5pc0RvY3VtZW50VHlwZU5vZGUoKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfTk9ERV9UWVBFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKIAogICAgIGlmICgmb3duZXJEb2N1
bWVudCgpICE9ICZyZWZOb2RlLmRvY3VtZW50KCkpCiAgICAgICAgIHNldERvY3VtZW50KHJlZk5v
ZGUuZG9jdW1lbnQoKSk7CkBAIC0xMDgzLDcgKzEwODMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBS
YW5nZTo6c3Vycm91bmRDb250ZW50cyhOb2RlJiBuZXdQYXJlbnQpCiAgICAgaWYgKGVuZE5vblRl
eHRDb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFKQogICAgICAgICBlbmRO
b25UZXh0Q29udGFpbmVyID0gZW5kTm9uVGV4dENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwogICAg
IGlmIChzdGFydE5vblRleHRDb250YWluZXIgIT0gZW5kTm9uVGV4dENvbnRhaW5lcikKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gU3RlcCAyOiBJZiBu
ZXdQYXJlbnQgaXMgYSBEb2N1bWVudCwgRG9jdW1lbnRUeXBlLCBvciBEb2N1bWVudEZyYWdtZW50
IG5vZGUsIHRoZW4gdGhyb3cgYW4gSW52YWxpZE5vZGVUeXBlRXJyb3IuCiAgICAgc3dpdGNoIChu
ZXdQYXJlbnQubm9kZVR5cGUoKSkgewpAQCAtMTA5MSw3ICsxMDkxLDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoTm9kZSYgbmV3UGFyZW50KQogICAgICAgICBj
YXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6Ci0gICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9OT0RFX1RZUEVfRVJSIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKICAgICAg
ICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6Q09N
TUVOVF9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKQEAgLTExMjYsNyAr
MTEyNiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKE5vZGUm
IG5ld1BhcmVudCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2Rl
JiByZWZOb2RlKQogewogICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX05PREVfVFlQRV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07CiAgICAgcmV0dXJuIHNldFN0YXJ0
KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKaW5kZXggODBmYjJiNWU2ZGNmMzcxNmY5
OTA5MWE4MTkxNWRiNDEwMzNhYzM2MC4uZmE0ODhiYzgwYmNlODgyYjI5MjQzOWU3MTY2NDQwZWRl
YmMwYWNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApAQCAtNjI2LDEwICs2
MjYsMTAgQEAgRXhjZXB0aW9uT3I8U2VsZWN0b3JRdWVyeSY+IFNlbGVjdG9yUXVlcnlDYWNoZTo6
YWRkKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBEb2MKICAgICBwYXJzZXIucGFyc2VTZWxlY3Rv
cihzZWxlY3RvcnMsIHNlbGVjdG9yTGlzdCk7CiAKICAgICBpZiAoIXNlbGVjdG9yTGlzdC5maXJz
dCgpIHx8IHNlbGVjdG9yTGlzdC5oYXNJbnZhbGlkU2VsZWN0b3IoKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5
bnRheEVycm9yIH07CiAKICAgICBpZiAoc2VsZWN0b3JMaXN0LnNlbGVjdG9yc05lZWROYW1lc3Bh
Y2VSZXNvbHV0aW9uKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgY29uc3Qg
aW50IG1heGltdW1TZWxlY3RvclF1ZXJ5Q2FjaGVTaXplID0gMjU2OwogICAgIGlmIChtX2VudHJp
ZXMuc2l6ZSgpID09IG1heGltdW1TZWxlY3RvclF1ZXJ5Q2FjaGVTaXplKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuY3BwCmluZGV4IGFhYmFiODFjMTZkOTM2Yjg1N2Q0OTE0ZDgxZjZlYWZkNzIxM2Fh
OTQuLmJhMzhjOTQzOTE4NGIwODk2N2MyODljYzczYjc0OThlMmU2YjhiZjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2hhZG93Um9vdC5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCBTdHJpbmcgU2hhZG93Um9vdDo6
aW5uZXJIVE1MKCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNoYWRvd1Jvb3Q6OnNldElubmVy
SFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCkKIHsKICAgICBpZiAoaXNPcnBoYW4oKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgYXV0byBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoKmhvc3QoKSwgbWFya3VwLCBBbGxvd1Nj
cmlwdGluZ0NvbnRlbnQpOwogICAgIGlmIChmcmFnbWVudC5oYXNFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2VFeGNlcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRl
eCAxY2Y4ZjkzZmE2MGM5MGRmODE2ZTlhYWJhMzBkMWFiYjlhM2FhMmFhLi4zZWMzMDg1MWY4ODUy
OGJhMzAzZmIyMjVkOTMwYzFiZmQ1NWU1YmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC01OCw3ICs1
OCw3IEBAIFRleHQ6On5UZXh0KCkKIEV4Y2VwdGlvbk9yPFJlZjxUZXh0Pj4gVGV4dDo6c3BsaXRU
ZXh0KHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIEV2ZW50UXVldWVTY29wZSBzY29w
ZTsKICAgICBhdXRvIG9sZERhdGEgPSBkYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
aW5kZXggNGQ0OWQ3MWQ3OGNkM2MzOTdjMzY5MDcyYzBiZWVjMzRmNDczNjgzOS4uOGEwYjU5YTBi
YzM4ZGQxMmU0NmU5MzRmNjI0M2NjODNjZDRlOTE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcApAQCAtODkwLDcgKzg5MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxEb2N1bWVudEZyYWdtZW50
Pj4gY3JlYXRlRnJhZ21lbnRGb3JJbm5lck91dGVySFRNTChFbGVtZW50JiBjb250CiAKICAgICBi
b29sIHdhc1ZhbGlkID0gZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgJmNvbnRleHRFbGVtZW50
LCBwYXJzZXJDb250ZW50UG9saWN5KTsKICAgICBpZiAoIXdhc1ZhbGlkKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKICAgICByZXR1cm4gV1RGTW92ZShmcmFnbWVudCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCmluZGV4IGJmNmUwMjg0NzMyNmY1ZTk4ZTA0ZmFj
NzZhZDY0ZGExMGMwMGE2ODcuLjM0YmYyNzk3ZDE0M2QxOTM1NzdjMmQ4ZTU5NmJjMjFjMmY2MmE2
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcApAQCAtMTI4LDkgKzEyOCw5
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwoQmxvYiogYmxv
YikKIAogRXhjZXB0aW9uT3I8dm9pZD4gRmlsZVJlYWRlcjo6cmVhZEludGVybmFsKEJsb2ImIGJs
b2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXBlIHR5cGUpCiB7Ci0gICAgLy8gSWYgbXVsdGlw
bGUgY29uY3VycmVudCByZWFkIG1ldGhvZHMgYXJlIGNhbGxlZCBvbiB0aGUgc2FtZSBGaWxlUmVh
ZGVyLCBJTlZBTElEX1NUQVRFX0VSUiBzaG91bGQgYmUgdGhyb3duIHdoZW4gdGhlIHN0YXRlIGlz
IExPQURJTkcuCisgICAgLy8gSWYgbXVsdGlwbGUgY29uY3VycmVudCByZWFkIG1ldGhvZHMgYXJl
IGNhbGxlZCBvbiB0aGUgc2FtZSBGaWxlUmVhZGVyLCBJbnZhbGlkU3RhdGVFcnJvciBzaG91bGQg
YmUgdGhyb3duIHdoZW4gdGhlIHN0YXRlIGlzIExPQURJTkcuCiAgICAgaWYgKG1fc3RhdGUgPT0g
TE9BRElORykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAg
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlclN5bmMuY3BwCmluZGV4IDY4YTQ4MTk2OWQ1ZWM3MmZlNWM3ZDNiMWFmODJmMzBhMDkwMDJi
ZjguLjgyOGIxMDM0OWM3YmE5ODk4Y2RlZmEzNjA5NDcxY2YwZGQyY2ZmNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCkBAIC03OCwyOSArNzgsMjkgQEAgc3Rh
dGljIEV4Y2VwdGlvbkNvZGUgZXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKEZpbGVFcnJvcjo6RXJy
b3JDb2RlIGVycm9yQ29kZSkKICAgICBjYXNlIEZpbGVFcnJvcjo6T0s6CiAgICAgICAgIHJldHVy
biBOb0V4Y2VwdGlvbjsKICAgICBjYXNlIEZpbGVFcnJvcjo6Tk9UX0ZPVU5EX0VSUjoKLSAgICAg
ICAgcmV0dXJuIE5PVF9GT1VORF9FUlI7CisgICAgICAgIHJldHVybiBOb3RGb3VuZEVycm9yOwog
ICAgIGNhc2UgRmlsZUVycm9yOjpTRUNVUklUWV9FUlI6Ci0gICAgICAgIHJldHVybiBTRUNVUklU
WV9FUlI7CisgICAgICAgIHJldHVybiBTZWN1cml0eUVycm9yOwogICAgIGNhc2UgRmlsZUVycm9y
OjpBQk9SVF9FUlI6Ci0gICAgICAgIHJldHVybiBBQk9SVF9FUlI7CisgICAgICAgIHJldHVybiBB
Ym9ydEVycm9yOwogICAgIGNhc2UgRmlsZUVycm9yOjpOT1RfUkVBREFCTEVfRVJSOgogICAgICAg
ICByZXR1cm4gTm90UmVhZGFibGVFcnJvcjsKICAgICBjYXNlIEZpbGVFcnJvcjo6RU5DT0RJTkdf
RVJSOgogICAgICAgICByZXR1cm4gRW5jb2RpbmdFcnJvcjsKICAgICBjYXNlIEZpbGVFcnJvcjo6
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOgotICAgICAgICByZXR1cm4gTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm4gTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJy
b3I7CiAgICAgY2FzZSBGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSOgotICAgICAgICByZXR1
cm4gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBJbnZhbGlkU3RhdGVFcnJvcjsK
ICAgICBjYXNlIEZpbGVFcnJvcjo6U1lOVEFYX0VSUjoKLSAgICAgICAgcmV0dXJuIFNZTlRBWF9F
UlI7CisgICAgICAgIHJldHVybiBTeW50YXhFcnJvcjsKICAgICBjYXNlIEZpbGVFcnJvcjo6SU5W
QUxJRF9NT0RJRklDQVRJT05fRVJSOgotICAgICAgICByZXR1cm4gSU5WQUxJRF9NT0RJRklDQVRJ
T05fRVJSOworICAgICAgICByZXR1cm4gSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yOwogICAgIGNh
c2UgRmlsZUVycm9yOjpRVU9UQV9FWENFRURFRF9FUlI6Ci0gICAgICAgIHJldHVybiBRVU9UQV9F
WENFRURFRF9FUlI7CisgICAgICAgIHJldHVybiBRdW90YUV4Y2VlZGVkRXJyb3I7CiAgICAgY2Fz
ZSBGaWxlRXJyb3I6OlRZUEVfTUlTTUFUQ0hfRVJSOgotICAgICAgICByZXR1cm4gVFlQRV9NSVNN
QVRDSF9FUlI7CisgICAgICAgIHJldHVybiBUeXBlTWlzbWF0Y2hFcnJvcjsKICAgICBjYXNlIEZp
bGVFcnJvcjo6UEFUSF9FWElTVFNfRVJSOgotICAgICAgICByZXR1cm4gTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm4gTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3I7
CiAgICAgfQogICAgIHJldHVybiBVbmtub3duRXJyb3I7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRv
a2VuTGlzdC5jcHAKaW5kZXggZjE5ZTg4Zjg3MWEyZWUwMmY1MmIxMDk2NmY0NzdlNzFiNmJkMzMx
NC4uMjU1NWI2ODQ0NmIyOGVjMmJmMDY1ZjdiY2M0ZTFmNWE3Zjc2YTAyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRE9NVG9rZW5MaXN0LmNwcApAQCAtNTAsMTAgKzUwLDEwIEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCB0b2tlbkNvbnRhaW5zSFRNTFNwYWNlKGNvbnN0IFN0cmluZyYgdG9rZW4pCiBFeGNlcHRp
b25Pcjx2b2lkPiBET01Ub2tlbkxpc3Q6OnZhbGlkYXRlVG9rZW4oY29uc3QgU3RyaW5nJiB0b2tl
bikKIHsKICAgICBpZiAodG9rZW4uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3Ig
fTsKIAogICAgIGlmICh0b2tlbkNvbnRhaW5zSFRNTFNwYWNlKHRva2VuKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKICAgICByZXR1cm4geyB9Owog
fQpAQCAtMTYxLDEwICsxNjEsMTAgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gRE9NVG9rZW5MaXN0Ojp0
b2dnbGUoY29uc3QgQXRvbWljU3RyaW5nJiB0b2tlbiwgc3RkOjpvcHRpb25hbDwKIEV4Y2VwdGlv
bk9yPHZvaWQ+IERPTVRva2VuTGlzdDo6cmVwbGFjZShjb25zdCBBdG9taWNTdHJpbmcmIGl0ZW0s
IGNvbnN0IEF0b21pY1N0cmluZyYgcmVwbGFjZW1lbnQpCiB7CiAgICAgaWYgKGl0ZW0uaXNFbXB0
eSgpIHx8IHJlcGxhY2VtZW50LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKICAgICBpZiAodG9rZW5Db250YWluc0hUTUxTcGFjZShpdGVtKSB8fCB0b2tlbkNvbnRhaW5z
SFRNTFNwYWNlKHJlcGxhY2VtZW50KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQ0hBUkFDVEVSX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENo
YXJhY3RlckVycm9yIH07CiAKICAgICBhdXRvJiB0b2tlbnMgPSB0aGlzLT50b2tlbnMoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCA5YmY0MWQ2ODA4
NGRlMmYzZGZmMDg4NDMzY2MzYmRjMWI3YWM0N2UwLi44ODhhNWM3ZDY5ZDYyNmNiOTg0OTI5MWIy
YmVkMzk4YWE2MTA0MTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcApAQCAtNTU0LDcgKzU1NCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eUZyb21KU1ZhbHVlKEpTQzo6SlNWYWx1ZSBxdWFsaXR5VmFsdWUpCiBFeGNlcHRpb25PcjxV
bmNhY2hlZFN0cmluZz4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBKU0M6OkpTVmFsdWUgcXVhbGl0eVZhbHVlKQogewogICAgIGlmICghbV9vcmln
aW5DbGVhbikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgaWYgKG1fc2l6
ZS5pc0VtcHR5KCkgfHwgIWJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gVW5jYWNoZWRTdHJpbmcg
eyBBU0NJSUxpdGVyYWwgeyAiZGF0YTosIiB9IH07CkBAIC01ODEsNyArNTgxLDcgQEAgRXhjZXB0
aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxDYW52YXNFbGVtZW50Ojp0
b0Jsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgUmVmPEJsb2JDYWxsYmFjaz4m
JiBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgSlNDOjpKU1ZhbHVlIHF1YWxpdHlW
YWx1ZSkKIHsKICAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5
RXJyb3IgfTsKIAogICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFidWZmZXIoKSkgewogICAg
ICAgICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhjb250ZXh0LCBudWxscHRyKTsKQEAgLTY0
NSwxMCArNjQ1LDEwIEBAIFJlZlB0cjxNZWRpYVNhbXBsZT4gSFRNTENhbnZhc0VsZW1lbnQ6OnRv
TWVkaWFTYW1wbGUoKQogRXhjZXB0aW9uT3I8UmVmPE1lZGlhU3RyZWFtPj4gSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNhcHR1cmVTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3Rk
OjpvcHRpb25hbDxkb3VibGU+JiYgZnJhbWVSZXF1ZXN0UmF0ZSkKIHsKICAgICBpZiAoIW9yaWdp
bkNsZWFuKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24oU0VDVVJJVFlfRVJSLCBBU0NJSUxp
dGVyYWwoIkNhbnZhcyBpcyB0YWludGVkIikpOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uKFNl
Y3VyaXR5RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQ2FudmFzIGlzIHRhaW50ZWQiKSk7CiAKICAgICBp
ZiAoZnJhbWVSZXF1ZXN0UmF0ZSAmJiBmcmFtZVJlcXVlc3RSYXRlLnZhbHVlKCkgPCAwKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uKE5PVF9TVVBQT1JURURfRVJSLCBBU0NJSUxpdGVyYWwoImZy
YW1lUmVxdWVzdFJhdGUgaXMgbmVnYXRpdmUiKSk7CisgICAgICAgIHJldHVybiBFeGNlcHRpb24o
Tm90U3VwcG9ydGVkRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiZnJhbWVSZXF1ZXN0UmF0ZSBpcyBuZWdh
dGl2ZSIpKTsKIAogICAgIGF1dG8gdHJhY2sgPSBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFj
azo6Y3JlYXRlKGNvbnRleHQsICp0aGlzLCBXVEZNb3ZlKGZyYW1lUmVxdWVzdFJhdGUpKTsKICAg
ICBhdXRvIHN0cmVhbSA9ICBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA2NGU0MzEwZThjN2FiNDMwOGNkYTYwMjIwMmYzNzIy
NWE4NjEwZTBmLi4wYjkyODNjNGFiNDc2ZjY4MjgzNjY4NTI5NDZmNDc3YTBmNGY5MmEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtNTQxLDcgKzU0MSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEhUTUxFbGVtZW50OjpzZXRPdXRlclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQog
ewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAg
aWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9u
QWxsb3dlZEVycm9yIH07CiAKICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IHByZXZpb3VzU2libGlu
ZygpOwogICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsKQEAgLTU1NCw3ICs1
NTQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCkKICAgICAgICAgbmV3Q2hpbGQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQo
KSwgdGV4dCk7CiAKICAgICBpZiAoIXBhcmVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAKICAgICBhdXRvIHJlcGxhY2VSZXN1bHQgPSBw
YXJlbnQtPnJlcGxhY2VDaGlsZCgqbmV3Q2hpbGQsICp0aGlzKTsKICAgICBpZiAocmVwbGFjZVJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKQEAgLTY0NSw3ICs2NDUsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBIVE1MRWxlbWVudDo6c2V0Q29udGVudEVkaXRhYmxlKGNvbnN0IFN0cmluZyYgZW5hYmxlZCkK
ICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShlbmFibGVkLCAiaW5o
ZXJpdCIpKQogICAgICAgICByZW1vdmVBdHRyaWJ1dGUoY29udGVudGVkaXRhYmxlQXR0cik7CiAg
ICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICByZXR1cm4geyB9OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKaW5kZXgg
YmQxYjljYTY2NmEyZjk3YzM1OWQ5NmE1YjFjYTZhZTRmMjBiNzgyMi4uMmNmMjMxNmRmOTU1MzVl
ODcwMjA1NDNlYTM5MDNkM2FjZmU0NmU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZyYW1lT3duZXJFbGVtZW50LmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIEV4Y2VwdGlvbk9yPERv
Y3VtZW50Jj4gSFRNTEZyYW1lT3duZXJFbGVtZW50OjpnZXRTVkdEb2N1bWVudCgpIGNvbnN0CiAg
ICAgaWYgKGlzPFNWR0RvY3VtZW50Pihkb2N1bWVudCkpCiAgICAgICAgIHJldHVybiAqZG9jdW1l
bnQ7CiAgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3N0cnVjdC5odG1sI0lu
dGVyZmFjZUdldFNWR0RvY3VtZW50Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JU
RURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9
CiAKIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpzY2hlZHVsZWludmFsaWRhdGVTdHlsZUFu
ZExheWVyQ29tcG9zaXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKaW5kZXggMTM0OWI3NGE4MGUxZDg4YzdlYjhhNjdjZjU3Y2IzM2QwY2NkMjJjMS4uMzczNzc5
ZjQ1OWU4NzIwMDY0NTJkOWNhZTkyN2I0NmMzNWMyN2UxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMDI2LDcgKzEwMjYsNyBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnNldEVkaXRpbmdWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogRXhjZXB0aW9u
T3I8dm9pZD4gSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwg
VGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQogewogICAgIGlmIChpc0ZpbGVV
cGxvYWQoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRT
dGF0ZUVycm9yIH07CiAKICAgICBpZiAoIW1faW5wdXRUeXBlLT5jYW5TZXRWYWx1ZSh2YWx1ZSkp
CiAgICAgICAgIHJldHVybiB7IH07CkBAIC0xMDY3LDcgKzEwNjcsNyBAQCBkb3VibGUgSFRNTElu
cHV0RWxlbWVudDo6dmFsdWVBc051bWJlcigpIGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzTnVtYmVyKGRvdWJsZSBuZXdWYWx1ZSwgVGV4dEZpZWxk
RXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQogewogICAgIGlmICghc3RkOjppc2Zpbml0ZShu
ZXdWYWx1ZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBy
ZXR1cm4gbV9pbnB1dFR5cGUtPnNldFZhbHVlQXNEb3VibGUobmV3VmFsdWUsIGV2ZW50QmVoYXZp
b3IpOwogfQogCkBAIC0xMzA2LDcgKzEzMDYsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6Om11
bHRpcGxlKCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNp
emUodW5zaWduZWQgc2l6ZSkKIHsKICAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5k
ZXhTaXplRXJyb3IgfTsKICAgICBzZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKHNpemVBdHRy
LCBsaW1pdFRvT25seUhUTUxOb25OZWdhdGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm8oc2l6ZSwg
ZGVmYXVsdFNpemUpKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTkxNCw3ICsxOTE0LDcgQEAg
dm9pZCBMaXN0QXR0cmlidXRlVGFyZ2V0T2JzZXJ2ZXI6OmlkVGFyZ2V0Q2hhbmdlZCgpCiBFeGNl
cHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRSYW5nZVRleHQoY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudCkKIHsKICAgICBpZiAoIW1faW5wdXRUeXBlLT5zdXBwb3J0c1NlbGVjdGlv
bkFQSSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBy
ZXR1cm4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFJhbmdlVGV4dChyZXBsYWNlbWVu
dCk7CiB9CkBAIC0xOTIyLDcgKzE5MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRF
bGVtZW50OjpzZXRSYW5nZVRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKIEV4Y2VwdGlv
bk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFJhbmdlVGV4dChjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBjb25zdCBTdHJpbmcmIHNl
bGVjdGlvbk1vZGUpCiB7CiAgICAgaWYgKCFtX2lucHV0VHlwZS0+c3VwcG9ydHNTZWxlY3Rpb25B
UEkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgcmV0
dXJuIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRSYW5nZVRleHQocmVwbGFjZW1lbnQs
IHN0YXJ0LCBlbmQsIHNlbGVjdGlvbk1vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWFycXVlZUVsZW1lbnQuY3BwCmluZGV4IDg5NDZhMWQ4MjFkYWQzOTUwZWZjMjZiMjAzYmFlOTNm
ZmE2ODg0ZTMuLmJhMDYyYzE4ZDUzNjQ2NmUxZmFhYjVkNDBkZjI1NGI5YmViZjcwY2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKQEAgLTE1MSw3ICsxNTEs
NyBAQCBpbnQgSFRNTE1hcnF1ZWVFbGVtZW50Ojpsb29wKCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZv
aWQ+IEhUTUxNYXJxdWVlRWxlbWVudDo6c2V0TG9vcChpbnQgbG9vcCkKIHsKICAgICBpZiAobG9v
cCA8PSAwICYmIGxvb3AgIT0gLTEpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9T
SVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
ICAgICBzZXRJbnRlZ3JhbEF0dHJpYnV0ZShsb29wQXR0ciwgbG9vcCk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGFmY2Q3
MGI5MDg4MTY0OTI3ZTk3ODcxZDJhZWRkY2Y5YzMxYWRhODYuLmM1NmM3YWE4ZWE0N2YzYzAwNTNh
NzdjZDI4YTAzOTkxOTAxNzY5NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcApAQCAtMjk1MCw3ICsyOTUwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRD
dXJyZW50VGltZShjb25zdCBNZWRpYVRpbWUmIHRpbWUpCiBFeGNlcHRpb25Pcjx2b2lkPiBIVE1M
TWVkaWFFbGVtZW50OjpzZXRDdXJyZW50VGltZUZvckJpbmRpbmdzKGRvdWJsZSB0aW1lKQogewog
ICAgIGlmIChtX21lZGlhQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciB9OwogICAgIHNlZWsoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpKTsK
ICAgICByZXR1cm4geyB9OwogfQpAQCAtMzE1NCw3ICszMTU0LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpwbGF5KERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCiAgICAgfQog
CiAgICAgaWYgKG1fZXJyb3IgJiYgbV9lcnJvci0+Y29kZSgpID09IE1lZGlhRXJyb3I6Ok1FRElB
X0VSUl9TUkNfTk9UX1NVUFBPUlRFRCkgewotICAgICAgICBwcm9taXNlLnJlamVjdChOT1RfU1VQ
UE9SVEVEX0VSUiwgIlRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAg
cHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IsICJUaGUgb3BlcmF0aW9uIGlzIG5vdCBz
dXBwb3J0ZWQuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMzNjMsNyArMzM2Myw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxNZWRpYUVsZW1lbnQ6OnNldFZvbHVtZShkb3VibGUg
dm9sdW1lKQogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnNldFZvbHVtZSglcCkg
LSAlZiIsIHRoaXMsIHZvbHVtZSk7CiAKICAgICBpZiAoISh2b2x1bWUgPj0gMCAmJiB2b2x1bWUg
PD0gMSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogI2lmICFQTEFURk9S
TShJT1MpCiAgICAgaWYgKG1fdm9sdW1lID09IHZvbHVtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUVsZW1lbnQuY3BwCmluZGV4IGFlOWFmOGRiZDUwZWMzM2VjOTU5MzczOTdlMDk3ZjA3
MzFlMGZkYTguLjlkNTk4ZjY1NzgyYzA2ZTE2MmIxYzE1YTgyMzc2OTFlMDMwOTJmNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcApAQCAtODcsNyArODcsNyBAQCBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogSFRNTFRhYmxlRWxlbWVudDo6dEhlYWQoKSBjb25zdAog
RXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRhYmxlRWxlbWVudDo6c2V0VEhlYWQoUmVmUHRyPEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50PiYmIG5ld0hlYWQpCiB7CiAgICAgaWYgKFVOTElLRUxZKG5ld0hl
YWQgJiYgIW5ld0hlYWQtPmhhc1RhZ05hbWUodGhlYWRUYWcpKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAKICAgICBkZWxldGVUSGVhZCgpOwogICAg
IGlmICghbmV3SGVhZCkKQEAgLTExNCw3ICsxMTQsNyBAQCBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCogSFRNTFRhYmxlRWxlbWVudDo6dEZvb3QoKSBjb25zdAogRXhjZXB0aW9uT3I8dm9pZD4gSFRN
TFRhYmxlRWxlbWVudDo6c2V0VEZvb3QoUmVmUHRyPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiYm
IG5ld0Zvb3QpCiB7CiAgICAgaWYgKFVOTElLRUxZKG5ld0Zvb3QgJiYgIW5ld0Zvb3QtPmhhc1Rh
Z05hbWUodGZvb3RUYWcpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9S
RVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVz
dEVycm9yIH07CiAgICAgZGVsZXRlVEZvb3QoKTsKICAgICBpZiAoIW5ld0Zvb3QpCiAgICAgICAg
IHJldHVybiB7IH07CkBAIC0xODYsNyArMTg2LDcgQEAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
IEhUTUxUYWJsZUVsZW1lbnQ6Omxhc3RCb2R5KCkgY29uc3QKIEV4Y2VwdGlvbk9yPFJlZjxIVE1M
RWxlbWVudD4+IEhUTUxUYWJsZUVsZW1lbnQ6Omluc2VydFJvdyhpbnQgaW5kZXgpCiB7CiAgICAg
aWYgKGluZGV4IDwgLTEpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAg
IFJlZjxIVE1MVGFibGVFbGVtZW50PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIApAQCAtMTk5LDcg
KzE5OSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxIVE1MRWxlbWVudD4+IEhUTUxUYWJsZUVsZW1lbnQ6
Omluc2VydFJvdyhpbnQgaW5kZXgpCiAgICAgICAgICAgICByb3cgPSBIVE1MVGFibGVSb3dzQ29s
bGVjdGlvbjo6cm93QWZ0ZXIoKnRoaXMsIGxhc3RSb3cuZ2V0KCkpOwogICAgICAgICAgICAgaWYg
KCFyb3cpIHsKICAgICAgICAgICAgICAgICBpZiAoaSAhPSBpbmRleCkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGFzdFJvdyA9IHJvdzsKQEAg
LTI0NCw3ICsyNDQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MVGFibGVFbGVtZW50OjpkZWxl
dGVSb3coaW50IGluZGV4KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghcm93KQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVf
RVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
ICAgICB9CiAgICAgcmV0dXJuIHJvdy0+cmVtb3ZlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAppbmRleCA2MmUyNmNlYTM5M2ZmYWUzNWU2NGIwMzhl
ZWEyMTY0M2M1MWY1MDQyLi5jMDQzNDhkMmVhOGYzMGUwM2FmYjIwYjA2NjExNDNjOGViZTc0MmJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKQEAgLTEx
MSwxMSArMTExLDExIEBAIGludCBIVE1MVGFibGVSb3dFbGVtZW50OjpzZWN0aW9uUm93SW5kZXgo
KSBjb25zdAogRXhjZXB0aW9uT3I8UmVmPEhUTUxUYWJsZUNlbGxFbGVtZW50Pj4gSFRNTFRhYmxl
Um93RWxlbWVudDo6aW5zZXJ0Q2VsbChpbnQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4IDwgLTEp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICBhdXRvIGNoaWxkcmVuID0g
Y2VsbHMoKTsKICAgICBpbnQgbnVtQ2VsbHMgPSBjaGlsZHJlbi0+bGVuZ3RoKCk7CiAgICAgaWYg
KGluZGV4ID4gbnVtQ2VsbHMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpF
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAg
ICBhdXRvIGNlbGwgPSBIVE1MVGFibGVDZWxsRWxlbWVudDo6Y3JlYXRlKHRkVGFnLCBkb2N1bWVu
dCgpKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiByZXN1bHQ7CiAgICAgaWYgKGluZGV4IDwgMCB8
fCBpbmRleCA+PSBudW1DZWxscykKQEAgLTEzNyw3ICsxMzcsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBIVE1MVGFibGVSb3dFbGVtZW50OjpkZWxldGVDZWxsKGludCBpbmRleCkKICAgICAgICAgaW5k
ZXggPSBudW1DZWxscyAtIDE7CiAgICAgfQogICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0g
bnVtQ2VsbHMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICByZXR1cm4g
cmVtb3ZlQ2hpbGQoKmNoaWxkcmVuLT5pdGVtKGluZGV4KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKaW5kZXggNjA3YmNhMTBkODAw
ZGYwMTU4ZTEwYjE1NTkzMGUyNTg1YTEzODA0MC4uM2U5YTdhMmFkZWJkMTQ1ZWU2MDU3N2VkNzQx
NDk5NDc4YmU0YjY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVT
ZWN0aW9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0
aW9uRWxlbWVudC5jcHAKQEAgLTU5LDExICs1OSwxMSBAQCBjb25zdCBTdHlsZVByb3BlcnRpZXMq
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjphZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRl
UwogRXhjZXB0aW9uT3I8UmVmPEhUTUxFbGVtZW50Pj4gSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6
Omluc2VydFJvdyhpbnQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4IDwgLTEpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICBhdXRvIGNoaWxkcmVuID0gcm93cygpOwogICAg
IGludCBudW1Sb3dzID0gY2hpbGRyZW4tPmxlbmd0aCgpOwogICAgIGlmIChpbmRleCA+IG51bVJv
d3MpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICBhdXRvIHJvdyA9IEhU
TUxUYWJsZVJvd0VsZW1lbnQ6OmNyZWF0ZSh0clRhZywgZG9jdW1lbnQoKSk7CiAgICAgRXhjZXB0
aW9uT3I8dm9pZD4gcmVzdWx0OwogICAgIGlmIChudW1Sb3dzID09IGluZGV4IHx8IGluZGV4ID09
IC0xKQpAQCAtODUsNyArODUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudDo6ZGVsZXRlUm93KGludCBpbmRleCkKICAgICAgICAgaW5kZXggPSBudW1Sb3dzIC0g
MTsKICAgICB9CiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBudW1Sb3dzKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgcmV0dXJuIHJlbW92ZUNoaWxkKCpjaGls
ZHJlbi0+aXRlbShpbmRleCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDIyNjA3Mzg4MDU5YjlmMGFiN2NhYWY5
MzZkNmFiYzQyZmJmNzkyMWUuLmY0NTYwZjQxOTIxYzYyMWMzMzViYzk2ZjJlMDM0YzdjZTc1NTE5
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCkBAIC0yMjIsNyArMjIyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldFJhbmdlVGV4dChjb25zdCBTdHJpbmcmIHJlcGxhY2UKIEV4
Y2VwdGlvbk9yPHZvaWQ+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRSYW5nZVRleHQo
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3Rpb25Nb2RlKQogewogICAgIGlmIChzdGFydCA+IGVuZCkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgU3RyaW5nIHRleHQgPSBpbm5l
clRleHRWYWx1ZSgpOwogICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwpA
QCAtNzc3LDcgKzc3Nyw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGly
ZWN0aW9uRm9yRm9ybURhdGEoKSBjb25zdAogRXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OnNldE1heExlbmd0aChpbnQgbWF4TGVuZ3RoKQogewogICAgIGlmICht
YXhMZW5ndGggPCAwIHx8IChtX21pbkxlbmd0aCA+PSAwICYmIG1heExlbmd0aCA8IG1fbWluTGVu
Z3RoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIHNldEludGVncmFs
QXR0cmlidXRlKG1heGxlbmd0aEF0dHIsIG1heExlbmd0aCk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
QEAgLTc4NSw3ICs3ODUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c2V0TWF4TGVuZ3RoKGludCBtYXhMZW5ndGgpCiBFeGNlcHRpb25Pcjx2b2lkPiBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0TWluTGVuZ3RoKGludCBtaW5MZW5ndGgpCiB7
CiAgICAgaWYgKG1pbkxlbmd0aCA8IDAgfHwgKG1fbWF4TGVuZ3RoID49IDAgJiYgbWluTGVuZ3Ro
ID4gbV9tYXhMZW5ndGgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAg
c2V0SW50ZWdyYWxBdHRyaWJ1dGUobWlubGVuZ3RoQXR0ciwgbWluTGVuZ3RoKTsKICAgICByZXR1
cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXgg
ZTkyMzZlZTMyZWYwNDgyMzk5NmI3YmZhOTljZDMzYmE3ZDVhMjkzYS4uZWExNDllODhiN2NlNjI1
ZWUzYTk4MGQ2ZTFlY2EzOGUzOTJhNTRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwCkBAIC0zMTMsNyArMzEzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTFZp
ZGVvRWxlbWVudDo6d2Via2l0RW50ZXJGdWxsc2NyZWVuKCkKICAgICAvLyBHZW5lcmF0ZSBhbiBl
eGNlcHRpb24gaWYgdGhpcyBpc24ndCBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gYSB1c2VyIGdlc3R1
cmUsIG9yIGlmIHRoZSAKICAgICAvLyBlbGVtZW50IGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVl
bi4KICAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLmZ1bGxzY3JlZW5QZXJtaXR0ZWQoKnRoaXMpIHx8
ICFzdXBwb3J0c0Z1bGxzY3JlZW4oSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlU3RhbmRhcmQpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
CiAKICAgICBlbnRlckZ1bGxzY3JlZW4oKTsKICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZURhdGEuY3BwCmluZGV4IGFhN2ZlMzI5N2U2ODg0NTliZmY1ZTZkYmUxMzRkNDJlZDhlNTli
NWMuLjIzYTZhZTAxN2U4MzFjYjFmZThmYzVlZTQyZjUzZTU1NmQzZjBiZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlRGF0YS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
RXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRlKHVuc2lnbmVkIHN3
LCB1bnNpZ25lZCBzaCkKIHsKICAgICBpZiAoIXN3IHx8ICFzaCkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OwogCiAgICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBkYXRh
U2l6ZSA9IDQ7CiAgICAgZGF0YVNpemUgKj0gc3c7CkBAIC04MSwxOCArODEsMTggQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRlKFJlZjxVaW50OENsYW1w
ZWRBcnJheT4mJiBieXRlQXIKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBieXRlQXJyYXktPmxl
bmd0aCgpOwogICAgIGlmICghbGVuZ3RoIHx8IGxlbmd0aCAlIDQgIT0gMCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgaWYgKCFzdykKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgbGVuZ3RoIC89IDQ7CiAgICAgaWYgKGxlbmd0
aCAlIHN3ICE9IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAog
ICAgIHVuc2lnbmVkIGhlaWdodCA9IGxlbmd0aCAvIHN3OwogICAgIGlmIChzaCAmJiBzaCAhPSBo
ZWlnaHQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIHJldHVybiBj
cmVhdGUoSW50U2l6ZShzdywgaGVpZ2h0KSwgV1RGTW92ZShieXRlQXJyYXkpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCBlNzE1ZmZiMzljYWIyZDcwMDZlMGQyYjZmNjY3Yzlj
YWFiZjQ1ZTE4Li40MGMxMDMzZWY0NDM0ZjJjNjRhY2ZiZGY0MjFhMjQ5NjgxMzJjZGFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC0yMjUsNyArMjI1LDcgQEAgZG91YmxlIElucHV0
VHlwZTo6dmFsdWVBc0RhdGUoKSBjb25zdAogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnB1dFR5cGU6
OnNldFZhbHVlQXNEYXRlKGRvdWJsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IgfTsKIH0KIAogZG91YmxlIElucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0CkBA
IC0yNDAsNyArMjQwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW5wdXRUeXBlOjpzZXRWYWx1ZUFz
RG91YmxlKGRvdWJsZSBkb3VibGVWYWx1ZSwgVGV4dEZpZWxkRXZlbnQKIAogRXhjZXB0aW9uT3I8
dm9pZD4gSW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGVjaW1hbChjb25zdCBEZWNpbWFsJiwgVGV4dEZp
ZWxkRXZlbnRCZWhhdmlvcikgY29uc3QKIHsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Ig
fTsKIH0KIAogYm9vbCBJbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0CkBAIC05
ODMsMTggKzk4MywxOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnB1dFR5cGU6OmFwcGx5U3RlcChp
bnQgY291bnQsIEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbgogewogICAgIFN0ZXBSYW5n
ZSBzdGVwUmFuZ2UoY3JlYXRlU3RlcFJhbmdlKGFueVN0ZXBIYW5kbGluZykpOwogICAgIGlmICgh
c3RlcFJhbmdlLmhhc1N0ZXAoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
U1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciB9OwogCiAgICAgY29uc3QgRGVjaW1hbCBjdXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFOKGVs
ZW1lbnQoKS52YWx1ZSgpKTsKICAgICBpZiAoIWN1cnJlbnQuaXNGaW5pdGUoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIERlY2ltYWwgbmV3VmFsdWUgPSBj
dXJyZW50ICsgc3RlcFJhbmdlLnN0ZXAoKSAqIGNvdW50OwogICAgIGlmICghbmV3VmFsdWUuaXNG
aW5pdGUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAg
Y29uc3QgRGVjaW1hbCBhY2NlcHRhYmxlRXJyb3JWYWx1ZSA9IHN0ZXBSYW5nZS5hY2NlcHRhYmxl
RXJyb3IoKTsKICAgICBpZiAobmV3VmFsdWUgLSBzdGVwUmFuZ2UubWluaW11bSgpIDwgLWFjY2Vw
dGFibGVFcnJvclZhbHVlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
CiAgICAgaWYgKG5ld1ZhbHVlIDwgc3RlcFJhbmdlLm1pbmltdW0oKSkKICAgICAgICAgbmV3VmFs
dWUgPSBzdGVwUmFuZ2UubWluaW11bSgpOwogCkBAIC0xMDAyLDcgKzEwMDIsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBJbnB1dFR5cGU6OmFwcGx5U3RlcChpbnQgY291bnQsIEFueVN0ZXBIYW5kbGlu
ZyBhbnlTdGVwSGFuZGxpbgogICAgICAgICBuZXdWYWx1ZSA9IHN0ZXBSYW5nZS5hbGlnblZhbHVl
Rm9yU3RlcChjdXJyZW50LCBuZXdWYWx1ZSk7CiAKICAgICBpZiAobmV3VmFsdWUgLSBzdGVwUmFu
Z2UubWF4aW11bSgpID4gYWNjZXB0YWJsZUVycm9yVmFsdWUpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICBpZiAobmV3VmFsdWUgPiBzdGVwUmFuZ2UubWF4aW11
bSgpKQogICAgICAgICBuZXdWYWx1ZSA9IHN0ZXBSYW5nZS5tYXhpbXVtKCk7CiAKQEAgLTEwMzIs
NyArMTAzMiw3IEBAIFN0ZXBSYW5nZSBJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVw
SGFuZGxpbmcpIGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBJbnB1dFR5cGU6OnN0ZXBVcChpbnQg
bikKIHsKICAgICBpZiAoIWlzU3RlcHBhYmxlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IgfTsKICAgICByZXR1cm4gYXBwbHlTdGVwKG4sIFJlamVjdEFueSwgRGlzcGF0
Y2hOb0V2ZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGY1MjdjZDM4YTE0NTNmOTQzOWFjYjliNGNjYmY4ZTNkOGYzODM5YjEuLjQ5NDBhNzk2NGI2
NGI3NDdjMmMxODc3OGIzNDRkM2E0NTc3M2YxYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlh
Q29udHJvbGxlci5jcHAKQEAgLTI1Niw3ICsyNTYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBNZWRp
YUNvbnRyb2xsZXI6OnNldFZvbHVtZShkb3VibGUgbGV2ZWwpCiAgICAgLy8gSWYgdGhlIG5ldyB2
YWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSAwLjAgdG8gMS4wIGluY2x1c2l2ZSwgdGhlbiwgb24g
c2V0dGluZywgYW4gCiAgICAgLy8gSW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uIG11c3QgYmUgcmFp
c2VkIGluc3RlYWQuCiAgICAgaWYgKCEobGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAxKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgLy8gVGhlIHZvbHVtZSBhdHRyaWJ1
dGUsIG9uIHNldHRpbmcsIGlmIHRoZSBuZXcgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAuMCB0byAx
LjAgaW5jbHVzaXZlLAogICAgIC8vIG11c3Qgc2V0IHRoZSBNZWRpYUNvbnRyb2xsZXIncyBtZWRp
YSBjb250cm9sbGVyIHZvbHVtZSBtdWx0aXBsaWVyIHRvIHRoZSBuZXcgdmFsdWUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNwcAppbmRleCBmZTY3NGFlY2QyMjg3ODk3ZDgwOWM1
NjUzYTRhNjBhZWEzMzBmZTk0Li4yMjI3MjM2ODE0OGZiYTk3OWYxMTBiODU0NmFlZDVhNzE3NGRj
NGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCkBAIC0xMDgsNyAr
MTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTnVtYmVySW5wdXRUeXBlOjpzZXRWYWx1ZUFzRG91
YmxlKGRvdWJsZSBuZXdWYWx1ZSwgVGV4dEZpZWxkRXYKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXggZm9yIG51bWJlciBpbnB1dCB0eXBlLgog
ICAgIGNvbnN0IGRvdWJsZSBmbG9hdE1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
YXgoKTsKICAgICBpZiAobmV3VmFsdWUgPCAtZmxvYXRNYXggfHwgbmV3VmFsdWUgPiBmbG9hdE1h
eCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIGVsZW1lbnQo
KS5zZXRWYWx1ZShzZXJpYWxpemVGb3JOdW1iZXJUeXBlKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlv
cik7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTExOCw3ICsxMTgsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBOdW1iZXJJbnB1dFR5cGU6OnNldFZhbHVlQXNEZWNpbWFsKGNvbnN0IERlY2ltYWwmIG5l
d1ZhbHVlLCBUZQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIG51bWVyaWNfbGltaXRzPGRv
dWJsZT46Om1heCBmb3IgbnVtYmVyIGlucHV0IHR5cGUuCiAgICAgY29uc3QgRGVjaW1hbCBmbG9h
dE1heCA9IERlY2ltYWw6OmZyb21Eb3VibGUoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1h
eCgpKTsKICAgICBpZiAobmV3VmFsdWUgPCAtZmxvYXRNYXggfHwgbmV3VmFsdWUgPiBmbG9hdE1h
eCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIGVsZW1lbnQo
KS5zZXRWYWx1ZShzZXJpYWxpemVGb3JOdW1iZXJUeXBlKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlv
cik7CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGltZVJhbmdlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVSYW5nZXMuY3BwCmluZGV4
IDdmNjk1ODY4YmU2OThkYWRjZDg1MzljMzMzZWExYWUzNDcwOTM4NWEuLjk0OTdjYjFkN2Q1MjRh
YzlhMGM3NTQzZTE0ZjJiOTUxNWRhZTkxZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGltZVJhbmdlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lUmFuZ2VzLmNw
cApAQCAtNjIsNyArNjIsNyBAQCBFeGNlcHRpb25Pcjxkb3VibGU+IFRpbWVSYW5nZXM6OnN0YXJ0
KHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIGJvb2wgdmFsaWQ7CiAgICAgTWVkaWFUaW1lIHJl
c3VsdCA9IG1fcmFuZ2VzLnN0YXJ0KGluZGV4LCB2YWxpZCk7CiAgICAgaWYgKCF2YWxpZCkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIHJldHVybiByZXN1bHQudG9Eb3Vi
bGUoKTsKIH0KIApAQCAtNzEsNyArNzEsNyBAQCBFeGNlcHRpb25Pcjxkb3VibGU+IFRpbWVSYW5n
ZXM6OmVuZCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICBib29sIHZhbGlkOwogICAgIE1lZGlh
VGltZSByZXN1bHQgPSBtX3Jhbmdlcy5lbmQoaW5kZXgsIHZhbGlkKTsKICAgICBpZiAoIXZhbGlk
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgcmV0dXJuIHJlc3VsdC50
b0RvdWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFk
aWVudC5jcHAKaW5kZXggMThmYWUzMWQ3NGJmZjU1ZGQxMDE1OTBlYjQzNmI1NmM5MWI3NmM5ZC4u
NzUyZDMyMDViMGNiYjEyMDMwZTM3ZGVhM2RjYjg4OTc1Yzg3NDM2NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcApAQCAtNDQsNyArNDQsNyBAQCBD
YW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0
IHIwLCBjb25zdCBGbG9hdFBvaW50JgogRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzR3JhZGllbnQ6
OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKIHsK
ICAgICBpZiAoISh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDEpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAKICAgICAvLyBGSVhNRTogUGFzc2luZyBudWxsIGZvciBjYW52YXMg
bWVhbnMgdGhpcyB3b24ndCB3b3JrIGZvciBjdXJyZW50IGNvbG9yLiBJcyB0aGF0IE9LPwogICAg
IENvbG9yIGNvbG9yID0gcGFyc2VDb2xvck9yQ3VycmVudENvbG9yKGNvbG9yU3RyaW5nLCBudWxs
cHRyIC8qY2FudmFzKi8pOwpAQCAtNTMsNyArNTMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52
YXNHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGZsb2F0IHZhbHVlLCBjb25zdCBTdHJpbmcmIGNvbG9y
UwogICAgICAgICBpZiAobV9kYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSkKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgfQog
CiAgICAgbV9ncmFkaWVudC0+YWRkQ29sb3JTdG9wKHZhbHVlLCBjb2xvcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXRoLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdGguY3BwCmluZGV4IDczNGEzYzg1NzViYzg5ZjQwNDc2
NDRjNWIyMjcxN2I2MGM1NzllMzYuLjEyNWU1YzRmZWIxMmIxZGQ0NTU4ZmYwN2ExMTMxNzk3MGJm
MGRlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdGgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdGguY3BwCkBAIC0x
MTYsNyArMTE2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzUGF0aDo6YXJjVG8oZmxvYXQg
eDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2EKICAgICAgICAgcmV0dXJuIHsg
fTsKIAogICAgIGlmIChyIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJ
WkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owog
CiAgICAgaWYgKCFoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkpCiAgICAgICAgIHJldHVybiB7IH07
CkBAIC0xNTksNyArMTU5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzUGF0aDo6YXJjKGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmcKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIGlmIChyYWRpdXMgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6
ZUVycm9yIH07CiAKICAgICBpZiAoIWhhc0ludmVydGlibGVUcmFuc2Zvcm0oKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKQEAgLTE4Miw3ICsxODIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNQ
YXRoOjplbGxpcHNlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZAog
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAw
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICBpZiAoIWhhc0ludmVy
dGlibGVUcmFuc2Zvcm0oKSkKICAgICAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IDhjMzNjZjRlMzRkZGJlMGZhMWVlMDBjNjljYmM1YTBiZjNjOWNjMjkuLmZkYjMwZWEwMzk3ZDU0
N2QzNGZjYzc5MWE5OTQ0MzdmYzYxMzkwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTQxMiw3ICsx
NDEyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2UoSFRNTEltYWdlRWxlbWVudCYgaW1hZ2VFbGUKIAogICAgIEZsb2F0UmVjdCBpbWFnZVJl
Y3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKGltYWdlRWxlbWVudCwgSW1hZ2VTaXpl
VHlwZTo6QmVmb3JlRGV2aWNlUGl4ZWxSYXRpbykpOwogICAgIGlmICghc3JjUmVjdC53aWR0aCgp
IHx8ICFzcmNSZWN0LmhlaWdodCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhf
U0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07
CiAKICAgICAvLyBXaGVuIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIGlzIG91dHNpZGUgdGhlIHNvdXJj
ZSBpbWFnZSwgdGhlIHNvdXJjZSByZWN0YW5nbGUgbXVzdCBiZSBjbGlwcGVkCiAgICAgLy8gdG8g
dGhlIHNvdXJjZSBpbWFnZSBhbmQgdGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBtdXN0IGJlIGNs
aXBwZWQgaW4gdGhlIHNhbWUgcHJvcG9ydGlvbi4KQEAgLTE0ODAsMTAgKzE0ODAsMTAgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENh
bnZhc0VsZW1lbnQmIHNvdXJjZUMKICAgICBGbG9hdFJlY3Qgc3JjQ2FudmFzUmVjdCA9IEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIHNvdXJjZUNhbnZhcy5zaXplKCkpOwogCiAgICAgaWYgKCFzcmND
YW52YXNSZWN0LndpZHRoKCkgfHwgIXNyY0NhbnZhc1JlY3QuaGVpZ2h0KCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlmICghc3JjUmVjdC53aWR0aCgp
IHx8ICFzcmNSZWN0LmhlaWdodCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhf
U0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07
CiAKICAgICBpZiAoIXNyY0NhbnZhc1JlY3QuY29udGFpbnMobm9ybWFsaXplUmVjdChzcmNSZWN0
KSkgfHwgIWRzdFJlY3Qud2lkdGgoKSB8fCAhZHN0UmVjdC5oZWlnaHQoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTE1MzksNyArMTUzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGVvLCBjCiAK
ICAgICBGbG9hdFJlY3QgdmlkZW9SZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSh2
aWRlbykpOwogICAgIGlmICghc3JjUmVjdC53aWR0aCgpIHx8ICFzcmNSZWN0LmhlaWdodCgpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICBpZiAoIXZpZGVvUmVjdC5j
b250YWlucyhub3JtYWxpemVSZWN0KHNyY1JlY3QpKSB8fCAhZHN0UmVjdC53aWR0aCgpIHx8ICFk
c3RSZWN0LmhlaWdodCgpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTc2MSw3ICsxNzYxLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OlN0eWxlJiYgc3QKIEV4Y2VwdGlvbk9yPFJlZjxDYW52YXNHcmFkaWVu
dD4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlTGluZWFyR3JhZGllbnQoZmxvYXQg
eDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEpCiB7CiAgICAgaWYgKCFzdGQ6OmlzZmlu
aXRlKHgwKSB8fCAhc3RkOjppc2Zpbml0ZSh5MCkgfHwgIXN0ZDo6aXNmaW5pdGUoeDEpIHx8ICFz
dGQ6OmlzZmluaXRlKHkxKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JU
RURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9
OwogCiAgICAgYXV0byBncmFkaWVudCA9IENhbnZhc0dyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2lu
dCh4MCwgeTApLCBGbG9hdFBvaW50KHgxLCB5MSkpOwogICAgIHByZXBhcmVHcmFkaWVudEZvckRh
c2hib2FyZChncmFkaWVudC5nZXQoKSk7CkBAIC0xNzcxLDEwICsxNzcxLDEwIEBAIEV4Y2VwdGlv
bk9yPFJlZjxDYW52YXNHcmFkaWVudD4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRl
TGluZWFyR3JhZGllbnQoCiBFeGNlcHRpb25PcjxSZWY8Q2FudmFzR3JhZGllbnQ+PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVJhZGlhbEdyYWRpZW50KGZsb2F0IHgwLCBmbG9hdCB5
MCwgZmxvYXQgcjAsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgcjEpCiB7CiAgICAgaWYgKCFz
dGQ6OmlzZmluaXRlKHgwKSB8fCAhc3RkOjppc2Zpbml0ZSh5MCkgfHwgIXN0ZDo6aXNmaW5pdGUo
cjApIHx8ICFzdGQ6OmlzZmluaXRlKHgxKSB8fCAhc3RkOjppc2Zpbml0ZSh5MSkgfHwgIXN0ZDo6
aXNmaW5pdGUocjEpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAK
ICAgICBpZiAocjAgPCAwIHx8IHIxIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
REVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJv
ciB9OwogCiAgICAgYXV0byBncmFkaWVudCA9IENhbnZhc0dyYWRpZW50OjpjcmVhdGUoRmxvYXRQ
b2ludCh4MCwgeTApLCByMCwgRmxvYXRQb2ludCh4MSwgeTEpLCByMSk7CiAgICAgcHJlcGFyZUdy
YWRpZW50Rm9yRGFzaGJvYXJkKGdyYWRpZW50LmdldCgpKTsKQEAgLTE3ODUsNyArMTc4NSw3IEBA
IEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGVQYXR0ZXJuKENhbnZhCiB7CiAgICAgYm9vbCByZXBlYXRYLCByZXBlYXRZOwog
ICAgIGlmICghQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShyZXBldGl0aW9uLCBy
ZXBlYXRYLCByZXBlYXRZKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihpbWFnZSwKICAgICAgICAgWyZdIChhdXRvJiBlbGVtZW50KSAtPiBF
eGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IHsgcmV0dXJuIHRoaXMtPmNyZWF0ZVBh
dHRlcm4oKmVsZW1lbnQsIHJlcGVhdFgsIHJlcGVhdFkpOyB9CkBAIC0xODAxLDcgKzE4MDEsNyBA
QCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MSQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmIChjYWNoZWRJbWFnZS0+c3RhdHVzKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcikK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgYm9vbCBvcmln
aW5DbGVhbiA9IGNhY2hlZEltYWdlLT5pc09yaWdpbkNsZWFuKGNhbnZhcygpLnNlY3VyaXR5T3Jp
Z2luKCkpOwogCkBAIC0xODIwLDcgKzE4MjAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFz
UGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MSQog
RXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmNyZWF0ZVBhdHRlcm4oSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcywgYm9vbCByZXBlYXRY
LCBib29sIHJlcGVhdFkpCiB7CiAgICAgaWYgKCFjYW52YXMud2lkdGgoKSB8fCAhY2FudmFzLmhl
aWdodCgpIHx8ICFjYW52YXMuYnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0
YXRlRXJyb3IgfTsKIAogICAgIHJldHVybiBSZWZQdHI8Q2FudmFzUGF0dGVybj4geyBDYW52YXNQ
YXR0ZXJuOjpjcmVhdGUoKmNhbnZhcy5jb3BpZWRJbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCBj
YW52YXMub3JpZ2luQ2xlYW4oKSkgfTsKIH0KQEAgLTE5NjMsNyArMTk2Myw3IEBAIHN0YXRpYyBS
ZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGVFbXB0eUltYWdlRGF0YShjb25zdCBJbnRTaXplJiBzaXpl
KQogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y3JlYXRlSW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRhKSBjb25zdAogewogICAgIGlm
ICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAK
ICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhLT5zaXplKCkpOwogfQpA
QCAtMTk3MSw3ICsxOTcxLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlSW1hZ2VEYXRhKEltYWdlRGEKIEV4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZUltYWdl
RGF0YShmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7CiAgICAgaWYgKCFzdyB8fCAhc2gpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIEZsb2F0U2l6ZSBsb2dpY2Fs
U2l6ZShzdGQ6OmFicyhzdyksIHN0ZDo6YWJzKHNoKSk7CiAgICAgaWYgKCFsb2dpY2FsU2l6ZS5p
c0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCkBAIC0yMDAxLDExICsyMDAxLDExIEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdl
RGF0YShJbWFnZUJ1ZmZlCiAgICAgaWYgKCFjYW52YXMoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVj
YXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikp
OwogICAgICAgICBjYW52YXMoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBjb25zb2xlTWVzc2FnZSk7Ci0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAKICAgICBpZiAoIXN3IHx8ICFz
aCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgaWYgKHN3IDwgMCkg
ewogICAgICAgICBzeCArPSBzdzsKQEAgLTIwMzgsNyArMjAzOCw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YShJ
bWFnZUJ1ZmZlCiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51bWJlcihpbWFnZURhdGFS
ZWN0LmhlaWdodCgpKTsKIAogICAgICAgICBjYW52YXMoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxldmVsOjpFcnJvciwgY29u
c29sZU1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IgfTsKICAgICB9CiAKICAgICByZXR1cm4gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VEYXRh
UmVjdC5zaXplKCksIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAK
aW5kZXggZDk4YzAyMmJhZTE0YzQ3ZTU4YzUyMDA1MjAyYjNhOTE3OWI0MTkzMS4uMWE4ODczYTFh
MjFhYmVmZWFiMzI3NTIwZTU4YzRjZjIyMzUwNTBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTUz
OTEsNyArNTM5MSw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFyCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTZWN1cml0eUVycm9yIH07CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU0MDIsNyAr
NTQwMiw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2FudmFzKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U2VjdXJpdHlFcnJvciB9OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NDE1LDcgKzU0MTUs
NyBAQCBFeGNlcHRpb25Pcjxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJp
dHlFcnJvciB9OwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFjay5jcHAKaW5kZXggNzhmZGEwNDhiYjAyMDc4NzE0ZmYxN2Q5OGI5NzFiZjQyNDZh
NTg1NC4uMDViNDFlMjFmOThhOTFkMjZlMDllYzI2Y2YwMDQ2ZmExMmM3NTFiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcApAQCAtMjk0LDcgKzI5NCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFRleHRUcmFjazo6YWRkQ3VlKFJlZjxUZXh0VHJhY2tDdWU+JiYgY3VlKQog
ICAgIC8vIHRyYWNrIGtpbmQgc2V0IHRvIG1ldGFkYXRhLCB0aHJvdyBhIEludmFsaWROb2RlVHlw
ZUVycm9yIGV4Y2VwdGlvbiBhbmQgZG9uJ3QgYWRkIHRoZSBjdWUgdG8gdGhlIFRleHRUcmFja0xp
c3QKICAgICAvLyBvZiB0aGUgVGV4dFRyYWNrLgogICAgIGlmIChjdWUtPmN1ZVR5cGUoKSA9PSBU
ZXh0VHJhY2tDdWU6OkRhdGEgJiYgbV9raW5kICE9IEtpbmQ6Ok1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9OT0RFX1RZUEVfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCiAgICAgLy8gVE9ETyg5MzE0
Myk6IEFkZCBzcGVjLWNvbXBsaWFudCBiZWhhdmlvciBmb3IgbmVnYXRpdmUgdGltZSB2YWx1ZXMu
CiAgICAgaWYgKCFjdWUtPnN0YXJ0TWVkaWFUaW1lKCkuaXNWYWxpZCgpIHx8ICFjdWUtPmVuZE1l
ZGlhVGltZSgpLmlzVmFsaWQoKSB8fCBjdWUtPnN0YXJ0TWVkaWFUaW1lKCkgPCBNZWRpYVRpbWU6
Onplcm9UaW1lKCkgfHwgY3VlLT5lbmRNZWRpYVRpbWUoKSA8IE1lZGlhVGltZTo6emVyb1RpbWUo
KSkKQEAgLTMzMiw5ICszMzIsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBUZXh0VHJhY2s6OnJlbW92
ZUN1ZShUZXh0VHJhY2tDdWUmIGN1ZSkKICAgICAvLyAxLiBJZiB0aGUgZ2l2ZW4gY3VlIGlzIG5v
dCBjdXJyZW50bHkgbGlzdGVkIGluIHRoZSBtZXRob2QncyBUZXh0VHJhY2sgCiAgICAgLy8gb2Jq
ZWN0J3MgdGV4dCB0cmFjaydzIHRleHQgdHJhY2sgbGlzdCBvZiBjdWVzLCB0aGVuIHRocm93IGEg
Tm90Rm91bmRFcnJvciBleGNlcHRpb24uCiAgICAgaWYgKGN1ZS50cmFjaygpICE9IHRoaXMpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgaWYgKCFtX2N1ZXMpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDIuIFJlbW92ZSBjdWUg
ZnJvbSB0aGUgbWV0aG9kJ3MgVGV4dFRyYWNrIG9iamVjdCdzIHRleHQgdHJhY2sncyB0ZXh0IHRy
YWNrIGxpc3Qgb2YgY3Vlcy4KICAgICBtX2N1ZXMtPnJlbW92ZShjdWUpOwpAQCAtNDAzLDcgKzQw
Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFRleHRUcmFjazo6cmVtb3ZlUmVnaW9uKFZUVFJlZ2lv
biogcmVnaW9uKQogICAgIC8vIDEuIElmIHRoZSBnaXZlbiByZWdpb24gaXMgbm90IGN1cnJlbnRs
eSBsaXN0ZWQgaW4gdGhlIG1ldGhvZCdzIFRleHRUcmFjawogICAgIC8vIG9iamVjdCdzIHRleHQg
dHJhY2sgbGlzdCBvZiByZWdpb25zLCB0aGVuIHRocm93IGEgTm90Rm91bmRFcnJvciBleGNlcHRp
b24uCiAgICAgaWYgKHJlZ2lvbi0+dHJhY2soKSAhPSB0aGlzKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90
Rm91bmRFcnJvciB9OwogCiAgICAgQVNTRVJUKG1fcmVnaW9ucyk7CiAgICAgbV9yZWdpb25zLT5y
ZW1vdmUoKnJlZ2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZU
VEN1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKaW5kZXggYmM5
NzMyYmIzMmI5NTE2NmY1NjBmNWEzOGQyMDE1MmIwNTg3YTViYi4uNmExNzllODVjM2M3ODBjMGFk
YjA5NWQyNDQ5ZDA1ZWZiNDk4Y2QzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9WVFRDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNw
cApAQCAtMzQ2LDcgKzM0Niw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVEN1ZTo6c2V0VmVydGlj
YWwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBlbHNlIGlmICh2YWx1ZSA9PSB2ZXJ0aWNhbEdy
b3dpbmdSaWdodEtleXdvcmQoKSkKICAgICAgICAgZGlyZWN0aW9uID0gVmVydGljYWxHcm93aW5n
UmlnaHQ7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICAKICAgICBp
ZiAoZGlyZWN0aW9uID09IG1fd3JpdGluZ0RpcmVjdGlvbikKICAgICAgICAgcmV0dXJuIHsgfTsK
QEAgLTM3NCw3ICszNzQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBWVFRDdWU6OnNldExpbmUoZG91
YmxlIHBvc2l0aW9uKQogICAgIC8vIE9uIHNldHRpbmcsIGlmIHRoZSB0ZXh0IHRyYWNrIGN1ZSBz
bmFwLXRvLWxpbmVzIGZsYWcgaXMgbm90IHNldCwgYW5kIHRoZSBuZXcKICAgICAvLyB2YWx1ZSBp
cyBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gMTAwLCB0aGVuIHRocm93IGFuIEluZGV4U2l6ZUVy
cm9yIGV4Y2VwdGlvbi4KICAgICBpZiAoIW1fc25hcFRvTGluZXMgJiYgIShwb3NpdGlvbiA+PSAw
ICYmIHBvc2l0aW9uIDw9IDEwMCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9T
SVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
IAogICAgIC8vIE90aGVyd2lzZSwgc2V0IHRoZSB0ZXh0IHRyYWNrIGN1ZSBsaW5lIHBvc2l0aW9u
IHRvIHRoZSBuZXcgdmFsdWUuCiAgICAgaWYgKG1fbGluZVBvc2l0aW9uID09IHBvc2l0aW9uKQpA
QCAtMzk0LDcgKzM5NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVEN1ZTo6c2V0UG9zaXRpb24o
ZG91YmxlIHBvc2l0aW9uKQogICAgIC8vIE9uIHNldHRpbmcsIGlmIHRoZSBuZXcgdmFsdWUgaXMg
bmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIDEwMCwgdGhlbiB0aHJvdyBhbiBJbmRleFNpemVFcnJv
ciBleGNlcHRpb24uCiAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgdGhlIHRleHQgdHJhY2sgY3VlIHRl
eHQgcG9zaXRpb24gdG8gdGhlIG5ldyB2YWx1ZS4KICAgICBpZiAoIShwb3NpdGlvbiA+PSAwICYm
IHBvc2l0aW9uIDw9IDEwMCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpF
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAog
ICAgIC8vIE90aGVyd2lzZSwgc2V0IHRoZSB0ZXh0IHRyYWNrIGN1ZSBsaW5lIHBvc2l0aW9uIHRv
IHRoZSBuZXcgdmFsdWUuCiAgICAgaWYgKG1fdGV4dFBvc2l0aW9uID09IHBvc2l0aW9uKQpAQCAt
NDEzLDcgKzQxMyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVEN1ZTo6c2V0U2l6ZShpbnQgc2l6
ZSkKICAgICAvLyBPbiBzZXR0aW5nLCBpZiB0aGUgbmV3IHZhbHVlIGlzIG5lZ2F0aXZlIG9yIGdy
ZWF0ZXIgdGhhbiAxMDAsIHRoZW4gdGhyb3cgYW4gSW5kZXhTaXplRXJyb3IKICAgICAvLyBleGNl
cHRpb24uIE90aGVyd2lzZSwgc2V0IHRoZSB0ZXh0IHRyYWNrIGN1ZSBzaXplIHRvIHRoZSBuZXcg
dmFsdWUuCiAgICAgaWYgKCEoc2l6ZSA+PSAwICYmIHNpemUgPD0gMTAwKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgdGhlIHRleHQg
dHJhY2sgY3VlIGxpbmUgcG9zaXRpb24gdG8gdGhlIG5ldyB2YWx1ZS4KICAgICBpZiAobV9jdWVT
aXplID09IHNpemUpCkBAIC00NjUsNyArNDY1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gVlRUQ3Vl
OjpzZXRBbGlnbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIGVsc2UgaWYgKHZhbHVlID09IHJp
Z2h0S2V5d29yZCgpKQogICAgICAgICBhbGlnbm1lbnQgPSBSaWdodDsKICAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIAogICAgIGlmIChhbGlnbm1lbnQgPT0gbV9jdWVB
bGlnbm1lbnQpCiAgICAgICAgIHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1ZUVFJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZU
VFJlZ2lvbi5jcHAKaW5kZXggYzY5YjQyNTdjNjdkZTYyZDA4OTNjOTlhNzc2MDM0ZTBkNmEwMjk2
ZC4uOGRmNGQwMzNhNTAyZWFjODczNzVlNGQzYjJhZjc4Nzc3ZDc5MWRhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVlRUUmVnaW9uLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIFZUVFJl
Z2lvbjo6c2V0SWQoY29uc3QgU3RyaW5nJiBpZCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVFJlZ2lv
bjo6c2V0V2lkdGgoZG91YmxlIHZhbHVlKQogewogICAgIGlmICghKHZhbHVlID49IDAgJiYgdmFs
dWUgPD0gMTAwKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIG1fd2lk
dGggPSB2YWx1ZTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtODksNyArODksNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBWVFRSZWdpb246OnNldFdpZHRoKGRvdWJsZSB2YWx1ZSkKIEV4Y2VwdGlvbk9y
PHZvaWQ+IFZUVFJlZ2lvbjo6c2V0SGVpZ2h0KGludCB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUg
PCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgbV9oZWlnaHRJbkxp
bmVzID0gdmFsdWU7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTk3LDcgKzk3LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gVlRUUmVnaW9uOjpzZXRIZWlnaHQoaW50IHZhbHVlKQogRXhjZXB0aW9uT3I8
dm9pZD4gVlRUUmVnaW9uOjpzZXRSZWdpb25BbmNob3JYKGRvdWJsZSB2YWx1ZSkKIHsKICAgICBp
ZiAoISh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDEwMCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhT
aXplRXJyb3IgfTsKICAgICBtX3JlZ2lvbkFuY2hvci5zZXRYKHZhbHVlKTsKICAgICByZXR1cm4g
eyB9OwogfQpAQCAtMTA1LDcgKzEwNSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVFJlZ2lvbjo6
c2V0UmVnaW9uQW5jaG9yWChkb3VibGUgdmFsdWUpCiBFeGNlcHRpb25Pcjx2b2lkPiBWVFRSZWdp
b246OnNldFJlZ2lvbkFuY2hvclkoZG91YmxlIHZhbHVlKQogewogICAgIGlmICghKHZhbHVlID49
IDAgJiYgdmFsdWUgPD0gMTAwKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJ
WkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owog
ICAgIG1fcmVnaW9uQW5jaG9yLnNldFkodmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0x
MTMsNyArMTEzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gVlRUUmVnaW9uOjpzZXRSZWdpb25BbmNo
b3JZKGRvdWJsZSB2YWx1ZSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVFJlZ2lvbjo6c2V0Vmlld3Bv
cnRBbmNob3JYKGRvdWJsZSB2YWx1ZSkKIHsKICAgICBpZiAoISh2YWx1ZSA+PSAwICYmIHZhbHVl
IDw9IDEwMCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICBtX3ZpZXdw
b3J0QW5jaG9yLnNldFgodmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMjEsNyArMTIx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gVlRUUmVnaW9uOjpzZXRWaWV3cG9ydEFuY2hvclgoZG91
YmxlIHZhbHVlKQogRXhjZXB0aW9uT3I8dm9pZD4gVlRUUmVnaW9uOjpzZXRWaWV3cG9ydEFuY2hv
clkoZG91YmxlIHZhbHVlKQogewogICAgIGlmICghKHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMTAw
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIG1fdmlld3BvcnRBbmNo
b3Iuc2V0WSh2YWx1ZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBWVFRSZWdpb246OnNldFNjcm9sbChjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlKQogICAgICAgICBtX3Njcm9sbCA9IHRydWU7CiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQotICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKIHZvaWQgVlRUUmVnaW9uOjp1cGRhdGVQYXJh
bWV0ZXJzRnJvbVJlZ2lvbihjb25zdCBWVFRSZWdpb24mIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCBh
NjliNzJiZGVmNDg3NzliMjg5ZTQ4NzcwMDA0NzQ2ZGRiMGM3MjUxLi5lMzlhZDNkZTVlN2QwMGEz
N2EzNWZkOWMzYjMxOTllMTM5YzhjNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtMTIzLDcgKzEyMyw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbiA9IGZhbHNl
OwogICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVtKGZyYW1lLCBrZXksIHZhbHVlLCBxdW90YUV4Y2Vw
dGlvbik7CiAgICAgaWYgKHF1b3RhRXhjZXB0aW9uKQotICAgICAgICBlcnJvclN0cmluZyA9IERP
TUV4Y2VwdGlvbjo6bmFtZShRVU9UQV9FWENFRURFRF9FUlIpOworICAgICAgICBlcnJvclN0cmlu
ZyA9IERPTUV4Y2VwdGlvbjo6bmFtZShRdW90YUV4Y2VlZGVkRXJyb3IpOwogfQogCiB2b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3Ry
aW5nJiBrZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKaW5kZXggMDBiMTQyZDJiMzkxNmU3OWU0YjcwN2ExMTc1YTYwNTI4NTIxZTY3Mi4u
NGViMmQ4ODQ4YzY0OTRmOTlhYTgwMzEwOTRmMWZjN2NlYzk3NTkzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtNTcyLDcgKzU3
Miw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW5zcGVjdG9yU3R5bGU6OnRleHQoKSBjb25zdAog
ICAgIC8vIFByZWNvbmRpdGlvbjogbV9wYXJlbnRTdHlsZVNoZWV0LT5lbnN1cmVQYXJzZWREYXRh
UmVhZHkoKSBoYXMgYmVlbiBjYWxsZWQgc3VjY2Vzc2Z1bGx5LgogICAgIGF1dG8gc291cmNlRGF0
YSA9IGV4dHJhY3RTb3VyY2VEYXRhKCk7CiAgICAgaWYgKCFzb3VyY2VEYXRhKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAgYXV0byByZXN1bHQgPSBtX3BhcmVudFN0eWxl
U2hlZXQtPnRleHQoKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpAQCAtODU4LDcg
Kzg1OCw3IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVwYXJzZVN0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJiB0ZXh0KQogRXhjZXB0aW9uT3I8dm9pZD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6
c2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICBtX3BhcnNl
ZFN0eWxlU2hlZXQtPnNldFRleHQodGV4dCk7CiAgICAgbV9mbGF0UnVsZXMuY2xlYXIoKTsKQEAg
LTg3MCw3ICs4NzAsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJ1bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpCiB7CiAgICAgQ1NTU3R5bGVS
dWxlKiBydWxlID0gcnVsZUZvcklkKGlkKTsKICAgICBpZiAoIXJ1bGUpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RGb3VuZEVycm9yIH07CiAgICAgcmV0dXJuIHJ1bGUtPnNlbGVjdG9yVGV4dCgpOwogfQog
CkBAIC04ODUsMTkgKzg4NSwxOSBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkU2VsZWN0b3JMaXN0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIERvY3VtZW50KiBkb2N1bWVudAogRXhjZXB0aW9u
T3I8dm9pZD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UnVsZVNlbGVjdG9yKGNvbnN0IEluc3Bl
Y3RvckNTU0lkJiBpZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKICAgICBpZiAoIW1fcGFn
ZVN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAog
ICAgIC8vIElmIHRoZSBzZWxlY3RvciBpcyBpbnZhbGlkLCBkbyBub3QgcHJvY2VlZCBhbnkgZnVy
dGhlci4KICAgICBpZiAoIWlzVmFsaWRTZWxlY3Rvckxpc3RTdHJpbmcoc2VsZWN0b3IsIG1fcGFn
ZVN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVsZUZvcklkKGlkKTsKICAgICBpZiAoIXJ1
bGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAKICAgICBDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVT
aGVldCB8fCAhZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3Vu
ZEVycm9yIH07CiAKICAgICAvLyBJZiB0aGUgc3R5bGVzaGVldCBpcyBhbHJlYWR5IG11dGF0ZWQg
YXQgdGhpcyBwb2ludCwgdGhhdCBtdXN0IG1lYW4gdGhhdCBvdXIgZGF0YSBoYXMgYmVlbiBtb2Rp
ZmllZAogICAgIC8vIGVsc2V3aGVyZS4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFzIGVuc3Vy
ZVBhcnNlZERhdGFSZWFkeSB3b3VsZCByZXR1cm4gZmFsc2UgaW4gdGhhdCBjYXNlLgpAQCAtOTA2
LDcgKzkwNiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1
bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsCiAgICAgcnVsZS0+c2V0U2VsZWN0
b3JUZXh0KHNlbGVjdG9yKTsKICAgICBhdXRvIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZv
cigmcnVsZS0+c3R5bGUoKSk7CiAgICAgaWYgKCFzb3VyY2VEYXRhKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90Rm91bmRFcnJvciB9OwogCiAgICAgU3RyaW5nIHNoZWV0VGV4dCA9IG1fcGFyc2VkU3R5bGVT
aGVldC0+dGV4dCgpOwogICAgIHNoZWV0VGV4dC5yZXBsYWNlKHNvdXJjZURhdGEtPnJ1bGVIZWFk
ZXJSYW5nZS5zdGFydCwgc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLmxlbmd0aCgpLCBzZWxl
Y3Rvcik7CkBAIC05MTksMTAgKzkxOSwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLAogRXhj
ZXB0aW9uT3I8Q1NTU3R5bGVSdWxlKj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShjb25z
dCBTdHJpbmcmIHNlbGVjdG9yKQogewogICAgIGlmICghbV9wYWdlU3R5bGVTaGVldCkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgaWYgKCFpc1ZhbGlkU2Vs
ZWN0b3JMaXN0U3RyaW5nKHNlbGVjdG9yLCBtX3BhZ2VTdHlsZVNoZWV0LT5vd25lckRvY3VtZW50
KCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGF1dG8gdGV4dCA9IHRoaXMt
PnRleHQoKTsKICAgICBpZiAodGV4dC5oYXNFeGNlcHRpb24oKSkKQEAgLTk2MCw3ICs5NjAsNyBA
QCBFeGNlcHRpb25PcjxDU1NTdHlsZVJ1bGUqPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjphZGRSdWxl
KGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgICAgIC8vIFdoYXQgd2UganVzdCBhZGRlZCBo
YXMgdG8gYmUgYSBDU1NTdHlsZVJ1bGUgLSB3ZSBjYW5ub3QgaGFuZGxlIG90aGVyIHR5cGVzIG9m
IHJ1bGVzIHlldC4KICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgc3R5bGUgcnVsZSwgcHJldGVu
ZCB3ZSBuZXZlciB0b3VjaGVkIHRoZSBzdHlsZXNoZWV0LgogICAgICAgICBtX3BhZ2VTdHlsZVNo
ZWV0LT5kZWxldGVSdWxlKGxhc3RSdWxlSW5kZXgpOwotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3Ig
fTsKICAgICB9CiAKICAgICByZXR1cm4gc3R5bGVSdWxlOwpAQCAtOTY5LDE4ICs5NjksMTggQEAg
RXhjZXB0aW9uT3I8Q1NTU3R5bGVSdWxlKj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShj
b25zdCBTdHJpbmcmIHNlbGVjdG9yKQogRXhjZXB0aW9uT3I8dm9pZD4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6ZGVsZXRlUnVsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpCiB7CiAgICAgaWYgKCFt
X3BhZ2VTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRF
RF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07
CiAKICAgICBSZWZQdHI8Q1NTU3R5bGVSdWxlPiBydWxlID0gcnVsZUZvcklkKGlkKTsKICAgICBp
ZiAoIXJ1bGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0
eWxlU2hlZXQgfHwgIWVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90
Rm91bmRFcnJvciB9OwogCiAgICAgYXV0byBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Io
JnJ1bGUtPnN0eWxlKCkpOwogICAgIGlmICghc291cmNlRGF0YSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
dEZvdW5kRXJyb3IgfTsKIAogICAgIGF1dG8gZGVsZXRlUnVsZVJlc3VsdCA9IHN0eWxlU2hlZXQt
PmRlbGV0ZVJ1bGUoaWQub3JkaW5hbCgpKTsKICAgICBpZiAoZGVsZXRlUnVsZVJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKQEAgLTEyMTgsNyArMTIxOCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIGNv
CiB7CiAgICAgYXV0byBpbnNwZWN0b3JTdHlsZSA9IGluc3BlY3RvclN0eWxlRm9ySWQoaWQpOwog
ICAgIGlmICghaW5zcGVjdG9yU3R5bGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1Rf
Rk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07
CiAKICAgICBpZiAob2xkVGV4dCkgewogICAgICAgICBhdXRvIHJlc3VsdCA9IGluc3BlY3RvclN0
eWxlLT50ZXh0KCk7CkBAIC0xMjM2LDcgKzEyMzYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBj
bwogRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojp0ZXh0KCkgY29uc3QK
IHsKICAgICBpZiAoIWVuc3VyZVRleHQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5P
VF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3Ig
fTsKICAgICByZXR1cm4gU3RyaW5nIHsgbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCkgfTsKIH0K
IApAQCAtMTM1NywxOCArMTM1NywxOCBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3Vy
ZUZsYXRSdWxlcygpIGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYg
dGV4dCkKIHsKICAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RG
b3VuZEVycm9yIH07CiAgICAgaWYgKCFlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAogICAgIFN0cmluZyBwYXRjaGVkU3R5bGVTaGVldFRl
eHQ7CiAgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKHN0
eWxlLCB0ZXh0LCAmcGF0Y2hlZFN0eWxlU2hlZXRUZXh0KTsKICAgICBpZiAoIXN1Y2Nlc3MpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAKICAgICBJbnNwZWN0b3JDU1NJZCBpZCA9
IHJ1bGVPclN0eWxlSWQoc3R5bGUpOwogICAgIGlmIChpZC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb3RGb3VuZEVycm9yIH07CiAKICAgICBhdXRvIHNldENzc1RleHRSZXN1bHQgPSBzdHls
ZS0+c2V0Q3NzVGV4dCh0ZXh0KTsKICAgICBpZiAoc2V0Q3NzVGV4dFJlc3VsdC5oYXNFeGNlcHRp
b24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZUhvc3QuY3BwCmluZGV4IDMyMmY2YjMxMzI4NWUyNzJiOGU1YzU1ZTk3MDY2YjE0
OWRkOWIyOTkuLmQwOGMzZjFmMTY1ZGQ0YjEwYWQ3N2QyNTM4N2IyNzg5ODBiYzRmZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9z
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcApAQCAtNTA4LDcgKzUwOCw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OnN3YXBDYWNoZSgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8vIElmIHRo
ZXJlIGlzIG5vIG5ld2VyIGNhY2hlLCByYWlzZSBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRp
b24uCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3ZXIgY2FjaGUsIHJhaXNlIGFuIEludmFsaWRT
dGF0ZUVycm9yIGV4Y2VwdGlvbi4KICAgICBhdXRvKiBuZXdlc3RDYWNoZSA9IGNhY2hlLT5ncm91
cCgpLT5uZXdlc3RDYWNoZSgpOwogICAgIGlmIChjYWNoZSA9PSBuZXdlc3RDYWNoZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCmluZGV4IDM4NTlhMWJiZGVjYzBjZjE0ZDU1NDY5
MWYyNDhlNWU5ZTZlYzRmN2IuLjMzNjEwOTM5ZTBiNDAwOGJiMjY2YTEzMjMyNzM3YjRlN2FjNTgx
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNh
dGlvbkNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBw
bGljYXRpb25DYWNoZS5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9N
QXBwbGljYXRpb25DYWNoZTo6dXBkYXRlKCkKIHsKICAgICBhdXRvKiBob3N0ID0gYXBwbGljYXRp
b25DYWNoZUhvc3QoKTsKICAgICBpZiAoIWhvc3QgfHwgIWhvc3QtPnVwZGF0ZSgpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtOTIsNyArOTIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01BcHBsaWNhdGlvbkNhY2hlOjpz
d2FwQ2FjaGUoKQogewogICAgIGF1dG8qIGhvc3QgPSBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwog
ICAgIGlmICghaG9zdCB8fCAhaG9zdC0+c3dhcENhY2hlKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICByZXR1cm4geyB9OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Jhc2U2NFV0aWxpdGllcy5jcHAKaW5kZXggODljOTA1ZDI1M2QzMGMzN2NkZGFjODVhZGU5
YTQzZTkzZjllOTAyMS4uZTA4YTE2YjQwNWY0YTIyYWE4Y2ZjZjU4MTc0OWIxNGNhMDRkOGRjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcApAQCAtMzYsNyArMzYsNyBA
QCBFeGNlcHRpb25PcjxTdHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YnRvYShjb25zdCBTdHJpbmcm
IHN0cmluZ1RvRW5jb2RlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAoIXN0
cmluZ1RvRW5jb2RlLmNvbnRhaW5zT25seUxhdGluMSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAogICAgIHJldHVybiBiYXNlNjRFbmNvZGUoc3Ry
aW5nVG9FbmNvZGUubGF0aW4xKCkpOwogfQpAQCAtNDgsNyArNDgsNyBAQCBFeGNlcHRpb25PcjxT
dHJpbmc+IEJhc2U2NFV0aWxpdGllczo6YXRvYihjb25zdCBTdHJpbmcmIGVuY29kZWRTdHJpbmcp
CiAKICAgICBWZWN0b3I8Y2hhcj4gb3V0OwogICAgIGlmICghYmFzZTY0RGVjb2RlKGVuY29kZWRT
dHJpbmcsIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nIHwgQmFzZTY0SWdub3JlU3BhY2VzQW5k
TmV3TGluZXMpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9DSEFSQUNURVJf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3Ig
fTsKIAogICAgIHJldHVybiBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NyeXB0by5jcHAKaW5kZXggNzcyZjU5NTYxZDU0ZTMxNDFhNDU2MzZhY2M1MjZiNzVlNGU0
MDJhMC4uZWQxMjc4YmY4MzNiYjY2MjkxMDEyM2YzZWRiMWFmNTU5MGVhYTE5MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ3J5cHRvLmNwcApAQCAtNTcsOSArNTcsOSBAQCBDcnlwdG86On5DcnlwdG8oKQogRXhjZXB0
aW9uT3I8dm9pZD4gQ3J5cHRvOjpnZXRSYW5kb21WYWx1ZXMoQXJyYXlCdWZmZXJWaWV3JiBhcnJh
eSkKIHsKICAgICBpZiAoIWlzSW50KGFycmF5LmdldFR5cGUoKSkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBUWVBFX01JU01BVENIX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgVHlwZU1pc21hdGNoRXJyb3IgfTsKICAgICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCgpID4gNjU1
MzYpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBRVU9UQV9FWENFRURFRF9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFF1b3RhRXhjZWVkZWRFcnJvciB9OwogI2lmIE9TKERB
UldJTikKICAgICBpbnQgcmMgPSBDQ1JhbmRvbUNvcHlCeXRlcyhrQ0NSYW5kb21EZWZhdWx0LCBh
cnJheS5iYXNlQWRkcmVzcygpLCBhcnJheS5ieXRlTGVuZ3RoKCkpOwogICAgIFJFTEVBU0VfQVNT
RVJUKHJjID09IGtDQ1N1Y2Nlc3MpOwpAQCAtNzksNyArNzksNyBAQCBTdWJ0bGVDcnlwdG8mIENy
eXB0bzo6c3VidGxlKCkKIEV4Y2VwdGlvbk9yPFdlYktpdFN1YnRsZUNyeXB0byY+IENyeXB0bzo6
d2Via2l0U3VidGxlKCkKIHsKICAgICBpZiAoIWlzTWFpblRocmVhZCgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICBpZiAoIW1fd2Via2l0U3VidGxlKSB7
CiAgICAgICAgIG1fd2Via2l0U3VidGxlID0gV2ViS2l0U3VidGxlQ3J5cHRvOjpjcmVhdGUoKmRv
d25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCAxMjBjYTJjYjQ0NDhmODk0MWE0MjFkMDNlOWNjNTJj
NTliNTRhNDc1Li4wZmQ3Mzk3NGQ5OTJjYjkxZjE5MjIwZGNlZWQyZWM1ZDRjZWMwYThjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvRW5kKCkKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICBp
ZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CiAKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqbV9mcmFtZSk7CiAgICAgc2VsZWN0
aW9uLm1vdmVUbyhzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCksIERPV05TVFJFQU0pOwpAQCAt
MTkyLDcgKzE5Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6Y29sbGFwc2VU
b1N0YXJ0KCkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2Zy
YW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cigqbV9mcmFtZSk7CiAgICAgc2VsZWN0aW9uLm1vdmVUbyhzZWxlY3Rpb24uc2VsZWN0aW9uKCku
c3RhcnQoKSwgRE9XTlNUUkVBTSk7CkBAIC0yODAsNyArMjgwLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gRE9NU2VsZWN0aW9uOjpleHRlbmQoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogICAg
IGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAob2Zmc2V0ID4gKG5v
ZGUub2Zmc2V0SW5DaGFyYWN0ZXJzKCkgPyBjYXJldE1heE9mZnNldChub2RlKSA6IG5vZGUuY291
bnRDaGlsZE5vZGVzKCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAg
aWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24oJm5vZGUpKQogICAgICAgICByZXR1cm4geyB9OwogCkBA
IC0yOTIsNyArMjkyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NU2VsZWN0aW9uOjpleHRlbmQo
Tm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogRXhjZXB0aW9uT3I8UmVmPFJhbmdlPj4gRE9N
U2VsZWN0aW9uOjpnZXRSYW5nZUF0KHVuc2lnbmVkIGluZGV4KQogewogICAgIGlmIChpbmRleCA+
PSByYW5nZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAg
IC8vIElmIHlvdSdyZSBoaXR0aW5nIHRoaXMsIHlvdSd2ZSBhZGRlZCBicm9rZW4gbXVsdGktcmFu
Z2Ugc2VsZWN0aW9uIHN1cHBvcnQuCiAgICAgQVNTRVJUKHJhbmdlQ291bnQoKSA9PSAxKTsKQEAg
LTMwNiw3ICszMDYsNyBAQCBFeGNlcHRpb25PcjxSZWY8UmFuZ2U+PiBET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQodW5zaWduZWQgaW5kZXgpCiAgICAgYXV0byBmaXJzdFJhbmdlID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIEFTU0VSVChmaXJzdFJh
bmdlKTsKICAgICBpZiAoIWZpcnN0UmFuZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJy
b3IgfTsKICAgICByZXR1cm4gZmlyc3RSYW5nZS5yZWxlYXNlTm9uTnVsbCgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggOWQxOTQ2ZjJiZTY0ZWM5ZjYwMjVhMWFlMTljNzYz
MTEwYzgwZjVjNi4uZWQ3NGY1ZjY1MjUyNGY2YzVmMzVhZTg2N2RiN2ZkNTBmN2YzNWUxYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtNjI5LDExICs2MjksMTEgQEAgQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5JiBET01XaW5kb3c6OmVuc3VyZUN1c3RvbUVsZW1lbnRSZWdpc3RyeSgpCiBz
dGF0aWMgRXhjZXB0aW9uT3I8U2VsZWN0b3JRdWVyeSY+IHNlbGVjdG9yUXVlcnlJbkZyYW1lKEZy
YW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMpCiB7CiAgICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvY3VtZW50
LT5zZWxlY3RvclF1ZXJ5Rm9yU3RyaW5nKHNlbGVjdG9ycyk7CiB9CkBAIC04NzUsMTEgKzg3NSwx
MSBAQCBFeGNlcHRpb25PcjxTdG9yYWdlKj4gRE9NV2luZG93OjpzZXNzaW9uU3RvcmFnZSgpIGNv
bnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFkb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKS5jYW5BY2Nlc3NTZXNzaW9uU3RvcmFnZShkb2N1bWVudC0+dG9wT3JpZ2luKCkp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICBpZiAobV9zZXNzaW9uU3Rv
cmFnZSkgewogICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2UtPmFyZWEoKS5jYW5BY2Nlc3NT
dG9yYWdlKG1fZnJhbWUpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZ
X0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsK
ICAgICAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7CiAgICAgfQogCkBAIC04ODks
NyArODg5LDcgQEAgRXhjZXB0aW9uT3I8U3RvcmFnZSo+IERPTVdpbmRvdzo6c2Vzc2lvblN0b3Jh
Z2UoKSBjb25zdAogCiAgICAgYXV0byBzdG9yYWdlQXJlYSA9IHBhZ2UtPnNlc3Npb25TdG9yYWdl
KCktPnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSk7CiAgICAgaWYgKCFzdG9yYWdlQXJlYS0+Y2FuQWNj
ZXNzU3RvcmFnZShtX2ZyYW1lKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZ
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAg
ICAgbV9zZXNzaW9uU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShtX2ZyYW1lLCBXVEZNb3ZlKHN0
b3JhZ2VBcmVhKSk7CiAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7CkBAIC05MDUs
NyArOTA1LDcgQEAgRXhjZXB0aW9uT3I8U3RvcmFnZSo+IERPTVdpbmRvdzo6bG9jYWxTdG9yYWdl
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLmNhbkFjY2Vzc0xvY2FsU3RvcmFnZShudWxscHRyKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdl
KCk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBzdXBwb3J0aW5nIGFjY2Vzcy9t
b2RpZmljYXRpb24gdG8gbG9jYWwgc3RvcmFnZQpAQCAtOTEzLDcgKzkxMyw3IEBAIEV4Y2VwdGlv
bk9yPFN0b3JhZ2UqPiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZSgpIGNvbnN0CiAgICAgaWYgKCFw
YWdlIHx8ICFwYWdlLT5pc0Nsb3NpbmcoKSkgewogICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2Up
IHsKICAgICAgICAgICAgIGlmICghbV9sb2NhbFN0b3JhZ2UtPmFyZWEoKS5jYW5BY2Nlc3NTdG9y
YWdlKG1fZnJhbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklU
WV9FUlIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJv
ciB9OwogICAgICAgICAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwogICAgICAgICB9
CiAgICAgfQpAQCAtOTMwLDcgKzkzMCw3IEBAIEV4Y2VwdGlvbk9yPFN0b3JhZ2UqPiBET01XaW5k
b3c6OmxvY2FsU3RvcmFnZSgpIGNvbnN0CiAgICAgYXV0byBzdG9yYWdlQXJlYSA9IHBhZ2UtPnN0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpLmxvY2FsU3RvcmFnZUFyZWEoKmRvY3VtZW50KTsKIAog
ICAgIGlmICghc3RvcmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIG1fbG9jYWxTdG9yYWdlID0gU3RvcmFnZTo6
Y3JlYXRlKG1fZnJhbWUsIFdURk1vdmUoc3RvcmFnZUFyZWEpKTsKICAgICByZXR1cm4gbV9sb2Nh
bFN0b3JhZ2UuZ2V0KCk7CkBAIC05NDQsNyArOTQ0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9N
V2luZG93Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgaW5j
dW0KICAgICBEb2N1bWVudCogc291cmNlRG9jdW1lbnQgPSBpbmN1bWJlbnRXaW5kb3cuZG9jdW1l
bnQoKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIHRhcmdldCBvcmlnaW4uICBXZSBuZWVkIHRvIGRv
IHRoaXMgc3luY2hyb25vdXNseSBpbiBvcmRlcgotICAgIC8vIHRvIGdlbmVyYXRlIHRoZSBTWU5U
QVhfRVJSIGV4Y2VwdGlvbiBjb3JyZWN0bHkuCisgICAgLy8gdG8gZ2VuZXJhdGUgdGhlIFN5bnRh
eEVycm9yIGV4Y2VwdGlvbiBjb3JyZWN0bHkuCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0
YXJnZXQ7CiAgICAgaWYgKHRhcmdldE9yaWdpbiA9PSAiLyIpIHsKICAgICAgICAgaWYgKCFzb3Vy
Y2VEb2N1bWVudCkKQEAgLTk1NSw3ICs5NTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01XaW5k
b3c6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBpbmN1bQog
ICAgICAgICAvLyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdGFyZ2V0IGEgcG9zdE1lc3NhZ2UgYXQg
YSB1bmlxdWUgb3JpZ2luCiAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyB3YXkgdG8gcmVw
cmVzZW50IGEgdW5pcXVlIG9yaWdpbiBpbiBhIHN0cmluZy4KICAgICAgICAgaWYgKHRhcmdldC0+
aXNVbmlxdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07
CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICB9CiAK
ICAgICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4gcG9ydHM7CkBAIC0xNjcwLDcgKzE2NzAs
NyBAQCBFeGNlcHRpb25PcjxpbnQ+IERPTVdpbmRvdzo6c2V0VGltZW91dChzdGQ6OnVuaXF1ZV9w
dHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24sCiB7CiAgICAgYXV0byogY29udGV4dCA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHJldHVybiBET01UaW1lcjo6aW5zdGFsbCgq
Y29udGV4dCwgV1RGTW92ZShhY3Rpb24pLCBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRpbWVv
dXQpLCB0cnVlKTsKIH0KIApAQCAtMTcwMiw3ICsxNzAyLDcgQEAgRXhjZXB0aW9uT3I8aW50PiBE
T01XaW5kb3c6OnNldEludGVydmFsKHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFj
dGlvbiwKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwog
ICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUND
RVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CiAgICAgcmV0dXJuIERPTVRpbWVyOjppbnN0YWxsKCpjb250ZXh0LCBXVEZNb3ZlKGFjdGlv
biksIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dCksIGZhbHNlKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAppbmRleCA1NGIwZDYxOTVmYWY5OGJiMGI2Mjk1NDlj
ZmYyNWIzZmQ2YTZiYWM4Li4zZDQ3MzVmNjI0N2EwZDg4NWJjYmYzMmFjNGZmMjZhYWQ0YzQxNjY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcApAQCAtNjAsMTYgKzYwLDE2IEBAIGlu
bGluZSBFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgVVJMJiB1cmwsCiBFeGNlcHRpb25PcjxSZWY8RXZlbnRTb3VyY2U+PiBFdmVu
dFNvdXJjZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBJbml0JiBldmVudFNvdXJjZUluaXQpCiB7CiAgICAgaWYgKHVybC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgVVJMIGZ1bGxVUkwg
PSBjb250ZXh0LmNvbXBsZXRlVVJMKHVybCk7CiAgICAgaWYgKCFmdWxsVVJMLmlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICAvLyBGSVhNRTogQ29udmVydCB0aGlz
IHRvIGNoZWNrIHRoZSBpc29sYXRlZCB3b3JsZCdzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IG9u
Y2Ugd2Via2l0Lm9yZy9iLzEwNDUyMCBpcyByZXNvbHZlZC4KICAgICBpZiAoIWNvbnRleHQuc2hv
dWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KCkgJiYgIWNvbnRleHQuY29u
dGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Q29ubmVjdFRvU291cmNlKGZ1bGxVUkwpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB0aHJvd2luZyBhbiBleGNlcHRpb24/Ci0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAKICAgICBhdXRvIHNvdXJjZSA9
IGFkb3B0UmVmKCpuZXcgRXZlbnRTb3VyY2UoY29udGV4dCwgZnVsbFVSTCwgZXZlbnRTb3VyY2VJ
bml0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcAppbmRleCBkMWM0Y2Q0OGIyZTI1ZjM3Nzc3MmUy
MWFiZjk4YTI2YzRlMDdjNDcxLi5mNDVlMTZhZGY3NjVkNTQ3NjdkYTYxYWEwNmNkMjU5ZGMyZGRk
MGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdW5zaWduZWQg
SGlzdG9yeTo6bGVuZ3RoKCkgY29uc3QKIEV4Y2VwdGlvbk9yPEhpc3Rvcnk6OlNjcm9sbFJlc3Rv
cmF0aW9uPiBIaXN0b3J5OjpzY3JvbGxSZXN0b3JhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2ZyYW1lKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICBhdXRvKiBoaXN0
b3J5SXRlbSA9IG1fZnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5jdXJyZW50SXRlbSgpOwogICAg
IGlmICghaGlzdG9yeUl0ZW0pCkBAIC03NCw3ICs3NCw3IEBAIEV4Y2VwdGlvbk9yPEhpc3Rvcnk6
OlNjcm9sbFJlc3RvcmF0aW9uPiBIaXN0b3J5OjpzY3JvbGxSZXN0b3JhdGlvbigpIGNvbnN0CiBF
eGNlcHRpb25Pcjx2b2lkPiBIaXN0b3J5OjpzZXRTY3JvbGxSZXN0b3JhdGlvbihTY3JvbGxSZXN0
b3JhdGlvbiBzY3JvbGxSZXN0b3JhdGlvbikKIHsKICAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIGF1dG8qIGhpc3RvcnlJdGVtID0gbV9mcmFt
ZS0+bG9hZGVyKCkuaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCk7CiAgICAgaWYgKGhpc3RvcnlJdGVt
KQpAQCAtMTc1LDEyICsxNzUsMTIgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSGlzdG9yeTo6c3RhdGVP
YmplY3RBZGRlZChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIGRhdGEKIAogICAgIFVS
TCBmdWxsVVJMID0gdXJsRm9yU3RhdGUodXJsU3RyaW5nKTsKICAgICBpZiAoIWZ1bGxVUkwuaXNW
YWxpZCgpIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhblJlcXVl
c3QoZnVsbFVSTCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIGlmIChm
dWxsVVJMLmhhc1VzZXJuYW1lKCkgfHwgZnVsbFVSTC5oYXNQYXNzd29yZCgpKSB7CiAgICAgICAg
IGlmIChzdGF0ZU9iamVjdFR5cGUgPT0gU3RhdGVPYmplY3RUeXBlOjpSZXBsYWNlKQotICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiwgIkF0dGVtcHQgdG8gdXNlIGhp
c3RvcnkucmVwbGFjZVN0YXRlKCkgdG8gY2hhbmdlIHNlc3Npb24gaGlzdG9yeSBVUkwgdG8gIiAr
IGZ1bGxVUkwuc3RyaW5nKCkgKyAiIGlzIGluc2VjdXJlOyBVc2VybmFtZS9wYXNzd29yZHMgYXJl
bid0IGFsbG93ZWQgaW4gc3RhdGUgb2JqZWN0IFVSTHMiIH07Ci0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTRUNVUklUWV9FUlIsICJBdHRlbXB0IHRvIHVzZSBoaXN0b3J5LnB1c2hTdGF0ZSgp
IHRvIGFkZCBVUkwgIiArIGZ1bGxVUkwuc3RyaW5nKCkgKyAiIHRvIHNlc3Npb24gaGlzdG9yeSBp
cyBpbnNlY3VyZTsgVXNlcm5hbWUvcGFzc3dvcmRzIGFyZW4ndCBhbGxvd2VkIGluIHN0YXRlIG9i
amVjdCBVUkxzIiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJy
b3IsICJBdHRlbXB0IHRvIHVzZSBoaXN0b3J5LnJlcGxhY2VTdGF0ZSgpIHRvIGNoYW5nZSBzZXNz
aW9uIGhpc3RvcnkgVVJMIHRvICIgKyBmdWxsVVJMLnN0cmluZygpICsgIiBpcyBpbnNlY3VyZTsg
VXNlcm5hbWUvcGFzc3dvcmRzIGFyZW4ndCBhbGxvd2VkIGluIHN0YXRlIG9iamVjdCBVUkxzIiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgIkF0dGVtcHQgdG8g
dXNlIGhpc3RvcnkucHVzaFN0YXRlKCkgdG8gYWRkIFVSTCAiICsgZnVsbFVSTC5zdHJpbmcoKSAr
ICIgdG8gc2Vzc2lvbiBoaXN0b3J5IGlzIGluc2VjdXJlOyBVc2VybmFtZS9wYXNzd29yZHMgYXJl
bid0IGFsbG93ZWQgaW4gc3RhdGUgb2JqZWN0IFVSTHMiIH07CiAgICAgfQogCiAgICAgRG9jdW1l
bnQqIG1haW5Eb2N1bWVudCA9IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQo
KTsKQEAgLTIwMSw4ICsyMDEsOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIaXN0b3J5OjpzdGF0ZU9i
amVjdEFkZGVkKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgZGF0YQogICAgIAogICAg
IGlmIChtYWluSGlzdG9yeS0+bV9jdXJyZW50U3RhdGVPYmplY3RUaW1lU3Bhbk9iamVjdHNBZGRl
ZCA+PSBwZXJTdGF0ZU9iamVjdFRpbWVTcGFuTGltaXQpIHsKICAgICAgICAgaWYgKHN0YXRlT2Jq
ZWN0VHlwZSA9PSBTdGF0ZU9iamVjdFR5cGU6OlJlcGxhY2UpCi0gICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSLCBTdHJpbmc6OmZvcm1hdCgiQXR0ZW1wdCB0byB1c2Ug
aGlzdG9yeS5yZXBsYWNlU3RhdGUoKSBtb3JlIHRoYW4gJXUgdGltZXMgcGVyICVmIHNlY29uZHMi
LCBwZXJTdGF0ZU9iamVjdFRpbWVTcGFuTGltaXQsIHN0YXRlT2JqZWN0VGltZVNwYW4pIH07Ci0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIsIFN0cmluZzo6Zm9ybWF0KCJB
dHRlbXB0IHRvIHVzZSBoaXN0b3J5LnB1c2hTdGF0ZSgpIG1vcmUgdGhhbiAldSB0aW1lcyBwZXIg
JWYgc2Vjb25kcyIsIHBlclN0YXRlT2JqZWN0VGltZVNwYW5MaW1pdCwgc3RhdGVPYmplY3RUaW1l
U3BhbikgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yLCBT
dHJpbmc6OmZvcm1hdCgiQXR0ZW1wdCB0byB1c2UgaGlzdG9yeS5yZXBsYWNlU3RhdGUoKSBtb3Jl
IHRoYW4gJXUgdGltZXMgcGVyICVmIHNlY29uZHMiLCBwZXJTdGF0ZU9iamVjdFRpbWVTcGFuTGlt
aXQsIHN0YXRlT2JqZWN0VGltZVNwYW4pIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
ZWN1cml0eUVycm9yLCBTdHJpbmc6OmZvcm1hdCgiQXR0ZW1wdCB0byB1c2UgaGlzdG9yeS5wdXNo
U3RhdGUoKSBtb3JlIHRoYW4gJXUgdGltZXMgcGVyICVmIHNlY29uZHMiLCBwZXJTdGF0ZU9iamVj
dFRpbWVTcGFuTGltaXQsIHN0YXRlT2JqZWN0VGltZVNwYW4pIH07CiAgICAgfQogCiAgICAgQ2hl
Y2tlZDx1bnNpZ25lZD4gdGl0bGVTaXplID0gdGl0bGUubGVuZ3RoKCk7CkBAIC0yMjMsOCArMjIz
LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gSGlzdG9yeTo6c3RhdGVPYmplY3RBZGRlZChSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIGRhdGEKIAogICAgIGlmIChuZXdUb3RhbFVzYWdlID4g
dG90YWxTdGF0ZU9iamVjdFBheWxvYWRMaW1pdCkgewogICAgICAgICBpZiAoc3RhdGVPYmplY3RU
eXBlID09IFN0YXRlT2JqZWN0VHlwZTo6UmVwbGFjZSkKLSAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBRVU9UQV9FWENFRURFRF9FUlIsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdCB0byBzdG9y
ZSBtb3JlIGRhdGEgdGhhbiBhbGxvd2VkIHVzaW5nIGhpc3RvcnkucmVwbGFjZVN0YXRlKCkiKSB9
OwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUVVPVEFfRVhDRUVERURfRVJSLCBBU0NJSUxp
dGVyYWwoIkF0dGVtcHQgdG8gc3RvcmUgbW9yZSBkYXRhIHRoYW4gYWxsb3dlZCB1c2luZyBoaXN0
b3J5LnB1c2hTdGF0ZSgpIikgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBRdW90
YUV4Y2VlZGVkRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdCB0byBzdG9yZSBtb3JlIGRhdGEg
dGhhbiBhbGxvd2VkIHVzaW5nIGhpc3RvcnkucmVwbGFjZVN0YXRlKCkiKSB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgUXVvdGFFeGNlZWRlZEVycm9yLCBBU0NJSUxpdGVyYWwoIkF0dGVt
cHQgdG8gc3RvcmUgbW9yZSBkYXRhIHRoYW4gYWxsb3dlZCB1c2luZyBoaXN0b3J5LnB1c2hTdGF0
ZSgpIikgfTsKICAgICB9CiAKICAgICBtX21vc3RSZWNlbnRTdGF0ZU9iamVjdFVzYWdlID0gcGF5
bG9hZFNpemUudW5zYWZlR2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xv
Y2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCmluZGV4IDhmYzEy
ZDRkODZiNzI5ZjliZTgyMzRlZjMyMTNiNDQxZmM5NDZhNzAuLmQ1ZTBlOTE2M2ZiMjBiNWY5ODNm
M2FjNWRiYWY1OTNkYjQ2ZWExNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9j
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCkBAIC0xNjMs
NyArMTYzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTG9jYXRpb246OnNldFByb3RvY29sKERPTVdp
bmRvdyYgYWN0aXZlV2luZG93LCBET01XaW5kb3cmIGZpcnMKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICBVUkwgdXJsID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCk7CiAgICAgaWYgKCF1cmwu
c2V0UHJvdG9jb2wocHJvdG9jb2wpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFY
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBy
ZXR1cm4gc2V0TG9jYXRpb24oYWN0aXZlV2luZG93LCBmaXJzdFdpbmRvdywgdXJsLnN0cmluZygp
KTsKIH0KIApAQCAtMjgzLDcgKzI4Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IExvY2F0aW9uOjpz
ZXRMb2NhdGlvbihET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93JiBmaXJzCiB7CiAg
ICAgQVNTRVJUKG1fZnJhbWUpOwogICAgIGlmICghYWN0aXZlV2luZG93LmRvY3VtZW50KCktPmNh
bk5hdmlnYXRlKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAgICAg
QVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5kb21XaW5kb3coKSk7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkt
PnNldExvY2F0aW9uKGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3csIHVybCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKaW5kZXggYWM2YmU3MjgzNjA2
ZWYwOTEwMGYwYmI3MmUzZjkyMjNkNDJlODY2MC4uODZhMjM1Yzc5ZmYwMGFiMDNjOTJmMjViYTI4
OTNkYTBmNWI1ZDFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZVVzZXJUaW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2Vy
VGltaW5nLmNwcApAQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdm9pZCBjbGVhclBlcmZvcm1hbmNl
RW50cmllcyhQZXJmb3JtYW5jZUVudHJ5TWFwJiBtYXAsIGNvbnN0IFN0cmluZyYgbmFtZQogRXhj
ZXB0aW9uT3I8UmVmPFBlcmZvcm1hbmNlTWFyaz4+IFVzZXJUaW1pbmc6Om1hcmsoY29uc3QgU3Ry
aW5nJiBtYXJrTmFtZSkKIHsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KG1fcGVyZm9ybWFuY2Uuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSAmJiByZXN0cmljdGVkTWFya0Z1bmN0aW9uKG1hcmtOYW1l
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvJiBwZXJmb3JtYW5jZUVu
dHJ5TGlzdCA9IG1fbWFya3NNYXAuZW5zdXJlKG1hcmtOYW1lLCBbXSB7IHJldHVybiBWZWN0b3I8
UmVmUHRyPFBlcmZvcm1hbmNlRW50cnk+PigpOyB9KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgYXV0
byBlbnRyeSA9IFBlcmZvcm1hbmNlTWFyazo6Y3JlYXRlKG1hcmtOYW1lLCBtX3BlcmZvcm1hbmNl
Lm5vdygpKTsKQEAgLTExMSwxNiArMTExLDE2IEBAIEV4Y2VwdGlvbk9yPGRvdWJsZT4gVXNlclRp
bWluZzo6ZmluZEV4aXN0aW5nTWFya1N0YXJ0VGltZShjb25zdCBTdHJpbmcmIG1hcmtOYW1lCiAK
ICAgICBhdXRvKiB0aW1pbmcgPSBtX3BlcmZvcm1hbmNlLnRpbWluZygpOwogICAgIGlmICghdGlt
aW5nKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiwgbWFrZVN0cmluZygi
Tm8gbWFyayBuYW1lZCAnIiwgbWFya05hbWUsICInIGV4aXN0cyIpIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgbWFrZVN0cmluZygiTm8gbWFyayBuYW1lZCAnIiwg
bWFya05hbWUsICInIGV4aXN0cyIpIH07CiAKICAgICBpZiAoYXV0byBmdW5jdGlvbiA9IHJlc3Ry
aWN0ZWRNYXJrRnVuY3Rpb24obWFya05hbWUpKSB7CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9ICgo
KnRpbWluZykuKihmdW5jdGlvbikpKCk7CiAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgICAgIHJldHVybiB2
YWx1ZSAtIHRpbWluZy0+bmF2aWdhdGlvblN0YXJ0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJy
b3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPFBlcmZvcm1hbmNlTWVhc3VyZT4+IFVzZXJUaW1p
bmc6Om1lYXN1cmUoY29uc3QgU3RyaW5nJiBtZWFzdXJlTmFtZSwgY29uc3QgU3RyaW5nJiBzdGFy
dE1hcmssIGNvbnN0IFN0cmluZyYgZW5kTWFyaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1l
c3NhZ2VIYW5kbGVyLmNwcAppbmRleCAxNjE1MzQ0MjUyZWQ1YjA1ODEyZmUyOGIyYmIyYWZhMGM1
NjI1NTRkLi5hNGQwNWQwNjQwZjlkZjMyYTE4OGJiYTcyODg0M2YzOTI5YWFlYjJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXIuY3BwCkBAIC00OCw3ICs0OCw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IFVzZXJNZXNzYWdlSGFuZGxlcjo6cG9zdE1lc3NhZ2UoUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBkZXNj
cmlwdG9yIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgaG9zdCBhcHBs
aWNhdGlvbiBoYXMKICAgICAvLyByZW1vdmVkIHRoZSBuYW1lZCBtZXNzYWdlIGhhbmRsZXIgYXQg
dGhlIFdlYktpdDIgQVBJIGxldmVsLgogICAgIGlmICghbV9kZXNjcmlwdG9yKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIG1fZGVzY3JpcHRvci0+ZGlk
UG9zdE1lc3NhZ2UoKnRoaXMsIHZhbHVlLmdldCgpKTsKICAgICByZXR1cm4geyB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oCmlu
ZGV4IDZkZmU1NTI4YTdjYzRkODk1NmFkOGRlOWFiZDE2YmRhZWE4MjU5ODcuLjUxYjUxZDRlMDhh
M2RkM2VmYjA5YTAxMWUzMjk3NGQyOGI3OWRmNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKQEAgLTkwLDcgKzkwLDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0IFN0
cmluZyYpIHsgfTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXRTdGF0cyhNZWRpYVN0cmVhbVRyYWNr
KiwgUGVlckNvbm5lY3Rpb246OlN0YXRzUHJvbWlzZSYmIHByb21pc2UpIHsgcHJvbWlzZS5yZWpl
Y3QoTk9UX1NVUFBPUlRFRF9FUlIpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldFN0YXRzKE1lZGlh
U3RyZWFtVHJhY2sqLCBQZWVyQ29ubmVjdGlvbjo6U3RhdHNQcm9taXNlJiYgcHJvbWlzZSkgeyBw
cm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7IH0KIH07CiAKIGNsYXNzIE1lZGlhRW5k
cG9pbnRDbGllbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAppbmRleCBmYmU3
Njc5YWUyNjY4NjdiMDU4ZDhkNTAxZDBhMTQ2NzUxM2ZjMmE1Li43NjNmYjJlZGY2MjA4YTkxYmJk
NzA5YWNiZWYxNGE5NTQxM2RiOGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNw
cApAQCAtMjQ4LDcgKzI0OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXI6OnNldERldmljZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBpZCwKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIH0KIAogUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlcjo6RGV2aWNlc0NoYW5nZWRPYnNlcnZlclRva2VuIFJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXI6OmFkZERldmljZXNDaGFuZ2VkT2JzZXJ2ZXIoc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYg
b2JzZXJ2ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAppbmRleCBiYTZlMjhhYmQ4MWQ1
OGE3NzE0YWU5MzBhOGY5NDI0YmVmN2ZlZGQwLi5hYzlhMTY2ZmM2YTdkNDAxOGUyYTRkOTkxY2Q1
N2JkZGMzOTU4MTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAKQEAgLTYwLDcgKzYw
LDcgQEAgU3RvcmFnZTo6flN0b3JhZ2UoKQogRXhjZXB0aW9uT3I8dW5zaWduZWQ+IFN0b3JhZ2U6
Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nlc3NTdG9y
YWdlKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICByZXR1
cm4gbV9zdG9yYWdlQXJlYS0+bGVuZ3RoKCk7CiB9CkBAIC02OCw3ICs2OCw3IEBAIEV4Y2VwdGlv
bk9yPHVuc2lnbmVkPiBTdG9yYWdlOjpsZW5ndGgoKSBjb25zdAogRXhjZXB0aW9uT3I8U3RyaW5n
PiBTdG9yYWdlOjprZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N0b3Jh
Z2VBcmVhLT5jYW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0
eUVycm9yIH07CiAKICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+a2V5KGluZGV4KTsKIH0KQEAg
LTc2LDcgKzc2LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBTdG9yYWdlOjprZXkodW5zaWduZWQg
aW5kZXgpIGNvbnN0CiBFeGNlcHRpb25PcjxTdHJpbmc+IFN0b3JhZ2U6OmdldEl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXkpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nlc3NT
dG9yYWdlKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICBy
ZXR1cm4gbV9zdG9yYWdlQXJlYS0+aXRlbShrZXkpOwogfQpAQCAtODQsMTkgKzg0LDE5IEBAIEV4
Y2VwdGlvbk9yPFN0cmluZz4gU3RvcmFnZTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29u
c3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nl
c3NTdG9yYWdlKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAg
ICBib29sIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgbV9zdG9yYWdlQXJlYS0+c2V0SXRl
bShtX2ZyYW1lLCBrZXksIHZhbHVlLCBxdW90YUV4Y2VwdGlvbik7CiAgICAgaWYgKHF1b3RhRXhj
ZXB0aW9uKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUVVPVEFfRVhDRUVERURfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBRdW90YUV4Y2VlZGVkRXJyb3IgfTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTdG9yYWdlOjpyZW1vdmVJdGVtKGNv
bnN0IFN0cmluZyYga2V5KQogewogICAgIGlmICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3Rv
cmFnZShtX2ZyYW1lKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgbV9z
dG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShtX2ZyYW1lLCBrZXkpOwogICAgIHJldHVybiB7IH07CkBA
IC0xMDUsNyArMTA1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU3RvcmFnZTo6cmVtb3ZlSXRlbShj
b25zdCBTdHJpbmcmIGtleSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OmNsZWFyKCkKIHsK
ICAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKG1f
ZnJhbWUpOwogICAgIHJldHVybiB7IH07CkBAIC0xMTQsNyArMTE0LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gU3RvcmFnZTo6Y2xlYXIoKQogRXhjZXB0aW9uT3I8Ym9vbD4gU3RvcmFnZTo6Y29udGFp
bnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5j
YW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VD
VVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07
CiAKICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+Y29udGFpbnMoa2V5KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKaW5kZXggYjliNTY1OTEwZTI0ZDhjZWQ0
NTU0MDkyNTZjODY3MGQxODk1YmEzNy4uNWM4OWEwMWE3ZWJhNjkzNjVkMTg2MGE2ZjBiZWYzMmYx
ZTc1M2IwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAKQEAg
LTU2LDcgKzU2LDcgQEAgUmVmPFNWR0FsdEdseXBoRWxlbWVudD4gU1ZHQWx0R2x5cGhFbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwKIAogRXhjZXB0aW9uT3I8dm9p
ZD4gU1ZHQWx0R2x5cGhFbGVtZW50OjpzZXRHbHlwaFJlZihjb25zdCBBdG9taWNTdHJpbmcmKQog
ewotICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsK
KyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIH0K
IAogY29uc3QgQXRvbWljU3RyaW5nJiBTVkdBbHRHbHlwaEVsZW1lbnQ6OmdseXBoUmVmKCkgY29u
c3QKQEAgLTY2LDcgKzY2LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdBbHRHbHlwaEVsZW1l
bnQ6OmdseXBoUmVmKCkgY29uc3QKIAogRXhjZXB0aW9uT3I8dm9pZD4gU1ZHQWx0R2x5cGhFbGVt
ZW50OjpzZXRGb3JtYXQoY29uc3QgQXRvbWljU3RyaW5nJikKIHsKLSAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiB9CiAKIGNvbnN0IEF0b21pY1N0cmlu
ZyYgU1ZHQWx0R2x5cGhFbGVtZW50Ojpmb3JtYXQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuZ2xlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGUuaApp
bmRleCBlMDMxODRmYWU2YTlmNTU2MGEwZTAwYzJjZjFiNjdiMDM2Mzc3NzEwLi4wNDMyOTQzYWVi
YjQ0ZmEwYWMzY2ZiZDI0ZmI1YTlhNTg0MzNlZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5nbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGUuaApAQCAt
NjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVGb3JC
aW5kaW5ncyhmbG9hdCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJS
IH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2Vk
RXJyb3IgfTsKIAogICAgICAgICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldFZhbHVlKHZhbHVlKTsK
ICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUluU3BlY2lmaWVkVW5pdHMoZmxvYXQgdmFsdWVJblNw
ZWNpZmllZFVuaXRzKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9
OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0VmFsdWVJblNwZWNpZmllZFVuaXRz
KHZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpAQCAtOTQs
NyArOTQsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkK
LSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlSZWZlcmVuY2UoKS5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gbmV3
VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZmxvYXQgdmFsdWVJ
blNwZWNpZmllZFVuaXRzKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsK
KyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJv
ciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlSZWZlcmVuY2UoKS5uZXdWYWx1
ZVNwZWNpZmllZFVuaXRzKHVuaXRUeXBlLCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwogICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpAQCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoK
ICAgICBFeGNlcHRpb25Pcjx2b2lkPiBjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBz
aG9ydCB1bml0VHlwZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07Cisg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3Ig
fTsKIAogICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3BlcnR5UmVmZXJlbmNlKCkuY29udmVydFRv
U3BlY2lmaWVkVW5pdHModW5pdFR5cGUpOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCmluZGV4IDRlZjVhZWRhZDFjNTYx
MzIyMGM3YWZjNzc4YWNkYzU5YzIzYjFhOGMuLjU5Y2Q3Njk0MTk5OGJjMDgxM2Q2NjVhZWJhZmJj
MTEwOTE3OWE3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAKQEAgLTExMiwx
MSArMTEyLDExIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6OnNldFZhbHVlQXNT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogICAgIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRV
bml0cyA9IDA7CiAgICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgdmFsdWVJblNwZWNpZmll
ZFVuaXRzLCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgYXV0byB1
bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHB0ciwgZW5kKTsKICAgICBpZiAodW5pdFR5cGUgPT0g
U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFY
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAg
IG1fdW5pdFR5cGUgPSB1bml0VHlwZTsKICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHZh
bHVlSW5TcGVjaWZpZWRVbml0czsKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBTVkdBbmdsZVZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiBF
eGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZhbHVlOjpuZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVu
c2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCiB7CiAg
ICAgaWYgKHVuaXRUeXBlID09IFNWR19BTkdMRVRZUEVfVU5LTk9XTiB8fCB1bml0VHlwZSA+IFNW
R19BTkdMRVRZUEVfR1JBRCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JU
RURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9
OwogCiAgICAgbV91bml0VHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+KHVuaXRUeXBlKTsKICAgICBt
X3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHZhbHVlSW5TcGVjaWZpZWRVbml0czsKQEAgLTEzNiw3
ICsxMzYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZhbHVlOjpuZXdWYWx1ZVNwZWNp
ZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLAogRXhjZXB0aW9uT3I8dm9pZD4gU1ZH
QW5nbGVWYWx1ZTo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5
cGUpCiB7CiAgICAgaWYgKHVuaXRUeXBlID09IFNWR19BTkdMRVRZUEVfVU5LTk9XTiB8fCBtX3Vu
aXRUeXBlID09IFNWR19BTkdMRVRZUEVfVU5LTk9XTiB8fCB1bml0VHlwZSA+IFNWR19BTkdMRVRZ
UEVfR1JBRCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAg
aWYgKHVuaXRUeXBlID09IG1fdW5pdFR5cGUpCiAgICAgICAgIHJldHVybiB7IH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGVuZ3RoLmgKaW5kZXggM2E4NDgyZjNhOWFiM2QzMTY1ODYzNjZjNzE2ODk2ODQwNGI2NTk3
NC4uY2M4OTExMDY1ODgyNjIzOWE0MjM2YWZkNDYxOTI2MWRmNDNlZDM4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGguaApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0VmFsdWVGb3JCaW5kaW5ncyhmbG9hdCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChp
c1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2Rp
ZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3BlcnR5
UmVmZXJlbmNlKCkuc2V0VmFsdWUodmFsdWUsIFNWR0xlbmd0aENvbnRleHQgeyBjb250ZXh0RWxl
bWVudCgpIH0pOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpAQCAtMTAwLDcg
KzEwMCw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUluU3BlY2lm
aWVkVW5pdHMoZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKQogICAgIHsKICAgICAgICAgaWYg
KGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01v
ZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNlKCku
c2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKHZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CiAgICAgICAg
IGNvbW1pdENoYW5nZSgpOwpAQCAtMTE2LDcgKzExNiw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRp
b25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgYXV0byByZXN1
bHQgPSBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwogICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoK
ICAgICBFeGNlcHRpb25Pcjx2b2lkPiBuZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNo
b3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCiAgICAgewogICAgICAg
ICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgYXV0byByZXN1bHQgPSBw
cm9wZXJ0eVJlZmVyZW5jZSgpLm5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5pdFR5cGUsIHZhbHVl
SW5TcGVjaWZpZWRVbml0cyk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCkBA
IC0xNDIsNyArMTQyLDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbnZlcnRU
b1NwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQogICAgIHsKICAgICAgICAg
aWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJv
cGVydHlSZWZlcmVuY2UoKS5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bml0VHlwZSwgU1ZHTGVu
Z3RoQ29udGV4dCB7IGNvbnRleHRFbGVtZW50KCkgfSk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKaW5kZXgg
ZmNlY2RmOWFiZWVhMmYyYTlmNWI4ZjMyNTQ3YzcwN2NmNmVlYTNlYy4uMDk5MDZlNzM5OGYwMGRl
NmFiNjM2OTYwMGRmMzk2NDhkZjE1YzQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xlbmd0aENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhD
b250ZXh0LmNwcApAQCAtMTIyLDcgKzEyMiw3IEBAIEV4Y2VwdGlvbk9yPGZsb2F0PiBTVkdMZW5n
dGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVUb1VzZXJVbml0cyhmbG9hdCB2YWx1ZSwgU1ZHTGVuCiAK
ICAgICBzd2l0Y2ggKGZyb21Vbml0KSB7CiAgICAgY2FzZSBMZW5ndGhUeXBlVW5rbm93bjoKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIGNhc2UgTGVuZ3RoVHlw
ZU51bWJlcjoKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIGNhc2UgTGVuZ3RoVHlwZVBYOgpA
QCAtMTUzLDcgKzE1Myw3IEBAIEV4Y2VwdGlvbk9yPGZsb2F0PiBTVkdMZW5ndGhDb250ZXh0Ojpj
b252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBTVkdMCiB7CiAgICAgc3dpdGNo
ICh0b1VuaXQpIHsKICAgICBjYXNlIExlbmd0aFR5cGVVbmtub3duOgotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgY2FzZSBMZW5ndGhUeXBlTnVtYmVyOgogICAg
ICAgICByZXR1cm4gdmFsdWU7CiAgICAgY2FzZSBMZW5ndGhUeXBlUGVyY2VudGFnZToKQEAgLTE4
NCw3ICsxODQsNyBAQCBFeGNlcHRpb25PcjxmbG9hdD4gU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVy
dFZhbHVlRnJvbVVzZXJVbml0c1RvUGVyY2VudGFnZShmbG9hdAogewogICAgIEZsb2F0U2l6ZSB2
aWV3cG9ydFNpemU7CiAgICAgaWYgKCFkZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICBzd2l0Y2ggKG1v
ZGUpIHsKICAgICBjYXNlIExlbmd0aE1vZGVXaWR0aDoKQEAgLTIwMyw3ICsyMDMsNyBAQCBFeGNl
cHRpb25PcjxmbG9hdD4gU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVBlcmNlbnRh
Z2VUb1VzZXJVbml0cyhmbG9hdAogewogICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7CiAgICAg
aWYgKCFkZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIExl
bmd0aE1vZGVXaWR0aDoKQEAgLTIzOSwxMSArMjM5LDExIEBAIEV4Y2VwdGlvbk9yPGZsb2F0PiBT
VkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVMoZmxvYXQgdmFs
dWUpCiB7CiAgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyht
X2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9y
dGVkRXJyb3IgfTsKIAogICAgIGZsb2F0IGZvbnRTaXplID0gc3R5bGUtPmNvbXB1dGVkRm9udFBp
eGVsU2l6ZSgpOwogICAgIGlmICghZm9udFNpemUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3Vw
cG9ydGVkRXJyb3IgfTsKIAogICAgIHJldHVybiB2YWx1ZSAvIGZvbnRTaXplOwogfQpAQCAtMjUy
LDcgKzI1Miw3IEBAIEV4Y2VwdGlvbk9yPGZsb2F0PiBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0
VmFsdWVGcm9tRU1TVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUpCiB7CiAgICAgYXV0byogc3R5bGUg
PSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5
bGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIHJldHVy
biB2YWx1ZSAqIHN0eWxlLT5jb21wdXRlZEZvbnRQaXhlbFNpemUoKTsKIH0KQEAgLTI2MSwxMyAr
MjYxLDEzIEBAIEV4Y2VwdGlvbk9yPGZsb2F0PiBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFs
dWVGcm9tVXNlclVuaXRzVG9FWFMoZmxvYXQgdmFsdWUpCiB7CiAgICAgYXV0byogc3R5bGUgPSBy
ZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIFVzZSBv
ZiBjZWlsIGFsbG93cyBhIHBpeGVsIG1hdGNoIHRvIHRoZSBXM0NzIGV4cGVjdGVkIG91dHB1dCBv
ZiBjb29yZHMtdW5pdHMtMDMtYi5zdmcKICAgICAvLyBpZiB0aGlzIGNhdXNlcyBwcm9ibGVtcyBp
biByZWFsIHdvcmxkIGNhc2VzIG1heWJlIGl0IHdvdWxkIGJlIGJlc3QgdG8gcmVtb3ZlIHRoaXMK
ICAgICBmbG9hdCB4SGVpZ2h0ID0gc3RkOjpjZWlsKHN0eWxlLT5mb250TWV0cmljcygpLnhIZWln
aHQoKSk7CiAgICAgaWYgKCF4SGVpZ2h0KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRl
ZEVycm9yIH07CiAKICAgICByZXR1cm4gdmFsdWUgLyB4SGVpZ2h0OwogfQpAQCAtMjc2LDcgKzI3
Niw3IEBAIEV4Y2VwdGlvbk9yPGZsb2F0PiBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVG
cm9tRVhTVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUpCiB7CiAgICAgYXV0byogc3R5bGUgPSByZW5k
ZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIFVzZSBvZiBj
ZWlsIGFsbG93cyBhIHBpeGVsIG1hdGNoIHRvIHRoZSBXM0NzIGV4cGVjdGVkIG91dHB1dCBvZiBj
b29yZHMtdW5pdHMtMDMtYi5zdmcKICAgICAvLyBpZiB0aGlzIGNhdXNlcyBwcm9ibGVtcyBpbiBy
ZWFsIHdvcmxkIGNhc2VzIG1heWJlIGl0IHdvdWxkIGJlIGJlc3QgdG8gcmVtb3ZlIHRoaXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCmluZGV4IDhmNTYzMDVlZjc2NGZiZDg2MTkw
YzkyOWYxMDViMWNkNTFhODYwMzIuLjA1ZTBhMzkwZDYxNjA0OTg1NzUwZmJlZmEwMTFhYzZlMGIz
ZDhjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcApAQCAtMjE5LDExICsy
MTksMTEgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0
cmluZy5sZW5ndGgoKTsKIAogICAgIGlmICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIGNvbnZlcnRl
ZE51bWJlciwgZmFsc2UpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGF1dG8g
dHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShwdHIsIGVuZCk7CiAgICAgaWYgKHR5cGUgPT0gTGVuZ3Ro
VHlwZVVua25vd24pCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgbV91bml0ID0g
c3RvcmVVbml0KGV4dHJhY3RNb2RlKG1fdW5pdCksIHR5cGUpOwogICAgIG1fdmFsdWVJblNwZWNp
ZmllZFVuaXRzID0gY29udmVydGVkTnVtYmVyOwpAQCAtMjM4LDcgKzIzOCw3IEBAIFN0cmluZyBT
VkdMZW5ndGhWYWx1ZTo6dmFsdWVBc1N0cmluZygpIGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBT
VkdMZW5ndGhWYWx1ZTo6bmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB0eXBl
LCBmbG9hdCB2YWx1ZSkKIHsKICAgICBpZiAodHlwZSA9PSBMZW5ndGhUeXBlVW5rbm93biB8fCB0
eXBlID4gTGVuZ3RoVHlwZVBDKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBP
UlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9y
IH07CiAKICAgICBtX3VuaXQgPSBzdG9yZVVuaXQoZXh0cmFjdE1vZGUobV91bml0KSwgc3RhdGlj
X2Nhc3Q8U1ZHTGVuZ3RoVHlwZT4odHlwZSkpOwogICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRz
ID0gdmFsdWU7CkBAIC0yNDgsNyArMjQ4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3Ro
VmFsdWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdHlwZSwgZmwKIEV4
Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1
bnNpZ25lZCBzaG9ydCB0eXBlLCBjb25zdCBTVkdMZW5ndGhDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIGlmICh0eXBlID09IExlbmd0aFR5cGVVbmtub3duIHx8IHR5cGUgPiBMZW5ndGhUeXBlUEMp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGF1dG8gdmFs
dWVJblVzZXJVbml0cyA9IHZhbHVlRm9yQmluZGluZ3MoY29udGV4dCk7CiAgICAgaWYgKHZhbHVl
SW5Vc2VyVW5pdHMuaGFzRXhjZXB0aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTG9jYXRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3Bw
CmluZGV4IDM0N2IwY2I1OWYxMzkzMTFlMmJkNjJmM2Y3YzM3OWYwMjM3MTdjYWQuLjJmODY2MTQ0
ZTJkMDJmZDAwOGEwN2U4NTUwODlkYTljNTAwMDgyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2Nh
dGFibGUuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFNWR01hdHJpeD4+
IFNWR0xvY2F0YWJsZTo6Z2V0VHJhbnNmb3JtVG9FbGVtZW50KFNWR0VsZW1lbnQqIHRhcmcKICAg
ICAgICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRhcmdldENUTS5pbnZlcnNlKCkpCiAgICAgICAgICAg
ICBjdG0gPSBpbnZlcnNlLnZhbHVlKCkgKiBjdG07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJNYXRy
aXggaXMgbm90IGludmVydGlibGUiKSB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIk1hdHJpeCBpcyBub3QgaW52ZXJ0aWJs
ZSIpIH07CiAgICAgfQogCiAgICAgcmV0dXJuIFNWR01hdHJpeDo6Y3JlYXRlKGN0bSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTWF0cml4LmgKaW5kZXggNzgxOGQxZGYzN2NmYTI5NzFiYTA3MDI5MDY3YmY4MjZlNThl
MjVhYy4uZTI0YWRhZDNjODJmMzhjZWQwYzIxODEwYzc2NmNiYTZlZGQ2ZjE1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdNYXRyaXguaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8
dm9pZD4gc2V0QShkb3VibGUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgp
KQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxs
b3dlZEVycm9yIH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRBKHZhbHVlKTsK
ICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRCKGRvdWJsZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChp
c1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2Rp
ZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNl
dEIodmFsdWUpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTk1LDcgKzk1LDcgQEAgcHVi
bGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEMoZG91YmxlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVm
ZXJlbmNlKCkuc2V0Qyh2YWx1ZSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpAQCAtMTExLDcg
KzExMSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXREKGRvdWJsZSB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAg
ICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldEQodmFsdWUpOwogICAgICAgICBjb21taXRDaGFuZ2Uo
KTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
RShkb3VibGUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9Owor
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9y
IH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRFKHZhbHVlKTsKICAgICAgICAg
Y29tbWl0Q2hhbmdlKCk7CkBAIC0xNDMsNyArMTQzLDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IHNldEYoZG91YmxlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9u
bHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlv
bkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0Rih2YWx1
ZSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoK
ICAgICBFeGNlcHRpb25PcjxSZWY8U1ZHTWF0cml4Pj4gbXVsdGlwbHkoU1ZHTWF0cml4JiBzZWNv
bmRNYXRyaXgpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAK
ICAgICAgICAgYXV0byByZXN1bHQgPSBwcm9wZXJ0eVJlZmVyZW5jZSgpLm11bHRpcGx5KHNlY29u
ZE1hdHJpeC5wcm9wZXJ0eVJlZmVyZW5jZSgpKTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBA
IC0xNjUsNyArMTY1LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+
PiBpbnZlcnNlKCkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsK
IAogICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3BlcnR5UmVmZXJlbmNlKCkuaW52ZXJzZSgpOwog
ICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpAQCAtMTc4LDcgKzE3OCw3IEBAIHB1
YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8U1ZHTWF0cml4Pj4gdHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAK
ICAgICAgICAgYXV0byByZXN1bHQgPSBwcm9wZXJ0eVJlZmVyZW5jZSgpLnRyYW5zbGF0ZSh4LCB5
KTsgICAgICAgIAogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTE4OSw3ICsxODksNyBAQCBw
dWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPFNWR01hdHJpeD4+IHNjYWxlKGZsb2F0IHNjYWxl
RmFjdG9yKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlSZWZlcmVuY2UoKS5zY2FsZShzY2FsZUZhY3Rv
cik7ICAgICAgICAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC0yMDAsNyArMjAwLDcgQEAg
cHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+PiBzY2FsZU5vblVuaWZvcm0o
ZmxvYXQgc2NhbGVGYWN0b3JYLCBmbG9hdCBzY2FsZUZhY3RvclkpCiAgICAgewogICAgICAgICBp
ZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
TW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgYXV0byByZXN1bHQgPSBwcm9w
ZXJ0eVJlZmVyZW5jZSgpLnNjYWxlTm9uVW5pZm9ybShzY2FsZUZhY3RvclgsIHNjYWxlRmFjdG9y
WSk7ICAgICAgICAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC0yMTEsNyArMjExLDcgQEAg
cHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+PiByb3RhdGUoZmxvYXQgYW5n
bGUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAg
ICAgYXV0byByZXN1bHQgPSBwcm9wZXJ0eVJlZmVyZW5jZSgpLnJvdGF0ZShhbmdsZSk7ICAgICAg
ICAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC0yMjIsNyArMjIyLDcgQEAgcHVibGljOgog
ICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+PiByb3RhdGVGcm9tVmVjdG9yKGZsb2F0IHgs
IGZsb2F0IHkpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAK
ICAgICAgICAgYXV0byByZXN1bHQgPSBwcm9wZXJ0eVJlZmVyZW5jZSgpLnJvdGF0ZUZyb21WZWN0
b3IoeCwgeSk7ICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKQEAg
LTIzNSw3ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPFNWR01hdHJpeD4+
IGZsaXBYKCkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAog
ICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3BlcnR5UmVmZXJlbmNlKCkuZmxpcFgoKTsgICAgICAg
IAogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCBwdWJsaWM6CiAg
ICAgRXhjZXB0aW9uT3I8UmVmPFNWR01hdHJpeD4+IGZsaXBZKCkKICAgICB7CiAgICAgICAgIGlm
IChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9N
b2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3Bl
cnR5UmVmZXJlbmNlKCkuZmxpcFkoKTsgICAgICAgIAogICAgICAgICBjb21taXRDaGFuZ2UoKTsK
QEAgLTI1Nyw3ICsyNTcsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPFNWR01hdHJp
eD4+IHNrZXdYKGZsb2F0IGFuZ2xlKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkK
LSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlSZWZlcmVuY2UoKS5z
a2V3WChhbmdsZSk7ICAgICAgICAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC0yNjgsNyAr
MjY4LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+PiBza2V3WShm
bG9hdCBhbmdsZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsK
IAogICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3BlcnR5UmVmZXJlbmNlKCkuc2tld1koYW5nbGUp
OyAgICAgICAgCiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR01hdHJpeFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWF0cml4
VmFsdWUuaAppbmRleCA2MjU1MGU0ZDFjYWUyZjIwODUxNDZhNmRiOTE0ZjcwMjU5YTg3MjE2Li4x
ODQwMDI2OWFhMzBjNjFjOTQ2MjBhZTIxNjNlYmM0NmRlY2Q1NWIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTWF0cml4VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTWF0cml4VmFsdWUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KGF1dG8gaW52ZXJzZSA9IEFmZmluZVRyYW5zZm9ybTo6aW52ZXJzZSgpKQogICAgICAgICAgICAg
cmV0dXJuIFNWR01hdHJpeFZhbHVlIHsgaW52ZXJzZS52YWx1ZSgpIH07CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgi
TWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIk1hdHJpeCBpcyBub3QgaW52ZXJ0aWJs
ZSIpIH07CiAgICAgfQogCiAgICAgRXhjZXB0aW9uT3I8U1ZHTWF0cml4VmFsdWU+IHJvdGF0ZUZy
b21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR051bWJlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlci5oCmluZGV4IDg3
M2E4ZjQ2Y2Q0ZWE1NTZkNDhmZjFmYzJhMWYzM2ZmMDBmYTgzZGEuLmUxMmU3Y2NhZWQzMDhjODI4
MThmYmRhYzZkYWQ0NzNjOWFlMjM0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdOdW1iZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyLmgKQEAgLTYxLDcg
KzYxLDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlRm9yQmluZGlu
Z3MoZmxvYXQgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9Owor
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9y
IH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKSA9IHZhbHVlOwogICAgICAgICBjb21t
aXRDaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50LmgKaW5kZXggYWMwM2I0ODFjZDJmYTJiNmUzMGU2
MDNiNTFjMzk0YjVmMzgyOGU4Yy4uYjE3Njg2ZThlYzNlOGZiMTI1ZTU3NTBkM2UxYTc2YjlmNGNh
NmI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50LmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAg
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFgoZmxvYXQgeFZhbHVlKQogICAgIHsKICAgICAgICAgaWYg
KGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01v
ZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNlKCku
c2V0WCh4VmFsdWUpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTc5LDcgKzc5LDcgQEAg
cHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFkoZmxvYXQgeFZhbHVlKQogICAgIHsK
ICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5
UmVmZXJlbmNlKCkuc2V0WSh4VmFsdWUpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTkw
LDcgKzkwLDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdQb2ludD4+IG1hdHJp
eFRyYW5zZm9ybShTVkdNYXRyaXgmIG1hdHJpeCkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRP
bmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRp
b25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBhdXRvIG5ld1BvaW50ID0gcHJvcGVydHlSZWZl
cmVuY2UoKS5tYXRyaXhUcmFuc2Zvcm0obWF0cml4LnByb3BlcnR5UmVmZXJlbmNlKCkpOwogICAg
ICAgICBjb21taXRDaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5oCmluZGV4IDNjZTVhNWUxOTU4YWQzY2U1YzhmNWYzMDI0YTE5ODcyZjM3NDM2YjYu
LmI5M2U0M2U2MWRmMTcwMjMxMzE2MWM3YmM4MTU3ZDk4OTc3YTIzODEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaApAQCAtNjIsNyArNjIsNyBAQCBwdWJs
aWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QWxpZ24oZmxvYXQgdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgYXV0byByZXN1
bHQgPSBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldEFsaWduKHZhbHVlKTsKICAgICAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldE1lZXRPclNsaWNlKGZsb2F0IHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJv
cGVydHlSZWZlcmVuY2UoKS5zZXRNZWV0T3JTbGljZSh2YWx1ZSk7CiAgICAgICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCmluZGV4IDIwNDFkMGM3MTQ2ODNiYWRlYTM2ZWE3ZGMzM2U4
ODI4YTRmMmQ4MGYuLjU0MGQ1MjAxNDkyNDQ1OTM2ZmZjNTllZTIzYjZhZDE1OGE5NTBmMmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUu
Y3BwCkBAIC0zOCw3ICszOCw3IEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlKCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZTo6c2V0QWxpZ24odW5zaWduZWQgc2hvcnQgYWxpZ24pCiB7CiAgICAgaWYg
KGFsaWduID09IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1VOS05PV04gfHwgYWxpZ24gPiBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1BWCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciB9OwogCiAgICAgbV9hbGlnbiA9IHN0YXRpY19jYXN0PFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9UeXBlPihhbGlnbik7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTQ3LDcgKzQ3LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpzZXRBbGlnbih1
bnNpZ25lZCBzaG9ydCBhbGlnbikKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZTo6c2V0TWVldE9yU2xpY2UodW5zaWduZWQgc2hvcnQgbWVldE9yU2xpY2UpCiB7
CiAgICAgaWYgKG1lZXRPclNsaWNlID09IFNWR19NRUVUT1JTTElDRV9VTktOT1dOIHx8IG1lZXRP
clNsaWNlID4gU1ZHX01FRVRPUlNMSUNFX1NMSUNFKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1
cHBvcnRlZEVycm9yIH07CiAKICAgICBtX21lZXRPclNsaWNlID0gc3RhdGljX2Nhc3Q8U1ZHTWVl
dE9yU2xpY2VUeXBlPihtZWV0T3JTbGljZSk7CiAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVj
dC5oCmluZGV4IDBlMjFmNWY2NjMzNWNkZGRiMTlhYmE3NjUzOTRlZjRjM2E3N2EyOTEuLmRmYzlj
YWM0NDlhNzAyMGI2ZWI1OTgyNTM1ZjYwNDQ4ZmVmZWRhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaApA
QCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0WChmbG9h
dCB4VmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAK
ICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRYKHhWYWx1ZSk7CiAgICAgICAgIGNvbW1p
dENoYW5nZSgpOwpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0WShmbG9hdCB4VmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQot
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dl
ZEVycm9yIH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRZKHhWYWx1ZSk7CiAg
ICAgICAgIGNvbW1pdENoYW5nZSgpOwpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0V2lkdGgoZmxvYXQgd2lkdGhWYWx1ZSkKICAgICB7CiAgICAgICAg
IGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBwcm9wZXJ0eVJlZmVyZW5j
ZSgpLnNldFdpZHRoKHdpZHRoVmFsdWUpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTEw
NCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0SGVpZ2h0KGZs
b2F0IGhlaWdodFZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsK
KyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJv
ciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0SGVpZ2h0KGhlaWdodFZhbHVl
KTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0
Q29udGVudEVsZW1lbnQuY3BwCmluZGV4IGE2NWVlODhjNmIzOGU5YzIyYzdjNTA3MDliOWQxODIw
Y2IwNTQwZDAuLmVkNTE0ODdkY2E5MWIwMDhhOTYwYzNhYjA4OTMyMTIzYTNhNGM2NzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCkBAIC0xMTcsNyAr
MTE3LDcgQEAgRXhjZXB0aW9uT3I8ZmxvYXQ+IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3Vi
U3RyaW5nTGVuZ3RoKHVuc2lnbmVkIGNoYXJudW0sIHUKIHsKICAgICB1bnNpZ25lZCBudW1iZXJP
ZkNoYXJzID0gZ2V0TnVtYmVyT2ZDaGFycygpOwogICAgIGlmIChjaGFybnVtID49IG51bWJlck9m
Q2hhcnMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIG5jaGFycyA9
IHN0ZDo6bWluKG5jaGFycywgbnVtYmVyT2ZDaGFycyAtIGNoYXJudW0pOwogICAgIHJldHVybiBT
VkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuc3ViU3RyaW5nTGVuZ3RoKGNoYXJudW0sIG5jaGFycyk7
CkBAIC0xMjYsNyArMTI2LDcgQEAgRXhjZXB0aW9uT3I8ZmxvYXQ+IFNWR1RleHRDb250ZW50RWxl
bWVudDo6Z2V0U3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVkIGNoYXJudW0sIHUKIEV4Y2VwdGlvbk9y
PFJlZjxTVkdQb2ludD4+IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3RhcnRQb3NpdGlvbk9m
Q2hhcih1bnNpZ25lZCBjaGFybnVtKQogewogICAgIGlmIChjaGFybnVtID4gZ2V0TnVtYmVyT2ZD
aGFycygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICByZXR1cm4g
U1ZHUG9pbnQ6OmNyZWF0ZShTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuc3RhcnRQb3NpdGlvbk9m
Q2hhcmFjdGVyKGNoYXJudW0pKTsKIH0KQEAgLTEzNCw3ICsxMzQsNyBAQCBFeGNlcHRpb25PcjxS
ZWY8U1ZHUG9pbnQ+PiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN0YXJ0UG9zaXRpb25PZkNo
YXIodW5zaWduZQogRXhjZXB0aW9uT3I8UmVmPFNWR1BvaW50Pj4gU1ZHVGV4dENvbnRlbnRFbGVt
ZW50OjpnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtKQogewogICAgIGlmIChj
aGFybnVtID4gZ2V0TnVtYmVyT2ZDaGFycygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVy
cm9yIH07CiAKICAgICByZXR1cm4gU1ZHUG9pbnQ6OmNyZWF0ZShTVkdUZXh0UXVlcnkocmVuZGVy
ZXIoKSkuZW5kUG9zaXRpb25PZkNoYXJhY3RlcihjaGFybnVtKSk7CiB9CkBAIC0xNDIsNyArMTQy
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFNWR1BvaW50Pj4gU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpn
ZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZAogRXhjZXB0aW9uT3I8UmVmPFNWR1JlY3Q+PiBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnVtKQog
ewogICAgIGlmIChjaGFybnVtID4gZ2V0TnVtYmVyT2ZDaGFycygpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICByZXR1cm4gU1ZHUmVjdDo6Y3JlYXRlKFNWR1RleHRR
dWVyeShyZW5kZXJlcigpKS5leHRlbnRPZkNoYXJhY3RlcihjaGFybnVtKSk7CiB9CkBAIC0xNTAs
NyArMTUwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFNWR1JlY3Q+PiBTVkdUZXh0Q29udGVudEVsZW1l
bnQ6OmdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnUKIEV4Y2VwdGlvbk9yPGZsb2F0PiBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFJvdGF0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0p
CiB7CiAgICAgaWYgKGNoYXJudW0gPiBnZXROdW1iZXJPZkNoYXJzKCkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIo
KSkucm90YXRpb25PZkNoYXJhY3RlcihjaGFybnVtKTsKIH0KQEAgLTE2NSw3ICsxNjUsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cmluZyh1
bnNpZ25lZCBjaGFybnVtLCB1bnNpZwogewogICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhcnMgPSBn
ZXROdW1iZXJPZkNoYXJzKCk7CiAgICAgaWYgKGNoYXJudW0gPj0gbnVtYmVyT2ZDaGFycykKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgbmNoYXJzID0gc3RkOjptaW4o
bmNoYXJzLCBudW1iZXJPZkNoYXJzIC0gY2hhcm51bSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm0uaAppbmRleCA2OTg2MTM4NGMwNmYzNjg1Nzk2ZDc2MTYwNjY1N2U5N2Q1NTJiNmUyLi4xYjg2
N2EzMzg1MTUwZTdkMDY5MWZhZjk1NTM2MjkwY2FiM2UyZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybS5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRNYXRyaXgoU1ZHTWF0cml4JiBtYXRyaXgpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFk
T25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0
aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRNYXRy
aXgobWF0cml4LnByb3BlcnR5UmVmZXJlbmNlKCkpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsK
QEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFRyYW5z
bGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgp
KQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxs
b3dlZEVycm9yIH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRUcmFuc2xhdGUo
dHgsIHR5KTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC05Miw3ICs5Miw3IEBAIHB1Ymxp
YzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCiAg
ICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgcHJv
cGVydHlSZWZlcmVuY2UoKS5zZXRTY2FsZShzeCwgc3kpOwogICAgICAgICBjb21taXRDaGFuZ2Uo
KTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
Um90YXRlKGZsb2F0IGFuZ2xlLCBmbG9hdCBjeCwgZmxvYXQgY3kpCiAgICAgewogICAgICAgICBp
ZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
TW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2Uo
KS5zZXRSb3RhdGUoYW5nbGUsIGN4LCBjeSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpAQCAt
MTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTa2V3WChm
bG9hdCBhbmdsZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsK
IAogICAgICAgICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldFNrZXdYKGFuZ2xlKTsKICAgICAgICAg
Y29tbWl0Q2hhbmdlKCk7CkBAIC0xMjUsNyArMTI1LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IHNldFNrZXdZKGZsb2F0IGFuZ2xlKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVh
ZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNh
dGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0U2tl
d1koYW5nbGUpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1Nw
ZWMuY3BwCmluZGV4IDJiNDY3ZGIyMmY3ZmI5OTMyODAxOTc2NjNlMWQ3NjNjMDIzM2FlNTIuLjA5
OGExNzNkZDFmNmY3MWE3N2E0Mzk0YzI1YTJjYjZjNWMyZWZmNjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZpZXdTcGVjLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZH
Vmlld1NwZWM6OnRyYW5zZm9ybUlkZW50aWZpZXIoKQogRXhjZXB0aW9uT3I8dm9pZD4gU1ZHVmll
d1NwZWM6OnNldFpvb21BbmRQYW4odW5zaWduZWQgc2hvcnQpCiB7CiAgICAgLy8gU1ZHVmlld1Nw
ZWMgYW5kIGFsbCBvZiBpdHMgY29udGVudCBpcyByZWFkLW9ubHkuCi0gICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRp
b24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogfQogCiBTdHJpbmcgU1ZHVmlld1Nw
ZWM6OnRyYW5zZm9ybVN0cmluZygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCmluZGV4IDg0OThjZWJmZTUyMTVhMDZkNDBlNWIzMWNj
OGU1ZWFmZjUwZjkyOWMuLjk3MWIwYWQwYjBjNmFhODE4ZDgxNDUyNGI3OTg1ZGI2YWRkYzQ2ZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5o
CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjxib29sPiBjYW5BbHRl
ckxpc3QoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcm9sZSA9PSBBbmltVmFsUm9sZSkK
LSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvciB9OwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE3Miw3ICsxNzIs
NyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8Ym9vbD4gY2FuR2V0SXRlbSh1bnNpZ25lZCBp
bmRleCkKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA+PSBtX3ZhbHVlcy0+c2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
cmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIAogICAgICAgICBpZiAoaW5kZXggPj0gbV92
YWx1ZXMtPnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpF
X0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07
CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzAwLDcgKzMwMCw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICBpZiAobV92YWx1ZXMtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8g
J25ld0l0ZW0nIGFscmVhZHkgbGl2ZWQgaW4gb3VyIGxpc3QsIHdlIHJlbW92ZWQgaXQsIGFuZCBu
b3cgd2UncmUgZW1wdHksIHdoaWNoIG1lYW5zIHRoZXJlJ3Mgbm90aGluZyB0byByZXBsYWNlLgot
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgYXQgdGhlIGRlc2lyZWQgcG9zaXRpb24gJ2luZGV4
Jy4gCkBAIC0zMzEsNyArMzMxLDcgQEAgcHVibGljOgogICAgICAgICBpZiAobV92YWx1ZXMtPmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fd3JhcHBlcnMtPmlzRW1wdHkoKSk7CiAg
ICAgICAgICAgICAvLyAnbmV3SXRlbScgYWxyZWFkeSBsaXZlZCBpbiBvdXIgbGlzdCwgd2UgcmVt
b3ZlZCBpdCwgYW5kIG5vdyB3ZSdyZSBlbXB0eSwgd2hpY2ggbWVhbnMgdGhlcmUncyBub3RoaW5n
IHRvIHJlcGxhY2UuCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9F
UlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owog
ICAgICAgICB9CiAKICAgICAgICAgLy8gRGV0YWNoIHRoZSBleGlzdGluZyB3cmFwcGVyLgpAQCAt
MzU2LDcgKzM1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKSk7CiAKICAgICAgICAgaWYgKGluZGV4ID49IG1fdmFsdWVzLT5zaXplKCkpCi0g
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3Mu
Y3BwCmluZGV4IGQ4ZjViNmU5NTcxYTI1YzI2NDFjYzU3NmYxM2MyNjBkNDYwMjc5NTQuLjkzODkz
YmQ1NzM5YzBkZDIxNjc1OTAxNDI2Y2RmZjBiMzFlZjg4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcApAQCAtMjg5LDcgKzI4OSw3IEBAIFNldHRpbmdz
JiBJbnRlcm5hbFNldHRpbmdzOjpzZXR0aW5ncygpIGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBJ
bnRlcm5hbFNldHRpbmdzOjpzZXRUb3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgc2V0dGluZ3MoKS5zZXRU
b3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZChlbmFibGVkKTsKICNlbHNlCkBAIC0zMDEsNyArMzAx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VG91Y2hFdmVudEVt
dWxhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxT
ZXR0aW5nczo6c2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBTdHJpbmcmIHNjcmlwdCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgVVNjcmlwdENvZGUgY29kZSA9IHNjcmlwdE5h
bWVUb0NvZGUoc2NyaXB0KTsKICAgICBpZiAoY29kZSA9PSBVU0NSSVBUX0lOVkFMSURfQ09ERSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTMxMyw3ICszMTMsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgU3RyaW5nJiBm
YW1pbHksCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTZXJpZkZvbnRG
YW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IFN0cmluZyYgc2NyaXB0KQogewogICAg
IGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
ICAgICBVU2NyaXB0Q29kZSBjb2RlID0gc2NyaXB0TmFtZVRvQ29kZShzY3JpcHQpOwogICAgIGlm
IChjb2RlID09IFVTQ1JJUFRfSU5WQUxJRF9DT0RFKQogICAgICAgICByZXR1cm4geyB9OwpAQCAt
MzI1LDcgKzMyNSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFNl
cmlmRm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uCiBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IFN0cmluZyYg
ZmFtaWx5LCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgVVNjcmlwdENvZGUgY29k
ZSA9IHNjcmlwdE5hbWVUb0NvZGUoc2NyaXB0KTsKICAgICBpZiAoY29kZSA9PSBVU0NSSVBUX0lO
VkFMSURfQ09ERSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTMzNyw3ICszMzcsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNv
bnN0IFN0cmluZyYgZmFtaWx5LAogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6
c2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBTdHJpbmcmIHNj
cmlwdCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAgICAgVVNjcmlwdENvZGUgY29kZSA9IHNjcmlwdE5hbWVUb0NvZGUoc2Ny
aXB0KTsKICAgICBpZiAoY29kZSA9PSBVU0NSSVBUX0lOVkFMSURfQ09ERSkKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTM0OSw3ICszNDksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNl
dHRpbmdzOjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbgogRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29u
c3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IFN0cmluZyYgc2NyaXB0KQogewogICAgIGlmICghbV9w
YWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBVU2Ny
aXB0Q29kZSBjb2RlID0gc2NyaXB0TmFtZVRvQ29kZShzY3JpcHQpOwogICAgIGlmIChjb2RlID09
IFVTQ1JJUFRfSU5WQUxJRF9DT0RFKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMzYxLDcgKzM2
MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEN1cnNpdmVGb250
RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bFNldHRpbmdzOjpzZXRGYW50YXN5Rm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3JpcHRO
YW1lVG9Db2RlKHNjcmlwdCk7CiAgICAgaWYgKGNvZGUgPT0gVVNDUklQVF9JTlZBTElEX0NPREUp
CiAgICAgICAgIHJldHVybiB7IH07CkBAIC0zNzMsNyArMzczLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgU3RyaW5nJiBm
YW1pbHksIGMKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFBpY3RvZ3Jh
cGhGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBTdHJpbmcmIHNjcmlwdCkK
IHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CiAgICAgVVNjcmlwdENvZGUgY29kZSA9IHNjcmlwdE5hbWVUb0NvZGUoc2NyaXB0KTsK
ICAgICBpZiAoY29kZSA9PSBVU0NSSVBUX0lOVkFMSURfQ09ERSkKICAgICAgICAgcmV0dXJuIHsg
fTsKQEAgLTM4NSw3ICszODUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdz
OjpzZXRQaWN0b2dyYXBoRm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseQogRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VGV4dEF1dG9zaXppbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKICAgICBzZXR0aW5n
cygpLnNldFRleHRBdXRvc2l6aW5nRW5hYmxlZChlbmFibGVkKTsKICNlbHNlCkBAIC0zOTcsNyAr
Mzk3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VGV4dEF1dG9z
aXppbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0
dGluZ3M6OnNldFRleHRBdXRvc2l6aW5nV2luZG93U2l6ZU92ZXJyaWRlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKICAgICBzZXR0aW5n
cygpLnNldFRleHRBdXRvc2l6aW5nV2luZG93U2l6ZU92ZXJyaWRlKEludFNpemUod2lkdGgsIGhl
aWdodCkpOwogI2Vsc2UKQEAgLTQxMCw3ICs0MTAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbFNldHRpbmdzOjpzZXRUZXh0QXV0b3NpemluZ1dpbmRvd1NpemVPdmVycmlkZShpbnQgd2lk
dAogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0TWVkaWFUeXBlT3ZlcnJp
ZGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdzKCkuc2V0TWVk
aWFUeXBlT3ZlcnJpZGUobWVkaWFUeXBlKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNDE4LDcg
KzQxOCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldE1lZGlhVHlw
ZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbFNldHRpbmdzOjpzZXRDYW5TdGFydE1lZGlhKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAo
IW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAg
bV9wYWdlLT5zZXRDYW5TdGFydE1lZGlhKGVuYWJsZWQpOwogICAgIHJldHVybiB7IH07CiB9CkBA
IC00MjYsNyArNDI2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0
Q2FuU3RhcnRNZWRpYShib29sIGVuYWJsZWQpCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNl
dHRpbmdzOjpzZXRBbGxvd3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFjayhib29sIGFsbG93cykKIHsK
ICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUND
RVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBzZXR0aW5ncygp
LnNldEFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrKGFsbG93cyk7CiAjZWxzZQpAQCAtNDM4
LDcgKzQzOCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEFsbG93
c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrKGJvb2wgYWxsb3dzCiBFeGNlcHRpb25Pcjx2b2lkPiBJ
bnRlcm5hbFNldHRpbmdzOjpzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24o
Ym9vbCByZXF1aXJlcykKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBzZXR0
aW5ncygpLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihyZXF1aXJlcyk7
CiAjZWxzZQpAQCAtNDUwLDcgKzQ1MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0
dGluZ3M6OnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sCiBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3Qg
U3RyaW5nJiBlZGl0aW5nQmVoYXZpb3IpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShlZGl0aW5nQmVoYXZpb3IsICJ3aW4iKSkKICAgICAgICAgc2V0dGluZ3Mo
KS5zZXRFZGl0aW5nQmVoYXZpb3JUeXBlKEVkaXRpbmdXaW5kb3dzQmVoYXZpb3IpOwogICAgIGVs
c2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGVkaXRpbmdCZWhhdmlvciwgIm1h
YyIpKQpAQCAtNDYwLDE0ICs0NjAsMTQgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0
aW5nczo6c2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IFN0cmluZyYgZWRpdGluZ0JlaGEKICAgICBl
bHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShlZGl0aW5nQmVoYXZpb3IsICJp
b3MiKSkKICAgICAgICAgc2V0dGluZ3MoKS5zZXRFZGl0aW5nQmVoYXZpb3JUeXBlKEVkaXRpbmdJ
T1NCZWhhdmlvcik7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFY
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRT
aG91bGREaXNwbGF5VHJhY2tLaW5kKGNvbnN0IFN0cmluZyYga2luZCwgYm9vbCBlbmFibGVkKQog
ewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgYXV0byYgY2FwdGlvblByZWZlcmVu
Y2VzID0gbV9wYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShraW5kLCAic3VidGl0bGVzIikpCkBAIC00NzcsNyAr
NDc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkRGlz
cGxheVRyYWNrS2luZChjb25zdCBTdHJpbmcmIGtpbmQKICAgICBlbHNlIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShraW5kLCAidGV4dGRlc2NyaXB0aW9ucyIpKQogICAgICAgICBj
YXB0aW9uUHJlZmVyZW5jZXMuc2V0VXNlclByZWZlcnNUZXh0RGVzY3JpcHRpb25zKGVuYWJsZWQp
OwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShraW5kKTsKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CkBAIC00ODgsNyArNDg4
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkRGlzcGxh
eVRyYWNrS2luZChjb25zdCBTdHJpbmcmIGtpbmQKIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFs
U2V0dGluZ3M6OnNob3VsZERpc3BsYXlUcmFja0tpbmQoY29uc3QgU3RyaW5nJiBraW5kKQogewog
ICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NF
U1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2Vz
ID0gbV9wYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShraW5kLCAic3VidGl0bGVzIikpCkBAIC00OTgsNyArNDk4
LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxTZXR0aW5nczo6c2hvdWxkRGlzcGxheVRy
YWNrS2luZChjb25zdCBTdHJpbmcmIGtpbmQpCiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGtpbmQsICJ0ZXh0ZGVzY3JpcHRpb25zIikpCiAgICAgICAgIHJldHVybiBjYXB0
aW9uUHJlZmVyZW5jZXMudXNlclByZWZlcnNUZXh0RGVzY3JpcHRpb25zKCk7CiAKLSAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50
YXhFcnJvciB9OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oa2luZCk7CiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNTA4LDcgKzUwOCw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsU2V0dGlu
Z3M6OnNob3VsZERpc3BsYXlUcmFja0tpbmQoY29uc3QgU3RyaW5nJiBraW5kKQogRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KGNvbnN0
IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgaWYgKG1vZGUgPT0gIkFsbG93QWxsIikKICAgICAg
ICAgc2V0dGluZ3MoKS5zZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OkFs
bG93QWxsU3RvcmFnZSk7CiAgICAgZWxzZSBpZiAobW9kZSA9PSAiQmxvY2tUaGlyZFBhcnR5IikK
QEAgLTUxNiwxNCArNTE2LDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6
OnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShjb25zdCBTdHJpbmcmIG1vZGUpCiAgICAgZWxzZSBp
ZiAobW9kZSA9PSAiQmxvY2tBbGwiKQogICAgICAgICBzZXR0aW5ncygpLnNldFN0b3JhZ2VCbG9j
a2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6QmxvY2tBbGxTdG9yYWdlKTsKICAgICBlbHNlCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIHJldHVybiB7IH07CiB9CiAKIEV4Y2VwdGlv
bk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKGJv
b2wgcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdzKCkuc2V0UHJl
ZmVyTUlNRVR5cGVGb3JJbWFnZXMocHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMpOwogICAgIHJldHVy
biB7IH07CiB9CkBAIC01MzEsNyArNTMxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxT
ZXR0aW5nczo6c2V0UHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoYm9vbCBwcmVmZXJNSU1FVHkKIEV4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEltYWdlc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldEltYWdlc0VuYWJsZWQoZW5hYmxlZCk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTUzOSw3ICs1MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbFNldHRpbmdzOjpzZXRJbWFnZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFBERkltYWdlQ2FjaGluZ1BvbGljeShj
b25zdCBTdHJpbmcmIHBvbGljeSkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHBvbGljeSwgImRpc2FibGVkIikpCiAgICAgICAgIHNldHRpbmdzKCkuc2V0UGRm
SW1hZ2VDYWNoaW5nUG9saWN5KFBERkltYWdlQ2FjaGluZ0Rpc2FibGVkKTsKICAgICBlbHNlIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb2xpY3ksICJiZWxvd21lbW9yeWxpbWl0
IikpCkBAIC01NDksMTQgKzU0OSwxNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRp
bmdzOjpzZXRQREZJbWFnZUNhY2hpbmdQb2xpY3koY29uc3QgU3RyaW5nJiBwb2xpYwogICAgIGVs
c2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBvbGljeSwgImVuYWJsZWQiKSkK
ICAgICAgICAgc2V0dGluZ3MoKS5zZXRQZGZJbWFnZUNhY2hpbmdQb2xpY3koUERGSW1hZ2VDYWNo
aW5nRW5hYmxlZCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFY
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCiB7CiAgICAgaWYg
KCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAg
IHNldHRpbmdzKCkuc2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyB7IGludGVydmFs
SW5TZWNvbmRzIH0pOwogICAgIHJldHVybiB7IH07CiB9CkBAIC01NjQsNyArNTY0LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwo
ZG91YmxlIGludGVydmFsSW5TZWMKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6
OnNldERlZmF1bHRWaWRlb1Bvc3RlclVSTChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBpZiAo
IW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAg
c2V0dGluZ3MoKS5zZXREZWZhdWx0VmlkZW9Qb3N0ZXJVUkwodXJsKTsKICAgICByZXR1cm4geyB9
OwogfQpAQCAtNTcyLDcgKzU3Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGlu
Z3M6OnNldERlZmF1bHRWaWRlb1Bvc3RlclVSTChjb25zdCBTdHJpbmcmIHVybCkKIEV4Y2VwdGlv
bk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEZvcmNlUGVuZGluZ1dlYkdMUG9saWN5KGJv
b2wgZm9yY2VkKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldEZvcmNlUGVuZGluZ1dlYkdMUG9s
aWN5KGZvcmNlZCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU4MCw3ICs1ODAsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRGb3JjZVBlbmRpbmdXZWJHTFBvbGlj
eShib29sIGZvcmNlZCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFRp
bWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzKGRvdWJsZSB0aW1lKQog
ewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKICAgICBzZXR0aW5ncygpLnNldFRpbWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9yZUhp
ZGluZ0NvbnRyb2xzKFNlY29uZHMgeyB0aW1lIH0pOwogICAgIHJldHVybiB7IH07CiB9CkBAIC01
ODgsNyArNTg4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VGlt
ZVdpdGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHIKIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsU2V0dGluZ3M6OnNldFVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVo
YXZpb3IoYm9vbCBlbmFibGVkKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldFVzZUxlZ2FjeUJh
Y2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IoZW5hYmxlZCk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KQEAgLTU5Niw3ICs1OTYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdz
OjpzZXRVc2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yKAogRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0QXV0b3Njcm9sbEZvckRyYWdBbmREcm9wRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdzKCkuc2V0QXV0b3Njcm9sbEZv
ckRyYWdBbmREcm9wRW5hYmxlZChlbmFibGVkKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNjA0
LDcgKzYwNCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEF1dG9z
Y3JvbGxGb3JEcmFnQW5kRHJvcEVuYWJsZWQoYm9vbCBlbmFiCiBFeGNlcHRpb25Pcjx2b2lkPiBJ
bnRlcm5hbFNldHRpbmdzOjpzZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoYm9vbCBw
cmVmZXJQaWN0b2dyYXBocykKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgc2V0dGluZ3MoKS5zZXRGb250RmFsbGJhY2tQ
cmVmZXJzUGljdG9ncmFwaHMocHJlZmVyUGljdG9ncmFwaHMpOwogICAgIHJldHVybiB7IH07CiB9
CkBAIC02MTIsNyArNjEyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6
c2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKGJvb2wgcHJlZmUKIEV4Y2VwdGlvbk9y
PHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFdlYkZvbnRzQWx3YXlzRmFsbEJhY2soYm9vbCBl
bmFibGUpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdzKCkuc2V0V2ViRm9udHNBbHdheXNGYWxsQmFjayhl
bmFibGUpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC02MjAsNyArNjIwLDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0V2ViRm9udHNBbHdheXNGYWxsQmFjayhib29s
IGVuYWJsZSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFtX3Bh
Z2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRp
bmdzKCkuc2V0UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkKGVuYWJsZWQpOwogICAg
IHJldHVybiB7IH07CiB9CkBAIC02MjgsNyArNjI4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50
ZXJuYWxTZXR0aW5nczo6c2V0UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkKGJvb2wg
ZW4KIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFlvdVR1YmVGbGFzaFBs
dWdpblJlcGxhY2VtZW50RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFtX3BhZ2Up
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdz
KCkuc2V0WW91VHViZUZsYXNoUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkKGVuYWJsZWQpOwogICAg
IHJldHVybiB7IH07CiB9CkBAIC02MzYsNyArNjM2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50
ZXJuYWxTZXR0aW5nczo6c2V0WW91VHViZUZsYXNoUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkKGJv
b2wKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEJhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlKGJvb2wgaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKQogewogICAgIGlm
ICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAg
ICBzZXR0aW5ncygpLnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGhhc0V4dGVu
ZGVkQmFja2dyb3VuZCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTY0NCw3ICs2NDQsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0
ZW5kQmV5b25kUGFnZShib29sIGhhcwogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5n
czo6c2V0U2hvdWxkQ29udmVydFBvc2l0aW9uU3R5bGVPbkNvcHkoYm9vbCBjb252ZXJ0KQogewog
ICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NF
U1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKICAgICBzZXR0aW5ncygpLnNldFNob3VsZENvbnZlcnRQb3NpdGlvblN0eWxlT25Db3B5KGNv
bnZlcnQpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC02NTIsNyArNjUyLDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkQ29udmVydFBvc2l0aW9uU3R5bGVP
bkNvcHkoYm9vbCBjb24KIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFNj
cm9sbGluZ1RyZWVJbmNsdWRlc0ZyYW1lcyhib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFtX3Bh
Z2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRp
bmdzKCkuc2V0U2Nyb2xsaW5nVHJlZUluY2x1ZGVzRnJhbWVzKGVuYWJsZWQpOwogICAgIHJldHVy
biB7IH07CiB9CkBAIC02NjAsNyArNjYwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxT
ZXR0aW5nczo6c2V0U2Nyb2xsaW5nVHJlZUluY2x1ZGVzRnJhbWVzKGJvb2wgZW5hYmxlZCkKIEV4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEFsbG93VW5jbGFtcGVkU2Nyb2xs
UG9zaXRpb24oYm9vbCBhbGxvd1VuY2xhbXBlZCkKIHsKICAgICBpZiAoIW1fcGFnZSB8fCAhbV9w
YWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNldEFsbG93c1Vu
Y2xhbXBlZFNjcm9sbFBvc2l0aW9uRm9yVGVzdGluZyhhbGxvd1VuY2xhbXBlZCk7CiAgICAgcmV0
dXJuIHsgfTsKQEAgLTY2OSw3ICs2NjksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNl
dHRpbmdzOjpzZXRBbGxvd1VuY2xhbXBlZFNjcm9sbFBvc2l0aW9uKGJvb2wgYWxsb3dVbgogRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0QWxsb3dzSW5saW5lTWVkaWFQbGF5
YmFjayhib29sIGFsbG93cykKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgc2V0dGluZ3MoKS5zZXRBbGxvd3NJbmxpbmVN
ZWRpYVBsYXliYWNrKGFsbG93cyk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTY3Nyw3ICs2Nzcs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRBbGxvd3NJbmxpbmVN
ZWRpYVBsYXliYWNrKGJvb2wgYWxsb3dzKQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0
aW5nczo6c2V0QWxsb3dzSW5saW5lTWVkaWFQbGF5YmFja0FmdGVyRnVsbHNjcmVlbihib29sIGFs
bG93cykKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAgICAgc2V0dGluZ3MoKS5zZXRBbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNr
QWZ0ZXJGdWxsc2NyZWVuKGFsbG93cyk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTY4NSw3ICs2
ODUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRBbGxvd3NJbmxp
bmVNZWRpYVBsYXliYWNrQWZ0ZXJGdWxsc2NyZWVuKAogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJu
YWxTZXR0aW5nczo6c2V0SW5saW5lTWVkaWFQbGF5YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHRy
aWJ1dGUoYm9vbCByZXF1aXJlcykKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgc2V0dGluZ3MoKS5zZXRJbmxpbmVNZWRp
YVBsYXliYWNrUmVxdWlyZXNQbGF5c0lubGluZUF0dHJpYnV0ZShyZXF1aXJlcyk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KQEAgLTY5Myw3ICs2OTMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bFNldHRpbmdzOjpzZXRJbmxpbmVNZWRpYVBsYXliYWNrUmVxdWlyZXNQbGF5c0lubGluZUF0dAog
RXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkTW9ja0JvbGRTeXN0
ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eShib29sIHJlcXVpcmVzKQogewogICAgIGlmICghbV9wYWdl
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBSZW5kZXJU
aGVtZTo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJp
bGl0eShyZXF1aXJlcyk7CiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5zZXRTaG91bGRNb2Nr
Qm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5KHJlcXVpcmVzKTsKICAgICByZXR1cm4geyB9
OwpAQCAtNzM0LDcgKzczNCw3IEBAIHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0V2ViR1BVRW5h
YmxlZChib29sIGVuYWJsZWQpCiBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsU2V0dGluZ3M6
OnVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3koKQogewogICAgIGlmICghbV9wYWdlKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBzd2l0Y2ggKHNldHRp
bmdzKCkudXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeSgpKSB7CiAgICAgY2FzZSBVc2VySW50
ZXJmYWNlRGlyZWN0aW9uUG9saWN5OjpDb250ZW50OgogICAgICAgICByZXR1cm4gU3RyaW5nIHsg
QVNDSUlMaXRlcmFsIHsgIkNvbnRlbnQiIH0gfTsKQEAgLTc0MiwxMyArNzQyLDEzIEBAIEV4Y2Vw
dGlvbk9yPFN0cmluZz4gSW50ZXJuYWxTZXR0aW5nczo6dXNlckludGVyZmFjZURpcmVjdGlvblBv
bGljeSgpCiAgICAgICAgIHJldHVybiBTdHJpbmcgeyBBU0NJSUxpdGVyYWwgeyAiVmlldyIgfSB9
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpz
ZXRVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5KQogewog
ICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NF
U1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocG9saWN5LCAiY29udGVu
dCIpKSB7CiAgICAgICAgIHNldHRpbmdzKCkuc2V0VXNlckludGVyZmFjZURpcmVjdGlvblBvbGlj
eShVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5OjpDb250ZW50KTsKICAgICAgICAgcmV0dXJu
IHsgfTsKQEAgLTc1NywxMyArNzU3LDEzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0
dGluZ3M6OnNldFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3koY29uc3QgU3RyaW5nCiAgICAg
ICAgIHNldHRpbmdzKCkuc2V0VXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeShVc2VySW50ZXJm
YWNlRGlyZWN0aW9uUG9saWN5OjpTeXN0ZW0pOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
LSAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogfQogCiBFeGNlcHRpb25PcjxTdHJp
bmc+IEludGVybmFsU2V0dGluZ3M6OnN5c3RlbUxheW91dERpcmVjdGlvbigpCiB7CiAgICAgaWYg
KCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAg
IHN3aXRjaCAoc2V0dGluZ3MoKS5zeXN0ZW1MYXlvdXREaXJlY3Rpb24oKSkgewogICAgIGNhc2Ug
TFRSOgogICAgICAgICByZXR1cm4gU3RyaW5nIHsgQVNDSUlMaXRlcmFsIHsgIkxUUiIgfSB9OwpA
QCAtNzcxLDEzICs3NzEsMTMgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbFNldHRpbmdz
OjpzeXN0ZW1MYXlvdXREaXJlY3Rpb24oKQogICAgICAgICByZXR1cm4gU3RyaW5nIHsgQVNDSUlM
aXRlcmFsIHsgIlJUTCIgfSB9OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJ
bnRlcm5hbFNldHRpbmdzOjpzZXRTeXN0ZW1MYXlvdXREaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBk
aXJlY3Rpb24pCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRBY2Nlc3NFcnJvciB9OwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShk
aXJlY3Rpb24sICJsdHIiKSkgewogICAgICAgICBzZXR0aW5ncygpLnNldFN5c3RlbUxheW91dERp
cmVjdGlvbihMVFIpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNzg2LDcgKzc4Niw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFN5c3RlbUxheW91dERpcmVjdGlv
bihjb25zdCBTdHJpbmcmIGRpcmVjCiAgICAgICAgIHNldHRpbmdzKCkuc2V0U3lzdGVtTGF5b3V0
RGlyZWN0aW9uKFJUTCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQotICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiB9CiAKIHN0YXRpYyBGcmFtZUZsYXR0ZW5pbmcgaW50ZXJu
YWxTZXR0aW5nc1RvV2ViQ29yZVZhbHVlKEludGVybmFsU2V0dGluZ3M6OkZyYW1lRmxhdHRlbmlu
Z1ZhbHVlIHZhbHVlKQpAQCAtODA3LDcgKzgwNyw3IEBAIHN0YXRpYyBGcmFtZUZsYXR0ZW5pbmcg
aW50ZXJuYWxTZXR0aW5nc1RvV2ViQ29yZVZhbHVlKEludGVybmFsU2V0dGluZ3M6OkZyYW1lRmxh
CiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRGcmFtZUZsYXR0ZW5pbmco
Y29uc3QgRnJhbWVGbGF0dGVuaW5nVmFsdWUmIGZyYW1lRmxhdHRlbmluZykKIHsKICAgICBpZiAo
IW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAg
c2V0dGluZ3MoKS5zZXRGcmFtZUZsYXR0ZW5pbmcoaW50ZXJuYWxTZXR0aW5nc1RvV2ViQ29yZVZh
bHVlKGZyYW1lRmxhdHRlbmluZykpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC04MjMsMTQgKzgy
MywxNCBAQCB2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
KGJvb2wgYWxsb3dzQW55Q2VydGlmaWNhdGUpCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbFNl
dHRpbmdzOjpkZWZlcnJlZENTU1BhcnNlckVuYWJsZWQoKQogewogICAgIGlmICghbV9wYWdlKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICByZXR1cm4gc2V0
dGluZ3MoKS5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQoKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9p
ZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0RGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKGJvb2wgZW5h
YmxlZCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAgICAgc2V0dGluZ3MoKS5zZXREZWZlcnJlZENTU1BhcnNlckVuYWJsZWQo
ZW5hYmxlZCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTg0Miw3ICs4NDIsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTaG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25D
YXRlZ29yeShib29sIHNobwogICAgIHJldHVybiB7IH07CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShzaG91bGQpOwotICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsK
KyAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAjZW5kaWYKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDAxMDY0ZmFhNGU3MTg2YjE2
Yjg5ZmUyNTkxNThlZjIxNjA0ZWU4ZjMuLjk0OTZiMjlmNTZkZTMyNmQ2MGNlZTRhN2NhMjg5NmQ4
Yjc0NzgzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTU0MCwxMCAr
NTQwLDEwIEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6YXJlU1ZHQW5pbWF0aW9uc1Bh
dXNlZCgpIGNvbnN0CiB7CiAgICAgYXV0byogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIk5vIGNvbnRleHQgZG9jdW1lbnQiKSB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIk5v
IGNvbnRleHQgZG9jdW1lbnQiKSB9OwogCiAgICAgaWYgKCFkb2N1bWVudC0+c3ZnRXh0ZW5zaW9u
cygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiwgQVNDSUlMaXRl
cmFsKCJObyBTVkcgYW5pbWF0aW9ucyIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b3RGb3VuZEVycm9yLCBBU0NJSUxpdGVyYWwoIk5vIFNWRyBhbmltYXRpb25zIikgfTsKIAogICAg
IHJldHVybiBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFyZUFuaW1hdGlvbnNQYXVz
ZWQoKTsKIH0KQEAgLTY4Miw3ICs2ODIsNyBAQCB2b2lkIEludGVybmFsczo6c2V0T3ZlcnJpZGVD
YWNoZVBvbGljeShDYWNoZVBvbGljeSBwb2xpY3kpCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bHM6OnNldENhblNob3dNb2RhbERpYWxvZ092ZXJyaWRlKGJvb2wgYWxsb3cpCiB7CiAgICAgaWYg
KCFjb250ZXh0RG9jdW1lbnQoKSB8fCAhY29udGV4dERvY3VtZW50KCktPmRvbVdpbmRvdygpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGNvbnRleHRE
b2N1bWVudCgpLT5kb21XaW5kb3coKS0+c2V0Q2FuU2hvd01vZGFsRGlhbG9nT3ZlcnJpZGUoYWxs
b3cpOwogICAgIHJldHVybiB7IH07CkBAIC04NjYsNyArODY2LDcgQEAgTm9kZSogSW50ZXJuYWxz
OjpwYXJlbnRUcmVlU2NvcGUoTm9kZSYgbm9kZSkKIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRl
cm5hbHM6Omxhc3RTcGF0aWFsTmF2aWdhdGlvbkNhbmRpZGF0ZUNvdW50KCkgY29uc3QKIHsKICAg
ICBpZiAoIWNvbnRleHREb2N1bWVudCgpIHx8ICFjb250ZXh0RG9jdW1lbnQoKS0+cGFnZSgpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBj
b250ZXh0RG9jdW1lbnQoKS0+cGFnZSgpLT5sYXN0U3BhdGlhbE5hdmlnYXRpb25DYW5kaWRhdGVD
b3VudCgpOwogfQpAQCAtODgwLDcgKzg4MCw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFs
czo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAg
ICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5hbmltYXRpb24oKS5hbmltYXRpb25zQXJlU3Vz
cGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwogfQpAQCAtODk4LDcgKzg5OCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsczo6c3VzcGVuZEFuaW1hdGlvbnMoKSBjb25zdAogewogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNj
ZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT5mcmFtZSgpLT5hbmltYXRpb24oKS5zdXNwZW5k
QW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKIApAQCAtOTE0LDcgKzkxNCw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucygpIGNvbnN0CiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1
bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogCiAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmFuaW1hdGlvbigpLnJlc3Vt
ZUFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7CiAKQEAgLTkyOSwyMSArOTI5LDIxIEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucygpIGNvbnN0CiBF
eGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYg
ZWxlbWVudCkKIHsKICAgICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBh
dXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVyZXIoKSwgQXRvbWljU3RyaW5nKGFuaW1h
dGlvbk5hbWUpLCBwYXVzZVRpbWUpOwogfQogCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6
OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5n
JiBwc2V1ZG9JZCkKIHsKICAgICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBpZiAocHNldWRvSWQgIT0gImJlZm9yZSIg
JiYgcHNldWRvSWQgIT0gImFmdGVyIikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CiAKICAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQg
PT0gImJlZm9yZSIgPyBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQuYWZ0
ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgaWYgKCFwc2V1ZG9FbGVtZW50KQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBmcmFtZSgpLT5hbmlt
YXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShwc2V1ZG9FbGVtZW50LT5yZW5kZXJlcigpLCBB
dG9taWNTdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7CiB9CkBAIC05NTEsMjEgKzk1
MSwyMSBAQCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
T25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgYQogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJu
YWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKHBh
dXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
ICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZWxl
bWVudC5yZW5kZXJlcigpLCBwcm9wZXJ0eU5hbWUsIHBhdXNlVGltZSk7CiB9CiAKIEV4Y2VwdGlv
bk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50
KGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1l
bnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCiB7CiAgICAgaWYgKHBhdXNlVGltZSA8IDApCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgaWYgKHBzZXVk
b0lkICE9ICJiZWZvcmUiICYmIHBzZXVkb0lkICE9ICJhZnRlciIpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxl
bWVudCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50
KCkgOiBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAgIGlmICghcHNldWRvRWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1
cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKHBzZXVkb0VsZW1l
bnQtPnJlbmRlcmVyKCksIHByb3BlcnR5LCBwYXVzZVRpbWUpOwogfQpAQCAtOTc2LDcgKzk3Niw3
IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjplbGVtZW50UmVuZGVyVHJlZUFzVGV4
dChFbGVtZW50JiBlbGVtZW50KQogCiAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uID0gZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbigmZWxlbWVudCk7CiAgICAgaWYgKHJlcHJlc2VudGF0aW9uLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBy
ZXR1cm4gV1RGTW92ZShyZXByZXNlbnRhdGlvbik7CiB9CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBO
b2RlKiBJbnRlcm5hbHM6OnNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCkKIEV4Y2VwdGlvbk9yPFN0
cmluZz4gSW50ZXJuYWxzOjpzaGFkb3dSb290VHlwZShjb25zdCBOb2RlJiByb290KSBjb25zdAog
ewogICAgIGlmICghaXM8U2hhZG93Um9vdD4ocm9vdCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgc3dpdGNoIChkb3duY2FzdDxTaGFkb3dSb290Pihy
b290KS5tb2RlKCkpIHsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQ6CkBAIC0x
MTI5LDcgKzExMjksNyBAQCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OmlzVGltZXJUaHJv
dHRsZWQoaW50IHRpbWVvdXRJZCkKIHsKICAgICBhdXRvKiB0aW1lciA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZmluZFRpbWVvdXQodGltZW91dElkKTsKICAgICBpZiAoIXRpbWVyKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAgaWYgKHRpbWVyLT5pbnRlcnZhbENs
YW1wZWRUb01pbmltdW0oKSA+IHRpbWVyLT5tX29yaWdpbmFsSW50ZXJ2YWwpCiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMTIzMCwxMCArMTIzMCwxMCBAQCBFeGNlcHRpb25PcjxWZWN0b3I8U3Ry
aW5nPj4gSW50ZXJuYWxzOjpmb3JtQ29udHJvbFN0YXRlT2ZQcmV2aW91c0hpc3RvcnlJdGVtKCkK
IHsKICAgICBIaXN0b3J5SXRlbSogbWFpbkl0ZW0gPSBmcmFtZSgpLT5sb2FkZXIoKS5oaXN0b3J5
KCkucHJldmlvdXNJdGVtKCk7CiAgICAgaWYgKCFtYWluSXRlbSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgU3RyaW5nIHVuaXF1ZU5hbWUgPSBmcmFtZSgp
LT50cmVlKCkudW5pcXVlTmFtZSgpOwogICAgIGlmIChtYWluSXRlbS0+dGFyZ2V0KCkgIT0gdW5p
cXVlTmFtZSAmJiAhbWFpbkl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQodW5pcXVlTmFtZSkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHJldHVybiBWZWN0
b3I8U3RyaW5nPiB7IG1haW5JdGVtLT50YXJnZXQoKSA9PSB1bmlxdWVOYW1lID8gbWFpbkl0ZW0t
PmRvY3VtZW50U3RhdGUoKSA6IG1haW5JdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KHVuaXF1ZU5h
bWUpLT5kb2N1bWVudFN0YXRlKCkgfTsKIH0KIApAQCAtMTI0MSwxNCArMTI0MSwxNCBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldEZvcm1Db250cm9sU3RhdGVPZlByZXZpb3VzSGlz
dG9yeUl0ZW0oY29uc3QgVmVjdAogewogICAgIEhpc3RvcnlJdGVtKiBtYWluSXRlbSA9IGZyYW1l
KCktPmxvYWRlcigpLmhpc3RvcnkoKS5wcmV2aW91c0l0ZW0oKTsKICAgICBpZiAoIW1haW5JdGVt
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBTdHJpbmcg
dW5pcXVlTmFtZSA9IGZyYW1lKCktPnRyZWUoKS51bmlxdWVOYW1lKCk7CiAgICAgaWYgKG1haW5J
dGVtLT50YXJnZXQoKSA9PSB1bmlxdWVOYW1lKQogICAgICAgICBtYWluSXRlbS0+c2V0RG9jdW1l
bnRTdGF0ZShzdGF0ZSk7CiAgICAgZWxzZSBpZiAoSGlzdG9yeUl0ZW0qIHN1Ykl0ZW0gPSBtYWlu
SXRlbS0+Y2hpbGRJdGVtV2l0aFRhcmdldCh1bmlxdWVOYW1lKSkKICAgICAgICAgc3ViSXRlbS0+
c2V0RG9jdW1lbnRTdGF0ZShzdGF0ZSk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzU0LDcgKzEz
NTQsNyBAQCBFeGNlcHRpb25PcjxSZWY8RE9NUmVjdD4+IEludGVybmFsczo6YWJzb2x1dGVDYXJl
dEJvdW5kcygpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7
CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIERPTVJlY3Q6OmNyZWF0
ZShkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpKTsK
IH0KQEAgLTEzNzIsNyArMTM3Miw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxET01SZWN0TGlzdD4+IElu
dGVybmFsczo6aW5zcGVjdG9ySGlnaGxpZ2h0UmVjdHMoKQogewogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAg
ICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKICAgICBkb2N1bWVudC0+cGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuZ2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6Q29v
cmRpbmF0ZVN5c3RlbTo6Vmlldyk7CkBAIC0xMzgzLDcgKzEzODMsNyBAQCBFeGNlcHRpb25PcjxT
dHJpbmc+IEludGVybmFsczo6aW5zcGVjdG9ySGlnaGxpZ2h0T2JqZWN0KCkKIHsKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8
ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCkuYnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGVzKCktPnRvSlNPTlN0cmluZygpOwogfQpA
QCAtMTM5Miw3ICsxMzkyLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6bWFy
a2VyQ291bnRGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYgbWEKIHsKICAgICBPcHRp
b25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzOwogICAgIGlmICgh
bWFya2VyVHlwZXNGcm9tKG1hcmtlclR5cGUsIG1hcmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5
bnRheEVycm9yIH07CiAKICAgICBub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCkudXBk
YXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogICAgIHJldHVybiBub2RlLmRvY3VtZW50KCku
bWFya2VycygpLm1hcmtlcnNGb3IoJm5vZGUsIG1hcmtlclR5cGVzKS5zaXplKCk7CkBAIC0xNDA0
LDcgKzE0MDQsNyBAQCBFeGNlcHRpb25PcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gSW50ZXJu
YWxzOjptYXJrZXJBdChOb2RlJiBub2RlLCBjb25zdCBTdHJpbgogCiAgICAgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlczsKICAgICBpZiAoIW1hcmtlclR5
cGVzRnJvbShtYXJrZXJUeXBlLCBtYXJrZXJUeXBlcykpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwogCiAgICAgbm9kZS5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLnVwZGF0ZUVkaXRv
clVJTm93SWZTY2hlZHVsZWQoKTsKIApAQCAtMTQ0MCw3ICsxNDQwLDcgQEAgRXhjZXB0aW9uT3I8
U3RyaW5nPiBJbnRlcm5hbHM6OmR1bXBNYXJrZXJSZWN0cyhjb25zdCBTdHJpbmcmIG1hcmtlclR5
cGVTdHJpbmcpCiB7CiAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZTsK
ICAgICBpZiAoIW1hcmtlclR5cGVGcm9tKG1hcmtlclR5cGVTdHJpbmcsIG1hcmtlclR5cGUpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGNvbnRleHREb2N1bWVudCgpLT5tYXJr
ZXJzKCkudXBkYXRlUmVjdHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUobWFya2VyVHlwZSk7
CiAgICAgYXV0byByZWN0cyA9IGNvbnRleHREb2N1bWVudCgpLT5tYXJrZXJzKCkucmVuZGVyZWRS
ZWN0c0Zvck1hcmtlcnMobWFya2VyVHlwZSk7CkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQo
Ym9vbCBmbGFnKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRp
dG9yKCkuc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChmbGFnKTsKICAgICByZXR1
cm4geyB9OwogfQpAQCAtMTQ5MCwxMCArMTQ5MCwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbHM6OnNldExvd1Bvd2VyTW9kZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCiB7CiAgICAgYXV0
byogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBhdXRvKiBwYWdlID0g
ZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcGFnZS0+c2V0TG93UG93ZXJNb2RlRW5hYmxlZE92
ZXJyaWRlRm9yVGVzdGluZyhpc0VuYWJsZWQpOwogICAgIHJldHVybiB7IH07CkBAIC0xNTAzLDcg
KzE1MDMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldFNjcm9sbFZpZXdQb3Np
dGlvbihpbnQgeCwgaW50IHkpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERv
Y3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBhdXRvJiBmcmFtZVZp
ZXcgPSAqZG9jdW1lbnQtPnZpZXcoKTsKICAgICBib29sIGNvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlT2xkVmFsdWUgPSBmcmFtZVZpZXcuY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoKTsKQEAgLTE1MjIsNyArMTUyMiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxET01SZWN0Pj4g
SW50ZXJuYWxzOjpsYXlvdXRWaWV3cG9ydFJlY3QoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5m
cmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAg
IGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAt
MTUzNCw3ICsxNTM0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERPTVJlY3Q+PiBJbnRlcm5hbHM6OnZp
c3VhbFZpZXdwb3J0UmVjdCgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERv
Y3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgZG9jdW1lbnQtPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0xNTQ2LDcgKzE1NDYs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldFZpZXdCYXNlQmFja2dyb3VuZENv
bG9yKGNvbnN0IFN0cmluZyYgY29sb3JWYWx1ZQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52aWV3
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgZG9j
dW1lbnQtPnZpZXcoKS0+c2V0QmFzZUJhY2tncm91bmRDb2xvcihDb2xvcihjb2xvclZhbHVlKSk7
CiAgICAgcmV0dXJuIHsgfTsKQEAgLTE1NTYsNyArMTU1Niw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsczo6c2V0UGFnaW5hdGlvbihjb25zdCBTdHJpbmcmIG1vZGUsIGludCBnYXAsIGlu
dCBwYWdlCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAg
ICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBQYWdpbmF0aW9uIHBhZ2luYXRpb247CiAg
ICAgaWYgKG1vZGUgPT0gIlVucGFnaW5hdGVkIikKQEAgLTE1NzAsNyArMTU3MCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0UGFnaW5hdGlvbihjb25zdCBTdHJpbmcmIG1vZGUs
IGludCBnYXAsIGludCBwYWdlCiAgICAgZWxzZSBpZiAobW9kZSA9PSAiQm90dG9tVG9Ub3BQYWdp
bmF0ZWQiKQogICAgICAgICBwYWdpbmF0aW9uLm1vZGUgPSBQYWdpbmF0aW9uOjpCb3R0b21Ub1Rv
cFBhZ2luYXRlZDsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAg
cGFnaW5hdGlvbi5nYXAgPSBnYXA7CiAgICAgcGFnaW5hdGlvbi5wYWdlTGVuZ3RoID0gcGFnZUxl
bmd0aDsKQEAgLTE1ODMsNyArMTU4Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6
c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAh
ZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUND
RVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CiAgICAgZG9jdW1lbnQtPnBhZ2UoKS0+c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChl
bmFibGVkKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTU5Miw3ICsxNTkyLDcgQEAgRXhjZXB0
aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChmbG9hdCBk
ZXZpY2VQaXhlbFJhdGlvLAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1
bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgY29uc3QgaW50IGRlZmF1
bHRMYXlvdXRXaWR0aEZvck5vbk1vYmlsZVBhZ2VzID0gOTgwOwogCkBAIC0xNjEyLDcgKzE2MTIs
NyBAQCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6Ondhc0xhc3RDaGFuZ2VVc2VyRWRpdChF
bGVtZW50JiB0ZXh0RmllbGQpCiAgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHRleHRG
aWVsZCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Pih0ZXh0
RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfTk9ERV9UWVBFX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
Tm9kZVR5cGVFcnJvciB9OwogfQogCiBib29sIEludGVybmFsczo6ZWxlbWVudFNob3VsZEF1dG9D
b21wbGV0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQpAQCAtMTY1Myw3ICsxNjUzLDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3JvbGxFbGVtZW50VG9SZWN0KEVsZW1lbnQm
IGVsZW1lbnQsIGludCB4LCBpbnQgeSwKIHsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGVs
ZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIGZyYW1lVmlldy0+c2Nyb2xsRWxl
bWVudFRvUmVjdChlbGVtZW50LCB7IHgsIHksIHcsIGggfSk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
QEAgLTE2NjEsNyArMTY2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2Nyb2xs
RWxlbWVudFRvUmVjdChFbGVtZW50JiBlbGVtZW50LCBpbnQgeCwgaW50IHksCiBFeGNlcHRpb25P
cjxTdHJpbmc+IEludGVybmFsczo6YXV0b2ZpbGxGaWVsZE5hbWUoRWxlbWVudCYgZWxlbWVudCkK
IHsKICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9OT0RFX1RZUEVfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCiAgICAgcmV0dXJuIFN0
cmluZyB7IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpLmF1dG9maWxs
RGF0YSgpLmZpZWxkTmFtZSB9OwogfQpAQCAtMTY3MCw3ICsxNjcwLDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSW50ZXJuYWxzOjpwYWludENvbnRyb2xUaW50cygpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1l
bnQtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
ICAgICBkb2N1bWVudC0+dmlldygpLT5wYWludENvbnRyb2xUaW50cygpOwogICAgIHJldHVybiB7
IH07CkBAIC0xNzE3LDcgKzE3MTcsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8UmFuZ2U+PiBJbnRl
cm5hbHM6OnJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oaW50IHgsCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIGF1dG8qIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAg
aWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0xNzI3LDcgKzE3MjcsNyBAQCBFeGNlcHRpb25P
cjxSZWZQdHI8UmFuZ2U+PiBJbnRlcm5hbHM6OnJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEF0TG9j
YXRpb24oaW50IHgsCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh4KTsKICAgICBVTlVTRURfUEFS
QU0oeSk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICNlbmRpZgogfQogCkBA
IC0xNzM2LDcgKzE3MzYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldERlbGVn
YXRlc1Njcm9sbGluZyhib29sIGVuYWJsZWQpCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29u
dGV4dERvY3VtZW50KCk7CiAgICAgLy8gRGVsZWdhdGUgc2Nyb2xsaW5nIGlzIHZhbGlkIG9ubHkg
b24gbWFpbmZyYW1lJ3Mgdmlldy4KICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmll
dygpIHx8ICFkb2N1bWVudC0+cGFnZSgpIHx8ICZkb2N1bWVudC0+cGFnZSgpLT5tYWluRnJhbWUo
KSAhPSBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CiAKICAgICBkb2N1bWVudC0+dmlldygpLT5zZXREZWxlZ2F0ZXNTY3JvbGxpbmco
ZW5hYmxlZCk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTE3NDYsNyArMTc0Niw3IEBAIEV4Y2VwdGlv
bk9yPGludD4gSW50ZXJuYWxzOjpsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5jZSgpCiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1
bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS5z
cGVsbENoZWNrZXIoKS5sYXN0UmVxdWVzdFNlcXVlbmNlKCk7CiB9CkBAIC0xNzU1LDcgKzE3NTUs
NyBAQCBFeGNlcHRpb25PcjxpbnQ+IEludGVybmFsczo6bGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRT
ZXF1ZW5jZSgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7
CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvY3VtZW50LT5mcmFt
ZSgpLT5lZGl0b3IoKS5zcGVsbENoZWNrZXIoKS5sYXN0UHJvY2Vzc2VkU2VxdWVuY2UoKTsKIH0K
QEAgLTE3OTgsNyArMTc5OCw3IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6Ondo
ZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRl
eHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvY3VtZW50LT53aGVlbEV2ZW50SGFu
ZGxlckNvdW50KCk7CiB9CkBAIC0xODA3LDcgKzE4MDcsNyBAQCBFeGNlcHRpb25Pcjx1bnNpZ25l
ZD4gSW50ZXJuYWxzOjp0b3VjaEV2ZW50SGFuZGxlckNvdW50KCkKIHsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBkb2N1bWVu
dC0+dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpOwogfQpAQCAtMTgxNiw3ICsxODE2LDcgQEAgRXhj
ZXB0aW9uT3I8UmVmPERPTVJlY3RMaXN0Pj4gSW50ZXJuYWxzOjp0b3VjaEV2ZW50UmVjdHNGb3JF
dmVudChjb25zdCBTdHJpbmcmIGUKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0
RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBkb2N1
bWVudC0+cGFnZSgpLT50b3VjaEV2ZW50UmVjdHNGb3JFdmVudChldmVudE5hbWUpOwogfQpAQCAt
MTgyNSw3ICsxODI1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERPTVJlY3RMaXN0Pj4gSW50ZXJuYWxz
OjpwYXNzaXZlVG91Y2hFdmVudExpc3RlbmVyUmVjdHMoKQogewogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAg
ICAgcmV0dXJuIGRvY3VtZW50LT5wYWdlKCktPnBhc3NpdmVUb3VjaEV2ZW50TGlzdGVuZXJSZWN0
cygpOwogfQpAQCAtMTgzNyw3ICsxODM3LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERPTVJlY3RMaXN0
Pj4gSW50ZXJuYWxzOjpwYXNzaXZlVG91Y2hFdmVudExpc3RlbmVyUmVjdHMoKQogRXhjZXB0aW9u
T3I8UmVmUHRyPE5vZGVMaXN0Pj4gSW50ZXJuYWxzOjpub2Rlc0Zyb21SZWN0KERvY3VtZW50JiBk
b2N1bWVudCwgaW50IGNlbnRlclgsIGludCBjZW50ZXJZLCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1
bnNpZ25lZCByaWdodFBhZGRpbmcsIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxl
ZnRQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93VXNlckFnZW50U2hhZG93
Q29udGVudCwgYm9vbCBhbGxvd0NoaWxkRnJhbWVDb250ZW50KSBjb25zdAogewogICAgIGlmICgh
ZG9jdW1lbnQuZnJhbWUoKSB8fCAhZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50LmZyYW1lKCk7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1bWVudC52aWV3
KCk7CkBAIC0xOTY3LDcgKzE5NjcsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNl
dERldmljZVByb3hpbWl0eShjb25zdCBTdHJpbmcmLCBkb3VibGUgdmFsdWUsIGRvdQogewogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAjaWYgRU5BQkxFKFBST1hJTUlUWV9FVkVOVFMpCiAgICAgRGV2aWNlUHJv
eGltaXR5Q29udHJvbGxlcjo6ZnJvbShkb2N1bWVudC0+cGFnZSgpKS0+ZGlkQ2hhbmdlRGV2aWNl
UHJveGltaXR5KHZhbHVlLCBtaW4sIG1heCk7CkBAIC0yMTQxLDcgKzIxNDEsNyBAQCBzdGF0aWMg
RXhjZXB0aW9uT3I8RmluZE9wdGlvbnM+IHBhcnNlRmluZE9wdGlvbnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIG9wdGlvbkxpcwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICgh
Zm91bmQpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAg
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkBAIC0yMTUwLDcgKzIxNTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
UmFuZ2U+PiBJbnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQ
dHI8UgogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAg
IGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGF1dG8gcGFyc2VkT3B0aW9ucyA9IHBhcnNl
RmluZE9wdGlvbnMoZmluZE9wdGlvbnMpOwogICAgIGlmIChwYXJzZWRPcHRpb25zLmhhc0V4Y2Vw
dGlvbigpKQpAQCAtMjE2Myw3ICsyMTYzLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVy
bmFsczo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFYKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRv
Y3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKICAgICBhdXRvIHBhcnNlZE9wdGlvbnMgPSBwYXJzZUZpbmRPcHRp
b25zKGZpbmRPcHRpb25zKTsKICAgICBpZiAocGFyc2VkT3B0aW9ucy5oYXNFeGNlcHRpb24oKSkK
QEAgLTIxNzcsNyArMjE3Nyw3IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6OmNv
dW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0CiB7CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CiAKICAgICBhdXRvIHBhcnNlZE9wdGlvbnMgPSBwYXJzZUZpbmRPcHRpb25zKGZpbmRP
cHRpb25zKTsKICAgICBpZiAocGFyc2VkT3B0aW9ucy5oYXNFeGNlcHRpb24oKSkKQEAgLTIyMjIs
NyArMjIyMiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0SW5zcGVjdG9ySXNV
bmRlclRlc3QoYm9vbCBpc1VuZGVyVGVzdCkKIHsKICAgICBQYWdlKiBwYWdlID0gY29udGV4dERv
Y3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLnNldElzVW5kZXJUZXN0KGlzVW5kZXJUZXN0KTsKICAgICByZXR1cm4geyB9OwpAQCAt
MjI2MCw3ICsyMjYwLDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjppc1BhZ2VCb3hW
aXNpYmxlKGludCBwYWdlTnVtYmVyKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRl
eHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvY3VtZW50LT5pc1BhZ2VCb3hWaXNp
YmxlKHBhZ2VOdW1iZXIpOwogfQpAQCAtMjI5Myw3ICsyMjkzLDcgQEAgc3RhdGljIExheWVyVHJl
ZUZsYWdzIHRvTGF5ZXJUcmVlRmxhZ3ModW5zaWduZWQgc2hvcnQgZmxhZ3MpCiBFeGNlcHRpb25P
cjxTdHJpbmc+IEludGVybmFsczo6bGF5ZXJUcmVlQXNUZXh0KERvY3VtZW50JiBkb2N1bWVudCwg
dW5zaWduZWQgc2hvcnQgZmxhZ3MpIGNvbnN0CiB7CiAgICAgaWYgKCFkb2N1bWVudC5mcmFtZSgp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVy
biBkb2N1bWVudC5mcmFtZSgpLT5sYXllclRyZWVBc1RleHQodG9MYXllclRyZWVGbGFncyhmbGFn
cykpOwogfQpAQCAtMjMwMiwxNCArMjMwMiwxNCBAQCBFeGNlcHRpb25Pcjx1aW50NjRfdD4gSW50
ZXJuYWxzOjpsYXllcklERm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwg
IWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKIAogICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpIHx8ICFlbGVtZW50LnJlbmRlcmVy
KCktPmhhc0xheWVyKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAKICAgICBh
dXRvJiBsYXllck1vZGVsT2JqZWN0ID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
KmVsZW1lbnQucmVuZGVyZXIoKSk7CiAgICAgaWYgKCFsYXllck1vZGVsT2JqZWN0LmxheWVyKCkt
PmlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAg
YXV0byogYmFja2luZyA9IGxheWVyTW9kZWxPYmplY3QubGF5ZXIoKS0+YmFja2luZygpOwogICAg
IHJldHVybiBiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnByaW1hcnlMYXllcklEKCk7CkBAIC0y
MzE5LDcgKzIzMTksNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6cmVwYWludFJl
Y3RzQXNUZXh0KCkgY29uc3QKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9j
dW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gZG9jdW1l
bnQtPmZyYW1lKCktPnRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHQoKTsKIH0KQEAgLTIzMjgsNyAr
MjMyOCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpzY3JvbGxpbmdTdGF0ZVRy
ZWVBc1RleHQoKSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1
bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudC0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKQEAgLTIzNDEsNyArMjM0MSw3IEBAIEV4
Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjptYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucygp
IGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAg
ICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LT5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMjM1NCw3ICsyMzU0LDcgQEAgRXhjZXB0aW9uT3I8
UmVmPERPTVJlY3RMaXN0Pj4gSW50ZXJuYWxzOjpub25GYXN0U2Nyb2xsYWJsZVJlY3RzKCkgY29u
c3QKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBp
ZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UpCkBAIC0yMzY3LDEwICsyMzY3LDEwIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IEludGVybmFsczo6c2V0RWxlbWVudFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoRWxlbWVudCYg
ZWxlbWVudCwKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGlmICghZWxlbWVudC5yZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAg
IGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkpIHsKICAgICAgICAgZG93bmNhc3Q8
SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyk7CkBAIC0yMzc4LDExICsyMzc4LDExIEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IEludGVybmFsczo6c2V0RWxlbWVudFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoRWxlbWVu
dCYgZWxlbWVudCwKICAgICB9CiAKICAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKS0+aGFzTGF5
ZXIoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihlbGVt
ZW50LnJlbmRlcmVyKCkpLT5sYXllcigpOwogICAgIGlmICghbGF5ZXItPmlzQ29tcG9zaXRlZCgp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGxheWVy
LT5iYWNraW5nKCktPnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodXNlc0Rpc3BsYXlMaXN0RHJh
d2luZyk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTIzOTIsMTAgKzIzOTIsMTAgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRFbGVtZW50VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoRWxl
bWVudCYgZWxlbWVudCwKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1l
bnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGlmICghZWxlbWVu
dC5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
IAogICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkpIHsKICAgICAgICAgZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KGlzVHJhY2tpbmdSZXBsYXkpOwpAQCAtMjQwMywxMSArMjQwMywxMSBAQCBFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbHM6OnNldEVsZW1lbnRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShFbGVt
ZW50JiBlbGVtZW50LAogICAgIH0KIAogICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpLT5oYXNM
YXllcigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAg
IFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGVs
ZW1lbnQucmVuZGVyZXIoKSktPmxheWVyKCk7CiAgICAgaWYgKCFsYXllci0+aXNDb21wb3NpdGVk
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgbGF5
ZXItPmJhY2tpbmcoKS0+c2V0SXNUcmFja2luZ0Rpc3BsYXlMaXN0UmVwbGF5KGlzVHJhY2tpbmdS
ZXBsYXkpOwogICAgIHJldHVybiB7IH07CkBAIC0yNDE3LDEwICsyNDE3LDEwIEBAIEV4Y2VwdGlv
bk9yPFN0cmluZz4gSW50ZXJuYWxzOjpkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYgZWxl
bWVudCwgdW5zaWduZWQKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1l
bnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGlmICghZWxlbWVu
dC5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
IAogICAgIERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBkaXNwbGF5TGlzdEZsYWdzID0gMDsKICAg
ICBpZiAoZmxhZ3MgJiBESVNQTEFZX0xJU1RfSU5DTFVERVNfUExBVEZPUk1fT1BFUkFUSU9OUykK
QEAgLTI0MzAsMTEgKzI0MzAsMTEgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmRp
c3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZAogICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpLmRpc3BsYXlMaXN0QXNU
ZXh0KGRpc3BsYXlMaXN0RmxhZ3MpOwogCiAgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCktPmhh
c0xheWVyKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAg
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
ZWxlbWVudC5yZW5kZXJlcigpKS0+bGF5ZXIoKTsKICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0
ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBy
ZXR1cm4gbGF5ZXItPmJhY2tpbmcoKS0+ZGlzcGxheUxpc3RBc1RleHQoZGlzcGxheUxpc3RGbGFn
cyk7CiB9CkBAIC0yNDQzLDEwICsyNDQzLDEwIEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJu
YWxzOjpyZXBsYXlEaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgdW5zCiB7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFk
b2N1bWVudCB8fCAhZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBEaXNwbGF5TGlz
dDo6QXNUZXh0RmxhZ3MgZGlzcGxheUxpc3RGbGFncyA9IDA7CiAgICAgaWYgKGZsYWdzICYgRElT
UExBWV9MSVNUX0lOQ0xVREVTX1BMQVRGT1JNX09QRVJBVElPTlMpCkBAIC0yNDU2LDExICsyNDU2
LDExIEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpyZXBsYXlEaXNwbGF5TGlzdEZv
ckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgdW5zCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQoZGlzcGxh
eUxpc3RGbGFncyk7CiAKICAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBSZW5kZXJM
YXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihlbGVtZW50LnJl
bmRlcmVyKCkpLT5sYXllcigpOwogICAgIGlmICghbGF5ZXItPmlzQ29tcG9zaXRlZCgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBsYXll
ci0+YmFja2luZygpLT5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChkaXNwbGF5TGlzdEZsYWdzKTsK
IH0KQEAgLTI0NjksNyArMjQ2OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6Z2Fy
YmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcygpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgZG9jdW1lbnQtPmNhY2hlZFJl
c291cmNlTG9hZGVyKCkuZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcygpOwogICAgIHJl
dHVybiB7IH07CiB9CkBAIC0yNDkzLDcgKzI0OTMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbHM6Omluc2VydEF1dGhvckNTUyhjb25zdCBTdHJpbmcmIGNzcykgY29uc3QKIHsKICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGF1dG8g
cGFyc2VkU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSgqZG9jdW1lbnQpOwogICAg
IHBhcnNlZFNoZWV0LmdldCgpLnNldElzVXNlclN0eWxlU2hlZXQoZmFsc2UpOwpAQCAtMjUwNiw3
ICsyNTA2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjppbnNlcnRVc2VyQ1NTKGNv
bnN0IFN0cmluZyYgY3NzKSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRl
eHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgYXV0byBwYXJzZWRTaGVldCA9IFN0eWxlU2hlZXRD
b250ZW50czo6Y3JlYXRlKCpkb2N1bWVudCk7CiAgICAgcGFyc2VkU2hlZXQuZ2V0KCkuc2V0SXNV
c2VyU3R5bGVTaGVldCh0cnVlKTsKQEAgLTI1NTIsNyArMjU1Miw3IEBAIGludCBJbnRlcm5hbHM6
Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQogRXhjZXB0
aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OnBhZ2VQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFmcmFtZSgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBQcmlu
dENvbnRleHQ6OnBhZ2VQcm9wZXJ0eShmcmFtZSgpLCBwcm9wZXJ0eU5hbWUudXRmOCgpLmRhdGEo
KSwgcGFnZU51bWJlcik7CiB9CkBAIC0yNTYwLDcgKzI1NjAsNyBAQCBFeGNlcHRpb25PcjxTdHJp
bmc+IEludGVybmFsczo6cGFnZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBp
bnQgcGFnZQogRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OnBhZ2VTaXplQW5kTWFyZ2lu
c0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJn
aW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQp
IGNvbnN0CiB7CiAgICAgaWYgKCFmcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VTaXplQW5kTWFy
Z2luc0luUGl4ZWxzKGZyYW1lKCksIHBhZ2VOdW1iZXIsIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRv
cCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCk7CiB9CkBAIC0yNTY5LDcg
KzI1NjksNyBAQCBFeGNlcHRpb25PcjxmbG9hdD4gSW50ZXJuYWxzOjpwYWdlU2NhbGVGYWN0b3Io
KSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwog
ICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvY3VtZW50LT5wYWdlKCkt
PnBhZ2VTY2FsZUZhY3RvcigpOwogfQpAQCAtMjU3OCw3ICsyNTc4LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSW50ZXJuYWxzOjpzZXRQYWdlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IsIGlu
dCB4LCBpbnQgeSkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQo
KTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT5wYWdlKCktPnNl
dFBhZ2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvciwgSW50UG9pbnQoeCwgeSkpOwogICAgIHJldHVy
biB7IH07CkBAIC0yNTg4LDcgKzI1ODgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6
OnNldFBhZ2Vab29tRmFjdG9yKGZsb2F0IHpvb21GYWN0b3IpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1l
bnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
CiAgICAgZG9jdW1lbnQtPmZyYW1lKCktPnNldFBhZ2Vab29tRmFjdG9yKHpvb21GYWN0b3IpOwog
ICAgIHJldHVybiB7IH07CkBAIC0yNTk4LDcgKzI1OTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJ
bnRlcm5hbHM6OnNldFRleHRab29tRmFjdG9yKGZsb2F0IHpvb21GYWN0b3IpCiB7CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElE
X0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NF
cnJvciB9OwogCiAgICAgZG9jdW1lbnQtPmZyYW1lKCktPnNldFRleHRab29tRmFjdG9yKHpvb21G
YWN0b3IpOwogICAgIHJldHVybiB7IH07CkBAIC0yNjA4LDcgKzI2MDgsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbHM6OnNldFVzZUZpeGVkTGF5b3V0KGJvb2wgdXNlRml4ZWRMYXlvdXQp
CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYg
KCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBkb2N1bWVudC0+dmlldygpLT5zZXRVc2VGaXhlZExh
eW91dCh1c2VGaXhlZExheW91dCk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTI2MTgsNyArMjYxOCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0Rml4ZWRMYXlvdXRTaXplKGludCB3
aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9j
dW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT52aWV3
KCktPnNldEZpeGVkTGF5b3V0U2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKICAgICByZXR1
cm4geyB9OwpAQCAtMjYyOCw3ICsyNjI4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxz
OjpzZXRWaWV3RXhwb3NlZFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGYKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRv
Y3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT52aWV3KCktPnNldFZpZXdFeHBvc2VkUmVj
dChGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgIHJldHVybiB7IH07CkBAIC0y
NzUxLDcgKzI3NTEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN0YXJ0VHJhY2tp
bmdSZXBhaW50cygpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50
KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBkb2N1bWVudC0+dmlldygpLT5z
ZXRUcmFja3NSZXBhaW50cyh0cnVlKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjc2MSw3ICsyNzYx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzdG9wVHJhY2tpbmdSZXBhaW50cygp
CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYg
KCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBkb2N1bWVudC0+dmlldygpLT5zZXRUcmFja3NSZXBh
aW50cyhmYWxzZSk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTI3NzEsNyArMjc3MSw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsczo6c3RhcnRUcmFja2luZ0xheWVyRmx1c2hlcygpCiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1
bWVudCB8fCAhZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5jb21wb3Np
dG9yKCkuc3RhcnRUcmFja2luZ0xheWVyRmx1c2hlcygpOwogICAgIHJldHVybiB7IH07CkBAIC0y
NzgxLDcgKzI3ODEsNyBAQCBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpsYXllckZs
dXNoQ291bnQoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5yZW5kZXJWaWV3KCkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvY3VtZW50
LT5yZW5kZXJWaWV3KCktPmNvbXBvc2l0b3IoKS5sYXllckZsdXNoQ291bnQoKTsKIH0KQEAgLTI3
OTAsNyArMjc5MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c3RhcnRUcmFja2lu
Z1N0eWxlUmVjYWxjcygpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3Vt
ZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAKICAgICBkb2N1bWVudC0+c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygp
OwogICAgIHJldHVybiB7IH07CkBAIC0yODAwLDcgKzI4MDAsNyBAQCBFeGNlcHRpb25Pcjx1bnNp
Z25lZD4gSW50ZXJuYWxzOjpzdHlsZVJlY2FsY0NvdW50KCkKIHsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+
c3R5bGVSZWNhbGNDb3VudCgpOwogfQpAQCAtMjgxNyw3ICsyODE3LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSW50ZXJuYWxzOjpzdGFydFRyYWNraW5nQ29tcG9zaXRpbmdVcGRhdGVzKCkKIHsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3Vt
ZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmNvbXBvc2l0
b3IoKS5zdGFydFRyYWNraW5nQ29tcG9zaXRpbmdVcGRhdGVzKCk7CiAgICAgcmV0dXJuIHsgfTsK
QEAgLTI4MjcsNyArMjgyNyw3IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6OmNv
bXBvc2l0aW5nVXBkYXRlQ291bnQoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRl
eHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5yZW5kZXJWaWV3
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0
dXJuIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmNvbXBvc2l0b3IoKS5jb21wb3NpdGluZ1VwZGF0
ZUNvdW50KCk7CiB9CkBAIC0yOTE1LDcgKzI5MTUsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IElu
dGVybmFsczo6Z2V0Q3VycmVudEN1cnNvckluZm8oKQogewogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5m
cmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogI2lm
ICFQTEFURk9STShJT1MpCiAgICAgQ3Vyc29yIGN1cnNvciA9IGRvY3VtZW50LT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS5jdXJyZW50TW91c2VDdXJzb3IoKTsKQEAgLTMwNzksNyArMzA3OSw3IEBA
IEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6bWVkaWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0
aWMoSFRNTE1lZGlhRWxlbWVudCYgZWxlCiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGNoYXJhY3RlcmlzdGljLCAibGVnaWJsZSIpKQogICAgICAgICByZXR1cm4gZWxlbWVu
dC5oYXNDbG9zZWRDYXB0aW9ucygpOwogCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9F
UlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIH0KIAogI2VuZGlm
CkBAIC0zMTAyLDcgKzMxMDIsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6Y2Fw
dGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
bnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQogICAgIHJldHVybiBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmNhcHRp
b25QcmVmZXJlbmNlcygpLmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCk7CkBAIC0zMTE1LDcg
KzMxMTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldENhcHRpb25zU3R5bGVT
aGVldE92ZXJyaWRlKGNvbnN0IFN0cmluZyYgb3ZlcnJpZAogewogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuY2Fw
dGlvblByZWZlcmVuY2VzKCkuc2V0Q2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUob3ZlcnJpZGUp
OwpAQCAtMzEyOSw3ICszMTI5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRQ
cmltYXJ5QXVkaW9UcmFja0xhbmd1YWdlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJgogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQg
fHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElE
X0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NF
cnJvciB9OwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGRvY3VtZW50LT5wYWdlKCkt
Pmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuc2V0UHJpbWFyeUF1ZGlvVHJhY2tMYW5ndWFn
ZU92ZXJyaWRlKGxhbmd1YWdlKTsKQEAgLTMxNDMsNyArMzE0Myw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IEludGVybmFsczo6c2V0Q2FwdGlvbkRpc3BsYXlNb2RlKGNvbnN0IFN0cmluZyYgbW9kZSkK
IHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBhdXRvJiBj
YXB0aW9uUHJlZmVyZW5jZXMgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVm
ZXJlbmNlcygpOwpAQCAtMzE1Nyw3ICszMTU3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJu
YWxzOjpzZXRDYXB0aW9uRGlzcGxheU1vZGUoY29uc3QgU3RyaW5nJiBtb2RlKQogICAgIGVsc2Ug
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1vZGUsICJtYW51YWwiKSkKICAgICAg
ICAgY2FwdGlvblByZWZlcmVuY2VzLnNldENhcHRpb25EaXNwbGF5TW9kZShDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzOjpNYW51YWwpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKICNlbmRpZgpAQCAtMzE4OCw3ICszMTg4
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERPTVJlY3Q+PiBJbnRlcm5hbHM6OnNlbGVjdGlvbkJvdW5k
cygpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAg
aWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIERPTVJlY3Q6OmNyZWF0ZShkb2N1
bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkpOwogfQpAQCAtMzE5
Nyw3ICszMTk3LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjppc1BsdWdpblVuYXZh
aWxhYmlsaXR5SW5kaWNhdG9yT2JzY3VyZWQoRWxlbWVudCYgZWwKIHsKICAgICBhdXRvKiByZW5k
ZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIWlzPEhUTUxQbHVnSW5FbGVtZW50
PihlbGVtZW50KSB8fCAhaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQpLmlzUmVwbGFjZW1lbnRPYnNjdXJlZCgpOwog
fQpAQCAtMzI1Miw3ICszMjUyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpiZWdp
bk1lZGlhU2Vzc2lvbkludGVycnVwdGlvbihjb25zdCBTdHJpbmcmIGludGVycnUKICAgICBlbHNl
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShpbnRlcnJ1cHRpb25TdHJpbmcsICJz
dXNwZW5kZWR1bmRlcmxvY2siKSkKICAgICAgICAgaW50ZXJydXB0aW9uID0gUGxhdGZvcm1NZWRp
YVNlc3Npb246OlN1c3BlbmRlZFVuZGVyTG9jazsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5h
Z2VyOjpzaGFyZWRNYW5hZ2VyKCkuYmVnaW5JbnRlcnJ1cHRpb24oaW50ZXJydXB0aW9uKTsKICAg
ICByZXR1cm4geyB9OwpAQCAtMzMwOCw3ICszMzA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50
ZXJuYWxzOjpzZXRNZWRpYVNlc3Npb25SZXN0cmljdGlvbnMoY29uc3QgU3RyaW5nJiBtZWRpYVR5
cGUKIHsKICAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1lZGlhVHlwZSA9IG1l
ZGlhVHlwZUZyb21TdHJpbmcobWVkaWFUeXBlU3RyaW5nKTsKICAgICBpZiAobWVkaWFUeXBlID09
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpOb25lKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKIAogICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6U2Vzc2lv
blJlc3RyaWN0aW9ucyByZXN0cmljdGlvbnMgPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6
OnNoYXJlZE1hbmFnZXIoKS5yZXN0cmljdGlvbnMobWVkaWFUeXBlKTsKICAgICBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVSZXN0cmljdGlvbihtZWRp
YVR5cGUsIHJlc3RyaWN0aW9ucyk7CkBAIC0zMzM3LDcgKzMzMzcsNyBAQCBFeGNlcHRpb25PcjxT
dHJpbmc+IEludGVybmFsczo6bWVkaWFTZXNzaW9uUmVzdHJpY3Rpb25zKGNvbnN0IFN0cmluZyYg
bWVkaWFUeXBlUwogewogICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgbWVkaWFU
eXBlID0gbWVkaWFUeXBlRnJvbVN0cmluZyhtZWRpYVR5cGVTdHJpbmcpOwogICAgIGlmIChtZWRp
YVR5cGUgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246Ok5vbmUpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2Vy
OjpTZXNzaW9uUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9ucyA9IFBsYXRmb3JtTWVkaWFTZXNzaW9u
TWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlc3RyaWN0aW9ucyhtZWRpYVR5cGUpOwogICAgIGlm
IChyZXN0cmljdGlvbnMgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpOb1Jlc3RyaWN0
aW9ucykKQEAgLTM0MjgsNyArMzQyOCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6
cG9zdFJlbW90ZUNvbnRyb2xDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZFN0cmluCiAgICAg
ZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29tbWFuZFN0cmluZywgInNl
ZWt0b3BsYXliYWNrcG9zaXRpb24iKSkKICAgICAgICAgY29tbWFuZCA9IFBsYXRmb3JtTWVkaWFT
ZXNzaW9uOjpTZWVrVG9QbGF5YmFja1Bvc2l0aW9uQ29tbWFuZDsKICAgICBlbHNlCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgUGxhdGZvcm1NZWRpYVNl
c3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21t
YW5kKGNvbW1hbmQsICZwYXJhbWV0ZXIpOwogICAgIHJldHVybiB7IH07CkBAIC0zNTQ5LDcgKzM1
NDksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldE1vY2tNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyU3RhdGUoY29uc3QgU3RyaW5nJgogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGRldmljZVN0YXRlLCAidW5rbm93biIpKQogICAgICAgICBzdGF0
ZSA9IE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpVbmtub3duOwogICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBwYWdlLT5zZXRNb2Nr
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlclN0YXRlKGRldmljZU5hbWUsIHN0YXRlKTsKICAgICBy
ZXR1cm4geyB9OwpAQCAtMzU2MSw3ICszNTYxLDcgQEAgRXhjZXB0aW9uT3I8UmVmPE1vY2tQYWdl
T3ZlcmxheT4+IEludGVybmFsczo6aW5zdGFsbE1vY2tQYWdlT3ZlcmxheShQYWdlT3ZlcmxheVQK
IHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gTW9ja1BhZ2VPdmVybGF5Q2xpZW50Ojpz
aW5nbGV0b24oKS5pbnN0YWxsT3ZlcmxheShkb2N1bWVudC0+ZnJhbWUoKS0+bWFpbkZyYW1lKCks
IHR5cGUgPT0gUGFnZU92ZXJsYXlUeXBlOjpWaWV3ID8gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBl
OjpWaWV3IDogUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CiB9CkBAIC0zNTcw
LDcgKzM1NzAsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6cGFnZU92ZXJsYXlM
YXllclRyZWVBc1RleHQodW5zaWduZWQgc2hvcnQgZmxhZ3MpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1l
bnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
CiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogCkBAIC0zNzI0LDEyICszNzI0LDEyIEBA
IEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpzY3JvbGxTbmFwT2Zmc2V0cyhFbGVtZW50
JiBlbGVtZW50KQogICAgIGlmIChib3guaXNCb2R5KCkpIHsKICAgICAgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBib3guZnJhbWUoKS5tYWluRnJhbWUoKS52aWV3KCk7CiAgICAgICAgIGlmICgh
ZnJhbWVWaWV3IHx8ICFmcmFtZVZpZXctPmlzU2Nyb2xsYWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgICAgICBzY3JvbGxhYmxlQXJl
YSA9IGZyYW1lVmlldzsKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghYm94LmNhbkJlU2Ny
b2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXll
cigpOwogICAgIH0KIApAQCAtMzc2OCw3ICszNzY4LDcgQEAgYm9vbCBJbnRlcm5hbHM6OnRlc3RQ
cmVsb2FkZXJTZXR0aW5nVmlld3BvcnQoKQogRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6
OnBhdGhTdHJpbmdXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBy
ZWN0Q29tcG9uZW50cywgZG91YmxlIHJhZGl1cykKIHsKICAgICBpZiAocmVjdENvbXBvbmVudHMu
c2l6ZSgpICUgNCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
ICAgICBWZWN0b3I8RmxvYXRSZWN0PiByZWN0czsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVjdENvbXBvbmVudHMuc2l6ZSgpOyBpICs9IDQpCkBAIC00MTMxLDE1ICs0MTMxLDE1IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0TWVkaWFEZXZpY2VTdGF0ZShjb25zdCBT
dHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmCiB7CiAgICAgYXV0byogZG9jdW1lbnQgPSBjb250ZXh0
RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIk5vIGNvbnRleHQgZG9jdW1lbnQi
KSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJ
SUxpdGVyYWwoIk5vIGNvbnRleHQgZG9jdW1lbnQiKSB9OwogCiAgICAgaWYgKCFlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm9wZXJ0eSwgImVuYWJsZWQiKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgbWFrZVN0cmluZygiXCIiICsgcHJvcGVy
dHksICJcIiBpcyBub3QgYSB2YWxpZCBwcm9wZXJ0eSBmb3IgdGhpcyBtZXRob2QuIikgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgbWFrZVN0cmluZygi
XCIiICsgcHJvcGVydHksICJcIiBpcyBub3QgYSB2YWxpZCBwcm9wZXJ0eSBmb3IgdGhpcyBtZXRo
b2QuIikgfTsKIAogICAgIGF1dG8gc2FsdCA9IGRvY3VtZW50LT5kZXZpY2VJREhhc2hTYWx0KCk7
CiAgICAgc3RkOjpvcHRpb25hbDxDYXB0dXJlRGV2aWNlPiBkZXZpY2UgPSBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5jYXB0dXJlRGV2aWNlV2l0aFVuaXF1ZUlEKGlkLCBz
YWx0KTsKICAgICBpZiAoIWRldmljZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQUNDRVNTX0VSUiwgbWFrZVN0cmluZygiZGV2aWNlIHdpdGggSUQgXCIiICsgaWQsICJcIiBu
b3QgZm91bmQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NF
cnJvciwgbWFrZVN0cmluZygiZGV2aWNlIHdpdGggSUQgXCIiICsgaWQsICJcIiBub3QgZm91bmQu
IikgfTsKIAogICAgIGF1dG8gcmVzdWx0ID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2lu
Z2xldG9uKCkuc2V0RGV2aWNlRW5hYmxlZChkZXZpY2UtPnBlcnNpc3RlbnRJZCgpLCB2YWx1ZSk7
CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9B
YnN0cmFjdFdvcmtlci5jcHAKaW5kZXggZGQzMzkzM2NmMzFlOTZjMzE2ODlmNmMxNWU1ZTU0ZTRj
ZDgyYjkzZi4uNTlkMjZhYzQ3MWRhYjFiYjQzMzNiZWE3NzNmYmZmMjQzODZmMDBhNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKQEAgLTQwLDIxICs0MCwyMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBFeGNlcHRpb25PcjxVUkw+IEFic3RyYWN0V29ya2VyOjpy
ZXNvbHZlVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJ5cGFzc01haW5Xb3JsZENv
bnRlbnRTZWN1cml0eVBvbGljeSkKIHsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvJiBjb250ZXh0ID0gKnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIGR5bmFtaWMg
Z2xvYmFsIHNjb3BlIChidWcgIzI3ODg3KS4KICAgICBVUkwgc2NyaXB0VVJMID0gY29udGV4dC5j
b21wbGV0ZVVSTCh1cmwpOwogICAgIGlmICghc2NyaXB0VVJMLmlzVmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiAKICAgICBpZiAoIWNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKS0+
Y2FuUmVxdWVzdChzY3JpcHRVUkwpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJ
VFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAK
ICAgICBBU1NFUlQoY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CiAgICAgaWYgKCFz
aG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgJiYgIWNvbnRleHQuY29u
dGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Q2hpbGRDb250ZXh0RnJvbVNvdXJjZShzY3JpcHRV
UkwpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICByZXR1cm4gV1RGTW92
ZShzY3JpcHRVUkwpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmNwcAppbmRleCA3MWVkOTc2OTViMjdkNzMwNDUyMjQ2NWVlZTI4MWQ3NmEyNjI4MGMyLi41
ZmQ1MWRkYjZiZTBjZDU3ZDI3NmU3NmNmMGUwZjhmODZmYzA4ODRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcApAQCAtMjUxLDcgKzI1MSw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFdvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB1cmxzKQogICAgIGZvciAoYXV0byYgZW50cnkgOiB1cmxzKSB7CiAgICAg
ICAgIFVSTCB1cmwgPSBjb21wbGV0ZVVSTChlbnRyeSk7CiAgICAgICAgIGlmICghdXJsLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICAgICAgY29tcGxl
dGVkVVJMcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSh1cmwpKTsKICAgICB9CiAKQEAgLTI1OSwx
NCArMjU5LDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRT
Y3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzKQogICAgICAgICAvLyBGSVhNRTogQ29u
dmVydCB0aGlzIHRvIGNoZWNrIHRoZSBpc29sYXRlZCB3b3JsZCdzIENvbnRlbnQgU2VjdXJpdHkg
UG9saWN5IG9uY2Ugd2Via2l0Lm9yZy9iLzEwNDUyMCBpcyBzb2x2ZWQuCiAgICAgICAgIGJvb2wg
c2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5ID0gdGhpcy0+c2hvdWxk
QnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KCk7CiAgICAgICAgIGlmICghc2hv
dWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5ICYmICFjb250ZW50U2VjdXJp
dHlQb2xpY3koKS0+YWxsb3dTY3JpcHRGcm9tU291cmNlKHVybCkpCi0gICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTkVUV09SS19FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOZXR3b3JrRXJyb3IgfTsKIAogICAgICAgICBhdXRvIHNjcmlwdExvYWRlciA9IFdvcmtl
clNjcmlwdExvYWRlcjo6Y3JlYXRlKCk7CiAgICAgICAgIHNjcmlwdExvYWRlci0+bG9hZFN5bmNo
cm9ub3VzbHkodGhpcywgdXJsLCBGZXRjaE9wdGlvbnM6Ok1vZGU6Ok5vQ29ycywgc2hvdWxkQnlw
YXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5ID8gQ29udGVudFNlY3VyaXR5UG9saWN5
RW5mb3JjZW1lbnQ6OkRvTm90RW5mb3JjZSA6IENvbnRlbnRTZWN1cml0eVBvbGljeUVuZm9yY2Vt
ZW50OjpFbmZvcmNlU2NyaXB0U3JjRGlyZWN0aXZlLCByZXNvdXJjZVJlcXVlc3RJZGVudGlmaWVy
KCkpOwogCi0gICAgICAgIC8vIElmIHRoZSBmZXRjaGluZyBhdHRlbXB0IGZhaWxlZCwgdGhyb3cg
YSBORVRXT1JLX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IGFsbCB0aGVzZSBzdGVwcy4KKyAgICAg
ICAgLy8gSWYgdGhlIGZldGNoaW5nIGF0dGVtcHQgZmFpbGVkLCB0aHJvdyBhIE5ldHdvcmtFcnJv
ciBleGNlcHRpb24gYW5kIGFib3J0IGFsbCB0aGVzZSBzdGVwcy4KICAgICAgICAgaWYgKHNjcmlw
dExvYWRlci0+ZmFpbGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTkVUV09S
S19FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOZXR3b3JrRXJyb3IgfTsK
IAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkKCp0aGlz
LCBzY3JpcHRMb2FkZXItPmlkZW50aWZpZXIoKSwgc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDY0MzA4OTljMzQ4ODU4MWZi
YTUyMTc0YWIyY2IxNWFhM2FiNzRkYjAuLjQ5N2ExNjBlYzFlZGUzMzQ2MDVkNzYxOTM0ZGMzZDdi
ZDUxZjcxZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTU5LDcg
KzE1OSw3IEBAIFhNTEh0dHBSZXF1ZXN0OjpTdGF0ZSBYTUxIdHRwUmVxdWVzdDo6cmVhZHlTdGF0
ZSgpIGNvbnN0CiBFeGNlcHRpb25PcjxPd25lZFN0cmluZz4gWE1MSHR0cFJlcXVlc3Q6OnJlc3Bv
bnNlVGV4dCgpCiB7CiAgICAgaWYgKG1fcmVzcG9uc2VUeXBlICE9IFJlc3BvbnNlVHlwZTo6RW1w
dHlTdHJpbmcgJiYgbV9yZXNwb25zZVR5cGUgIT0gUmVzcG9uc2VUeXBlOjpUZXh0KQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgcmV0dXJuIE93bmVkU3RyaW5n
IHsgcmVzcG9uc2VUZXh0SWdub3JpbmdSZXNwb25zZVR5cGUoKSB9OwogfQogCkBAIC0xNzMsNyAr
MTczLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkQ2FjaGVSZXNwb25zZSgpCiBFeGNlcHRp
b25PcjxEb2N1bWVudCo+IFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhNTCgpCiB7CiAgICAgaWYg
KG1fcmVzcG9uc2VUeXBlICE9IFJlc3BvbnNlVHlwZTo6RW1wdHlTdHJpbmcgJiYgbV9yZXNwb25z
ZVR5cGUgIT0gUmVzcG9uc2VUeXBlOjpEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciB9OwogCiAgICAgaWYgKCFkb25lV2l0aG91dEVycm9ycygpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTIzOCw3ICsyMzgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBY
TUxIdHRwUmVxdWVzdDo6c2V0VGltZW91dCh1bnNpZ25lZCB0aW1lb3V0KQogewogICAgIGlmIChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSAmJiAhbV9hc3luYykgewogICAg
ICAgICBsb2dDb25zb2xlRXJyb3Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAiWE1MSHR0cFJl
cXVlc3QudGltZW91dCBjYW5ub3QgYmUgc2V0IGZvciBzeW5jaHJvbm91cyBIVFRQKFMpIHJlcXVl
c3RzIG1hZGUgZnJvbSB0aGUgd2luZG93IGNvbnRleHQuIik7Ci0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIH0KICAgICBtX3RpbWVvdXRNaWxsaXNlY29uZHMg
PSB0aW1lb3V0OwogICAgIGlmICghbV90aW1lb3V0VGltZXIuaXNBY3RpdmUoKSkKQEAgLTI1Myw3
ICsyNTMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6c2V0VGltZW91dCh1
bnNpZ25lZCB0aW1lb3V0KQogRXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6OnNldFJl
c3BvbnNlVHlwZShSZXNwb25zZVR5cGUgdHlwZSkKIHsKICAgICBpZiAobV9zdGF0ZSA+PSBMT0FE
SU5HKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICAvLyBO
ZXdlciBmdW5jdGlvbmFsaXR5IGlzIG5vdCBhdmFpbGFibGUgdG8gc3luY2hyb25vdXMgcmVxdWVz
dHMgaW4gd2luZG93IGNvbnRleHRzLCBhcyBhIHNwZWMtbWFuZGF0ZWQKICAgICAvLyBhdHRlbXB0
IHRvIGRpc2NvdXJhZ2Ugc3luY2hyb25vdXMgWEhSIHVzZS4gcmVzcG9uc2VUeXBlIGlzIG9uZSBz
dWNoIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkuCkBAIC0yNjEsNyArMjYxLDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6OnNldFJlc3BvbnNlVHlwZShSZXNwb25zZVR5cGUgdHlw
ZSkKICAgICAvLyBzdWNoIGFzIGZpbGU6IGFuZCBkYXRhOiBzdGlsbCBtYWtlIHNlbnNlIHRvIGFs
bG93LgogICAgIGlmICghbV9hc3luYyAmJiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9j
dW1lbnQoKSAmJiBtX3VybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKICAgICAgICAgbG9n
Q29uc29sZUVycm9yKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgIlhNTEh0dHBSZXF1ZXN0LnJl
c3BvbnNlVHlwZSBjYW5ub3QgYmUgY2hhbmdlZCBmb3Igc3luY2hyb25vdXMgSFRUUChTKSByZXF1
ZXN0cyBtYWRlIGZyb20gdGhlIHdpbmRvdyBjb250ZXh0LiIpOwotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICB9CiAKICAgICBtX3Jlc3BvbnNlVHlwZSA9IHR5
cGU7CkBAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FsbFJlYWR5U3Rh
dGVDaGFuZ2VMaXN0ZW5lcigpCiBFeGNlcHRpb25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6c2V0
V2l0aENyZWRlbnRpYWxzKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKG1fc3RhdGUgPiBPUEVORUQg
fHwgbV9zZW5kRmxhZykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
CiAgICAgbV9pbmNsdWRlQ3JlZGVudGlhbHMgPSB2YWx1ZTsKICAgICByZXR1cm4geyB9OwpAQCAt
NDE4LDEwICs0MTgsMTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6Om9wZW4o
Y29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib28KICAgICBBU1NFUlQobV9z
dGF0ZSA9PSBVTlNFTlQpOwogCiAgICAgaWYgKCFpc1ZhbGlkSFRUUFRva2VuKG1ldGhvZCkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgaWYgKCFpc0FsbG93ZWRIVFRQTWV0aG9k
KG1ldGhvZCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIGlmICghYXN5
bmMgJiYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAg
Ly8gTmV3ZXIgZnVuY3Rpb25hbGl0eSBpcyBub3QgYXZhaWxhYmxlIHRvIHN5bmNocm9ub3VzIHJl
cXVlc3RzIGluIHdpbmRvdyBjb250ZXh0cywgYXMgYSBzcGVjLW1hbmRhdGVkCkBAIC00MzAsMTMg
KzQzMCwxMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBT
dHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvbwogICAgICAgICAvLyBzdWNoIGFzIGZp
bGU6IGFuZCBkYXRhOiBzdGlsbCBtYWtlIHNlbnNlIHRvIGFsbG93LgogICAgICAgICBpZiAodXJs
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSAmJiBtX3Jlc3BvbnNlVHlwZSAhPSBSZXNwb25zZVR5
cGU6OkVtcHR5U3RyaW5nKSB7CiAgICAgICAgICAgICBsb2dDb25zb2xlRXJyb3Ioc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCAiU3luY2hyb25vdXMgSFRUUChTKSByZXF1ZXN0cyBtYWRlIGZyb20g
dGhlIHdpbmRvdyBjb250ZXh0IGNhbm5vdCBoYXZlIFhNTEh0dHBSZXF1ZXN0LnJlc3BvbnNlVHlw
ZSBzZXQuIik7Ci0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTaW1pbGFybHksIHRpbWVvdXRzIGFyZSBkaXNh
YmxlZCBmb3Igc3luY2hyb25vdXMgcmVxdWVzdHMgYXMgd2VsbC4KICAgICAgICAgaWYgKG1fdGlt
ZW91dE1pbGxpc2Vjb25kcyA+IDApIHsKICAgICAgICAgICAgIGxvZ0NvbnNvbGVFcnJvcihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksICJTeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdHMgbXVzdCBu
b3QgaGF2ZSBhIHRpbWVvdXQgdmFsdWUgc2V0LiIpOwotICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgICAgICB9CiAgICAgfQogCkBAIC00ODIsMTMg
KzQ4MiwxMyBAQCBzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbk9yPHZvaWQ+PiBYTUxIdHRwUmVxdWVz
dDo6cHJlcGFyZVRvU2VuZCgpCiAgICAgYXV0byYgY29udGV4dCA9ICpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZSAhPSBPUEVORUQgfHwgbV9zZW5kRmxhZykKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbk9yPHZvaWQ+IHsgRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIgfSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uT3I8dm9pZD4geyBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciB9IH07CiAgICAgQVNTRVJUKCFtX2xvYWRlcik7CiAKICAgICAv
LyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGNoZWNrIHRoZSBpc29sYXRlZCB3b3JsZCdzIENvbnRl
bnQgU2VjdXJpdHkgUG9saWN5IG9uY2Ugd2Via2l0Lm9yZy9iLzEwNDUyMCBpcyBzb2x2ZWQuCiAg
ICAgaWYgKCFjb250ZXh0LnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGlj
eSgpICYmICFjb250ZXh0LmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0Nvbm5lY3RUb1Nv
dXJjZShtX3VybCkpIHsKICAgICAgICAgaWYgKCFtX2FzeW5jKQotICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbk9yPHZvaWQ+IHsgRXhjZXB0aW9uIHsgTkVUV09SS19FUlIgfSB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbk9yPHZvaWQ+IHsgRXhjZXB0aW9uIHsgTmV0d29ya0Vycm9y
IH0gfTsKICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogICAgICAgICBtX3RpbWVv
dXRUaW1lci5zdG9wKCk7CiAgICAgICAgIG1fbmV0d29ya0Vycm9yVGltZXIuc3RhcnRPbmVTaG90
KDBfcyk7CkBAIC02ODYsNyArNjg2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVl
c3Q6OmNyZWF0ZVJlcXVlc3QoKQogewogICAgIC8vIE9ubHkgR0VUIHJlcXVlc3QgaXMgc3VwcG9y
dGVkIGZvciBibG9iIFVSTC4KICAgICBpZiAoIW1fYXN5bmMgJiYgbV91cmwucHJvdG9jb2xJc0Js
b2IoKSAmJiBtX21ldGhvZCAhPSAiR0VUIikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5F
VFdPUktfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOZXR3b3JrRXJyb3IgfTsK
IAogICAgIG1fc2VuZEZsYWcgPSB0cnVlOwogCkBAIC03NjksNyArNzY5LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoKQogICAgIGlmIChtX2V4Y2Vw
dGlvbkNvZGUpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBtX2V4Y2VwdGlvbkNvZGUgfTsK
ICAgICBpZiAobV9lcnJvcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5FVFdPUktfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOZXR3b3JrRXJyb3IgfTsKICAgICByZXR1
cm4geyB9OwogfQogCkBAIC04OTYsNyArODk2LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJv
cFByb3RlY3Rpb24oKQogRXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRl
TWltZVR5cGUoY29uc3QgU3RyaW5nJiBvdmVycmlkZSkKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBM
T0FESU5HIHx8IG1fc3RhdGUgPT0gRE9ORSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciB9OwogCiAgICAgbV9taW1lVHlwZU92ZXJyaWRlID0gb3ZlcnJpZGU7CiAgICAgcmV0
dXJuIHsgfTsKQEAgLTkwOSwxMiArOTA5LDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0dHBS
ZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyCiAg
ICAgICAgIGlmICh1c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKICNlbmRpZgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRT
dGF0ZUVycm9yIH07CiAgICAgfQogCiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRWYWx1ZSA9IHN0cmlw
TGVhZGluZ0FuZFRyYWlsaW5nSFRUUFNwYWNlcyh2YWx1ZSk7CiAgICAgaWYgKCFpc1ZhbGlkSFRU
UFRva2VuKG5hbWUpIHx8ICFpc1ZhbGlkSFRUUEhlYWRlclZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSkp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgLy8gQSBwcml2aWxlZ2VkIHNjcmlw
dCAoZS5nLiBhIERhc2hib2FyZCB3aWRnZXQpIGNhbiBzZXQgYW55IGhlYWRlcnMuCiAgICAgaWYg
KCFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSAmJiAhaXNBbGxvd2Vk
SFRUUEhlYWRlcihuYW1lKSkgewpAQCAtMTAwNCw3ICsxMDA0LDcgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGVycm9yLmlzQ2FuY2VsbGF0aW9uKCkpIHsKLSAgICAgICAgbV9leGNlcHRp
b25Db2RlID0gQUJPUlRfRVJSOworICAgICAgICBtX2V4Y2VwdGlvbkNvZGUgPSBBYm9ydEVycm9y
OwogICAgICAgICBhYm9ydEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDMy
LDcgKzEwMzIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yKQogICAgICAgICBtX25ldHdvcmtFcnJvclRpbWVyLnN0YXJ0T25lU2hvdCgw
X3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fZXhjZXB0aW9uQ29kZSA9IE5FVFdP
UktfRVJSOworICAgIG1fZXhjZXB0aW9uQ29kZSA9IE5ldHdvcmtFcnJvcjsKICAgICBuZXR3b3Jr
RXJyb3IoKTsKIH0KIApAQCAtMTE5NywxMSArMTE5NywxMSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpkaWRSZWFjaFRpbWVvdXQoKQogCiAgICAgbV9zZW5kRmxhZyA9IGZhbHNlOwogICAgIG1fZXJy
b3IgPSB0cnVlOwotICAgIG1fZXhjZXB0aW9uQ29kZSA9IFRJTUVPVVRfRVJSOworICAgIG1fZXhj
ZXB0aW9uQ29kZSA9IFRpbWVvdXRFcnJvcjsKIAogICAgIGlmICghbV9hc3luYykgewogICAgICAg
ICBtX3N0YXRlID0gRE9ORTsKLSAgICAgICAgbV9leGNlcHRpb25Db2RlID0gVElNRU9VVF9FUlI7
CisgICAgICAgIG1fZXhjZXB0aW9uQ29kZSA9IFRpbWVvdXRFcnJvcjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRXZhbHVhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEV2YWx1YXRvci5jcHAKaW5kZXggZjMyYWQ4
MmFjNWNkNTY0OGYwYzA5MzgwYzIzY2QxMzA2ZjgxOTNjZS4uMGNjMWQ1ZDg3M2ZmOTE4MzE3YzA4
MTNiM2JlMzkyNjUyZGFhN2YwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
RXZhbHVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhFdmFsdWF0b3IuY3Bw
CkBAIC00OSw3ICs0OSw3IEBAIFJlZjxYUGF0aE5TUmVzb2x2ZXI+IFhQYXRoRXZhbHVhdG9yOjpj
cmVhdGVOU1Jlc29sdmVyKE5vZGUqIG5vZGVSZXNvbHZlcikKIEV4Y2VwdGlvbk9yPFJlZjxYUGF0
aFJlc3VsdD4+IFhQYXRoRXZhbHVhdG9yOjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIE5vZGUqIGNvbnRleHROb2RlLCBSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiYmIHJlc29sdmVy
LCB1bnNpZ25lZCBzaG9ydCB0eXBlLCBYUGF0aFJlc3VsdCogcmVzdWx0KQogewogICAgIGlmICgh
aXNWYWxpZENvbnRleHROb2RlKGNvbnRleHROb2RlKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RT
dXBwb3J0ZWRFcnJvciB9OwogCiAgICAgYXV0byBjcmVhdGVSZXN1bHQgPSBjcmVhdGVFeHByZXNz
aW9uKGV4cHJlc3Npb24sIFdURk1vdmUocmVzb2x2ZXIpKTsKICAgICBpZiAoY3JlYXRlUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRXhw
cmVzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhFeHByZXNzaW9uLmNwcAppbmRl
eCBkMDI1OGU3NDQzYzE5NjQxNzJhMmQwMDFiZGE3MjIwMDUxYzg1MjdkLi5kYWNhNDY5ZjdkMzQ2
ZDY3NWVmNzg4ZDU1OWQxYWI3NzEwZmUwYTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhFeHByZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhFeHBy
ZXNzaW9uLmNwcApAQCAtNTksNyArNTksNyBAQCBYUGF0aEV4cHJlc3Npb246On5YUGF0aEV4cHJl
c3Npb24oKQogRXhjZXB0aW9uT3I8UmVmPFhQYXRoUmVzdWx0Pj4gWFBhdGhFeHByZXNzaW9uOjpl
dmFsdWF0ZShOb2RlKiBjb250ZXh0Tm9kZSwgdW5zaWduZWQgc2hvcnQgdHlwZSwgWFBhdGhSZXN1
bHQqKQogewogICAgIGlmICghaXNWYWxpZENvbnRleHROb2RlKGNvbnRleHROb2RlKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgRXZhbHVhdGlvbkNvbnRl
eHQmIGV2YWx1YXRpb25Db250ZXh0ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKTsK
ICAgICBldmFsdWF0aW9uQ29udGV4dC5ub2RlID0gY29udGV4dE5vZGU7CkBAIC03MCw3ICs3MCw3
IEBAIEV4Y2VwdGlvbk9yPFJlZjxYUGF0aFJlc3VsdD4+IFhQYXRoRXhwcmVzc2lvbjo6ZXZhbHVh
dGUoTm9kZSogY29udGV4dE5vZGUsIHVuc2lnCiAgICAgZXZhbHVhdGlvbkNvbnRleHQubm9kZSA9
IG51bGxwdHI7IC8vIERvIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0IG5vZGUs
IGFzIHRoaXMgbWF5IHByZXZlbnQgdGhlIHdob2xlIGRvY3VtZW50IGZyb20gYmVpbmcgZGVzdHJv
eWVkIGluIHRpbWUuCiAKICAgICBpZiAoZXZhbHVhdGlvbkNvbnRleHQuaGFkVHlwZUNvbnZlcnNp
b25FcnJvcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBpZiAodHlwZSAhPSBY
UGF0aFJlc3VsdDo6QU5ZX1RZUEUpIHsKICAgICAgICAgYXV0byBjb252ZXJ0VG9SZXN1bHQgPSBy
ZXN1bHQtPmNvbnZlcnRUbyh0eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCmluZGV4
IDgzMjQ2MTViZDNhMTUyNWE1MDBhMzgyM2M0M2YzZWE3OWQ4MmZlY2YuLjM4ZWY1NTc0ZGExZmY2
NTExMWNhMWMxZGZlMDA4NGM3NWFkMjlkOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNw
cApAQCAtNDU3LDEwICs0NTcsMTAgQEAgRXhjZXB0aW9uT3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJl
c3Npb24+PiBQYXJzZXI6OnBhcnNlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3QKICAgICBpbnQg
cGFyc2VFcnJvciA9IHhwYXRoeXlwYXJzZShwYXJzZXIpOwogCiAgICAgaWYgKHBhcnNlci5tX3Nh
d05hbWVzcGFjZUVycm9yKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTkFNRVNQQUNFX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTmFtZXNwYWNlRXJyb3IgfTsKIAogICAg
IGlmIChwYXJzZUVycm9yKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIHJldHVy
biBXVEZNb3ZlKHBhcnNlci5tX3Jlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUmVzdWx0LmNw
cAppbmRleCAyZTMzMThjODBkYmFhNGE5YmQ1ZGZlMjliZGI0OGUxMTUxMWM5MTJkLi42NWY0MjJk
OWVmZDI1ODM0NDAxODI0MDc2N2JiY2FjNDY4MzgwMmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFJl
c3VsdC5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBFeGNlcHRpb25PcjxOb2RlKj4gWFBhdGhSZXN1
bHQ6Oml0ZXJhdGVOZXh0KCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9
OwogCiAgICAgaWYgKGludmFsaWRJdGVyYXRvclN0YXRlKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlmIChtX25vZGVTZXRQb3NpdGlvbiA+PSBtX25v
ZGVTZXQuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9FeGNlcHRpb25IYW5kbGVycy5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9FeGNlcHRpb25IYW5kbGVycy5tbQppbmRleCBlYTg0NzNjZThlNzA3
MGM3ZjI1MjdiMTQ3NDRkOTk3NzdmZThjMTE2Li5mM2NmZWIxMDJlYmU0ZTQwNjBiYmYyM2ZlNmJj
NmJhZTA0NjBmZjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRXhj
ZXB0aW9uSGFuZGxlcnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0V4Y2Vw
dGlvbkhhbmRsZXJzLm1tCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgcmFpc2VUeXBlRXJyb3JFeGNl
cHRpb24oKQogCiB2b2lkIHJhaXNlTm90U3VwcG9ydGVkRXJyb3JFeGNlcHRpb24oKQogewotICAg
IHJhaXNlRE9NRXJyb3JFeGNlcHRpb24oV2ViQ29yZTo6Tk9UX1NVUFBPUlRFRF9FUlIpOworICAg
IHJhaXNlRE9NRXJyb3JFeGNlcHRpb24oV2ViQ29yZTo6Tm90U3VwcG9ydGVkRXJyb3IpOwogfQog
CiB2b2lkIHJhaXNlRE9NRXJyb3JFeGNlcHRpb24oV2ViQ29yZTo6RXhjZXB0aW9uJiYgZXhjZXB0
aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316311</attachid>
            <date>2017-07-24 12:53:36 -0700</date>
            <delta_ts>2017-07-24 20:59:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174794-20170724125334.patch</filename>
            <type>text/plain</type>
            <size>490464</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5ODMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDNmMDZlNjA3MTcyN2Q3
YmIwMzgyOWFlNzExNjM3ODU5NDU3OThmMi4uZGIxNjY1YmFhODBiY2QyZDVhZTZhMDBiODU2N2M0
NTczNGU2NzM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE3LTA3LTI0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlbnVt
ZXJhdGlvbiBzaG91bGQgdXNlIG1vZGVybiBleGNlcHRpb24gbmFtZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDc5NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZW51bWVyYXRp
b24gc2hvdWxkIHVzZSBtb2Rlcm4gZXhjZXB0aW9uIG5hbWVzIGNvbnNpc3RlbnRseS4KKyAgICAg
ICAgVGhpcyBtYWtlcyB0aGUgY29kZSBuaWNlciBhbmQgY2xvc2VyIHRvIHRoZSB0ZXh0IG9mIHRo
ZSBzcGVjaWZpY2F0aW9uLgorCisyMDE3LTA3LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CisKICAgICAgICAgTWFrZSBFeGNlcHRpb25Db2RlIGEgcHJvcGVyIGVudW1lcmF0aW9u
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3NzEK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGNmNzgzOGQyMTU4M2IxYmZhNGQ1Njdj
MjE1NjNmOWFiY2ZhOWE5ODIuLmZhY2M2MTEzMDc0NDUzZTA4YTY5YzNlZmM1ZGVhZGFmMDRhZDdk
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0w
Ny0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZW51bWVyYXRpb24gc2hvdWxkIHVzZSBtb2Rlcm4gZXhjZXB0aW9uIG5hbWVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3OTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9FeGNlcHRp
b25IYW5kbGVycy5tbToKKyAgICAgICAgKHJhaXNlTm90U3VwcG9ydGVkRXJyb3JFeGNlcHRpb24p
OgorCiAyMDE3LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgRHJvcCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAppbmRleCBlZjg3MjFm
NjAxODEzNzAzMGFjMzgzYjkwYWVlMmZhMTBlMDlkZjZjLi4xYzU3ZjNiOWIwYjYzNzBjOGExY2Fm
NzJhMjRkMjIxZWY3MTM3ZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
cHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwCkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIEV4
Y2VwdGlvbk9yPFBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0PiBjb252ZXJ0QW5kVmFsaWRhdGUo
QXBwbGVQYXlQYXltZW4KICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICB9CiAKICAgICBjb252ZXJ0ZWRS
ZXN1bHQuZXJyb3JzLmFwcGVuZFZlY3Rvcihjb252ZXJ0KHJlc3VsdC5lcnJvcnMpKTsKQEAgLTU0
MCwyMSArNTQwLDIxIEBAIHN0YXRpYyBib29sIGlzU2VjdXJlKERvY3VtZW50TG9hZGVyJiBkb2N1
bWVudExvYWRlcikKIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBjYW5DYWxsQXBwbGVQYXlTZXNz
aW9uQVBJcyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFpc1NlY3VyZSgqZG9jdW1l
bnQubG9hZGVyKCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBwbGVQYXlTZXNzaW9uIEFQSSBmcm9tIGFuIGluc2Vj
dXJlIGRvY3VtZW50LiIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciwgIlRyeWluZyB0byBjYWxsIGFuIEFwcGxlUGF5U2Vzc2lvbiBBUEkgZnJvbSBhbiBp
bnNlY3VyZSBkb2N1bWVudC4iIH07CiAKICAgICBhdXRvJiB0b3BEb2N1bWVudCA9IGRvY3VtZW50
LnRvcERvY3VtZW50KCk7CiAgICAgaWYgKCZkb2N1bWVudCAhPSAmdG9wRG9jdW1lbnQpIHsKICAg
ICAgICAgYXV0byYgdG9wT3JpZ2luID0gdG9wRG9jdW1lbnQudG9wT3JpZ2luKCk7CiAKICAgICAg
ICAgaWYgKCFkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpLmlzU2FtZVNjaGVtZUhvc3RQb3J0KHRv
cE9yaWdpbikpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBwbGVQYXlTZXNzaW9uIEFQSSBmcm9tIGEgZG9jdW1l
bnQgd2l0aCBhbiBkaWZmZXJlbnQgc2VjdXJpdHkgb3JpZ2luIHRoYW4gaXRzIHRvcC1sZXZlbCBm
cmFtZS4iIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBwbGVQYXlTZXNzaW9uIEFQSSBmcm9tIGEgZG9jdW1l
bnQgd2l0aCBhbiBkaWZmZXJlbnQgc2VjdXJpdHkgb3JpZ2luIHRoYW4gaXRzIHRvcC1sZXZlbCBm
cmFtZS4iIH07CiAKICAgICAgICAgZm9yIChhdXRvKiBhbmNlc3RvckRvY3VtZW50ID0gZG9jdW1l
bnQucGFyZW50RG9jdW1lbnQoKTsgYW5jZXN0b3JEb2N1bWVudCAhPSAmdG9wRG9jdW1lbnQ7IGFu
Y2VzdG9yRG9jdW1lbnQgPSBhbmNlc3RvckRvY3VtZW50LT5wYXJlbnREb2N1bWVudCgpKSB7CiAg
ICAgICAgICAgICBpZiAoIWlzU2VjdXJlKCphbmNlc3RvckRvY3VtZW50LT5sb2FkZXIoKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgIlRy
eWluZyB0byBjYWxsIGFuIEFwcGxlUGF5U2Vzc2lvbiBBUEkgZnJvbSBhIGRvY3VtZW50IHdpdGgg
YW4gaW5zZWN1cmUgcGFyZW50IGZyYW1lLiIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBwbGVQYXlT
ZXNzaW9uIEFQSSBmcm9tIGEgZG9jdW1lbnQgd2l0aCBhbiBpbnNlY3VyZSBwYXJlbnQgZnJhbWUu
IiB9OwogCiAgICAgICAgICAgICBpZiAoIWFuY2VzdG9yRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCkuaXNTYW1lU2NoZW1lSG9zdFBvcnQodG9wT3JpZ2luKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSLCAiVHJ5aW5nIHRvIGNhbGwgYW4gQXBw
bGVQYXlTZXNzaW9uIEFQSSBmcm9tIGEgZG9jdW1lbnQgd2l0aCBhbiBkaWZmZXJlbnQgc2VjdXJp
dHkgb3JpZ2luIHRoYW4gaXRzIHRvcC1sZXZlbCBmcmFtZS4iIH07CisgICAgICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIlRyeWluZyB0byBjYWxsIGFu
IEFwcGxlUGF5U2Vzc2lvbiBBUEkgZnJvbSBhIGRvY3VtZW50IHdpdGggYW4gZGlmZmVyZW50IHNl
Y3VyaXR5IG9yaWdpbiB0aGFuIGl0cyB0b3AtbGV2ZWwgZnJhbWUuIiB9OwogICAgICAgICB9CiAg
ICAgfQogCkBAIC01NjgsMTIgKzU2OCwxMiBAQCBFeGNlcHRpb25PcjxSZWY8QXBwbGVQYXlTZXNz
aW9uPj4gQXBwbGVQYXlTZXNzaW9uOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCB1bgogICAg
ICAgICByZXR1cm4gY2FuQ2FsbC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKICAgICBpZiAoIVNjcmlw
dENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSLCAiTXVzdCBjcmVhdGUgYSBuZXcgQXBwbGVQYXlT
ZXNzaW9uIGZyb20gYSB1c2VyIGdlc3R1cmUgaGFuZGxlci4iIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJNdXN0IGNyZWF0ZSBhIG5ldyBBcHBsZVBh
eVNlc3Npb24gZnJvbSBhIHVzZXIgZ2VzdHVyZSBoYW5kbGVyLiIgfTsKIAogICAgIGF1dG8mIHBh
eW1lbnRDb29yZGluYXRvciA9IGRvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLnBheW1lbnRD
b29yZGluYXRvcigpOwogCiAgICAgaWYgKCF2ZXJzaW9uIHx8ICFwYXltZW50Q29vcmRpbmF0b3Iu
c3VwcG9ydHNWZXJzaW9uKHZlcnNpb24pKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9BQ0NFU1NfRVJSLCBtYWtlU3RyaW5nKCJcIiIgKyBTdHJpbmc6Om51bWJlcih2ZXJzaW9u
KSwgIlwiIGlzIG5vdCBhIHN1cHBvcnRlZCB2ZXJzaW9uLiIpIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIG1ha2VTdHJpbmcoIlwiIiArIFN0cmluZzo6
bnVtYmVyKHZlcnNpb24pLCAiXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZlcnNpb24uIikgfTsKIAog
ICAgIGF1dG8gY29udmVydGVkUGF5bWVudFJlcXVlc3QgPSBjb252ZXJ0QW5kVmFsaWRhdGUodmVy
c2lvbiwgV1RGTW92ZShwYXltZW50UmVxdWVzdCkpOwogICAgIGlmIChjb252ZXJ0ZWRQYXltZW50
UmVxdWVzdC5oYXNFeGNlcHRpb24oKSkKQEAgLTU5Niw3ICs1OTYsNyBAQCBBcHBsZVBheVNlc3Np
b246On5BcHBsZVBheVNlc3Npb24oKQogRXhjZXB0aW9uT3I8Ym9vbD4gQXBwbGVQYXlTZXNzaW9u
OjpzdXBwb3J0c1ZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgdW5zaWduZWQgdmVyc2lvbikKIHsKICAgICBpZiAoIXZlcnNpb24pCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKQEAgLTY2Myw3
ICs2NjMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246Om9wZW5QYXltZW50
U2V0dXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaQogICAgICAgICByZXR1cm4gY2FuQ2Fs
bC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKICAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSLCAiTXVzdCBjYWxsIEFwcGxlUGF5U2Vzc2lvbi5vcGVuUGF5bWVudFNldHVwIGZy
b20gYSB1c2VyIGdlc3R1cmUgaGFuZGxlci4iIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IsICJNdXN0IGNhbGwgQXBwbGVQYXlTZXNzaW9uLm9wZW5QYXlt
ZW50U2V0dXAgZnJvbSBhIHVzZXIgZ2VzdHVyZSBoYW5kbGVyLiIgfTsKIAogICAgIFJlZlB0cjxE
ZWZlcnJlZFByb21pc2U+IHByb21pc2UoV1RGTW92ZShwYXNzZWRQcm9taXNlKSk7CiAgICAgYXV0
byYgcGF5bWVudENvb3JkaW5hdG9yID0gZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkucGF5
bWVudENvb3JkaW5hdG9yKCk7CkBAIC02NzgsMTAgKzY3OCwxMCBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBBcHBsZVBheVNlc3Npb246Om9wZW5QYXltZW50U2V0dXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgc2NyaQogRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpiZWdpbigpCiB7CiAg
ICAgaWYgKCFjYW5CZWdpbigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSLCAiUGF5bWVudCBzZXNzaW9uIGlzIGFscmVhZHkgYWN0aXZlLiIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIlBheW1lbnQgc2Vzc2lv
biBpcyBhbHJlYWR5IGFjdGl2ZS4iIH07CiAKICAgICBpZiAocGF5bWVudENvb3JkaW5hdG9yKCku
aGFzQWN0aXZlU2Vzc2lvbigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSLCAiUGFnZSBhbHJlYWR5IGhhcyBhbiBhY3RpdmUgcGF5bWVudCBzZXNzaW9uLiIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIlBhZ2Ug
YWxyZWFkeSBoYXMgYW4gYWN0aXZlIHBheW1lbnQgc2Vzc2lvbi4iIH07CiAKICAgICBhdXRvJiBk
b2N1bWVudCA9ICpkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
IApAQCAtNjkwLDcgKzY5MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6
YmVnaW4oKQogICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKGljb24udXJsKTsKIAogICAgIGlm
ICghcGF5bWVudENvb3JkaW5hdG9yKCkuYmVnaW5QYXltZW50U2Vzc2lvbigqdGhpcywgZG9jdW1l
bnQudXJsKCksIGxpbmtJY29uVVJMcywgbV9wYXltZW50UmVxdWVzdCkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIsICJUaGVyZSBpcyBhbHJlYWR5IGhhcyBh
biBhY3RpdmUgcGF5bWVudCBzZXNzaW9uLiIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciwgIlRoZXJlIGlzIGFscmVhZHkgaGFzIGFuIGFjdGl2ZSBwYXlt
ZW50IHNlc3Npb24uIiB9OwogCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBY3RpdmU7CiAKQEAgLTcw
Miw3ICs3MDIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmJlZ2luKCkK
IEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6YWJvcnQoKQogewogICAgIGlmICgh
Y2FuQWJvcnQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
ICAgICBtX3N0YXRlID0gU3RhdGU6OkFib3J0ZWQ7CiAgICAgcGF5bWVudENvb3JkaW5hdG9yKCku
YWJvcnRQYXltZW50U2Vzc2lvbigpOwpAQCAtNzE1LDcgKzcxNSw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IEFwcGxlUGF5U2Vzc2lvbjo6YWJvcnQoKQogRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlT
ZXNzaW9uOjpjb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSBtZXJjaGFudFNlc3Npb25WYWx1ZSkKIHsKICAgICBpZiAoIWNhbkNvbXBs
ZXRlTWVyY2hhbnRWYWxpZGF0aW9uKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAgICAgaWYgKCFtZXJjaGFudFNlc3Npb25WYWx1ZS5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CkBAIC03MjcsNyArNzI3LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZU1lcmNoYW50VmFs
aWRhdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3QKICAgICBhdXRvIG1lcmNoYW50U2Vzc2lvbiA9IFBh
eW1lbnRNZXJjaGFudFNlc3Npb246OmZyb21KUyhzdGF0ZSwgYXNPYmplY3QobWVyY2hhbnRTZXNz
aW9uVmFsdWUpLCBlcnJvck1lc3NhZ2UpOwogICAgIGlmICghbWVyY2hhbnRTZXNzaW9uKSB7CiAg
ICAgICAgIHdpbmRvdy5wcmludEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICB9CiAKICAgICBtX21lcmNoYW50
VmFsaWRhdGlvblN0YXRlID0gTWVyY2hhbnRWYWxpZGF0aW9uU3RhdGU6OlZhbGlkYXRpb25Db21w
bGV0ZTsKQEAgLTczOSw3ICs3MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdAogRXhjZXB0
aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0
aW9uKEFwcGxlUGF5U2hpcHBpbmdNZXRob2RVcGRhdGUmJiB1cGRhdGUpCiB7CiAgICAgaWYgKCFj
YW5Db21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgYXV0byBjb252ZXJ0ZWRVcGRhdGUgPSBjb252
ZXJ0QW5kVmFsaWRhdGUoV1RGTW92ZSh1cGRhdGUpKTsKICAgICBpZiAoY29udmVydGVkVXBkYXRl
Lmhhc0V4Y2VwdGlvbigpKQpAQCAtNzU0LDcgKzc1NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFw
cGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbihBcHBsZVBheVNo
aXBwCiBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlU2hpcHBpbmdD
b250YWN0U2VsZWN0aW9uKEFwcGxlUGF5U2hpcHBpbmdDb250YWN0VXBkYXRlJiYgdXBkYXRlKQog
ewogICAgIGlmICghY2FuQ29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBhdXRvIGNvbnZlcnRl
ZFVwZGF0ZSA9IGNvbnZlcnRBbmRWYWxpZGF0ZShXVEZNb3ZlKHVwZGF0ZSkpOwogICAgIGlmIChj
b252ZXJ0ZWRVcGRhdGUuaGFzRXhjZXB0aW9uKCkpCkBAIC03NjksNyArNzY5LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVj
dGlvbihBcHBsZVBheVNoaXAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6Y29t
cGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEFwcGxlUGF5UGF5bWVudE1ldGhvZFVwZGF0ZSYm
IHVwZGF0ZSkKIHsKICAgICBpZiAoIWNhbkNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbigp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGF1dG8g
Y29udmVydGVkVXBkYXRlID0gY29udmVydEFuZFZhbGlkYXRlKFdURk1vdmUodXBkYXRlKSk7CiAg
ICAgaWYgKGNvbnZlcnRlZFVwZGF0ZS5oYXNFeGNlcHRpb24oKSkKQEAgLTc4NCw3ICs3ODQsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWVudE1ldGhv
ZFNlbGVjdGlvbihBcHBsZVBheVBheW1lbgogRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNz
aW9uOjpjb21wbGV0ZVBheW1lbnQoQXBwbGVQYXlQYXltZW50QXV0aG9yaXphdGlvblJlc3VsdCYm
IHJlc3VsdCkKIHsKICAgICBpZiAoIWNhbkNvbXBsZXRlUGF5bWVudCgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGF1dG8gY29udmVydGVkUmVzdWx0
T3JFeGNlcHRpb24gPSBjb252ZXJ0QW5kVmFsaWRhdGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICBp
ZiAoY29udmVydGVkUmVzdWx0T3JFeGNlcHRpb24uaGFzRXhjZXB0aW9uKCkpCkBAIC04MjcsNyAr
ODI3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBw
aW5nTWV0aG9kU2VsZWN0aW9uKHVuc2lnbmVkIHNob3IKICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
ICAgIH0KIAogICAgIHVwZGF0ZS5uZXdUb3RhbCA9IFdURk1vdmUobmV3VG90YWwpOwpAQCAtODY4
LDcgKzg2OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVT
aGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24odW5zaWduZWQgc2hvCiAgICAgICAgIGJyZWFrOwogCiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAg
ICAgfQogCiAgICAgaWYgKGVycm9yQ29kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcAppbmRleCBjNDlkZTUw
YzEwOWNkMmNkMWQ2YzJhZGVjZmFlM2ExMTY0OWVjNzNjLi45ZDA1MThkMzBiMzgxMTAyZmY5YzUy
MGRiZjZjYzkxNTNmODE2YzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
Y3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCkBAIC0xMTQsNyArMTE0LDcg
QEAgdm9pZCBNZWRpYUtleVNlc3Npb246OmdlbmVyYXRlUmVxdWVzdChjb25zdCBBdG9taWNTdHJp
bmcmIGluaXREYXRhVHlwZSwgY29uc3QgQnUKICAgICAvLyAxLiBJZiB0aGlzIG9iamVjdCBpcyBj
bG9zZWQsIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBhbiBJbnZhbGlkU3RhdGVFcnJv
ci4KICAgICAvLyAyLiBJZiB0aGlzIG9iamVjdCdzIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgZmFs
c2UsIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBhbiBJbnZhbGlkU3RhdGVFcnJvci4K
ICAgICBpZiAobV9jbG9zZWQgfHwgIW1fdW5pbml0aWFsaXplZCkgewotICAgICAgICBwcm9taXNl
LT5yZWplY3QoSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52
YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OmdlbmVyYXRlUmVxdWVzdChjb25zdCBBdG9taWNT
dHJpbmcmIGluaXREYXRhVHlwZSwgY29uc3QgQnUKICAgICAvLyAgICBpbml0RGF0YVR5cGUgYXMg
YW4gSW5pdGlhbGl6YXRpb24gRGF0YSBUeXBlLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdp
dGggYSBOb3RTdXBwb3J0ZWRFcnJvci4gU3RyaW5nCiAgICAgLy8gICAgY29tcGFyaXNvbiBpcyBj
YXNlLXNlbnNpdGl2ZS4KICAgICBpZiAoIW1faW1wbGVtZW50YXRpb24tPnN1cHBvcnRzSW5pdERh
dGFUeXBlKGluaXREYXRhVHlwZSkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5PVF9TVVBQ
T1JURURfRVJSKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5vdFN1cHBvcnRlZEVycm9yKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgTWVkaWFL
ZXlTZXNzaW9uOjpnZW5lcmF0ZVJlcXVlc3QoY29uc3QgQXRvbWljU3RyaW5nJiBpbml0RGF0YVR5
cGUsIGNvbnN0IEJ1CiAKICAgICAgICAgLy8gMTAuNC4gSWYgc2FuaXRpemVkIGluaXQgZGF0YSBp
cyBlbXB0eSwgcmVqZWN0IHByb21pc2Ugd2l0aCBhIE5vdFN1cHBvcnRlZEVycm9yLgogICAgICAg
ICBpZiAoc2FuaXRpemVkSW5pdERhdGEtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcHJvbWlz
ZS0+cmVqZWN0KE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgICAgIHByb21pc2UtPnJlamVj
dChOb3RTdXBwb3J0ZWRFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjpnZW5lcmF0ZVJlcXVlc3Qo
Y29uc3QgQXRvbWljU3RyaW5nJiBpbml0RGF0YVR5cGUsIGNvbnN0IEJ1CiAgICAgICAgIC8vIDEw
LjkuIFVzZSB0aGUgY2RtIHRvIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAgICAg
Ly8gMTAuOS4xLiBJZiB0aGUgc2FuaXRpemVkIGluaXQgZGF0YSBpcyBub3Qgc3VwcG9ydGVkIGJ5
IHRoZSBjZG0sIHJlamVjdCBwcm9taXNlIHdpdGggYSBOb3RTdXBwb3J0ZWRFcnJvci4KICAgICAg
ICAgaWYgKCFtX2ltcGxlbWVudGF0aW9uLT5zdXBwb3J0c0luaXREYXRhKGluaXREYXRhVHlwZSwg
KnNhbml0aXplZEluaXREYXRhKSkgewotICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5PVF9T
VVBQT1JURURfRVJSKTsKKyAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChOb3RTdXBwb3J0ZWRF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjExLDcgKzIxMSw3
IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjpnZW5lcmF0ZVJlcXVlc3QoY29uc3QgQXRvbWljU3Ry
aW5nJiBpbml0RGF0YVR5cGUsIGNvbnN0IEJ1CiAgICAgICAgICAgICBtX3Rhc2tRdWV1ZS5lbnF1
ZXVlVGFzayhbdGhpcywgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSksIG1lc3NhZ2UgPSBXVEZN
b3ZlKG1lc3NhZ2UpLCBtZXNzYWdlVHlwZSwgc2Vzc2lvbklkLCBzdWNjZWVkZWRdICgpIG11dGFi
bGUgewogICAgICAgICAgICAgICAgIC8vIDEwLjEwLjEuIElmIGFueSBvZiB0aGUgcHJlY2VkaW5n
IHN0ZXBzIGZhaWxlZCwgcmVqZWN0IHByb21pc2Ugd2l0aCBhIG5ldyBET01FeGNlcHRpb24gd2hv
c2UgbmFtZSBpcyB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbmFtZS4KICAgICAgICAgICAgICAgICBp
ZiAoc3VjY2VlZGVkID09IENETUluc3RhbmNlOjpTdWNjZXNzVmFsdWU6OkZhaWxlZCkgewotICAg
ICAgICAgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoTk9UX1NVUFBPUlRFRF9FUlIpOworICAg
ICAgICAgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIC8vIDEwLjEwLjIuIFNldCB0aGUgc2Vzc2lvbklkIGF0dHJpYnV0ZSB0byBzZXNzaW9uIGlk
LgpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjpsb2FkKGNvbnN0IFN0
cmluZyYgc2Vzc2lvbklkLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pCiAgICAgLy8gMS4g
SWYgdGhpcyBvYmplY3QgaXMgY2xvc2VkLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGgg
YW4gSW52YWxpZFN0YXRlRXJyb3IuCiAgICAgLy8gMi4gSWYgdGhpcyBvYmplY3QncyB1bmluaXRp
YWxpemVkIHZhbHVlIGlzIGZhbHNlLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYW4g
SW52YWxpZFN0YXRlRXJyb3IuCiAgICAgaWYgKG1fY2xvc2VkIHx8ICFtX3VuaW5pdGlhbGl6ZWQp
IHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAg
cHJvbWlzZS0+cmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzAxLDcgKzMwMSw3IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjpsb2FkKGNvbnN0
IFN0cmluZyYgc2Vzc2lvbklkLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pCiAgICAgICAg
ICAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChUeXBlRXJyb3IpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgY2FzZSBDRE1JbnN0YW5jZTo6U2Vzc2lvbkxv
YWRGYWlsdXJlOjpRdW90YUV4Y2VlZGVkOgotICAgICAgICAgICAgICAgICAgICBwcm9taXNlLT5y
ZWplY3QoUVVPVEFfRVhDRUVERURfRVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS0+
cmVqZWN0KFF1b3RhRXhjZWVkZWRFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICBjYXNlIENETUluc3RhbmNlOjpTZXNzaW9uTG9hZEZhaWx1cmU6Ok5v
bmU6CiAgICAgICAgICAgICAgICAgY2FzZSBDRE1JbnN0YW5jZTo6U2Vzc2lvbkxvYWRGYWlsdXJl
OjpPdGhlcjoKQEAgLTMxNCw3ICszMTQsNyBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lvbjo6bG9hZChj
b25zdCBTdHJpbmcmIHNlc3Npb25JZCwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taQogICAg
ICAgICAgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXMsIGtub3duS2V5cyA9IFdURk1v
dmUoa25vd25LZXlzKSwgZXhwaXJhdGlvbiA9IFdURk1vdmUoZXhwaXJhdGlvbiksIG1lc3NhZ2Ug
PSBXVEZNb3ZlKG1lc3NhZ2UpLCBzYW5pdGl6ZWRTZXNzaW9uSWQsIHN1Y2NlZWRlZCwgcHJvbWlz
ZSA9IFdURk1vdmUocHJvbWlzZSldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIC8vIDgu
OS4xLiBJZiBhbnkgb2YgdGhlIHByZWNlZGluZyBzdGVwcyBmYWlsZWQsIHJlamVjdCBwcm9taXNl
IHdpdGggYSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbmFtZS4KICAgICAgICAgICAgICAgICBpZiAo
c3VjY2VlZGVkID09IENETUluc3RhbmNlOjpTdWNjZXNzVmFsdWU6OkZhaWxlZCkgewotICAgICAg
ICAgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAg
ICAgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCkBAIC0zNTMsNyArMzUz
LDcgQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OnVwZGF0ZShjb25zdCBCdWZmZXJTb3VyY2UmIHJl
c3BvbnNlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYKICAgICAvLyAxLiBJZiB0aGlzIG9iamVjdCBp
cyBjbG9zZWQsIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBhbiBJbnZhbGlkU3RhdGVF
cnJvci4KICAgICAvLyAyLiBJZiB0aGlzIG9iamVjdCdzIGNhbGxhYmxlIHZhbHVlIGlzIGZhbHNl
LCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYW4gSW52YWxpZFN0YXRlRXJyb3IuCiAg
ICAgaWYgKG1fY2xvc2VkIHx8ICFtX2NhbGxhYmxlKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVj
dChJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkU3Rh
dGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2
b2lkIE1lZGlhS2V5U2Vzc2lvbjo6Y2xvc2UoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNl
KQogCiAgICAgLy8gMy4gSWYgc2Vzc2lvbidzIGNhbGxhYmxlIHZhbHVlIGlzIGZhbHNlLCByZXR1
cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYW4gSW52YWxpZFN0YXRlRXJyb3IuCiAgICAgaWYg
KCFtX2NhbGxhYmxlKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX1NUQVRFX0VS
Uik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lv
bjo6cmVtb3ZlKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKICAgICAvLyAxLiBJZiB0
aGlzIG9iamVjdCBpcyBjbG9zZWQsIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCBhbiBJ
bnZhbGlkU3RhdGVFcnJvci4KICAgICAvLyAyLiBJZiB0aGlzIG9iamVjdCdzIGNhbGxhYmxlIHZh
bHVlIGlzIGZhbHNlLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYW4gSW52YWxpZFN0
YXRlRXJyb3IuCiAgICAgaWYgKG1fY2xvc2VkIHx8ICFtX2NhbGxhYmxlKSB7Ci0gICAgICAgIHBy
b21pc2UtPnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21pc2UtPnJlamVj
dChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU1OSw3
ICs1NTksNyBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lvbjo6cmVtb3ZlKFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSkKIAogICAgICAgICAgICAgICAgIC8vIDQuNS4zLiBJZiBhbnkgb2YgdGhl
IHByZWNlZGluZyBzdGVwcyBmYWlsZWQsIHJlamVjdCBwcm9taXNlIHdpdGggYSBuZXcgRE9NRXhj
ZXB0aW9uIHdob3NlIG5hbWUgaXMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIG5hbWUuCiAgICAgICAg
ICAgICAgICAgaWYgKHN1Y2NlZWRlZCA9PSBDRE1JbnN0YW5jZTo6U3VjY2Vzc1ZhbHVlOjpGYWls
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5PVF9TVVBQT1JURURf
RVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5vdFN1cHBvcnRlZEVy
cm9yKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtl
eVN5c3RlbUFjY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U3lzdGVtQWNjZXNzLmNwcAppbmRleCBhODcxZTRlNzZmNGRiOWRjNDY1YzRhMTE2
NWU3NzUwYzNlZDFmYmVmLi5kZDQ4NzZiNmM1M2MxODM2NDM1MTAyY2MzYzE4ZDFjZmU3ZjFhYWJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlh
S2V5U3lzdGVtQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRl
ZG1lZGlhL01lZGlhS2V5U3lzdGVtQWNjZXNzLmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIE1l
ZGlhS2V5U3lzdGVtQWNjZXNzOjpjcmVhdGVNZWRpYUtleXMoUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlKQogICAgICAgICAvLyAyLjUuIExldCBpbnN0YW5jZSBiZSBhIG5ldyBpbnN0YW5j
ZSBvZiB0aGUgS2V5IFN5c3RlbSBpbXBsZW1lbnRhdGlvbiByZXByZXNlbnRlZCBieSB0aGlzIG9i
amVjdCdzIGNkbSBpbXBsZW1lbnRhdGlvbiB2YWx1ZS4KICAgICAgICAgYXV0byBpbnN0YW5jZSA9
IG1faW1wbGVtZW50YXRpb24tPmNyZWF0ZUluc3RhbmNlKCk7CiAgICAgICAgIGlmICghaW5zdGFu
Y2UpIHsKLSAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7Cisg
ICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcAppbmRleCBjOGJjNWFlMjliYjEzOTRiMDc1MjJi
YTUwYmQxNDBjMWEzNDE0NzA3Li5iODcxMDNjNDliZjg0NWFlY2UwZjNkNmE2M2IxNTZmZWJiN2Iz
ZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01l
ZGlhS2V5cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9N
ZWRpYUtleXMuY3BwCkBAIC01NywxMSArNTcsMTEgQEAgRXhjZXB0aW9uT3I8UmVmPE1lZGlhS2V5
U2Vzc2lvbj4+IE1lZGlhS2V5czo6Y3JlYXRlU2Vzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXgK
ICAgICAvLyBXaGVuIHRoaXMgbWV0aG9kIGlzIGludm9rZWQsIHRoZSB1c2VyIGFnZW50IG11c3Qg
cnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgICAgLy8gMS4gSWYgdGhpcyBvYmplY3QncyBzdXBw
b3J0ZWQgc2Vzc2lvbiB0eXBlcyB2YWx1ZSBkb2VzIG5vdCBjb250YWluIHNlc3Npb25UeXBlLCB0
aHJvdyBbV2ViSURMXSBhIE5vdFN1cHBvcnRlZEVycm9yLgogICAgIGlmICghbV9zdXBwb3J0ZWRT
ZXNzaW9uVHlwZXMuY29udGFpbnMoc2Vzc2lvblR5cGUpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbihOb3RTdXBw
b3J0ZWRFcnJvcik7CiAKICAgICAvLyAyLiBJZiB0aGUgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qg
c3VwcG9ydCBNZWRpYUtleVNlc3Npb24gb3BlcmF0aW9ucyBpbiB0aGUgY3VycmVudCBzdGF0ZSwg
dGhyb3cgW1dlYklETF0gYW4gSW52YWxpZFN0YXRlRXJyb3IuCiAgICAgaWYgKCFtX2ltcGxlbWVu
dGF0aW9uLT5zdXBwb3J0c1Nlc3Npb25zKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24oSU5W
QUxJRF9TVEFURV9FUlIpOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uKEludmFsaWRTdGF0ZUVy
cm9yKTsKIAogICAgIC8vIDMuIExldCBzZXNzaW9uIGJlIGEgbmV3IE1lZGlhS2V5U2Vzc2lvbiBv
YmplY3QsIGFuZCBpbml0aWFsaXplIGl0IGFzIGZvbGxvd3M6CiAgICAgLy8gTk9URTogQ29udGlu
dWVkIGluIE1lZGlhS2V5U2Vzc2lvbi4KQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBNZWRpYUtleXM6
OnNldFNlcnZlckNlcnRpZmljYXRlKGNvbnN0IEJ1ZmZlclNvdXJjZSYgc2VydmVyQ2VydGlmaWNh
dGUsIFJlZjwKICAgICAgICAgLy8gNS4xLiBVc2UgdGhpcyBvYmplY3QncyBjZG0gaW5zdGFuY2Ug
dG8gcHJvY2VzcyBjZXJ0aWZpY2F0ZS4KICAgICAgICAgaWYgKG1faW5zdGFuY2UtPnNldFNlcnZl
ckNlcnRpZmljYXRlKFdURk1vdmUoY2VydGlmaWNhdGUpKSA9PSBDRE1JbnN0YW5jZTo6RmFpbGVk
KSB7CiAgICAgICAgICAgICAvLyA1LjIuIElmIHRoZSBwcmVjZWRpbmcgc3RlcCBmYWlsZWQsIHJl
c29sdmUgcHJvbWlzZSB3aXRoIGEgbmV3IERPTUV4Y2VwdGlvbiB3aG9zZSBuYW1lIGlzIHRoZSBh
cHByb3ByaWF0ZSBlcnJvciBuYW1lLgotICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFM
SURfU1RBVEVfRVJSKTsKKyAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkU3RhdGVF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9OYXZpZ2F0b3JFTUUuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9OYXZpZ2F0b3JFTUUuY3BwCmluZGV4
IDBiYmU5Zjk2ZDk2MDY3MmQ4YzRhYTRiZjQzZDExNjk4Mjc4MTUyMmUuLmQ5NDVlNzExNzhjMjhi
N2YyOWQ0M2Q0M2MyYzM4ZjEwZThlNDZjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW5jcnlwdGVkbWVkaWEvTmF2aWdhdG9yRU1FLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL05hdmlnYXRvckVNRS5jcHAKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBOYXZpZ2F0b3JFTUU6OnJlcXVlc3RNZWRpYUtleVN5c3RlbUFjY2VzcyhOYXZpZ2F0
b3ImLCBEb2N1bWVudCYgZG9jdW1lbnQsIGMKICAgICAgICAgLy8gNi4xLiBJZiBrZXlTeXN0ZW0g
aXMgbm90IG9uZSBvZiB0aGUgS2V5IFN5c3RlbXMgc3VwcG9ydGVkIGJ5IHRoZSB1c2VyIGFnZW50
LCByZWplY3QgcHJvbWlzZSB3aXRoIGEgTm90U3VwcG9ydGVkRXJyb3IuCiAgICAgICAgIC8vICAg
ICAgU3RyaW5nIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgIGlmICghQ0RN
OjpzdXBwb3J0c0tleVN5c3RlbShrZXlTeXN0ZW0pKSB7Ci0gICAgICAgICAgICBwcm9taXNlLT5y
ZWplY3QoTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KE5v
dFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0x
MDUsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgdHJ5TmV4dFN1cHBvcnRlZENvbmZpZ3VyYXRpb24o
UmVmUHRyPENETT4mJiBpbXBsZW1lbnRhdGlvbiwgVmVjdG9yPE0KIAogCiAgICAgLy8gNi40LiBS
ZWplY3QgcHJvbWlzZSB3aXRoIGEgTm90U3VwcG9ydGVkRXJyb3IuCi0gICAgcHJvbWlzZS0+cmVq
ZWN0KE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICBwcm9taXNlLT5yZWplY3QoTm90U3VwcG9ydGVk
RXJyb3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9XZWJLaXRNZWRpYUtleVNlc3Np
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvV2Vi
S2l0TWVkaWFLZXlTZXNzaW9uLmNwcAppbmRleCAyMmVhMjQzNDY2OGFlYTA4MDEyN2UwZjAwN2Q5
NDkzODllNjVhOTRjLi4yODUxNTA2NTA3NDNkZGQ3MWUyYTdmNWMxZGI0YjJhNDcxM2JiNGMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9X
ZWJLaXRNZWRpYUtleVNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5j
cnlwdGVkbWVkaWEvbGVnYWN5L1dlYktpdE1lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTEzNCwxMCAr
MTM0LDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYktpdE1lZGlhS2V5U2Vzc2lvbjo6dXBkYXRl
KFJlZjxVaW50OEFycmF5PiYmIGtleSkKIHsKICAgICAvLyBGcm9tIDxodHRwOi8vZHZjcy53My5v
cmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS90aXAvZW5jcnlwdGVkLW1lZGlhL2VuY3J5cHRlZC1t
ZWRpYS5odG1sI2RvbS1hZGRrZXk+OgogICAgIC8vIFRoZSBhZGRLZXkoa2V5KSBtZXRob2QgbXVz
dCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAvLyAxLiBJZiB0aGUgZmlyc3Qgb3Igc2Vj
b25kIGFyZ3VtZW50IFtzaWNdIGlzIGFuIGVtcHR5IGFycmF5LCB0aHJvdyBhbiBJTlZBTElEX0FD
Q0VTU19FUlIuCisgICAgLy8gMS4gSWYgdGhlIGZpcnN0IG9yIHNlY29uZCBhcmd1bWVudCBbc2lj
XSBpcyBhbiBlbXB0eSBhcnJheSwgdGhyb3cgYW4gSW52YWxpZEFjY2Vzc0Vycm9yLgogICAgIC8v
IE5PVEU6IHRoZSByZWZlcmVuY2UgdG8gYSAic2Vjb25kIGFyZ3VtZW50IiBpcyBhIHNwZWMgYnVn
LgogICAgIGlmICgha2V5LT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAKICAgICAvLyAyLiBTY2hlZHVsZSBhIHRhc2sgdG8gaGFuZGxlIHRoZSBj
YWxsLCBwcm92aWRpbmcga2V5LgogICAgIG1fcGVuZGluZ0tleXMuYXBwZW5kKFdURk1vdmUoa2V5
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xl
Z2FjeS9XZWJLaXRNZWRpYUtleXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9sZWdhY3kvV2ViS2l0TWVkaWFLZXlzLmNwcAppbmRleCBjNzY1NTFmOGU5YTJlZmYx
OTc1ZTE2Njc3NTBhZWExYTk1MDhhMjkwLi5kOWQ5YjExMTZmMGQwYjM3NjRkMjE0ZjM0NjZkNTll
Mzg5MmYzZjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL2xlZ2FjeS9XZWJLaXRNZWRpYUtleXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5L1dlYktpdE1lZGlhS2V5cy5jcHAKQEAgLTM4LDEzICsz
OCwxMyBAQCBFeGNlcHRpb25PcjxSZWY8V2ViS2l0TWVkaWFLZXlzPj4gV2ViS2l0TWVkaWFLZXlz
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZQogICAgIC8vIEZyb20gPGh0dHA6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9lbmNyeXB0ZWQtbWVkaWEvZW5jcnlw
dGVkLW1lZGlhLmh0bWwjZG9tLW1lZGlhLWtleXMtY29uc3RydWN0b3I+OgogICAgIC8vIFRoZSBN
ZWRpYUtleXMoa2V5U3lzdGVtKSBjb25zdHJ1Y3RvciBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0
ZXBzOgogCi0gICAgLy8gMS4gSWYga2V5U3lzdGVtIGlzIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5n
LCB0aHJvdyBhbiBJTlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KKyAgICAvLyAxLiBJZiBrZXlTeXN0ZW0gaXMgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcs
IHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0
ZXBzLgogICAgIGlmIChrZXlTeXN0ZW0uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIC8vIDIuIElmIGtleVN5c3RlbSBpcyBub3Qgb25l
IG9mIHRoZSB1c2VyIGFnZW50J3Mgc3VwcG9ydGVkIEtleSBTeXN0ZW1zLCB0aHJvdyBhIE5PVF9T
VVBQT1JURURfRVJSIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyAyLiBJZiBrZXlTeXN0
ZW0gaXMgbm90IG9uZSBvZiB0aGUgdXNlciBhZ2VudCdzIHN1cHBvcnRlZCBLZXkgU3lzdGVtcywg
dGhyb3cgYSBOb3RTdXBwb3J0ZWRFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAgaWYg
KCFDRE06OnN1cHBvcnRzS2V5U3lzdGVtKGtleVN5c3RlbSkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIDMuIExldCBjZG0gYmUgdGhlIGNvbnRlbnQg
ZGVjcnlwdGlvbiBtb2R1bGUgY29ycmVzcG9uZGluZyB0byBrZXlTeXN0ZW0uCiAgICAgLy8gNC4g
TG9hZCBjZG0gaWYgbmVjZXNzYXJ5LgpAQCAtNzksMTggKzc5LDE4IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxXZWJLaXRNZWRpYUtleVNlc3Npb24+PiBXZWJLaXRNZWRpYUtleXM6OmNyZWF0ZVNlc3Npb24o
U2NyaXB0RXhlCiAgICAgLy8gVGhlIGNyZWF0ZVNlc3Npb24odHlwZSwgaW5pdERhdGEpIG1ldGhv
ZCBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgIC8vIE5vdGU6IFRoZSBjb250ZW50
cyBvZiBpbml0RGF0YSBhcmUgY29udGFpbmVyLXNwZWNpZmljIEluaXRpYWxpemF0aW9uIERhdGEu
CiAKLSAgICAvLyAxLiBJZiBjb250ZW50VHlwZSBpcyBudWxsIG9yIGFuIGVtcHR5IHN0cmluZywg
dGhyb3cgYW4gSU5WQUxJRF9BQ0NFU1NfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3Rl
cHMuCisgICAgLy8gMS4gSWYgY29udGVudFR5cGUgaXMgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcs
IHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0
ZXBzLgogICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAvLyAyLiBJZiBpbml0RGF0YSBpcyBhbiBlbXB0eSBhcnJh
eSwgdGhyb3cgYW4gSU5WQUxJRF9BQ0NFU1NfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ug
c3RlcHMuCisgICAgLy8gMi4gSWYgaW5pdERhdGEgaXMgYW4gZW1wdHkgYXJyYXksIHRocm93IGFu
IEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAg
IGlmICghaW5pdERhdGEtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNj
ZXNzRXJyb3IgfTsKIAogICAgIC8vIDMuIElmIHR5cGUgY29udGFpbnMgYSBNSU1FIHR5cGUgdGhh
dCBpcyBub3Qgc3VwcG9ydGVkIG9yIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGtleVN5c3RlbSwg
dGhyb3cKLSAgICAvLyBhIE5PVF9TVVBQT1JURURfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhl
c2Ugc3RlcHMuCisgICAgLy8gYSBOb3RTdXBwb3J0ZWRFcnJvciBleGNlcHRpb24gYW5kIGFib3J0
IHRoZXNlIHN0ZXBzLgogICAgIGlmICghbV9jZG0tPnN1cHBvcnRzTUlNRVR5cGUodHlwZSkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIDQuIENyZWF0
ZSBhIG5ldyBNZWRpYUtleVNlc3Npb24gb2JqZWN0LgogICAgIC8vIDQuMSBMZXQgdGhlIGtleVN5
c3RlbSBhdHRyaWJ1dGUgYmUga2V5U3lzdGVtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5LmgKaW5kZXggZmNiYTJkNzgxMDdhMTdiNTExMjRlMjMyYjAyMDRjMDdhNjRhMWZi
OS4uZWJhZmM5Yjk5ZmIwZDVhYTJkMjVjNjczYzNiN2FkYWFmMWYxMGRkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGJsb2IoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGpzb24oRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmKTsKICAgICB2b2lkIHRleHQoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmKTsKLSAgICB2b2lkIGZvcm1EYXRhKEZldGNoQm9keU93bmVyJiwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKSB7IHByb21pc2UuZ2V0KCkucmVqZWN0KE5PVF9TVVBQ
T1JURURfRVJSKTsgfQorICAgIHZvaWQgZm9ybURhdGEoRmV0Y2hCb2R5T3duZXImLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UpIHsgcHJvbWlzZS5nZXQoKS5yZWplY3QoTm90U3VwcG9y
dGVkRXJyb3IpOyB9CiAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAgICAgdm9pZCBjb25zdW1l
QXNTdHJlYW0oRmV0Y2hCb2R5T3duZXImLCBGZXRjaFJlc3BvbnNlU291cmNlJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCmluZGV4IGFmNzFl
MWM0MzhmZjQ1NTVlMWIwNTQ3NDhmZGNmYTNlMjdjZWQ4MGQuLjY1MGZhYWI0MTliODQwMDI4OWY2
OThkMDY4MGU0MWMyYWE1Nzk1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0
Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBGZXRjaEJvZHlP
d25lcjo6Zm9ybURhdGEoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogdm9pZCBGZXRj
aEJvZHlPd25lcjo6anNvbihSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7CiAgICAg
aWYgKGlzQm9keU51bGwoKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3QoU1lOVEFYX0VSUik7
CisgICAgICAgIHByb21pc2UtPnJlamVjdChTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKGlzRGlzdHVyYmVkT3JMb2NrZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggOGYxN2I5YTQ2OTE1Mjg5
M2I4NTNiMmI1YTcyNzU1MjE3YWFlOWRhMi4uNzZkNTM2ZGFkYjUxMTVlNGRjY2QzZjJhZjQ0ODI3
ZmM0NmFhMTA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+
PiBJREJDdXJzb3I6OnVwZGF0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2Fj
dGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoc291cmNlc0Rl
bGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBU
aGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVs
ZXRlZC4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Is
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6
IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBk
ZWxldGVkLiIpIH07CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRyYW5z
YWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0xMjAsMTAgKzEyMCwxMCBA
QCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkN1cnNvcjo6dXBkYXRlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSZWFk
b25seUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJ
REJDdXJzb3InOiBUaGUgcmVjb3JkIG1heSBub3QgYmUgdXBkYXRlZCBpbnNpZGUgYSByZWFkLW9u
bHkgdHJhbnNhY3Rpb24uIikgfTsKIAogICAgIGlmICghbV9nb3RWYWx1ZSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5nIGl0
ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIikgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5nIGl0ZXJh
dGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIikgfTsKIAogICAgIGlmICghaXNLZXlD
dXJzb3JXaXRoVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RB
VEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJD
dXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1cnNvci4iKSB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYSBrZXkgY3Vyc29y
LiIpIH07CiAKICAgICBhdXRvJiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7
CiAgICAgYXV0byYgb3B0aW9uYWxLZXlQYXRoID0gb2JqZWN0U3RvcmUuaW5mbygpLmtleVBhdGgo
KTsKQEAgLTE1Miw3ICsxNTIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJDdXJzb3I6OmFkdmFu
Y2UodW5zaWduZWQgY291bnQpCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBlZmZlY3Rp
dmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgp
KTsKIAogICAgIGlmICghbV9yZXF1ZXN0KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
VHlwZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAn
SURCQ3Vyc29yJzogQSBjb3VudCBhcmd1bWVudCB3aXRoIHZhbHVlIDAgKHplcm8pIHdhcyBzdXBw
bGllZCwgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iKSB9OwpAQCAtMTYxLDEwICsxNjEsMTAgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vyc29yOjphZHZhbmNlKHVuc2lnbmVkIGNvdW50KQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRy
YW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CiAKICAgICBpZiAoc291cmNl
c0RlbGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJS
LCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29y
JzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVu
IGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vy
c29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBi
ZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmICghbV9nb3RWYWx1ZSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVy
YXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnYWR2YW5jZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0
ZWQgb3IgaGFzIGl0ZXJhdGVkIHBhc3QgaXRzIGVuZC4iKSB9OwogCiAgICAgbV9nb3RWYWx1ZSA9
IGZhbHNlOwogCkBAIC0xNzksMTcgKzE3OSwxNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJDdXJz
b3I6OmNvbnRpbnVlUHJpbWFyeUtleShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGtleVZhbAog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZVByaW1hcnlLZXknIG9uICdJREJD
dXJzb3InOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIikgfTsKIAog
ICAgIGlmIChzb3VyY2VzRGVsZXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVl
UHJpbWFyeUtleScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0
aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnY29udGludWVQcmltYXJ5S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNv
dXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAog
ICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJj
ZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtleScgb24gJ0lEQkN1
cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2UgaXMgbm90IGFuIGluZGV4LiIpIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtleScgb24gJ0lEQkN1cnNvcic6IFRoZSBj
dXJzb3IncyBzb3VyY2UgaXMgbm90IGFuIGluZGV4LiIpIH07CiAKICAgICBhdXRvIGRpcmVjdGlv
biA9IG1faW5mby5jdXJzb3JEaXJlY3Rpb24oKTsKICAgICBpZiAoZGlyZWN0aW9uICE9IEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0ICYmIGRpcmVjdGlvbiAhPSBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbjo6UHJldikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmlt
YXJ5S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIGRpcmVjdGlvbiBtdXN0IGJlIGVp
dGhlciBcIm5leHRcIiBvciBcInByZXZcIi4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdj
b250aW51ZVByaW1hcnlLZXknIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3MgZGlyZWN0aW9u
IG11c3QgYmUgZWl0aGVyIFwibmV4dFwiIG9yIFwicHJldlwiLiIpIH07CiAKICAgICBpZiAoIW1f
Z290VmFsdWUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmltYXJ5S2V5JyBvbiAn
SURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQg
cGFzdCBpdHMgZW5kLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmltYXJ5
S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMg
aXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpIH07CiAKICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBz
Y3JpcHRWYWx1ZVRvSURCS2V5KHN0YXRlLCBrZXlWYWx1ZSk7CiAgICAgaWYgKCFrZXktPmlzVmFs
aWQoKSkKQEAgLTIzNywxNiArMjM3LDE2IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElEQkN1cnNvcjo6
Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRhJiBrZXkpCiAgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJh
c2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmICghbV9yZXF1ZXN0KQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uKCku
aXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJ
REJDdXJzb3InOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIikgfTsK
IAogICAgIGlmIChzb3VyY2VzRGVsZXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRp
bnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2Jq
ZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdj
b250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZl
IG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fZ290VmFs
dWUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUg
Y3Vyc29yIGlzIGJlaW5nIGl0ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIikg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBj
dXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQgb3IgaGFzIGl0ZXJhdGVkIHBhc3QgaXRzIGVuZC4iKSB9
OwogCiAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIWtleS5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBEYXRhRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxp
ZCBrZXkuIikgfTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBFeGNlcHRpb25PcjxSZWY8V2ViQ29yZTo6
SURCUmVxdWVzdD4+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZQog
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFu
c2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoc291cmNl
c0RlbGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJS
LCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3In
OiBUaGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4g
ZGVsZXRlZC4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNv
cic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVl
biBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRy
YW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0zMDEsMTAgKzMwMSwx
MCBAQCBFeGNlcHRpb25PcjxSZWY8V2ViQ29yZTo6SURCUmVxdWVzdD4+IElEQkN1cnNvcjo6ZGVs
ZXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
UmVhZG9ubHlFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBv
biAnSURCQ3Vyc29yJzogVGhlIHJlY29yZCBtYXkgbm90IGJlIGRlbGV0ZWQgaW5zaWRlIGEgcmVh
ZC1vbmx5IHRyYW5zYWN0aW9uLiIpIH07CiAKICAgICBpZiAoIW1fZ290VmFsdWUpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWlu
ZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBp
dGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpIH07CiAKICAgICBpZiAoIWlz
S2V5Q3Vyc29yV2l0aFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElE
X1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAn
SURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBhIGtleSBjdXJzb3IuIikgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1
cnNvci4iKSB9OwogCiAgICAgYXV0byByZXN1bHQgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLmRl
bGV0ZUZ1bmN0aW9uKHN0YXRlLCBtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKTsKICAgICBpZiAo
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IGE5NTQxYTAwMDZmZGNjOWRmZTgzOWMzMGM2NjY2
MTVmODcyMDFkMDAuLmE4MjQxYTM3NjkxODMwMGFlNmU0ODJlMTNjNGFjNDJkNTVjNzdhNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAK
QEAgLTEzOSw3ICsxMzksNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+PiBJREJE
YXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYQogICAgIEFTU0VSVCgh
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24t
PmlzVmVyc2lvbkNoYW5nZSgpKTsKIAogICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24pCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRh
YmFzZSc6IFRoZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hhbmdlIHRyYW5z
YWN0aW9uLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9u
ICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hh
bmdlIHRyYW5zYWN0aW9uLiIpIH07CiAKICAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLT5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25J
bmFjdGl2ZUVycm9yIH07CkBAIC0xNDksMTAgKzE0OSwxMCBAQCBFeGNlcHRpb25PcjxSZWY8SURC
T2JqZWN0U3RvcmU+PiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYQogCiAgICAgYXV0byYga2V5UGF0aCA9IHBhcmFtZXRlcnMua2V5UGF0aDsKICAgICBpZiAo
a2V5UGF0aCAmJiAhaXNJREJLZXlQYXRoVmFsaWQoa2V5UGF0aC52YWx1ZSgpKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUga2V5UGF0aCBv
cHRpb24gaXMgbm90IGEgdmFsaWQga2V5IHBhdGguIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVh
dGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGtleVBhdGggb3B0aW9uIGlzIG5v
dCBhIHZhbGlkIGtleSBwYXRoLiIpIH07CiAKICAgICBpZiAoa2V5UGF0aCAmJiBwYXJhbWV0ZXJz
LmF1dG9JbmNyZW1lbnQgJiYgKChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0
aC52YWx1ZSgpKSAmJiBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgudmFsdWUoKSkuaXNFbXB0eSgp
KSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoLnZhbHVl
KCkpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJE
YXRhYmFzZSc6IFRoZSBhdXRvSW5jcmVtZW50IG9wdGlvbiB3YXMgc2V0IGJ1dCB0aGUga2V5UGF0
aCBvcHRpb24gd2FzIGVtcHR5IG9yIGFuIGFycmF5LiIpIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgYXV0b0luY3JlbWVu
dCBvcHRpb24gd2FzIHNldCBidXQgdGhlIGtleVBhdGggb3B0aW9uIHdhcyBlbXB0eSBvciBhbiBh
cnJheS4iKSB9OwogCiAgICAgLy8gSW5zdGFsbCB0aGUgbmV3IE9iamVjdFN0b3JlIGludG8gdGhl
IGNvbm5lY3Rpb24ncyBtZXRhZGF0YS4KICAgICBhdXRvIGluZm8gPSBtX2luZm8uY3JlYXRlTmV3
T2JqZWN0U3RvcmUobmFtZSwgV1RGTW92ZShrZXlQYXRoKSwgcGFyYW1ldGVycy5hdXRvSW5jcmVt
ZW50KTsKQEAgLTE2OCw3ICsxNjgsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCVHJhbnNhY3Rpb24+
PiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU3RyaW5nT3JWZWN0b3JPZlN0cmluZwogICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9j
bG9zZVBlbmRpbmcpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJE
YXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIGNsb3NpbmcuIikgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFi
YXNlIGNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKSB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2Jq
ZWN0U3RvcmVzOwogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+
PihzdG9yZU5hbWVzKSkKQEAgLTE3NywxMyArMTc3LDEzIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJU
cmFuc2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3Ry
aW5nCiAgICAgICAgIG9iamVjdFN0b3Jlcy5hcHBlbmQoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+
KHN0b3JlTmFtZXMpKSk7CiAKICAgICBpZiAob2JqZWN0U3RvcmVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzdG9y
ZU5hbWVzIHBhcmFtZXRlciB3YXMgZW1wdHkuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
dHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzdG9yZU5hbWVzIHBhcmFtZXRlciB3
YXMgZW1wdHkuIikgfTsKIAogICAgIGlmIChtb2RlICE9IElEQlRyYW5zYWN0aW9uTW9kZTo6UmVh
ZG9ubHkgJiYgbW9kZSAhPSBJREJUcmFuc2FjdGlvbk1vZGU6OlJlYWR3cml0ZSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCiAgICAgaWYgKG1fdmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uICYmICFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aXNGaW5pc2hlZE9y
RmluaXNoaW5nKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJE
YXRhYmFzZSc6IEEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24gaXMgcnVubmluZy4iKSB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBBIHZl
cnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcuIikgfTsKIAogICAgIC8vIEl0IGlz
IHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBzdG9yZSBu
YW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAogICAgIC8vIHNvIHdlIG5lZWQg
dG8gcHV0IHRoZW0gYWxsIGluIGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0LgpAQCAtMTk3LDcg
KzE5Nyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0
cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5nCiAgICAgZm9yIChhdXRvJiBvYmplY3RT
dG9yZU5hbWUgOiBvYmplY3RTdG9yZXMpIHsKICAgICAgICAgaWYgKG1faW5mby5oYXNPYmplY3RT
dG9yZShvYmplY3RTdG9yZU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogT25lIG9mIHRoZSBzcGVjaWZp
ZWQgb2JqZWN0IHN0b3JlcyB3YXMgbm90IGZvdW5kLiIpIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RGb3VuZEVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd0
cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogT25lIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0
IHN0b3JlcyB3YXMgbm90IGZvdW5kLiIpIH07CiAgICAgfQogCiAgICAgYXV0byBpbmZvID0gSURC
VHJhbnNhY3Rpb25JbmZvOjpjbGllbnRUcmFuc2FjdGlvbihtX2Nvbm5lY3Rpb25Qcm94eS5nZXQo
KSwgb2JqZWN0U3RvcmVzLCBtb2RlKTsKQEAgLTIxOSwxMyArMjE5LDEzIEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVj
dFN0b3JlTmFtZSkKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElE
KCkpOwogCiAgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFi
YXNlIGlzIG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIikgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzog
VGhlIGRhdGFiYXNlIGlzIG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24u
IikgfTsKIAogICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IgfTsK
IAogICAgIGlmICghbV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIHNw
ZWNpZmllZCBvYmplY3Qgc3RvcmUgd2FzIG5vdCBmb3VuZC4iKSB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnZGVsZXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzcGVjaWZpZWQgb2Jq
ZWN0IHN0b3JlIHdhcyBub3QgZm91bmQuIikgfTsKIAogICAgIG1faW5mby5kZWxldGVPYmplY3RT
dG9yZShvYmplY3RTdG9yZU5hbWUpOwogICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5k
ZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAppbmRleCA3NDJlN2U5NDhjMDJiYTdjNjIw
ZDVjM2MzNjc5NzE0MzU3MzJjOGVjLi5iODhhYzM0MDFhNWYwMTkyNmE2YzYwMTRjNTBhN2FlMTgz
ZjJhN2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmNwcApAQCAtOTAsNyArOTAsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCT3BlbkRCUmVxdWVz
dD4+IElEQkZhY3Rvcnk6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCBBU0NJSUxpdGVyYWwoIklEQkZhY3Rvcnku
b3BlbigpIGNhbGxlZCB3aXRob3V0IGEgZGF0YWJhc2UgbmFtZSIpIH07CiAKICAgICBpZiAoc2hv
dWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNFQ1VSSVRZX0VSUiwgQVNDSUlMaXRlcmFsKCJJREJGYWN0b3J5Lm9wZW4oKSBjYWxs
ZWQgaW4gYW4gaW52YWxpZCBzZWN1cml0eSBjb250ZXh0IikgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiSURCRmFjdG9yeS5vcGVuKCkg
Y2FsbGVkIGluIGFuIGludmFsaWQgc2VjdXJpdHkgY29udGV4dCIpIH07CiAKICAgICBBU1NFUlQo
Y29udGV4dC5zZWN1cml0eU9yaWdpbigpKTsKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgZGF0
YWJhc2VJZGVudGlmaWVyKG5hbWUsICpjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCksIGNvbnRleHQu
dG9wT3JpZ2luKCkpOwpAQCAtMTEwLDcgKzExMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJPcGVu
REJSZXF1ZXN0Pj4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiSURC
RmFjdG9yeS5kZWxldGVEYXRhYmFzZSgpIGNhbGxlZCB3aXRob3V0IGEgZGF0YWJhc2UgbmFtZSIp
IH07CiAKICAgICBpZiAoc2hvdWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0KSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiwgQVNDSUlMaXRlcmFsKCJJREJG
YWN0b3J5LmRlbGV0ZURhdGFiYXNlKCkgY2FsbGVkIGluIGFuIGludmFsaWQgc2VjdXJpdHkgY29u
dGV4dCIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yLCBBU0NJ
SUxpdGVyYWwoIklEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UoKSBjYWxsZWQgaW4gYW4gaW52YWxp
ZCBzZWN1cml0eSBjb250ZXh0IikgfTsKIAogICAgIEFTU0VSVChjb250ZXh0LnNlY3VyaXR5T3Jp
Z2luKCkpOwogICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBkYXRhYmFzZUlkZW50aWZpZXIobmFt
ZSwgKmNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgY29udGV4dC50b3BPcmlnaW4oKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKaW5kZXggZDcxNzcy
NzdiZDVkOGY5YTI4NzhkODcwZWQwOTJjODc2NjBjNjUyYi4uMmI4MGMxMjZiMmQwMDQ4NzA1Yjdi
Y2UwMTdhNDQzMGZmMTA2YzE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4LmNwcApAQCAtODQsMTMgKzg0LDEzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElE
QkluZGV4OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRo
cmVhZElEKCkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQgcHJvcGVydHkg
J25hbWUnIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBoYXMgYmVlbiBkZWxldGVkLiIpIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFs
KCJGYWlsZWQgc2V0IHByb3BlcnR5ICduYW1lJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggaGFz
IGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgc2V0IHByb3BlcnR5ICduYW1lJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXgn
cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHNldCBwcm9w
ZXJ0eSAnbmFtZScgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4J3Mgb2JqZWN0IHN0b3JlIGhhcyBi
ZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmICghbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigp
LmlzVmVyc2lvbkNoYW5nZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9T
VEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHNldCBwcm9wZXJ0eSAnbmFtZScgb24gJ0lE
QkluZGV4JzogVGhlIGluZGV4J3MgdHJhbnNhY3Rpb24gaXMgbm90IGEgdmVyc2lvbiBjaGFuZ2Ug
dHJhbnNhY3Rpb24uIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQgcHJvcGVydHkgJ25hbWUnIG9uICdJREJJ
bmRleCc6IFRoZSBpbmRleCdzIHRyYW5zYWN0aW9uIGlzIG5vdCBhIHZlcnNpb24gY2hhbmdlIHRy
YW5zYWN0aW9uLiIpIH07CiAKICAgICBpZiAoIW1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5p
c0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQgcHJvcGVydHkgJ25hbWUnIG9uICdJREJJ
bmRleCc6IFRoZSBpbmRleCdzIHRyYW5zYWN0aW9uIGlzIG5vdCBhY3RpdmUuIikgfTsKQEAgLTE1
NSw3ICsxNTUsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpvcGVu
Q3Vyc29yKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBJREJLZXlSYQogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxl
dGVkKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4Jzog
VGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBv
ciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmICghbV9v
YmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBp
bmFjdGl2ZSBvciBmaW5pc2hlZC4iKSB9OwpAQCAtMTg4LDcgKzE4OCw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoRXhlY1N0YXRlJiBleGVj
U3RhdGUsIElEQktlCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3Jl
LnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmICht
X2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdvcGVuS2V5Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3Bl
bktleUN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUg
aGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX29iamVjdFN0b3JlLnRyYW5zYWN0
aW9uKCkuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9u
SW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1
cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlz
aGVkLiIpIH07CkBAIC0yMzAsNyArMjMwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+
PiBJREJJbmRleDo6ZG9Db3VudChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgSURCS2UKICAg
ICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29i
amVjdFN0b3JlLmlzRGVsZXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAn
SURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVk
LiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRoZSBp
bmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlm
ICghcmFuZ2UuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRGF0YUVycm9y
IH07CkBAIC0yNjUsNyArMjY1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJ
bmRleDo6ZG9HZXQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IElEQktleVIKICAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5kYXRhYmFz
ZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0
b3JlLmlzRGVsZXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQkluZGV4
JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0
cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKHJhbmdlLmlz
TnVsbCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IERhdGFFcnJvciB9OwpAQCAtMzAwLDcg
KzMwMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRvR2V0S2V5
KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBJREJLCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJl
YWQoKSA9PSBtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQo
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBpbmRl
eCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0
IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmIChyYW5nZS5pc051bGwpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhRXJyb3IgfTsKQEAgLTMxOCw3ICszMTgsNyBA
QCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRBbGwoRXhlY1N0YXRl
JiBleGVjU3RhdGUsIFJlZlB0cjxJREJLZQogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7
CiAKICAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRz
IG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnZ2V0QWxsJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fb2JqZWN0U3RvcmUudHJhbnNhY3Rp
b24oKS5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25J
bmFjdGl2ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRBbGwnIG9u
ICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKSB9
OwpAQCAtMzQxLDcgKzM0MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5k
ZXg6OmdldEFsbEtleXMoRXhlY1N0YXRlJiBleGVjU3RhdGUsIFJlZlB0cjxJCiAgICAgQVNTRVJU
KGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2Uo
KS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9y
ZS5pc0RlbGV0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRBbGxLZXlzJyBvbiAnSURC
SW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIp
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsS2V5cycgb24gJ0lEQkluZGV4JzogVGhl
IGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAg
aWYgKCFtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsS2V5cycgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0
aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggOGQxNTUwOGE3NDM3
ODIyYjEyNjRhZmU3NTlmY2I1MDUxNjdjZTQ0Yi4uYTkzZjVjMzJlZTVlMWZiNzE3Mjc0NzFiOTdl
ODkwZTE5Yjg3NDZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtOTcsMTAgKzk3LDEwIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IElEQk9iamVjdFN0b3JlOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgc2V0IHByb3BlcnR5ICdu
YW1lJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0
ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBB
U0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQgcHJvcGVydHkgJ25hbWUnIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFt
X3RyYW5zYWN0aW9uLmlzVmVyc2lvbkNoYW5nZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHNldCBwcm9wZXJ0eSAn
bmFtZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSdzIHRyYW5zYWN0aW9u
IGlzIG5vdCBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIpIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgc2V0
IHByb3BlcnR5ICduYW1lJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlJ3Mg
dHJhbnNhY3Rpb24gaXMgbm90IGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIikgfTsKIAog
ICAgIGlmICghbV90cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCBzZXQg
cHJvcGVydHkgJ25hbWUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUncyB0
cmFuc2FjdGlvbiBpcyBub3QgYWN0aXZlLiIpIH07CkBAIC0xNTYsNyArMTU2LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihFeGVjU3Rh
dGUmIGV4ZWNTdGF0ZSwgUmUKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNh
Y3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzog
VGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fdHJhbnNhY3Rpb24uaXNBY3RpdmUo
KSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBA
IC0xODAsNyArMTgwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RT
dG9yZTo6b3BlbktleUN1cnNvcihFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwKICAgICBBU1NFUlQoY3Vy
cmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgp
KTsKIAogICAgIGlmIChtX2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX1NUQVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1
cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxl
dGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQk9i
amVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9u
IGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0yMDQsNyArMjA0LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEV4ZWNTdGF0ZSYgZXhl
Y1N0YXRlLCBKU1ZhbHVlIGsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNh
Y3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2Jq
ZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdn
ZXQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRl
ZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0
aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0yMjIsNyArMjIyLDcgQEAgRXhj
ZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEV4ZWNTdGF0ZSYg
ZXhlY1N0YXRlLCBJREJLZXlSYW4KICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJh
bnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0
ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUg
b2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdnZXQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVs
ZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IgfTsKQEAgLTI0MCw3
ICsyNDAsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpn
ZXRLZXkoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdQogICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAg
ICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RB
VEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRLZXknIG9uICdJREJP
YmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fdHJhbnNhY3Rpb24u
aXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURC
T2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIikg
fTsKQEAgLTI1OCw3ICsyNTgsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9i
amVjdFN0b3JlOjpnZXRLZXkoRXhlY1N0YXRlJiBleGVjU3RhdGUsIElEQktleQogICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZElEKCkpOwogCiAgICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRL
ZXknIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRl
ZC4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1f
dHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5z
YWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0
S2V5JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3Ig
ZmluaXNoZWQuIikgfTsKQEAgLTMwNCw3ICszMDQsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQk9iamVjdFN0b3JlOjpwdXRPckFkZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUgYmVjYXVzZSBpdCBkb2VzIG5v
dCBoYXZlIGEgdmFsaWQgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IikgfTsKIAogICAgIGlmICht
X2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3Jl
OiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBz
dG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJl
ZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IsIEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhl
IHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC0zMTcsNyArMzE3
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6cHV0T3JB
ZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZQogICAgICAgICAvLyBDbGVhciB0aGUgRE9NIGV4
Y2VwdGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0YXJnZXRl
ZCBleGNlcHRpb24uCiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IERBVEFfQ0xPTkVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEFuIG9iamVjdCBjb3VsZCBub3Qg
YmUgY2xvbmVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhQ2xvbmVFcnJv
ciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0
b3JlOiBBbiBvYmplY3QgY291bGQgbm90IGJlIGNsb25lZC4iKSB9OwogICAgIH0KIAogICAgIGJv
b2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IGZhbHNlOwpAQCAtMzI4LDcgKzMyOCw3IEBAIEV4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUKIAogICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmhhc0Jsb2JV
UkxzKCkgJiYgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgewogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MzQ3IC0gU3VwcG9ydCBCbG9icyBpbiBw
cml2YXRlIGJyb3dzaW5nLgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgREFUQV9DTE9ORV9F
UlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RT
dG9yZTogQmxvYlVSTHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiIpIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBEYXRhQ2xvbmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3Rv
cmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBCbG9iVVJMcyBhcmUgbm90IHlldCBzdXBw
b3J0ZWQuIikgfTsKICAgICB9CiAKICAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkKQEAg
LTM3Nyw3ICszNzcsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0
b3JlOjpkb0RlbGV0ZShFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSURCSwogICAgIC8vIEFkZGl0aW9u
YWxseSwgQ2hyb21lIGFuZCBFZGdlIGFncmVlIHdpdGggdGhlIHRlc3QsIGFzIGRvZXMgTGVnYWN5
IElEQiBpbiBXZWJLaXQuCiAgICAgLy8gVW50aWwgdGhpcyBpcyBzb3J0ZWQgb3V0LCB3ZSdsbCBh
Z3JlZSB3aXRoIHRoZSB0ZXN0IGFuZCB0aGUgbWFqb3JpdHkgc2hhcmUgYnJvd3NlcnMuCiAgICAg
aWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJPYmpl
Y3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBz
dG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAoIW1fdHJhbnNhY3Rpb24uaXNB
Y3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCT2Jq
ZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIikgfTsK
QEAgLTQxMSw3ICs0MTEsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVj
dFN0b3JlOjpjbGVhcihFeGVjU3RhdGUmIGV4ZWNTdGF0ZSkKICAgICAvLyBBZGRpdGlvbmFsbHks
IENocm9tZSBhbmQgRWRnZSBhZ3JlZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2VzIExlZ2FjeSBJREIg
aW4gV2ViS2l0LgogICAgIC8vIFVudGlsIHRoaXMgaXMgc29ydGVkIG91dCwgd2UnbGwgYWdyZWUg
d2l0aCB0aGUgdGVzdCBhbmQgdGhlIG1ham9yaXR5IHNoYXJlIGJyb3dzZXJzLgogICAgIGlmICht
X2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY2xlYXInIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NsZWFyJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhh
cyBiZWVuIGRlbGV0ZWQuIikgfTsKIAogICAgIGlmICghbV90cmFuc2FjdGlvbi5pc0FjdGl2ZSgp
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjbGVhcicgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CkBAIC00Mjgs
MTAgKzQyOCwxMCBAQCBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+PiBJREJPYmplY3RTdG9yZTo6
Y3JlYXRlSW5kZXgoRXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJgogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwog
CiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzVmVyc2lvbkNoYW5nZSgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2Ug
aXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKSB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0
YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKSB9Owog
CiAgICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
U1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcg
b24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIp
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFt
X3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Ny
ZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3Rp
dmUuIil9OwpAQCAtNDQwLDEzICs0NDAsMTMgQEAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KEV4ZWNTdGF0ZSYsIGNvbnN0IFN0cmluZyYKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IENvbnN0cmFpbnRFcnJvciwgQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IEFuIGlu
ZGV4IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpIH07CiAKICAgICBp
ZiAoIWlzSURCS2V5UGF0aFZhbGlkKGtleVBhdGgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5k
ZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBrZXlQYXRoIGFyZ3VtZW50IGNvbnRhaW5zIGFu
IGludmFsaWQga2V5IHBhdGguIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgY29udGFpbnMgYW4gaW52YWxp
ZCBrZXkgcGF0aC4iKSB9OwogCiAgICAgaWYgKG5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAogICAgIGlmIChwYXJhbWV0ZXJzLm11bHRpRW50
cnkgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBU
aGUga2V5UGF0aCBhcmd1bWVudCB3YXMgYW4gYXJyYXkgYW5kIHRoZSBtdWx0aUVudHJ5IG9wdGlv
biBpcyB0cnVlLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0aCBhcmd1bWVudCB3YXMgYW4gYXJyYXkgYW5kIHRo
ZSBtdWx0aUVudHJ5IG9wdGlvbiBpcyB0cnVlLiIpIH07CiAKICAgICAvLyBJbnN0YWxsIHRoZSBu
ZXcgSW5kZXggaW50byB0aGUgT2JqZWN0U3RvcmUncyBpbmZvLgogICAgIElEQkluZGV4SW5mbyBp
bmZvID0gbV9pbmZvLmNyZWF0ZU5ld0luZGV4KG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHBhcmFt
ZXRlcnMudW5pcXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOwpAQCAtNDY5LDEzICs0NjksMTMg
QEAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0
IFN0cmluZyYgaW5kZXhOYW1lKQogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFu
c2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKCFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NU
QVRFX0VSUiB9OyAvLyBGSVhNRTogSXMgdGhpcyBjb2RlIHRlc3RlZD8gSXMgaXRldmVuIHJlYWNo
YWJsZT8KKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07IC8v
IEZJWE1FOiBJcyB0aGlzIGNvZGUgdGVzdGVkPyBJcyBpdGV2ZW4gcmVhY2hhYmxlPwogCiAgICAg
aWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdpbmRleCcgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnaW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3Rv
cmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKG1fdHJhbnNhY3Rpb24uaXNGaW5p
c2hlZE9yRmluaXNoaW5nKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NU
QVRFX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5kZXgnIG9uICdJREJP
YmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZC4iKSB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24g
aXMgZmluaXNoZWQuIikgfTsKIAogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2Vk
SW5kZXhMb2NrKTsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZlcmVuY2VkSW5kZXhlcy5maW5k
KGluZGV4TmFtZSk7CkBAIC00ODQsNyArNDg0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4
Pj4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQogCiAgICAg
YXV0byogaW5mbyA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdJbmRleChpbmRleE5hbWUpOwogICAg
IGlmICghaW5mbykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUn
OiBUaGUgc3BlY2lmaWVkIGluZGV4IHdhcyBub3QgZm91bmQuIikgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4IHdhcyBu
b3QgZm91bmQuIikgfTsKIAogICAgIGF1dG8gaW5kZXggPSBzdGQ6Om1ha2VfdW5pcXVlPElEQklu
ZGV4Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaW5mbywgKnRoaXMpOwogCkBAIC01MDEs
MTYgKzUwMSwxNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKG1fZGVs
ZXRlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSLCBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnZGVsZXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qg
c3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlz
VmVyc2lvbkNoYW5nZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNo
YW5nZSB0cmFuc2FjdGlvbi4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4
JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJz
aW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlz
QWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZl
RXJyb3IsICBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVk
LiIpIH07CiAKICAgICBpZiAoIW1faW5mby5oYXNJbmRleChuYW1lKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4
IHdhcyBub3QgZm91bmQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5k
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4IHdhcyBub3QgZm91bmQuIikgfTsK
IAogICAgIGF1dG8qIGluZm8gPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nSW5kZXgobmFtZSk7CiAg
ICAgQVNTRVJUKGluZm8pOwpAQCAtNTU5LDcgKzU1OSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvQ291bnQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIGNv
bnN0CiAgICAgLy8gQWRkaXRpb25hbGx5LCBDaHJvbWUgYW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUg
dGVzdCwgYXMgZG9lcyBMZWdhY3kgSURCIGluIFdlYktpdC4KICAgICAvLyBVbnRpbCB0aGlzIGlz
IHNvcnRlZCBvdXQsIHdlJ2xsIGFncmVlIHdpdGggdGhlIHRlc3QgYW5kIHRoZSBtYWpvcml0eSBz
aGFyZSBicm93c2Vycy4KICAgICBpZiAobV9kZWxldGVkKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J2NvdW50JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9y
LCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKICAgICBpZiAo
IW1fdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFRy
YW5zYWN0aW9uSW5hY3RpdmVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
Y291bnQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBv
ciBmaW5pc2hlZC4iKSB9OwpAQCAtNTc2LDcgKzU3Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEFsbChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgUmVm
UHRyCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0aW9uLmRhdGFiYXNl
KCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2dldEFsbCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QWxsJyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsK
IAogICAgIGlmICghbV90cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdnZXRBbGwnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBp
cyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKSB9OwpAQCAtNTk5LDcgKzU5OSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEFsbEtleXMoRXhlY1N0YXRl
JiBleGVjU3RhdGUsIFJlCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0
aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9kZWxldGVkKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEFsbEtleXMnIG9uICdJREJPYmplY3RTdG9yZSc6IFRo
ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2dldEFsbEtleXMnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFz
IGJlZW4gZGVsZXRlZC4iKSB9OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLmlzQWN0aXZlKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEFsbEtleXMnIG9uICdJREJPYmplY3RT
dG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0
LmNwcAppbmRleCA4NzRiYzJjZmYyZWRlMzM3MmM4ZmY1YzdjZDY4OWIzNDY0OWNjOGQyLi4wYmY2
Zjk0MDk4ZWQ0ODZkMTUwMDYzZDQyNDY3YTA2ZDQ2OGY2MGZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcApAQCAtMTA0
LDcgKzEwNCw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9u
Q2hhbmdlQ29tcGxldGlvbigpCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5U
aHJlYWRJRCgpKTsKICAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOwogCi0gICAgSURC
RXJyb3IgaWRiRXJyb3IoQUJPUlRfRVJSKTsKKyAgICBJREJFcnJvciBpZGJFcnJvcihBYm9ydEVy
cm9yKTsKICAgICBtX2RvbUVycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShpZGJFcnJvci5uYW1lKCks
IGlkYkVycm9yLm1lc3NhZ2UoKSk7CiAgICAgc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCA3
ZjVmZjEzZTg0NWE0MzMzYmM1NGUwNjEyYWIxNTQ1ZGFhYTYxM2IwLi4xZTFiODdkMDUxZWYxNmVl
YjNjNDdiOGVmZGYwZjhmMmY3NTZiODFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIElEQlJlcXVlc3Q6
On5JREJSZXF1ZXN0KCkKIEV4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9uYWw8SURCUmVxdWVzdDo6UmVz
dWx0Pj4gSURCUmVxdWVzdDo6cmVzdWx0KCkgY29uc3QKIHsKICAgICBpZiAoIWlzRG9uZSgpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIHJlYWQgdGhlICdyZXN1bHQnIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVlc3Qn
OiBUaGUgcmVxdWVzdCBoYXMgbm90IGZpbmlzaGVkLiIpIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gcmVhZCB0
aGUgJ3Jlc3VsdCcgcHJvcGVydHkgZnJvbSAnSURCUmVxdWVzdCc6IFRoZSByZXF1ZXN0IGhhcyBu
b3QgZmluaXNoZWQuIikgfTsKIAogICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPElEQlJlcXVlc3Q6
OlJlc3VsdD4geyBtX3Jlc3VsdCB9OwogfQpAQCAtMTY2LDcgKzE2Niw3IEBAIEV4Y2VwdGlvbk9y
PERPTUVycm9yKj4gSURCUmVxdWVzdDo6ZXJyb3IoKSBjb25zdAogICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoIWlzRG9uZSgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIHJlYWQgdGhlICdlcnJvcicgcHJvcGVydHkgZnJvbSAnSURCUmVxdWVzdCc6IFRo
ZSByZXF1ZXN0IGhhcyBub3QgZmluaXNoZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFkIHRoZSAn
ZXJyb3InIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVlc3QnOiBUaGUgcmVxdWVzdCBoYXMgbm90IGZp
bmlzaGVkLiIpIH07CiAKICAgICByZXR1cm4gbV9kb21FcnJvci5nZXQoKTsKIH0KQEAgLTM1Myw3
ICszNTMsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRs
ZXIoKQogCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsK
IAotICAgIGlmIChtX3RyYW5zYWN0aW9uICYmIG1faWRiRXJyb3IuY29kZSgpICE9IEFCT1JUX0VS
UikKKyAgICBpZiAobV90cmFuc2FjdGlvbiAmJiBtX2lkYkVycm9yLmNvZGUoKSAhPSBBYm9ydEVy
cm9yKQogICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01F
cnJvcjo6Y3JlYXRlKCJBYm9ydEVycm9yIiwgQVNDSUlMaXRlcmFsKCJJREJUcmFuc2FjdGlvbiB3
aWxsIGFib3J0IGR1ZSB0byB1bmNhdWdodCBleGNlcHRpb24gaW4gYW4gZXZlbnQgaGFuZGxlciIp
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcAppbmRleCA4NjlhNzQyZDg5ZDUzZjlmZDI2MTk2NWFiOWU3MTY3MjE0MmVj
OGVmLi4xYTk4ZDdmODVmNWVjMWIxOGZhN2YyOTk0MDA5YjAwZDQ5OWM2OTk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBA
IC0xNDYsMTAgKzE0NiwxMCBAQCBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+PiBJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplYwogICAgIEFTU0VSVChj
dXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBp
ZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogCiAgICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ29iamVjdFN0b3JlJyBvbiAnSURCVHJhbnNhY3Rpb24nOiBUaGUgdHJh
bnNhY3Rpb24gZmluaXNoZWQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvYmplY3RTdG9y
ZScgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHRyYW5zYWN0aW9uIGZpbmlzaGVkLiIpIH07CiAK
ICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZE9iamVjdFN0b3JlTG9jayk7CiAK
QEAgLTE2NywxMSArMTY3LDExIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJPYmplY3RTdG9yZT4+IElE
QlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjCiAKICAgICBhdXRv
KiBpbmZvID0gbV9kYXRhYmFzZS0+aW5mbygpLmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9i
amVjdFN0b3JlTmFtZSk7CiAgICAgaWYgKCFpbmZvKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX0ZPVU5EX0VSUiwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0
U3RvcmUnIG9uICdJREJUcmFuc2FjdGlvbic6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdh
cyBub3QgZm91bmQuIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJy
b3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29iamVjdFN0b3JlJyBvbiAnSURC
VHJhbnNhY3Rpb24nOiBUaGUgc3BlY2lmaWVkIG9iamVjdCBzdG9yZSB3YXMgbm90IGZvdW5kLiIp
IH07CiAKICAgICAvLyBWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbnMgYXJlIHNjb3BlZCB0byBl
dmVyeSBvYmplY3Qgc3RvcmUgaW4gdGhlIGRhdGFiYXNlLgogICAgIGlmICghaW5mbyB8fCAoIWZv
dW5kICYmICFpc1ZlcnNpb25DaGFuZ2UoKSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfRk9VTkRfRVJSLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvYmplY3RTdG9y
ZScgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHNwZWNpZmllZCBvYmplY3Qgc3RvcmUgd2FzIG5v
dCBmb3VuZC4iKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwg
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0U3RvcmUnIG9uICdJREJUcmFu
c2FjdGlvbic6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdhcyBub3QgZm91bmQuIikgfTsK
IAogICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQk9iamVjdFN0b3Jl
Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaW5mbywgKnRoaXMpOwogICAgIGF1dG8qIHJh
d09iamVjdFN0b3JlID0gb2JqZWN0U3RvcmUuZ2V0KCk7CkBAIC0yMDgsNyArMjA4LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSURCVHJhbnNhY3Rpb246OmFib3J0KCkKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKGlz
RmluaXNoZWRPckZpbmlzaGluZygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Fib3J0JyBvbiAn
SURCVHJhbnNhY3Rpb24nOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQu
IikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhYm9ydCcgb24gJ0lEQlRyYW5zYWN0aW9uJzog
VGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpIH07CiAKICAgICBpbnRl
cm5hbEFib3J0KCk7CiAKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjph
Ym9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJh
dAogCiAgICAgbV9jdXJyZW50bHlDb21wbGV0aW5nUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgCi0g
ICAgSURCRXJyb3IgZXJyb3IoQUJPUlRfRVJSKTsKKyAgICBJREJFcnJvciBlcnJvcihBYm9ydEVy
cm9yKTsKIAogICAgIGFib3J0SW5Qcm9ncmVzc09wZXJhdGlvbnMoZXJyb3IpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFj
a2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDdlMDM3ZTRkNzJhOTYwN2RmNWE2ZWYzMmM0
M2YwNWQ2YjE0N2JlOWYuLjJmYzY3OTkzZTk4ZjRhOWVhNmM2NTgyMzZjNDMyZDg5MGEwMThmZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC04Miw3ICs4Miw3IEBAIElE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJU
cmFuc2FjdGlvbkluZm8mIGluZm8pCiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbiIpOwogCiAgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNv
bnRhaW5zKGluZm8uaWRlbnRpZmllcigpKSkKLSAgICAgICAgcmV0dXJuIHsgSU5WQUxJRF9TVEFU
RV9FUlIsICJCYWNraW5nIHN0b3JlIGFza2VkIHRvIGNyZWF0ZSB0cmFuc2FjdGlvbiBpdCBhbHJl
YWR5IGhhcyBhIHJlY29yZCBvZiIgfTsKKyAgICAgICAgcmV0dXJuIHsgSW52YWxpZFN0YXRlRXJy
b3IsICJCYWNraW5nIHN0b3JlIGFza2VkIHRvIGNyZWF0ZSB0cmFuc2FjdGlvbiBpdCBhbHJlYWR5
IGhhcyBhIHJlY29yZCBvZiIgfTsKIAogICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBNZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKIApAQCAtMTA4LDcgKzEw
OCw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YWJvcnRUcmFuc2FjdGlvbihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyCiAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJh
bnNhY3Rpb24pCi0gICAgICAgIHJldHVybiB7IElOVkFMSURfU1RBVEVfRVJSLCAiQmFja2luZyBz
dG9yZSBhc2tlZCB0byBhYm9ydCB0cmFuc2FjdGlvbiBpdCBkaWRuJ3QgaGF2ZSByZWNvcmQgb2Yi
IH07CisgICAgICAgIHJldHVybiB7IEludmFsaWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9yZSBh
c2tlZCB0byBhYm9ydCB0cmFuc2FjdGlvbiBpdCBkaWRuJ3QgaGF2ZSByZWNvcmQgb2YiIH07CiAK
ICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKIApAQCAtMTIxLDcgKzEyMSw3IEBAIElEQkVycm9y
IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0CiAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
dGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAg
ICAgIHJldHVybiB7IElOVkFMSURfU1RBVEVfRVJSLCAiQmFja2luZyBzdG9yZSBhc2tlZCB0byBj
b21taXQgdHJhbnNhY3Rpb24gaXQgZGlkbid0IGhhdmUgcmVjb3JkIG9mIiB9OworICAgICAgICBy
ZXR1cm4geyBJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgYXNrZWQgdG8gY29tbWl0
IHRyYW5zYWN0aW9uIGl0IGRpZG4ndCBoYXZlIHJlY29yZCBvZiIgfTsKIAogICAgIHRyYW5zYWN0
aW9uLT5jb21taXQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggOTk1NDJmODlm
NmFlNGNmZjcyMDk3ZjUxZGY4NjFiYjljMjI0ODZkNy4uNWY2ZjYyOTFjNTMwMjUxZWI1NDY2NWZi
YmM5NGNjZTNlMDY3YWNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC05NzgsNyAr
OTc4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKIAogICAgIGF1dG8qIG9iamVjdFN0b3Jl
SW5mbyA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykgewotICAgICAgICBlcnJvciA9IElE
QkVycm9yKElOVkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIk9iamVjdCBzdG9yZSBjYW5u
b3QgYmUgZm91bmQgaW4gdGhlIGJhY2tpbmcgc3RvcmUiKSk7CisgICAgICAgIGVycm9yID0gSURC
RXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiT2JqZWN0IHN0b3JlIGNhbm5v
dCBiZSBmb3VuZCBpbiB0aGUgYmFja2luZyBzdG9yZSIpKTsKICAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggMDExYjgxODk4NTIzNDRmZThlZjdh
NGNlYjk1ZWJmMGEwYTEyNjU4Mi4uYzJjZWZjNjliMDhhZTgwY2E0YjU3M2M5ZjlmM2UxNWRkMjk1
MTMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBNZWRpYVNv
dXJjZTo6c2V0TGl2ZVNlZWthYmxlUmFuZ2UoZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kKQogCiAg
ICAgLy8gSWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIG5vdCAib3BlbiIgdGhlbiB0aHJv
dyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgog
ICAgIGlmICghaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NU
QVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Ig
fTsKIAogICAgIC8vIElmIHN0YXJ0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBlbmQsIHRo
ZW4gdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAg
ICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gZW5kKQpAQCAtMzI3LDcgKzMyNyw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IE1lZGlhU291cmNlOjpjbGVhckxpdmVTZWVrYWJsZVJhbmdlKCkKIAogICAg
IC8vIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBub3QgIm9wZW4iIHRoZW4gdGhyb3cg
YW4gSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAg
ICBpZiAoIWlzT3BlbigpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
CiAgICAgbV9saXZlU2Vla2FibGUgPSBudWxscHRyOwogICAgIHJldHVybiB7IH07CiB9CkBAIC00
NzIsMTMgKzQ3MiwxMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBNZWRpYVNvdXJjZTo6c2V0RHVyYXRp
b24oZG91YmxlIGR1cmF0aW9uKQogCiAgICAgLy8gMi4gSWYgdGhlIHJlYWR5U3RhdGUgYXR0cmli
dXRlIGlzIG5vdCAib3BlbiIgdGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRp
b24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmICghaXNPcGVuKCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDMuIElmIHRoZSB1cGRhdGlu
ZyBhdHRyaWJ1dGUgZXF1YWxzIHRydWUgb24gYW55IFNvdXJjZUJ1ZmZlciBpbiBzb3VyY2VCdWZm
ZXJzLCB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yCiAgICAgLy8gZXhjZXB0aW9uIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6ICptX3Nv
dXJjZUJ1ZmZlcnMpIHsKICAgICAgICAgaWYgKHNvdXJjZUJ1ZmZlci0+dXBkYXRpbmcoKSkKLSAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgfQogCiAg
ICAgLy8gNC4gUnVuIHRoZSBkdXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtIHdpdGggbmV3IGR1cmF0
aW9uIHNldCB0byB0aGUgdmFsdWUgYmVpbmcgYXNzaWduZWQgdG8gdGhpcyBhdHRyaWJ1dGUuCkBA
IC01MDgsNyArNTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVkaWFTb3VyY2U6OnNldER1cmF0
aW9uSW50ZXJuYWwoY29uc3QgTWVkaWFUaW1lJiBkdXJhdGlvbikKICAgICAgICAgaGlnaGVzdEVu
ZFRpbWUgPSBzdGQ6Om1heChoaWdoZXN0RW5kVGltZSwgc291cmNlQnVmZmVyLT5idWZmZXJlZElu
dGVybmFsKCkucmFuZ2VzKCkubWF4aW11bUJ1ZmZlcmVkVGltZSgpKTsKICAgICB9CiAgICAgaWYg
KGhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAuaXNWYWxpZCgpICYmIG5ld0R1cmF0aW9uIDwg
aGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogCiAgICAgLy8gNC4gSWYgbmV3IGR1cmF0aW9uIGlzIGxlc3MgdGhhbiBo
aWdoZXN0IGVuZCB0aW1lLCB0aGVuCiAgICAgLy8gNC4xLiBVcGRhdGUgbmV3IGR1cmF0aW9uIHRv
IGVxdWFsIGhpZ2hlc3QgZW5kIHRpbWUuCkBAIC01NDIsMTQgKzU0MiwxNCBAQCBFeGNlcHRpb25P
cjx2b2lkPiBNZWRpYVNvdXJjZTo6ZW5kT2ZTdHJlYW0oc3RkOjpvcHRpb25hbDxFbmRPZlN0cmVh
bUVycm9yPiBlcnJvcgogewogICAgIC8vIDIuMiBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwt
bWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCN3aWRsLU1l
ZGlhU291cmNlLWVuZE9mU3RyZWFtLXZvaWQtRW5kT2ZTdHJlYW1FcnJvci1lcnJvcgogICAgIC8v
IDEuIElmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBub3QgaW4gdGhlICJvcGVuIiBzdGF0
ZSB0aGVuIHRocm93IGFuCi0gICAgLy8gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFuZCBh
Ym9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5k
IGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmICghaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDIuIElmIHRoZSB1cGRhdGluZyBhdHRy
aWJ1dGUgZXF1YWxzIHRydWUgb24gYW55IFNvdXJjZUJ1ZmZlciBpbiBzb3VyY2VCdWZmZXJzLCB0
aGVuIHRocm93IGFuCi0gICAgLy8gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFuZCBhYm9y
dCB0aGVzZSBzdGVwcy4KKyAgICAvLyBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmIChzdGQ6OmFueV9vZihtX3NvdXJjZUJ1ZmZlcnMtPmJl
Z2luKCksIG1fc291cmNlQnVmZmVycy0+ZW5kKCksIFtdKGF1dG8mIHNvdXJjZUJ1ZmZlcikgeyBy
ZXR1cm4gc291cmNlQnVmZmVyLT51cGRhdGluZygpOyB9KSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gMy4gUnVuIHRoZSBlbmQgb2Ygc3RyZWFtIGFs
Z29yaXRobSB3aXRoIHRoZSBlcnJvciBwYXJhbWV0ZXIgc2V0IHRvIGVycm9yLgogICAgIHN0cmVh
bUVuZGVkV2l0aEVycm9yKGVycm9yKTsKQEAgLTYzMCwyMiArNjMwLDIyIEBAIEV4Y2VwdGlvbk9y
PFNvdXJjZUJ1ZmZlciY+IE1lZGlhU291cmNlOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgU3RyaW5n
JiB0eXBlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKICAgICAv
LyAyLiBJZiB0eXBlIGNvbnRhaW5zIGEgTUlNRSB0eXBlIHRoYXQgaXMgbm90IHN1cHBvcnRlZCAu
Li4sIHRoZW4gdGhyb3cgYQotICAgIC8vIE5PVF9TVVBQT1JURURfRVJSIGV4Y2VwdGlvbiBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gTm90U3VwcG9ydGVkRXJyb3IgZXhjZXB0aW9uIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoIWlzVHlwZVN1cHBvcnRlZCh0eXBlKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgLy8gNC4gSWYgdGhl
IHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIG5vdCBpbiB0aGUgIm9wZW4iIHN0YXRlIHRoZW4gdGhy
b3cgYW4KLSAgICAvLyBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgorICAgIC8vIEludmFsaWRTdGF0ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhl
c2Ugc3RlcHMuCiAgICAgaWYgKCFpc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogCiAgICAgLy8gNS4gQ3JlYXRlIGEgbmV3IFNvdXJjZUJ1ZmZlciBvYmpl
Y3QgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgogICAgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBl
KHR5cGUpOwogICAgIGF1dG8gc291cmNlQnVmZmVyUHJpdmF0ZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZl
clByaXZhdGUoY29udGVudFR5cGUpOwogCiAgICAgaWYgKHNvdXJjZUJ1ZmZlclByaXZhdGUuaGFz
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgLy8gMi4gSWYgdHlwZSBjb250YWlucyBhIE1JTUUgdHlw
ZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgLi4uLCB0aGVuIHRocm93IGEgTk9UX1NVUFBPUlRFRF9F
UlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KLSAgICAgICAgLy8gMy4gSWYgdGhl
IHVzZXIgYWdlbnQgY2FuJ3QgaGFuZGxlIGFueSBtb3JlIFNvdXJjZUJ1ZmZlciBvYmplY3RzIHRo
ZW4gdGhyb3cgYSBRVU9UQV9FWENFRURFRF9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcworICAgICAgICAvLyAyLiBJZiB0eXBlIGNvbnRhaW5zIGEgTUlNRSB0eXBlIHRoYXQgaXMg
bm90IHN1cHBvcnRlZCAuLi4sIHRoZW4gdGhyb3cgYSBOb3RTdXBwb3J0ZWRFcnJvciBleGNlcHRp
b24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICAvLyAzLiBJZiB0aGUgdXNlciBhZ2Vu
dCBjYW4ndCBoYW5kbGUgYW55IG1vcmUgU291cmNlQnVmZmVyIG9iamVjdHMgdGhlbiB0aHJvdyBh
IFF1b3RhRXhjZWVkZWRFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzCiAgICAg
ICAgIHJldHVybiBzb3VyY2VCdWZmZXJQcml2YXRlLnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9
CiAKQEAgLTY4MCw5ICs2ODAsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBNZWRpYVNvdXJjZTo6cmVt
b3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlciYgYnVmZmVyKQogICAgIFJlZjxTb3VyY2VCdWZm
ZXI+IHByb3RlY3QoYnVmZmVyKTsKIAogICAgIC8vIDIuIElmIHNvdXJjZUJ1ZmZlciBzcGVjaWZp
ZXMgYW4gb2JqZWN0IHRoYXQgaXMgbm90IGluIHNvdXJjZUJ1ZmZlcnMgdGhlbgotICAgIC8vIHRo
cm93IGEgTk9UX0ZPVU5EX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAg
IC8vIHRocm93IGEgTm90Rm91bmRFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBz
LgogICAgIGlmICghbV9zb3VyY2VCdWZmZXJzLT5sZW5ndGgoKSB8fCAhbV9zb3VyY2VCdWZmZXJz
LT5jb250YWlucyhidWZmZXIpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5E
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAg
ICAgLy8gMy4gSWYgdGhlIHNvdXJjZUJ1ZmZlci51cGRhdGluZyBhdHRyaWJ1dGUgZXF1YWxzIHRy
dWUsIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6IC4uLgogICAgIGJ1ZmZlci5hYm9ydElm
VXBkYXRpbmcoKTsKQEAgLTk4MywxNyArOTgzLDE3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTb3VyY2VC
dWZmZXJQcml2YXRlPj4gTWVkaWFTb3VyY2U6OmNyZWF0ZVNvdXJjZUJ1ZmZlclByaXZhdGUoY29u
CiAgICAgICAgIC8vIDIuMiBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZp
bGUvZGVmYXVsdC9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjd2lkbC1NZWRpYVNvdXJj
ZS1hZGRTb3VyY2VCdWZmZXItU291cmNlQnVmZmVyLURPTVN0cmluZy10eXBlCiAgICAgICAgIC8v
IFN0ZXAgMjogSWYgdHlwZSBjb250YWlucyBhIE1JTUUgdHlwZSAuLi4gdGhhdCBpcyBub3Qgc3Vw
cG9ydGVkIHdpdGggdGhlIHR5cGVzCiAgICAgICAgIC8vIHNwZWNpZmllZCBmb3IgdGhlIG90aGVy
IFNvdXJjZUJ1ZmZlciBvYmplY3RzIGluIHNvdXJjZUJ1ZmZlcnMsIHRoZW4gdGhyb3cKLSAgICAg
ICAgLy8gYSBOT1RfU1VQUE9SVEVEX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBz
LgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAg
ICAgLy8gYSBOb3RTdXBwb3J0ZWRFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBz
LgorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBj
YXNlIE1lZGlhU291cmNlUHJpdmF0ZTo6UmVhY2hlZElkTGltaXQ6CiAgICAgICAgIC8vIDIuMiBo
dHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvZGVmYXVsdC9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLmh0bWwjd2lkbC1NZWRpYVNvdXJjZS1hZGRTb3VyY2VCdWZmZXIt
U291cmNlQnVmZmVyLURPTVN0cmluZy10eXBlCiAgICAgICAgIC8vIFN0ZXAgMzogSWYgdGhlIHVz
ZXIgYWdlbnQgY2FuJ3QgaGFuZGxlIGFueSBtb3JlIFNvdXJjZUJ1ZmZlciBvYmplY3RzIHRoZW4g
dGhyb3cKLSAgICAgICAgLy8gYSBRVU9UQV9FWENFRURFRF9FUlIgZXhjZXB0aW9uIGFuZCBhYm9y
dCB0aGVzZSBzdGVwcy4KLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFFVT1RBX0VYQ0VFREVE
X0VSUiB9OworICAgICAgICAvLyBhIFF1b3RhRXhjZWVkZWRFcnJvciBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUXVvdGFFeGNlZWRl
ZEVycm9yIH07CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFFVT1RBX0VYQ0VFREVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24g
eyBRdW90YUV4Y2VlZGVkRXJyb3IgfTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZTo6c2NoZWR1bGVF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCA0Y2NjOGQ5Njli
ZjQ3YzAxYmIwMDkwMTNmZmY5ZWI3YmQzMmY4NGExLi5iNzQ3YTlkODM4ZmIwMGZmM2ZmN2M5NmNm
OGNkY2RhOWE5ZDY1MmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCkBAIC0xMjcsOSArMTI3LDkgQEAgRXhjZXB0aW9uT3I8
UmVmPFRpbWVSYW5nZXM+PiBTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVkKCkgY29uc3QKICAgICAvLyBT
ZWN0aW9uIDMuMSBidWZmZXJlZCBhdHRyaWJ1dGUgc3RlcHMuCiAgICAgLy8gaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1bHQvbWVkaWEtc291cmNlL21lZGlh
LXNvdXJjZS5odG1sI2F0dHJpYnV0ZXMtMQogICAgIC8vIDEuIElmIHRoaXMgb2JqZWN0IGhhcyBi
ZWVuIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlQnVmZmVycyBhdHRyaWJ1dGUgb2YgdGhlIHBhcmVu
dCBtZWRpYSBzb3VyY2UgdGhlbiB0aHJvdyBhbgotICAgIC8vICAgIElOVkFMSURfU1RBVEVfRVJS
IGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gICAgSW52YWxpZFN0YXRl
RXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoaXNSZW1vdmVk
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDIu
IFJldHVybiBhIG5ldyBzdGF0aWMgbm9ybWFsaXplZCBUaW1lUmFuZ2VzIG9iamVjdCBmb3IgdGhl
IG1lZGlhIHNlZ21lbnRzIGJ1ZmZlcmVkLgogICAgIHJldHVybiBtX2J1ZmZlcmVkLT5jb3B5KCk7
CkBAIC0xNDYsMTkgKzE0NiwxOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OnNl
dFRpbWVzdGFtcE9mZnNldChkb3VibGUgb2Zmc2V0KQogICAgIC8vIGh0dHBzOi8vZHZjcy53My5v
cmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UuaHRtbCNhdHRyaWJ1dGVzLTEKICAgICAvLyAxLiBMZXQgbmV3IHRpbWVzdGFtcCBvZmZzZXQg
ZXF1YWwgdGhlIG5ldyB2YWx1ZSBiZWluZyBhc3NpZ25lZCB0byB0aGlzIGF0dHJpYnV0ZS4KICAg
ICAvLyAyLiBJZiB0aGlzIG9iamVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZUJ1
ZmZlcnMgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlLCB0aGVuIHRocm93IGFu
Ci0gICAgLy8gICAgSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KLSAgICAvLyAzLiBJZiB0aGUgdXBkYXRpbmcgYXR0cmlidXRlIGVxdWFscyB0cnVlLCB0
aGVuIHRocm93IGFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ug
c3RlcHMuCisgICAgLy8gICAgSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0
aGVzZSBzdGVwcy4KKyAgICAvLyAzLiBJZiB0aGUgdXBkYXRpbmcgYXR0cmlidXRlIGVxdWFscyB0
cnVlLCB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQg
dGhlc2Ugc3RlcHMuCiAgICAgaWYgKGlzUmVtb3ZlZCgpIHx8IG1fdXBkYXRpbmcpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIDQuIElmIHRoZSByZWFk
eVN0YXRlIGF0dHJpYnV0ZSBvZiB0aGUgcGFyZW50IG1lZGlhIHNvdXJjZSBpcyBpbiB0aGUgImVu
ZGVkIiBzdGF0ZSB0aGVuIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgIC8vIDQuMSBTZXQg
dGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlIHRvICJv
cGVuIgogICAgIC8vIDQuMiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1l
ZCBzb3VyY2VvcGVuIGF0IHRoZSBwYXJlbnQgbWVkaWEgc291cmNlLgogICAgIG1fc291cmNlLT5v
cGVuSWZJbkVuZGVkU3RhdGUoKTsKIAotICAgIC8vIDUuIElmIHRoZSBhcHBlbmQgc3RhdGUgZXF1
YWxzIFBBUlNJTkdfTUVESUFfU0VHTUVOVCwgdGhlbiB0aHJvdyBhbiBJTlZBTElEX1NUQVRFX0VS
UiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gNS4gSWYgdGhlIGFwcGVuZCBzdGF0ZSBl
cXVhbHMgUEFSU0lOR19NRURJQV9TRUdNRU5ULCB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVy
cm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAobV9hcHBlbmRTdGF0ZSA9PSBQYXJz
aW5nTWVkaWFTZWdtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
CiAKICAgICBNZWRpYVRpbWUgbmV3VGltZXN0YW1wT2Zmc2V0ID0gTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRG91YmxlKG9mZnNldCk7CiAKQEAgLTE4Niw3ICsxODYsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBTb3VyY2VCdWZmZXI6OnNldEFwcGVuZFdpbmRvd1N0YXJ0KGRvdWJsZSBuZXdWYWx1ZSkKICAg
ICAvLyAgICB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yICBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgogICAgIC8vIDIuIElmIHRoZSB1cGRhdGluZyBhdHRyaWJ1dGUgZXF1
YWxzIHRydWUsIHRoZW4gdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBh
Ym9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoaXNSZW1vdmVkKCkgfHwgbV91cGRhdGluZykKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gMy4gSWYgdGhl
IG5ldyB2YWx1ZSBpcyBsZXNzIHRoYW4gMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYXBw
ZW5kV2luZG93RW5kIHRoZW4KICAgICAvLyAgICB0aHJvdyBhbiBUeXBlRXJyb3IgZXhjZXB0aW9u
IGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KQEAgLTIxMyw3ICsyMTMsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBTb3VyY2VCdWZmZXI6OnNldEFwcGVuZFdpbmRvd0VuZChkb3VibGUgbmV3VmFsdWUpCiAg
ICAgLy8gICAgdGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgogICAgIC8vIDIuIElmIHRoZSB1cGRhdGluZyBhdHRyaWJ1dGUgZXF1
YWxzIHRydWUsIHRoZW4gdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBh
Ym9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoaXNSZW1vdmVkKCkgfHwgbV91cGRhdGluZykKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gMy4gSWYgdGhl
IG5ldyB2YWx1ZSBlcXVhbHMgTmFOLCB0aGVuIHRocm93IGFuIFR5cGVFcnJvciBhbmQgYWJvcnQg
dGhlc2Ugc3RlcHMuCiAgICAgLy8gNC4gSWYgdGhlIG5ldyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3Ig
ZXF1YWwgdG8gYXBwZW5kV2luZG93U3RhcnQgdGhlbiB0aHJvdyBhbiBUeXBlRXJyb3IgZXhjZXB0
aW9uCkBAIC0yNjQsMTUgKzI2NCwxNSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6
OmFib3J0KCkKICAgICAvLyBTZWN0aW9uIDMuMiBhYm9ydCgpIG1ldGhvZCBzdGVwcy4KICAgICAv
LyBodHRwczovL3Jhd2dpdC5jb20vdzNjL21lZGlhLXNvdXJjZS80NTYyNzY0NjM0NGVlYTAxNzBk
ZDFjYmM1YTNkNTA4Y2E3NTFhYmI4L21lZGlhLXNvdXJjZS1yZXNwZWMuaHRtbCNkb20tc291cmNl
YnVmZmVyLWFib3J0CiAgICAgLy8gMS4gSWYgdGhpcyBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBm
cm9tIHRoZSBzb3VyY2VCdWZmZXJzIGF0dHJpYnV0ZSBvZiB0aGUgcGFyZW50IG1lZGlhIHNvdXJj
ZQotICAgIC8vICAgIHRoZW4gdGhyb3cgYW4gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyAgICB0aGVuIHRocm93IGFuIEludmFsaWRTdGF0
ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAgLy8gMi4gSWYgdGhl
IHJlYWR5U3RhdGUgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlIGlzIG5vdCBp
biB0aGUgIm9wZW4iIHN0YXRlCi0gICAgLy8gICAgdGhlbiB0aHJvdyBhbiBJTlZBTElEX1NUQVRF
X0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIC8vICAgIHRoZW4gdGhy
b3cgYW4gSW52YWxpZFN0YXRlRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4K
ICAgICBpZiAoaXNSZW1vdmVkKCkgfHwgIW1fc291cmNlLT5pc09wZW4oKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gMy4gSWYgdGhlIHJhbmdlIHJl
bW92YWwgYWxnb3JpdGhtIGlzIHJ1bm5pbmcsIHRoZW4gdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJy
b3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAobV9yZW1vdmVUaW1l
ci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAK
ICAgICAvLyA0LiBJZiB0aGUgc291cmNlQnVmZmVyLnVwZGF0aW5nIGF0dHJpYnV0ZSBlcXVhbHMg
dHJ1ZSwgdGhlbiBydW4gdGhlIGZvbGxvd2luZyBzdGVwczogLi4uCiAgICAgYWJvcnRJZlVwZGF0
aW5nKCk7CkBAIC0zMDQsNyArMzA0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU291cmNlQnVmZmVy
OjpyZW1vdmUoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJgogICAgIC8v
ICAgIGFuIEludmFsaWRTdGF0ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMu
CiAgICAgLy8gMi4gSWYgdGhlIHVwZGF0aW5nIGF0dHJpYnV0ZSBlcXVhbHMgdHJ1ZSwgdGhlbiB0
aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBz
LgogICAgIGlmIChpc1JlbW92ZWQoKSB8fCBtX3VwZGF0aW5nKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICAvLyAzLiBJZiBkdXJhdGlvbiBlcXVhbHMgTmFO
LCB0aGVuIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMu
CiAgICAgLy8gNC4gSWYgc3RhcnQgaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIGR1cmF0aW9u
LCB0aGVuIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMu
CkBAIC00OTYsMTAgKzQ5NiwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OmFw
cGVuZEJ1ZmZlckludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCiAgICAgLy8gU2Vj
dGlvbiAzLjUuNCBQcmVwYXJlIEFwcGVuZEFsZ29yaXRobQogCiAgICAgLy8gMS4gSWYgdGhlIFNv
dXJjZUJ1ZmZlciBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZUJ1ZmZlcnMgYXR0cmli
dXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291cmNlCi0gICAgLy8gdGhlbiB0aHJvdyBhbiBJTlZB
TElEX1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgotICAgIC8vIDIu
IElmIHRoZSB1cGRhdGluZyBhdHRyaWJ1dGUgZXF1YWxzIHRydWUsIHRoZW4gdGhyb3cgYW4gSU5W
QUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAvLyB0
aGVuIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ug
c3RlcHMuCisgICAgLy8gMi4gSWYgdGhlIHVwZGF0aW5nIGF0dHJpYnV0ZSBlcXVhbHMgdHJ1ZSwg
dGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgogICAgIGlmIChpc1JlbW92ZWQoKSB8fCBtX3VwZGF0aW5nKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICAvLyAzLiBJZiB0aGUgcmVhZHlTdGF0
ZSBhdHRyaWJ1dGUgb2YgdGhlIHBhcmVudCBtZWRpYSBzb3VyY2UgaXMgaW4gdGhlICJlbmRlZCIg
c3RhdGUgdGhlbiBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAvLyAzLjEuIFNldCB0aGUg
cmVhZHlTdGF0ZSBhdHRyaWJ1dGUgb2YgdGhlIHBhcmVudCBtZWRpYSBzb3VyY2UgdG8gIm9wZW4i
CkBAIC01MTEsMTAgKzUxMSwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OmFw
cGVuZEJ1ZmZlckludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCiAKICAgICAvLyBG
SVhNRTogZW5hYmxlIHRoaXMgY29kZSB3aGVuIE1TRSBsaWJyYXJpZXMgaGF2ZSBiZWVuIHVwZGF0
ZWQgdG8gc3VwcG9ydCBpdC4KICNpZiBVU0UoR1NUUkVBTUVSKQotICAgIC8vIDUuIElmIHRoZSBi
dWZmZXIgZnVsbCBmbGFnIGVxdWFscyB0cnVlLCB0aGVuIHRocm93IGEgUVVPVEFfRVhDRUVERURf
RVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcC4KKyAgICAvLyA1LiBJZiB0aGUgYnVm
ZmVyIGZ1bGwgZmxhZyBlcXVhbHMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFF1b3RhRXhjZWVkZWRFcnJv
ciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXAuCiAgICAgaWYgKG1fYnVmZmVyRnVsbCkg
ewotICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlcklu
dGVybmFsKCVwKSAtICBidWZmZXIgZnVsbCwgZmFpbGluZyB3aXRoIFFVT1RBX0VYQ0VFREVEX0VS
UiBlcnJvciIsIHRoaXMpOwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUVVPVEFfRVhDRUVE
RURfRVJSIH07CisgICAgICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6YXBwZW5k
QnVmZmVySW50ZXJuYWwoJXApIC0gIGJ1ZmZlciBmdWxsLCBmYWlsaW5nIHdpdGggUXVvdGFFeGNl
ZWRlZEVycm9yIGVycm9yIiwgdGhpcyk7CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBRdW90
YUV4Y2VlZGVkRXJyb3IgfTsKICAgICB9CiAjZW5kaWYKIApAQCAtMjA0NSwxNCArMjA0NSwxNCBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBTb3VyY2VCdWZmZXI6OnNldE1vZGUoQXBwZW5kTW9kZSBuZXdN
b2RlKQogICAgIC8vIE9uIHNldHRpbmcsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogCiAgICAg
Ly8gMS4gTGV0IG5ldyBtb2RlIGVxdWFsIHRoZSBuZXcgdmFsdWUgYmVpbmcgYXNzaWduZWQgdG8g
dGhpcyBhdHRyaWJ1dGUuCi0gICAgLy8gMi4gSWYgZ2VuZXJhdGUgdGltZXN0YW1wcyBmbGFnIGVx
dWFscyB0cnVlIGFuZCBuZXcgbW9kZSBlcXVhbHMgInNlZ21lbnRzIiwgdGhlbiB0aHJvdyBhbiBJ
TlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAv
LyAyLiBJZiBnZW5lcmF0ZSB0aW1lc3RhbXBzIGZsYWcgZXF1YWxzIHRydWUgYW5kIG5ldyBtb2Rl
IGVxdWFscyAic2VnbWVudHMiLCB0aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNl
cHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIGlmIChtX3Nob3VsZEdlbmVyYXRlVGlt
ZXN0YW1wcyAmJiBuZXdNb2RlID09IEFwcGVuZE1vZGU6OlNlZ21lbnRzKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIC8vIDMuIElmIHRoaXMgb2JqZWN0
IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlQnVmZmVycyBhdHRyaWJ1dGUgb2YgdGhl
IHBhcmVudCBtZWRpYSBzb3VyY2UsIHRoZW4gdGhyb3cgYW4gSU5WQUxJRF9TVEFURV9FUlIgZXhj
ZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KLSAgICAvLyA0LiBJZiB0aGUgdXBkYXRpbmcg
YXR0cmlidXRlIGVxdWFscyB0cnVlLCB0aGVuIHRocm93IGFuIElOVkFMSURfU1RBVEVfRVJSIGV4
Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgLy8gMy4gSWYgdGhpcyBvYmplY3Qg
aGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2VCdWZmZXJzIGF0dHJpYnV0ZSBvZiB0aGUg
cGFyZW50IG1lZGlhIHNvdXJjZSwgdGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNl
cHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIC8vIDQuIElmIHRoZSB1cGRhdGluZyBh
dHRyaWJ1dGUgZXF1YWxzIHRydWUsIHRoZW4gdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3IgZXhj
ZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoaXNSZW1vdmVkKCkgfHwgbV91
cGRhdGluZykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAg
Ly8gNS4gSWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIG9mIHRoZSBwYXJlbnQgbWVkaWEgc291
cmNlIGlzIGluIHRoZSAiZW5kZWQiIHN0YXRlIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6
CiAgICAgaWYgKG1fc291cmNlLT5pc0VuZGVkKCkpIHsKQEAgLTIwNjEsOSArMjA2MSw5IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFNvdXJjZUJ1ZmZlcjo6c2V0TW9kZShBcHBlbmRNb2RlIG5ld01vZGUp
CiAgICAgICAgIG1fc291cmNlLT5vcGVuSWZJbkVuZGVkU3RhdGUoKTsKICAgICB9CiAKLSAgICAv
LyA2LiBJZiB0aGUgYXBwZW5kIHN0YXRlIGVxdWFscyBQQVJTSU5HX01FRElBX1NFR01FTlQsIHRo
ZW4gdGhyb3cgYW4gSU5WQUxJRF9TVEFURV9FUlIgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAg
IC8vIDYuIElmIHRoZSBhcHBlbmQgc3RhdGUgZXF1YWxzIFBBUlNJTkdfTUVESUFfU0VHTUVOVCwg
dGhlbiB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAg
ICAgaWYgKG1fYXBwZW5kU3RhdGUgPT0gUGFyc2luZ01lZGlhU2VnbWVudCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gNy4gSWYgdGhlIG5ldyBtb2Rl
IGVxdWFscyAic2VxdWVuY2UiLCB0aGVuIHNldCB0aGUgZ3JvdXAgc3RhcnQgdGltZXN0YW1wIHRv
IHRoZSBncm91cCBlbmQgdGltZXN0YW1wLgogICAgIGlmIChuZXdNb2RlID09IEFwcGVuZE1vZGU6
OlNlcXVlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYURldmljZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYURldmljZXMuY3BwCmluZGV4IDQxZTU5NWQ2MjFmOWM0ZTk2MDk5YTA2MTBjNDZlZDYxZmJk
ODdkZmUuLjZlNDBjN2Y2MjE4YjQxMWNlODY3NDBjMjBlNzI0YzMyZTJlYjgwZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAK
QEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVkaWFEZXZpY2VzOjpnZXRVc2Vy
TWVkaWEoY29uc3QgU3RyZWFtQ29uc3RyYWludHMmIGNvbnN0cmFpbnQKIHsKICAgICBhdXRvKiBk
b2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgYXV0byBhdWRpb0NvbnN0cmFp
bnRzID0gY3JlYXRlTWVkaWFDb25zdHJhaW50cyhjb25zdHJhaW50cy5hdWRpbyk7CiAgICAgYXV0
byB2aWRlb0NvbnN0cmFpbnRzID0gY3JlYXRlTWVkaWFDb25zdHJhaW50cyhjb25zdHJhaW50cy52
aWRlbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggODM1N2VkOWQ3
MWY5OWYwNTA3OGVkYTE2OGRjYTAxMWI4ODQ0ZWJmZC4uMWU5MjUyN2FlMmZkNjc2YTc3MzlkNGY3
OWM5NmRmNjZmZTA1YjBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcApA
QCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVh
dGVBbnN3ZXJUYXNrKGNvbnN0IFJUQ0Fuc3dlck9wdGlvbnMmKQogICAgIEFTU0VSVCghbV9kdGxz
RmluZ2VycHJpbnQuaXNFbXB0eSgpKTsKIAogICAgIGlmICghaW50ZXJuYWxSZW1vdGVEZXNjcmlw
dGlvbigpKSB7Ci0gICAgICAgIGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRpb24geyBJTlZBTElE
X1NUQVRFX0VSUiwgIk5vIHJlbW90ZSBkZXNjcmlwdGlvbiBzZXQiIH0pOworICAgICAgICBjcmVh
dGVBbnN3ZXJGYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUg
ZGVzY3JpcHRpb24gc2V0IiB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjE4LDcg
KzYxOCw3IEBAIHZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpkb0FkZEljZUNhbmRp
ZGF0ZShSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRpZGF0CiB2b2lkIE1lZGlhRW5kcG9pbnRQZWVy
Q29ubmVjdGlvbjo6YWRkSWNlQ2FuZGlkYXRlVGFzayhSVENJY2VDYW5kaWRhdGUmIHJ0Y0NhbmRp
ZGF0ZSkKIHsKICAgICBpZiAoIWludGVybmFsUmVtb3RlRGVzY3JpcHRpb24oKSkgewotICAgICAg
ICBhZGRJY2VDYW5kaWRhdGVGYWlsZWQoRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsICJO
byByZW1vdGUgZGVzY3JpcHRpb24gc2V0IiB9KTsKKyAgICAgICAgYWRkSWNlQ2FuZGlkYXRlRmFp
bGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRlc2NyaXB0aW9u
IHNldCIgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRT
ZXNzaW9uRGVzY3JpcHRpb24uY3BwCmluZGV4IDM5MzZiNGUzMTliZjAxMTkxZTQyNGRlMzcwODg1
MDdkOGE4MjRhMTcuLjFjNjA2ZjUwYzJhOWRkN2VlODEyM2NiZTMzOWY3NDdmNzQ0MGZlNzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFNlc3Npb25EZXNjcmlwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcApAQCAtNjIsOSArNjIs
OSBAQCBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbj4+IE1l
ZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpbwogICAgIGF1dG8gcmVzdWx0ID0gc2RwUHJvY2Vz
c29yLnBhcnNlKHJ0Y0Rlc2NyaXB0aW9uLT5zZHAoKSwgY29uZmlndXJhdGlvbik7CiAgICAgaWYg
KHJlc3VsdCAhPSBTRFBQcm9jZXNzb3I6OlJlc3VsdDo6U3VjY2VzcykgewogICAgICAgICBpZiAo
cmVzdWx0ID09IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpQYXJzZUVycm9yKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJTRFAg
Y29udGVudCBpcyBpbnZhbGlkIikgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiU0RQIGNvbnRlbnQgaXMgaW52YWxpZCIp
IH07CiAgICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7Ci0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBBQk9SVF9FUlIsIEFTQ0lJTGl0ZXJhbCgiSW50ZXJu
YWwgZXJyb3IiKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgQWJvcnRFcnJvciwgQVND
SUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpIH07CiAgICAgfQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24ocnRjRGVzY3JpcHRpb24tPnR5
cGUoKSwgV1RGTW92ZShjb25maWd1cmF0aW9uKSwgV1RGTW92ZShydGNEZXNjcmlwdGlvbikpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNv
bm5lY3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAppbmRleCAyMmRlZjJiMmYxZDFkZTJjOWVlN2I5NzIy
NjE5ZDA3MzY5ZmI0NDJmLi5lMTNiODhhYTZhMTIxMDBkMWFjZjZmMzNjYTkxZTliOTNlY2I3MTJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnNldExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uJiBzZXNzaW9uRGUKICAgICBBU1NFUlQoIW1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSk7
CiAKICAgICBpZiAoIWlzTG9jYWxEZXNjcmlwdGlvblR5cGVWYWxpZEZvclN0YXRlKHNlc3Npb25E
ZXNjcmlwdGlvbi50eXBlKCksIG1fcGVlckNvbm5lY3Rpb24uc2lnbmFsaW5nU3RhdGUoKSkpIHsK
LSAgICAgICAgcHJvbWlzZS5yZWplY3QoSU5WQUxJRF9TVEFURV9FUlIsICJEZXNjcmlwdGlvbiB0
eXBlIGluY29tcGF0aWJsZSB3aXRoIGN1cnJlbnQgc2lnbmFsaW5nIHN0YXRlIik7CisgICAgICAg
IHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yLCAiRGVzY3JpcHRpb24gdHlwZSBpbmNv
bXBhdGlibGUgd2l0aCBjdXJyZW50IHNpZ25hbGluZyBzdGF0ZSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OnNldFJlbW90ZURlc2NyaXB0aW9uKFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgc2Vzc2lvbkQKICAg
ICBBU1NFUlQoIW1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSk7CiAKICAgICBpZiAoIWlzUmVt
b3RlRGVzY3JpcHRpb25UeXBlVmFsaWRGb3JTdGF0ZShzZXNzaW9uRGVzY3JpcHRpb24udHlwZSgp
LCBtX3BlZXJDb25uZWN0aW9uLnNpZ25hbGluZ1N0YXRlKCkpKSB7Ci0gICAgICAgIHByb21pc2Uu
cmVqZWN0KElOVkFMSURfU1RBVEVfRVJSLCAiRGVzY3JpcHRpb24gdHlwZSBpbmNvbXBhdGlibGUg
d2l0aCBjdXJyZW50IHNpZ25hbGluZyBzdGF0ZSIpOworICAgICAgICBwcm9taXNlLnJlamVjdChJ
bnZhbGlkU3RhdGVFcnJvciwgIkRlc2NyaXB0aW9uIHR5cGUgaW5jb21wYXRpYmxlIHdpdGggY3Vy
cmVudCBzaWduYWxpbmcgc3RhdGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAK
aW5kZXggOWRiMWVjNWJkNjdmMWQ3M2E0NzZjMDZlOGFhZjVjODFiZjlkM2I3YS4uYmY3ZDhiMDcz
MjU5MDQxOTNkMzViMzA0ZTdiOTI1ZGM1MDU0MzUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC03MywxOCArNzMs
MTggQEAgU3RyaW5nIFJUQ0RUTUZTZW5kZXI6OnRvbmVCdWZmZXIoKSBjb25zdAogRXhjZXB0aW9u
T3I8dm9pZD4gUlRDRFRNRlNlbmRlcjo6aW5zZXJ0RFRNRihjb25zdCBTdHJpbmcmLCBzdGQ6Om9w
dGlvbmFsPGludD4gZHVyYXRpb24sIHN0ZDo6b3B0aW9uYWw8aW50PiBpbnRlclRvbmVHYXApCiB7
CiAgICAgaWYgKCFjYW5JbnNlcnREVE1GKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9y
dGVkRXJyb3IgfTsKIAogICAgIGlmIChkdXJhdGlvbiAmJiAoZHVyYXRpb24udmFsdWUoKSA+IG1h
eFRvbmVEdXJhdGlvbk1zIHx8IGR1cmF0aW9uLnZhbHVlKCkgPCBtaW5Ub25lRHVyYXRpb25Ncykp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgaWYgKGludGVyVG9uZUdhcCAmJiBp
bnRlclRvbmVHYXAudmFsdWUoKSA8IG1pbkludGVyVG9uZUdhcE1zKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3lu
dGF4RXJyb3IgfTsKIAogICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbi52YWx1ZV9vcihkZWZhdWx0
VG9uZUR1cmF0aW9uTXMpOwogICAgIG1faW50ZXJUb25lR2FwID0gaW50ZXJUb25lR2FwLnZhbHVl
X29yKGRlZmF1bHRJbnRlclRvbmVHYXBNcyk7CiAKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lO
VEFYX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogfQogCiB2
b2lkIFJUQ0RUTUZTZW5kZXI6OmRpZFBsYXlUb25lKGNvbnN0IFN0cmluZyYgdG9uZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5j
cHAKaW5kZXggMmE1ODE0NTM3YmQ3NGYyZTg5MTBkMTY1ODM2NDVmNTU1MDJlMWE0Yy4uY2MwZTli
NTRkMTA1MDg4YmZiNDYxMzkyYjEwZjM5NjZkN2QzMjY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTk1LDIz
ICs5NSwyMyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJUQ0RhdGFDaGFubmVsOjpiaW5hcnlUeXBl
KCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IFJUQ0RhdGFDaGFubmVsOjpzZXRCaW5hcnlUeXBl
KGNvbnN0IEF0b21pY1N0cmluZyYgYmluYXJ5VHlwZSkKIHsKICAgICBpZiAoYmluYXJ5VHlwZSA9
PSBibG9iS2V5d29yZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRF
RF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07
CiAgICAgaWYgKGJpbmFyeVR5cGUgPT0gYXJyYXlidWZmZXJLZXl3b3JkKCkpIHsKICAgICAgICAg
bV9iaW5hcnlUeXBlID0gQmluYXJ5VHlwZTo6QXJyYXlCdWZmZXI7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQotICAgIHJldHVybiBFeGNlcHRpb24geyBUWVBFX01JU01BVENIX0VSUiB9Owor
ICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlTWlzbWF0Y2hFcnJvciB9OwogfQogCiBFeGNlcHRp
b25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcmIGRhdGEpCiB7CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IHRocm93IGluIENvbm5lY3RlZCBzdGF0ZS4KICAg
ICBpZiAobV9yZWFkeVN0YXRlICE9IFJUQ0RhdGFDaGFubmVsU3RhdGU6Ok9wZW4pCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlmICghbV9oYW5kbGVyLT5z
ZW5kU3RyaW5nRGF0YShkYXRhKSkgewogICAgICAgICAvLyBGSVhNRTogRGVjaWRlIHdoYXQgdGhl
IHJpZ2h0IGV4Y2VwdGlvbiBoZXJlIGlzLgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lO
VEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAg
ICB9CiAKICAgICByZXR1cm4geyB9OwpAQCAtMTIxLDcgKzEyMSw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFJUQ0RhdGFDaGFubmVsOjpzZW5kKEFycmF5QnVmZmVyJiBkYXRhKQogewogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgb25seSB0aHJvdyBpbiBDb25uZWN0ZWQgc3RhdGUuCiAgICAgaWYgKG1f
cmVhZHlTdGF0ZSAhPSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpPcGVuKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBzaXplX3QgZGF0YUxlbmd0aCA9IGRhdGEu
Ynl0ZUxlbmd0aCgpOwogICAgIGlmICghZGF0YUxlbmd0aCkKQEAgLTEzMSw3ICsxMzEsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChBcnJheUJ1ZmZlciYgZGF0YSkK
IAogICAgIGlmICghbV9oYW5kbGVyLT5zZW5kUmF3RGF0YShkYXRhUG9pbnRlciwgZGF0YUxlbmd0
aCkpIHsKICAgICAgICAgLy8gRklYTUU6IERlY2lkZSB3aGF0IHRoZSByaWdodCBleGNlcHRpb24g
aGVyZSBpcy4KLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgfQogCiAgICAgcmV0dXJu
IHsgfTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5l
bDo6c2VuZChBcnJheUJ1ZmZlclZpZXcmIGRhdGEpCiBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRh
Q2hhbm5lbDo6c2VuZChCbG9iJikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRp
b24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiB2b2lkIFJUQ0RhdGFDaGFubmVsOjpjbG9z
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDhkYzg4YmU0M2Y5MTVmYWIzYmQ4NTcxODU5MjJlYWM3
OWRhNmE5ZjEuLjkwYjIxZWE2MjNjMTQ3ZTQ1OTEyYjU5ODE1YmRjYTFkN2RkNzBkODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwCkBAIC05NiwxMCArOTYsMTAgQEAgUlRDUGVlckNvbm5lY3Rpb246On5SVENQ
ZWVyQ29ubmVjdGlvbigpCiBFeGNlcHRpb25Pcjx2b2lkPiBSVENQZWVyQ29ubmVjdGlvbjo6aW5p
dGlhbGl6ZVdpdGgoRG9jdW1lbnQmIGRvY3VtZW50LCBSVENDb25maWd1cmF0aW9uJiYgY29uZmln
dXJhdGlvbikKIHsKICAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGlmICghbV9iYWNrZW5kKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICByZXR1cm4gaW5pdGlhbGl6ZUNv
bmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSk7CiB9CkBAIC0xMDcsMTEgKzEwNywx
MSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSVENQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbGl6ZVdpdGgo
RG9jdW1lbnQmIGRvY3VtZW50LCBSVENDb25maQogRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFNlbmRl
cj4+IFJUQ1BlZXJDb25uZWN0aW9uOjphZGRUcmFjayhSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB0
cmFjaywgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8TWVkaWFTdHJlYW0+PiYg
c3RyZWFtcykKIHsKICAgICBpZiAoaXNDbG9zZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciB9OwogCiAgICAgZm9yIChSVENSdHBTZW5kZXImIHNlbmRlciA6IG1fdHJh
bnNjZWl2ZXJTZXQtPnNlbmRlcnMoKSkgewogICAgICAgICBpZiAoc2VuZGVyLnRyYWNrSWQoKSA9
PSB0cmFjay0+aWQoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FD
Q0VTU19FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKICAgICB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtZWRpYVN0cmVhbUlkczsKQEAg
LTE2MSw3ICsxNjEsNyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDUnRwU2VuZGVyPj4gUlRDUGVlckNv
bm5lY3Rpb246OmFkZFRyYWNrKFJlZjxNZWRpYVN0cmVhbVRyYWNrPgogRXhjZXB0aW9uT3I8dm9p
ZD4gUlRDUGVlckNvbm5lY3Rpb246OnJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyKQog
ewogICAgIGlmIChpc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CiAKICAgICBib29sIHNob3VsZEFib3J0ID0gdHJ1ZTsKICAgICBmb3IgKFJUQ1J0cFNl
bmRlciYgc2VuZGVySW5TZXQgOiBtX3RyYW5zY2VpdmVyU2V0LT5zZW5kZXJzKCkpIHsKQEAgLTIy
MCw3ICsyMjAsNyBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpxdWV1ZWRDcmVhdGVPZmZlcihS
VENPZmZlck9wdGlvbnMmJiBvcHRpb25zLCBTZXNzaW9uRGVzYwogewogICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkNyZWF0aW5nIG9mZmVyXG4iKTsKICAgICBpZiAoaXNDbG9zZWQoKSkgewotICAg
ICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21pc2Uu
cmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjMxLDcgKzIzMSw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnF1ZXVlZENyZWF0ZUFuc3dl
cihSVENBbnN3ZXJPcHRpb25zJiYgb3B0aW9ucywgU2Vzc2lvbkRlCiB7CiAgICAgUkVMRUFTRV9M
T0coV2ViUlRDLCAiQ3JlYXRpbmcgYW5zd2VyXG4iKTsKICAgICBpZiAoaXNDbG9zZWQoKSkgewot
ICAgICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgIHByb21p
c2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnF1ZXVlZFNldExvY2Fs
RGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmlwCiB7CiAgICAgUkVMRUFT
RV9MT0coV2ViUlRDLCAiU2V0dGluZyBsb2NhbCBkZXNjcmlwdGlvbjpcbiV7cHVibGljfXNcbiIs
IGRlc2NyaXB0aW9uLnNkcCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmIChpc0Nsb3NlZCgpKSB7
Ci0gICAgICAgIHByb21pc2UucmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJv
bWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6cXVldWVkU2V0UmVt
b3RlRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmkKICAgICBSRUxFQVNF
X0xPRyhXZWJSVEMsICJTZXR0aW5nIHJlbW90ZSBkZXNjcmlwdGlvbjpcbiV7cHVibGljfXNcbiIs
IGRlc2NyaXB0aW9uLnNkcCgpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKGlzQ2xvc2VkKCkp
IHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICBw
cm9taXNlLnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgbV9iYWNrZW5kLT5zZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbiwgV1RGTW92
ZShwcm9taXNlKSk7CkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6
cXVldWVkQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSogcnRjQ2FuZGlkYXRlLCBET00K
ICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJSZWNlaXZlZCBpY2UgY2FuZGlkYXRlOlxuJXtwdWJs
aWN9c1xuIiwgcnRjQ2FuZGlkYXRlID8gcnRjQ2FuZGlkYXRlLT5jYW5kaWRhdGUoKS51dGY4KCku
ZGF0YSgpIDogIm51bGwiKTsKIAogICAgIGlmIChpc0Nsb3NlZCgpKSB7Ci0gICAgICAgIHByb21p
c2UucmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52
YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMzEsNyArMzMx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUlRDUGVlckNvbm5lY3Rpb246OmluaXRpYWxpemVDb25m
aWd1cmF0aW9uKFJUQ0NvbmZpZ3VyYXRpb24mJgogewogICAgIGF1dG8gc2VydmVycyA9IGljZVNl
cnZlcnNGcm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKICAgICBpZiAoIXNlcnZlcnMp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5MzgKICAgICAv
LyBBbHNvIGRlY2lkZSB3aGV0aGVyIHRvIHJlcG9ydCBhbiBleGNlcHRpb24gb3Igb3V0cHV0IGEg
bWVzc2FnZSBpbiB0aGUgY29uc29sZSBsb2cgaWYgc2V0dGluZyBjb25maWd1cmF0aW9uIGZhaWxz
LgpAQCAtMzQ0LDExICszNDQsMTEgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUlRDUGVlckNvbm5lY3Rp
b246OmluaXRpYWxpemVDb25maWd1cmF0aW9uKFJUQ0NvbmZpZ3VyYXRpb24mJgogRXhjZXB0aW9u
T3I8dm9pZD4gUlRDUGVlckNvbm5lY3Rpb246OnNldENvbmZpZ3VyYXRpb24oUlRDQ29uZmlndXJh
dGlvbiYmIGNvbmZpZ3VyYXRpb24pCiB7CiAgICAgaWYgKGlzQ2xvc2VkKCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGF1dG8gc2VydmVycyA9IGljZVNl
cnZlcnNGcm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKICAgICBpZiAoIXNlcnZlcnMp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5MzgKICAgICAv
LyBBbHNvIGRlY2lkZSB3aGV0aGVyIHRvIHJlcG9ydCBhbiBleGNlcHRpb24gb3Igb3V0cHV0IGEg
bWVzc2FnZSBpbiB0aGUgY29uc29sZSBsb2cgaWYgc2V0dGluZyBjb25maWd1cmF0aW9uIGZhaWxz
LgpAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmdldFN0YXRzKE1l
ZGlhU3RyZWFtVHJhY2sqIHNlbGVjdG9yLCBSZWY8RGVmZXJyZWRQcm9taXNlCiBFeGNlcHRpb25P
cjxSZWY8UlRDRGF0YUNoYW5uZWw+PiBSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlRGF0YUNoYW5u
ZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgU3RyaW5nJiYgbGFiZWwsIFJUQ0Rh
dGFDaGFubmVsSW5pdCYmIG9wdGlvbnMpCiB7CiAgICAgaWYgKGlzQ2xvc2VkKCkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlmIChvcHRpb25zLm5lZ290
aWF0ZWQgJiYgIW9wdGlvbnMubmVnb3RpYXRlZC52YWx1ZSgpICYmIChsYWJlbC5sZW5ndGgoKSA+
IDY1NTM1IHx8IG9wdGlvbnMucHJvdG9jb2wubGVuZ3RoKCkgPiA2NTUzNSkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKQEAgLTM3OCw3ICszNzgsNyBAQCBFeGNlcHRp
b25PcjxSZWY8UlRDRGF0YUNoYW5uZWw+PiBSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlRGF0YUNo
YW5uZWwoU2NyaXB0RXhlYwogICAgIAogICAgIGF1dG8gY2hhbm5lbEhhbmRsZXIgPSBtX2JhY2tl
bmQtPmNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihsYWJlbCwgb3B0aW9ucyk7CiAgICAgaWYgKCFj
aGFubmVsSGFuZGxlcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9Owog
CiAgICAgcmV0dXJuIFJUQ0RhdGFDaGFubmVsOjpjcmVhdGUoY29udGV4dCwgV1RGTW92ZShjaGFu
bmVsSGFuZGxlciksIFdURk1vdmUobGFiZWwpLCBXVEZNb3ZlKG9wdGlvbnMpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2VuZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU2VuZGVyLmNwcApp
bmRleCA4ZTU5ZjJjOWY2ZTYxOGExYThkZDIyNWUzNDU3ODk2MDVjN2Q4NzZkLi44NjRiYjk4MmQ0
Nzk3OTQ0MmVkMDkwNmFjMTllM2ZiNjlhMDJkNjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNlbmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTZW5kZXIuY3BwCkBAIC03Myw3ICs3Myw3IEBA
IHZvaWQgUlRDUnRwU2VuZGVyOjpzZXRUcmFjayhSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB0cmFj
aykKIHZvaWQgUlRDUnRwU2VuZGVyOjpyZXBsYWNlVHJhY2soUmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2s+JiYgd2l0aFRyYWNrLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQogewog
ICAgIGlmIChpc1N0b3BwZWQoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NU
QVRFX0VSUik7CisgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVxdWVzdC5jcHAKaW5kZXggOWQxZTU3NjA0MDZmYTUy
YmUwNWI0ZjAxZDZmZTlmMjRkNDRjMDFhOS4uMDY5ZjcxMjI4OGE1OTNlN2VmODViYTBkMDYwNTM3
ZWY1ZjE5NjNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1VzZXJNZWRpYVJlcXVlc3QuY3BwCkBAIC01Myw3ICs1Myw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFVzZXJNZWRpYVJlcXVlc3Q6OnN0YXJ0KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFD
b25zdHJhaW50cyYmCiB7CiAgICAgYXV0byogdXNlck1lZGlhID0gVXNlck1lZGlhQ29udHJvbGxl
cjo6ZnJvbShkb2N1bWVudC5wYWdlKCkpOwogICAgIGlmICghdXNlck1lZGlhKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsgLy8gRklYTUU6IFdoeSBpcyBp
dCBiZXR0ZXIgdG8gcmV0dXJuIGFuIGV4Y2VwdGlvbiBoZXJlIGluc3RlYWQgb2YgcmVqZWN0aW5n
IHRoZSBwcm9taXNlIGFzIHdlIGRvIGp1c3QgYmVsb3c/CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OyAvLyBGSVhNRTogV2h5IGlzIGl0IGJldHRlciB0byBy
ZXR1cm4gYW4gZXhjZXB0aW9uIGhlcmUgaW5zdGVhZCBvZiByZWplY3RpbmcgdGhlIHByb21pc2Ug
YXMgd2UgZG8ganVzdCBiZWxvdz8KIAogICAgIGlmICghYXVkaW9Db25zdHJhaW50cy5pc1ZhbGlk
ICYmICF2aWRlb0NvbnN0cmFpbnRzLmlzVmFsaWQpIHsKICAgICAgICAgcHJvbWlzZS5yZWplY3Qo
VHlwZUVycm9yKTsKQEAgLTIwOCwxMSArMjA4LDExIEBAIHZvaWQgVXNlck1lZGlhUmVxdWVzdDo6
ZGVueShNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbiByZWFzb24sIGNvbnN0IFN0cmluZyYgaW52YWxp
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246OlVzZXJN
ZWRpYURpc2FibGVkOgogICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0cmVhbSwgIlVzZXJNZWRp
YVJlcXVlc3Q6OmRlbnkgLSB1c2VyIG1lZGlhIGRpc2FibGVkIik7Ci0gICAgICAgIG1fcHJvbWlz
ZS5yZWplY3QoU0VDVVJJVFlfRVJSKTsKKyAgICAgICAgbV9wcm9taXNlLnJlamVjdChTZWN1cml0
eUVycm9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYUFjY2Vzc0RlbmlhbFJlYXNv
bjo6Tm9DYXB0dXJlRGV2aWNlczoKICAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFTdHJlYW0sICJV
c2VyTWVkaWFSZXF1ZXN0OjpkZW55IC0gbm8gY2FwdHVyZSBkZXZpY2VzIik7Ci0gICAgICAgIG1f
cHJvbWlzZS5yZWplY3QoTk9UX0ZPVU5EX0VSUik7CisgICAgICAgIG1fcHJvbWlzZS5yZWplY3Qo
Tm90Rm91bmRFcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFBY2Nlc3NEZW5p
YWxSZWFzb246OkludmFsaWRDb25zdHJhaW50OgogICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYVN0
cmVhbSwgIlVzZXJNZWRpYVJlcXVlc3Q6OmRlbnkgLSBpbnZhbGlkIGNvbnN0cmFpbnQgLSAlcyIs
IGludmFsaWRDb25zdHJhaW50LnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHZv
aWQgVXNlck1lZGlhUmVxdWVzdDo6ZGVueShNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbiByZWFzb24s
IGNvbnN0IFN0cmluZyYgaW52YWxpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFBY2Nl
c3NEZW5pYWxSZWFzb246Ok90aGVyRmFpbHVyZToKICAgICAgICAgUkVMRUFTRV9MT0coTWVkaWFT
dHJlYW0sICJVc2VyTWVkaWFSZXF1ZXN0OjpkZW55IC0gb3RoZXIgZmFpbHVyZSIpOwotICAgICAg
ICBtX3Byb21pc2UucmVqZWN0KEFCT1JUX0VSUik7CisgICAgICAgIG1fcHJvbWlzZS5yZWplY3Qo
QWJvcnRFcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFBY2Nlc3NEZW5pYWxS
ZWFzb246OlBlcm1pc3Npb25EZW5pZWQ6CiAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhU3RyZWFt
LCAiVXNlck1lZGlhUmVxdWVzdDo6ZGVueSAtIHBlcm1pc3Npb24gZGVuaWVkIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJS
VENNZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
bGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCmluZGV4IDhiMmQzZGYzZTZhYzRl
ZDQ0MzQ3N2I5MDhlZDljOGQ3OGJkNjQ2NzguLjg2Nzk4MDU0MWQ4MzdlMGYwYzFhMWIwNWNmZDJj
YTRhYTI0YWU3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQu
Y3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBMaWJXZWJSVENNZWRpYUVuZHBvaW50Ojpkb1Nl
dExvY2FsRGVzY3JpcHRpb24oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmkKIAogICAgIC8v
IEZJWE1FOiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzc4
My4gUmVtb3ZlIHRoaXMgdGVzdCBvbmNlIGZpeGVkIGF0IExpYldlYlJUQyBsZXZlbC4KICAgICBp
ZiAoZGVzY3JpcHRpb24udHlwZSgpID09IFJUQ1NkcFR5cGU6OkFuc3dlciAmJiAhbV9iYWNrZW5k
LT5wZW5kaW5nX3JlbW90ZV9kZXNjcmlwdGlvbigpKSB7Ci0gICAgICAgIG1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgSU5WQUxJRF9T
VEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHNldCBsb2NhbCBhbnN3ZXIgc2RwOiBu
byBwZW5kaW5nIHJlbW90ZSBkZXNjcmlwdGlvbi4iKSB9KTsKKyAgICAgICAgbV9wZWVyQ29ubmVj
dGlvbkJhY2tlbmQuc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc2V0IGxvY2FsIGFuc3dlciBzZHA6
IG5vIHBlbmRpbmcgcmVtb3RlIGRlc2NyaXB0aW9uLiIpIH0pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9MaWJXZWJSVENQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmNwcAppbmRleCBlMWE3YTM0ODk1OWI4NDc5M2RjNzEzMDEwNTIwMjU2MDZhZmNkYjAy
Li4xOGY0ZjU2ZWU0ZTQ4ZTYzNmRlZjJkODNkYTY2MDVmZDU3MjVhNjk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKQEAgLTE3
NSw3ICsxNzUsNyBAQCB2b2lkIExpYldlYlJUQ1BlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVh
dGVPZmZlcihSVENPZmZlck9wdGlvbnMmJiBvcHRpb25zKQogdm9pZCBMaWJXZWJSVENQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikKIHsKICAg
ICBpZiAoIW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkgewotICAgICAgICBjcmVhdGVBbnN3ZXJG
YWlsZWQoRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsICJObyByZW1vdGUgZGVzY3JpcHRp
b24gc2V0IiB9KTsKKyAgICAgICAgY3JlYXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRlc2NyaXB0aW9uIHNldCIgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVBbnN3ZXIoKTsKQEAgLTM3Miwz
NCArMzcyLDM0IEBAIHZvaWQgTGliV2ViUlRDUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXBsYWNl
VHJhY2soUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxNZWRpCiAgICAgc3dpdGNoIChjdXJyZW50
VHJhY2stPnNvdXJjZSgpLnR5cGUoKSkgewogICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6Tm9uZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHByb21p
c2UucmVqZWN0KElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUik7CisgICAgICAgIHByb21pc2UucmVq
ZWN0KEludmFsaWRNb2RpZmljYXRpb25FcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86IHsKICAgICAgICAgZm9yIChhdXRvJiBh
dWRpb1NvdXJjZSA6IG1fYXVkaW9Tb3VyY2VzKSB7CiAgICAgICAgICAgICBpZiAoJmF1ZGlvU291
cmNlLT5zb3VyY2UoKSA9PSAmY3VycmVudFRyYWNrLT5wcml2YXRlVHJhY2soKSkgewogICAgICAg
ICAgICAgICAgIGlmICghYXVkaW9Tb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNr
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KElOVkFMSURfTU9ESUZJ
Q0FUSU9OX0VSUik7CisgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRN
b2RpZmljYXRpb25FcnJvcik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbigpLmVucXVldWVSZXBsYWNlVHJh
Y2tUYXNrKHNlbmRlciwgV1RGTW92ZSh0cmFjayksIFdURk1vdmUocHJvbWlzZSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwcm9t
aXNlLnJlamVjdChJTlZBTElEX01PRElGSUNBVElPTl9FUlIpOworICAgICAgICBwcm9taXNlLnJl
amVjdChJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzogewogICAgICAgICBmb3Ig
KGF1dG8mIHZpZGVvU291cmNlIDogbV92aWRlb1NvdXJjZXMpIHsKICAgICAgICAgICAgIGlmICgm
dmlkZW9Tb3VyY2UtPnNvdXJjZSgpID09ICZjdXJyZW50VHJhY2stPnByaXZhdGVUcmFjaygpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF2aWRlb1NvdXJjZS0+c2V0U291cmNlKHRyYWNrLT5wcml2
YXRlVHJhY2soKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoSU5WQUxJ
RF9NT0RJRklDQVRJT05fRVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3Qo
SW52YWxpZE1vZGlmaWNhdGlvbkVycm9yKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb25uZWN0aW9uKCkuZW5xdWV1ZVJl
cGxhY2VUcmFja1Rhc2soc2VuZGVyLCBXVEZNb3ZlKHRyYWNrKSwgV1RGTW92ZShwcm9taXNlKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIHByb21pc2UucmVqZWN0KElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUik7CisgICAgICAgIHBy
b21pc2UucmVqZWN0KEludmFsaWRNb2RpZmljYXRpb25FcnJvcik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRv
cmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmNwcApp
bmRleCA1YzdlYzQwYTg0MWE5MjE3OGE5Mzk3ZWI5ZGYzZjBhMmM4ZTU0OGQyLi45YjQxNmFiODVl
Yjc0OGExNjM3MzdjMmY0NjlhOTEwMWUzMTY4ZTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmln
YXRvckNvbnRlbnRVdGlscy5jcHAKQEAgLTQxLDE0ICs0MSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBib29sIHZlcmlmeUN1c3RvbUhhbmRsZXJVUkwoY29uc3QgVVJMJiBiYXNl
VVJMLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiByZXF1
aXJlcyB0aGF0IGl0IGlzIGEgU1lOVEFYX0VSUiBpZiB0aGUgIiVzIiB0b2tlbiBpcworICAgIC8v
IFRoZSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoYXQgaXQgaXMgYSBTeW50YXhFcnJvciBpZiB0
aGUgIiVzIiB0b2tlbiBpcwogICAgIC8vIG5vdCBwcmVzZW50LgogICAgIHN0YXRpYyBjb25zdCBj
aGFyIHRva2VuW10gPSAiJXMiOwogICAgIGludCBpbmRleCA9IHVybC5maW5kKHRva2VuKTsKICAg
ICBpZiAoLTEgPT0gaW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEl0IGlz
IGFsc28gYSBTWU5UQVhfRVJSIGlmIHRoZSBjdXN0b20gaGFuZGxlciBVUkwsIGFzIGNyZWF0ZWQg
YnkgcmVtb3ZpbmcKKyAgICAvLyBJdCBpcyBhbHNvIGEgU3ludGF4RXJyb3IgaWYgdGhlIGN1c3Rv
bSBoYW5kbGVyIFVSTCwgYXMgY3JlYXRlZCBieSByZW1vdmluZwogICAgIC8vIHRoZSAiJXMiIHRv
a2VuIGFuZCBwcmVwZW5kaW5nIHRoZSBiYXNlIHVybCwgZG9lcyBub3QgcmVzb2x2ZS4KICAgICBT
dHJpbmcgbmV3VVJMID0gdXJsOwogICAgIG5ld1VSTC5yZW1vdmUoaW5kZXgsIFdURl9BUlJBWV9M
RU5HVEgodG9rZW4pIC0gMSk7CkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKE5hdmlnYXRv
ciYgbmF2aQogICAgIFVSTCBiYXNlVVJMID0gbmF2aWdhdG9yLmZyYW1lKCktPmRvY3VtZW50KCkt
PmJhc2VVUkwoKTsKIAogICAgIGlmICghdmVyaWZ5Q3VzdG9tSGFuZGxlclVSTChiYXNlVVJMLCB1
cmwpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGlmICghdmVyaWZ5UHJvdG9j
b2xIYW5kbGVyU2NoZW1lKHNjaGVtZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNV
UklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsK
IAogICAgIE5hdmlnYXRvckNvbnRlbnRVdGlsczo6ZnJvbShuYXZpZ2F0b3IuZnJhbWUoKS0+cGFn
ZSgpKS0+Y2xpZW50KCktPnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKHNjaGVtZSwgYmFzZVVSTCwg
VVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgbmF2aWdhdG9yLmZyYW1lKCktPmRpc3BsYXlTdHJp
bmdNb2RpZmllZEJ5RW5jb2RpbmcodGl0bGUpKTsKICAgICByZXR1cm4geyB9OwpAQCAtMTQ0LDEw
ICsxNDQsMTAgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6Omlz
UHJvdG9jb2xIYW5kbGVyUmVnaXN0ZXJlZChOYXZpZ2F0b3IKICAgICBVUkwgYmFzZVVSTCA9IG5h
dmlnYXRvci5mcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7CiAKICAgICBpZiAoIXZlcmlm
eUN1c3RvbUhhbmRsZXJVUkwoYmFzZVVSTCwgdXJsKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CiAKICAgICBpZiAoIXZlcmlmeVByb3RvY29sSGFuZGxlclNjaGVtZShzY2hlbWUpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICByZXR1cm4gY3VzdG9tSGFuZGxlcnNT
dGF0ZVN0cmluZyhOYXZpZ2F0b3JDb250ZW50VXRpbHM6OmZyb20obmF2aWdhdG9yLmZyYW1lKCkt
PnBhZ2UoKSktPmNsaWVudCgpLT5pc1Byb3RvY29sSGFuZGxlclJlZ2lzdGVyZWQoc2NoZW1lLCBi
YXNlVVJMLCBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKSk7CiB9CkBAIC0xNjAsMTAgKzE2MCwx
MCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnVucmVnaXN0ZXJQ
cm90b2NvbEhhbmRsZXIoTmF2aWdhdG9yJiBuYQogICAgIFVSTCBiYXNlVVJMID0gbmF2aWdhdG9y
LmZyYW1lKCktPmRvY3VtZW50KCktPmJhc2VVUkwoKTsKIAogICAgIGlmICghdmVyaWZ5Q3VzdG9t
SGFuZGxlclVSTChiYXNlVVJMLCB1cmwpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lO
VEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAog
ICAgIGlmICghdmVyaWZ5UHJvdG9jb2xIYW5kbGVyU2NoZW1lKHNjaGVtZSkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIE5hdmlnYXRvckNvbnRlbnRVdGlsczo6ZnJvbShu
YXZpZ2F0b3IuZnJhbWUoKS0+cGFnZSgpKS0+Y2xpZW50KCktPnVucmVnaXN0ZXJQcm90b2NvbEhh
bmRsZXIoc2NoZW1lLCBiYXNlVVJMLCBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKTsKICAgICBy
ZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9xdW90YS9TdG9y
YWdlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL1N0b3JhZ2VJbmZvLmNw
cAppbmRleCAzNWEwZjJkMTRhNzk0YzgzOWJmM2YzNWM2NTQ2MWE1OTljZWUwYWYyLi45ZmMyOTk0
YmRhODI3MTI1MmJkNzIxMmYwMjQyNzY2NTczNTkyZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3F1b3RhL1N0b3JhZ2VJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3F1b3RhL1N0b3JhZ2VJbmZvLmNwcApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFN0b3Jh
Z2VJbmZvOjpxdWVyeVVzYWdlQW5kUXVvdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0
RXhlY3V0aW9uQ29udAogICAgIFN0b3JhZ2VRdW90YSogc3RvcmFnZVF1b3RhID0gZ2V0U3RvcmFn
ZVF1b3RhKHN0b3JhZ2VUeXBlKTsKICAgICBpZiAoIXN0b3JhZ2VRdW90YSkgewogICAgICAgICAv
LyBVbmtub3duIHN0b3JhZ2UgdHlwZSBpcyByZXF1ZXN0ZWQuCi0gICAgICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnBvc3RUYXNrKFN0b3JhZ2VFcnJvckNhbGxiYWNrOjpDYWxsYmFja1Rhc2s6
OmNyZWF0ZShXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBOT1RfU1VQUE9SVEVEX0VSUikpOworICAg
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhTdG9yYWdlRXJyb3JDYWxsYmFj
azo6Q2FsbGJhY2tUYXNrOjpjcmVhdGUoV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgTm90U3VwcG9y
dGVkRXJyb3IpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBzdG9yYWdlUXVvdGEtPnF1
ZXJ5VXNhZ2VBbmRRdW90YShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXVEZNb3ZlKHN1Y2Nlc3ND
YWxsYmFjayksIFdURk1vdmUoZXJyb3JDYWxsYmFjaykpOwpAQCAtNjksNyArNjksNyBAQCB2b2lk
IFN0b3JhZ2VJbmZvOjpyZXF1ZXN0UXVvdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgaQogICAgIFN0b3JhZ2VRdW90YSogc3RvcmFnZVF1b3RhID0gZ2V0
U3RvcmFnZVF1b3RhKHN0b3JhZ2VUeXBlKTsKICAgICBpZiAoIXN0b3JhZ2VRdW90YSkgewogICAg
ICAgICAvLyBVbmtub3duIHN0b3JhZ2UgdHlwZSBpcyByZXF1ZXN0ZWQuCi0gICAgICAgIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFN0b3JhZ2VFcnJvckNhbGxiYWNrOjpDYWxsYmFj
a1Rhc2s6OmNyZWF0ZShXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBOT1RfU1VQUE9SVEVEX0VSUikp
OworICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhTdG9yYWdlRXJyb3JD
YWxsYmFjazo6Q2FsbGJhY2tUYXNrOjpjcmVhdGUoV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgTm90
U3VwcG9ydGVkRXJyb3IpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBzdG9yYWdlUXVv
dGEtPnJlcXVlc3RRdW90YShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuZXdRdW90YUluQnl0ZXMs
IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FuYWx5c2VyTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FuYWx5c2VyTm9kZS5jcHAKaW5kZXgg
NmFmZjlhNjNkNjNiNDFiYzE4NmYwOTVjZjFkY2ZkZmM1YzYzYTk3ZC4uNTg4NzU1YzQ1MzkwOTMw
MjRhMWE3OWI0ZjViZWUyMGU0MTZlMjYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BbmFseXNlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQW5hbHlzZXJOb2RlLmNwcApAQCAtNzQsMTQgKzc0LDE0IEBAIHZvaWQgQW5h
bHlzZXJOb2RlOjpyZXNldCgpCiBFeGNlcHRpb25Pcjx2b2lkPiBBbmFseXNlck5vZGU6OnNldEZm
dFNpemUodW5zaWduZWQgc2l6ZSkKIHsKICAgICBpZiAoIW1fYW5hbHlzZXIuc2V0RmZ0U2l6ZShz
aXplKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIHJldHVybiB7IH07
CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEFuYWx5c2VyTm9kZTo6c2V0TWluRGVjaWJlbHMoZG91
YmxlIGspCiB7CiAgICAgaWYgKGsgPiBtYXhEZWNpYmVscygpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAKICAgICBtX2FuYWx5c2VyLnNldE1pbkRlY2liZWxzKGspOwogICAg
IHJldHVybiB7IH07CkBAIC05MCw3ICs5MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFuYWx5c2Vy
Tm9kZTo6c2V0TWluRGVjaWJlbHMoZG91YmxlIGspCiBFeGNlcHRpb25Pcjx2b2lkPiBBbmFseXNl
ck5vZGU6OnNldE1heERlY2liZWxzKGRvdWJsZSBrKQogewogICAgIGlmIChrIDwgbWluRGVjaWJl
bHMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgbV9hbmFseXNl
ci5zZXRNYXhEZWNpYmVscyhrKTsKICAgICByZXR1cm4geyB9OwpAQCAtOTksNyArOTksNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBBbmFseXNlck5vZGU6OnNldE1heERlY2liZWxzKGRvdWJsZSBrKQog
RXhjZXB0aW9uT3I8dm9pZD4gQW5hbHlzZXJOb2RlOjpzZXRTbW9vdGhpbmdUaW1lQ29uc3RhbnQo
ZG91YmxlIGspCiB7CiAgICAgaWYgKGsgPCAwIHx8IGsgPiAxKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAKICAgICBtX2FuYWx5c2VyLnNldFNtb290aGluZ1RpbWVDb25zdGFu
dChrKTsKICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyLmNwcAppbmRleCA2NWFhZDM3NjJhNTI1YTAxZTJkNjUxMmY0OTg1YzVk
MTllZjVmZThiLi4wODdlMmI2ODBjZjIyMjU1Nzc0NDcwODE5MDI2MDJhNjBjN2UyZmRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcApAQCAt
MTEzLDcgKzExMyw3IEBAIHZvaWQgQXVkaW9CdWZmZXI6OnJlbGVhc2VNZW1vcnkoKQogRXhjZXB0
aW9uT3I8UmVmPEZsb2F0MzJBcnJheT4+IEF1ZGlvQnVmZmVyOjpnZXRDaGFubmVsRGF0YSh1bnNp
Z25lZCBjaGFubmVsSW5kZXgpCiB7CiAgICAgaWYgKGNoYW5uZWxJbmRleCA+PSBtX2NoYW5uZWxz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgYXV0byYgY2hhbm5lbERh
dGEgPSAqbV9jaGFubmVsc1tjaGFubmVsSW5kZXhdOwogICAgIGF1dG8gYXJyYXkgPSBGbG9hdDMy
QXJyYXk6OmNyZWF0ZShjaGFubmVsRGF0YS51bnNoYXJlZEJ1ZmZlcigpLCBjaGFubmVsRGF0YS5i
eXRlT2Zmc2V0KCksIGNoYW5uZWxEYXRhLmxlbmd0aCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChh
cnJheSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAKaW5kZXggMTEzMTlhODVjZTk5MjBmMWNlMmY3YTk4Yjgw
YzNjNzFiMGE3ODBmNi4uMWZhM2QxODc4YmVhOTdlNWViNGYyMmJkNTFlNGIzYzc5NGIyM2FjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmNwcApAQCAtNDU1LDE2ICs0NTUsMTYgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpzdGFydFBsYXlpbmcoQnVmZmVyUGxheWJhY2tNb2Rl
IHBsYXliYWMKICAgICBjb250ZXh0KCkubm9kZVdpbGxCZWdpblBsYXliYWNrKCk7CiAKICAgICBp
ZiAobV9wbGF5YmFja1N0YXRlICE9IFVOU0NIRURVTEVEX1NUQVRFKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUod2hlbikg
fHwgKHdoZW4gPCAwKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGdyYWluT2Zmc2V0KSB8fCAoZ3JhaW5PZmZzZXQgPCAw
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgaWYgKCFz
dGQ6OmlzZmluaXRlKGdyYWluRHVyYXRpb24pIHx8IChncmFpbkR1cmF0aW9uIDwgMCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlmICghYnVmZmVyKCkp
CiAgICAgICAgIHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggNWM1NzVjNjNkZmIwYTg5ZjJiYzQ2ZmQ4ZDdhMmZh
YzViOTVkYWYwMy4uZDk1MDQ3YzkwMzA1MWMwYmMzZDVlNjM4YjI3YjQ1ODU0MjRiMDUzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApA
QCAtNDAyLDcgKzQwMiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxBdWRpb0J1ZmZlcj4+IEF1ZGlvQ29u
dGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lCiB7CiAgICAgYXV0byBh
dWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVy
T2ZGcmFtZXMsIHNhbXBsZVJhdGUpOwogICAgIGlmICghYXVkaW9CdWZmZXIpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICByZXR1cm4gYXVkaW9CdWZmZXIucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIApAQCAtNDEwLDcgKzQxMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxB
dWRpb0J1ZmZlcj4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyJiBhcnJh
eUJ1ZmZlCiB7CiAgICAgYXV0byBhdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9t
QXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci5kYXRhKCksIGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgo
KSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKCkpOwogICAgIGlmICghYXVkaW9CdWZmZXIpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIHJldHVybiBhdWRpb0J1ZmZlci5yZWxlYXNlTm9u
TnVsbCgpOwogfQogCkBAIC00NDAsNyArNDQwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U28K
ICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogICAgIAogICAgIGlmIChtZWRpYUVsZW1lbnQuYXVkaW9T
b3VyY2VOb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAog
ICAgIGF1dG8gbm9kZSA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKCp0aGlz
LCBtZWRpYUVsZW1lbnQpOwogCkBAIC00NjAsNyArNDYwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPE1l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVh
bVNvdXIKIAogICAgIGF1dG8gYXVkaW9UcmFja3MgPSBtZWRpYVN0cmVhbS5nZXRBdWRpb1RyYWNr
cygpOwogICAgIGlmIChhdWRpb1RyYWNrcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIE1lZGlhU3RyZWFtVHJhY2sqIHByb3ZpZGVyVHJh
Y2sgPSBudWxscHRyOwogICAgIGZvciAoYXV0byYgdHJhY2sgOiBhdWRpb1RyYWNrcykgewpAQCAt
NDcwLDcgKzQ3MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyCiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKCFwcm92aWRlclRyYWNrKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAKICAgICBsYXp5SW5pdGlhbGl6ZSgpOwogCkBAIC01MjAsNyArNTIwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmPFNjcmlwdFByb2Nlc3Nvck5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QKICAgICBjYXNlIDE2Mzg0OgogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgfQog
CiAgICAgLy8gQW4gSW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIGlmIGJ1
ZmZlclNpemUgb3IgbnVtYmVyT2ZJbnB1dENoYW5uZWxzIG9yIG51bWJlck9mT3V0cHV0Q2hhbm5l
bHMKQEAgLTUyOCwxOSArNTI4LDE5IEBAIEV4Y2VwdGlvbk9yPFJlZjxTY3JpcHRQcm9jZXNzb3JO
b2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90CiAgICAgLy8g
SW4gdGhpcyBjYXNlIGFuIEluZGV4U2l6ZUVycm9yIG11c3QgYmUgdGhyb3duLgogCiAgICAgaWYg
KCFudW1iZXJPZklucHV0Q2hhbm5lbHMgJiYgIW51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIFRoaXMgcGFyYW1l
dGVyIFtudW1iZXJPZklucHV0Q2hhbm5lbHNdIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBjaGFu
bmVscyBmb3IgdGhpcyBub2RlJ3MgaW5wdXQuIFZhbHVlcyBvZgogICAgIC8vIHVwIHRvIDMyIG11
c3QgYmUgc3VwcG9ydGVkLiBBIE5vdFN1cHBvcnRlZEVycm9yIG11c3QgYmUgdGhyb3duIGlmIHRo
ZSBudW1iZXIgb2YgY2hhbm5lbHMgaXMgbm90IHN1cHBvcnRlZC4KIAogICAgIGlmIChudW1iZXJP
ZklucHV0Q2hhbm5lbHMgPiBtYXhOdW1iZXJPZkNoYW5uZWxzKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIC8vIFRoaXMgcGFyYW1ldGVyIFtudW1iZXJP
Zk91dHB1dENoYW5uZWxzXSBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgZm9yIHRo
aXMgbm9kZSdzIG91dHB1dC4gVmFsdWVzIG9mCiAgICAgLy8gdXAgdG8gMzIgbXVzdCBiZSBzdXBw
b3J0ZWQuIEEgTm90U3VwcG9ydGVkRXJyb3IgbXVzdCBiZSB0aHJvd24gaWYgdGhlIG51bWJlciBv
ZiBjaGFubmVscyBpcyBub3Qgc3VwcG9ydGVkLgogCiAgICAgaWYgKG51bWJlck9mT3V0cHV0Q2hh
bm5lbHMgPiBtYXhOdW1iZXJPZkNoYW5uZWxzKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3Vw
cG9ydGVkRXJyb3IgfTsKIAogICAgIGF1dG8gbm9kZSA9IFNjcmlwdFByb2Nlc3Nvck5vZGU6OmNy
ZWF0ZSgqdGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgYnVmZmVyU2l6ZSwg
bnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzKTsKIApAQCAtNjEw
LDcgKzYxMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxDaGFubmVsU3BsaXR0ZXJOb2RlPj4gQXVkaW9D
b250ZXh0OjpjcmVhdGVDaGFubmVsU3BsaXR0ZXIoc2l6ZV90CiAgICAgbGF6eUluaXRpYWxpemUo
KTsKICAgICBhdXRvIG5vZGUgPSBDaGFubmVsU3BsaXR0ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIG1f
ZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG51bWJlck9mT3V0cHV0cyk7CiAgICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgcmV0dXJuIG5v
ZGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIApAQCAtNjIwLDcgKzYyMCw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxDaGFubmVsTWVyZ2VyTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdl
cihzaXplX3QgbnVtCiAgICAgbGF6eUluaXRpYWxpemUoKTsKICAgICBhdXRvIG5vZGUgPSBDaGFu
bmVsTWVyZ2VyTm9kZTo6Y3JlYXRlKCp0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0
ZSgpLCBudW1iZXJPZklucHV0cyk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAgICAgcmV0dXJuIG5vZGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIApA
QCAtNjQyLDcgKzY0Miw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxQZXJpb2RpY1dhdmU+PiBBdWRpb0Nv
bnRleHQ6OmNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkmIHJlCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAocmVhbC5sZW5ndGgoKSAhPSBpbWFnaW5hcnkubGVu
Z3RoKCkgfHwgKHJlYWwubGVuZ3RoKCkgPiBNYXhQZXJpb2RpY1dhdmVMZW5ndGgpIHx8ICFyZWFs
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgbGF6eUlu
aXRpYWxpemUoKTsKICAgICByZXR1cm4gUGVyaW9kaWNXYXZlOjpjcmVhdGUoc2FtcGxlUmF0ZSgp
LCByZWFsLCBpbWFnaW5hcnkpOwogfQpAQCAtMTA5OSw3ICsxMDk5LDcgQEAgdm9pZCBBdWRpb0Nv
bnRleHQ6OmRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkKIHZvaWQgQXVkaW9Db250ZXh0Ojpz
dXNwZW5kKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCiB7CiAgICAgaWYgKGlz
T2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICBwcm9taXNlLnJlamVjdChJTlZBTElEX1NUQVRF
X0VSUik7CisgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9pZCBBdWRpb0NvbnRl
eHQ6OnN1c3BlbmQoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHZvaWQgQXVk
aW9Db250ZXh0OjpyZXN1bWUoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsK
ICAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KElO
VkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJy
b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTU3LDcgKzExNTcsNyBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6cmVzdW1lKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2Up
CiB2b2lkIEF1ZGlvQ29udGV4dDo6Y2xvc2UoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJv
bWlzZSkKIHsKICAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgIHByb21pc2Uu
cmVqZWN0KElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxp
ZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggNzAzODdjZjFlNjMyYmIyNWM3
ZmY5MWFmZDIwZWZlMTU2NmM2ZTliMi4uZjIwMGIwNTBlNzI2MTI3Y2MxZDZmNmI1YTYzNWY2N2Fm
MmI0ZTc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmNwcApAQCAtMTI5LDEzICsxMjksMTMgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXVkaW9Ob2RlOjpj
b25uZWN0KEF1ZGlvTm9kZSYgZGVzdGluYXRpb24sIHVuc2lnbmVkIG91dHB1dEluZGUKIAogICAg
IC8vIFNhbml0eSBjaGVjayBpbnB1dCBhbmQgb3V0cHV0IGluZGljZXMuCiAgICAgaWYgKG91dHB1
dEluZGV4ID49IG51bWJlck9mT3V0cHV0cygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVy
cm9yIH07CiAKICAgICBpZiAoaW5wdXRJbmRleCA+PSBkZXN0aW5hdGlvbi5udW1iZXJPZklucHV0
cygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICBpZiAoY29udGV4
dCgpICE9IGRlc3RpbmF0aW9uLmNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKICAgICBhdXRvKiBpbnB1dCA9IGRlc3RpbmF0aW9uLmlucHV0KGlucHV0SW5kZXgpOwogICAg
IGF1dG8qIG91dHB1dCA9IHRoaXMtPm91dHB1dChvdXRwdXRJbmRleCk7CkBAIC0xNTMsMTAgKzE1
MywxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb05vZGU6OmNvbm5lY3QoQXVkaW9QYXJhbSYg
cGFyYW0sIHVuc2lnbmVkIG91dHB1dEluZGV4KQogICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tl
ciBsb2NrZXIoY29udGV4dCgpKTsKIAogICAgIGlmIChvdXRwdXRJbmRleCA+PSBudW1iZXJPZk91
dHB1dHMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgaWYgKGNv
bnRleHQoKSAhPSBwYXJhbS5jb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
WU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9Owog
CiAgICAgYXV0byogb3V0cHV0ID0gdGhpcy0+b3V0cHV0KG91dHB1dEluZGV4KTsKICAgICBwYXJh
bS5jb25uZWN0KG91dHB1dCk7CkBAIC0xNzEsNyArMTcxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
QXVkaW9Ob2RlOjpkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4KQogCiAgICAgLy8gU2Fu
aXR5IGNoZWNrIGlucHV0IGFuZCBvdXRwdXQgaW5kaWNlcy4KICAgICBpZiAob3V0cHV0SW5kZXgg
Pj0gbnVtYmVyT2ZPdXRwdXRzKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9T
SVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
IAogICAgIGF1dG8qIG91dHB1dCA9IHRoaXMtPm91dHB1dChvdXRwdXRJbmRleCk7CiAgICAgb3V0
cHV0LT5kaXNjb25uZWN0QWxsKCk7CkBAIC0xOTAsNyArMTkwLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gQXVkaW9Ob2RlOjpzZXRDaGFubmVsQ291bnQodW5zaWduZWQgY2hhbm5lbENvdW50KQogICAg
IEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKIAogICAgIGlmICgh
KGNoYW5uZWxDb3VudCA+IDAgJiYgY2hhbm5lbENvdW50IDw9IEF1ZGlvQ29udGV4dDo6bWF4TnVt
YmVyT2ZDaGFubmVscygpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RB
VEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9
OwogCiAgICAgaWYgKG1fY2hhbm5lbENvdW50ID09IGNoYW5uZWxDb3VudCkKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTIyOSw3ICsyMjksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb05vZGU6
OnNldENoYW5uZWxDb3VudE1vZGUoY29uc3QgU3RyaW5nJiBtb2RlKQogICAgIGVsc2UgaWYgKG1v
ZGUgPT0gImV4cGxpY2l0IikKICAgICAgICAgbV9jaGFubmVsQ291bnRNb2RlID0gRXhwbGljaXQ7
CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAg
ICBpZiAobV9jaGFubmVsQ291bnRNb2RlICE9IG9sZE1vZGUpCiAgICAgICAgIHVwZGF0ZUNoYW5u
ZWxzRm9ySW5wdXRzKCk7CkBAIC0yNTksNyArMjU5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXVk
aW9Ob2RlOjpzZXRDaGFubmVsSW50ZXJwcmV0YXRpb24oY29uc3QgU3RyaW5nJiBpbnRlcnByZXRh
dGkKICAgICBlbHNlIGlmIChpbnRlcnByZXRhdGlvbiA9PSAiZGlzY3JldGUiKQogICAgICAgICBt
X2NoYW5uZWxJbnRlcnByZXRhdGlvbiA9IEF1ZGlvQnVzOjpEaXNjcmV0ZTsKICAgICBlbHNlCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIHJldHVybiB7IH07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU2No
ZWR1bGVkU291cmNlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHAKaW5kZXggZGEwNzU2N2ZmMTVkNGNkMjEwYTdlMDc0
MzIxYWQ0OTdmMDhmNGNjYy4uODAzNmZkOWZhOWQ5NzNiMWQ1ZjcwYTY0N2QzMTEwYjAyMzA2NTA2
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVk
dWxlZFNvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmNwcApAQCAtMTMzLDkgKzEzMyw5IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZTo6c3RhcnQoZG91YmxlIHdoZW4pCiAg
ICAgY29udGV4dCgpLm5vZGVXaWxsQmVnaW5QbGF5YmFjaygpOwogCiAgICAgaWYgKG1fcGxheWJh
Y2tTdGF0ZSAhPSBVTlNDSEVEVUxFRF9TVEFURSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
U3RhdGVFcnJvciB9OwogICAgIGlmICghc3RkOjppc2Zpbml0ZSh3aGVuKSB8fCB3aGVuIDwgMCkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgbV9zdGFydFRp
bWUgPSB3aGVuOwogICAgIG1fcGxheWJhY2tTdGF0ZSA9IFNDSEVEVUxFRF9TVEFURTsKQEAgLTE0
OCw5ICsxNDgsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6
OnN0b3AoZG91YmxlIHdoZW4pCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIGlm
IChtX3BsYXliYWNrU3RhdGUgPT0gVU5TQ0hFRFVMRURfU1RBVEUgfHwgbV9lbmRUaW1lICE9IFVu
a25vd25UaW1lKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAg
aWYgKCFzdGQ6OmlzZmluaXRlKHdoZW4pIHx8IHdoZW4gPCAwKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICBtX2VuZFRpbWUgPSB3aGVuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAppbmRleCAy
ZDE4YWJhMTFkNTlkOTJlODc3MjI1NmZjMTRmYjFlMmUwNzRkOTdlLi5jMjQwZWI4YThiNzNjYjZj
YTg3ZmQ3N2NiZTJlZjExZDQyMGZiOGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKQEAgLTEyMSw3ICsxMjEsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZXIqIGJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChidWZmZXItPnNhbXBsZVJhdGUoKSAhPSBj
b250ZXh0KCkuc2FtcGxlUmF0ZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NV
UFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVy
cm9yIH07CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVmZmVyLT5udW1iZXJP
ZkNoYW5uZWxzKCk7CiAgICAgc2l6ZV90IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci0+bGVuZ3RoKCk7
CkBAIC0xMzEsNyArMTMxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udm9sdmVyTm9kZTo6c2V0
QnVmZmVyKEF1ZGlvQnVmZmVyKiBidWZmZXIpCiAgICAgYm9vbCBpc0NoYW5uZWxDb3VudEdvb2Qg
PSAobnVtYmVyT2ZDaGFubmVscyA9PSAxIHx8IG51bWJlck9mQ2hhbm5lbHMgPT0gMiB8fCBudW1i
ZXJPZkNoYW5uZWxzID09IDQpICYmIGJ1ZmZlckxlbmd0aDsKIAogICAgIGlmICghaXNDaGFubmVs
Q291bnRHb29kKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAg
ICAvLyBXcmFwIHRoZSBBdWRpb0J1ZmZlciBieSBhbiBBdWRpb0J1cy4gSXQncyBhbiBlZmZpY2ll
bnQgcG9pbnRlciBzZXQgYW5kIG5vdCBhIG1lbWNweSgpLgogICAgIC8vIFRoaXMgbWVtb3J5IGlz
IHNpbXBseSB1c2VkIGluIHRoZSBSZXZlcmIgY29uc3RydWN0b3IgYW5kIG5vIHJlZmVyZW5jZSB0
byBpdCBpcyBrZXB0IGZvciBsYXRlciB1c2UgaW4gdGhhdCBjbGFzcy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmNwcAppbmRleCBiMjU0MmQzMjYzZWQwYThlMTI3MTMxMTg1MDNjNmY2ZTQwN2Nh
YTFlLi4xN2FkODcxNzNlZjVhYWVlMjA2ZjRhYzA3YThlZGI2OWVhODBiNTRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzZXRDaGFubmVsQ291bnQodW5zaWduZWQg
Y2hhbm5lbEMKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKCFtYXhDaGFu
bmVsQ291bnQoKSB8fCBjaGFubmVsQ291bnQgPiBtYXhDaGFubmVsQ291bnQoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgYXV0byBvbGRDaGFubmVsQ291
bnQgPSB0aGlzLT5jaGFubmVsQ291bnQoKTsKICAgICBhdXRvIHJlc3VsdCA9IEF1ZGlvTm9kZTo6
c2V0Q2hhbm5lbENvdW50KGNoYW5uZWxDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAKaW5kZXggN2VhZTgwOTFjNzJmY2RiODYxNTYxM2U0MjZl
MjNiYzUzODgxMzcwYS4uZDQ0YzMyMjg0YTA3OTBhOGUzOWQ3NzkzMDZmMTlmMmYyMTA4N2U3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcApAQCAt
NDQsNyArNDQsNyBAQCBpbmxpbmUgRGVsYXlOb2RlOjpEZWxheU5vZGUoQXVkaW9Db250ZXh0JiBj
b250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RAogRXhjZXB0aW9uT3I8UmVmPERl
bGF5Tm9kZT4+IERlbGF5Tm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgZmxvYXQg
c2FtcGxlUmF0ZSwgZG91YmxlIG1heERlbGF5VGltZSkKIHsKICAgICBpZiAobWF4RGVsYXlUaW1l
IDw9IDAgfHwgbWF4RGVsYXlUaW1lID49IG1heGltdW1BbGxvd2VkRGVsYXlUaW1lKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRGVsYXlOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUsIG1heERlbGF5VGltZSkpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b250ZXh0LmNwcAppbmRleCBiYTVlNDlmYWUyZTlkY2VlMGM3MmY4ZDg1ZTk4ODY0YjA1NjZiNjY4
Li5iNTZmN2YyOWFiZmZiMDM3YmY2ODY0M2JhNjU5ZTc0ZWZjNGE5ODZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5j
cHAKQEAgLTQxLDkgKzQxLDkgQEAgRXhjZXB0aW9uT3I8UmVmPE9mZmxpbmVBdWRpb0NvbnRleHQ+
PiBPZmZsaW5lQXVkaW9Db250ZXh0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW8KIHsKICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIHdvcmtlcnMuCiAgICAgaWYgKCFpczxEb2N1bWVudD4oY29u
dGV4dCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBpZiAo
IW51bWJlck9mQ2hhbm5lbHMgfHwgbnVtYmVyT2ZDaGFubmVscyA+IDEwIHx8ICFudW1iZXJPZkZy
YW1lcyB8fCAhaXNTYW1wbGVSYXRlUmFuZ2VHb29kKHNhbXBsZVJhdGUpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKICAgICBhdXRvIGF1ZGlvQ29udGV4dCA9IGFkb3B0UmVmKCpuZXcgT2Zm
bGluZUF1ZGlvQ29udGV4dChkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksIG51bWJlck9mQ2hh
bm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKSk7CiAgICAgYXVkaW9Db250ZXh0LT5z
dXNwZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gV1RGTW92ZShhdWRpb0NvbnRleHQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcApp
bmRleCBkMzhmOWYzYzZkZjE2N2M3MTA1YzdlNjg0NmI2NTU5YjYwYWQ1MWZhLi5jN2U5MGU4Mzc2
ZWNhZDQxYWI1YWQ5MzZiODM3ZjAwZjBjNDM0MGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IE9zY2lsbGF0b3JOb2RlOjpzZXRUeXBlKFR5cGUgdHlwZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBUeXBlOjpDdXN0b206CiAgICAgICAgIGlmIChtX3R5cGUg
IT0gVHlwZTo6Q3VzdG9tKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
U1RBVEVfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IgfTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5j
cHAKaW5kZXggZjFmMGNhY2U2ZDQ1YWQ5NzQzMGY4ZjA5MmZhY2ZhNDkwYzBlYzI1MC4uNGU4ZDE1
YjZmMGY5NDVlNzBkMDg1N2Q1ZDk2OWJiZDgyODNkMzYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5j
cHAKQEAgLTQxLDEzICs0MSwxMyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8RGF0YWJhc2U+PiBET01X
aW5kb3dXZWJEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKERPTVdpbmRvdyYgd2luZAogICAgICAgICBy
ZXR1cm4gUmVmUHRyPERhdGFiYXNlPiB7IG51bGxwdHIgfTsKICAgICBhdXRvJiBtYW5hZ2VyID0g
RGF0YWJhc2VNYW5hZ2VyOjpzaW5nbGV0b24oKTsKICAgICBpZiAoIW1hbmFnZXIuaXNBdmFpbGFi
bGUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogICAgIGF1dG8qIGRvY3VtZW50
ID0gd2luZG93LmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U2VjdXJpdHlFcnJvciB9OwogICAgIGF1dG8mIHNlY3VyaXR5T3JpZ2luID0gZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCk7CiAgICAgaWYgKCFzZWN1cml0eU9yaWdpbi5jYW5BY2Nlc3NEYXRhYmFz
ZShkb2N1bWVudC0+dG9wT3JpZ2luKCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VD
VVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07
CiAgICAgYXV0byByZXN1bHQgPSBtYW5hZ2VyLm9wZW5EYXRhYmFzZSgqd2luZG93LmRvY3VtZW50
KCksIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBXVEZNb3ZlKGNy
ZWF0aW9uQ2FsbGJhY2spKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBUbyBwcmVzZXJ2ZSBvdXIgcGFzdCBiZWhhdmlvciwgdGhpcyBkaXNjYXJk
cyB0aGUgZXJyb3Igc3RyaW5nIGluIHRoZSBleGNlcHRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4IGY1NWQ2NTRlNTA1ZTg1NzRl
Y2JkOWJhYmFlYzNlYmJkMzVjMzBjZDMuLjc4M2Y5MjFmMTI3YTVhMzRlY2ViNThhYzZkNWFhOGRm
MzM2YjIxZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwCkBAIC0yNTEsNyArMjUxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRGF0YWJhc2U6
Om9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpCiAgICAg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKICAgICBhdXRvJiB0aHJlYWQg
PSBkYXRhYmFzZVRocmVhZCgpOwogICAgIGlmICh0aHJlYWQudGVybWluYXRpb25SZXF1ZXN0ZWQo
JnN5bmNocm9uaXplcikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRF
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsK
IAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlc3VsdDsKICAgICBhdXRvIHRhc2sgPSBzdGQ6Om1h
a2VfdW5pcXVlPERhdGFiYXNlT3BlblRhc2s+KCp0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgc3luY2hyb25pemVyLCByZXN1bHQpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNp
b25Jbk5ld0RhdGFiCiAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOwogCiAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9m
aWxlbmFtZSwgdHJ1ZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRF
X0VSUiwgZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3Fs
aXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgZm9ybWF0
RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpIH07CiAgICAgaWYg
KCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQogICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtICgl
ZCAlcykiLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKIApAQCAtMzcxLDcgKzM3MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERh
dGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0Rh
dGFiCiAgICAgICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkgewogICAgICAg
ICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8g
b3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHN0YXJ0IHRyYW5zYWN0aW9uIiwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgV1RGTW92ZShtZXNzYWdlKSB9Owor
ICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgV1RG
TW92ZShtZXNzYWdlKSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTdHJpbmcgdGFi
bGVOYW1lKHVucXVhbGlmaWVkSW5mb1RhYmxlTmFtZSk7CkBAIC0zODIsMTMgKzM4MiwxMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91
bGRTZXRWZXJzaW9uSW5OZXdEYXRhYgogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2Fn
ZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0
byBjcmVhdGUgJ2luZm8nIHRhYmxlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5z
YWN0aW9uLnJvbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uu
Y2xvc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFU
RV9FUlIsIFdURk1vdmUobWVzc2FnZSkgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIFdURk1vdmUobWVzc2FnZSkgfTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1
cnJlbnRWZXJzaW9uLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9
IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBy
ZWFkIGN1cnJlbnQgdmVyc2lvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3Fs
aXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9u
LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgV1RG
TW92ZShtZXNzYWdlKSB9OworICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciwgV1RGTW92ZShtZXNzYWdlKSB9OwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKQEAgLTM5OSw3ICszOTksNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBz
aG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYgogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVz
c2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxl
ZCB0byB3cml0ZSBjdXJyZW50IHZlcnNpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgICAgICAgICAg
dHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRh
YmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9TVEFURV9FUlIsIFdURk1vdmUobWVzc2FnZSkgfTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBXVEZNb3ZlKG1lc3NhZ2UpIH07
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gbV9l
eHBlY3RlZFZlcnNpb247CiAgICAgICAgICAgICB9CkBAIC00MTcsNyArNDE3LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0
VmVyc2lvbkluTmV3RGF0YWIKICAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUg
ZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGFsd2F5cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9u
IG9mIHRoZSBkYXRhYmFzZSB3ZSBoYXZlLgogICAgIGlmICgoIW1fbmV3IHx8IHNob3VsZFNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlKSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4
cGVjdGVkVmVyc2lvbiAhPSBjdXJyZW50VmVyc2lvbikgewogICAgICAgICBtX3NxbGl0ZURhdGFi
YXNlLmNsb3NlKCk7Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VS
UiwgInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCB2ZXJzaW9uIG1pc21hdGNoLCAnIiArIG1fZXhw
ZWN0ZWRWZXJzaW9uICsgIicgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnRWZXJzaW9uIG9mICci
ICsgY3VycmVudFZlcnNpb24gKyAiJyIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRTdGF0ZUVycm9yLCAidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIHZlcnNpb24gbWlzbWF0
Y2gsICciICsgbV9leHBlY3RlZFZlcnNpb24gKyAiJyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVu
dFZlcnNpb24gb2YgJyIgKyBjdXJyZW50VmVyc2lvbiArICInIiB9OwogICAgIH0KIAogICAgIG1f
c3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplci5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
TWFuYWdlci5jcHAKaW5kZXggNmNlMDQyMjdkYjk2ZTI1ZTY1ZWZiY2IwNjQ1MGNlYzgyNWFjZDg5
Ny4uYTE4MTA0YzRjZmVjNGFlMzU4NWI3NGFkNTAyNzA5MWM4NDI5ZDhmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNw
cApAQCAtMTIzLDcgKzEyMyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxEYXRhYmFzZT4+IERhdGFiYXNl
TWFuYWdlcjo6b3BlbkRhdGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byBi
YWNrZW5kID0gdHJ5VG9PcGVuRGF0YWJhc2VCYWNrZW5kKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVk
VmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlLCBGaXJzdFRyeVRvT3BlbkRhdGFiYXNlKTsKIAogICAgIGlmIChiYWNrZW5kLmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGlmIChiYWNrZW5kLmV4Y2VwdGlvbigpLmNvZGUoKSA9PSBRVU9U
QV9FWENFRURFRF9FUlIpIHsKKyAgICAgICAgaWYgKGJhY2tlbmQuZXhjZXB0aW9uKCkuY29kZSgp
ID09IFF1b3RhRXhjZWVkZWRFcnJvcikgewogICAgICAgICAgICAgLy8gTm90aWZ5IHRoZSBjbGll
bnQgdGhhdCB3ZSd2ZSBleGNlZWRlZCB0aGUgZGF0YWJhc2UgcXVvdGEuCiAgICAgICAgICAgICAv
LyBUaGUgY2xpZW50IG1heSB3YW50IHRvIGluY3JlYXNlIHRoZSBxdW90YSwgYW5kIHdlJ2xsIGdp
dmUgaXQKICAgICAgICAgICAgIC8vIG9uZSBtb3JlIHRyeSBhZnRlciBpZiB0aGF0IGlzIHRoZSBj
YXNlLgpAQCAtMTM3LDcgKzEzNyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxEYXRhYmFzZT4+IERhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRpb25DCiAgICAgfQog
CiAgICAgaWYgKGJhY2tlbmQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgaWYgKGJhY2tlbmQu
ZXhjZXB0aW9uKCkuY29kZSgpID09IElOVkFMSURfU1RBVEVfRVJSKQorICAgICAgICBpZiAoYmFj
a2VuZC5leGNlcHRpb24oKS5jb2RlKCkgPT0gSW52YWxpZFN0YXRlRXJyb3IpCiAgICAgICAgICAg
ICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwgYmFja2VuZC5leGNlcHRpb24oKS5tZXNzYWdlKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2dPcGVuRGF0YWJhc2VFcnJvcihjb250ZXh0
LCBuYW1lKTsKQEAgLTE1MiwxMiArMTUyLDEyIEBAIEV4Y2VwdGlvbk9yPFJlZjxEYXRhYmFzZT4+
IERhdGFiYXNlTWFuYWdlcjo6dHJ5VG9PcGVuRGF0YWJhc2VCYWNrZW5kKFNjcmlwdEV4ZWN1CiAg
ICAgaWYgKGlzPERvY3VtZW50Pigmc2NyaXB0Q29udGV4dCkpIHsKICAgICAgICAgYXV0byogcGFn
ZSA9IGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRDb250ZXh0KS5wYWdlKCk7CiAgICAgICAgIGlm
ICghcGFnZSB8fCBwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKQotICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAKICAgICBpZiAoc2NyaXB0Q29udGV4dC5p
c1dvcmtlckdsb2JhbFNjb3BlKCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAKICAgICBhdXRvIGJhY2tlbmRD
b250ZXh0ID0gdGhpcy0+ZGF0YWJhc2VDb250ZXh0KHNjcmlwdENvbnRleHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
CmluZGV4IGVhZmRhN2UxMGM0ZjJjNTBhYzgwMjYzMjA4Y2RkOWI2ZDQzNzE2NjYuLmExOTFhODEy
YTFhOTY0MWE4ZDRlODgxZGQ3ODQ3NjZjOTJlMWE2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKQEAgLTE0NCwx
MCArMTQ0LDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVh
dGVRdW90YUZvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpCiAgICAgYXV0byByZXF1aXJlbWVu
dCA9IHVzYWdlICsgc3RkOjptYXg8dW5zaWduZWQgbG9uZyBsb25nPigxLCBlc3RpbWF0ZWRTaXpl
KTsKICAgICBpZiAocmVxdWlyZW1lbnQgPCB1c2FnZSkgewogICAgICAgICAvLyBUaGUgZXN0aW1h
dGVkIHNpemUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxvdzsgZG9uJ3QgYWxsb3cgY3Jl
YXRpb24uCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICB9CiAgICAgaWYgKHJl
cXVpcmVtZW50ID4gcXVvdGFOb0xvY2sob3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFFVT1RBX0VYQ0VFREVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUXVv
dGFFeGNlZWRlZEVycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTU5LDcgKzE1OSw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJh
c2UoRGF0YWJhc2VDb250ZXh0JiBjb250ZXh0CiAgICAgYXV0byBvcmlnaW4gPSBjb250ZXh0LnNl
Y3VyaXR5T3JpZ2luKCk7CiAKICAgICBpZiAoaXNEZWxldGluZ0RhdGFiYXNlT3JPcmlnaW5Gb3Io
b3JpZ2luLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgcmVj
b3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogCkBAIC0xODUsNyArMTg1LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShE
YXRhYmFzZUNvbnRleHQmIGNvbnRleHQKICAgICAvLyBhZ2Fpbi4gSGVuY2UsIHdlIGRvbid0IGNh
bGwgZG9uZUNyZWF0aW5nRGF0YWJhc2UoKSB5ZXQgaW4gdGhhdCBjYXNlLgogCiAgICAgYXV0byBl
eGNlcHRpb24gPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIGlmIChleGNlcHRpb24u
Y29kZSgpICE9IFFVT1RBX0VYQ0VFREVEX0VSUikKKyAgICBpZiAoZXhjZXB0aW9uLmNvZGUoKSAh
PSBRdW90YUV4Y2VlZGVkRXJyb3IpCiAgICAgICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKG9yaWdp
biwgbmFtZSk7CiAKICAgICByZXR1cm4gV1RGTW92ZShleGNlcHRpb24pOwpAQCAtMjE2LDcgKzIx
Niw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxp
c2hEYXRhYmFzZShEYXRhYmFzZUNvbnRleHQmIGNvCiAgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBhdXRvIGV4Y2VwdGlvbiA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJU
KGV4Y2VwdGlvbi5jb2RlKCkgPT0gUVVPVEFfRVhDRUVERURfRVJSKTsKKyAgICBBU1NFUlQoZXhj
ZXB0aW9uLmNvZGUoKSA9PSBRdW90YUV4Y2VlZGVkRXJyb3IpOwogICAgIGRvbmVDcmVhdGluZ0Rh
dGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAKICAgICByZXR1cm4gV1RGTW92ZShleGNlcHRpb24pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRT
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQu
Y3BwCmluZGV4IDZjYmEyZWVmY2VkOGJkZTg2MjBmNGE4YjJiMGEyYThjMTczNTNkNGIuLjIxNjU3
NmVkODA3MmVmMjE1MDQwNTNkZDE0MDk5YWFkMWY1YmEzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5jcHAKQEAgLTM5LDkgKzM5
LDkgQEAgU1FMUmVzdWx0U2V0OjpTUUxSZXN1bHRTZXQoKQogRXhjZXB0aW9uT3I8aW50NjRfdD4g
U1FMUmVzdWx0U2V0OjppbnNlcnRJZCgpIGNvbnN0CiB7CiAgICAgLy8gNC4xMS40IC0gUmV0dXJu
IHRoZSBpZCBvZiB0aGUgbGFzdCByb3cgaW5zZXJ0ZWQgYXMgYSByZXN1bHQgb2YgdGhlIHF1ZXJ5
Ci0gICAgLy8gSWYgdGhlIHF1ZXJ5IGRpZG4ndCByZXN1bHQgaW4gYW55IHJvd3MgYmVpbmcgYWRk
ZWQsIHJhaXNlIGFuIElOVkFMSURfQUNDRVNTX0VSUiBleGNlcHRpb24KKyAgICAvLyBJZiB0aGUg
cXVlcnkgZGlkbid0IHJlc3VsdCBpbiBhbnkgcm93cyBiZWluZyBhZGRlZCwgcmFpc2UgYW4gSW52
YWxpZEFjY2Vzc0Vycm9yIGV4Y2VwdGlvbgogICAgIGlmICghbV9pbnNlcnRJZCkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgcmV0dXJuIG1faW5zZXJ0SWQu
dmFsdWUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAKaW5kZXggNjVhYTAwZDU2MjRlZjQyZWZk
NDg3M2RiYmE5ZGE2OTNjYmM5MmQ2OS4uNDk1YmIxOGIzOTY2YzZhYTRmZjRiMzVmMzk3MTJjOWFm
YjZhNzY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxSZXN1bHRTZXRSb3dMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHVuc2lnbmVk
IFNRTFJlc3VsdFNldFJvd0xpc3Q6Omxlbmd0aCgpIGNvbnN0CiBFeGNlcHRpb25PcjxWZWN0b3I8
V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTUUxWYWx1ZT4+PiBTUUxSZXN1bHRTZXRSb3dMaXN0
OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA+PSBsZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgVmVjdG9yPFdURjo6
S2V5VmFsdWVQYWlyPFN0cmluZywgU1FMVmFsdWU+PiByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAKaW5kZXgg
Zjg5OTQzMGRjYjY1MWM4NDIzZWQ5NGUwYjE5MjcyYTIzZGU4Y2YyYi4uZjAyMTYyMDVhY2IyMTM4
ZWQwMTAyYjNkN2JmZmUwYTIzZDVkMzNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAKQEAgLTc1LDcgKzc1LDcgQEAg
U1FMVHJhbnNhY3Rpb246On5TUUxUcmFuc2FjdGlvbigpCiBFeGNlcHRpb25Pcjx2b2lkPiBTUUxU
cmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgc3RkOjpv
cHRpb25hbDxWZWN0b3I8U1FMVmFsdWU+PiYmIGFyZ3VtZW50cywgUmVmUHRyPFNRTFN0YXRlbWVu
dENhbGxiYWNrPiYmIGNhbGxiYWNrLCBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4m
JiBjYWxsYmFja0Vycm9yKQogewogICAgIGlmICghbV9leGVjdXRlU3FsQWxsb3dlZCB8fCAhbV9k
YXRhYmFzZS0+b3BlbmVkKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NU
QVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Ig
fTsKIAogICAgIGludCBwZXJtaXNzaW9ucyA9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZFdyaXRl
TWFzazsKICAgICBpZiAoIW1fZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpLmFsbG93RGF0YWJh
c2VBY2Nlc3MoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5jcHAKaW5kZXggOTc3MDAwYTVkNjhiZjE4YTJkZjlkZWNmNTVhNmNmMzczNWVmMGFmNi4u
ZmJmNDk2ZGE1ODQ5ZWYzZDdkNWYwNDIxNmE5ZjE2YjE0NWU2MGZmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKQEAgLTE3Nyw3ICsxNzcs
NyBAQCBFeGNlcHRpb25PcjxSZWY8V2ViU29ja2V0Pj4gV2ViU29ja2V0OjpjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgYwogRXhjZXB0aW9uT3I8UmVmPFdlYlNvY2tldD4+
IFdlYlNvY2tldDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xzKQogewogICAgIGlm
ICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgYXV0byBz
b2NrZXQgPSBhZG9wdFJlZigqbmV3IFdlYlNvY2tldChjb250ZXh0KSk7CiAgICAgc29ja2V0LT5z
dXNwZW5kSWZOZWVkZWQoKTsKQEAgLTIyNywxOCArMjI3LDE4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHByCiAgICAgaWYgKCFtX3VybC5pc1ZhbGlkKCkpIHsKICAgICAgICAgY29udGV4dC5hZGRD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIklu
dmFsaWQgdXJsIGZvciBXZWJTb2NrZXQgIiArIG1fdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRU
b0xlbmd0aCgpKTsKICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAgICAgfQogCiAgICAgaWYgKCFtX3VybC5wcm90b2NvbElzKCJ3cyIpICYmICFt
X3VybC5wcm90b2NvbElzKCJ3c3MiKSkgewogICAgICAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV3JvbmcgdXJsIHNj
aGVtZSBmb3IgV2ViU29ja2V0ICIgKyBtX3VybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5n
dGgoKSk7CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwogICAgIH0KICAgICBpZiAobV91cmwuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpIHsKICAg
ICAgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgIlVSTCBoYXMgZnJhZ21lbnQgY29tcG9uZW50ICIgKyBtX3VybC5zdHJp
bmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSk7CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIH0KIAogICAgIEFTU0VSVChjb250ZXh0
LmNvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKQEAgLTI1NCw3ICsyNTQsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwcgogICAgICAgICAgICAgbWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiV2ViU29j
a2V0IHdpdGhvdXQgcG9ydCBibG9ja2VkIik7CiAgICAgICAgIGNvbnRleHQuYWRkQ29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UpOwog
ICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VD
VVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07
CiAgICAgfQogCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBjaGVjayB0aGUgaXNvbGF0
ZWQgd29ybGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBvbmNlIHdlYmtpdC5vcmcvYi8xMDQ1
MjAgaXMgc29sdmVkLgpAQCAtMjYyLDcgKzI2Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNv
Y2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBy
CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CiAKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0
aGlzIGJlIHRocm93aW5nIGFuIGV4Y2VwdGlvbj8KLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJv
ciB9OwogICAgIH0KIAogICAgIGlmIChhdXRvKiBwcm92aWRlciA9IGNvbnRleHQuc29ja2V0UHJv
dmlkZXIoKSkKQEAgLTI3NiwxMyArMjc2LDEzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tl
dDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByCiAg
ICAgLy8gaW1wb3NlcyBhIHN0cmljdGVyIHJ1bGU6ICJ0aGUgZWxlbWVudHMgTVVTVCBiZSBub24t
ZW1wdHkgc3RyaW5ncyB3aXRoIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBpbiBbUkZDMjYxNl0sCiAg
ICAgLy8gYW5kIE1VU1QgYWxsIGJlIHVuaXF1ZSBzdHJpbmdzLiIKICAgICAvLwotICAgIC8vIEhl
cmUsIHdlIHRocm93IFNZTlRBWF9FUlIgaWYgdGhlIGdpdmVuIHByb3RvY29scyBkbyBub3QgbWVl
dCB0aGUgbGF0dGVyIGNyaXRlcmlhLiBUaGlzIGJlaGF2aW9yIGRvZXMgbm90CisgICAgLy8gSGVy
ZSwgd2UgdGhyb3cgU3ludGF4RXJyb3IgaWYgdGhlIGdpdmVuIHByb3RvY29scyBkbyBub3QgbWVl
dCB0aGUgbGF0dGVyIGNyaXRlcmlhLiBUaGlzIGJlaGF2aW9yIGRvZXMgbm90CiAgICAgLy8gY29t
cGx5IHdpdGggV2ViU29ja2V0IEFQSSBzcGVjaWZpY2F0aW9uLCBidXQgaXQgc2VlbXMgdG8gYmUg
dGhlIG9ubHkgcmVhc29uYWJsZSB3YXkgdG8gaGFuZGxlIHRoaXMgY29uZmxpY3QuCiAgICAgZm9y
IChhdXRvJiBwcm90b2NvbCA6IHByb3RvY29scykgewogICAgICAgICBpZiAoIWlzVmFsaWRQcm90
b2NvbFN0cmluZyhwcm90b2NvbCkpIHsKICAgICAgICAgICAgIGNvbnRleHQuYWRkQ29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJXcm9uZyBwcm90
b2NvbCBmb3IgV2ViU29ja2V0ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpICsg
IiciKTsKICAgICAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07CiAgICAgICAgIH0KICAgICB9CiAgICAgSGFzaFNldDxTdHJpbmc+IHZp
c2l0ZWQ7CkBAIC0yOTAsNyArMjkwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViU29ja2V0Ojpj
b25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHIKICAgICAg
ICAgaWYgKCF2aXNpdGVkLmFkZChwcm90b2NvbCkuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgIldlYlNvY2tldCBwcm90b2NvbHMgY29udGFpbiBkdXBsaWNhdGVzOiAnIiArIGVu
Y29kZVByb3RvY29sU3RyaW5nKHByb3RvY29sKSArICInIik7CiAgICAgICAgICAgICBtX3N0YXRl
ID0gQ0xPU0VEOwotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsK
KyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgICAgICB9
CiAgICAgfQogCkBAIC0zMzksNyArMzM5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViU29ja2V0
OjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBMT0coTmV0d29yaywgIldlYlNv
Y2tldCAlcCBzZW5kKCkgU2VuZGluZyBTdHJpbmcgJyVzJyIsIHRoaXMsIG1lc3NhZ2UudXRmOCgp
LmRhdGEoKSk7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ09OTkVDVElORykKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIC8vIE5vIGV4Y2VwdGlvbiBpcyByYWlzZWQg
aWYgdGhlIGNvbm5lY3Rpb24gd2FzIG9uY2UgZXN0YWJsaXNoZWQgYnV0IGhhcyBzdWJzZXF1ZW50
bHkgYmVlbiBjbG9zZWQuCiAgICAgaWYgKG1fc3RhdGUgPT0gQ0xPU0lORyB8fCBtX3N0YXRlID09
IENMT1NFRCkgewogICAgICAgICBzaXplX3QgcGF5bG9hZFNpemUgPSBtZXNzYWdlLnV0ZjgoKS5s
ZW5ndGgoKTsKQEAgLTM1Niw3ICszNTYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2NrZXQ6
OnNlbmQoQXJyYXlCdWZmZXImIGJpbmFyeURhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJXZWJT
b2NrZXQgJXAgc2VuZCgpIFNlbmRpbmcgQXJyYXlCdWZmZXIgJXAiLCB0aGlzLCAmYmluYXJ5RGF0
YSk7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ09OTkVDVElORykKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwogICAgIGlmIChtX3N0YXRlID09IENMT1NJTkcgfHwgbV9zdGF0
ZSA9PSBDTE9TRUQpIHsKICAgICAgICAgdW5zaWduZWQgcGF5bG9hZFNpemUgPSBiaW5hcnlEYXRh
LmJ5dGVMZW5ndGgoKTsKICAgICAgICAgbV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2UgPSBzYXR1
cmF0ZUFkZChtX2J1ZmZlcmVkQW1vdW50QWZ0ZXJDbG9zZSwgcGF5bG9hZFNpemUpOwpAQCAtMzcz
LDcgKzM3Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6c2VuZChBcnJheUJ1ZmZl
clZpZXcmIGFycmF5QnVmZmVyVmlldykKICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldCAlcCBz
ZW5kKCkgU2VuZGluZyBBcnJheUJ1ZmZlclZpZXcgJXAiLCB0aGlzLCAmYXJyYXlCdWZmZXJWaWV3
KTsKIAogICAgIGlmIChtX3N0YXRlID09IENPTk5FQ1RJTkcpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICBpZiAobV9zdGF0ZSA9PSBDTE9TSU5HIHx8IG1fc3Rh
dGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIHVuc2lnbmVkIHBheWxvYWRTaXplID0gYXJyYXlCdWZm
ZXJWaWV3LmJ5dGVMZW5ndGgoKTsKICAgICAgICAgbV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2Ug
PSBzYXR1cmF0ZUFkZChtX2J1ZmZlcmVkQW1vdW50QWZ0ZXJDbG9zZSwgcGF5bG9hZFNpemUpOwpA
QCAtMzg5LDcgKzM4OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6c2VuZChCbG9i
JiBiaW5hcnlEYXRhKQogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0ICVwIHNlbmQoKSBT
ZW5kaW5nIEJsb2IgJyVzJyIsIHRoaXMsIGJpbmFyeURhdGEudXJsKCkuc3RyaW5nQ2VudGVyRWxs
aXBzaXplZFRvTGVuZ3RoKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ09O
TkVDVElORykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIGlm
IChtX3N0YXRlID09IENMT1NJTkcgfHwgbV9zdGF0ZSA9PSBDTE9TRUQpIHsKICAgICAgICAgdW5z
aWduZWQgcGF5bG9hZFNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYmluYXJ5RGF0YS5zaXpl
KCkpOwogICAgICAgICBtX2J1ZmZlcmVkQW1vdW50QWZ0ZXJDbG9zZSA9IHNhdHVyYXRlQWRkKG1f
YnVmZmVyZWRBbW91bnRBZnRlckNsb3NlLCBwYXlsb2FkU2l6ZSk7CkBAIC00MDksMTEgKzQwOSwx
MSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2NrZXQ6OmNsb3NlKHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQgc2hvcnQ+IG9wdGlvbmFsQ29kZSwgYwogICAgIGVsc2UgewogICAgICAgICBMT0coTmV0
d29yaywgIldlYlNvY2tldCAlcCBjbG9zZSgpIGNvZGU9JWQgcmVhc29uPSclcyciLCB0aGlzLCBj
b2RlLCByZWFzb24udXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGlmICghKGNvZGUgPT0gV2ViU29j
a2V0Q2hhbm5lbDo6Q2xvc2VFdmVudENvZGVOb3JtYWxDbG9zdXJlIHx8IChXZWJTb2NrZXRDaGFu
bmVsOjpDbG9zZUV2ZW50Q29kZU1pbmltdW1Vc2VyRGVmaW5lZCA8PSBjb2RlICYmIGNvZGUgPD0g
V2ViU29ja2V0Q2hhbm5lbDo6Q2xvc2VFdmVudENvZGVNYXhpbXVtVXNlckRlZmluZWQpKSkKLSAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICAgICAg
Q1N0cmluZyB1dGY4ID0gcmVhc29uLnV0ZjgoU3RyaWN0Q29udmVyc2lvblJlcGxhY2luZ1VucGFp
cmVkU3Vycm9nYXRlc1dpdGhGRkZEKTsKICAgICAgICAgaWYgKHV0ZjgubGVuZ3RoKCkgPiBtYXhS
ZWFzb25TaXplSW5CeXRlcykgewogICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJv
ciwgQVNDSUlMaXRlcmFsKCJXZWJTb2NrZXQgY2xvc2UgbWVzc2FnZSBpcyB0b28gbG9uZy4iKSk7
Ci0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTQ4Myw3ICs0ODMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2NrZXQ6OnNldEJpbmFy
eVR5cGUoY29uc3QgU3RyaW5nJiBiaW5hcnlUeXBlKQogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiJyIgKyBiaW5hcnlUeXBlICsgIicg
aXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGJpbmFyeVR5cGU7IGJpbmFyeVR5cGUgcmVtYWlucyB1
bmNoYW5nZWQuIik7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIH0KIAogRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgV2ViU29ja2V0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcApp
bmRleCBjNjBiMDVhN2Y1MDk5ZGU1YzYzYTc4OTViOGQzMDI0MzNlODM3NWJkLi4xMTI3ZmE0ZDM4
M2FjMjhlOWVmMmI1MGVkZmIyNTIzM2QxMTlhNDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAKQEAgLTIxNSw3
ICsyMTUsNyBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCkKICAgICBFbGVtZW50KiB3cmFwcGVkRWxlbWVudCA9IEpTRWxlbWVu
dDo6dG9XcmFwcGVkKHZtLCByZXR1cm5lZEVsZW1lbnQpOwogICAgIGlmICghd3JhcHBlZEVsZW1l
bnQgfHwgd3JhcHBlZEVsZW1lbnQgIT0gJmVsZW1lbnQpIHsKICAgICAgICAgZWxlbWVudC5zZXRJ
c0ZhaWxlZEN1c3RvbUVsZW1lbnQoKnRoaXMpOwotICAgICAgICByZXBvcnRFeGNlcHRpb24oc3Rh
dGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIsICJDdXN0b20g
ZWxlbWVudCBjb25zdHJ1Y3RvciBmYWlsZWQgdG8gdXBncmFkZSBhbiBlbGVtZW50IikpOworICAg
ICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwgSW52
YWxpZFN0YXRlRXJyb3IsICJDdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvciBmYWlsZWQgdG8gdXBn
cmFkZSBhbiBlbGVtZW50IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGVsZW1lbnQu
c2V0SXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKaW5kZXggZjkzY2Q1
MjhkNTk2ODU5OTkyNDI2MTZmNWVlMmU0MDA4OTBkZTk1NC4uOWRhZTY4MzhjNzQyMDM0NzEzOGM3
NDA4ZTk4ZTAwNWM2NzUxOGM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcApAQCAtNDksNyArNDksNyBAQCBFeGNl
cHRpb25PcjxSZWY8SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI+PiBKU0N1c3RvbVhQYXRoTlNSZXNv
bHZlcjo6Y3JlYXRlKEV4ZWNTdAogCiAgICAgYXV0byogcmVzb2x2ZXJPYmplY3QgPSB2YWx1ZS5n
ZXRPYmplY3QoKTsKICAgICBpZiAoIXJlc29sdmVyT2JqZWN0KQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgVFlQRV9NSVNNQVRDSF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFR5cGVNaXNtYXRjaEVycm9yIH07CiAKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBKU0N1c3Rv
bVhQYXRoTlNSZXNvbHZlcihzdGF0ZS52bSgpLCByZXNvbHZlck9iamVjdCwgYXNKU0RPTVdpbmRv
dyhzdGF0ZS52bUVudHJ5R2xvYmFsT2JqZWN0KCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCmluZGV4IGQ5ZWUz
YWIxOWNlNzY3MGQ3OTI2ZDhiOTZlODY5Y2I4MWFjZjgyZDkuLjZlNjQ1MmEzODYxNDMzYmY2MTU0
YWFjZGE5ODVmYjJhMWE4MWU2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCkBAIC0yMTAsMjcgKzIxMCwyNyBAQCB2
b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbQogdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKIHsKICAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7CisgICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTm90U3Vw
cG9ydGVkRXJyb3IpKTsKIH0KIAogdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSkKIHsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIFN0cmluZyBtZXNzYWdl
U3RyaW5nKG1lc3NhZ2UpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSLCAmbWVzc2FnZVN0cmluZykp
OworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIE5vdFN1cHBvcnRlZEVycm9yLCAmbWVzc2FnZVN0cmluZykpOwogfQogCiB2b2lkIHRo
cm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJ
RF9TVEFURV9FUlIsICZtZXNzYWdlU3RyaW5nKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSW52YWxpZFN0YXRlRXJyb3IsICZt
ZXNzYWdlU3RyaW5nKSk7CiB9CiAKIHZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogewogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBt
ZXNzYWdlKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgU2VjdXJpdHlFcnJvciwgbWVzc2FnZSkpOwogfQogCiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25z
dCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKQEAg
LTM0MSwyNSArMzQxLDI1IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QKIHZvaWQgdGhyb3dET01T
eW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
CiB7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7Cisg
ICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0
ZSwgU3ludGF4RXJyb3IpKTsKIH0KIAogdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKIHsKICAgICBzY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIERBVEFfQ0xPTkVfRVJSKSk7CisgICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgRGF0YUNsb25lRXJy
b3IpKTsKIH0KIAogdm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKIHsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlv
bigmc3RhdGUsIElOREVYX1NJWkVfRVJSKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBz
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSW5kZXhTaXplRXJyb3IpKTsKIH0KIAog
dm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkKIHsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUs
IFRZUEVfTUlTTUFUQ0hfRVJSKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVHlwZU1pc21hdGNoRXJyb3IpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlRGVmZXJyZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Qcm9taXNlRGVmZXJyZWQuY3BwCmluZGV4IDg4Mjk4MDQyMjcwZGZmNTI2ZmQ1MDE1NTZj
NGQ0YzYzYTJmMGVhY2UuLjhlNDlhNzIxNWE3MjczNGU5YjA5OTBmNWNiNmJhMGNiNzlmODYwYTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVy
cmVkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZl
cnJlZC5jcHAKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04o
UmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7CiAg
ICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gcGFyc2VBc0pTT04ocHJvbWlzZS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSwgZGF0YSk7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcHJvbWlz
ZS0+cmVqZWN0KFNZTlRBWF9FUlIpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoU3ludGF4RXJy
b3IpOwogICAgIGVsc2UKICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZTxJRExBbnk+KHZhbHVlKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRv
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3Vz
dG9tLmNwcAppbmRleCA4NTRkZGNhOTkyNTJmY2UyNzdhNGI4ZmFiNzkwMzA5ZDExYzk5NTQ5Li5l
ZDY2MzhmNzBhNjRjMzZlYzc4NThiOTU3YjcwYTZhMjQ3ZjQxOWQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCkBAIC00MTIs
MTYgKzQxMiwxNiBAQCBzdGF0aWMgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgY3J5cHRvS2V5VXNhZ2VC
aXRtYXBGcm9tSlNWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKUwogc3RhdGljIHZvaWQgcmVqZWN0
V2l0aEV4Y2VwdGlvbihSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHBhc3NlZFByb21pc2UsIEV4Y2Vw
dGlvbkNvZGUgZWMpCiB7CiAgICAgc3dpdGNoIChlYykgewotICAgIGNhc2UgTk9UX1NVUFBPUlRF
RF9FUlI6CisgICAgY2FzZSBOb3RTdXBwb3J0ZWRFcnJvcjoKICAgICAgICAgcGFzc2VkUHJvbWlz
ZS0+cmVqZWN0KGVjLCBBU0NJSUxpdGVyYWwoIlRoZSBhbGdvcml0aG0gaXMgbm90IHN1cHBvcnRl
ZCIpKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU1lOVEFYX0VSUjoKKyAgICBjYXNlIFN5
bnRheEVycm9yOgogICAgICAgICBwYXNzZWRQcm9taXNlLT5yZWplY3QoZWMsIEFTQ0lJTGl0ZXJh
bCgiQSByZXF1aXJlZCBwYXJhbWV0ZXIgd2FzIG1pc3Npbmcgb3Igb3V0LW9mLXJhbmdlIikpOwog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJTlZBTElEX1NUQVRFX0VSUjoKKyAgICBjYXNlIElu
dmFsaWRTdGF0ZUVycm9yOgogICAgICAgICBwYXNzZWRQcm9taXNlLT5yZWplY3QoZWMsIEFTQ0lJ
TGl0ZXJhbCgiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgbm90IHZhbGlkIGZvciB0aGUgY3Vy
cmVudCBzdGF0ZSBvZiB0aGUgcHJvdmlkZWQga2V5IikpOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJTlZBTElEX0FDQ0VTU19FUlI6CisgICAgY2FzZSBJbnZhbGlkQWNjZXNzRXJyb3I6CiAg
ICAgICAgIHBhc3NlZFByb21pc2UtPnJlamVjdChlYywgQVNDSUlMaXRlcmFsKCJUaGUgcmVxdWVz
dGVkIG9wZXJhdGlvbiBpcyBub3QgdmFsaWQgZm9yIHRoZSBwcm92aWRlZCBrZXkiKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIFVua25vd25FcnJvcjoKQEAgLTU0MCwxMiArNTQwLDEyIEBA
IHN0YXRpYyB2b2lkIGpzU3VidGxlQ3J5cHRvRnVuY3Rpb25FbmNyeXB0UHJvbWlzZShFeGVjU3Rh
dGUmIHN0YXRlLCBSZWY8RGVmZXJyZWRQCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKIAogICAgIGlmIChwYXJhbXMtPmlkZW50aWZpZXIgIT0ga2V5LT5hbGdvcml0aG1J
ZGVudGlmaWVyKCkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNTX0VS
UiwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9lc24ndCBtYXRjaCBBbGdvcml0aG1JZGVudGlm
aWVyIikpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJ
SUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IG1hdGNoIEFsZ29yaXRobUlkZW50aWZpZXIiKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIWtleS0+YWxsb3dzKENyeXB0b0tl
eVVzYWdlRW5jcnlwdCkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNT
X0VSUiwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9lc24ndCBzdXBwb3J0IGVuY3J5cHRpb24i
KSk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0
ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9ydCBlbmNyeXB0aW9uIikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC01ODcsMTIgKzU4NywxMiBAQCBzdGF0aWMgdm9pZCBqc1N1YnRs
ZUNyeXB0b0Z1bmN0aW9uRGVjcnlwdFByb21pc2UoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVy
cmVkUAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAo
cGFyYW1zLT5pZGVudGlmaWVyICE9IGtleS0+YWxnb3JpdGhtSWRlbnRpZmllcigpKSB7Ci0gICAg
ICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJhbCgiQ3J5
cHRvS2V5IGRvZXNuJ3QgbWF0Y2ggQWxnb3JpdGhtSWRlbnRpZmllciIpKTsKKyAgICAgICAgcHJv
bWlzZS0+cmVqZWN0KEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkg
ZG9lc24ndCBtYXRjaCBBbGdvcml0aG1JZGVudGlmaWVyIikpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZURlY3J5cHQpKSB7Ci0g
ICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJhbCgi
Q3J5cHRvS2V5IGRvZXNuJ3Qgc3VwcG9ydCBkZWNyeXB0aW9uIikpOworICAgICAgICBwcm9taXNl
LT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vz
bid0IHN1cHBvcnQgZGVjcnlwdGlvbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NjM0LDEyICs2MzQsMTIgQEAgc3RhdGljIHZvaWQganNTdWJ0bGVDcnlwdG9GdW5jdGlvblNpZ25Q
cm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUsIFJlZjxEZWZlcnJlZFByb20KICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKHBhcmFtcy0+aWRlbnRpZmllciAh
PSBrZXktPmFsZ29yaXRobUlkZW50aWZpZXIoKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3Qo
SU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IG1hdGNo
IEFsZ29yaXRobUlkZW50aWZpZXIiKSk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlk
QWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRvS2V5IGRvZXNuJ3QgbWF0Y2ggQWxnb3Jp
dGhtSWRlbnRpZmllciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICgha2V5
LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VTaWduKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3Qo
SU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IHN1cHBv
cnQgc2lnbmluZyIpKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEludmFsaWRBY2Nlc3NFcnJv
ciwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9lc24ndCBzdXBwb3J0IHNpZ25pbmciKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY4NCwxMiArNjg0LDEyIEBAIHN0YXRpYyB2b2lk
IGpzU3VidGxlQ3J5cHRvRnVuY3Rpb25WZXJpZnlQcm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUsIFJl
ZjxEZWZlcnJlZFByCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAog
ICAgIGlmIChwYXJhbXMtPmlkZW50aWZpZXIgIT0ga2V5LT5hbGdvcml0aG1JZGVudGlmaWVyKCkp
IHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRl
cmFsKCJDcnlwdG9LZXkgZG9lc24ndCBtYXRjaCBBbGdvcml0aG1JZGVudGlmaWVyIikpOworICAg
ICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkNy
eXB0b0tleSBkb2Vzbid0IG1hdGNoIEFsZ29yaXRobUlkZW50aWZpZXIiKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoIWtleS0+YWxsb3dzKENyeXB0b0tleVVzYWdlVmVyaWZ5
KSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3QoSU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxp
dGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IHN1cHBvcnQgdmVyaWZpY2F0aW9uIikpOworICAgICAg
ICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkNyeXB0
b0tleSBkb2Vzbid0IHN1cHBvcnQgdmVyaWZpY2F0aW9uIikpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC03NzQsMTQgKzc3NCwxNCBAQCBzdGF0aWMgdm9pZCBqc1N1YnRsZUNyeXB0b0Z1
bmN0aW9uR2VuZXJhdGVLZXlQcm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUsIFJlZjxEZWZlcgogICAg
ICAgICBXVEY6OnN3aXRjaE9uKGtleU9yS2V5UGFpciwKICAgICAgICAgICAgIFsmY2FwdHVyZWRQ
cm9taXNlXSAoUmVmUHRyPENyeXB0b0tleT4mIGtleSkgewogICAgICAgICAgICAgICAgIGlmICgo
a2V5LT50eXBlKCkgPT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSB8fCBrZXktPnR5cGUoKSA9PSBD
cnlwdG9LZXlUeXBlOjpTZWNyZXQpICYmICFrZXktPnVzYWdlc0JpdG1hcCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlamVjdFdpdGhFeGNlcHRpb24oV1RGTW92ZShjYXB0dXJlZFByb21pc2Up
LCBTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aEV4Y2VwdGlvbihX
VEZNb3ZlKGNhcHR1cmVkUHJvbWlzZSksIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXB0dXJlZFBy
b21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNlPENyeXB0b0tleT4+KCprZXkpOwogICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgIFsmY2FwdHVyZWRQcm9taXNlXSAoQ3J5cHRvS2V5UGFpciYga2V5
UGFpcikgewogICAgICAgICAgICAgICAgIGlmICgha2V5UGFpci5wcml2YXRlS2V5LT51c2FnZXNC
aXRtYXAoKSkgewotICAgICAgICAgICAgICAgICAgICByZWplY3RXaXRoRXhjZXB0aW9uKFdURk1v
dmUoY2FwdHVyZWRQcm9taXNlKSwgU1lOVEFYX0VSUik7CisgICAgICAgICAgICAgICAgICAgIHJl
amVjdFdpdGhFeGNlcHRpb24oV1RGTW92ZShjYXB0dXJlZFByb21pc2UpLCBTeW50YXhFcnJvcik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgY2FwdHVyZWRQcm9taXNlLT5yZXNvbHZlPElETERpY3Rpb25hcnk8Q3J5cHRvS2V5
UGFpcj4+KGtleVBhaXIpOwpAQCAtODI3LDEyICs4MjcsMTIgQEAgc3RhdGljIHZvaWQganNTdWJ0
bGVDcnlwdG9GdW5jdGlvbkRlcml2ZUtleVByb21pc2UoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERl
ZmVycmUKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYg
KHBhcmFtcy0+aWRlbnRpZmllciAhPSBiYXNlS2V5LT5hbGdvcml0aG1JZGVudGlmaWVyKCkpIHsK
LSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFs
KCJDcnlwdG9LZXkgZG9lc24ndCBtYXRjaCBBbGdvcml0aG1JZGVudGlmaWVyIikpOworICAgICAg
ICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkNyeXB0
b0tleSBkb2Vzbid0IG1hdGNoIEFsZ29yaXRobUlkZW50aWZpZXIiKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoIWJhc2VLZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZURlcml2
ZUtleSkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNTX0VSUiwgQVND
SUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9lc24ndCBzdXBwb3J0IENyeXB0b0tleSBkZXJpdmF0aW9u
IikpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxp
dGVyYWwoIkNyeXB0b0tleSBkb2Vzbid0IHN1cHBvcnQgQ3J5cHRvS2V5IGRlcml2YXRpb24iKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg2NSw3ICs4NjUsNyBAQCBzdGF0aWMgdm9p
ZCBqc1N1YnRsZUNyeXB0b0Z1bmN0aW9uRGVyaXZlS2V5UHJvbWlzZShFeGVjU3RhdGUmIHN0YXRl
LCBSZWY8RGVmZXJyZQogICAgICAgICBLZXlEYXRhIGRhdGEgPSBkZXJpdmVkS2V5OwogICAgICAg
ICBhdXRvIGNhbGxiYWNrID0gW2NhcHR1cmVkUHJvbWlzZSA9IHByb21pc2UuY29weVJlZigpXShD
cnlwdG9LZXkmIGtleSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoKGtleS50eXBlKCkgPT0g
Q3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSB8fCBrZXkudHlwZSgpID09IENyeXB0b0tleVR5cGU6OlNl
Y3JldCkgJiYgIWtleS51c2FnZXNCaXRtYXAoKSkgewotICAgICAgICAgICAgICAgIHJlamVjdFdp
dGhFeGNlcHRpb24oV1RGTW92ZShjYXB0dXJlZFByb21pc2UpLCBTWU5UQVhfRVJSKTsKKyAgICAg
ICAgICAgICAgICByZWplY3RXaXRoRXhjZXB0aW9uKFdURk1vdmUoY2FwdHVyZWRQcm9taXNlKSwg
U3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhcHR1cmVkUHJvbWlzZS0+cmVzb2x2ZTxJRExJbnRlcmZhY2U8Q3J5cHRvS2V5
Pj4oa2V5KTsKQEAgLTkwNSwxMiArOTA1LDEyIEBAIHN0YXRpYyB2b2lkIGpzU3VidGxlQ3J5cHRv
RnVuY3Rpb25EZXJpdmVCaXRzUHJvbWlzZShFeGVjU3RhdGUmIHN0YXRlLCBSZWY8RGVmZXJyCiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChwYXJhbXMt
PmlkZW50aWZpZXIgIT0gYmFzZUtleS0+YWxnb3JpdGhtSWRlbnRpZmllcigpKSB7Ci0gICAgICAg
IHByb21pc2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJhbCgiQ3J5cHRv
S2V5IGRvZXNuJ3QgbWF0Y2ggQWxnb3JpdGhtSWRlbnRpZmllciIpKTsKKyAgICAgICAgcHJvbWlz
ZS0+cmVqZWN0KEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJDcnlwdG9LZXkgZG9l
c24ndCBtYXRjaCBBbGdvcml0aG1JZGVudGlmaWVyIikpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKCFiYXNlS2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VEZXJpdmVCaXRzKSkg
ewotICAgICAgICBwcm9taXNlLT5yZWplY3QoSU5WQUxJRF9BQ0NFU1NfRVJSLCBBU0NJSUxpdGVy
YWwoIkNyeXB0b0tleSBkb2Vzbid0IHN1cHBvcnQgYml0cyBkZXJpdmF0aW9uIikpOworICAgICAg
ICBwcm9taXNlLT5yZWplY3QoSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkNyeXB0
b0tleSBkb2Vzbid0IHN1cHBvcnQgYml0cyBkZXJpdmF0aW9uIikpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC05NjUsNyArOTY1LDcgQEAgc3RhdGljIHZvaWQganNTdWJ0bGVDcnlwdG9G
dW5jdGlvbkltcG9ydEtleVByb21pc2UoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmUKIAog
ICAgIGF1dG8gY2FsbGJhY2sgPSBbY2FwdHVyZWRQcm9taXNlID0gcHJvbWlzZS5jb3B5UmVmKCld
KENyeXB0b0tleSYga2V5KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKChrZXkudHlwZSgpID09IENy
eXB0b0tleVR5cGU6OlByaXZhdGUgfHwga2V5LnR5cGUoKSA9PSBDcnlwdG9LZXlUeXBlOjpTZWNy
ZXQpICYmICFrZXkudXNhZ2VzQml0bWFwKCkpIHsKLSAgICAgICAgICAgIHJlamVjdFdpdGhFeGNl
cHRpb24oV1RGTW92ZShjYXB0dXJlZFByb21pc2UpLCBTWU5UQVhfRVJSKTsKKyAgICAgICAgICAg
IHJlamVjdFdpdGhFeGNlcHRpb24oV1RGTW92ZShjYXB0dXJlZFByb21pc2UpLCBTeW50YXhFcnJv
cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY2FwdHVyZWRQcm9t
aXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxDcnlwdG9LZXk+PihrZXkpOwpAQCAtMTAwMCw3ICsx
MDAwLDcgQEAgc3RhdGljIHZvaWQganNTdWJ0bGVDcnlwdG9GdW5jdGlvbkV4cG9ydEtleVByb21p
c2UoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmUKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKCFrZXktPmV4dHJhY3RhYmxlKCkpIHsKLSAgICAg
ICAgcHJvbWlzZS0+cmVqZWN0KElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJUaGUg
Q3J5cHRvS2V5IGlzIG5vbmV4dHJhY3RhYmxlIikpOworICAgICAgICBwcm9taXNlLT5yZWplY3Qo
SW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIlRoZSBDcnlwdG9LZXkgaXMgbm9uZXh0
cmFjdGFibGUiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNjUsMTIgKzEwNjUs
MTIgQEAgc3RhdGljIHZvaWQganNTdWJ0bGVDcnlwdG9GdW5jdGlvbldyYXBLZXlQcm9taXNlKEV4
ZWNTdGF0ZSYgc3RhdGUsIFJlZjxEZWZlcnJlZFAKICAgICB9CiAKICAgICBpZiAod3JhcFBhcmFt
cy0+aWRlbnRpZmllciAhPSB3cmFwcGluZ0tleS0+YWxnb3JpdGhtSWRlbnRpZmllcigpKSB7Ci0g
ICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJhbCgi
V3JhcHBpbmcgQ3J5cHRvS2V5IGRvZXNuJ3QgbWF0Y2ggQWxnb3JpdGhtSWRlbnRpZmllciIpKTsK
KyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFs
KCJXcmFwcGluZyBDcnlwdG9LZXkgZG9lc24ndCBtYXRjaCBBbGdvcml0aG1JZGVudGlmaWVyIikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCF3cmFwcGluZ0tleS0+YWxsb3dz
KENyeXB0b0tleVVzYWdlV3JhcEtleSkpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KElOVkFM
SURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJXcmFwcGluZyBDcnlwdG9LZXkgZG9lc24ndCBz
dXBwb3J0IHdyYXBLZXkgb3BlcmF0aW9uIikpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52
YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIldyYXBwaW5nIENyeXB0b0tleSBkb2Vzbid0
IHN1cHBvcnQgd3JhcEtleSBvcGVyYXRpb24iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTEwNzgsNyArMTA3OCw3IEBAIHN0YXRpYyB2b2lkIGpzU3VidGxlQ3J5cHRvRnVuY3Rpb25X
cmFwS2V5UHJvbWlzZShFeGVjU3RhdGUmIHN0YXRlLCBSZWY8RGVmZXJyZWRQCiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmICgha2V5LT5leHRyYWN0YWJs
ZSgpKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJ
TGl0ZXJhbCgiVGhlIENyeXB0b0tleSBpcyBub25leHRyYWN0YWJsZSIpKTsKKyAgICAgICAgcHJv
bWlzZS0+cmVqZWN0KEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJUaGUgQ3J5cHRv
S2V5IGlzIG5vbmV4dHJhY3RhYmxlIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MTgxLDEyICsxMTgxLDEyIEBAIHN0YXRpYyB2b2lkIGpzU3VidGxlQ3J5cHRvRnVuY3Rpb25Vbndy
YXBLZXlQcm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUsIFJlZjxEZWZlcnJlCiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGlmICh1bndyYXBQYXJhbXMtPmlkZW50
aWZpZXIgIT0gdW53cmFwcGluZ0tleS0+YWxnb3JpdGhtSWRlbnRpZmllcigpKSB7Ci0gICAgICAg
IHByb21pc2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJhbCgiVW53cmFw
cGluZyBDcnlwdG9LZXkgZG9lc24ndCBtYXRjaCB1bndyYXAgQWxnb3JpdGhtSWRlbnRpZmllciIp
KTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRl
cmFsKCJVbndyYXBwaW5nIENyeXB0b0tleSBkb2Vzbid0IG1hdGNoIHVud3JhcCBBbGdvcml0aG1J
ZGVudGlmaWVyIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCF1bndyYXBw
aW5nS2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VVbndyYXBLZXkpKSB7Ci0gICAgICAgIHByb21p
c2UtPnJlamVjdChJTlZBTElEX0FDQ0VTU19FUlIsIEFTQ0lJTGl0ZXJhbCgiVW53cmFwcGluZyBD
cnlwdG9LZXkgZG9lc24ndCBzdXBwb3J0IHVud3JhcEtleSBvcGVyYXRpb24iKSk7CisgICAgICAg
IHByb21pc2UtPnJlamVjdChJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW53cmFw
cGluZyBDcnlwdG9LZXkgZG9lc24ndCBzdXBwb3J0IHVud3JhcEtleSBvcGVyYXRpb24iKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyMjksNyArMTIyOSw3IEBAIHN0YXRpYyB2b2lk
IGpzU3VidGxlQ3J5cHRvRnVuY3Rpb25VbndyYXBLZXlQcm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUs
IFJlZjxEZWZlcnJlCiAKICAgICAgICAgYXV0byBjYWxsYmFjayA9IFtwcm9taXNlID0gcHJvbWlz
ZS5jb3B5UmVmKCldKENyeXB0b0tleSYga2V5KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmICgo
a2V5LnR5cGUoKSA9PSBDcnlwdG9LZXlUeXBlOjpQcml2YXRlIHx8IGtleS50eXBlKCkgPT0gQ3J5
cHRvS2V5VHlwZTo6U2VjcmV0KSAmJiAha2V5LnVzYWdlc0JpdG1hcCgpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVqZWN0V2l0aEV4Y2VwdGlvbihXVEZNb3ZlKHByb21pc2UpLCBTWU5UQVhfRVJSKTsK
KyAgICAgICAgICAgICAgICByZWplY3RXaXRoRXhjZXB0aW9uKFdURk1vdmUocHJvbWlzZSksIFN5
bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxDcnlwdG9LZXk+PihrZXkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKaW5kZXggNWQ4Y2U3OGFmNWZhNDhkZjJmYzc4YmNiYzNiODc1NGZlYjEzY2UwZS4uNDRj
ZTljZDMzM2NjNmE2NTdhODFlMDNjNDI0YzM1ZmJiZjc0MmIzMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0zMjMz
LDcgKzMyMzMsNyBAQCBzdGF0aWMgRXhjZXB0aW9uIGV4Y2VwdGlvbkZvclNlcmlhbGl6YXRpb25G
YWlsdXJlKFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIGNvZGUpCiAgICAgY2FzZSBTZXJpYWxpemF0
aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOgogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgVHlwZUVycm9yIH07CiAgICAgY2FzZSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6RGF0YUNs
b25lRXJyb3I6Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEQVRBX0NMT05FX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRGF0YUNsb25lRXJyb3IgfTsKICAgICBjYXNlIFNl
cmlhbGl6YXRpb25SZXR1cm5Db2RlOjpFeGlzdGluZ0V4Y2VwdGlvbkVycm9yOgogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9OwogICAgIGNhc2UgU2Vy
aWFsaXphdGlvblJldHVybkNvZGU6OlVuc3BlY2lmaWVkRXJyb3I6CkBAIC0zMjg3LDcgKzMyODcs
NyBAQCBFeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoRXhlY1N0YXRlJgogICAgIGZvciAoYXV0byYgdHJhbnNmZXJhYmxl
IDogdHJhbnNmZXJMaXN0KSB7CiAgICAgICAgIGlmIChhdXRvIGFycmF5QnVmZmVyID0gdG9Qb3Nz
aWJseVNoYXJlZEFycmF5QnVmZmVyKHZtLCB0cmFuc2ZlcmFibGUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBpZiAoYXJyYXlCdWZmZXItPmlzTmV1dGVyZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgREFUQV9DTE9ORV9FUlIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgRGF0YUNsb25lRXJyb3IgfTsKICAgICAgICAgICAgIGlmIChhcnJheUJ1ZmZl
ci0+aXNMb2NrZWQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUsIGVycm9yTWVzYXNnZUZvclRyYW5zZmVyKGFycmF5QnVmZmVyKSk7CkBAIC0zMzAyLDcg
KzMzMDIsNyBAQCBFeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoRXhlY1N0YXRlJgogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgREFUQV9DTE9ORV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IERhdGFDbG9uZUVycm9yIH07CiAgICAgfQog
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9DcnlwdG9BbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0
b0FsZ29yaXRobS5jcHAKaW5kZXggMDgzNjYwODc5N2JlOTZmMTg2ZGU3ZTI4Njk1YWE3YTk0N2E2
MzhkYi4uNjc4ZTM5NzRlODFjNmMyYzc4YWZmNzdlY2QzNTkxNDEwZGNhMWE0NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5jcHAKQEAgLTMyLDEwNyArMzIsMTA3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBDcnlwdG9BbGdvcml0aG06OmVuY3J5cHQoc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+
JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFj
ayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVl
JikKIHsKLSAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogfQogCiB2b2lkIENyeXB0b0FsZ29y
aXRobTo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4m
JiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYs
IEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBXb3JrUXVldWUmKQogewotICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JU
RURfRVJSKTsKKyAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7CiB9CiAK
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtOjpzaWduKHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVj
dG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCiB7Ci0gICAgZXhjZXB0aW9uQ2FsbGJh
Y2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRl
ZEVycm9yKTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG06OnZlcmlmeShzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9y
PHVpbnQ4X3Q+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBCb29sQ2FsbGJhY2smJiwgRXhjZXB0aW9u
Q2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdv
cmtRdWV1ZSYpCiB7Ci0gICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIpOwor
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKIH0KIAogdm9pZCBDcnlw
dG9BbGdvcml0aG06OmRpZ2VzdChWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwg
RXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIFdvcmtRdWV1ZSYpCiB7Ci0gICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRF
RF9FUlIpOworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKIH0KIAog
dm9pZCBDcnlwdG9BbGdvcml0aG06OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMmLCBib29sLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCwgS2V5T3JLZXlQYWlyQ2FsbGJh
Y2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYpCiB7Ci0gICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIp
OworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKIH0KIAogdm9pZCBD
cnlwdG9BbGdvcml0aG06OmRlcml2ZUJpdHMoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIHNpemVfdCwgVmVjdG9yQ2FsbGJhY2sm
JiwgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIFdvcmtRdWV1ZSYpCiB7Ci0gICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBP
UlRFRF9FUlIpOworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKIH0K
IAogdm9pZCBDcnlwdG9BbGdvcml0aG06OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1h
dCwgS2V5RGF0YSYmLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAsIEtleUNhbGxiYWNrJiYsIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCiB7Ci0gICAgZXhjZXB0aW9uQ2FsbGJh
Y2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRl
ZEVycm9yKTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG06OmV4cG9ydEtleShTdWJ0bGVDcnlw
dG86OktleUZvcm1hdCwgUmVmPENyeXB0b0tleT4mJiwgS2V5RGF0YUNhbGxiYWNrJiYsIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCiB7Ci0gICAgZXhjZXB0aW9uQ2FsbGJh
Y2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRl
ZEVycm9yKTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG06OndyYXBLZXkoUmVmPENyeXB0b0tl
eT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxi
YWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCiB7Ci0gICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NV
UFBPUlRFRF9FUlIpOworICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsK
IH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG06OnVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmLCBW
ZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiBl
eGNlcHRpb25DYWxsYmFjaykKIHsKLSAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVE
X0VSUik7CisgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogfQogCiBF
eGNlcHRpb25PcjxzaXplX3Q+IENyeXB0b0FsZ29yaXRobTo6Z2V0S2V5TGVuZ3RoKGNvbnN0IENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmKQogewotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1Rf
U1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJv
ciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG06OmVuY3J5cHQoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXkm
LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxi
YWNrJiYpCiB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Cisg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlv
bk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobTo6ZGVjcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKIHsKLSAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxn
b3JpdGhtOjpzaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiwg
Y29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxi
YWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQ
UE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9
OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG06OnZlcmlmeShjb25zdCBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleSYsIGNv
bnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgQm9v
bENhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewotICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRF
cnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG06OmRpZ2VzdChj
b25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b09w
ZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKIHsKLSAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRv
QWxnb3JpdGhtOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVw
cmVjYXRlZCYsIGJvb2wsIENyeXB0b0tleVVzYWdlQml0bWFwLCBLZXlPcktleVBhaXJDYWxsYmFj
ayYmLCBWb2lkQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpCiB7Ci0gICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0Fs
Z29yaXRobTo6ZGVyaXZlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNh
dGVkJiwgY29uc3QgQ3J5cHRvS2V5JiwgQ3J5cHRvQWxnb3JpdGhtKiwgYm9vbCwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAsIEtleUNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewotICAgIHJldHVy
biBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdv
cml0aG06OmRlcml2ZUJpdHMoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0
ZWQmLCBjb25zdCBDcnlwdG9LZXkmLCBzaXplX3QsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxs
YmFjayYmKQogewotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9Owor
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiBFeGNlcHRp
b25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG06OmltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleURhdGEmLCBib29sLCBDcnlw
dG9LZXlVc2FnZUJpdG1hcCwgS2V5Q2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCiB7Ci0gICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0
b0FsZ29yaXRobTo6ZW5jcnlwdEZvcldyYXBLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVyc0RlcHJlY2F0ZWQmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBD
cnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBWb2lk
Q2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCmluZGV4IDI0
M2IyOGMxOGFiMjkwNmQ1YzQ5MjE5NWIxYjI3MDcxNDg4ZGU2M2IuLjg2MzkwNTlhMzkyN2Y5ODll
MzlkNzkxNTdjOTZlYzc2MWEzMjc3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCkBAIC05Miw3
ICs5Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Z2VuZXJhdGVLZXkoY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1lCiAgICAgY29uc3QgYXV0byYgYWVzUGFy
YW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0tleVBhcmFtcz4ocGFyYW1ldGVy
cyk7CiAKICAgICBpZiAodXNhZ2VzQXJlSW52YWxpZEZvckNyeXB0b0FsZ29yaXRobUFFU19DQkMo
dXNhZ2VzKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBv
cnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhJiYKIHsKICAgICBB
U1NFUlQocGFyYW1ldGVycyk7CiAgICAgaWYgKHVzYWdlc0FyZUludmFsaWRGb3JDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDKHVzYWdlcykpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFY
X0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQzo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgS2V5RGF0
YSYmCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIXJl
c3VsdCkgewpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6
ZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgUmVmPENyeXB0CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBv
cnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTk0LDcgKzE5NCw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmVuY3J5cHQoY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiB7CiAgICAgYXV0byYgYWVzQ0JDUGFyYW1ldGVycyA9
IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc0RlcHJlY2F0ZWQ+KHBhcmFtZXRl
cnMpOwogICAgIGlmICgha2V5QWxnb3JpdGhtTWF0Y2hlcyhhZXNDQkNQYXJhbWV0ZXJzLCBrZXkp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIHBs
YXRmb3JtRW5jcnlwdChhZXNDQkNQYXJhbWV0ZXJzLCBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtl
eSksIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwog
fQogCkBAIC0yMDIsNyArMjAyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQzo6ZGVjcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKIHsKICAgICBh
dXRvJiBhZXNDQkNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFy
YW1zRGVwcmVjYXRlZD4ocGFyYW1ldGVycyk7CiAgICAgaWYgKCFrZXlBbGdvcml0aG1NYXRjaGVz
KGFlc0NCQ1BhcmFtZXRlcnMsIGtleSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1Rf
U1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKICAgICByZXR1cm4gcGxhdGZvcm1EZWNyeXB0KGFlc0NCQ1BhcmFtZXRlcnMsIGRv
d25jYXN0PENyeXB0b0tleUFFUz4oa2V5KSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1v
dmUoZmFpbHVyZUNhbGxiYWNrKSk7CiB9CiAKQEAgLTIyMyw3ICsyMjMsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9B
bGdvcml0aG1QYXJhbQogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6
aW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiwgY29u
c3QgQ3J5cHRvS2V5RGF0YSYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNh
Z2VCaXRtYXAgdXNhZ2UsIEtleUNhbGxiYWNrJiYgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayYmKQog
ewogICAgIGlmICghaXM8Q3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2U+KGtleURhdGEpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgYXV0byYga2V5RGF0YU9j
dGV0U2VxdWVuY2UgPSBkb3duY2FzdDxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4oa2V5RGF0
YSk7CiAgICAgY2FsbGJhY2soQ3J5cHRvS2V5QUVTOjpjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6QUVTX0NCQywga2V5RGF0YU9jdGV0U2VxdWVuY2Uub2N0ZXRTZXF1ZW5jZSgpLCBl
eHRyYWN0YWJsZSwgdXNhZ2UpKTsKICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNw
cAppbmRleCAwZTg0YzMzYWYwOTE4ZjY4ZGI4ODEwM2I2MjZiMjVlNzJhZDNmNzFkLi41ZjFjNjE0
ZDc5MzcxMmI0NjJkNzFlZTdlZDA4MWYyN2VjZmIxYzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNw
cApAQCAtODEsNyArODEsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmdlbmVyYXRl
S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZQogICAgIGNvbnN0IGF1
dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNLZXlQYXJhbXM+
KHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKHVzYWdlc0FyZUludmFsaWRGb3JDcnlwdG9BbGdvcml0
aG1BRVNfQ0ZCKHVzYWdlcykpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VS
Uik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
RkI6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJgog
ewogICAgIEFTU0VSVChwYXJhbWV0ZXJzKTsKICAgICBpZiAodXNhZ2VzQXJlSW52YWxpZEZvckNy
eXB0b0FsZ29yaXRobUFFU19DRkIodXNhZ2VzKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhTWU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBDcnlwdG9B
bGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0
LCBLZXlEYXRhJiYKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmICghcmVzdWx0KSB7CkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfQ0ZCOjpleHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBSZWY8Q3J5
cHQKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
Tm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RS
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFF
U19DVFIuY3BwCmluZGV4IDJmZjU1NjEzMTIyZjQ4MDE5OGJiZmM1NWZiYjA2MTM2MTRiZWY0MjQu
LjViODU4NDQ5MzA5NDIyNzZlNTU0MmY5ZjQxNGRmZTczMjVkMTQ1MDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFF
U19DVFIuY3BwCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6
Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1lCiAgICAg
Y29uc3QgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0tl
eVBhcmFtcz4ocGFyYW1ldGVycyk7CiAKICAgICBpZiAodXNhZ2VzQXJlSW52YWxpZEZvckNyeXB0
b0FsZ29yaXRobUFFU19DVFIodXNhZ2VzKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhT
WU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ1RSOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBL
ZXlEYXRhJiYKIHsKICAgICBBU1NFUlQocGFyYW1ldGVycyk7CiAgICAgaWYgKHVzYWdlc0FyZUlu
dmFsaWRGb3JDcnlwdG9BbGdvcml0aG1BRVNfQ1RSKHVzYWdlcykpIHsKLSAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRh
eEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9y
bWF0IGZvcm1hdCwgS2V5RGF0YSYmCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0
OgotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAoIXJlc3VsdCkgewpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgQ3J5cHRv
QWxnb3JpdGhtQUVTX0NUUjo6ZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1h
dCwgUmVmPENyeXB0CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0dDTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfR0NNLmNwcAppbmRleCBmZDkwZjk1NzUwYWI5NWEyNzU2Yzc1ZWEyYTc0MTBm
MjFmMWNjNTNhLi5mNjc3OTg2Y2VkMjEwMTkzNDNlMzJjZTMxNWNiZjQzZWRmNWY0ZDM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfR0NNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfR0NNLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0dDTTo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYg
cGFyYW1lCiAgICAgY29uc3QgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0Fs
Z29yaXRobUFlc0tleVBhcmFtcz4ocGFyYW1ldGVycyk7CiAKICAgICBpZiAodXNhZ2VzQXJlSW52
YWxpZEZvckNyeXB0b0FsZ29yaXRobUFFU19HQ00odXNhZ2VzKSkgewotICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4
RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3Jt
YXQgZm9ybWF0LCBLZXlEYXRhJiYKIHsKICAgICBBU1NFUlQocGFyYW1ldGVycyk7CiAgICAgaWYg
KHVzYWdlc0FyZUludmFsaWRGb3JDcnlwdG9BbGdvcml0aG1BRVNfR0NNKHVzYWdlcykpIHsKLSAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTcyLDcg
KzE3Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6aW1wb3J0S2V5KFN1YnRsZUNy
eXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgS2V5RGF0YSYmCiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBkZWZhdWx0OgotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VS
Uik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkgewpAQCAtMjE2LDcgKzIxNiw3IEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5
Rm9ybWF0IGZvcm1hdCwgUmVmPENyeXB0CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZh
dWx0OgotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7CisgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAKaW5kZXggNTBhZmI0MzFmODA3MDY5ZDAxOWVk
OGY0NDU3ZTVhM2E0YjBlOWFmZi4uZDE4MGY4MjBmMjdiNThhYzIyNjE2NTI3ZWU5YzZmMmZmODFk
ZjMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCkBAIC02Niw3ICs2Niw3IEBAIGJvb2wgQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXOjprZXlBbGdvcml0aG1NYXRjaGVzKGNvbnN0IENyeXB0b0tleSYga2V5
KSBjb25zdAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmdlbmVyYXRlS2V5KGNvbnN0IENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENy
eXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2smJiBjYWxsYmFj
aywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpCiB7CiAgICAgaWYgKHVzYWdlc0FyZUludmFsaWRGb3JDcnlwdG9BbGdvcml0aG1B
RVNfS1codXNhZ2VzKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsK
KyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpp
bXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhJiYKIHsKICAg
ICBBU1NFUlQocGFyYW1ldGVycyk7CiAgICAgaWYgKHVzYWdlc0FyZUludmFsaWRGb3JDcnlwdG9B
bGdvcml0aG1BRVNfS1codXNhZ2VzKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5U
QVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1BRVNfS1c6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURh
dGEmJgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhOb3RTdXBwb3J0ZWRFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFy
ZXN1bHQpIHsKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6
ZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgUmVmPENyeXB0bwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBw
b3J0ZWRFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4MCwxNCArMTgwLDE0
IEBAIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpnZXRLZXlMZW5n
dGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdv
cml0aG1BRVNfS1c6OmVuY3J5cHRGb3JXcmFwS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayYm
IGZhaWx1cmVDYWxsYmFjaykKIHsKICAgICBpZiAoIWtleUFsZ29yaXRobU1hdGNoZXMoa2V5KSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIHJldHVybiBwbGF0
Zm9ybUVuY3J5cHQoZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpLCBkYXRhLCBXVEZNb3ZlKGNh
bGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9p
ZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpkZWNyeXB0Rm9yVW53cmFwS2V5KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNv
bnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ss
IFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjaykKIHsKICAgICBpZiAoIWtleUFsZ29yaXRo
bU1hdGNoZXMoa2V5KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9Owog
ICAgIHJldHVybiBwbGF0Zm9ybURlY3J5cHQoZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpLCBk
YXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIApA
QCAtMjA2LDcgKzIwNiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19L
Vzo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1lCiBFeGNlcHRpb25Pcjx2
b2lkPiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleURhdGEmIGtleURhdGEsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlLCBLZXlDYWxsYmFjayYm
IGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2smJikKIHsKICAgICBpZiAoIWlzPENyeXB0b0tleURhdGFP
Y3RldFNlcXVlbmNlPihrZXlEYXRhKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9T
VVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRF
cnJvciB9OwogICAgIGNhbGxiYWNrKENyeXB0b0tleUFFUzo6Y3JlYXRlKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkFFU19LVywgZG93bmNhc3Q8Q3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2U+
KGtleURhdGEpLm9jdGV0U2VxdWVuY2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlKSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUVDREguY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtRUNESC5jcHAKaW5kZXggMTlmYzE5Y2MxMjMwNmJkOTAwNjEwODJh
MzNiMzIzOGQyNDZmMTBjZS4uMWM3OTlmNjNkMjRmMDFkYjMzMWIwYWMxZDJhMWIwMmUyMWE1MTIz
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtRUNESC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtRUNESC5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1FQ0RIOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXIKICAgICBjb25zdCBhdXRvJiBlY1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdv
cml0aG1FY0tleVBhcmFtcz4ocGFyYW1ldGVycyk7CiAKICAgICBpZiAodXNhZ2VzICYgKENyeXB0
b0tleVVzYWdlRW5jcnlwdCB8IENyeXB0b0tleVVzYWdlRGVjcnlwdCB8IENyeXB0b0tleVVzYWdl
U2lnbiB8IENyeXB0b0tleVVzYWdlVmVyaWZ5IHwgQ3J5cHRvS2V5VXNhZ2VXcmFwS2V5IHwgQ3J5
cHRvS2V5VXNhZ2VVbndyYXBLZXkpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRB
WF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTc3LDIyICs3NywyMiBAQCB2b2lkIENyeXB0b0FsZ29yaXRo
bUVDREg6OmRlcml2ZUJpdHMoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+JgogICAgIGF1dG8mIGVjUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUVj
ZGhLZXlEZXJpdmVQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKIAogICAgIGlmIChiYXNlS2V5LT50eXBl
KCkgIT0gQ3J5cHRvS2V5OjpUeXBlOjpQcml2YXRlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKElOVkFMSURfQUNDRVNTX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKEludmFs
aWRBY2Nlc3NFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKGVjUGFy
YW1ldGVycy5wdWJsaWNLZXkpOwogICAgIGlmIChlY1BhcmFtZXRlcnMucHVibGljS2V5LT50eXBl
KCkgIT0gQ3J5cHRvS2V5OjpUeXBlOjpQdWJsaWMpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soSU5WQUxJRF9BQ0NFU1NfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soSW52YWxp
ZEFjY2Vzc0Vycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYmFzZUtleS0+
YWxnb3JpdGhtSWRlbnRpZmllcigpICE9IGVjUGFyYW1ldGVycy5wdWJsaWNLZXktPmFsZ29yaXRo
bUlkZW50aWZpZXIoKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElEX0FDQ0VT
U19FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJyb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGVjQmFzZUtleSA9IGRvd25jYXN0PENy
eXB0b0tleUVDPihiYXNlS2V5LmdldCgpKTsKICAgICBhdXRvJiBlY1B1YmxpY0tleSA9IGRvd25j
YXN0PENyeXB0b0tleUVDPigqKGVjUGFyYW1ldGVycy5wdWJsaWNLZXkuZ2V0KCkpKTsKICAgICBp
ZiAoZWNCYXNlS2V5Lm5hbWVkQ3VydmUoKSAhPSBlY1B1YmxpY0tleS5uYW1lZEN1cnZlKCkpIHsK
LSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soSU5WQUxJRF9BQ0NFU1NfRVJSKTsKKyAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soSW52YWxpZEFjY2Vzc0Vycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNESDo6aW1w
b3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgS2V5RGF0YSYmIGRhCiAgICAg
ICAgIH0KICAgICAgICAgaXNVc2FnZXNBbGxvd2VkID0gaXNVc2FnZXNBbGxvd2VkIHx8ICF1c2Fn
ZXM7CiAgICAgICAgIGlmICghaXNVc2FnZXNBbGxvd2VkKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5
bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNDcsMjEg
KzE0NywyMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleShTdWJ0bGVDcnlw
dG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJiBkYQogICAgIH0KICAgICBjYXNlIFN1YnRs
ZUNyeXB0bzo6S2V5Rm9ybWF0OjpSYXc6CiAgICAgICAgIGlmICh1c2FnZXMpIHsKLSAgICAgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50
aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6U3BraToKICAgICAgICAgaWYgKHVzYWdl
cykgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQ
YXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdU
Rjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UGtjczg6CiAg
ICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlRGVyaXZlS2V5KSAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VEZXJpdmVCaXRzKSAmJiAodXNhZ2VzIF4gKENyeXB0
b0tleVVzYWdlRGVyaXZlS2V5IHwgQ3J5cHRvS2V5VXNhZ2VEZXJpdmVCaXRzKSkpIHsKLSAgICAg
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFtZXRlcnMu
aWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoV1RGOjpnZXQ8VmVj
dG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0Eu
Y3BwCmluZGV4IDI4ZGRlNDQwNWRlNzFmZWI5NzllZDI1YmVjYTNiYzExMjFmY2RjNWUuLjU1MzM3
NWZhN2U4MmYwZTM4MTAyMzc4MWFkYjdjYzk0NGI1MTI5ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDRFNBLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAK
QEAgLTUxLDcgKzUxLDcgQEAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBDcnlwdG9BbGdvcml0
aG1FQ0RTQTo6aWRlbnRpZmllcigpIGNvbnN0CiB2b2lkIENyeXB0b0FsZ29yaXRobUVDRFNBOjpz
aWduKHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRl
cnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhLCBWZWN0b3JD
YWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNr
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkK
IHsKICAgICBpZiAoa2V5LT50eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSkgewotICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElEX0FDQ0VTU19FUlIpOworICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIHBsYXRmb3JtU2lnbihXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdU
Rk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSwgY29udGV4dCwgd29ya1F1ZXVlKTsKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1FQ0RTQTo6c2lnbihzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4mJiBwYXIKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNEU0E6OnZlcmlmeShzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5
PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc2lnbmF0dXJlLCBWZWN0b3I8dWludDhfdD4mJiBk
YXRhLCBCb29sQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRp
b25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3
b3JrUXVldWUpCiB7CiAgICAgaWYgKGtleS0+dHlwZSgpICE9IENyeXB0b0tleVR5cGU6OlB1Ymxp
YykgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElEX0FDQ0VTU19FUlIpOworICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJyb3IpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIHBsYXRmb3JtVmVyaWZ5KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1v
dmUoa2V5KSwgV1RGTW92ZShzaWduYXR1cmUpLCBXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKGNhbGxi
YWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtRdWV1ZSk7CkBA
IC03MSw3ICs3MSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNEU0E6OmdlbmVyYXRlS2V5KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlCiAgICAgY29uc3QgYXV0byYg
ZWNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtRWNLZXlQYXJhbXM+KHBhcmFt
ZXRlcnMpOwogCiAgICAgaWYgKHVzYWdlcyAmIChDcnlwdG9LZXlVc2FnZUVuY3J5cHQgfCBDcnlw
dG9LZXlVc2FnZURlY3J5cHQgfCBDcnlwdG9LZXlVc2FnZURlcml2ZUtleSB8IENyeXB0b0tleVVz
YWdlRGVyaXZlQml0cyB8IENyeXB0b0tleVVzYWdlV3JhcEtleSB8IENyeXB0b0tleVVzYWdlVW53
cmFwS2V5KSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNEU0E6OmltcG9ydEtl
eShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJiBkCiAgICAgICAgIEpz
b25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAg
ICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRv
S2V5VXNhZ2VTaWduKSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlV
c2FnZVZlcmlmeSkpKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VS
Uik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzYWdlcyAmJiAha2V5LnVzZS5p
c051bGwoKSAmJiBrZXkudXNlICE9ICJzaWciKSB7CkBAIC0xMjEsMjEgKzEyMSwyMSBAQCB2b2lk
IENyeXB0b0FsZ29yaXRobUVDRFNBOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQg
Zm9ybWF0LCBLZXlEYXRhJiYgZAogICAgIH0KICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9y
bWF0OjpSYXc6CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdl
VmVyaWZ5KSkgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7Cisg
ICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFJh
dyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1v
dmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpTcGtp
OgogICAgICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlmeSkp
IHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRTcGtpKGVjUGFy
YW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6
OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlBrY3M4OgogICAg
ICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB7Ci0gICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UGtjczgoZWNQYXJhbWV0ZXJz
LmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSEtERi5j
cHAKaW5kZXggNjc2NTJhZTNiNGUwZjJiZWY1MGUxYzIzNWRjMmU2Zjg2NzQwMmE5Ni4uZDkyODgx
ZGU5YjMwMjJhYzAxYzI1YTk1MTcwZjE1ZmFmODg3OWI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSEtERi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSEtERi5jcHAKQEAg
LTU1LDE1ICs1NSwxNSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhLREY6OmRlcml2ZUJpdHMoc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+Jgogdm9pZCBDcnlwdG9BbGdv
cml0aG1IS0RGOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlE
YXRhJiYgZGF0YSwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+JiYgcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAg
dXNhZ2VzLCBLZXlDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2Vw
dGlvbkNhbGxiYWNrKQogewogICAgIGlmIChmb3JtYXQgIT0gU3VidGxlQ3J5cHRvOjpLZXlGb3Jt
YXQ6OlJhdykgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7
CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAodXNhZ2VzICYgKENyeXB0b0tleVVzYWdlRW5jcnlwdCB8
IENyeXB0b0tleVVzYWdlRGVjcnlwdCB8IENyeXB0b0tleVVzYWdlU2lnbiB8IENyeXB0b0tleVVz
YWdlVmVyaWZ5IHwgQ3J5cHRvS2V5VXNhZ2VXcmFwS2V5IHwgQ3J5cHRvS2V5VXNhZ2VVbndyYXBL
ZXkpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKGV4dHJhY3RhYmxlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9F
UlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKaW5kZXggYmU5MDU1Zjg3YmQxOTcyZTA5NDVj
OWZiNTlmZjE1MDg2NDkxZjRjNi4uZjdhZmVhZDc2NWEwZWMxYzZjOWU5OWMzNGNkNmUxODhhZmEx
ZWMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtSE1BQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1ITUFDOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXIKICAgICBjb25zdCBhdXRvJiBobWFjUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0
b0FsZ29yaXRobUhtYWNLZXlQYXJhbXM+KHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKHVzYWdlc0Fy
ZUludmFsaWRGb3JDcnlwdG9BbGdvcml0aG1ITUFDKHVzYWdlcykpIHsKLSAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRh
eEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA4LDcgKzEwOCw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0
IGZvcm1hdCwgS2V5RGF0YSYmIGRhCiAgICAgY29uc3QgYXV0byYgaG1hY1BhcmFtZXRlcnMgPSBk
b3duY2FzdDxDcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zPigqcGFyYW1ldGVycyk7CiAKICAg
ICBpZiAodXNhZ2VzQXJlSW52YWxpZEZvckNyeXB0b0FsZ29yaXRobUhNQUModXNhZ2VzKSkgewot
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzks
NyArMTM5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjppbXBvcnRLZXkoU3VidGxlQ3J5
cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhJiYgZGEKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURf
RVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghcmVzdWx0KSB7CkBAIC0xODksNyArMTg5LDcg
QEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpleHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlG
b3JtYXQgZm9ybWF0LCBSZWY8Q3J5cHRvS2UKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0yMDUsNyArMjA1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRv
QWxnb3JpdGhtSE1BQzo6c2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVwcmUK
IHsKICAgICBhdXRvJiBobWFjUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUht
YWNQYXJhbXNEZXByZWNhdGVkPihwYXJhbWV0ZXJzKTsKICAgICBpZiAoIWtleUFsZ29yaXRobU1h
dGNoZXMoaG1hY1BhcmFtZXRlcnMsIGtleSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9y
dGVkRXJyb3IgfTsKICAgICByZXR1cm4gcGxhdGZvcm1TaWduKGhtYWNQYXJhbWV0ZXJzLCBkb3du
Y2FzdDxDcnlwdG9LZXlITUFDPihrZXkpLCBkYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92
ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IENyeXB0b0FsZ29yaXRobUhNQUM6OnZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzRGVwCiB7CiAgICAgYXV0byYgaG1hY1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlw
dG9BbGdvcml0aG1IbWFjUGFyYW1zRGVwcmVjYXRlZD4ocGFyYW1ldGVycyk7CiAgICAgaWYgKCFr
ZXlBbGdvcml0aG1NYXRjaGVzKGhtYWNQYXJhbWV0ZXJzLCBrZXkpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIHBsYXRmb3JtVmVyaWZ5KGhtYWNQ
YXJhbWV0ZXJzLCBkb3duY2FzdDxDcnlwdG9LZXlITUFDPihrZXkpLCBleHBlY3RlZFNpZ25hdHVy
ZSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7CiB9
CiAKQEAgLTIzMiw3ICsyMzIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1I
TUFDOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZQogRXhjZXB0aW9u
T3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXlEYXRh
JiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZSwg
S2V5Q2FsbGJhY2smJiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYpCiB7CiAgICAgaWYgKCFpczxD
cnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4oa2V5RGF0YSkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBjYWxsYmFjayhDcnlwdG9LZXlITUFDOjpjcmVhdGUo
ZG93bmNhc3Q8Q3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2U+KGtleURhdGEpLm9jdGV0U2VxdWVu
Y2UoKSwgZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtc0RlcHJlY2F0ZWQ+KHBhcmFt
ZXRlcnMpLmhhc2gsIGV4dHJhY3RhYmxlLCB1c2FnZSkpOwogICAgIHJldHVybiB7IH07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1QQktERjIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtUEJLREYyLmNwcAppbmRleCBlOTQyZjY5NjZlOWVkM2RhODNjNDkwMTM0ZDYwYTc2N2M1
NWI3MDA2Li41YTBlNzcyZGQ0MDYyNTA3ZGYxYTY0ZDQxNjQ1Nzg1YjkwNGY4ZmY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktE
RjIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobVBCS0RGMi5jcHAKQEAgLTU1LDE1ICs1NSwxNSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVBC
S0RGMjo6ZGVyaXZlQml0cyhzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cwogdm9pZCBDcnlwdG9BbGdvcml0aG1QQktERjI6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86Oktl
eUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJiBkYXRhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBD
cnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMsIEtleUNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCiB7CiAgICAgaWYgKGZvcm1hdCAhPSBT
dWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UmF3KSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9y
dGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh1c2FnZXMgJiAoQ3J5
cHRvS2V5VXNhZ2VFbmNyeXB0IHwgQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0IHwgQ3J5cHRvS2V5VXNh
Z2VTaWduIHwgQ3J5cHRvS2V5VXNhZ2VWZXJpZnkgfCBDcnlwdG9LZXlVc2FnZVdyYXBLZXkgfCBD
cnlwdG9LZXlVc2FnZVVud3JhcEtleSkpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lO
VEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoZXh0cmFjdGFibGUpIHsKLSAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRh
eEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FF
U19QS0NTMV92MV81LmNwcAppbmRleCA2NjRmYmQ4YmZhNTg1YzU2OTMyMmQyNTI2ZjJjOTVjMWFh
YTljMWQzLi5mZWYwNGViNWRiMTNmZTllM2I5MDgwNGMyMWE1ZDUyMTc1ZWU0MGIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FF
U19QS0NTMV92MV81LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81LmNwcApAQCAtNjIsNyArNjIsNyBAQCBib29s
IENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmtleUFsZ29yaXRobU1hdGNoZXMoY29u
c3QgQ3J5cHRvS2V5JiBrZXkpCiB2b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6
OmVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJl
ZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNh
bGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ss
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQog
ewogICAgIGlmIChrZXktPnR5cGUoKSAhPSBDcnlwdG9LZXlUeXBlOjpQdWJsaWMpIHsKLSAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soSU5WQUxJRF9BQ0NFU1NfRVJSKTsKKyAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soSW52YWxpZEFjY2Vzc0Vycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHBsYWluVGV4dCksIFdU
Rk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29y
a1F1ZXVlKTsKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NT
MV92MV81OjplbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXIKIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rv
cjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQogewogICAgIGlmIChrZXktPnR5cGUoKSAh
PSBDcnlwdG9LZXlUeXBlOjpQcml2YXRlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKElO
VkFMSURfQUNDRVNTX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKEludmFsaWRBY2Nl
c3NFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGxhdGZvcm1EZWNyeXB0KFdU
Rk1vdmUoa2V5KSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1v
dmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOwpAQCAtODIsNyArODIs
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmdlbmVyYXRlS2V5KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIGNvbnN0IGF1dG8mIHJzYVBhcmFtZXRl
cnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXM+KHBhcmFtZXRlcnMp
OwogCiAgICAgaWYgKHVzYWdlcyAmIChDcnlwdG9LZXlVc2FnZVNpZ24gfCBDcnlwdG9LZXlVc2Fn
ZVZlcmlmeSB8IENyeXB0b0tleVVzYWdlRGVyaXZlS2V5IHwgQ3J5cHRvS2V5VXNhZ2VEZXJpdmVC
aXRzIHwgQ3J5cHRvS2V5VXNhZ2VXcmFwS2V5IHwgQ3J5cHRvS2V5VXNhZ2VVbndyYXBLZXkpKSB7
Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEw
Niw3ICsxMDYsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmltcG9y
dEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsCiAgICAgY2FzZSBTdWJ0bGVDcnlw
dG86OktleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShX
VEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5
LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlRGVjcnlwdCkpIHx8IChrZXku
ZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSkpKSB7Ci0gICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBpZiAodXNhZ2VzICYmICFrZXkudXNlLmlzTnVsbCgpICYmIGtleS51c2UgIT0g
ImVuYyIpIHsKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BL
Q1MxX3YxXzU6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsCiAgICAg
fQogICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlNwa2k6IHsKICAgICAgICAgaWYg
KHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSkgewotICAgICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHBhcmFtZXRlcnMtPmlkZW50
aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CkBAIC0xMzAsMTQgKzEzMCwxNCBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86Oktl
eUZvcm1hdCBmb3JtYXQsCiAgICAgfQogICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6
OlBrY3M4OiB7CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdl
RGVjcnlwdCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOwor
ICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0
UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKFdURjo6
Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTm90U3VwcG9y
dGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghcmVzdWx0KSB7CkBA
IC0xODQsNyArMTg0LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81Ojpl
eHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LAogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBP
UlRFRF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5NCwxNCArMTk0LDE0IEBAIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6ZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5
Rm9ybWF0IGZvcm1hdCwKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQUVTX1BL
Q1MxX3YxXzU6OmVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0
ZWQmLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0
YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxi
YWNrKQogewogICAgIGlmICgha2V5QWxnb3JpdGhtTWF0Y2hlcyhrZXkpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIHBsYXRmb3JtRW5jcnlwdChk
b3duY2FzdDxDcnlwdG9LZXlSU0E+KGtleSksIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spLCBXVEZN
b3ZlKGZhaWx1cmVDYWxsYmFjaykpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdv
cml0aG1SU0FFU19QS0NTMV92MV81OjpkZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayYm
IGZhaWx1cmVDYWxsYmFjaykKIHsKICAgICBpZiAoIWtleUFsZ29yaXRobU1hdGNoZXMoa2V5KSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIHJldHVybiBwbGF0
Zm9ybURlY3J5cHQoZG93bmNhc3Q8Q3J5cHRvS2V5UlNBPihrZXkpLCBkYXRhLCBXVEZNb3ZlKGNh
bGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCmluZGV4IGFhNGMxN2NhMTdiOTkxOTFmY2EwZDVhMjFj
YzAwMTNiMzk3MmMwMDYuLmJlMjZjNWI2YTJhMjg4MGFjNGMyZjYwNDVlZDMyNDY4MTE4OWFmZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAKQEAgLTcxLDcgKzcx
LDcgQEAgYm9vbCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6a2V5QWxnb3JpdGht
TWF0Y2hlcyhjb25zdCBDcnlwdG9BbGdvcml0aG0KIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NB
X1BLQ1MxX3YxXzU6OnNpZ24oc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhLCBWZWN0
b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxi
YWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1
ZSkKIHsKICAgICBpZiAoa2V5LT50eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSkgewot
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJTlZBTElEX0FDQ0VTU19FUlIpOworICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhJbnZhbGlkQWNjZXNzRXJyb3IpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIHBsYXRmb3JtU2lnbihXVEZNb3ZlKGtleSksIFdURk1vdmUoZGF0YSksIFdURk1v
dmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1
ZXVlKTsKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFf
djFfNTo6c2lnbihzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW0KIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnZlcmlmeShzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1
aW50OF90PiYmIHNpZ25hdHVyZSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgQm9vbENhbGxiYWNr
JiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQogewogICAg
IGlmIChrZXktPnR5cGUoKSAhPSBDcnlwdG9LZXlUeXBlOjpQdWJsaWMpIHsKLSAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soSU5WQUxJRF9BQ0NFU1NfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soSW52YWxpZEFjY2Vzc0Vycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBw
bGF0Zm9ybVZlcmlmeShXVEZNb3ZlKGtleSksIFdURk1vdmUoc2lnbmF0dXJlKSwgV1RGTW92ZShk
YXRhKSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250
ZXh0LCB3b3JrUXVldWUpOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJT
QVNTQV9QS0NTMV92MV81OjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZQogICAgIGNvbnN0IGF1dG8mIHJzYVBhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0
aG1Sc2FIYXNoZWRLZXlHZW5QYXJhbXM+KHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKHVzYWdlcyAm
IChDcnlwdG9LZXlVc2FnZURlY3J5cHQgfCBDcnlwdG9LZXlVc2FnZUVuY3J5cHQgfCBDcnlwdG9L
ZXlVc2FnZURlcml2ZUtleSB8IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cyB8IENyeXB0b0tleVVz
YWdlV3JhcEtleSB8IENyeXB0b0tleVVzYWdlVW53cmFwS2V5KSkgewotICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4
RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0
bzo6S2V5Rm9ybWF0IGZvcm1hdCwKICAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdU
Rjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtl
eS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB8fCAoa2V5LmQu
aXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkpKSB7Ci0gICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBpZiAodXNhZ2VzICYmICFrZXkudXNlLmlzTnVsbCgpICYmIGtleS51c2UgIT0gInNp
ZyIpIHsKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81OjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LAogICAgIH0K
ICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpTcGtpOiB7CiAgICAgICAgIGlmICh1
c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkgewotICAgICAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgpAQCAtMTY0LDcgKzE2NCw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmltcG9ydEtleShTdWJ0bGVDcnlw
dG86OktleUZvcm1hdCBmb3JtYXQsCiAgICAgfQogICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlG
b3JtYXQ6OlBrY3M4OiB7CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0b0tl
eVVzYWdlU2lnbikpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIp
OworICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2
NTQzNj4KQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81OjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LAogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
Tk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0
ZWRFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKQEAg
LTIzNyw3ICsyMzcsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojpl
eHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LAogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soTk9UX1NVUFBP
UlRFRF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOb3RTdXBwb3J0ZWRFcnJvcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI0OCw3ICsyNDgsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6c2lnbihjb25zdCBDcnlw
dG9BbGdvcml0aG1QYQogewogICAgIGF1dG8mIHJzYVNTQVBhcmFtZXRlcnMgPSBkb3duY2FzdDxD
cnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXNEZXByZWNhdGVkPihwYXJhbWV0ZXJzKTsKICAgICBp
ZiAoIWtleUFsZ29yaXRobU1hdGNoZXMocnNhU1NBUGFyYW1ldGVycywga2V5KSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIHJldHVybiBwbGF0Zm9ybVNpZ24o
cnNhU1NBUGFyYW1ldGVycywgZG93bmNhc3Q8Q3J5cHRvS2V5UlNBPihrZXkpLCBkYXRhLCBXVEZN
b3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIApAQCAtMjU2LDcg
KzI1Niw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81Ojp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtCiB7CiAgICAgYXV0byYgcnNhU1NBUGFy
YW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtc0RlcHJlY2F0ZWQ+
KHBhcmFtZXRlcnMpOwogICAgIGlmICgha2V5QWxnb3JpdGhtTWF0Y2hlcyhyc2FTU0FQYXJhbWV0
ZXJzLCBrZXkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAg
cmV0dXJuIHBsYXRmb3JtVmVyaWZ5KHJzYVNTQVBhcmFtZXRlcnMsICBkb3duY2FzdDxDcnlwdG9L
ZXlSU0E+KGtleSksIHNpZ25hdHVyZSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUo
ZmFpbHVyZUNhbGxiYWNrKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmNwcAppbmRleCA5MGRh
YzMyZWIzODdmOWMyMTlhMzcyNTQ0NGNmYTZlZjM4YTU1ZTM2Li5jYjUxM2I1MzkyMThkMTE0YWY3
N2U4YWVjOGQ1MGU0MTFlNWYwZDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVAuY3BwCkBAIC03Miw3
ICs3Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmVuY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiB7CiAgICAgQVNTRVJUKHBhcmFtZXRl
cnMpOwogICAgIGlmIChrZXktPnR5cGUoKSAhPSBDcnlwdG9LZXlUeXBlOjpQdWJsaWMpIHsKLSAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soSU5WQUxJRF9BQ0NFU1NfRVJSKTsKKyAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soSW52YWxpZEFjY2Vzc0Vycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkp
LCBXVEZNb3ZlKHBsYWluVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4KIHsKICAgICBBU1NFUlQocGFyYW1ldGVycyk7CiAgICAgaWYgKGtl
eS0+dHlwZSgpICE9IENyeXB0b0tleVR5cGU6OlByaXZhdGUpIHsKLSAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soSU5WQUxJRF9BQ0NFU1NfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
SW52YWxpZEFjY2Vzc0Vycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBwbGF0Zm9y
bURlY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKGNpcGhl
clRleHQpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNv
bnRleHQsIHdvcmtRdWV1ZSk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGht
UlNBX09BRVA6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBh
cmFtCiAgICAgY29uc3QgYXV0byYgcnNhUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29y
aXRobVJzYUhhc2hlZEtleUdlblBhcmFtcz4ocGFyYW1ldGVycyk7CiAKICAgICBpZiAodXNhZ2Vz
ICYgKENyeXB0b0tleVVzYWdlU2lnbiB8IENyeXB0b0tleVVzYWdlVmVyaWZ5IHwgQ3J5cHRvS2V5
VXNhZ2VEZXJpdmVLZXkgfCBDcnlwdG9LZXlVc2FnZURlcml2ZUJpdHMpKSB7Ci0gICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhT
eW50YXhFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMCw3ICsxMzAsNyBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpL
ZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhJgogICAgICAgICB9CiAgICAgICAgIGlzVXNhZ2VzQWxs
b3dlZCA9IGlzVXNhZ2VzQWxsb3dlZCB8fCAhdXNhZ2VzOwogICAgICAgICBpZiAoIWlzVXNhZ2Vz
QWxsb3dlZCkgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7Cisg
ICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtUlNBX09BRVA6OmltcG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtl
eURhdGEmCiAgICAgfQogICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlNwa2k6IHsK
ICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VXcmFwS2V5KSAmJiAodXNhZ2VzIF4gKENyeXB0b0tl
eVVzYWdlRW5jcnlwdCB8IENyeXB0b0tleVVzYWdlV3JhcEtleSkpKSB7Ci0gICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9y
bWF0IGZvcm1hdCwgS2V5RGF0YSYKICAgICB9CiAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZv
cm1hdDo6UGtjczg6IHsKICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5
VXNhZ2VEZWNyeXB0KSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VVbndyYXBLZXkpICYmICh1
c2FnZXMgXiAoQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0IHwgQ3J5cHRvS2V5VXNhZ2VVbndyYXBLZXkp
KSkgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmltcG9ydEtleShT
dWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9S
VEVEX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkgewpAQCAtMjUzLDcgKzI1
Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmV4cG9ydEtleShTdWJ0bGVDcnlw
dG86OktleUZvcm1hdCBmb3JtYXQsIFJlZjxDcnlwCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBkZWZhdWx0OgotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhOT1RfU1VQUE9SVEVEX0VSUik7
CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5vdFN1cHBvcnRlZEVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMjY0LDcgKzI2NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENy
eXB0b0FsZ29yaXRobVJTQV9PQUVQOjplbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlCiB7CiAgICAgYXV0byYgcnNhT0FFUFBhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdv
cml0aG1Sc2FPYWVwUGFyYW1zRGVwcmVjYXRlZD4ocGFyYW1ldGVycyk7CiAgICAgaWYgKCFrZXlB
bGdvcml0aG1NYXRjaGVzKHJzYU9BRVBQYXJhbWV0ZXJzLCBrZXkpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIHBsYXRmb3JtRW5jcnlwdChyc2FP
QUVQUGFyYW1ldGVycywgZG93bmNhc3Q8Q3J5cHRvS2V5UlNBPihrZXkpLCBkYXRhLCBXVEZNb3Zl
KGNhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKIH0KIApAQCAtMjcyLDcgKzI3
Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpkZWNyeXB0
KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlCiB7CiAgICAgYXV0byYgcnNhT0FFUFBhcmFt
ZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFyYW1zRGVwcmVjYXRlZD4o
cGFyYW1ldGVycyk7CiAgICAgaWYgKCFrZXlBbGdvcml0aG1NYXRjaGVzKHJzYU9BRVBQYXJhbWV0
ZXJzLCBrZXkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAg
cmV0dXJuIHBsYXRmb3JtRGVjcnlwdChyc2FPQUVQUGFyYW1ldGVycywgZG93bmNhc3Q8Q3J5cHRv
S2V5UlNBPihrZXkpLCBkYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2Fs
bGJhY2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcAppbmRleCBjMWQxZjU5YzY1OGE4ZmUy
YjYwNGY5YWEzMTU4MjE5YTNkMmRiYjM4Li4zNmFmM2E5NzRlMWE0ZjcyNzViMGE2MTRiMzM1Y2I2
YTA3NDJiMDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcApAQCAtNTUsNyArNTUsNyBAQCBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmlkZW50aWZpZXIo
KSBjb25zdAogdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfUFNTOjpzaWduKHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+
JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNr
LCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKIHsKICAgICBpZiAoa2V5LT50
eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSkgewotICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhJTlZBTElEX0FDQ0VTU19FUlIpOworICAgICAgICBleGNlcHRpb25DYWxsYmFjayhJbnZh
bGlkQWNjZXNzRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBsYXRmb3JtU2ln
bihXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUoZGF0YSksIFdURk1v
dmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1
ZXVlKTsKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfUFNTOjpzaWdu
KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHAKIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtUlNBX1BTUzo6dmVyaWZ5KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8
dWludDhfdD4mJiBzaWduYXR1cmUsIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIEJvb2xDYWxsYmFj
ayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKIHsKICAg
ICBpZiAoa2V5LT50eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHVibGljKSB7Ci0gICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKElOVkFMSURfQUNDRVNTX0VSUik7CisgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKEludmFsaWRBY2Nlc3NFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
cGxhdGZvcm1WZXJpZnkoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3Zl
KHNpZ25hdHVyZSksIFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKQEAgLTc1LDcgKzc1LDcgQEAg
dm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfUFNTOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzJiBwYXJhbWUKICAgICBjb25zdCBhdXRvJiByc2FQYXJhbWV0ZXJzID0g
ZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zPihwYXJhbWV0ZXJz
KTsKIAogICAgIGlmICh1c2FnZXMgJiAoQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0IHwgQ3J5cHRvS2V5
VXNhZ2VFbmNyeXB0IHwgQ3J5cHRvS2V5VXNhZ2VEZXJpdmVLZXkgfCBDcnlwdG9LZXlVc2FnZURl
cml2ZUJpdHMgfCBDcnlwdG9LZXlVc2FnZVdyYXBLZXkgfCBDcnlwdG9LZXlVc2FnZVVud3JhcEtl
eSkpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7CisgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0S2V5
KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0IGZvcm1hdCwgS2V5RGF0YSYmCiAgICAgICAgIEpzb25X
ZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAg
ICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5
VXNhZ2VTaWduKSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2Fn
ZVZlcmlmeSkpKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU1lOVEFYX0VSUik7
CisgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzYWdlcyAmJiAha2V5LnVzZS5pc051
bGwoKSAmJiBrZXkudXNlICE9ICJzaWciKSB7CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1SU0FfUFNTOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9y
bWF0LCBLZXlEYXRhJiYKICAgICB9CiAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6
U3BraTogewogICAgICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZl
cmlmeSkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFNZTlRBWF9FUlIpOworICAg
ICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4K
QEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtl
eShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCBmb3JtYXQsIEtleURhdGEmJgogICAgIH0KICAgICBj
YXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODogewogICAgICAgICBpZiAodXNhZ2Vz
ICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5
bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBG
SVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+CkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1SU0FfUFNTOjppbXBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9y
bWF0LCBLZXlEYXRhJiYKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmICghcmVzdWx0KSB7CkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1SU0FfUFNTOjpleHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQgZm9ybWF0LCBSZWY8
Q3J5cHQKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soTm90U3VwcG9ydGVkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNH
Q3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDR0NyeXB0LmNwcAppbmRleCBkYjQ0ODdiZGE4MWE3MjAyZGRjZWNlZGQ0NmZkMmRlM2Uw
NWYwYjk2Li5jZjdiM2U2YjdmZDVhN2RkNzI0M2Q2YzM3NjU1MzI4ZmNiMGZiMjU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNH
Q3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQ0dDcnlwdC5jcHAKQEAgLTIyNiwxMyArMjI2LDEzIEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1QYXJhCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0
Zm9ybUVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zRGVwcmVjYXRlZCYs
IGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JD
YWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGht
QWVzQ2JjUGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0
b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVE
X0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAKaW5kZXggN2Rk
MTg2Y2M3OWI0NjBmZjhiZmVlNTM5ZDFkNjZkZDJjNTQ0NzIxNy4uYzVmNDUwZGM5Mjg1ZmJkMDVi
NDg3NTI3OWE0MTRhNzg3MjgwM2FmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfS1dHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcApAQCAtMTQz
LDEzICsxNDMsMTMgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFw
S2V5KFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDgKIEV4Y2VwdGlvbk9yPHZvaWQ+
IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0tleUFF
UyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2Fs
bGJhY2smJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24g
eyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0
ZWRFcnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6
OnBsYXRmb3JtRGVjcnlwdChjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRp
b25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsK
KyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlw
dC9DcnlwdG9BbGdvcml0aG1ITUFDR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvQWxnb3JpdGhtSE1BQ0dDcnlwdC5jcHAKaW5kZXggNjU5MGUxZmM4Y2U1NTY3
NzY3NjkwNzg2NjRlYWVkMTgwMDg5YzJkZC4uNDljOTU4Y2JjZGRlNGNjOGVkZTNhNzRjOWI3NWFl
OWRmMzBkNjIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9Dcnlw
dG9BbGdvcml0aG1ITUFDR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobUhNQUNHQ3J5cHQuY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtSE1BQzo6cGxhdGZvcm1TaWduKGNvbnN0IENy
eXB0b0FsZ29yaXRobUhtYWNQYXIKIHsKICAgICBpbnQgYWxnb3JpdGhtID0gZ2V0R0NyeXB0RGln
ZXN0QWxnb3JpdGhtKHBhcmFtZXRlcnMuaGFzaCk7CiAgICAgaWYgKGFsZ29yaXRobSA9PSBHQ1JZ
X01BQ19OT05FKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAg
ICBhdXRvIHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGtleS5rZXko
KSwgZGF0YSk7CiAgICAgaWYgKHNpZ25hdHVyZSkKQEAgLTE1OSw3ICsxNTksNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1ITUFDOjpwbGF0Zm9ybVZlcmlmeShjb25zdCBDcnlw
dG9BbGdvcml0aG1IbWFjUAogewogICAgIGludCBhbGdvcml0aG0gPSBnZXRHQ3J5cHREaWdlc3RB
bGdvcml0aG0ocGFyYW1ldGVycy5oYXNoKTsKICAgICBpZiAoYWxnb3JpdGhtID09IEdDUllfTUFD
X05PTkUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGF1
dG8gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwga2V5LmtleSgpLCBk
YXRhKTsKICAgICBpZiAoIXNpZ25hdHVyZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81R0NyeXB0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFf
djFfNUdDcnlwdC5jcHAKaW5kZXggZTIwM2M2ZTZiYTQ2ZWFhMzQwY2ZlOWJmMjUwNmMzNTBlODhh
MDM1MS4uMTZhOWUyNWQ1NmNhMWMwYjIxM2MyZDQzZWYwODIzYzdmMGE3OWU1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NT
MV92MV81R0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwCkBAIC0xNTIsMTMgKzE1MiwxMyBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRGVjcnlwdChS
ZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3Jp
dGhtUlNBRVNfUEtDUzFfdjFfNTo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0tleVJTQSYs
IGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJh
Y2smJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRF
cnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NT
MV92MV81OjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvS2V5UlNBJiwgY29uc3QgQ3J5cHRv
T3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURf
RVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVHQ3J5cHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NUdDcnlwdC5jcHAKaW5kZXggOTMwYzQ2MDExNjQ0NjExM2EzNjcwZjc4OGYwMzkzOWNlZWM3ZjQ1
NC4uMzM4OTY4NmRhNDlkZmEwMzExYzMwMTI2NDAwZTFhMmE1N2EzNzEwMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFf
djFfNUdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUdDcnlwdC5jcHAKQEAgLTE5MywxMyArMTkzLDEzIEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnBsYXRmb3JtVmVyaWZ5KFJl
ZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0CiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1TaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVJz
YVNzYVBhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlSU0EmLCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9F
UlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAog
RXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnBsYXRm
b3JtVmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtc0RlcHJlY2F0ZWQmLCBj
b25zdCBDcnlwdG9LZXlSU0EmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgY29uc3QgQ3J5
cHRvT3BlcmF0aW9uRGF0YSYsIEJvb2xDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVE
X0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBHQ3J5cHQuY3BwCmluZGV4
IGQ1ZTdjMGUwYmVhYjM3YmZiMjZiNDU0ZGIwMmQ5MzkzMTY2NDNhMDEuLjVjZmYxZjA0ZTY5M2Q1
MDYwZGRmMjJkMDc4MDJjOTE1ZTNlNmFhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBHQ3J5cHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBHQ3J5cHQuY3Bw
CkBAIC0xNzAsMTMgKzE3MCwxMyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpwbGF0
Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcgogRXhjZXB0aW9u
T3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBD
cnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleVJT
QSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2Fs
bGJhY2smJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFeGNlcHRpb24g
eyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0
ZWRFcnJvciB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1SU0FfT0FF
UDo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXNEZXBy
ZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5UlNBJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYs
IFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRv
S2V5UlNBR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5
UlNBR0NyeXB0LmNwcAppbmRleCBjMTRmZTg4NWFhODIxNDg4ODdkNjE5ODQ1NjM4MjFjNjlkOGEw
YmFiLi5jMWU2NWFjNDJiOTExMmQwYTMzODlkMWY4NWJmZDA3ODNmMTk4NzIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCkBA
IC00MTgsNyArNDE4LDcgQEAgUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBv
cnRQa2NzOChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWYKIEV4Y2VwdGlvbk9yPFZl
Y3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRTcGtpKCkgY29uc3QKIHsKICAgICBp
ZiAodHlwZSgpICE9IENyeXB0b0tleVR5cGU6OlB1YmxpYykKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBQQUw6OlRBU04xOjpTdHJ1Y3R1cmUgcnNhUHVi
bGljS2V5OwogICAgIHsKQEAgLTQ4OCw3ICs0ODgsNyBAQCBFeGNlcHRpb25PcjxWZWN0b3I8dWlu
dDhfdD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0U3BraSgpIGNvbnN0CiBFeGNlcHRpb25PcjxWZWN0
b3I8dWludDhfdD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0UGtjczgoKSBjb25zdAogewogICAgIGlm
ICh0eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBQQUw6OlRBU04xOjpTdHJ1Y3R1cmUgcnNhUHJp
dmF0ZUtleTsKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9D
cnlwdG9LZXlFQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5j
cHAKaW5kZXggYWMzNTUyNDNjZjQwYmRmMDdmMjY0ZWNjM2IyMDM4NzI1YjkxNWEyMS4uYmI1ZjMz
NTAwODA1M2ExZmIzMzA4ZjFiYjNmYzc0ZDc0OGFjOGVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcApAQCAtNTksNyArNTksNyBAQCBFeGNlcHRpb25PcjxD
cnlwdG9LZXlQYWlyPiBDcnlwdG9LZXlFQzo6Z2VuZXJhdGVQYWlyKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIgaQogewogICAgIGF1dG8gbmFtZWRDdXJ2ZSA9IHRvTmFtZWRDdXJ2ZShjdXJ2ZSk7
CiAgICAgaWYgKCFuYW1lZEN1cnZlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NV
UFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVy
cm9yIH07CiAKICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtR2VuZXJhdGVQYWlyKGlkZW50aWZp
ZXIsICpuYW1lZEN1cnZlLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICBpZiAoIXJlc3VsdCkK
QEAgLTEzMyw3ICsxMzMsNyBAQCBSZWZQdHI8Q3J5cHRvS2V5RUM+IENyeXB0b0tleUVDOjppbXBv
cnRQa2NzOChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZQogRXhjZXB0aW9uT3I8
VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlFQzo6ZXhwb3J0UmF3KCkgY29uc3QKIHsKICAgICBp
ZiAodHlwZSgpICE9IENyeXB0b0tleTo6VHlwZTo6UHVibGljKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBwbGF0Zm9ybUV4cG9ydFJhdygp
OwogfQpAQCAtMTU5LDcgKzE1OSw3IEBAIEpzb25XZWJLZXkgQ3J5cHRvS2V5RUM6OmV4cG9ydEp3
aygpIGNvbnN0CiBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleUVDOjpleHBv
cnRTcGtpKCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IENyeXB0b0tleTo6VHlwZTo6UHVi
bGljKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJl
dHVybiBwbGF0Zm9ybUV4cG9ydFNwa2koKTsKIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleUVDOjpleHBvcnRTcGtpKCkgY29uc3QKIEV4
Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5RUM6OmV4cG9ydFBrY3M4KCkgY29u
c3QKIHsKICAgICBpZiAodHlwZSgpICE9IENyeXB0b0tleTo6VHlwZTo6UHJpdmF0ZSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gcGxhdGZv
cm1FeHBvcnRQa2NzOCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAKaW5kZXggYjA4ZDIyNmNiMzk0NWQ3NDQ5NTE3Yzhk
ODczZTg5OWI5NTE1OGYzOS4uZjg4MjFjMDNmOGRlMzZjZjZiNzYyM2VhY2I5ODAwMWUwZDY2MTRk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1I
TUFDTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRo
bUhNQUNNYWMuY3BwCkBAIC0xMzgsNyArMTM4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRv
QWxnb3JpdGhtSE1BQzo6cGxhdGZvcm1TaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXIK
IHsKICAgICBhdXRvIGFsZ29yaXRobSA9IGNvbW1vbkNyeXB0b0hNQUNBbGdvcml0aG0ocGFyYW1l
dGVycy5oYXNoKTsKICAgICBpZiAoIWFsZ29yaXRobSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RT
dXBwb3J0ZWRFcnJvciB9OwogICAgIGNhbGxiYWNrKGNhbGN1bGF0ZVNpZ25hdHVyZSgqYWxnb3Jp
dGhtLCBrZXkua2V5KCksIGRhdGEuZmlyc3QsIGRhdGEuc2Vjb25kKSk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0
aG1ITUFDOjpwbGF0Zm9ybVZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUAogewogICAg
IGF1dG8gYWxnb3JpdGhtID0gY29tbW9uQ3J5cHRvSE1BQ0FsZ29yaXRobShwYXJhbWV0ZXJzLmhh
c2gpOwogICAgIGlmICghYWxnb3JpdGhtKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRl
ZEVycm9yIH07CiAKICAgICBhdXRvIHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVyZSgqYWxn
b3JpdGhtLCBrZXkua2V5KCksIGRhdGEuZmlyc3QsIGRhdGEuc2Vjb25kKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCmluZGV4IGRjYjRhZjNkNTYw
NGYyZDA4M2VkMGZiMjExNWMyM2ViZTQxNTdmZGIuLjVmODFmZTFlZjJmMTJlNmJjMTIxNzdjMTI3
NjViOWUyNmI2Yjk2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvS2V5UlNBTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tl
eVJTQU1hYy5jcHAKQEAgLTMxNiw3ICszMTYsNyBAQCBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlw
dG9LZXlSU0E6OmltcG9ydFNwa2koQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaQog
RXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlSU0E6OmV4cG9ydFNwa2koKSBj
b25zdAogewogICAgIGlmICh0eXBlKCkgIT0gQ3J5cHRvS2V5VHlwZTo6UHVibGljKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIC8vIFRoZSBjdXJyZW50
IFNlY0xpYnJhcnkgY2Fubm90IG91dHB1dCBhIHZhbGlkIFNQS0kgZm9ybWF0IGJpbmFyeS4gSGVu
Y2UsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBoYWNrLgogICAgIC8vIFRoaXMgaGFjayBjYW4gYmUg
cmVtb3ZlZCB3aGVuIDxyZGFyOi8vcHJvYmxlbS8yOTUyMzI4Nj4gaXMgcmVzb2x2ZWQuCkBAIC0z
NzMsNyArMzczLDcgQEAgUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcnRQ
a2NzOChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWYKIEV4Y2VwdGlvbk9yPFZlY3Rv
cjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRQa2NzOCgpIGNvbnN0CiB7CiAgICAgaWYg
KHR5cGUoKSAhPSBDcnlwdG9LZXlUeXBlOjpQcml2YXRlKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIC8vIFRoZSBjdXJyZW50IFNlY0xpYnJhcnkgY2Fu
bm90IG91dHB1dCBhIHZhbGlkIFBLQ1M4IGZvcm1hdCBiaW5hcnkuIEhlbmNlLCB3ZSBuZWVkIHRo
ZSBmb2xsb3dpbmcgaGFjay4KICAgICAvLyBUaGlzIGhhY2sgY2FuIGJlIHJlbW92ZWQgd2hlbiA8
cmRhcjovL3Byb2JsZW0vMjk1MjMyODY+IGlzIHJlc29sdmVkLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCAyN2IzYzEwMWE1
NmQwYWFiYmI4NmMwNjQ4YzlmMWU1ZjJhZmE1Nzc4Li5mYTIyMjQ4NDk5MjJiYWFiMmU3YjllOTJh
NTdjODY1NmNhODg5ZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMTcwMSw3ICsxNzAxLDcgQEAgU3RyaW5nIENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0CiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dChjb25zdCBTdHJpbmcm
KQogewotICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIg
fTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsK
IH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpn
ZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycmluZ0tleXdvcmQoKQpAQCAtNDI2NCwxMiArNDI2NCwx
MiBAQCBib29sIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0
KGNvbnN0IFN0cmluZyYpCiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVy
cm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmluZz4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBFeGNlcHRp
b24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIH0KICAgICAKIFJlZlB0cjxDU1NWYWx1
ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJu
YWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQpAQCAtNDI4NCw3ICs0Mjg0LDcgQEAgU3RyaW5n
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENT
U1Byb3BlcnR5SUQgcHJvcGUKIAogRXhjZXB0aW9uT3I8Ym9vbD4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRF
cnJvciB9OwogfQogCiBSZWY8Q1NTVmFsdWVMaXN0PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpn
ZXRCYWNrZ3JvdW5kU2hvcnRoYW5kVmFsdWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNl
dC5jcHAKaW5kZXggNTJkYWEzN2ZhZWQ4ZGE1YmQwN2Q0YTVjNjFkMjYyMTkwOGY5ZDZmZS4uYzgw
YTI1Y2UwNTE4NDYyZDk2NTZlMGIwNjkzZjczMjBmNWVkNmI5ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udEZhY2VTZXQuY3BwCkBAIC0zMzMsMTMgKzMzMywxMyBAQCBFeGNlcHRpb25PcjxWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+PiBDU1NGb250RmFjZVNldDo6
bWF0Y2hpbgogICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUo
KTsKICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlLCBD
U1NQcm9wZXJ0eUZvbnQsIGZvbnQsIHRydWUsIEhUTUxTdGFuZGFyZE1vZGUpOwogICAgIGlmIChw
YXJzZVJlc3VsdCA9PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcikKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07CiAKICAgICBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0ID0gY29t
cHV0ZUZvbnRTZWxlY3Rpb25SZXF1ZXN0KHN0eWxlLmdldCgpKTsKIAogICAgIGF1dG8gZmFtaWx5
ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKICAg
ICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oZmFtaWx5LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAgICAgQ1NTVmFsdWVMaXN0JiBmYW1pbHlMaXN0ID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqZmFtaWx5KTsKIAogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1bmlxdWVGYW1p
bGllczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcm91cGluZ1J1bGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyb3VwaW5nUnVsZS5jcHAKaW5kZXggN2M5OTdmYzc0
MWM1ZWU4YWFkZDdmNzJiOGYyODFjMGExOTI2YWVlMy4uZGU2ZjM5ZDNmNWQ4NzMxZDk5ZTVlYjNj
OTY4ZTI5YWQxZWFjYmZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyb3Vw
aW5nUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyb3VwaW5nUnVsZS5jcHAK
QEAgLTYxLDI2ICs2MSwyNiBAQCBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gQ1NTR3JvdXBpbmdSdWxl
OjppbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZVN0cmluZywgdW5zaQogICAgIEFTU0VSVCht
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IG1fZ3JvdXBSdWxlLT5jaGlsZFJ1bGVz
KCkuc2l6ZSgpKTsKIAogICAgIGlmIChpbmRleCA+IG1fZ3JvdXBSdWxlLT5jaGlsZFJ1bGVzKCku
c2l6ZSgpKSB7Ci0gICAgICAgIC8vIElOREVYX1NJWkVfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNp
ZmllZCBpbmRleCBpcyBub3QgYSB2YWxpZCBpbnNlcnRpb24gcG9pbnQuCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICAvLyBJbmRleFNpemVFcnJv
cjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgaW5kZXggaXMgbm90IGEgdmFsaWQgaW5zZXJ0aW9u
IHBvaW50LgorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAg
ICB9CiAKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgp
OwogICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBuZXdSdWxlID0gQ1NTUGFyc2VyOjpwYXJzZVJ1
bGUocGFyc2VyQ29udGV4dCgpLCBzdHlsZVNoZWV0ID8gJnN0eWxlU2hlZXQtPmNvbnRlbnRzKCkg
OiBudWxscHRyLCBydWxlU3RyaW5nKTsKICAgICBpZiAoIW5ld1J1bGUpIHsKLSAgICAgICAgLy8g
U1lOVEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcnVsZSBoYXMgYSBzeW50YXggZXJy
b3IgYW5kIGlzIHVucGFyc2FibGUuCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhf
RVJSIH07CisgICAgICAgIC8vIFN5bnRheEVycm9yOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBy
dWxlIGhhcyBhIHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgfQogCiAgICAgaWYgKG5ld1J1bGUtPmlz
SW1wb3J0UnVsZSgpIHx8IG5ld1J1bGUtPmlzTmFtZXNwYWNlUnVsZSgpKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBhbiBISUVSQVJDSFlfUkVRVUVTVF9FUlIgc2hvdWxkIGFsc28gYmUgdGhyb3duIGZv
ciBhIEBjaGFyc2V0IG9yIGEgbmVzdGVkCi0gICAgICAgIC8vIEBtZWRpYSBydWxlLiBUaGV5IGFy
ZSBjdXJyZW50bHkgbm90IGdldHRpbmcgcGFyc2VkLCByZXN1bHRpbmcgaW4gYSBTWU5UQVhfRVJS
CisgICAgICAgIC8vIEZJWE1FOiBhbiBIaWVyYXJjaHlSZXF1ZXN0RXJyb3Igc2hvdWxkIGFsc28g
YmUgdGhyb3duIGZvciBhIEBjaGFyc2V0IG9yIGEgbmVzdGVkCisgICAgICAgIC8vIEBtZWRpYSBy
dWxlLiBUaGV5IGFyZSBjdXJyZW50bHkgbm90IGdldHRpbmcgcGFyc2VkLCByZXN1bHRpbmcgaW4g
YSBTeW50YXhFcnJvcgogICAgICAgICAvLyB0byBnZXQgcmFpc2VkIGFib3ZlLgogCi0gICAgICAg
IC8vIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlmIHRoZSBydWxlIGNhbm5vdCBiZSBp
bnNlcnRlZCBhdCB0aGUgc3BlY2lmaWVkCisgICAgICAgIC8vIEhpZXJhcmNoeVJlcXVlc3RFcnJv
cjogUmFpc2VkIGlmIHRoZSBydWxlIGNhbm5vdCBiZSBpbnNlcnRlZCBhdCB0aGUgc3BlY2lmaWVk
CiAgICAgICAgIC8vIGluZGV4LCBlLmcuLCBpZiBhbiBAaW1wb3J0IHJ1bGUgaXMgaW5zZXJ0ZWQg
YWZ0ZXIgYSBzdGFuZGFyZCBydWxlIHNldCBvciBvdGhlcgogICAgICAgICAvLyBhdC1ydWxlLgot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJyb3IgfTsKICAgICB9CiAg
ICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsK
IApAQCAtOTUsOSArOTUsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDU1NHcm91cGluZ1J1bGU6OmRl
bGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpCiAgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycy5zaXplKCkgPT0gbV9ncm91cFJ1bGUtPmNoaWxkUnVsZXMoKS5zaXplKCkpOwogCiAgICAg
aWYgKGluZGV4ID49IG1fZ3JvdXBSdWxlLT5jaGlsZFJ1bGVzKCkuc2l6ZSgpKSB7Ci0gICAgICAg
IC8vIElOREVYX1NJWkVfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBpbmRleCBkb2VzIG5v
dCBjb3JyZXNwb25kIHRvIGEKKyAgICAgICAgLy8gSW5kZXhTaXplRXJyb3I6IFJhaXNlZCBpZiB0
aGUgc3BlY2lmaWVkIGluZGV4IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYQogICAgICAgICAvLyBy
dWxlIGluIHRoZSBtZWRpYSBydWxlIGxpc3QuCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJy
b3IgfTsKICAgICB9CiAKICAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZSBtdXRh
dGlvblNjb3BlKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAK
aW5kZXggMTA5ZmRjMjJkMjQ5MGYwOGY3YzZkZjAzYWU3NmM3MDVmYjU4MTAxZC4uNGJjNDliM2Q5
M2U5NGNkNTE3ZDJiNjNjYTk4YjQ2NTY0ODg5N2Y3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCkBAIC03MjIsNyArNzIyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
Q1NTUHJpbWl0aXZlVmFsdWU6OnNldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQsIGRvdWJsZSkK
ICAgICAvLyBLZWVwaW5nIHZhbHVlcyBpbW11dGFibGUgbWFrZXMgb3B0aW1pemF0aW9ucyBlYXNp
ZXIgYW5kIGFsbG93cyBzaGFyaW5nIG9mIHRoZSBwcmltaXRpdmUgdmFsdWUgb2JqZWN0cy4KICAg
ICAvLyBObyBvdGhlciBlbmdpbmUgc3VwcG9ydHMgbXV0YXRpbmcgc3R5bGUgdGhyb3VnaCB0aGlz
IEFQSS4gQ29tcHV0ZWQgc3R5bGUgaXMgYWx3YXlzIHJlYWQtb25seSBhbnl3YXkuCiAgICAgLy8g
U3VwcG9ydGluZyBzZXR0ZXIgd291bGQgcmVxdWlyZSBtYWtpbmcgcHJpbWl0aXZlIHZhbHVlIGNv
cHktb24td3JpdGUgYW5kIHRha2luZyBjYXJlIG9mIHN0eWxlIGludmFsaWRhdGlvbi4KLSAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiB9CiAKIGRvdWJs
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29udmVyc2lvblRvQ2Fub25pY2FsVW5pdHNTY2FsZUZhY3Rv
cihVbml0VHlwZSB1bml0VHlwZSkKQEAgLTc4MSw3ICs3ODEsNyBAQCBFeGNlcHRpb25PcjxmbG9h
dD4gQ1NTUHJpbWl0aXZlVmFsdWU6OmdldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5
cGUpIGNvbgogewogICAgIGF1dG8gcmVzdWx0ID0gZG91YmxlVmFsdWVJbnRlcm5hbChzdGF0aWNf
Y2FzdDxVbml0VHlwZT4odW5pdFR5cGUpKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+
KHJlc3VsdC52YWx1ZSgpKTsKIH0KIApAQCAtODc0LDcgKzg3NCw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRTdHJpbmdWYWx1ZSh1bnNpZ25lZCBzaG9ydCwgY29u
c3QgU3RyaW5nCiAgICAgLy8gS2VlcGluZyB2YWx1ZXMgaW1tdXRhYmxlIG1ha2VzIG9wdGltaXph
dGlvbnMgZWFzaWVyIGFuZCBhbGxvd3Mgc2hhcmluZyBvZiB0aGUgcHJpbWl0aXZlIHZhbHVlIG9i
amVjdHMuCiAgICAgLy8gTm8gb3RoZXIgZW5naW5lIHN1cHBvcnRzIG11dGF0aW5nIHN0eWxlIHRo
cm91Z2ggdGhpcyBBUEkuIENvbXB1dGVkIHN0eWxlIGlzIGFsd2F5cyByZWFkLW9ubHkgYW55d2F5
LgogICAgIC8vIFN1cHBvcnRpbmcgc2V0dGVyIHdvdWxkIHJlcXVpcmUgbWFraW5nIHByaW1pdGl2
ZSB2YWx1ZSBjb3B5LW9uLXdyaXRlIGFuZCB0YWtpbmcgY2FyZSBvZiBzdHlsZSBpbnZhbGlkYXRp
b24uCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9
OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9Owog
fQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRTdHJpbmdWYWx1
ZSgpIGNvbnN0CkBAIC04OTEsNyArODkxLDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Z2V0U3RyaW5nVmFsdWUoKSBjb25zdAogICAgIGNhc2UgQ1NTX1BST1BFUlRZ
X0lEOgogICAgICAgICByZXR1cm4gU3RyaW5nIHsgcHJvcGVydHlOYW1lKG1fdmFsdWUucHJvcGVy
dHlJRCkuc3RyaW5nKCkgfTsKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKICAgICB9CiB9CiAKQEAgLTkxNiwyMSArOTE2LDIxIEBAIFN0cmlu
ZyBDU1NQcmltaXRpdmVWYWx1ZTo6c3RyaW5nVmFsdWUoKSBjb25zdAogRXhjZXB0aW9uT3I8Q291
bnRlciY+IENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRDb3VudGVyVmFsdWUoKSBjb25zdAogewogICAg
IGlmIChtX3ByaW1pdGl2ZVVuaXRUeXBlICE9IENTU19DT1VOVEVSKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICByZXR1cm4gKm1fdmFsdWUuY291bnRlcjsK
IH0KIAogRXhjZXB0aW9uT3I8UmVjdCY+IENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRSZWN0VmFsdWUo
KSBjb25zdAogewogICAgIGlmIChtX3ByaW1pdGl2ZVVuaXRUeXBlICE9IENTU19SRUNUKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICByZXR1cm4gKm1fdmFs
dWUucmVjdDsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPFJHQkNvbG9yPj4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmdldFJHQkNvbG9yVmFsdWUoKSBjb25zdAogewogICAgIGlmIChtX3ByaW1pdGl2ZVVuaXRU
eXBlICE9IENTU19SR0JDT0xPUikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IHJldHVybiBhIG5ldyBvYmpl
Y3QgZm9yIGVhY2ggaW52b2NhdGlvbi4KICAgICByZXR1cm4gUkdCQ29sb3I6OmNyZWF0ZShtX3Zh
bHVlLmNvbG9yLT5yZ2IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKaW5kZXgg
Y2M1NTk0Mjk0Y2Q1ZTM0M2IwN2JhZGU5MGU2OGIxODNiY2RlNmEwYS4uMWVjYzViYTM3MDg3OTJm
YTYzN2YxNmIxMmNkNzNlMTFlZmIwNGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0
LmNwcApAQCAtMjcxLDE3ICsyNzEsMTcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IENTU1N0eWxl
U2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNpZ24KICAgICBB
U1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1wdHkoKSB8fCBtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnMuc2l6ZSgpID09IG1fY29udGVudHMtPnJ1bGVDb3VudCgpKTsKIAogICAgIGlm
IChpbmRleCA+IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0la
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAg
ICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUgPSBDU1NQYXJzZXI6OnBhcnNlUnVsZShtX2Nv
bnRlbnRzLmdldCgpLnBhcnNlckNvbnRleHQoKSwgbV9jb250ZW50cy5wdHIoKSwgcnVsZVN0cmlu
Zyk7CiAKICAgICBpZiAoIXJ1bGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAg
UnVsZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzLCBSdWxlSW5zZXJ0aW9uLCBpczxT
dHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSA/IGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1lcz4o
cnVsZS5nZXQoKSkgOiBudWxscHRyKTsKIAogICAgIGJvb2wgc3VjY2VzcyA9IG1fY29udGVudHMu
Z2V0KCkud3JhcHBlckluc2VydFJ1bGUocnVsZS5yZWxlYXNlTm9uTnVsbCgpLCBpbmRleCk7CiAg
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JF
UVVFU1RfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0
RXJyb3IgfTsKICAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCiAg
ICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pbnNlcnQoaW5kZXgsIFJlZlB0cjxDU1NS
dWxlPigpKTsKIApAQCAtMjkzLDcgKzI5Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENTU1N0eWxl
U2hlZXQ6OmRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpCiAgICAgQVNTRVJUKG1fY2hpbGRSdWxl
Q1NTT01XcmFwcGVycy5pc0VtcHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUo
KSA9PSBtX2NvbnRlbnRzLT5ydWxlQ291bnQoKSk7CiAKICAgICBpZiAoaW5kZXggPj0gbGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICBSdWxlTXV0YXRpb25T
Y29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwogCiAgICAgbV9jb250ZW50cy0+d3JhcHBlckRlbGV0
ZVJ1bGUoaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJl
YWRPbmx5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5jcHAKaW5k
ZXggMGExM2I0ZDA4NGZjMDIyM2FlNGM5YmUzYzhmNGRiZDkxNzBiNDY0MS4uNTZlY2Y2MTZkMTMz
OTNiNjIzMmVjNDQ3ZmY5ZmJmZTk5NTI4NDllMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0RPTU1hdHJpeFJlYWRPbmx5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0
cml4UmVhZE9ubHkuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9N
TWF0cml4UmVhZE9ubHk6OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogCiAg
ICAgYXV0byBzdHlsZURlY2xhcmF0aW9uID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7CiAgICAgaWYgKENTU1BhcnNlcjo6cGFyc2VWYWx1ZShzdHlsZURlY2xhcmF0aW9uLCBDU1NQ
cm9wZXJ0eVRyYW5zZm9ybSwgc3RyaW5nLCB0cnVlLCBIVE1MU3RhbmRhcmRNb2RlKSA9PSBDU1NQ
YXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZ
TlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAK
ICAgICAvLyBDb252ZXJ0IHRvIFRyYW5zZm9ybU9wZXJhdGlvbnMuIFRoaXMgY2FuIGZhaWwgaWYg
YSBwcm9wZXJ0eSByZXF1aXJlcyBzdHlsZSAoaS5lLiwgcGFyYW0gdXNlcyAnZW1zJyBvciAnZXhz
JykKICAgICBhdXRvIHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CkBAIC0xODIsMTQgKzE4MiwxNCBAQCBFeGNlcHRpb25P
cjx2b2lkPiBET01NYXRyaXhSZWFkT25seTo6c2V0TWF0cml4VmFsdWUoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiAKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CiAgICAgaWYgKCF0
cmFuc2Zvcm1zRm9yVmFsdWUoKnZhbHVlLCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIG9w
ZXJhdGlvbnMpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIG1faXMyRCA9IHRy
dWU7CiAgICAgLy8gQ29udmVydCB0cmFuc2Zvcm0gb3BlcmF0aW9ucyB0byBhIFRyYW5zZm9ybWF0
aW9uTWF0cml4LiBUaGlzIGNhbiBmYWlsIGlmIGEgcGFyYW1ldGVyIGhhcyBhIHBlcmNlbnRhZ2Ug
KCclJykuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgIGZvciAoYXV0byYg
b3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKICAgICAgICAgaWYgKG9wZXJh
dGlvbi0+YXBwbHkobWF0cml4LCBJbnRTaXplKDAsIDApKSkKLSAgICAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKICAgICAgICAgaWYgKG9wZXJhdGlvbi0+aXMzRE9wZXJhdGlvbigpKQog
ICAgICAgICAgICAgbV9pczJEID0gZmFsc2U7CiAgICAgfQpAQCAtMzU1LDcgKzM1NSw3IEBAIEV4
Y2VwdGlvbk9yPFJlZjxGbG9hdDY0QXJyYXk+PiBET01NYXRyaXhSZWFkT25seTo6dG9GbG9hdDY0
QXJyYXkoKSBjb25zdAogRXhjZXB0aW9uT3I8U3RyaW5nPiBET01NYXRyaXhSZWFkT25seTo6dG9T
dHJpbmcoKSBjb25zdAogewogICAgIGlmICghbV9tYXRyaXguY29udGFpbnNPbmx5RmluaXRlVmFs
dWVzKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiwgQVND
SUlMaXRlcmFsKCJNYXRyaXggY29udGFpbnMgbm9uLWZpbml0ZSB2YWx1ZXMiKSB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTWF0
cml4IGNvbnRhaW5zIG5vbi1maW5pdGUgdmFsdWVzIikgfTsKIAogICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKICAgICBpZiAoaXMyRCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvRGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0RlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlLmNwcAppbmRleCA1MGUyNmEzODY0MTliYjli
ZWYyYWRmZDU5MzNjMzc1ZTlmMzQwYWMyLi41YWYwY2RlNGE5ZTA2ODcyMGM4ODhjMWY4ZWE5YTA5
MTBiYzk2MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09N
UHJpbWl0aXZlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01QcmltaXRpdmVWYWx1ZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERl
cHJlY2F0ZWRDU1NPTUNvdW50ZXI+PiBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZTo6Z2V0
Q291bnQKIHsKICAgICBFeGNlcHRpb25PcjxDb3VudGVyJj4gY291bnRlciA9IG1fdmFsdWUtPmdl
dENvdW50ZXJWYWx1ZSgpOwogICAgIGlmIChjb3VudGVyLmhhc0V4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICByZXR1cm4gRGVwcmVjYXRl
ZENTU09NQ291bnRlcjo6Y3JlYXRlKGNvdW50ZXIucmVsZWFzZVJldHVyblZhbHVlKCksIG1fb3du
ZXIuZ2V0KCkpOwogfQogICAgIApAQCAtNzQsNyArNzQsNyBAQCBFeGNlcHRpb25PcjxSZWY8RGVw
cmVjYXRlZENTU09NUmVjdD4+IERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlOjpnZXRSZWN0
VmFsdQogewogICAgIEV4Y2VwdGlvbk9yPFJlY3QmPiByZWN0ID0gbV92YWx1ZS0+Z2V0UmVjdFZh
bHVlKCk7CiAgICAgaWYgKHJlY3QuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHJldHVybiBEZXByZWNhdGVkQ1NTT01SZWN0Ojpj
cmVhdGUocmVjdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgbV9vd25lci5nZXQoKSk7CiB9CiAKQEAg
LTgyLDcgKzgyLDcgQEAgRXhjZXB0aW9uT3I8UmVmPERlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yPj4g
RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU6OmdldFJHQkMKIHsKICAgICBFeGNlcHRpb25P
cjxSZWY8UkdCQ29sb3I+PiBjb2xvciA9IG1fdmFsdWUtPmdldFJHQkNvbG9yVmFsdWUoKTsKICAg
ICBpZiAoY29sb3IuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogICAgIHJldHVybiBEZXByZWNhdGVkQ1NTT01SR0JDb2xvcjo6Y3JlYXRl
KGNvbG9yLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBtX293bmVyLmdldCgpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Gb250RmFjZS5jcHAKaW5kZXggNjJkNzQzOWU0OGYyOTc1NjBiYThkZTY1ZDc5Yzk5NzZiOWM4
NzQ1YS4uNmNmZjdmZTA5YzNiYjY3NTMyOTdiMWQwYjM0MDIwZTBlMGU2ODEzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZhY2UuY3BwCkBAIC02Niw3ICs2Niw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxGb250RmFj
ZT4+IEZvbnRGYWNlOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGZh
CiAgICAgICAgIFsmXSAoU3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKICAg
ICAgICAgICAgIGF1dG8gdmFsdWUgPSBGb250RmFjZTo6cGFyc2VTdHJpbmcoc3RyaW5nLCBDU1NQ
cm9wZXJ0eVNyYyk7CiAgICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUuZ2V0
KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgICAg
ICAgICBDU1NGb250RmFjZTo6YXBwZW5kU291cmNlcyhyZXN1bHQtPmJhY2tpbmcoKSwgZG93bmNh
c3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpLCAmZG9jdW1lbnQsIGZhbHNlKTsKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAgICAgICAgIH0sCkBAIC0xNTIsNzQgKzE1Miw3NCBAQCBSZWZQdHI8Q1NT
VmFsdWU+IEZvbnRGYWNlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUHJv
cGVydHlJRCBwcm9wZQogRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldEZhbWlseShjb25z
dCBTdHJpbmcmIGZhbWlseSkKIHsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiAKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBpZiAo
YXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKGZhbWlseSwgQ1NTUHJvcGVydHlGb250RmFtaWx5KSkK
ICAgICAgICAgc3VjY2VzcyA9IG1fYmFja2luZy0+c2V0RmFtaWxpZXMoKnZhbHVlKTsKICAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIHJldHVybiB7IH07
CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHlsZShjb25zdCBTdHJpbmcm
IHN0eWxlKQogewogICAgIGlmIChzdHlsZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhF
cnJvciB9OwogCiAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhzdHlsZSwgQ1NTUHJv
cGVydHlGb250U3R5bGUpKSB7CiAgICAgICAgIG1fYmFja2luZy0+c2V0U3R5bGUoKnZhbHVlKTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRB
WF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIH0KIAogRXhj
ZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldFdlaWdodChjb25zdCBTdHJpbmcmIHdlaWdodCkK
IHsKICAgICBpZiAod2VpZ2h0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKHdlaWdodCwgQ1NTUHJvcGVydHlG
b250V2VpZ2h0KSkgewogICAgICAgICBtX2JhY2tpbmctPnNldFdlaWdodCgqdmFsdWUpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VS
UiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogfQogCiBFeGNlcHRp
b25Pcjx2b2lkPiBGb250RmFjZTo6c2V0U3RyZXRjaChjb25zdCBTdHJpbmcmIHN0cmV0Y2gpCiB7
CiAgICAgaWYgKHN0cmV0Y2guaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsK
IAogICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VTdHJpbmcoc3RyZXRjaCwgQ1NTUHJvcGVydHlG
b250U3RyZXRjaCkpIHsKICAgICAgICAgbV9iYWNraW5nLT5zZXRTdHJldGNoKCp2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQotICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhf
RVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRVbmljb2RlUmFuZ2UoY29uc3QgU3RyaW5nJiB1bmlj
b2RlUmFuZ2UpCiB7CiAgICAgaWYgKHVuaWNvZGVSYW5nZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTeW50YXhFcnJvciB9OwogCiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgaWYgKGF1
dG8gdmFsdWUgPSBwYXJzZVN0cmluZyh1bmljb2RlUmFuZ2UsIENTU1Byb3BlcnR5VW5pY29kZVJh
bmdlKSkKICAgICAgICAgc3VjY2VzcyA9IG1fYmFja2luZy0+c2V0VW5pY29kZVJhbmdlKCp2YWx1
ZSk7CiAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFY
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBy
ZXR1cm4geyB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0VmFyaWFudChj
b25zdCBTdHJpbmcmIHZhcmlhbnQpCiB7CiAgICAgaWYgKHZhcmlhbnQuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICBhdXRvIHJlc3VsdCA9IENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgdmFyaWFudCwgdHJ1ZSwgSFRNTFN0
YW5kYXJkTW9kZSk7CiAgICAgaWYgKHJlc3VsdCA9PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpF
cnJvcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICAvLyBGSVhNRTogV291bGQg
YmUgbXVjaCBiZXR0ZXIgdG8gc3RhZ2UgdGhlIG5ldyBzZXR0aW5ncyBhbmQgc2V0IHRoZW0gYWxs
IGF0IG9uY2UKICAgICAvLyBpbnN0ZWFkIG9mIHRoaXMgZGFuY2Ugd2hlcmUgd2UgbWFrZSBhIGJh
Y2t1cCBhbmQgcmV2ZXJ0IHRvIGl0IGlmIHNvbWV0aGluZyBmYWlscy4KQEAgLTI2MCw3ICsyNjAs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0VmFyaWFudChjb25zdCBTdHJpbmcm
IHZhcmlhbnQpCiAKICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgbV9iYWNraW5nLT5zZXRW
YXJpYW50U2V0dGluZ3MoYmFja3VwKTsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRB
WF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAg
fQogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTI2OSwxMSArMjY5LDExIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IEZvbnRGYWNlOjpzZXRWYXJpYW50KGNvbnN0IFN0cmluZyYgdmFyaWFudCkKIEV4Y2VwdGlv
bk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRGZWF0dXJlU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBmZWF0
dXJlU2V0dGluZ3MpCiB7CiAgICAgaWYgKGZlYXR1cmVTZXR0aW5ncy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKGZl
YXR1cmVTZXR0aW5ncywgQ1NTUHJvcGVydHlGb250RmVhdHVyZVNldHRpbmdzKTsKICAgICBpZiAo
IXZhbHVlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBtX2JhY2tpbmctPnNldEZl
YXR1cmVTZXR0aW5ncygqdmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC00MjcsNyArNDI3
LDcgQEAgdm9pZCBGb250RmFjZTo6Zm9udFN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwg
Q1NTRm9udEZhY2U6OlN0YXR1cywgQ1NTRm9udEYKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
Q1NTRm9udEZhY2U6OlN0YXR1czo6RmFpbHVyZToKICAgICAgICAgaWYgKG1fcHJvbWlzZSkKLSAg
ICAgICAgICAgIHN0ZDo6ZXhjaGFuZ2UobV9wcm9taXNlLCBzdGQ6Om51bGxvcHQpLT5yZWplY3Qo
TkVUV09SS19FUlIpOworICAgICAgICAgICAgc3RkOjpleGNoYW5nZShtX3Byb21pc2UsIHN0ZDo6
bnVsbG9wdCktPnJlamVjdChOZXR3b3JrRXJyb3IpOwogICAgICAgICBkZXJlZigpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBDU1NGb250RmFjZTo6U3RhdHVzOjpQZW5kaW5nOgpAQCAtNDQ5
LDcgKzQ0OSw3IEBAIHZvaWQgRm9udEZhY2U6OnJlZ2lzdGVyTG9hZGVkKFByb21pc2UmJiBwcm9t
aXNlKQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1l
ZE91dDoKICAgICBjYXNlIENTU0ZvbnRGYWNlOjpTdGF0dXM6OkZhaWx1cmU6Ci0gICAgICAgIHBy
b21pc2UucmVqZWN0KE5FVFdPUktfRVJSKTsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoTmV0d29y
a0Vycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VT
ZXQuY3BwCmluZGV4IDBiNDk2ODUwMzEzNTYyMmU3NjRhOTE0M2JhN2JmNWE1ZjExZTI4NmYuLmZk
OGM1OGMyM2JlMmM2YzYzN2E5YjRiZDNiYmRiMGMwMDgxODMwYWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRGYWNlU2V0LmNwcApAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgRm9udEZhY2VTZXQ6OmxvYWQo
Y29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIExvYWRQcm9taXNlJiYgcHJv
CiAKICAgICBmb3IgKGF1dG8mIGZhY2UgOiBtYXRjaGluZ0ZhY2VzKSB7CiAgICAgICAgIGlmIChm
YWNlLmdldCgpLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkZhaWx1cmUpIHsKLSAg
ICAgICAgICAgIHByb21pc2UucmVqZWN0KE5FVFdPUktfRVJSKTsKKyAgICAgICAgICAgIHByb21p
c2UucmVqZWN0KE5ldHdvcmtFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBGb250RmFjZVNldDo6ZmFjZUZpbmlzaGVk
KENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXR1cykKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChuZXdTdGF0dXMg
PT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6RmFpbHVyZSk7Ci0gICAgICAgICAgICBwZW5kaW5nUHJv
bWlzZS0+cHJvbWlzZS5yZWplY3QoTkVUV09SS19FUlIpOworICAgICAgICAgICAgcGVuZGluZ1By
b21pc2UtPnByb21pc2UucmVqZWN0KE5ldHdvcmtFcnJvcik7CiAgICAgICAgICAgICBwZW5kaW5n
UHJvbWlzZS0+aGFzUmVhY2hlZFRlcm1pbmFsU3RhdGUgPSB0cnVlOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCA4OGNhMmUxOGNhN2U3NTIyOWEwMmI1ZTAy
MTRkNTZkNjAwMTI2OTUwLi40MmZhMWYxOGEyMjU2NzcyZjhiYjNkYWYxNzgwYzUxMjhmNDMzNzJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgKiBkb2N1bWVudC5zdHlsZVNoZWV0c1swXS5tZWRpYS5tZWRpYVRleHQgPSAi
c2NyZWVuIGFuZCByZXNvbHV0aW9uID4gNDBkcGkiIHdpbGwgYmUgb2sgYW5kCiAgKiBlbmFibGVk
LCB3aGlsZQogICogZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0uY3NzUnVsZXNbMF0ubWVkaWEubWVk
aWFUZXh0ID0gInNjcmVlbiBhbmQgcmVzb2x1dGlvbiA+IDQwZHBpIiB3aWxsCi0gKiB0aHJvdyBT
WU5UQVhfRVJSIGV4Y2VwdGlvbi4KKyAqIHRocm93IFN5bnRheEVycm9yIGV4Y2VwdGlvbi4KICAq
LwogICAgIAogUmVmPE1lZGlhUXVlcnlTZXQ+IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIG1lZGlhU3RyaW5nKQpAQCAtMjA0LDcgKzIwNCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IE1lZGlhTGlzdDo6ZGVsZXRlTWVkaXVtKGNvbnN0IFN0cmluZyYgbWVkaXVtKQogCiAgICAgYm9v
bCBzdWNjZXNzID0gbV9tZWRpYVF1ZXJpZXMtPnJlbW92ZShtZWRpdW0pOwogICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKICAgICBpZiAobV9wYXJlbnRT
dHlsZVNoZWV0KQogICAgICAgICBtX3BhcmVudFN0eWxlU2hlZXQtPmRpZE11dGF0ZSgpOwogICAg
IHJldHVybiB7IH07CkBAIC0yMTYsOCArMjE2LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVkaWFM
aXN0OjphcHBlbmRNZWRpdW0oY29uc3QgU3RyaW5nJiBtZWRpdW0pCiAKICAgICBib29sIHN1Y2Nl
c3MgPSBtX21lZGlhUXVlcmllcy0+YWRkKG1lZGl1bSk7CiAgICAgaWYgKCFzdWNjZXNzKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyByZWFsbHkgYmUgSU5WQUxJRF9DSEFSQUNURVJf
RVJSPwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSIH07
CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyByZWFsbHkgYmUgSW52YWxpZENoYXJhY3Rl
ckVycm9yPworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9y
IH07CiAgICAgfQogICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpCiAgICAgICAgIG1fcGFyZW50
U3R5bGVTaGVldC0+ZGlkTXV0YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Q
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDgxZTgxMGJiY2FhNmE0MWVi
OWVmYTIzN2NjNDM2ZGIyNDQxMWJhYzAuLjA4NGNiY2EwNGVjODZjZDZmNWFlNzM2YWY5OWQ0ZTUx
ZWQwM2IzNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0yNDksNyArMjQ5LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJp
bmcmIHByb3AKICAgICBkaWRNdXRhdGUoY2hhbmdlZCA/IFByb3BlcnR5Q2hhbmdlZCA6IE5vQ2hh
bmdlcyk7CiAKICAgICBpZiAoY2hhbmdlZCkgewotICAgICAgICAvLyBDU1MgRE9NIHJlcXVpcmVz
IHJhaXNpbmcgU1lOVEFYX0VSUiBvZiBwYXJzaW5nIGZhaWxlZCwgYnV0IHRoaXMgaXMgdG9vIGRh
bmdlcm91cyBmb3IgY29tcGF0aWJpbGl0eSwKKyAgICAgICAgLy8gQ1NTIERPTSByZXF1aXJlcyBy
YWlzaW5nIFN5bnRheEVycm9yIG9mIHBhcnNpbmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFu
Z2Vyb3VzIGZvciBjb21wYXRpYmlsaXR5LAogICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY+LgogICAgICAgICBtdXRhdGlvblNjb3BlLmVu
cXVldWVNdXRhdGlvblJlY29yZCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01h
dHJpeC5jcHAKaW5kZXggZDkwODhlMGEwZmMyMzBjZDUyZGNjODI1YWMxOWQ5OTE2ZjY5MGJmNi4u
MGM1ZDY5NTBhYjFmNTBjN2M4ZGJjN2Y2YTQyOWVmZDdhMzkzZGZiNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1dlYktpdENTU01hdHJpeC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gV2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykK
IAogICAgIGF1dG8gc3R5bGVEZWNsYXJhdGlvbiA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNy
ZWF0ZSgpOwogICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGVEZWNsYXJhdGlvbiwg
Q1NTUHJvcGVydHlUcmFuc2Zvcm0sIHN0cmluZywgdHJ1ZSwgSFRNTFN0YW5kYXJkTW9kZSkgPT0g
Q1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3IpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCiAgICAgLy8gQ29udmVydCB0byBUcmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNhbiBmYWls
IGlmIGEgcHJvcGVydHkgcmVxdWlyZXMgc3R5bGUgKGkuZS4sIHBhcmFtIHVzZXMgJ2Vtcycgb3Ig
J2V4cycpCiAgICAgYXV0byB2YWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwpAQCAtNzksMTMgKzc5LDEzIEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiAKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CiAgICAgaWYgKCF0
cmFuc2Zvcm1zRm9yVmFsdWUoKnZhbHVlLCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIG9w
ZXJhdGlvbnMpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIC8vIENvbnZlcnQg
dHJhbnNmb3JtIG9wZXJhdGlvbnMgdG8gYSBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4gVGhpcyBjYW4g
ZmFpbCBpZiBhIHBhcmFtZXRlciBoYXMgYSBwZXJjZW50YWdlICgnJScpLgogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeDsKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpKSB7CiAgICAgICAgIGlmIChvcGVyYXRpb24tPmFwcGx5KG1hdHJpeCwg
SW50U2l6ZSgwLCAwKSkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VS
UiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAg
fQogICAgIG1fbWF0cml4ID0gbWF0cml4OwogICAgIHJldHVybiB7IH07CkBAIC0xMDYsNyArMTA2
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFdlYktpdENTU01hdHJpeD4+IFdlYktpdENTU01hdHJpeDo6
aW52ZXJzZSgpIGNvbnN0CiB7CiAgICAgYXV0byBpbnZlcnNlID0gbV9tYXRyaXguaW52ZXJzZSgp
OwogICAgIGlmICghaW52ZXJzZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQ
T1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJv
ciB9OwogICAgIHJldHVybiBjcmVhdGUoaW52ZXJzZS52YWx1ZSgpKTsKIH0KIApAQCAtMjAwLDcg
KzIwMCw3IEBAIFJlZjxXZWJLaXRDU1NNYXRyaXg+IFdlYktpdENTU01hdHJpeDo6c2tld1koZG91
YmxlIGFuZ2xlKSBjb25zdAogRXhjZXB0aW9uT3I8U3RyaW5nPiBXZWJLaXRDU1NNYXRyaXg6OnRv
U3RyaW5nKCkgY29uc3QKIHsKICAgICBpZiAoIW1fbWF0cml4LmNvbnRhaW5zT25seUZpbml0ZVZh
bHVlcygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIsIEFT
Q0lJTGl0ZXJhbCgiTWF0cml4IGNvbnRhaW5zIG5vbi1maW5pdGUgdmFsdWVzIikgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIk1h
dHJpeCBjb250YWlucyBub24tZmluaXRlIHZhbHVlcyIpIH07CiAKICAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CiAgICAgaWYgKG1fbWF0cml4LmlzQWZmaW5lKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcApp
bmRleCBmYWFmNmQ3MGFkNmVhMzUwMTliZjkzZjYwNzg1NGMyMDA1MzVhOGY1Li5kMDE5OGE0ZjQw
NTVhYzEyMTczNTFhMmQ5ZWI1MzNhNDJiNjg3ZDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQXR0ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCkBAIC03NCw3
ICs3NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEF0dHI6OnNldFByZWZpeChjb25zdCBBdG9taWNT
dHJpbmcmIHByZWZpeCkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7
CiAKICAgICBpZiAoKHByZWZpeCA9PSB4bWxuc0F0b20oKSAmJiBuYW1lc3BhY2VVUkkoKSAhPSBY
TUxOU05hbWVzOjp4bWxuc05hbWVzcGFjZVVSSSkgfHwgcXVhbGlmaWVkTmFtZSgpID09IHhtbG5z
QXRvbSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTkFNRVNQQUNFX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTmFtZXNwYWNlRXJyb3IgfTsKIAogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmV3UHJlZml4ID0gcHJlZml4LmlzRW1wdHkoKSA/IG51bGxBdG9tKCkgOiBw
cmVmaXg7CiAgICAgaWYgKG1fZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNw
cAppbmRleCAxMmZkMzQ0OTBjMjIxODhlOGZkNWMwMWEzYWI0NTBhMTM2NDBkNDU5Li5hZTU2ZDY5
ZDBlZDRjMmU2OGJlOWQ5NWYwMWI0YzcwNGM1ZjE1MWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0
YShjb25zdCBTdHJpbmcmIGRhdGEpCiBFeGNlcHRpb25PcjxTdHJpbmc+IENoYXJhY3RlckRhdGE6
OnN1YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBp
ZiAob2Zmc2V0ID4gbGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9T
SVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
IAogICAgIHJldHVybiBtX2RhdGEuc3Vic3RyaW5nKG9mZnNldCwgY291bnQpOwogfQpAQCAtMTIx
LDcgKzEyMSw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcm
IGRhdGEpCiBFeGNlcHRpb25Pcjx2b2lkPiBDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2ln
bmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiBkYXRhKQogewogICAgIGlmIChvZmZzZXQgPiBsZW5n
dGgoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgU3RyaW5nIG5l
d1N0ciA9IG1fZGF0YTsKICAgICBuZXdTdHIuaW5zZXJ0KGRhdGEsIG9mZnNldCk7CkBAIC0xMzYs
NyArMTM2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSh1
bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IENo
YXJhY3RlckRhdGE6OmRlbGV0ZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkK
IHsKICAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXpl
RXJyb3IgfTsKIAogICAgIGNvdW50ID0gc3RkOjptaW4oY291bnQsIGxlbmd0aCgpIC0gb2Zmc2V0
KTsKIApAQCAtMTUzLDcgKzE1Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENoYXJhY3RlckRhdGE6
OmRlbGV0ZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKIEV4Y2VwdGlvbk9y
PHZvaWQ+IENoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICBpZiAob2Zmc2V0ID4gbGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIGNvdW50ID0gc3Rk
OjptaW4oY291bnQsIGxlbmd0aCgpIC0gb2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuY3BwCmluZGV4IGZkODE2ODNiMTM5ODQ1NjU2NjgyNzQzMGFlNTg1YmY2MzZmZmRmOTUu
LjQyMTU4NDBjNGMxODIzYWZlMzIxMDExOTM4ZTQwMmU5NGEzMDZiOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTE5NCwyOCArMTk0LDI4IEBAIHN0YXRpYyBpbmxpbmUg
RXhjZXB0aW9uT3I8dm9pZD4gY2hlY2tBY2NlcHRDaGlsZChDb250YWluZXJOb2RlJiBuZXdQYXJl
bnQsIE5vZGUmCiAgICAgICAgIEFTU0VSVCghbmV3UGFyZW50LmlzRG9jdW1lbnRUeXBlTm9kZSgp
KTsKICAgICAgICAgQVNTRVJUKGlzQ2hpbGRUeXBlQWxsb3dlZChuZXdQYXJlbnQsIG5ld0NoaWxk
KSk7CiAgICAgICAgIGlmIChjb250YWluc0NvbnNpZGVyaW5nSG9zdEVsZW1lbnRzKG5ld0NoaWxk
LCBuZXdQYXJlbnQpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9S
RVFVRVNUX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJl
cXVlc3RFcnJvciB9OwogICAgICAgICBpZiAob3BlcmF0aW9uID09IERvY3VtZW50OjpBY2NlcHRD
aGlsZE9wZXJhdGlvbjo6SW5zZXJ0T3JBZGQgJiYgcmVmQ2hpbGQgJiYgcmVmQ2hpbGQtPnBhcmVu
dE5vZGUoKSAhPSAmbmV3UGFyZW50KQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5P
VF9GT1VORF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVy
cm9yIH07CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgLy8gVGhpcyBzaG91bGQg
bmV2ZXIgaGFwcGVuLCBidXQgYWxzbyBwcm90ZWN0IHJlbGVhc2UgYnVpbGRzIGZyb20gdHJlZSBj
b3JydXB0aW9uLgogICAgIEFTU0VSVCghbmV3Q2hpbGQuaXNQc2V1ZG9FbGVtZW50KCkpOwogICAg
IGlmIChuZXdDaGlsZC5pc1BzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAKICAgICBpZiAoY29udGFpbnNDb25zaWRlcmluZ0hv
c3RFbGVtZW50cyhuZXdDaGlsZCwgbmV3UGFyZW50KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAKICAgICBpZiAob3BlcmF0aW9uID09IERvY3VtZW50
OjpBY2NlcHRDaGlsZE9wZXJhdGlvbjo6SW5zZXJ0T3JBZGQgJiYgcmVmQ2hpbGQgJiYgcmVmQ2hp
bGQtPnBhcmVudE5vZGUoKSAhPSAmbmV3UGFyZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRF
cnJvciB9OwogCiAgICAgaWYgKGlzPERvY3VtZW50PihuZXdQYXJlbnQpKSB7CiAgICAgICAgIGlm
ICghZG93bmNhc3Q8RG9jdW1lbnQ+KG5ld1BhcmVudCkuY2FuQWNjZXB0Q2hpbGQobmV3Q2hpbGQs
IHJlZkNoaWxkLCBvcGVyYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJ
RVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhp
ZXJhcmNoeVJlcXVlc3RFcnJvciB9OwogICAgIH0gZWxzZSBpZiAoIWlzQ2hpbGRUeXBlQWxsb3dl
ZChuZXdQYXJlbnQsIG5ld0NoaWxkKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJB
UkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5
UmVxdWVzdEVycm9yIH07CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMjI1LDcgKzIyNSw3IEBA
IHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gY2hlY2tBY2NlcHRDaGlsZEd1YXJhbnRl
ZWROb2RlVHlwZXMoQ29udGFpbmVyTm9kCiAgICAgQVNTRVJUKCFuZXdQYXJlbnQuaXNEb2N1bWVu
dFR5cGVOb2RlKCkpOwogICAgIEFTU0VSVChpc0NoaWxkVHlwZUFsbG93ZWQobmV3UGFyZW50LCBu
ZXdDaGlsZCkpOwogICAgIGlmIChuZXdDaGlsZC5jb250YWlucygmbmV3UGFyZW50KSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgcmV0dXJuIHsg
fTsKIH0KIApAQCAtNDEzLDkgKzQxMyw5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENvbnRhaW5lck5v
ZGU6OnJlcGxhY2VDaGlsZChOb2RlJiBuZXdDaGlsZCwgTm9kZSYgb2xkQ2hpbGQpCiAgICAgaWYg
KHZhbGlkaXR5UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdmFsaWRpdHlS
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgLy8gTk9UX0ZPVU5EX0VSUjogUmFpc2Vk
IGlmIG9sZENoaWxkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS4KKyAgICAvLyBOb3RGb3Vu
ZEVycm9yOiBSYWlzZWQgaWYgb2xkQ2hpbGQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlLgog
ICAgIGlmIChvbGRDaGlsZC5wYXJlbnROb2RlKCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
dEZvdW5kRXJyb3IgfTsKIAogICAgIFJlZlB0cjxOb2RlPiByZWZDaGlsZCA9IG9sZENoaWxkLm5l
eHRTaWJsaW5nKCk7CiAgICAgaWYgKHJlZkNoaWxkLmdldCgpID09ICZuZXdDaGlsZCkKQEAgLTUy
NSw5ICs1MjUsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDb250YWluZXJOb2RlOjpyZW1vdmVDaGls
ZChOb2RlJiBvbGRDaGlsZCkKIAogICAgIFJlZjxDb250YWluZXJOb2RlPiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsKIAotICAgIC8vIE5PVF9GT1VORF9FUlI6IFJhaXNlZCBpZiBvbGRDaGlsZCBpcyBu
b3QgYSBjaGlsZCBvZiB0aGlzIG5vZGUuCisgICAgLy8gTm90Rm91bmRFcnJvcjogUmFpc2VkIGlm
IG9sZENoaWxkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS4KICAgICBpZiAob2xkQ2hpbGQu
cGFyZW50Tm9kZSgpICE9IHRoaXMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9V
TkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAK
ICAgICBSZWY8Tm9kZT4gY2hpbGQob2xkQ2hpbGQpOwogCkBAIC01MzUsNyArNTM1LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGQoTm9kZSYgb2xkQ2hpbGQp
CiAKICAgICAvLyBNdXRhdGlvbiBldmVudHMgaW4gd2lsbFJlbW92ZUNoaWxkIG1pZ2h0IGhhdmUg
bW92ZWQgdGhpcyBjaGlsZCBpbnRvIGEgZGlmZmVyZW50IHBhcmVudC4KICAgICBpZiAoY2hpbGQt
PnBhcmVudE5vZGUoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZP
VU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9Owog
CiAgICAgewogICAgICAgICBXaWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlIHN1
c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRhdGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRE
T01TdHJpbmdNYXAuY3BwCmluZGV4IGE0MzkxOTBiNTI3YTQ5ZmEzNTc1MjE3ODY0NjViNDAxYTM5
YmZmZjMuLmYyZDg0MjA3Yjk3YTMzNjQ5NTRkNzMwYTEwYjQ4OGUzZTM4M2M2NDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKQEAgLTIxOSw3ICsyMTksNyBA
QCBTdHJpbmcgRGF0YXNldERPTVN0cmluZ01hcDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IERhdGFzZXRET01TdHJpbmdNYXA6OnNl
dE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgaWYgKCFpc1ZhbGlkUHJvcGVydHlOYW1lKG5hbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJy
b3IgfTsKICAgICByZXR1cm4gbV9lbGVtZW50LnNldEF0dHJpYnV0ZShjb252ZXJ0UHJvcGVydHlO
YW1lVG9BdHRyaWJ1dGVOYW1lKG5hbWUpLCB2YWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IDdhMmUyMDdjY2NmYzNlN2EzMzY1ZWRmMGNlN2Y0NzdjZDdjOGRhNmEuLjY3YjM2
YThiMzNlMzdmNWM3MzIwYjJlOWZjNjI0NzFkNDEyYjdmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtNzM5LDcgKzczOSw3IEBAIEhUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50OjppbWFn
ZUVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lKSBjCiBFeGNlcHRp
b25PcjxTZWxlY3RvclF1ZXJ5Jj4gRG9jdW1lbnQ6OnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoY29u
c3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZykKIHsKICAgICBpZiAoc2VsZWN0b3JTdHJpbmcuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBpZiAoIW1fc2VsZWN0b3JR
dWVyeUNhY2hlKQogICAgICAgICBtX3NlbGVjdG9yUXVlcnlDYWNoZSA9IHN0ZDo6bWFrZV91bmlx
dWU8U2VsZWN0b3JRdWVyeUNhY2hlPigpOwogICAgIHJldHVybiBtX3NlbGVjdG9yUXVlcnlDYWNo
ZS0+YWRkKHNlbGVjdG9yU3RyaW5nLCAqdGhpcyk7CkBAIC04NzQsNyArODc0LDcgQEAgc3RhdGlj
IEV4Y2VwdGlvbk9yPFJlZjxFbGVtZW50Pj4gY3JlYXRlSFRNTEVsZW1lbnRXaXRoTmFtZVZhbGlk
YXRpb24oRG9jdW1lbnQmIGQKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoIWlzVmFsaWRIVE1M
RWxlbWVudE5hbWUobmFtZSkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9D
SEFSQUNURVJfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQ2hhcmFj
dGVyRXJyb3IgfTsKIAogICAgIHJldHVybiBSZWY8RWxlbWVudD4geyBjcmVhdGVVcGdyYWRlQ2Fu
ZGlkYXRlRWxlbWVudChkb2N1bWVudCwgbmFtZSkgfTsKIH0KQEAgLTg4OCw3ICs4ODgsNyBAQCBF
eGNlcHRpb25PcjxSZWY8RWxlbWVudD4+IERvY3VtZW50OjpjcmVhdGVFbGVtZW50Rm9yQmluZGlu
Z3MoY29uc3QgQXRvbWljU3RyaW5nJgogICAgICAgICByZXR1cm4gY3JlYXRlSFRNTEVsZW1lbnRX
aXRoTmFtZVZhbGlkYXRpb24oKnRoaXMsIG5hbWUpOwogCiAgICAgaWYgKCFpc1ZhbGlkTmFtZShu
YW1lKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAK
ICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tKCksIG5hbWUs
IG51bGxBdG9tKCkpLCBmYWxzZSk7CiB9CkBAIC05MTEsMTcgKzkxMSwxNyBAQCBSZWY8Q29tbWVu
dD4gRG9jdW1lbnQ6OmNyZWF0ZUNvbW1lbnQoY29uc3QgU3RyaW5nJiBkYXRhKQogRXhjZXB0aW9u
T3I8UmVmPENEQVRBU2VjdGlvbj4+IERvY3VtZW50OjpjcmVhdGVDREFUQVNlY3Rpb24oY29uc3Qg
U3RyaW5nJiBkYXRhKQogewogICAgIGlmIChpc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIENEQVRBU2VjdGlvbjo6Y3Jl
YXRlKCp0aGlzLCBkYXRhKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPFByb2Nlc3NpbmdJbnN0cnVj
dGlvbj4+IERvY3VtZW50OjpjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgU3RyaW5n
JiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICBpZiAoIWlzVmFsaWROYW1lKHRh
cmdldCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9Owog
CiAgICAgaWYgKGRhdGEuY29udGFpbnMoIj8+IikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRDaGFyYWN0ZXJFcnJvciB9OwogCiAgICAgcmV0dXJuIFByb2Nlc3NpbmdJbnN0cnVjdGlv
bjo6Y3JlYXRlKCp0aGlzLCB0YXJnZXQsIGRhdGEpOwogfQpAQCAtOTYwLDcgKzk2MCw3IEBAIEV4
Y2VwdGlvbk9yPFJlZjxOb2RlPj4gRG9jdW1lbnQ6OmltcG9ydE5vZGUoTm9kZSYgbm9kZVRvSW1w
b3J0LCBib29sIGRlZXApCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RT
dXBwb3J0ZWRFcnJvciB9OwogfQogCiAKQEAgLTk3MCw3ICs5NzAsNyBAQCBFeGNlcHRpb25PcjxS
ZWY8Tm9kZT4+IERvY3VtZW50OjphZG9wdE5vZGUoTm9kZSYgc291cmNlKQogCiAgICAgc3dpdGNo
IChzb3VyY2Uubm9kZVR5cGUoKSkgewogICAgIGNhc2UgRE9DVU1FTlRfTk9ERToKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogICAgIGNhc2UgQVRUUklCVVRFX05PREU6
IHsKICAgICAgICAgYXV0byYgYXR0ciA9IGRvd25jYXN0PEF0dHI+KHNvdXJjZSk7CiAgICAgICAg
IGlmIChhdXRvKiBlbGVtZW50ID0gYXR0ci5vd25lckVsZW1lbnQoKSkgewpAQCAtOTgzLDEyICs5
ODMsMTIgQEAgRXhjZXB0aW9uT3I8UmVmPE5vZGU+PiBEb2N1bWVudDo6YWRvcHROb2RlKE5vZGUm
IHNvdXJjZSkKICAgICBkZWZhdWx0OgogICAgICAgICBpZiAoc291cmNlLmlzU2hhZG93Um9vdCgp
KSB7CiAgICAgICAgICAgICAvLyBTaGFkb3dSb290IGNhbm5vdCBkaXNjb25uZWN0IGl0c2VsZiBm
cm9tIHRoZSBob3N0IG5vZGUuCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFS
Q0hZX1JFUVVFU1RfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFy
Y2h5UmVxdWVzdEVycm9yIH07CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZU93
bmVyRWxlbWVudD4oc291cmNlKSkgewogICAgICAgICAgICAgYXV0byYgZnJhbWVPd25lckVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KHNvdXJjZSk7CiAgICAgICAgICAg
ICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT50cmVlKCkuaXNEZXNjZW5kYW50T2YoZnJhbWVPd25l
ckVsZW1lbnQuY29udGVudEZyYW1lKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBISUVSQVJDSFlfUkVRVUVTVF9FUlIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgICAgIH0KICAgICAgICAgYXV0
byByZXN1bHQgPSBzb3VyY2UucmVtb3ZlKCk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCkBAIC0xMTk1LDcgKzExOTUsNyBAQCBFeGNlcHRpb25PcjxSZWY8RWxlbWVudD4+IERv
Y3VtZW50OjpjcmVhdGVFbGVtZW50TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhYwogICAg
ICAgICByZXR1cm4gcGFyc2VSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIFF1YWxpZmll
ZE5hbWUgcGFyc2VkTmFtZSB7IHBhcnNlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIH07CiAg
ICAgaWYgKCFoYXNWYWxpZE5hbWVzcGFjZUZvckVsZW1lbnRzKHBhcnNlZE5hbWUpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTkFNRVNQQUNFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTmFtZXNwYWNlRXJyb3IgfTsKIAogICAgIGlmIChwYXJzZWROYW1lLm5hbWVzcGFj
ZVVSSSgpID09IHhodG1sTmFtZXNwYWNlVVJJKQogICAgICAgICByZXR1cm4gY3JlYXRlSFRNTEVs
ZW1lbnRXaXRoTmFtZVZhbGlkYXRpb24oKnRoaXMsIHBhcnNlZE5hbWUpOwpAQCAtMTM1Miw3ICsx
MzUyLDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29udGVudExhbmd1YWdlKGNvbnN0IFN0cmluZyYg
bGFuZ3VhZ2UpCiBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6c2V0WE1MVmVyc2lvbihjb25z
dCBTdHJpbmcmIHZlcnNpb24pCiB7CiAgICAgaWYgKCFYTUxEb2N1bWVudFBhcnNlcjo6c3VwcG9y
dHNYTUxWZXJzaW9uKHZlcnNpb24pKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NV
UFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVy
cm9yIH07CiAKICAgICBtX3htbFZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHJldHVybiB7IH07CkBA
IC0yNTA0LDcgKzI1MDQsNyBAQCBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIERvY3VtZW50Ojpz
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKSBjb25zdAogRXhjZXB0aW9uT3I8UmVmUHRyPERPTVdp
bmRvdz4+IERvY3VtZW50OjpvcGVuRm9yQmluZGluZ3MoRE9NV2luZG93JiBhY3RpdmVXaW5kb3cs
IERPTVdpbmRvdyYgZmlyc3RXaW5kb3csIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZmVhdHVyZXMpCiB7CiAgICAgaWYgKCFtX2RvbVdp
bmRvdykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBy
ZXR1cm4gbV9kb21XaW5kb3ctPm9wZW4oYWN0aXZlV2luZG93LCBmaXJzdFdpbmRvdywgdXJsLCBu
YW1lLCBmZWF0dXJlcyk7CiB9CkBAIC0yNTEzLDcgKzI1MTMsNyBAQCBFeGNlcHRpb25PcjxSZWZQ
dHI8RE9NV2luZG93Pj4gRG9jdW1lbnQ6Om9wZW5Gb3JCaW5kaW5ncyhET01XaW5kb3cmIGFjdGl2
ZVdpbmRvdwogRXhjZXB0aW9uT3I8RG9jdW1lbnQmPiBEb2N1bWVudDo6b3BlbkZvckJpbmRpbmdz
KERvY3VtZW50KiByZXNwb25zaWJsZURvY3VtZW50LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKQogewogICAgIGlmICghaXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gdGhy
b3cgaWYgImRvY3VtZW50J3MgdGhyb3ctb24tZHluYW1pYy1tYXJrdXAtaW5zZXJ0aW9uIGNvdW50
ZXIgaXMgZ3JlYXRlciB0aGFuIDAiLgogCkBAIC0yNjE0LDE0ICsyNjE0LDE0IEBAIEhUTUxFbGVt
ZW50KiBEb2N1bWVudDo6Ym9keU9yRnJhbWVzZXQoKSBjb25zdAogRXhjZXB0aW9uT3I8dm9pZD4g
RG9jdW1lbnQ6OnNldEJvZHlPckZyYW1lc2V0KFJlZlB0cjxIVE1MRWxlbWVudD4mJiBuZXdCb2R5
KQogewogICAgIGlmICghaXM8SFRNTEJvZHlFbGVtZW50PihuZXdCb2R5LmdldCgpKSAmJiAhaXM8
SFRNTEZyYW1lU2V0RWxlbWVudD4obmV3Qm9keS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBISUVSQVJDSFlfUkVRVUVTVF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9OwogCiAgICAgYXV0byogY3VycmVudEJvZHkgPSBi
b2R5T3JGcmFtZXNldCgpOwogICAgIGlmIChuZXdCb2R5ID09IGN1cnJlbnRCb2R5KQogICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgaWYgKCFtX2RvY3VtZW50RWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAKICAgICBpZiAoY3VycmVudEJv
ZHkpCiAgICAgICAgIHJldHVybiBtX2RvY3VtZW50RWxlbWVudC0+cmVwbGFjZUNoaWxkKCpuZXdC
b2R5LCAqY3VycmVudEJvZHkpOwpAQCAtMjY1MCw3ICsyNjUwLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gRG9jdW1lbnQ6OmNsb3NlRm9yQmluZGluZ3MoKQogICAgIC8vICAgICAgICBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNkb20tZG9jdW1lbnQtY2xv
c2UKIAogICAgIGlmICghaXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gdGhyb3cg
aWYgImRvY3VtZW50J3MgdGhyb3ctb24tZHluYW1pYy1tYXJrdXAtaW5zZXJ0aW9uIGNvdW50ZXIg
aXMgZ3JlYXRlciB0aGFuIDAiLgogCkBAIC0yODc1LDcgKzI4NzUsNyBAQCB2b2lkIERvY3VtZW50
Ojp3cml0ZShEb2N1bWVudCogcmVzcG9uc2libGVEb2N1bWVudCwgU2VnbWVudGVkU3RyaW5nJiYg
dGV4dCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IERvY3VtZW50Ojp3cml0ZShEb2N1bWVudCogcmVzcG9u
c2libGVEb2N1bWVudCwgVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQogewogICAgIGlmICghaXNI
VE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gdGhyb3cgaWYgImRvY3VtZW50J3MgdGhy
b3ctb24tZHluYW1pYy1tYXJrdXAtaW5zZXJ0aW9uIGNvdW50ZXIgaXMgZ3JlYXRlciB0aGFuIDAi
LgogCkBAIC0yODkxLDcgKzI4OTEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6d3Jp
dGUoRG9jdW1lbnQqIHJlc3BvbnNpYmxlRG9jdW1lbnQsIFZlY3RvcjxTdHJpbmc+JgogRXhjZXB0
aW9uT3I8dm9pZD4gRG9jdW1lbnQ6OndyaXRlbG4oRG9jdW1lbnQqIHJlc3BvbnNpYmxlRG9jdW1l
bnQsIFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKIHsKICAgICBpZiAoIWlzSFRNTERvY3VtZW50
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBhbHNvIHRocm93IGlmICJkb2N1bWVudCdzIHRocm93LW9uLWR5bmFt
aWMtbWFya3VwLWluc2VydGlvbiBjb3VudGVyIGlzIGdyZWF0ZXIgdGhhbiAwIi4KIApAQCAtNDI5
Miw3ICs0MjkyLDcgQEAgRXhjZXB0aW9uT3I8UmVmPEV2ZW50Pj4gRG9jdW1lbnQ6OmNyZWF0ZUV2
ZW50KGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICAgICAgcmV0dXJuIFJlZjxFdmVudD4geyBEZXZp
Y2VPcmllbnRhdGlvbkV2ZW50OjpjcmVhdGVGb3JCaW5kaW5ncygpIH07CiAjZW5kaWYKIAotICAg
IHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiBib29sIERvY3VtZW50OjpoYXNMaXN0
ZW5lclR5cGVGb3JFdmVudFR5cGUoUGxhdGZvcm1FdmVudDo6VHlwZSBldmVudFR5cGUpIGNvbnN0
CkBAIC00Mzg4LDcgKzQzODgsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IERvY3VtZW50Ojpjb29r
aWUoKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAoIXNlY3VyaXR5T3JpZ2lu
KCkuY2FuQWNjZXNzQ29va2llcygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJ
VFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAK
ICAgICBVUkwgY29va2llVVJMID0gdGhpcy0+Y29va2llVVJMKCk7CiAgICAgaWYgKGNvb2tpZVVS
TC5pc0VtcHR5KCkpCkBAIC00NDA5LDcgKzQ0MDksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1
bWVudDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNzQ29va2llcygpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICBVUkwgY29va2llVVJMID0gdGhpcy0+Y29v
a2llVVJMKCk7CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCkBAIC00NDQwLDcgKzQ0NDAs
NyBAQCBTdHJpbmcgRG9jdW1lbnQ6OmRvbWFpbigpIGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBE
b2N1bWVudDo6c2V0RG9tYWluKGNvbnN0IFN0cmluZyYgbmV3RG9tYWluKQogewogICAgIGlmIChT
Y2hlbWVSZWdpc3RyeTo6aXNEb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKHNl
Y3VyaXR5T3JpZ2luKCkucHJvdG9jb2woKSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
RUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3Ig
fTsKIAogICAgIC8vIEJvdGggTlMgYW5kIElFIHNwZWNpZnkgdGhhdCBjaGFuZ2luZyB0aGUgZG9t
YWluIGlzIG9ubHkgYWxsb3dlZCB3aGVuCiAgICAgLy8gdGhlIG5ldyBkb21haW4gaXMgYSBzdWZm
aXggb2YgdGhlIG9sZCBkb21haW4uCkBAIC00NDY0LDE3ICs0NDY0LDE3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IERvY3VtZW50OjpzZXREb21haW4oY29uc3QgU3RyaW5nJiBuZXdEb21haW4pCiAgICAg
dW5zaWduZWQgb2xkTGVuZ3RoID0gb2xkRG9tYWluLmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIG5l
d0xlbmd0aCA9IG5ld0RvbWFpbi5sZW5ndGgoKTsKICAgICBpZiAobmV3TGVuZ3RoID49IG9sZExl
bmd0aCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgYXV0byBpcEFkZHJl
c3NTZXR0aW5nID0gc2V0dGluZ3MoKS50cmVhdElQQWRkcmVzc0FzRG9tYWluKCkgPyBPcmlnaW5B
Y2Nlc3NFbnRyeTo6VHJlYXRJUEFkZHJlc3NBc0RvbWFpbiA6IE9yaWdpbkFjY2Vzc0VudHJ5OjpU
cmVhdElQQWRkcmVzc0FzSVBBZGRyZXNzOwogICAgIE9yaWdpbkFjY2Vzc0VudHJ5IGFjY2Vzc0Vu
dHJ5IHsgc2VjdXJpdHlPcmlnaW4oKS5wcm90b2NvbCgpLCBuZXdEb21haW4sIE9yaWdpbkFjY2Vz
c0VudHJ5OjpBbGxvd1N1YmRvbWFpbnMsIGlwQWRkcmVzc1NldHRpbmcgfTsKICAgICBpZiAoIWFj
Y2Vzc0VudHJ5Lm1hdGNoZXNPcmlnaW4oc2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIGlmIChvbGREb21haW5bb2xkTGVuZ3RoIC0gbmV3TGVu
Z3RoIC0gMV0gIT0gJy4nKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAgICAgaWYg
KFN0cmluZ1ZpZXcgeyBvbGREb21haW4gfS5zdWJzdHJpbmcob2xkTGVuZ3RoIC0gbmV3TGVuZ3Ro
KSAhPSBuZXdEb21haW4pCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIHNl
Y3VyaXR5T3JpZ2luKCkuc2V0RG9tYWluRnJvbURPTShuZXdEb21haW4pOwogICAgIHJldHVybiB7
IH07CkBAIC00NTgyLDcgKzQ1ODIsNyBAQCBFeGNlcHRpb25PcjxzdGQ6OnBhaXI8QXRvbWljU3Ry
aW5nLCBBdG9taWNTdHJpbmc+PiBEb2N1bWVudDo6cGFyc2VRdWFsaWZpZWROYW1lKAogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHF1YWxpZmllZE5hbWUubGVuZ3RoKCk7CiAKICAgICBpZiAoIWxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKICAg
ICBib29sIG5hbWVTdGFydCA9IHRydWU7CiAgICAgYm9vbCBzYXdDb2xvbiA9IGZhbHNlOwpAQCAt
NDU5MywxNyArNDU5MywxNyBAQCBFeGNlcHRpb25PcjxzdGQ6OnBhaXI8QXRvbWljU3RyaW5nLCBB
dG9taWNTdHJpbmc+PiBEb2N1bWVudDo6cGFyc2VRdWFsaWZpZWROYW1lKAogICAgICAgICBVMTZf
TkVYVChxdWFsaWZpZWROYW1lLCBpLCBsZW5ndGgsIGMpCiAgICAgICAgIGlmIChjID09ICc6Jykg
ewogICAgICAgICAgICAgaWYgKHNhd0NvbG9uKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAgICAgICAgICAgICBuYW1lU3Rh
cnQgPSB0cnVlOwogICAgICAgICAgICAgc2F3Q29sb24gPSB0cnVlOwogICAgICAgICAgICAgY29s
b25Qb3NpdGlvbiA9IGkgLSAxOwogICAgICAgICB9IGVsc2UgaWYgKG5hbWVTdGFydCkgewogICAg
ICAgICAgICAgaWYgKCFpc1ZhbGlkTmFtZVN0YXJ0KGMpKQotICAgICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgfTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAgICAgICAgICAgICBu
YW1lU3RhcnQgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghaXNW
YWxpZE5hbWVQYXJ0KGMpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0NIQVJBQ1RFUl9FUlIgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZENoYXJhY3RlckVycm9yIH07CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ2MTEsNyAr
NDYxMSw3IEBAIEV4Y2VwdGlvbk9yPHN0ZDo6cGFpcjxBdG9taWNTdHJpbmcsIEF0b21pY1N0cmlu
Zz4+IERvY3VtZW50OjpwYXJzZVF1YWxpZmllZE5hbWUoCiAgICAgICAgIHJldHVybiBzdGQ6OnBh
aXI8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IHsgeyB9LCB7IHF1YWxpZmllZE5hbWUgfSB9
OwogCiAgICAgaWYgKCFjb2xvblBvc2l0aW9uIHx8IGxlbmd0aCAtIGNvbG9uUG9zaXRpb24gPD0g
MSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKICAg
ICByZXR1cm4gc3RkOjpwYWlyPEF0b21pY1N0cmluZywgQXRvbWljU3RyaW5nPiB7IFN0cmluZ1Zp
ZXcgeyBxdWFsaWZpZWROYW1lIH0uc3Vic3RyaW5nKDAsIGNvbG9uUG9zaXRpb24pLnRvQXRvbWlj
U3RyaW5nKCksIFN0cmluZ1ZpZXcgeyBxdWFsaWZpZWROYW1lIH0uc3Vic3RyaW5nKGNvbG9uUG9z
aXRpb24gKyAxKS50b0F0b21pY1N0cmluZygpIH07CiB9CkBAIC01MDYwLDcgKzUwNjAsNyBAQCBF
eGNlcHRpb25PcjxSZWY8QXR0cj4+IERvY3VtZW50OjpjcmVhdGVBdHRyaWJ1dGVOUyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZQogICAgICAgICByZXR1cm4gcGFyc2VSZXN1bHQucmVsZWFz
ZUV4Y2VwdGlvbigpOwogICAgIFF1YWxpZmllZE5hbWUgcGFyc2VkTmFtZSB7IHBhcnNlUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIH07CiAgICAgaWYgKCFzaG91bGRJZ25vcmVOYW1lc3BhY2VD
aGVja3MgJiYgIWhhc1ZhbGlkTmFtZXNwYWNlRm9yQXR0cmlidXRlcyhwYXJzZWROYW1lKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5BTUVTUEFDRV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5hbWVzcGFjZUVycm9yIH07CiAgICAgcmV0dXJuIEF0dHI6OmNyZWF0ZSgq
dGhpcywgcGFyc2VkTmFtZSwgZW1wdHlTdHJpbmcoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAppbmRleCAyMDk3ZDcyNDBhZmI5ZTc1YTEzODkzOWRkMjRiMTE0NTQyNjJkMzgzLi44ZWNlOWRl
NDViN2U2ZWY1Zjk5NzNlODllN2FhMWIxY2Y5MjZlNDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CkBAIC0xMjI4LDcgKzEyMjgsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmdldEF0
dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjbwogRXhjZXB0aW9u
T3I8dm9pZD4gRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxO
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIGlmICghRG9jdW1lbnQ6Omlz
VmFsaWROYW1lKGxvY2FsTmFtZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElE
X0NIQVJBQ1RFUl9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFy
YWN0ZXJFcnJvciB9OwogCiAgICAgc3luY2hyb25pemVBdHRyaWJ1dGUobG9jYWxOYW1lKTsKICAg
ICBhdXRvIGNhc2VBZGp1c3RlZExvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Uo
KnRoaXMpID8gbG9jYWxOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgOiBsb2NhbE5hbWU7
CkBAIC0xODI0LDkgKzE4MjQsOSBAQCBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dS
b290KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiBFeGNlcHRpb25PcjxTaGFkb3dSb290Jj4gRWxl
bWVudDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0KQogewogICAgIGlm
ICghY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdCgqdGhpcykpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICBpZiAoc2hhZG93Um9vdCgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgaWYgKGluaXQubW9kZSA9PSBTaGFkb3dS
b290TW9kZTo6VXNlckFnZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9y
IH07CiAgICAgYXV0byBzaGFkb3cgPSBTaGFkb3dSb290OjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5p
dC5tb2RlKTsKQEAgLTIxNDIsMTAgKzIxNDIsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEF0dHI+
PiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHImIGF0dHJOb2RlKQogICAgIGlmIChvbGRB
dHRyTm9kZS5nZXQoKSA9PSAmYXR0ck5vZGUpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG9sZEF0
dHJOb2RlKTsKIAotICAgIC8vIElOVVNFX0FUVFJJQlVURV9FUlI6IFJhaXNlZCBpZiBub2RlIGlz
IGFuIEF0dHIgdGhhdCBpcyBhbHJlYWR5IGFuIGF0dHJpYnV0ZSBvZiBhbm90aGVyIEVsZW1lbnQg
b2JqZWN0LgorICAgIC8vIEluVXNlQXR0cmlidXRlRXJyb3I6IFJhaXNlZCBpZiBub2RlIGlzIGFu
IEF0dHIgdGhhdCBpcyBhbHJlYWR5IGFuIGF0dHJpYnV0ZSBvZiBhbm90aGVyIEVsZW1lbnQgb2Jq
ZWN0LgogICAgIC8vIFRoZSBET00gdXNlciBtdXN0IGV4cGxpY2l0bHkgY2xvbmUgQXR0ciBub2Rl
cyB0byByZS11c2UgdGhlbSBpbiBvdGhlciBlbGVtZW50cy4KICAgICBpZiAoYXR0ck5vZGUub3du
ZXJFbGVtZW50KCkgJiYgYXR0ck5vZGUub3duZXJFbGVtZW50KCkgIT0gdGhpcykKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVVNFX0FUVFJJQlVURV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEluVXNlQXR0cmlidXRlRXJyb3IgfTsKIAogICAgIHsKICAgICBOb0V2ZW50
RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwpAQCAtMjE4OSwxMCArMjE4
OSwxMCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8QXR0cj4+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5v
ZGVOUyhBdHRyJiBhdHRyTm9kZSkKICAgICBpZiAob2xkQXR0ck5vZGUuZ2V0KCkgPT0gJmF0dHJO
b2RlKQogICAgICAgICByZXR1cm4gV1RGTW92ZShvbGRBdHRyTm9kZSk7CiAKLSAgICAvLyBJTlVT
RV9BVFRSSUJVVEVfRVJSOiBSYWlzZWQgaWYgbm9kZSBpcyBhbiBBdHRyIHRoYXQgaXMgYWxyZWFk
eSBhbiBhdHRyaWJ1dGUgb2YgYW5vdGhlciBFbGVtZW50IG9iamVjdC4KKyAgICAvLyBJblVzZUF0
dHJpYnV0ZUVycm9yOiBSYWlzZWQgaWYgbm9kZSBpcyBhbiBBdHRyIHRoYXQgaXMgYWxyZWFkeSBh
biBhdHRyaWJ1dGUgb2YgYW5vdGhlciBFbGVtZW50IG9iamVjdC4KICAgICAvLyBUaGUgRE9NIHVz
ZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lIEF0dHIgbm9kZXMgdG8gcmUtdXNlIHRoZW0gaW4gb3Ro
ZXIgZWxlbWVudHMuCiAgICAgaWYgKGF0dHJOb2RlLm93bmVyRWxlbWVudCgpICYmIGF0dHJOb2Rl
Lm93bmVyRWxlbWVudCgpICE9IHRoaXMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlVT
RV9BVFRSSUJVVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJblVzZUF0dHJp
YnV0ZUVycm9yIH07CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgCkBAIC0yMjI0LDE4
ICsyMjI0LDE4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxBdHRyPj4gRWxlbWVudDo6c2V0QXR0cmli
dXRlTm9kZU5TKEF0dHImIGF0dHJOb2RlKQogRXhjZXB0aW9uT3I8UmVmPEF0dHI+PiBFbGVtZW50
OjpyZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHImIGF0dHIpCiB7CiAgICAgaWYgKGF0dHIub3duZXJF
bGVtZW50KCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAogICAg
IEFTU0VSVCgmZG9jdW1lbnQoKSA9PSAmYXR0ci5kb2N1bWVudCgpKTsKIAogICAgIHN5bmNocm9u
aXplQWxsQXR0cmlidXRlcygpOwogCiAgICAgaWYgKCFtX2VsZW1lbnREYXRhKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAgYXV0byBleGlzdGluZ0F0dHJpYnV0ZUluZGV4
ID0gbV9lbGVtZW50RGF0YS0+ZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGF0dHIucXVhbGlmaWVk
TmFtZSgpKTsKICAgICBpZiAoZXhpc3RpbmdBdHRyaWJ1dGVJbmRleCA9PSBFbGVtZW50RGF0YTo6
YXR0cmlidXRlTm90Rm91bmQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAKICAg
ICBSZWY8QXR0cj4gb2xkQXR0ck5vZGUgeyBhdHRyIH07CiAKQEAgLTIyNTIsNyArMjI1Miw3IEBA
IEV4Y2VwdGlvbk9yPFF1YWxpZmllZE5hbWU+IEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlTmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzCiAgICAgICAgIHJldHVybiBwYXJzZVJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCk7CiAgICAgUXVhbGlmaWVkTmFtZSBwYXJzZWRBdHRyaWJ1dGVOYW1lIHsg
cGFyc2VSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgfTsKICAgICBpZiAoIURvY3VtZW50Ojpo
YXNWYWxpZE5hbWVzcGFjZUZvckF0dHJpYnV0ZXMocGFyc2VkQXR0cmlidXRlTmFtZSkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOQU1FU1BBQ0VfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOYW1lc3BhY2VFcnJvciB9OwogICAgIHJldHVybiBXVEZNb3ZlKHBhcnNlZEF0
dHJpYnV0ZU5hbWUpOwogfQogCkBAIC0yNTU4LDcgKzI1NTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBFbGVtZW50OjpzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiBodG1sKQogewogICAgIGF1dG8q
IHBhcmVudEVsZW1lbnQgPSB0aGlzLT5wYXJlbnRFbGVtZW50KCk7CiAgICAgaWYgKCFpczxIVE1M
RWxlbWVudD4ocGFyZW50RWxlbWVudCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
TW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICBSZWY8SFRNTEVsZW1lbnQ+IHBhcmVu
dCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqcGFyZW50RWxlbWVudCk7CiAgICAgUmVmUHRyPE5v
ZGU+IHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKQEAgLTM2NTksNyArMzY1OSw3IEBAIEV4Y2Vw
dGlvbk9yPE5vZGUqPiBFbGVtZW50OjppbnNlcnRBZGphY2VudChjb25zdCBTdHJpbmcmIHdoZXJl
LCBSZWY8Tm9kZT4mJiBuZXdDCiAgICAgICAgIHJldHVybiBuZXdDaGlsZC5wdHIoKTsKICAgICB9
CiAKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OwogfQogCiBFeGNlcHRpb25PcjxFbGVtZW50Kj4gRWxlbWVu
dDo6aW5zZXJ0QWRqYWNlbnRFbGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQmIG5l
d0NoaWxkKQpAQCAtMzY3NiwxMiArMzY3NiwxMiBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8Q29udGFp
bmVyTm9kZSY+IGNvbnRleHROb2RlRm9ySW5zZXJ0aW9uKGNvbnN0IFN0cmluZyYgd2hlcmUsCiAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHdoZXJlLCAiYmVmb3JlYmVnaW4i
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh3aGVyZSwgImFmdGVyZW5kIikpIHsK
ICAgICAgICAgYXV0byogcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlm
ICghcGFyZW50IHx8IGlzPERvY3VtZW50PigqcGFyZW50KSkKLSAgICAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogICAgICAgICBy
ZXR1cm4gKnBhcmVudDsKICAgICB9CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHdoZXJlLCAiYWZ0ZXJiZWdpbiIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHdoZXJlLCAiYmVmb3JlZW5kIikpCiAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIHJldHVy
biBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiB9CiAKIC8vIFN0ZXAgMiBvZiBodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBh
cnNpbmcvI2RvbS1lbGVtZW50LWluc2VydGFkamFjZW50aHRtbC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuY3BwCmluZGV4IGNmMGMxZmQyMDYwYzY1YTAzNDk1MGEyZjNiNjE5NDcwMDc4NmEyZDgu
LjA0Y2IzYmY0NGE2ODM4ZGI0MGUyYTE2N2QyZDkyOGJhZGQ2NTdiOTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEV2
ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoRXZlbnQmIGV2ZW50KQogICAgIGV2
ZW50LnNldFVudHJ1c3RlZCgpOwogCiAgICAgaWYgKCFldmVudC5pc0luaXRpYWxpemVkKCkgfHwg
ZXZlbnQuaXNCZWluZ0Rpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciB9OwogCiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FeGNlcHRpb25D
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29kZS5oCmluZGV4IDNkNDkwYjVm
YWRhYTUxYjZjODcyNWY3M2E3YWZjNThjN2VmOThkODcuLjliY2M2Yzk2NWYyMjJiNjAyMjZkYmVi
NTA2NGI4NzRhMjhjYWUwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FeGNlcHRp
b25Db2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNCwz
NiArMjQsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gY2hhbmdlZCBvciByZW1vdmVkIGZy
b20gdGhlIHNwZWNpZmljYXRpb25zLgogZW51bSBFeGNlcHRpb25Db2RlIHsKICAgICBOb0V4Y2Vw
dGlvbiA9IDAsCi0gICAgSU5ERVhfU0laRV9FUlIgPSAxLAotICAgIEhJRVJBUkNIWV9SRVFVRVNU
X0VSUiA9IDMsCi0gICAgV1JPTkdfRE9DVU1FTlRfRVJSID0gNCwKLSAgICBJTlZBTElEX0NIQVJB
Q1RFUl9FUlIgPSA1LAotICAgIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiA9IDcsCi0gICAg
Tk9UX0ZPVU5EX0VSUiA9IDgsCi0gICAgTk9UX1NVUFBPUlRFRF9FUlIgPSA5LAotICAgIElOVVNF
X0FUVFJJQlVURV9FUlIgPSAxMCwgLy8gSGlzdG9yaWNhbC4gT25seSB1c2VkIGluIHNldEF0dHJp
YnV0ZU5vZGUgZXRjIHdoaWNoIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIERPTSBzcGVjcy4K
KyAgICBJbmRleFNpemVFcnJvciA9IDEsCisgICAgSGllcmFyY2h5UmVxdWVzdEVycm9yID0gMywK
KyAgICBXcm9uZ0RvY3VtZW50RXJyb3IgPSA0LAorICAgIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9
IDUsCisgICAgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgPSA3LAorICAgIE5vdEZvdW5kRXJy
b3IgPSA4LAorICAgIE5vdFN1cHBvcnRlZEVycm9yID0gOSwKKyAgICBJblVzZUF0dHJpYnV0ZUVy
cm9yID0gMTAsIC8vIEhpc3RvcmljYWwuIE9ubHkgdXNlZCBpbiBzZXRBdHRyaWJ1dGVOb2RlIGV0
YyB3aGljaCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBET00gc3BlY3MuCiAKICAgICAvLyBJ
bnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgotICAgIElOVkFMSURfU1RBVEVfRVJSID0gMTEsCi0g
ICAgU1lOVEFYX0VSUiA9IDEyLAotICAgIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiA9IDEzLAot
ICAgIE5BTUVTUEFDRV9FUlIgPSAxNCwKLSAgICBJTlZBTElEX0FDQ0VTU19FUlIgPSAxNSwKKyAg
ICBJbnZhbGlkU3RhdGVFcnJvciA9IDExLAorICAgIFN5bnRheEVycm9yID0gMTIsCisgICAgSW52
YWxpZE1vZGlmaWNhdGlvbkVycm9yID0gMTMsCisgICAgTmFtZXNwYWNlRXJyb3IgPSAxNCwKKyAg
ICBJbnZhbGlkQWNjZXNzRXJyb3IgPSAxNSwKIAogICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExl
dmVsIDM6Ci0gICAgVFlQRV9NSVNNQVRDSF9FUlIgPSAxNywgLy8gSGlzdG9yaWNhbDsgdXNlIFR5
cGVFcnJvciBpbnN0ZWFkCisgICAgVHlwZU1pc21hdGNoRXJyb3IgPSAxNywgLy8gSGlzdG9yaWNh
bDsgdXNlIFR5cGVFcnJvciBpbnN0ZWFkCiAKICAgICAvLyBYTUxIdHRwUmVxdWVzdCBleHRlbnNp
b246Ci0gICAgU0VDVVJJVFlfRVJSID0gMTgsCisgICAgU2VjdXJpdHlFcnJvciA9IDE4LAogCiAg
ICAgLy8gT3RoZXJzIGludHJvZHVjZWQgaW4gSFRNTDU6Ci0gICAgTkVUV09SS19FUlIgPSAxOSwK
LSAgICBBQk9SVF9FUlIgPSAyMCwKLSAgICBVUkxfTUlTTUFUQ0hfRVJSID0gMjEsCi0gICAgUVVP
VEFfRVhDRUVERURfRVJSID0gMjIsCi0gICAgVElNRU9VVF9FUlIgPSAyMywKLSAgICBJTlZBTElE
X05PREVfVFlQRV9FUlIgPSAyNCwKLSAgICBEQVRBX0NMT05FX0VSUiA9IDI1LAorICAgIE5ldHdv
cmtFcnJvciA9IDE5LAorICAgIEFib3J0RXJyb3IgPSAyMCwKKyAgICBVUkxNaXNtYXRjaEVycm9y
ID0gMjEsCisgICAgUXVvdGFFeGNlZWRlZEVycm9yID0gMjIsCisgICAgVGltZW91dEVycm9yID0g
MjMsCisgICAgSW52YWxpZE5vZGVUeXBlRXJyb3IgPSAyNCwKKyAgICBEYXRhQ2xvbmVFcnJvciA9
IDI1LAogCiAgICAgLy8gT3RoZXJzIGludHJvZHVjZWQgaW4gaHR0cHM6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLWV4Y2VwdGlvbnMKICAgICBFbmNvZGluZ0Vycm9yLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAKaW5kZXggNDVkN2E0NWRjMGI4ZDViZmVkYzY1NDQzY2NlOWY3YTQ0
NjFkNTkzZi4uMWU2MzE2ZTViNWE0MjMyNjQ2MWU3MWE4MjgwNGI0MTI2OTE4YzEyMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCkBAIC02NSw3ICs2NSw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IE1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSBtCiAgICAgaWYgKCFwb3J0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChhdXRv
JiBkYXRhUG9ydCA6IHBvcnRzKSB7CiAgICAgICAgICAgICBpZiAoZGF0YVBvcnQgPT0gdGhpcyB8
fCBtX2VudGFuZ2xlZENoYW5uZWwtPmlzQ29ubmVjdGVkVG8oZGF0YVBvcnQuZ2V0KCkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEQVRBX0NMT05FX0VSUiB9OworICAgICAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhQ2xvbmVFcnJvciB9OwogICAgICAgICB9
CiAgICAgICAgIGF1dG8gZGlzZW50YW5nbGVSZXN1bHQgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5n
bGVQb3J0cyhXVEZNb3ZlKHBvcnRzKSk7CiAgICAgICAgIGlmIChkaXNlbnRhbmdsZVJlc3VsdC5o
YXNFeGNlcHRpb24oKSkKQEAgLTE4Niw3ICsxODYsNyBAQCBFeGNlcHRpb25PcjxzdGQ6OnVuaXF1
ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+PiBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQ
bwogICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPiBwb3J0U2V0OwogICAgIGZvciAoYXV0byYgcG9y
dCA6IHBvcnRzKSB7CiAgICAgICAgIGlmICghcG9ydCB8fCBwb3J0LT5pc05ldXRlcmVkKCkgfHwg
IXBvcnRTZXQuYWRkKHBvcnQuZ2V0KCkpLmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgREFUQV9DTE9ORV9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBEYXRhQ2xvbmVFcnJvciB9OwogICAgIH0KIAogICAgIC8vIFBhc3NlZC1pbiBwb3J0cyBw
YXNzZWQgdmFsaWRpdHkgY2hlY2tzLCBzbyB3ZSBjYW4gZGlzZW50YW5nbGUgdGhlbS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5kZXggNDczYzM5Y2RhODE2N2E0OGQ1OWMxMDg3YTE3
ZTUxYTM1YWZmODY1YS4uNWI3NGEyYjM1OTg4NGQyNTY1MmZkZWUyODBhZjhmMjI2NzBiNTJkMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQCBSZWZQ
dHI8QXR0cj4gTmFtZWROb2RlTWFwOjpnZXROYW1lZEl0ZW1OUyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSSwgY29ucwogRXhjZXB0aW9uT3I8UmVmPEF0dHI+PiBOYW1lZE5vZGVNYXA6
OnJlbW92ZU5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFt
X2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9
OwogICAgIGF1dG8gaW5kZXggPSBtX2VsZW1lbnQuZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKG5h
bWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVtZW50KSk7CiAgICAgaWYgKGluZGV4
ID09IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZv
dW5kRXJyb3IgfTsKICAgICByZXR1cm4gbV9lbGVtZW50LmRldGFjaEF0dHJpYnV0ZShpbmRleCk7
CiB9CiAKQEAgLTgxLDEwICs4MSwxMCBAQCBWZWN0b3I8U3RyaW5nPiBOYW1lZE5vZGVNYXA6OnN1
cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdAogRXhjZXB0aW9uT3I8UmVmPEF0dHI+PiBOYW1l
ZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKIHsKICAgICBpZiAoIW1fZWxlbWVu
dC5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAg
YXV0byBpbmRleCA9IG1fZWxlbWVudC5maW5kQXR0cmlidXRlSW5kZXhCeU5hbWUoUXVhbGlmaWVk
TmFtZSB7IG51bGxBdG9tKCksIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJIH0pOwogICAgIGlmIChp
bmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b3RGb3VuZEVycm9yIH07CiAgICAgcmV0dXJuIG1fZWxlbWVudC5kZXRhY2hBdHRyaWJ1dGUoaW5k
ZXgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNDQ5OTA3N2Y0OTY5NTVlMWFmZDViZWMyNDZi
NzFhM2I3MzRlZDhkYS4uNWI5N2M2OGU3YjdkYTgzNmYzYzQ4NjAxMzU4MTkwMjRiMmYwOWFhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcApAQCAtNDA4LDI4ICs0MDgsMjggQEAgRWxlbWVudCogTm9kZTo6bmV4
dEVsZW1lbnRTaWJsaW5nKCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6Omluc2VydEJl
Zm9yZShOb2RlJiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQpCiB7CiAgICAgaWYgKCFpczxDb250
YWluZXJOb2RlPigqdGhpcykpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBISUVSQVJDSFlf
UkVRVUVTVF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVl
c3RFcnJvciB9OwogICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcykuaW5z
ZXJ0QmVmb3JlKG5ld0NoaWxkLCByZWZDaGlsZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IE5v
ZGU6OnJlcGxhY2VDaGlsZChOb2RlJiBuZXdDaGlsZCwgTm9kZSYgb2xkQ2hpbGQpCiB7CiAgICAg
aWYgKCFpczxDb250YWluZXJOb2RlPigqdGhpcykpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBISUVSQVJDSFlfUkVRVUVTVF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhp
ZXJhcmNoeVJlcXVlc3RFcnJvciB9OwogICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2Rl
PigqdGhpcykucmVwbGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRDaGlsZCk7CiB9CiAKIEV4Y2VwdGlv
bk9yPHZvaWQ+IE5vZGU6OnJlbW92ZUNoaWxkKE5vZGUmIG9sZENoaWxkKQogewogICAgIGlmICgh
aXM8Q29udGFpbmVyTm9kZT4oKnRoaXMpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9U
X0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9
OwogICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcykucmVtb3ZlQ2hpbGQo
b2xkQ2hpbGQpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBOb2RlOjphcHBlbmRDaGlsZChOb2Rl
JiBuZXdDaGlsZCkKIHsKICAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCp0aGlzKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAgICAgcmV0dXJuIGRv
d25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS5hcHBlbmRDaGlsZChuZXdDaGlsZCk7CiB9CiAK
QEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiBFeGNlcHRpb25PcjxS
ZWY8Tm9kZT4+IE5vZGU6OmNsb25lTm9kZUZvckJpbmRpbmdzKGJvb2wgZGVlcCkKIHsKICAgICBp
ZiAoVU5MSUtFTFkoaXNTaGFkb3dSb290KCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBv
cnRlZEVycm9yIH07CiAgICAgcmV0dXJuIGNsb25lTm9kZShkZWVwKTsKIH0KIApAQCAtNjM1LDgg
KzYzNSw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5vZGU6OnNldFByZWZpeChjb25zdCBBdG9taWNT
dHJpbmcmKQogewogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhhdCBmb3Igbm9kZXMgb3RoZXIgdGhh
biBlbGVtZW50cyBhbmQgYXR0cmlidXRlcywgcHJlZml4IGlzIGFsd2F5cyBudWxsLgogICAgIC8v
IEl0IGRvZXMgbm90IHNheSB3aGF0IHRvIGRvIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gc2V0IHRo
ZSBwcmVmaXggb24gYW5vdGhlciB0eXBlIG9mCi0gICAgLy8gbm9kZSwgaG93ZXZlciBNb3ppbGxh
IHRocm93cyBhIE5BTUVTUEFDRV9FUlIgZXhjZXB0aW9uLgotICAgIHJldHVybiBFeGNlcHRpb24g
eyBOQU1FU1BBQ0VfRVJSIH07CisgICAgLy8gbm9kZSwgaG93ZXZlciBNb3ppbGxhIHRocm93cyBh
IE5hbWVzcGFjZUVycm9yIGV4Y2VwdGlvbi4KKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTmFtZXNw
YWNlRXJyb3IgfTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlOjpsb2NhbE5hbWUoKSBj
b25zdApAQCAtOTIzLDE1ICs5MjMsMTUgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTm9kZTo6Y2hlY2tT
ZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpCiAgICAgLy8gRWxlbWVudDo6c2V0
UHJlZml4KCkgYW5kIEF0dHI6OnNldFByZWZpeCgpCiAKICAgICBpZiAoIXByZWZpeC5pc0VtcHR5
KCkgJiYgIURvY3VtZW50Ojppc1ZhbGlkTmFtZShwcmVmaXgpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKIAotICAgIC8vIEZJWE1FOiBSYWlzZSBOQU1F
U1BBQ0VfRVJSIGlmIHByZWZpeCBpcyBtYWxmb3JtZWQgcGVyIHRoZSBOYW1lc3BhY2VzIGluIFhN
TCBzcGVjaWZpY2F0aW9uLgorICAgIC8vIEZJWE1FOiBSYWlzZSBOYW1lc3BhY2VFcnJvciBpZiBw
cmVmaXggaXMgbWFsZm9ybWVkIHBlciB0aGUgTmFtZXNwYWNlcyBpbiBYTUwgc3BlY2lmaWNhdGlv
bi4KIAogICAgIGF1dG8mIG5hbWVzcGFjZVVSSSA9IHRoaXMtPm5hbWVzcGFjZVVSSSgpOwogICAg
IGlmIChuYW1lc3BhY2VVUkkuaXNFbXB0eSgpICYmICFwcmVmaXguaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTkFNRVNQQUNFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTmFtZXNwYWNlRXJyb3IgfTsKICAgICBpZiAocHJlZml4ID09IHhtbEF0b20oKSAm
JiBuYW1lc3BhY2VVUkkgIT0gWE1MTmFtZXM6OnhtbE5hbWVzcGFjZVVSSSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5BTUVTUEFDRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5hbWVzcGFjZUVycm9yIH07CiAKICAgICAvLyBBdHRyaWJ1dGUtc3BlY2lmaWMgY2hlY2tz
IGFyZSBpbiBBdHRyOjpzZXRQcmVmaXgoKS4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggYzUzYzMw
YjNjNDI0M2RjNWI1YWZmMTJmYjg4NzM5ODI0NGY0OGYwZi4uMDQ5NGNiMmJlOTA1YTQyMjA3OTBj
NjYyNTJlZTAyMTBmOGYzNThlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0yNTYsMTQgKzI1Niwx
NCBAQCBFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2Rl
LCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwg
MCBvciAxIGRlcGVuZGluZyBvbiBpZiB0aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKICAgICAv
LyByZWZOb2RlIG5vZGUgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhlIG5vZGUgaXMgYmVmb3JlLCBz
YW1lIGFzLCBvciBhZnRlciB0aGUgcmFuZ2UgcmVzcGVjdGl2ZWx5LgogICAgIGlmICgmcmVmTm9k
ZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBXUk9OR19ET0NVTUVOVF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdy
b25nRG9jdW1lbnRFcnJvciB9OwogCiAgICAgYXV0byBjaGVja05vZGVSZXN1bHQgPSBjaGVja05v
ZGVXT2Zmc2V0KHJlZk5vZGUsIG9mZnNldCk7CiAgICAgaWYgKGNoZWNrTm9kZVJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sg
d2hldGhlciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZp
cnN0CiAgICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9p
ZCBPKG4pIG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgogICAgICAgICBpZiAoIXJlZk5v
ZGUuaXNDb25uZWN0ZWQoKSAmJiAhY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnJlZk5vZGUsICZz
dGFydENvbnRhaW5lcigpKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXUk9OR19E
T0NVTUVOVF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0RvY3Vt
ZW50RXJyb3IgfTsKICAgICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7CiAgICAgfQogCkBAIC0zMDUsNyArMzA1LDcgQEAgRXhjZXB0aW9uT3I8UmFuZ2U6OkNv
bXBhcmVSZXN1bHRzPiBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSkgY29uc3QKICAg
ICBpZiAoIXBhcmVudE5vZGUpIHsKICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgdGhlIHRvcCBv
ZiB0aGUgdHJlZSB3ZSBzaG91bGQgcmV0dXJuIE5PREVfQkVGT1JFX0FORF9BRlRFUiwKICAgICAg
ICAgLy8gYnV0IHdlIHRocm93IHRvIG1hdGNoIGZpcmVmb3ggYmVoYXZpb3IuCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgfQogICAgIGF1dG8gbm9kZUluZGV4ID0gcmVmTm9k
ZS5jb21wdXRlTm9kZUluZGV4KCk7CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBFeGNlcHRpb25Pcjxz
aG9ydD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29uc3Qg
UmFuZ2UmIHNvdQogICAgIGF1dG8qIHRoaXNDb250YWluZXIgPSBjb21tb25BbmNlc3RvckNvbnRh
aW5lcigpOwogICAgIGF1dG8qIHNvdXJjZUNvbnRhaW5lciA9IHNvdXJjZVJhbmdlLmNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCk7CiAgICAgaWYgKCF0aGlzQ29udGFpbmVyIHx8ICFzb3VyY2VDb250
YWluZXIgfHwgJnRoaXNDb250YWluZXItPmRvY3VtZW50KCkgIT0gJnNvdXJjZUNvbnRhaW5lci0+
ZG9jdW1lbnQoKSB8fCB0b3AoKnRoaXNDb250YWluZXIpICE9IHRvcCgqc291cmNlQ29udGFpbmVy
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdST05HX0RPQ1VNRU5UX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07CiAKICAgICBzd2l0
Y2ggKGhvdykgewogICAgIGNhc2UgU1RBUlRfVE9fU1RBUlQ6CkBAIC0zNTAsNyArMzUwLDcgQEAg
RXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGFyZUhv
dyBob3csIGNvbnN0IFJhbmdlJiBzb3UKICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX2VuZCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJy
b3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2lu
dHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBob3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5n
ZSkgY29uc3QKQEAgLTM2Miw3ICszNjIsNyBAQCBFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNv
bXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2lnbmVkIHNob3J0IGhvdywgYwogICAg
IGNhc2UgRU5EX1RPX1NUQVJUOgogICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRz
KHN0YXRpY19jYXN0PENvbXBhcmVIb3c+KGhvdyksIHNvdXJjZVJhbmdlKTsKICAgICB9Ci0gICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNvbnRhaW5lckEsIHVuc2lnbmVkIG9mZnNl
dEEsIE5vZGUqIGNvbnRhaW5lckIsIHVuc2lnbmVkIG9mZnNldEIpCkBAIC00MjIsNyArNDIyLDcg
QEAgRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSog
Y29udGFpbmVyQSwgdW5zaWduZWQgb2Zmc2UKICAgICAvLyAjIyMgd2UgbmVlZCB0byBkbyBhIHRy
YXZlcnNhbCBoZXJlIGluc3RlYWQKICAgICBhdXRvKiBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKGNvbnRhaW5lckEsIGNvbnRhaW5lckIpOwogICAgIGlmICghY29tbW9u
QW5jZXN0b3IpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXUk9OR19ET0NVTUVOVF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwogICAg
IE5vZGUqIGNoaWxkQSA9IGNvbnRhaW5lckE7CiAgICAgd2hpbGUgKGNoaWxkQSAmJiBjaGlsZEEt
PnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAgICAgICAgY2hpbGRBID0gY2hpbGRB
LT5wYXJlbnROb2RlKCk7CkBAIC03NTIsNyArNzUyLDcgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxOb2RlPj4gcHJvY2Vzc0NvbnRlbnRzQmV0d2Vlbk9mZnNldHMoUmFuZ2U6OkFjdGlvblR5
cGUKICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGFydE9mZnNldDsgbiAmJiBpIDwgZW5kT2Zmc2V0OyBpKyssIG4gPSBuLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoYWN0aW9uICE9IFJhbmdlOjpEZWxldGUgJiYg
bi0+aXNEb2N1bWVudFR5cGVOb2RlKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9OwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kKCpuKTsKICAgICAgICAgfQpAQCAtODg0LDE3ICs4ODQsMTcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6Omluc2VydE5vZGUoUmVmPE5vZGU+JiYgbm9kZSkKICAg
ICBhdXRvIHN0YXJ0Q29udGFpbmVyTm9kZVR5cGUgPSBzdGFydENvbnRhaW5lcigpLm5vZGVUeXBl
KCk7CiAKICAgICBpZiAoc3RhcnRDb250YWluZXJOb2RlVHlwZSA9PSBOb2RlOjpDT01NRU5UX05P
REUgfHwgc3RhcnRDb250YWluZXJOb2RlVHlwZSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBISUVSQVJDSFlfUkVRVUVTVF9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9
OwogICAgIGJvb2wgc3RhcnRJc1RleHQgPSBzdGFydENvbnRhaW5lck5vZGVUeXBlID09IE5vZGU6
OlRFWFRfTk9ERTsKICAgICBpZiAoc3RhcnRJc1RleHQgJiYgIXN0YXJ0Q29udGFpbmVyKCkucGFy
ZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSElFUkFSQ0hZX1JFUVVFU1Rf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBIaWVyYXJjaHlSZXF1ZXN0RXJyb3Ig
fTsKICAgICBpZiAobm9kZS5wdHIoKSA9PSAmc3RhcnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAKICAgICBSZWZQdHI8Tm9kZT4g
cmVmZXJlbmNlTm9kZSA9IHN0YXJ0SXNUZXh0ID8gJnN0YXJ0Q29udGFpbmVyKCkgOiBzdGFydENv
bnRhaW5lcigpLnRyYXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KCkpOwogICAgIE5vZGUqIHBh
cmVudE5vZGUgPSByZWZlcmVuY2VOb2RlID8gcmVmZXJlbmNlTm9kZS0+cGFyZW50Tm9kZSgpIDog
JnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihwYXJlbnROb2Rl
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhJRVJBUkNIWV9SRVFVRVNUX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSGllcmFyY2h5UmVxdWVzdEVycm9yIH07CiAKICAg
ICBSZWY8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnBh
cmVudE5vZGUpOwogCkBAIC05OTEsMTMgKzk5MSwxMyBAQCBFeGNlcHRpb25PcjxOb2RlKj4gUmFu
Z2U6OmNoZWNrTm9kZVdPZmZzZXQoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAog
ewogICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfVFlQRV9OT0RFOgotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
Tk9ERV9UWVBFX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRO
b2RlVHlwZUVycm9yIH07CiAgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgog
ICAgICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpURVhU
X05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgog
ICAgICAgICAgICAgaWYgKG9mZnNldCA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxl
bmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VS
UiB9OworICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGNhc2UgTm9kZTo6QVRUUklC
VVRFX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKQEAg
LTEwMDcsMTIgKzEwMDcsMTIgQEAgRXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05vZGVX
T2Zmc2V0KE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbm9kZS50
cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKTsKICAgICAgICAgICAgIGlmICghY2hpbGRCZWZv
cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07
CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAg
ICAgICAgICAgICByZXR1cm4gY2hpbGRCZWZvcmU7CiAgICAgICAgIH0KICAgICB9CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfTk9ERV9U
WVBFX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9
OwogfQogCiBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKCkgY29uc3QKQEAgLTEwMjMsMjgg
KzEwMjMsMjggQEAgUmVmPFJhbmdlPiBSYW5nZTo6Y2xvbmVSYW5nZSgpIGNvbnN0CiBFeGNlcHRp
b25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2RlKQogewogICAgIGlm
ICghcmVmTm9kZS5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX05PREVfVFlQRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRO
b2RlVHlwZUVycm9yIH07CiAgICAgcmV0dXJuIHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUo
KSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9p
ZD4gUmFuZ2U6OnNldEVuZEJlZm9yZShOb2RlJiByZWZOb2RlKQogewogICAgIGlmICghcmVmTm9k
ZS5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX05PREVf
VFlQRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVy
cm9yIH07CiAgICAgcmV0dXJuIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUu
Y29tcHV0ZU5vZGVJbmRleCgpKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVu
ZEFmdGVyKE5vZGUmIHJlZk5vZGUpCiB7CiAgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfTk9ERV9UWVBFX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKICAgICByZXR1
cm4gc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4
KCkgKyAxKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNlbGVjdE5vZGUoTm9kZSYg
cmVmTm9kZSkKIHsKICAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9OT0RFX1RZUEVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCiAgICAgaWYgKCZvd25lckRvY3Vt
ZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1lbnQoKSkKICAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9k
ZS5kb2N1bWVudCgpKTsKQEAgLTEwNTksNyArMTA1OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJh
bmdlOjpzZWxlY3ROb2RlKE5vZGUmIHJlZk5vZGUpCiBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6
c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIHJlZk5vZGUpCiB7CiAgICAgaWYgKHJlZk5vZGUuaXNE
b2N1bWVudFR5cGVOb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX05P
REVfVFlQRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlw
ZUVycm9yIH07CiAKICAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVu
dCgpKQogICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwpAQCAtMTA4Myw3
ICsxMDgzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoTm9k
ZSYgbmV3UGFyZW50KQogICAgIGlmIChlbmROb25UZXh0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09
IE5vZGU6OlRFWFRfTk9ERSkKICAgICAgICAgZW5kTm9uVGV4dENvbnRhaW5lciA9IGVuZE5vblRl
eHRDb250YWluZXItPnBhcmVudE5vZGUoKTsKICAgICBpZiAoc3RhcnROb25UZXh0Q29udGFpbmVy
ICE9IGVuZE5vblRleHRDb250YWluZXIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IgfTsKIAogICAgIC8vIFN0ZXAgMjogSWYgbmV3UGFyZW50IGlzIGEgRG9jdW1lbnQsIERv
Y3VtZW50VHlwZSwgb3IgRG9jdW1lbnRGcmFnbWVudCBub2RlLCB0aGVuIHRocm93IGFuIEludmFs
aWROb2RlVHlwZUVycm9yLgogICAgIHN3aXRjaCAobmV3UGFyZW50Lm5vZGVUeXBlKCkpIHsKQEAg
LTEwOTEsNyArMTA5MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzdXJyb3VuZENvbnRl
bnRzKE5vZGUmIG5ld1BhcmVudCkKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVO
VF9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CiAgICAgICAgIGNhc2Ug
Tm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfTk9ERV9UWVBFX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWROb2RlVHlwZUVycm9yIH07CiAgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElP
Tl9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBO
b2RlOjpFTEVNRU5UX05PREU6CkBAIC0xMTI2LDcgKzExMjYsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhOb2RlJiBuZXdQYXJlbnQpCiBFeGNlcHRpb25Pcjx2
b2lkPiBSYW5nZTo6c2V0U3RhcnRCZWZvcmUoTm9kZSYgcmVmTm9kZSkKIHsKICAgICBpZiAoIXJl
Zk5vZGUucGFyZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9O
T0RFX1RZUEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5
cGVFcnJvciB9OwogICAgIHJldHVybiBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJl
Zk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVl
cnkuY3BwCmluZGV4IDgwZmIyYjVlNmRjZjM3MTZmOTkwOTFhODE5MTVkYjQxMDMzYWMzNjAuLmZh
NDg4YmM4MGJjZTg4MmIyOTI0MzllNzE2NjQ0MGVkZWJjMGFjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2VsZWN0b3JRdWVyeS5jcHAKQEAgLTYyNiwxMCArNjI2LDEwIEBAIEV4Y2VwdGlvbk9yPFNlbGVj
dG9yUXVlcnkmPiBTZWxlY3RvclF1ZXJ5Q2FjaGU6OmFkZChjb25zdCBTdHJpbmcmIHNlbGVjdG9y
cywgRG9jCiAgICAgcGFyc2VyLnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3JzLCBzZWxlY3Rvckxpc3Qp
OwogCiAgICAgaWYgKCFzZWxlY3Rvckxpc3QuZmlyc3QoKSB8fCBzZWxlY3Rvckxpc3QuaGFzSW52
YWxpZFNlbGVjdG9yKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgaWYgKHNl
bGVjdG9yTGlzdC5zZWxlY3RvcnNOZWVkTmFtZXNwYWNlUmVzb2x1dGlvbigpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGNvbnN0IGludCBtYXhpbXVtU2VsZWN0b3JRdWVyeUNh
Y2hlU2l6ZSA9IDI1NjsKICAgICBpZiAobV9lbnRyaWVzLnNpemUoKSA9PSBtYXhpbXVtU2VsZWN0
b3JRdWVyeUNhY2hlU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dS
b290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCBhYWJhYjgx
YzE2ZDkzNmI4NTdkNDkxNGQ4MWY2ZWFmZDcyMTNhYTk0Li5iYTM4Yzk0MzkxODRiMDg5NjdjMjg5
Y2M3M2I3NDk4ZTJlNmI4YmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93
Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC0xMjcs
NyArMTI3LDcgQEAgU3RyaW5nIFNoYWRvd1Jvb3Q6OmlubmVySFRNTCgpIGNvbnN0CiBFeGNlcHRp
b25Pcjx2b2lkPiBTaGFkb3dSb290OjpzZXRJbm5lckhUTUwoY29uc3QgU3RyaW5nJiBtYXJrdXAp
CiB7CiAgICAgaWYgKGlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0
ZXJIVE1MKCpob3N0KCksIG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKICAgICBpZiAo
ZnJhZ21lbnQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNl
RXhjZXB0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKaW5kZXggMWNmOGY5M2ZhNjBjOTBkZjgxNmU5YWFi
YTMwZDFhYmI5YTNhYTJhYS4uM2VjMzA4NTFmODg1MjhiYTMwM2ZiMjI1ZDkzMGMxYmZkNTVlNWJh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UZXh0LmNwcApAQCAtNTgsNyArNTgsNyBAQCBUZXh0Ojp+VGV4dCgpCiBFeGNl
cHRpb25PcjxSZWY8VGV4dD4+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lZCBvZmZzZXQpCiB7CiAg
ICAgaWYgKG9mZnNldCA+IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5E
RVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9y
IH07CiAKICAgICBFdmVudFF1ZXVlU2NvcGUgc2NvcGU7CiAgICAgYXV0byBvbGREYXRhID0gZGF0
YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IDRkNDlkNzFkNzhjZDNjMzk3YzM2
OTA3MmMwYmVlYzM0ZjQ3MzY4MzkuLjhhMGI1OWEwYmMzOGRkMTJlNDZlOTM0ZjYyNDNjYzgzY2Q0
ZTkxN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTg5MCw3ICs4OTAsNyBAQCBF
eGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJP
dXRlckhUTUwoRWxlbWVudCYgY29udAogCiAgICAgYm9vbCB3YXNWYWxpZCA9IGZyYWdtZW50LT5w
YXJzZVhNTChtYXJrdXAsICZjb250ZXh0RWxlbWVudCwgcGFyc2VyQ29udGVudFBvbGljeSk7CiAg
ICAgaWYgKCF3YXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgcmV0dXJu
IFdURk1vdmUoZnJhZ21lbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNw
cAppbmRleCBiZjZlMDI4NDczMjZmNWU5OGUwNGZhYzc2YWQ2NGRhMTBjMDBhNjg3Li4zNGJmMjc5
N2QxNDNkMTkzNTc3YzJkOGU1OTZiYzIxYzJmNjJhNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlci5jcHAKQEAgLTEyOCw5ICsxMjgsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBGaWxl
UmVhZGVyOjpyZWFkQXNEYXRhVVJMKEJsb2IqIGJsb2IpCiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEZp
bGVSZWFkZXI6OnJlYWRJbnRlcm5hbChCbG9iJiBibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFk
VHlwZSB0eXBlKQogewotICAgIC8vIElmIG11bHRpcGxlIGNvbmN1cnJlbnQgcmVhZCBtZXRob2Rz
IGFyZSBjYWxsZWQgb24gdGhlIHNhbWUgRmlsZVJlYWRlciwgSU5WQUxJRF9TVEFURV9FUlIgc2hv
dWxkIGJlIHRocm93biB3aGVuIHRoZSBzdGF0ZSBpcyBMT0FESU5HLgorICAgIC8vIElmIG11bHRp
cGxlIGNvbmN1cnJlbnQgcmVhZCBtZXRob2RzIGFyZSBjYWxsZWQgb24gdGhlIHNhbWUgRmlsZVJl
YWRlciwgSW52YWxpZFN0YXRlRXJyb3Igc2hvdWxkIGJlIHRocm93biB3aGVuIHRoZSBzdGF0ZSBp
cyBMT0FESU5HLgogICAgIGlmIChtX3N0YXRlID09IExPQURJTkcpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAppbmRleCA2OGE0ODE5
NjlkNWVjNzJmZTVjN2QzYjFhZjgyZjMwYTA5MDAyYmY4Li44MjhiMTAzNDljN2JhOTg5OGNkZWZh
MzYwOTQ3MWNmMGRkMmNmZjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJT
eW5jLmNwcApAQCAtNzgsMjkgKzc4LDI5IEBAIHN0YXRpYyBFeGNlcHRpb25Db2RlIGVycm9yQ29k
ZVRvRXhjZXB0aW9uQ29kZShGaWxlRXJyb3I6OkVycm9yQ29kZSBlcnJvckNvZGUpCiAgICAgY2Fz
ZSBGaWxlRXJyb3I6Ok9LOgogICAgICAgICByZXR1cm4gTm9FeGNlcHRpb247CiAgICAgY2FzZSBG
aWxlRXJyb3I6Ok5PVF9GT1VORF9FUlI6Ci0gICAgICAgIHJldHVybiBOT1RfRk9VTkRfRVJSOwor
ICAgICAgICByZXR1cm4gTm90Rm91bmRFcnJvcjsKICAgICBjYXNlIEZpbGVFcnJvcjo6U0VDVVJJ
VFlfRVJSOgotICAgICAgICByZXR1cm4gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gU2Vj
dXJpdHlFcnJvcjsKICAgICBjYXNlIEZpbGVFcnJvcjo6QUJPUlRfRVJSOgotICAgICAgICByZXR1
cm4gQUJPUlRfRVJSOworICAgICAgICByZXR1cm4gQWJvcnRFcnJvcjsKICAgICBjYXNlIEZpbGVF
cnJvcjo6Tk9UX1JFQURBQkxFX0VSUjoKICAgICAgICAgcmV0dXJuIE5vdFJlYWRhYmxlRXJyb3I7
CiAgICAgY2FzZSBGaWxlRXJyb3I6OkVOQ09ESU5HX0VSUjoKICAgICAgICAgcmV0dXJuIEVuY29k
aW5nRXJyb3I7CiAgICAgY2FzZSBGaWxlRXJyb3I6Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjoKLSAgICAgICAgcmV0dXJuIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAg
cmV0dXJuIE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yOwogICAgIGNhc2UgRmlsZUVycm9yOjpJ
TlZBTElEX1NUQVRFX0VSUjoKLSAgICAgICAgcmV0dXJuIElOVkFMSURfU1RBVEVfRVJSOworICAg
ICAgICByZXR1cm4gSW52YWxpZFN0YXRlRXJyb3I7CiAgICAgY2FzZSBGaWxlRXJyb3I6OlNZTlRB
WF9FUlI6Ci0gICAgICAgIHJldHVybiBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gU3ludGF4
RXJyb3I7CiAgICAgY2FzZSBGaWxlRXJyb3I6OklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjoKLSAg
ICAgICAgcmV0dXJuIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuIElu
dmFsaWRNb2RpZmljYXRpb25FcnJvcjsKICAgICBjYXNlIEZpbGVFcnJvcjo6UVVPVEFfRVhDRUVE
RURfRVJSOgotICAgICAgICByZXR1cm4gUVVPVEFfRVhDRUVERURfRVJSOworICAgICAgICByZXR1
cm4gUXVvdGFFeGNlZWRlZEVycm9yOwogICAgIGNhc2UgRmlsZUVycm9yOjpUWVBFX01JU01BVENI
X0VSUjoKLSAgICAgICAgcmV0dXJuIFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm4g
VHlwZU1pc21hdGNoRXJyb3I7CiAgICAgY2FzZSBGaWxlRXJyb3I6OlBBVEhfRVhJU1RTX0VSUjoK
LSAgICAgICAgcmV0dXJuIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0
dXJuIE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yOwogICAgIH0KICAgICByZXR1cm4gVW5rbm93
bkVycm9yOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCmluZGV4IGYxOWU4OGY4
NzFhMmVlMDJmNTJiMTA5NjZmNDc3ZTcxYjZiZDMzMTQuLjI1NTViNjg0NDZiMjhlYzJiZjA2NWY3
YmNjNGUxZjVhN2Y3NmEwMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9r
ZW5MaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAKQEAg
LTUwLDEwICs1MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdG9rZW5Db250YWluc0hUTUxTcGFj
ZShjb25zdCBTdHJpbmcmIHRva2VuKQogRXhjZXB0aW9uT3I8dm9pZD4gRE9NVG9rZW5MaXN0Ojp2
YWxpZGF0ZVRva2VuKGNvbnN0IFN0cmluZyYgdG9rZW4pCiB7CiAgICAgaWYgKHRva2VuLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBpZiAodG9rZW5Db250YWlu
c0hUTUxTcGFjZSh0b2tlbikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0NI
QVJBQ1RFUl9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0
ZXJFcnJvciB9OwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE2MSwxMCArMTYxLDEwIEBAIEV4
Y2VwdGlvbk9yPGJvb2w+IERPTVRva2VuTGlzdDo6dG9nZ2xlKGNvbnN0IEF0b21pY1N0cmluZyYg
dG9rZW4sIHN0ZDo6b3B0aW9uYWw8CiBFeGNlcHRpb25Pcjx2b2lkPiBET01Ub2tlbkxpc3Q6OnJl
cGxhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpdGVtLCBjb25zdCBBdG9taWNTdHJpbmcmIHJlcGxh
Y2VtZW50KQogewogICAgIGlmIChpdGVtLmlzRW1wdHkoKSB8fCByZXBsYWNlbWVudC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgaWYgKHRva2VuQ29udGFpbnNI
VE1MU3BhY2UoaXRlbSkgfHwgdG9rZW5Db250YWluc0hUTUxTcGFjZShyZXBsYWNlbWVudCkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRDaGFyYWN0ZXJFcnJvciB9OwogCiAgICAgYXV0
byYgdG9rZW5zID0gdGhpcy0+dG9rZW5zKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKaW5kZXggOWJmNDFkNjgwODRkZTJmM2RmZjA4ODQzM2NjM2JkYzFiN2Fj
NDdlMC4uODg4YTVjN2Q2OWQ2MjZjYjk4NDkyOTFiMmJlZDM5OGFhNjEwNDEzZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTU1NCw3ICs1NTQsNyBAQCBz
dGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHlGcm9tSlNWYWx1ZShKU0M6OkpTVmFs
dWUgcXVhbGl0eVZhbHVlKQogRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhUTUxDYW52YXNF
bGVtZW50Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgSlNDOjpKU1ZhbHVlIHF1
YWxpdHlWYWx1ZSkKIHsKICAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNl
Y3VyaXR5RXJyb3IgfTsKIAogICAgIGlmIChtX3NpemUuaXNFbXB0eSgpIHx8ICFidWZmZXIoKSkK
ICAgICAgICAgcmV0dXJuIFVuY2FjaGVkU3RyaW5nIHsgQVNDSUlMaXRlcmFsIHsgImRhdGE6LCIg
fSB9OwpAQCAtNTgxLDcgKzU4MSw3IEBAIEV4Y2VwdGlvbk9yPFVuY2FjaGVkU3RyaW5nPiBIVE1M
Q2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiBFeGNlcHRp
b25Pcjx2b2lkPiBIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIFJlZjxCbG9iQ2FsbGJhY2s+JiYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIEpTQzo6SlNWYWx1ZSBxdWFsaXR5VmFsdWUpCiB7CiAgICAgaWYgKCFtX29yaWdp
bkNsZWFuKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAKICAgICBpZiAobV9zaXpl
LmlzRW1wdHkoKSB8fCAhYnVmZmVyKCkpIHsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2Fs
bGJhY2soY29udGV4dCwgbnVsbHB0cik7CkBAIC02NDUsMTAgKzY0NSwxMCBAQCBSZWZQdHI8TWVk
aWFTYW1wbGU+IEhUTUxDYW52YXNFbGVtZW50Ojp0b01lZGlhU2FtcGxlKCkKIEV4Y2VwdGlvbk9y
PFJlZjxNZWRpYVN0cmVhbT4+IEhUTUxDYW52YXNFbGVtZW50OjpjYXB0dXJlU3RyZWFtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiYmIGZyYW1l
UmVxdWVzdFJhdGUpCiB7CiAgICAgaWYgKCFvcmlnaW5DbGVhbigpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uKFNFQ1VSSVRZX0VSUiwgQVNDSUlMaXRlcmFsKCJDYW52YXMgaXMgdGFpbnRlZCIp
KTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbihTZWN1cml0eUVycm9yLCBBU0NJSUxpdGVyYWwo
IkNhbnZhcyBpcyB0YWludGVkIikpOwogCiAgICAgaWYgKGZyYW1lUmVxdWVzdFJhdGUgJiYgZnJh
bWVSZXF1ZXN0UmF0ZS52YWx1ZSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbihOT1Rf
U1VQUE9SVEVEX0VSUiwgQVNDSUlMaXRlcmFsKCJmcmFtZVJlcXVlc3RSYXRlIGlzIG5lZ2F0aXZl
IikpOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uKE5vdFN1cHBvcnRlZEVycm9yLCBBU0NJSUxp
dGVyYWwoImZyYW1lUmVxdWVzdFJhdGUgaXMgbmVnYXRpdmUiKSk7CiAKICAgICBhdXRvIHRyYWNr
ID0gQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShjb250ZXh0LCAqdGhpcywg
V1RGTW92ZShmcmFtZVJlcXVlc3RSYXRlKSk7CiAgICAgYXV0byBzdHJlYW0gPSAgTWVkaWFTdHJl
YW06OmNyZWF0ZShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXgg
NjRlNDMxMGU4YzdhYjQzMDhjZGE2MDIyMDJmMzcyMjVhODYxMGUwZi4uMGI5MjgzYzRhYjQ3NmY2
ODI4MzY2ODUyOTQ2ZjQ3N2EwZjRmOTJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAKQEAgLTU0MSw3ICs1NDEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MRWxlbWVudDo6c2V0
T3V0ZXJUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgUmVm
UHRyPE5vZGU+IHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKICAgICBSZWZQdHI8Tm9kZT4gbmV4
dCA9IG5leHRTaWJsaW5nKCk7CkBAIC01NTQsNyArNTU0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
SFRNTEVsZW1lbnQ6OnNldE91dGVyVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgICAgIG5l
d0NoaWxkID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQpOwogCiAgICAgaWYgKCFwYXJl
bnROb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBISUVSQVJDSFlfUkVRVUVTVF9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9
OwogCiAgICAgYXV0byByZXBsYWNlUmVzdWx0ID0gcGFyZW50LT5yZXBsYWNlQ2hpbGQoKm5ld0No
aWxkLCAqdGhpcyk7CiAgICAgaWYgKHJlcGxhY2VSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCkBAIC02
NDUsNyArNjQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTEVsZW1lbnQ6OnNldENvbnRlbnRF
ZGl0YWJsZShjb25zdCBTdHJpbmcmIGVuYWJsZWQpCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZW5hYmxlZCwgImluaGVyaXQiKSkKICAgICAgICAgcmVtb3ZlQXR0
cmlidXRlKGNvbnRlbnRlZGl0YWJsZUF0dHIpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCmluZGV4IGJkMWI5Y2E2NjZhMmY5N2MzNTlkOTZhNWIx
Y2E2YWU0ZjIwYjc4MjIuLjJjZjIzMTZkZjk1NTM1ZTg3MDIwNTQzZWEzOTAzZDNhY2ZlNDZlOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKQEAg
LTExNyw3ICsxMTcsNyBAQCBFeGNlcHRpb25PcjxEb2N1bWVudCY+IEhUTUxGcmFtZU93bmVyRWxl
bWVudDo6Z2V0U1ZHRG9jdW1lbnQoKSBjb25zdAogICAgIGlmIChpczxTVkdEb2N1bWVudD4oZG9j
dW1lbnQpKQogICAgICAgICByZXR1cm4gKmRvY3VtZW50OwogICAgIC8vIFNwZWM6IGh0dHA6Ly93
d3cudzMub3JnL1RSL1NWRy9zdHJ1Y3QuaHRtbCNJbnRlcmZhY2VHZXRTVkdEb2N1bWVudAotICAg
IHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiB2b2lkIEhUTUxGcmFtZU93bmVyRWxl
bWVudDo6c2NoZWR1bGVpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDEzNDliNzRhODBlMWQ4OGM3
ZWI4YTY3Y2Y1N2NiMzNkMGNjZDIyYzEuLjM3Mzc3OWY0NTllODcyMDA2NDUyZDljYWU5MjdiNDZj
MzVjMjdlMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAt
MTAyNiw3ICsxMDI2LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRFZGl0aW5nVmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6
OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZl
bnRCZWhhdmlvcikKIHsKICAgICBpZiAoaXNGaWxlVXBsb2FkKCkgJiYgIXZhbHVlLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgaWYgKCFt
X2lucHV0VHlwZS0+Y2FuU2V0VmFsdWUodmFsdWUpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAt
MTA2Nyw3ICsxMDY3LDcgQEAgZG91YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlQXNOdW1iZXIo
KSBjb25zdAogRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVBc051
bWJlcihkb3VibGUgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlv
cikKIHsKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUobmV3VmFsdWUpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5zZXRWYWx1
ZUFzRG91YmxlKG5ld1ZhbHVlLCBldmVudEJlaGF2aW9yKTsKIH0KIApAQCAtMTMwNiw3ICsxMzA2
LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjptdWx0aXBsZSgpIGNvbnN0CiBFeGNlcHRpb25P
cjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTaXplKHVuc2lnbmVkIHNpemUpCiB7CiAgICAg
aWYgKCFzaXplKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgc2V0VW5z
aWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShzaXplQXR0ciwgbGltaXRUb09ubHlIVE1MTm9uTmVnYXRp
dmVOdW1iZXJzR3JlYXRlclRoYW5aZXJvKHNpemUsIGRlZmF1bHRTaXplKSk7CiAgICAgcmV0dXJu
IHsgfTsKIH0KQEAgLTE5MTQsNyArMTkxNCw3IEBAIHZvaWQgTGlzdEF0dHJpYnV0ZVRhcmdldE9i
c2VydmVyOjppZFRhcmdldENoYW5nZWQoKQogRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElucHV0RWxl
bWVudDo6c2V0UmFuZ2VUZXh0KGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7CiAgICAgaWYg
KCFtX2lucHV0VHlwZS0+c3VwcG9ydHNTZWxlY3Rpb25BUEkoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgcmV0dXJuIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRSYW5nZVRleHQocmVwbGFjZW1lbnQpOwogfQpAQCAtMTkyMiw3ICsxOTIyLDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElucHV0RWxlbWVudDo6c2V0UmFuZ2VUZXh0KGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpCiBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50
OjpzZXRSYW5nZVRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGVuZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rpb25Nb2RlKQogewogICAgIGlmICgh
bV9pbnB1dFR5cGUtPnN1cHBvcnRzU2VsZWN0aW9uQVBJKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIHJldHVybiBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6c2V0UmFuZ2VUZXh0KHJlcGxhY2VtZW50LCBzdGFydCwgZW5kLCBzZWxlY3Rpb25Nb2Rl
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAppbmRleCA4
OTQ2YTFkODIxZGFkMzk1MGVmYzI2YjIwM2JhZTkzZmZhNjg4NGUzLi5iYTA2MmMxOGQ1MzY0NjZl
MWZhYWI1ZDQwZGYyNTRiOWJlYmY3MGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFy
cXVlZUVsZW1lbnQuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgaW50IEhUTUxNYXJxdWVlRWxlbWVu
dDo6bG9vcCgpIGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MTWFycXVlZUVsZW1lbnQ6OnNl
dExvb3AoaW50IGxvb3ApCiB7CiAgICAgaWYgKGxvb3AgPD0gMCAmJiBsb29wICE9IC0xKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgc2V0SW50ZWdyYWxBdHRyaWJ1dGUo
bG9vcEF0dHIsIGxvb3ApOwogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBhZmNkNzBiOTA4ODE2NDkyN2U5Nzg3MWQyYWVkZGNm
OWMzMWFkYTg2Li5jNTZjN2FhOGVhNDdmM2MwMDUzYTc3Y2QyOGEwMzk5MTkwMTc2OTUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTI5NTAsNyArMjk1MCw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q3VycmVudFRpbWUoY29uc3QgTWVkaWFUaW1l
JiB0aW1lKQogRXhjZXB0aW9uT3I8dm9pZD4gSFRNTE1lZGlhRWxlbWVudDo6c2V0Q3VycmVudFRp
bWVGb3JCaW5kaW5ncyhkb3VibGUgdGltZSkKIHsKICAgICBpZiAobV9tZWRpYUNvbnRyb2xsZXIp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICBzZWVrKE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0aW1lKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTMx
NTQsNyArMzE1NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheShET01Qcm9taXNlRGVm
ZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQogICAgIH0KIAogICAgIGlmIChtX2Vycm9yICYmIG1fZXJy
b3ItPmNvZGUoKSA9PSBNZWRpYUVycm9yOjpNRURJQV9FUlJfU1JDX05PVF9TVVBQT1JURUQpIHsK
LSAgICAgICAgcHJvbWlzZS5yZWplY3QoTk9UX1NVUFBPUlRFRF9FUlIsICJUaGUgb3BlcmF0aW9u
IGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRl
ZEVycm9yLCAiVGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0zMzYzLDcgKzMzNjMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1M
TWVkaWFFbGVtZW50OjpzZXRWb2x1bWUoZG91YmxlIHZvbHVtZSkKICAgICBMT0coTWVkaWEsICJI
VE1MTWVkaWFFbGVtZW50OjpzZXRWb2x1bWUoJXApIC0gJWYiLCB0aGlzLCB2b2x1bWUpOwogCiAg
ICAgaWYgKCEodm9sdW1lID49IDAgJiYgdm9sdW1lIDw9IDEpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChtX3ZvbHVtZSA9
PSB2b2x1bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAppbmRleCBh
ZTlhZjhkYmQ1MGVjMzNlYzk1OTM3Mzk3ZTA5N2YwNzMxZTBmZGE4Li45ZDU5OGY2NTc4MmMwNmUx
NjJiMWMxNWE4MjM3NjkxZTAzMDkyZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
RWxlbWVudC5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIEhU
TUxUYWJsZUVsZW1lbnQ6OnRIZWFkKCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxUYWJs
ZUVsZW1lbnQ6OnNldFRIZWFkKFJlZlB0cjxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4mJiBuZXdI
ZWFkKQogewogICAgIGlmIChVTkxJS0VMWShuZXdIZWFkICYmICFuZXdIZWFkLT5oYXNUYWdOYW1l
KHRoZWFkVGFnKSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBISUVSQVJDSFlfUkVRVUVT
VF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJv
ciB9OwogCiAgICAgZGVsZXRlVEhlYWQoKTsKICAgICBpZiAoIW5ld0hlYWQpCkBAIC0xMTQsNyAr
MTE0LDcgQEAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIEhUTUxUYWJsZUVsZW1lbnQ6OnRGb290
KCkgY29uc3QKIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxUYWJsZUVsZW1lbnQ6OnNldFRGb290KFJl
ZlB0cjxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4mJiBuZXdGb290KQogewogICAgIGlmIChVTkxJ
S0VMWShuZXdGb290ICYmICFuZXdGb290LT5oYXNUYWdOYW1lKHRmb290VGFnKSkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBISUVSQVJDSFlfUkVRVUVTVF9FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEhpZXJhcmNoeVJlcXVlc3RFcnJvciB9OwogICAgIGRlbGV0ZVRGb290
KCk7CiAgICAgaWYgKCFuZXdGb290KQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTg2LDcgKzE4
Niw3IEBAIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBIVE1MVGFibGVFbGVtZW50OjpsYXN0Qm9k
eSgpIGNvbnN0CiBFeGNlcHRpb25PcjxSZWY8SFRNTEVsZW1lbnQ+PiBIVE1MVGFibGVFbGVtZW50
OjppbnNlcnRSb3coaW50IGluZGV4KQogewogICAgIGlmIChpbmRleCA8IC0xKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICBSZWY8SFRNTFRhYmxlRWxlbWVudD4gcHJv
dGVjdGVkVGhpcygqdGhpcyk7CiAKQEAgLTE5OSw3ICsxOTksNyBAQCBFeGNlcHRpb25PcjxSZWY8
SFRNTEVsZW1lbnQ+PiBIVE1MVGFibGVFbGVtZW50OjppbnNlcnRSb3coaW50IGluZGV4KQogICAg
ICAgICAgICAgcm93ID0gSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246OnJvd0FmdGVyKCp0aGlzLCBs
YXN0Um93LmdldCgpKTsKICAgICAgICAgICAgIGlmICghcm93KSB7CiAgICAgICAgICAgICAgICAg
aWYgKGkgIT0gaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TkRFWF9TSVpFX0VSUiB9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW5kZXhTaXplRXJyb3IgfTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGxhc3RSb3cgPSByb3c7CkBAIC0yNDQsNyArMjQ0LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSFRNTFRhYmxlRWxlbWVudDo6ZGVsZXRlUm93KGludCBpbmRleCkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoIXJvdykKLSAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgfQogICAgIHJldHVybiByb3ctPnJl
bW92ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAK
aW5kZXggNjJlMjZjZWEzOTNmZmFlMzVlNjRiMDM4ZWVhMjE2NDNjNTFmNTA0Mi4uYzA0MzQ4ZDJl
YThmMzBlMDNhZmIyMGIwNjYxMTQzYzhlYmU3NDJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCkBAIC0xMTEsMTEgKzExMSwxMSBAQCBpbnQgSFRNTFRh
YmxlUm93RWxlbWVudDo6c2VjdGlvblJvd0luZGV4KCkgY29uc3QKIEV4Y2VwdGlvbk9yPFJlZjxI
VE1MVGFibGVDZWxsRWxlbWVudD4+IEhUTUxUYWJsZVJvd0VsZW1lbnQ6Omluc2VydENlbGwoaW50
IGluZGV4KQogewogICAgIGlmIChpbmRleCA8IC0xKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6
ZUVycm9yIH07CiAgICAgYXV0byBjaGlsZHJlbiA9IGNlbGxzKCk7CiAgICAgaW50IG51bUNlbGxz
ID0gY2hpbGRyZW4tPmxlbmd0aCgpOwogICAgIGlmIChpbmRleCA+IG51bUNlbGxzKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgYXV0byBjZWxsID0gSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgZG9jdW1lbnQoKSk7CiAgICAgRXhjZXB0aW9uT3I8dm9p
ZD4gcmVzdWx0OwogICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbnVtQ2VsbHMpCkBAIC0x
MzcsNyArMTM3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRhYmxlUm93RWxlbWVudDo6ZGVs
ZXRlQ2VsbChpbnQgaW5kZXgpCiAgICAgICAgIGluZGV4ID0gbnVtQ2VsbHMgLSAxOwogICAgIH0K
ICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG51bUNlbGxzKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEluZGV4U2l6ZUVycm9yIH07CiAgICAgcmV0dXJuIHJlbW92ZUNoaWxkKCpjaGlsZHJlbi0+aXRl
bShpbmRleCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQuY3BwCmluZGV4IDYwN2JjYTEwZDgwMGRmMDE1OGUxMGIxNTU5MzBlMjU4NWExMzgw
NDAuLjNlOWE3YTJhZGViZDE0NWVlNjA1NzdlZDc0MTQ5OTQ3OGJlNGI2NzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCkBAIC01OSwxMSAr
NTksMTEgQEAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6
YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVMKIEV4Y2VwdGlvbk9yPFJlZjxIVE1MRWxl
bWVudD4+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjppbnNlcnRSb3coaW50IGluZGV4KQogewog
ICAgIGlmIChpbmRleCA8IC0xKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0la
RV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAg
ICAgYXV0byBjaGlsZHJlbiA9IHJvd3MoKTsKICAgICBpbnQgbnVtUm93cyA9IGNoaWxkcmVuLT5s
ZW5ndGgoKTsKICAgICBpZiAoaW5kZXggPiBudW1Sb3dzKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4
U2l6ZUVycm9yIH07CiAgICAgYXV0byByb3cgPSBIVE1MVGFibGVSb3dFbGVtZW50OjpjcmVhdGUo
dHJUYWcsIGRvY3VtZW50KCkpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlc3VsdDsKICAgICBp
ZiAobnVtUm93cyA9PSBpbmRleCB8fCBpbmRleCA9PSAtMSkKQEAgLTg1LDcgKzg1LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmRlbGV0ZVJvdyhpbnQgaW5k
ZXgpCiAgICAgICAgIGluZGV4ID0gbnVtUm93cyAtIDE7CiAgICAgfQogICAgIGlmIChpbmRleCA8
IDAgfHwgaW5kZXggPj0gbnVtUm93cykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVY
X1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9
OwogICAgIHJldHVybiByZW1vdmVDaGlsZCgqY2hpbGRyZW4tPml0ZW0oaW5kZXgpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNw
cAppbmRleCAyMjYwNzM4ODA1OWI5ZjBhYjdjYWFmOTM2ZDZhYmM0MmZiZjc5MjFlLi5mNDU2MGY0
MTkyMWM2MjFjMzM1YmM5NmYyZTAzNGM3Y2U3NTUxOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMjIyLDcgKzIyMiw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRSYW5n
ZVRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlCiBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6c2V0UmFuZ2VUZXh0KGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGNvbnN0IFN0cmluZyYgc2VsZWN0aW9uTW9k
ZSkKIHsKICAgICBpZiAoc3RhcnQgPiBlbmQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJy
b3IgfTsKIAogICAgIFN0cmluZyB0ZXh0ID0gaW5uZXJUZXh0VmFsdWUoKTsKICAgICB1bnNpZ25l
ZCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKQEAgLTc3Nyw3ICs3NzcsNyBAQCBTdHJpbmcg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpcmVjdGlvbkZvckZvcm1EYXRhKCkgY29uc3QK
IEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRNYXhMZW5n
dGgoaW50IG1heExlbmd0aCkKIHsKICAgICBpZiAobWF4TGVuZ3RoIDwgMCB8fCAobV9taW5MZW5n
dGggPj0gMCAmJiBtYXhMZW5ndGggPCBtX21pbkxlbmd0aCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5k
ZXhTaXplRXJyb3IgfTsKICAgICBzZXRJbnRlZ3JhbEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyLCBt
YXhMZW5ndGgpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC03ODUsNyArNzg1LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE1heExlbmd0aChpbnQg
bWF4TGVuZ3RoKQogRXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNldE1pbkxlbmd0aChpbnQgbWluTGVuZ3RoKQogewogICAgIGlmIChtaW5MZW5ndGggPCAwIHx8
IChtX21heExlbmd0aCA+PSAwICYmIG1pbkxlbmd0aCA+IG1fbWF4TGVuZ3RoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIHNldEludGVncmFsQXR0cmlidXRlKG1pbmxl
bmd0aEF0dHIsIG1pbkxlbmd0aCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IGU5MjM2ZWUzMmVmMDQ4MjM5OTZiN2JmYTk5
Y2QzM2JhN2Q1YTI5M2EuLmVhMTQ5ZTg4YjdjZTYyNWVlM2E5ODBkNmUxZWNhMzhlMzkyYTU0YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApAQCAtMzEzLDcgKzMx
Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxWaWRlb0VsZW1lbnQ6OndlYmtpdEVudGVyRnVs
bHNjcmVlbigpCiAgICAgLy8gR2VuZXJhdGUgYW4gZXhjZXB0aW9uIGlmIHRoaXMgaXNuJ3QgY2Fs
bGVkIGluIHJlc3BvbnNlIHRvIGEgdXNlciBnZXN0dXJlLCBvciBpZiB0aGUgCiAgICAgLy8gZWxl
bWVudCBkb2VzIG5vdCBzdXBwb3J0IGZ1bGxzY3JlZW4uCiAgICAgaWYgKCFtZWRpYVNlc3Npb24o
KS5mdWxsc2NyZWVuUGVybWl0dGVkKCp0aGlzKSB8fCAhc3VwcG9ydHNGdWxsc2NyZWVuKEhUTUxN
ZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgZW50ZXJGdWxsc2NyZWVuKCk7
CiAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VE
YXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmNwcAppbmRleCBhYTdmZTMy
OTdlNjg4NDU5YmZmNWU2ZGJlMTM0ZDQyZWQ4ZTU5YjVjLi4yM2E2YWUwMTdlODMxY2IxZmU4ZmM1
ZWU0MmY1M2U1NTZkM2YwYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwCkBAIC0zOCw3
ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+
PiBJbWFnZURhdGE6OmNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gpCiB7CiAgICAgaWYg
KCFzdyB8fCAhc2gpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIENo
ZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gZGF0YVNpemUgPSA0OwogICAgIGRhdGFTaXplICo9
IHN3OwpAQCAtODEsMTggKzgxLDE4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBJ
bWFnZURhdGE6OmNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYgYnl0ZUFyCiB7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gYnl0ZUFycmF5LT5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8
fCBsZW5ndGggJSA0ICE9IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NU
QVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Ig
fTsKIAogICAgIGlmICghc3cpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpF
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAog
ICAgIGxlbmd0aCAvPSA0OwogICAgIGlmIChsZW5ndGggJSBzdyAhPSAwKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICB1bnNpZ25lZCBoZWlnaHQgPSBsZW5n
dGggLyBzdzsKICAgICBpZiAoc2ggJiYgc2ggIT0gaGVpZ2h0KQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAKICAgICByZXR1cm4gY3JlYXRlKEludFNpemUoc3csIGhlaWdodCks
IFdURk1vdmUoYnl0ZUFycmF5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKaW5kZXgg
ZTcxNWZmYjM5Y2FiMmQ3MDA2ZTBkMmI2ZjY2N2M5Y2FhYmY0NWUxOC4uNDBjMTAzM2VmNDQzNGYy
YzY0YWNmYmRmNDIxYTI0OTY4MTMyY2RhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcApA
QCAtMjI1LDcgKzIyNSw3IEBAIGRvdWJsZSBJbnB1dFR5cGU6OnZhbHVlQXNEYXRlKCkgY29uc3QK
IAogRXhjZXB0aW9uT3I8dm9pZD4gSW5wdXRUeXBlOjpzZXRWYWx1ZUFzRGF0ZShkb3VibGUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiB9CiAKIGRvdWJsZSBJbnB1
dFR5cGU6OnZhbHVlQXNEb3VibGUoKSBjb25zdApAQCAtMjQwLDcgKzI0MCw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IElucHV0VHlwZTo6c2V0VmFsdWVBc0RvdWJsZShkb3VibGUgZG91YmxlVmFsdWUs
IFRleHRGaWVsZEV2ZW50CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IElucHV0VHlwZTo6c2V0VmFsdWVB
c0RlY2ltYWwoY29uc3QgRGVjaW1hbCYsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiB9CiAKIGJvb2wgSW5wdXRUeXBlOjpz
dXBwb3J0c1ZhbGlkYXRpb24oKSBjb25zdApAQCAtOTgzLDE4ICs5ODMsMTggQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSW5wdXRUeXBlOjphcHBseVN0ZXAoaW50IGNvdW50LCBBbnlTdGVwSGFuZGxpbmcg
YW55U3RlcEhhbmRsaW4KIHsKICAgICBTdGVwUmFuZ2Ugc3RlcFJhbmdlKGNyZWF0ZVN0ZXBSYW5n
ZShhbnlTdGVwSGFuZGxpbmcpKTsKICAgICBpZiAoIXN0ZXBSYW5nZS5oYXNTdGVwKCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGNvbnN0IERlY2ltYWwg
Y3VycmVudCA9IHBhcnNlVG9OdW1iZXJPck5hTihlbGVtZW50KCkudmFsdWUoKSk7CiAgICAgaWYg
KCFjdXJyZW50LmlzRmluaXRlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElE
X1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IgfTsKICAgICBEZWNpbWFsIG5ld1ZhbHVlID0gY3VycmVudCArIHN0ZXBSYW5nZS5zdGVwKCkg
KiBjb3VudDsKICAgICBpZiAoIW5ld1ZhbHVlLmlzRmluaXRlKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGNvbnN0IERlY2ltYWwgYWNjZXB0YWJsZUVy
cm9yVmFsdWUgPSBzdGVwUmFuZ2UuYWNjZXB0YWJsZUVycm9yKCk7CiAgICAgaWYgKG5ld1ZhbHVl
IC0gc3RlcFJhbmdlLm1pbmltdW0oKSA8IC1hY2NlcHRhYmxlRXJyb3JWYWx1ZSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIGlmIChuZXdWYWx1ZSA8IHN0ZXBS
YW5nZS5taW5pbXVtKCkpCiAgICAgICAgIG5ld1ZhbHVlID0gc3RlcFJhbmdlLm1pbmltdW0oKTsK
IApAQCAtMTAwMiw3ICsxMDAyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW5wdXRUeXBlOjphcHBs
eVN0ZXAoaW50IGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW4KICAgICAgICAg
bmV3VmFsdWUgPSBzdGVwUmFuZ2UuYWxpZ25WYWx1ZUZvclN0ZXAoY3VycmVudCwgbmV3VmFsdWUp
OwogCiAgICAgaWYgKG5ld1ZhbHVlIC0gc3RlcFJhbmdlLm1heGltdW0oKSA+IGFjY2VwdGFibGVF
cnJvclZhbHVlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAg
aWYgKG5ld1ZhbHVlID4gc3RlcFJhbmdlLm1heGltdW0oKSkKICAgICAgICAgbmV3VmFsdWUgPSBz
dGVwUmFuZ2UubWF4aW11bSgpOwogCkBAIC0xMDMyLDcgKzEwMzIsNyBAQCBTdGVwUmFuZ2UgSW5w
dXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nKSBjb25zdAogRXhjZXB0aW9u
T3I8dm9pZD4gSW5wdXRUeXBlOjpzdGVwVXAoaW50IG4pCiB7CiAgICAgaWYgKCFpc1N0ZXBwYWJs
ZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgcmV0dXJu
IGFwcGx5U3RlcChuLCBSZWplY3RBbnksIERpc3BhdGNoTm9FdmVudCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAppbmRleCBmNTI3Y2QzOGExNDUzZjk0MzlhY2I5
YjRjY2JmOGUzZDhmMzgzOWIxLi40OTQwYTc5NjRiNjRiNzQ3YzJjMTg3NzhiMzQ0ZDNhNDU3NzNm
MWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCkBAIC0yNTYsNyAr
MjU2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTWVkaWFDb250cm9sbGVyOjpzZXRWb2x1bWUoZG91
YmxlIGxldmVsKQogICAgIC8vIElmIHRoZSBuZXcgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ug
MC4wIHRvIDEuMCBpbmNsdXNpdmUsIHRoZW4sIG9uIHNldHRpbmcsIGFuIAogICAgIC8vIEluZGV4
U2l6ZUVycm9yIGV4Y2VwdGlvbiBtdXN0IGJlIHJhaXNlZCBpbnN0ZWFkLgogICAgIGlmICghKGxl
dmVsID49IDAgJiYgbGV2ZWwgPD0gMSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRF
WF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3Ig
fTsKIAogICAgIC8vIFRoZSB2b2x1bWUgYXR0cmlidXRlLCBvbiBzZXR0aW5nLCBpZiB0aGUgbmV3
IHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLjAgdG8gMS4wIGluY2x1c2l2ZSwKICAgICAvLyBtdXN0
IHNldCB0aGUgTWVkaWFDb250cm9sbGVyJ3MgbWVkaWEgY29udHJvbGxlciB2b2x1bWUgbXVsdGlw
bGllciB0byB0aGUgbmV3IHZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL051
bWJlcklucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5j
cHAKaW5kZXggZmU2NzRhZWNkMjI4Nzg5N2Q4MDljNTY1M2E0YTYwYWVhMzMwZmU5NC4uMjIyNzIz
NjgxNDhmYmE5NzlmMTEwYjg1NDZhZWQ1YTcxNzRkYzRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
TnVtYmVySW5wdXRUeXBlLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IE51bWJlcklucHV0VHlwZTo6c2V0VmFsdWVBc0RvdWJsZShkb3VibGUgbmV3VmFsdWUsIFRleHRG
aWVsZEV2CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgbnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6bWF4IGZvciBudW1iZXIgaW5wdXQgdHlwZS4KICAgICBjb25zdCBkb3VibGUgZmxvYXRNYXgg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CiAgICAgaWYgKG5ld1ZhbHVlIDwg
LWZsb2F0TWF4IHx8IG5ld1ZhbHVlID4gZmxvYXRNYXgpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IgfTsKICAgICBlbGVtZW50KCkuc2V0VmFsdWUoc2VyaWFsaXplRm9yTnVt
YmVyVHlwZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZpb3IpOwogICAgIHJldHVybiB7IH07CiB9CkBA
IC0xMTgsNyArMTE4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTnVtYmVySW5wdXRUeXBlOjpzZXRW
YWx1ZUFzRGVjaW1hbChjb25zdCBEZWNpbWFsJiBuZXdWYWx1ZSwgVGUKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHVzZSBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXggZm9yIG51bWJlciBpbnB1
dCB0eXBlLgogICAgIGNvbnN0IERlY2ltYWwgZmxvYXRNYXggPSBEZWNpbWFsOjpmcm9tRG91Ymxl
KHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7CiAgICAgaWYgKG5ld1ZhbHVlIDwg
LWZsb2F0TWF4IHx8IG5ld1ZhbHVlID4gZmxvYXRNYXgpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IgfTsKICAgICBlbGVtZW50KCkuc2V0VmFsdWUoc2VyaWFsaXplRm9yTnVt
YmVyVHlwZShuZXdWYWx1ZSksIGV2ZW50QmVoYXZpb3IpOwogICAgIHJldHVybiB7IH07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVSYW5nZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9UaW1lUmFuZ2VzLmNwcAppbmRleCA3ZjY5NTg2OGJlNjk4ZGFkY2Q4NTM5YzMz
M2VhMWFlMzQ3MDkzODVhLi45NDk3Y2IxZDdkNTI0YWM5YTBjNzU0M2UxNGYyYjk1MTVkYWU5MWUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVSYW5nZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGltZVJhbmdlcy5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgRXhjZXB0
aW9uT3I8ZG91YmxlPiBUaW1lUmFuZ2VzOjpzdGFydCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAg
ICBib29sIHZhbGlkOwogICAgIE1lZGlhVGltZSByZXN1bHQgPSBtX3Jhbmdlcy5zdGFydChpbmRl
eCwgdmFsaWQpOwogICAgIGlmICghdmFsaWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJy
b3IgfTsKICAgICByZXR1cm4gcmVzdWx0LnRvRG91YmxlKCk7CiB9CiAKQEAgLTcxLDcgKzcxLDcg
QEAgRXhjZXB0aW9uT3I8ZG91YmxlPiBUaW1lUmFuZ2VzOjplbmQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CiAgICAgYm9vbCB2YWxpZDsKICAgICBNZWRpYVRpbWUgcmVzdWx0ID0gbV9yYW5nZXMuZW5k
KGluZGV4LCB2YWxpZCk7CiAgICAgaWYgKCF2YWxpZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNp
emVFcnJvciB9OwogICAgIHJldHVybiByZXN1bHQudG9Eb3VibGUoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCmluZGV4IDE4ZmFlMzFkNzRi
ZmY1NWRkMTAxNTkwZWI0MzZiNTZjOTFiNzZjOWQuLjc1MmQzMjA1YjBjYmIxMjAzMGUzN2RlYTNk
Y2I4ODk3NWM4NzQzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNH
cmFkaWVudC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRp
ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYKIEV4
Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUs
IGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2
YWx1ZSA8PSAxKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgLy8g
RklYTUU6IFBhc3NpbmcgbnVsbCBmb3IgY2FudmFzIG1lYW5zIHRoaXMgd29uJ3Qgd29yayBmb3Ig
Y3VycmVudCBjb2xvci4gSXMgdGhhdCBPSz8KICAgICBDb2xvciBjb2xvciA9IHBhcnNlQ29sb3JP
ckN1cnJlbnRDb2xvcihjb2xvclN0cmluZywgbnVsbHB0ciAvKmNhbnZhcyovKTsKQEAgLTUzLDcg
KzUzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzR3JhZGllbnQ6OmFkZENvbG9yU3RvcChm
bG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvclMKICAgICAgICAgaWYgKG1fZGFzaGJvYXJk
Q29tcGF0aWJpbGl0eU1vZGUpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogI2VuZGlmCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIH0KIAogICAgIG1fZ3JhZGllbnQtPmFkZENvbG9y
U3RvcCh2YWx1ZSwgY29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXRo
LmNwcAppbmRleCA3MzRhM2M4NTc1YmM4OWY0MDQ3NjQ0YzViMjI3MTdiNjBjNTc5ZTM2Li4xMjVl
NWM0ZmViMTJiMWRkNDU1OGZmMDdhMTEzMTc5NzBiZjBkZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNQYXRoLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IENhbnZhc1BhdGg6OmFyY1RvKGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZs
b2F0IHkyLCBmbG9hCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAociA8IDApCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIGlmICghaGFzSW52ZXJ0aWJsZVRy
YW5zZm9ybSgpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTU5LDcgKzE1OSw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IENhbnZhc1BhdGg6OmFyYyhmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByYWRp
dXMsIGZsb2F0IHN0YXJ0QW5nCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAocmFkaXVz
IDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgaWYgKCFoYXNJ
bnZlcnRpYmxlVHJhbnNmb3JtKCkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0xODIsNyArMTgy
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzUGF0aDo6ZWxsaXBzZShmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWQKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IGlmIChyYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNp
emVFcnJvciB9OwogCiAgICAgaWYgKCFoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkpCiAgICAgICAg
IHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA4YzMzY2Y0ZTM0ZGRiZTBmYTFlZTAwYzY5
Y2JjNWEwYmYzYzljYzI5Li5mZGIzMGVhMDM5N2Q1NDdkMzRmY2M3OTFhOTk0NDM3ZmM2MTM5MGRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKQEAgLTE0MTIsNyArMTQxMiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQmIGlt
YWdlRWxlCiAKICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZShpbWFnZUVsZW1lbnQsIEltYWdlU2l6ZVR5cGU6OkJlZm9yZURldmljZVBpeGVsUmF0
aW8pKTsKICAgICBpZiAoIXNyY1JlY3Qud2lkdGgoKSB8fCAhc3JjUmVjdC5oZWlnaHQoKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgLy8gV2hlbiB0aGUgc291cmNl
IHJlY3RhbmdsZSBpcyBvdXRzaWRlIHRoZSBzb3VyY2UgaW1hZ2UsIHRoZSBzb3VyY2UgcmVjdGFu
Z2xlIG11c3QgYmUgY2xpcHBlZAogICAgIC8vIHRvIHRoZSBzb3VyY2UgaW1hZ2UgYW5kIHRoZSBk
ZXN0aW5hdGlvbiByZWN0YW5nbGUgbXVzdCBiZSBjbGlwcGVkIGluIHRoZSBzYW1lIHByb3BvcnRp
b24uCkBAIC0xNDgwLDEwICsxNDgwLDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50JiBzb3VyY2VDCiAgICAg
RmxvYXRSZWN0IHNyY0NhbnZhc1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzb3VyY2VD
YW52YXMuc2l6ZSgpKTsKIAogICAgIGlmICghc3JjQ2FudmFzUmVjdC53aWR0aCgpIHx8ICFzcmND
YW52YXNSZWN0LmhlaWdodCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9T
VEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9y
IH07CiAKICAgICBpZiAoIXNyY1JlY3Qud2lkdGgoKSB8fCAhc3JjUmVjdC5oZWlnaHQoKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgaWYgKCFzcmNDYW52YXNSZWN0
LmNvbnRhaW5zKG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCkpIHx8ICFkc3RSZWN0LndpZHRoKCkgfHwg
IWRzdFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0xNTM5LDcgKzE1Mzks
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFn
ZShIVE1MVmlkZW9FbGVtZW50JiB2aWRlbywgYwogCiAgICAgRmxvYXRSZWN0IHZpZGVvUmVjdCA9
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUodmlkZW8pKTsKICAgICBpZiAoIXNyY1JlY3Qu
d2lkdGgoKSB8fCAhc3JjUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVF
cnJvciB9OwogCiAgICAgaWYgKCF2aWRlb1JlY3QuY29udGFpbnMobm9ybWFsaXplUmVjdChzcmNS
ZWN0KSkgfHwgIWRzdFJlY3Qud2lkdGgoKSB8fCAhZHN0UmVjdC5oZWlnaHQoKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKQEAgLTE3NjEsNyArMTc2MSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRGaWxsU3R5bGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdHlsZSYmIHN0
CiBFeGNlcHRpb25PcjxSZWY8Q2FudmFzR3JhZGllbnQ+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmNyZWF0ZUxpbmVhckdyYWRpZW50KGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZs
b2F0IHkxKQogewogICAgIGlmICghc3RkOjppc2Zpbml0ZSh4MCkgfHwgIXN0ZDo6aXNmaW5pdGUo
eTApIHx8ICFzdGQ6OmlzZmluaXRlKHgxKSB8fCAhc3RkOjppc2Zpbml0ZSh5MSkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGF1dG8gZ3JhZGllbnQgPSBD
YW52YXNHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoeDAsIHkwKSwgRmxvYXRQb2ludCh4MSwg
eTEpKTsKICAgICBwcmVwYXJlR3JhZGllbnRGb3JEYXNoYm9hcmQoZ3JhZGllbnQuZ2V0KCkpOwpA
QCAtMTc3MSwxMCArMTc3MSwxMCBAQCBFeGNlcHRpb25PcjxSZWY8Q2FudmFzR3JhZGllbnQ+PiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZUxpbmVhckdyYWRpZW50KAogRXhjZXB0aW9u
T3I8UmVmPENhbnZhc0dyYWRpZW50Pj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVS
YWRpYWxHcmFkaWVudChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHIwLCBmbG9hdCB4MSwgZmxv
YXQgeTEsIGZsb2F0IHIxKQogewogICAgIGlmICghc3RkOjppc2Zpbml0ZSh4MCkgfHwgIXN0ZDo6
aXNmaW5pdGUoeTApIHx8ICFzdGQ6OmlzZmluaXRlKHIwKSB8fCAhc3RkOjppc2Zpbml0ZSh4MSkg
fHwgIXN0ZDo6aXNmaW5pdGUoeTEpIHx8ICFzdGQ6OmlzZmluaXRlKHIxKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgaWYgKHIwIDwgMCB8fCByMSA8IDAp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgIGF1dG8gZ3JhZGllbnQg
PSBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoeDAsIHkwKSwgcjAsIEZsb2F0UG9p
bnQoeDEsIHkxKSwgcjEpOwogICAgIHByZXBhcmVHcmFkaWVudEZvckRhc2hib2FyZChncmFkaWVu
dC5nZXQoKSk7CkBAIC0xNzg1LDcgKzE3ODUsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFz
UGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihDYW52YQog
ewogICAgIGJvb2wgcmVwZWF0WCwgcmVwZWF0WTsKICAgICBpZiAoIUNhbnZhc1BhdHRlcm46OnBh
cnNlUmVwZXRpdGlvblR5cGUocmVwZXRpdGlvbiwgcmVwZWF0WCwgcmVwZWF0WSkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTeW50YXhFcnJvciB9OwogCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaW1hZ2UsCiAg
ICAgICAgIFsmXSAoYXV0byYgZWxlbWVudCkgLT4gRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1Bh
dHRlcm4+PiB7IHJldHVybiB0aGlzLT5jcmVhdGVQYXR0ZXJuKCplbGVtZW50LCByZXBlYXRYLCBy
ZXBlYXRZKTsgfQpAQCAtMTgwMSw3ICsxODAxLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZh
c1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4oSFRNTEkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoY2FjaGVkSW1hZ2UtPnN0YXR1cygp
ID09IENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IgfTsKIAogICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSBjYWNoZWRJbWFnZS0+aXNP
cmlnaW5DbGVhbihjYW52YXMoKS5zZWN1cml0eU9yaWdpbigpKTsKIApAQCAtMTgyMCw3ICsxODIw
LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4oSFRNTEkKIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQ
YXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEhUTUxDYW52
YXNFbGVtZW50JiBjYW52YXMsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQogewogICAgIGlm
ICghY2FudmFzLndpZHRoKCkgfHwgIWNhbnZhcy5oZWlnaHQoKSB8fCAhY2FudmFzLmJ1ZmZlcigp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAgICByZXR1cm4g
UmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKCpjYW52YXMuY29w
aWVkSW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLm9yaWdpbkNsZWFuKCkpIH07CiB9
CkBAIC0xOTYzLDcgKzE5NjMsNyBAQCBzdGF0aWMgUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1w
dHlJbWFnZURhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZUltYWdlRGF0YShJbWFnZURh
dGEqIGltYWdlRGF0YSkgY29uc3QKIHsKICAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1h
Z2VEYXRhKGltYWdlRGF0YS0+c2l6ZSgpKTsKIH0KQEAgLTE5NzEsNyArMTk3MSw3IEBAIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0
ZUltYWdlRGF0YShJbWFnZURhCiBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVJbWFnZURhdGEoZmxvYXQgc3csIGZsb2F0IHNoKSBj
b25zdAogewogICAgIGlmICghc3cgfHwgIXNoKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVy
cm9yIH07CiAKICAgICBGbG9hdFNpemUgbG9naWNhbFNpemUoc3RkOjphYnMoc3cpLCBzdGQ6OmFi
cyhzaCkpOwogICAgIGlmICghbG9naWNhbFNpemUuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQpA
QCAtMjAwMSwxMSArMjAwMSwxMSBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZQogICAgIGlmICgh
Y2FudmFzKCkub3JpZ2luQ2xlYW4oKSkgewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiBjb25zb2xlTWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5hYmxlIHRv
IGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzIGJlY2F1c2UgdGhlIGNhbnZhcyBoYXMgYmVlbiB0
YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBkYXRhLiIpKTsKICAgICAgICAgY2FudmFzKCkuZG9jdW1l
bnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxl
dmVsOjpFcnJvciwgY29uc29sZU1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9y
IH07CiAgICAgfQogCiAgICAgaWYgKCFzdyB8fCAhc2gpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhT
aXplRXJyb3IgfTsKIAogICAgIGlmIChzdyA8IDApIHsKICAgICAgICAgc3ggKz0gc3c7CkBAIC0y
MDM4LDcgKzIwMzgsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZQogICAgICAgICBjb25zb2xl
TWVzc2FnZS5hcHBlbmROdW1iZXIoaW1hZ2VEYXRhUmVjdC5oZWlnaHQoKSk7CiAKICAgICAgICAg
Y2FudmFzKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5k
ZXJpbmcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGNvbnNvbGVNZXNzYWdlLnRvU3RyaW5nKCkpOwot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgfQogCiAgICAgcmV0
dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVJlY3Quc2l6ZSgpLCBieXRlQXJyYXkucmVs
ZWFzZU5vbk51bGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IGQ5OGMwMjJiYWUxNGM0N2U1OGM1
MjAwNTIwMmIzYTkxNzliNDE5MzEuLjFhODg3M2ExYTIxYWJlZmVhYjMyNzUyMGU1OGM0Y2YyMjM1
MDUwYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC01MzkxLDcgKzUzOTEsNyBAQCBFeGNlcHRpb25P
cjxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1l
bnQoY29uc3QgY2hhcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh3b3Vs
ZFRhaW50T3JpZ2luKGltYWdlKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZ
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC01NDAyLDcgKzU0MDIsNyBAQCBFeGNlcHRpb25Pcjxib29s
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNv
bnN0IGNoYQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh3b3VsZFRhaW50
T3JpZ2luKGNhbnZhcykpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtNTQxNSw3ICs1NDE1LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNo
YXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAod291bGRUYWludE9yaWdp
bih2aWRlbykpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCmluZGV4IDc4ZmRh
MDQ4YmIwMjA3ODcxNGZmMTdkOThiOTcxYmY0MjQ2YTU4NTQuLjA1YjQxZTIxZjk4YTkxZDI2ZTA5
ZWMyNmNmMDA0NmZhMTJjNzUxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
ay5jcHAKQEAgLTI5NCw3ICsyOTQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBUZXh0VHJhY2s6OmFk
ZEN1ZShSZWY8VGV4dFRyYWNrQ3VlPiYmIGN1ZSkKICAgICAvLyB0cmFjayBraW5kIHNldCB0byBt
ZXRhZGF0YSwgdGhyb3cgYSBJbnZhbGlkTm9kZVR5cGVFcnJvciBleGNlcHRpb24gYW5kIGRvbid0
IGFkZCB0aGUgY3VlIHRvIHRoZSBUZXh0VHJhY2tMaXN0CiAgICAgLy8gb2YgdGhlIFRleHRUcmFj
ay4KICAgICBpZiAoY3VlLT5jdWVUeXBlKCkgPT0gVGV4dFRyYWNrQ3VlOjpEYXRhICYmIG1fa2lu
ZCAhPSBLaW5kOjpNZXRhZGF0YSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
Tk9ERV9UWVBFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVU
eXBlRXJyb3IgfTsKIAogICAgIC8vIFRPRE8oOTMxNDMpOiBBZGQgc3BlYy1jb21wbGlhbnQgYmVo
YXZpb3IgZm9yIG5lZ2F0aXZlIHRpbWUgdmFsdWVzLgogICAgIGlmICghY3VlLT5zdGFydE1lZGlh
VGltZSgpLmlzVmFsaWQoKSB8fCAhY3VlLT5lbmRNZWRpYVRpbWUoKS5pc1ZhbGlkKCkgfHwgY3Vl
LT5zdGFydE1lZGlhVGltZSgpIDwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpIHx8IGN1ZS0+ZW5kTWVk
aWFUaW1lKCkgPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkpCkBAIC0zMzIsOSArMzMyLDkgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gVGV4dFRyYWNrOjpyZW1vdmVDdWUoVGV4dFRyYWNrQ3VlJiBjdWUpCiAg
ICAgLy8gMS4gSWYgdGhlIGdpdmVuIGN1ZSBpcyBub3QgY3VycmVudGx5IGxpc3RlZCBpbiB0aGUg
bWV0aG9kJ3MgVGV4dFRyYWNrIAogICAgIC8vIG9iamVjdCdzIHRleHQgdHJhY2sncyB0ZXh0IHRy
YWNrIGxpc3Qgb2YgY3VlcywgdGhlbiB0aHJvdyBhIE5vdEZvdW5kRXJyb3IgZXhjZXB0aW9uLgog
ICAgIGlmIChjdWUudHJhY2soKSAhPSB0aGlzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJv
ciB9OwogICAgIGlmICghbV9jdWVzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CiAKICAgICAvLyAyLiBSZW1vdmUgY3VlIGZyb20gdGhlIG1ldGhvZCdzIFRleHRUcmFj
ayBvYmplY3QncyB0ZXh0IHRyYWNrJ3MgdGV4dCB0cmFjayBsaXN0IG9mIGN1ZXMuCiAgICAgbV9j
dWVzLT5yZW1vdmUoY3VlKTsKQEAgLTQwMyw3ICs0MDMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBU
ZXh0VHJhY2s6OnJlbW92ZVJlZ2lvbihWVFRSZWdpb24qIHJlZ2lvbikKICAgICAvLyAxLiBJZiB0
aGUgZ2l2ZW4gcmVnaW9uIGlzIG5vdCBjdXJyZW50bHkgbGlzdGVkIGluIHRoZSBtZXRob2QncyBU
ZXh0VHJhY2sKICAgICAvLyBvYmplY3QncyB0ZXh0IHRyYWNrIGxpc3Qgb2YgcmVnaW9ucywgdGhl
biB0aHJvdyBhIE5vdEZvdW5kRXJyb3IgZXhjZXB0aW9uLgogICAgIGlmIChyZWdpb24tPnRyYWNr
KCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAogICAgIEFTU0VS
VChtX3JlZ2lvbnMpOwogICAgIG1fcmVnaW9ucy0+cmVtb3ZlKCpyZWdpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9WVFRDdWUuY3BwCmluZGV4IGJjOTczMmJiMzJiOTUxNjZmNTYwZjVhMzhkMjAx
NTJiMDU4N2E1YmIuLjZhMTc5ZTg1YzNjNzgwYzBhZGIwOTVkMjQ0OWQwNWVmYjQ5OGNkMzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKQEAgLTM0Niw3ICszNDYsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBWVFRDdWU6OnNldFZlcnRpY2FsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgZWxzZSBpZiAodmFsdWUgPT0gdmVydGljYWxHcm93aW5nUmlnaHRLZXl3b3JkKCkpCiAgICAg
ICAgIGRpcmVjdGlvbiA9IFZlcnRpY2FsR3Jvd2luZ1JpZ2h0OwogICAgIGVsc2UKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiAgICAgCiAgICAgaWYgKGRpcmVjdGlvbiA9PSBtX3dyaXRpbmdE
aXJlY3Rpb24pCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0zNzQsNyArMzc0LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gVlRUQ3VlOjpzZXRMaW5lKGRvdWJsZSBwb3NpdGlvbikKICAgICAvLyBPbiBz
ZXR0aW5nLCBpZiB0aGUgdGV4dCB0cmFjayBjdWUgc25hcC10by1saW5lcyBmbGFnIGlzIG5vdCBz
ZXQsIGFuZCB0aGUgbmV3CiAgICAgLy8gdmFsdWUgaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFu
IDEwMCwgdGhlbiB0aHJvdyBhbiBJbmRleFNpemVFcnJvciBleGNlcHRpb24uCiAgICAgaWYgKCFt
X3NuYXBUb0xpbmVzICYmICEocG9zaXRpb24gPj0gMCAmJiBwb3NpdGlvbiA8PSAxMDApKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICAvLyBPdGhlcndpc2UsIHNldCB0
aGUgdGV4dCB0cmFjayBjdWUgbGluZSBwb3NpdGlvbiB0byB0aGUgbmV3IHZhbHVlLgogICAgIGlm
IChtX2xpbmVQb3NpdGlvbiA9PSBwb3NpdGlvbikKQEAgLTM5NCw3ICszOTQsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBWVFRDdWU6OnNldFBvc2l0aW9uKGRvdWJsZSBwb3NpdGlvbikKICAgICAvLyBP
biBzZXR0aW5nLCBpZiB0aGUgbmV3IHZhbHVlIGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiAx
MDAsIHRoZW4gdGhyb3cgYW4gSW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uLgogICAgIC8vIE90aGVy
d2lzZSwgc2V0IHRoZSB0ZXh0IHRyYWNrIGN1ZSB0ZXh0IHBvc2l0aW9uIHRvIHRoZSBuZXcgdmFs
dWUuCiAgICAgaWYgKCEocG9zaXRpb24gPj0gMCAmJiBwb3NpdGlvbiA8PSAxMDApKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUg
dGV4dCB0cmFjayBjdWUgbGluZSBwb3NpdGlvbiB0byB0aGUgbmV3IHZhbHVlLgogICAgIGlmICht
X3RleHRQb3NpdGlvbiA9PSBwb3NpdGlvbikKQEAgLTQxMyw3ICs0MTMsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBWVFRDdWU6OnNldFNpemUoaW50IHNpemUpCiAgICAgLy8gT24gc2V0dGluZywgaWYg
dGhlIG5ldyB2YWx1ZSBpcyBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gMTAwLCB0aGVuIHRocm93
IGFuIEluZGV4U2l6ZUVycm9yCiAgICAgLy8gZXhjZXB0aW9uLiBPdGhlcndpc2UsIHNldCB0aGUg
dGV4dCB0cmFjayBjdWUgc2l6ZSB0byB0aGUgbmV3IHZhbHVlLgogICAgIGlmICghKHNpemUgPj0g
MCAmJiBzaXplIDw9IDEwMCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpF
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAog
ICAgIC8vIE90aGVyd2lzZSwgc2V0IHRoZSB0ZXh0IHRyYWNrIGN1ZSBsaW5lIHBvc2l0aW9uIHRv
IHRoZSBuZXcgdmFsdWUuCiAgICAgaWYgKG1fY3VlU2l6ZSA9PSBzaXplKQpAQCAtNDY1LDcgKzQ2
NSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVEN1ZTo6c2V0QWxpZ24oY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICBlbHNlIGlmICh2YWx1ZSA9PSByaWdodEtleXdvcmQoKSkKICAgICAgICAgYWxp
Z25tZW50ID0gUmlnaHQ7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lO
VEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAg
ICAKICAgICBpZiAoYWxpZ25tZW50ID09IG1fY3VlQWxpZ25tZW50KQogICAgICAgICByZXR1cm4g
eyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRSZWdpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRSZWdpb24uY3BwCmluZGV4IGM2OWI0MjU3
YzY3ZGU2MmQwODkzYzk5YTc3NjAzNGUwZDZhMDI5NmQuLjhkZjRkMDMzYTUwMmVhYzg3Mzc1ZTRk
M2IyYWY3ODc3N2Q3OTFkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VlRUUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVFJlZ2lvbi5j
cHAKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBWVFRSZWdpb246OnNldElkKGNvbnN0IFN0cmluZyYg
aWQpCiBFeGNlcHRpb25Pcjx2b2lkPiBWVFRSZWdpb246OnNldFdpZHRoKGRvdWJsZSB2YWx1ZSkK
IHsKICAgICBpZiAoISh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDEwMCkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICBtX3dpZHRoID0gdmFsdWU7CiAgICAgcmV0dXJuIHsg
fTsKIH0KQEAgLTg5LDcgKzg5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gVlRUUmVnaW9uOjpzZXRX
aWR0aChkb3VibGUgdmFsdWUpCiBFeGNlcHRpb25Pcjx2b2lkPiBWVFRSZWdpb246OnNldEhlaWdo
dChpbnQgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRl
eFNpemVFcnJvciB9OwogICAgIG1faGVpZ2h0SW5MaW5lcyA9IHZhbHVlOwogICAgIHJldHVybiB7
IH07CiB9CkBAIC05Nyw3ICs5Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVFJlZ2lvbjo6c2V0
SGVpZ2h0KGludCB2YWx1ZSkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFZUVFJlZ2lvbjo6c2V0UmVnaW9u
QW5jaG9yWChkb3VibGUgdmFsdWUpCiB7CiAgICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2YWx1ZSA8
PSAxMDApKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgbV9yZWdpb25B
bmNob3Iuc2V0WCh2YWx1ZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTEwNSw3ICsxMDUsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBWVFRSZWdpb246OnNldFJlZ2lvbkFuY2hvclgoZG91YmxlIHZh
bHVlKQogRXhjZXB0aW9uT3I8dm9pZD4gVlRUUmVnaW9uOjpzZXRSZWdpb25BbmNob3JZKGRvdWJs
ZSB2YWx1ZSkKIHsKICAgICBpZiAoISh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDEwMCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICBtX3JlZ2lvbkFuY2hvci5zZXRZKHZh
bHVlKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTEzLDcgKzExMyw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFZUVFJlZ2lvbjo6c2V0UmVnaW9uQW5jaG9yWShkb3VibGUgdmFsdWUpCiBFeGNlcHRp
b25Pcjx2b2lkPiBWVFRSZWdpb246OnNldFZpZXdwb3J0QW5jaG9yWChkb3VibGUgdmFsdWUpCiB7
CiAgICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAxMDApKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEluZGV4U2l6ZUVycm9yIH07CiAgICAgbV92aWV3cG9ydEFuY2hvci5zZXRYKHZhbHVlKTsKICAg
ICByZXR1cm4geyB9OwogfQpAQCAtMTIxLDcgKzEyMSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFZU
VFJlZ2lvbjo6c2V0Vmlld3BvcnRBbmNob3JYKGRvdWJsZSB2YWx1ZSkKIEV4Y2VwdGlvbk9yPHZv
aWQ+IFZUVFJlZ2lvbjo6c2V0Vmlld3BvcnRBbmNob3JZKGRvdWJsZSB2YWx1ZSkKIHsKICAgICBp
ZiAoISh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDEwMCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhT
aXplRXJyb3IgfTsKICAgICBtX3ZpZXdwb3J0QW5jaG9yLnNldFkodmFsdWUpOwogICAgIHJldHVy
biB7IH07CiB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gVlRUUmVnaW9u
OjpzZXRTY3JvbGwoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgbV9zY3JvbGwg
PSB0cnVlOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KLSAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9Owog
fQogCiB2b2lkIFZUVFJlZ2lvbjo6dXBkYXRlUGFyYW1ldGVyc0Zyb21SZWdpb24oY29uc3QgVlRU
UmVnaW9uJiBvdGhlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggYTY5YjcyYmRlZjQ4Nzc5YjI4OWU0ODc3MDAw
NDc0NmRkYjBjNzI1MS4uZTM5YWQzZGU1ZTdkMDBhMzdhMzVmZDljM2IzMTk5ZTEzOWM4YzcyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAog
ICAgIGJvb2wgcXVvdGFFeGNlcHRpb24gPSBmYWxzZTsKICAgICBzdG9yYWdlQXJlYS0+c2V0SXRl
bShmcmFtZSwga2V5LCB2YWx1ZSwgcXVvdGFFeGNlcHRpb24pOwogICAgIGlmIChxdW90YUV4Y2Vw
dGlvbikKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBET01FeGNlcHRpb246Om5hbWUoUVVPVEFfRVhD
RUVERURfRVJSKTsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSBET01FeGNlcHRpb246Om5hbWUoUXVv
dGFFeGNlZWRlZEVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJl
bW92ZURPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDAwYjE0MmQyYjM5
MTZlNzllNGI3MDdhMTE3NWE2MDUyODUyMWU2NzIuLjRlYjJkODg0OGM2NDk0Zjk5YWE4MDMxMDk0
ZjFmYzdjZWM5NzU5M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5jcHAKQEAgLTU3Miw3ICs1NzIsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+
IEluc3BlY3RvclN0eWxlOjp0ZXh0KCkgY29uc3QKICAgICAvLyBQcmVjb25kaXRpb246IG1fcGFy
ZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkgaGFzIGJlZW4gY2FsbGVkIHN1
Y2Nlc3NmdWxseS4KICAgICBhdXRvIHNvdXJjZURhdGEgPSBleHRyYWN0U291cmNlRGF0YSgpOwog
ICAgIGlmICghc291cmNlRGF0YSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VO
RF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAog
ICAgIGF1dG8gcmVzdWx0ID0gbV9wYXJlbnRTdHlsZVNoZWV0LT50ZXh0KCk7CiAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKQEAgLTg1OCw3ICs4NTgsNyBAQCB2b2lkIEluc3BlY3RvclN0
eWxlU2hlZXQ6OnJlcGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdGV4dCkKIEV4Y2VwdGlv
bk9yPHZvaWQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KQogewogICAgIGlmICghbV9wYWdlU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RT
dXBwb3J0ZWRFcnJvciB9OwogCiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQp
OwogICAgIG1fZmxhdFJ1bGVzLmNsZWFyKCk7CkBAIC04NzAsNyArODcwLDcgQEAgRXhjZXB0aW9u
T3I8U3RyaW5nPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlU2VsZWN0b3IoY29uc3QgSW5zcGVj
dG9yQ1NTSWQmIGlkKQogewogICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVGb3JJZChpZCk7
CiAgICAgaWYgKCFydWxlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogICAgIHJl
dHVybiBydWxlLT5zZWxlY3RvclRleHQoKTsKIH0KIApAQCAtODg1LDE5ICs4ODUsMTkgQEAgc3Rh
dGljIGJvb2wgaXNWYWxpZFNlbGVjdG9yTGlzdFN0cmluZyhjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBEb2N1bWVudCogZG9jdW1lbnQKIEV4Y2VwdGlvbk9yPHZvaWQ+IEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnNldFJ1bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IpCiB7CiAgICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0KQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0b3IgaXMg
aW52YWxpZCwgZG8gbm90IHByb2NlZWQgYW55IGZ1cnRoZXIuCiAgICAgaWYgKCFpc1ZhbGlkU2Vs
ZWN0b3JMaXN0U3RyaW5nKHNlbGVjdG9yLCBtX3BhZ2VTdHlsZVNoZWV0LT5vd25lckRvY3VtZW50
KCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIENTU1N0eWxlUnVsZSogcnVs
ZSA9IHJ1bGVGb3JJZChpZCk7CiAgICAgaWYgKCFydWxlKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91
bmRFcnJvciB9OwogCiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVu
dFN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQgfHwgIWVuc3VyZVBhcnNlZERhdGFS
ZWFkeSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAgLy8gSWYgdGhl
IHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBtdXRhdGVkIGF0IHRoaXMgcG9pbnQsIHRoYXQgbXVzdCBt
ZWFuIHRoYXQgb3VyIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQKICAgICAvLyBlbHNld2hlcmUuIFRo
aXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBhcyBlbnN1cmVQYXJzZWREYXRhUmVhZHkgd291bGQgcmV0
dXJuIGZhbHNlIGluIHRoYXQgY2FzZS4KQEAgLTkwNiw3ICs5MDYsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9y
Q1NTSWQmIGlkLAogICAgIHJ1bGUtPnNldFNlbGVjdG9yVGV4dChzZWxlY3Rvcik7CiAgICAgYXV0
byBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IoJnJ1bGUtPnN0eWxlKCkpOwogICAgIGlm
ICghc291cmNlRGF0YSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAogICAgIFN0
cmluZyBzaGVldFRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKICAgICBzaGVldFRl
eHQucmVwbGFjZShzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEt
PnJ1bGVIZWFkZXJSYW5nZS5sZW5ndGgoKSwgc2VsZWN0b3IpOwpAQCAtOTE5LDEwICs5MTksMTAg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UnVsZVNlbGVjdG9y
KGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCwKIEV4Y2VwdGlvbk9yPENTU1N0eWxlUnVsZSo+IElu
c3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKICAg
ICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1Rf
U1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKIAogICAgIGlmICghaXNWYWxpZFNlbGVjdG9yTGlzdFN0cmluZyhzZWxlY3Rvciwg
bV9wYWdlU3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVy
cm9yIH07CiAKICAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7CiAgICAgaWYgKHRleHQuaGFz
RXhjZXB0aW9uKCkpCkBAIC05NjAsNyArOTYwLDcgQEAgRXhjZXB0aW9uT3I8Q1NTU3R5bGVSdWxl
Kj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQog
ICAgICAgICAvLyBXaGF0IHdlIGp1c3QgYWRkZWQgaGFzIHRvIGJlIGEgQ1NTU3R5bGVSdWxlIC0g
d2UgY2Fubm90IGhhbmRsZSBvdGhlciB0eXBlcyBvZiBydWxlcyB5ZXQuCiAgICAgICAgIC8vIElm
IGl0IGlzIG5vdCBhIHN0eWxlIHJ1bGUsIHByZXRlbmQgd2UgbmV2ZXIgdG91Y2hlZCB0aGUgc3R5
bGVzaGVldC4KICAgICAgICAgbV9wYWdlU3R5bGVTaGVldC0+ZGVsZXRlUnVsZShsYXN0UnVsZUlu
ZGV4KTsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgfQogCiAgICAgcmV0dXJuIHN0
eWxlUnVsZTsKQEAgLTk2OSwxOCArOTY5LDE4IEBAIEV4Y2VwdGlvbk9yPENTU1N0eWxlUnVsZSo+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIEV4
Y2VwdGlvbk9yPHZvaWQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUoY29uc3QgSW5z
cGVjdG9yQ1NTSWQmIGlkKQogewogICAgIGlmICghbV9wYWdlU3R5bGVTaGVldCkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgUmVmUHRyPENTU1N0eWxlUnVs
ZT4gcnVsZSA9IHJ1bGVGb3JJZChpZCk7CiAgICAgaWYgKCFydWxlKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90Rm91bmRFcnJvciB9OwogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBydWxlLT5w
YXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0IHx8ICFlbnN1cmVQYXJzZWRE
YXRhUmVhZHkoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAogICAgIGF1dG8g
c291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKCZydWxlLT5zdHlsZSgpKTsKICAgICBpZiAo
IXNvdXJjZURhdGEpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAKICAgICBhdXRv
IGRlbGV0ZVJ1bGVSZXN1bHQgPSBzdHlsZVNoZWV0LT5kZWxldGVSdWxlKGlkLm9yZGluYWwoKSk7
CiAgICAgaWYgKGRlbGV0ZVJ1bGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCkBAIC0xMjE4LDcgKzEy
MTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZVRl
eHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBjbwogewogICAgIGF1dG8gaW5zcGVjdG9yU3R5
bGUgPSBpbnNwZWN0b3JTdHlsZUZvcklkKGlkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAgaWYgKG9sZFRleHQpIHsKICAg
ICAgICAgYXV0byByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+dGV4dCgpOwpAQCAtMTIzNiw3ICsx
MjM2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0U3R5bGVU
ZXh0KGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCwgY28KIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6dGV4dCgpIGNvbnN0CiB7CiAgICAgaWYgKCFlbnN1cmVUZXh0KCkp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9VTkRfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAgICAgcmV0dXJuIFN0cmluZyB7IG1f
cGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpIH07CiB9CiAKQEAgLTEzNTcsMTggKzEzNTcsMTggQEAg
dm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVGbGF0UnVsZXMoKSBjb25zdAogRXhjZXB0
aW9uT3I8dm9pZD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0U3R5bGVUZXh0KENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgaWYgKCFtX3BhZ2VT
dHlsZVNoZWV0KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogICAgIGlmICghZW5z
dXJlUGFyc2VkRGF0YVJlYWR5KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfRk9V
TkRfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yIH07CiAK
ICAgICBTdHJpbmcgcGF0Y2hlZFN0eWxlU2hlZXRUZXh0OwogICAgIGJvb2wgc3VjY2VzcyA9IHN0
eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZShzdHlsZSwgdGV4dCwgJnBhdGNoZWRTdHlsZVNo
ZWV0VGV4dCk7CiAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJv
ciB9OwogCiAgICAgSW5zcGVjdG9yQ1NTSWQgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsKICAg
ICBpZiAoaWQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5E
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAg
ICAgYXV0byBzZXRDc3NUZXh0UmVzdWx0ID0gc3R5bGUtPnNldENzc1RleHQodGV4dCk7CiAgICAg
aWYgKHNldENzc1RleHRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAppbmRleCAz
MjJmNmIzMTMyODVlMjcyYjhlNWM1NWU5NzA2NmIxNDlkZDliMjk5Li5kMDhjM2YxZjE2NWRkNGIx
MGFkNzdkMjUzODdiMjc4OTgwYmM0ZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKQEAgLTUwOCw3ICs1MDgs
NyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpzd2FwQ2FjaGUoKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXdlciBjYWNoZSwgcmFp
c2UgYW4gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uLgorICAgIC8vIElmIHRoZXJlIGlzIG5v
IG5ld2VyIGNhY2hlLCByYWlzZSBhbiBJbnZhbGlkU3RhdGVFcnJvciBleGNlcHRpb24uCiAgICAg
YXV0byogbmV3ZXN0Q2FjaGUgPSBjYWNoZS0+Z3JvdXAoKS0+bmV3ZXN0Q2FjaGUoKTsKICAgICBp
ZiAoY2FjaGUgPT0gbmV3ZXN0Q2FjaGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNw
cAppbmRleCAzODU5YTFiYmRlY2MwY2YxNGQ1NTQ2OTFmMjQ4ZTVlOWU2ZWM0ZjdiLi4zMzYxMDkz
OWUwYjQwMDhiYjI2NmExMzIzMjczN2I0ZTdhYzU4MTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCkBAIC04NCw3
ICs4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTUFwcGxpY2F0aW9uQ2FjaGU6OnVwZGF0ZSgp
CiB7CiAgICAgYXV0byogaG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CiAgICAgaWYgKCFo
b3N0IHx8ICFob3N0LT51cGRhdGUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVF
cnJvciB9OwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTkyLDcgKzkyLDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gRE9NQXBwbGljYXRpb25DYWNoZTo6c3dhcENhY2hlKCkKIHsKICAgICBhdXRvKiBo
b3N0ID0gYXBwbGljYXRpb25DYWNoZUhvc3QoKTsKICAgICBpZiAoIWhvc3QgfHwgIWhvc3QtPnN3
YXBDYWNoZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAg
cmV0dXJuIHsgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9CYXNlNjRVdGlsaXRpZXMuY3BwCmlu
ZGV4IDg5YzkwNWQyNTNkMzBjMzdjZGRhYzg1YWRlOWE0M2U5M2Y5ZTkwMjEuLmUwOGExNmI0MDVm
NGEyMmFhOGNmY2Y1ODE3NDliMTRjYTA0ZDhkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQmFzZTY0VXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Jhc2U2
NFV0aWxpdGllcy5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNl
NjRVdGlsaXRpZXM6OmJ0b2EoY29uc3QgU3RyaW5nJiBzdHJpbmdUb0VuY29kZSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYgKCFzdHJpbmdUb0VuY29kZS5jb250YWluc09ubHlM
YXRpbjEoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07
CiAKICAgICByZXR1cm4gYmFzZTY0RW5jb2RlKHN0cmluZ1RvRW5jb2RlLmxhdGluMSgpKTsKIH0K
QEAgLTQ4LDcgKzQ4LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBCYXNlNjRVdGlsaXRpZXM6OmF0
b2IoY29uc3QgU3RyaW5nJiBlbmNvZGVkU3RyaW5nKQogCiAgICAgVmVjdG9yPGNoYXI+IG91dDsK
ICAgICBpZiAoIWJhc2U2NERlY29kZShlbmNvZGVkU3RyaW5nLCBvdXQsIEJhc2U2NFZhbGlkYXRl
UGFkZGluZyB8IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfQ0hBUkFDVEVSX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZENoYXJhY3RlckVycm9yIH07CiAKICAgICByZXR1cm4gU3RyaW5nKG91
dC5kYXRhKCksIG91dC5zaXplKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DcnlwdG8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCmluZGV4IDc3MmY1
OTU2MWQ1NGUzMTQxYTQ1NjM2YWNjNTI2Yjc1ZTRlNDAyYTAuLmVkMTI3OGJmODMzYmI2NjI5MTAx
MjNmM2VkYjFhZjU1OTBlYWExOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5
cHRvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAKQEAgLTU3LDkgKzU3
LDkgQEAgQ3J5cHRvOjp+Q3J5cHRvKCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0bzo6Z2V0UmFu
ZG9tVmFsdWVzKEFycmF5QnVmZmVyVmlldyYgYXJyYXkpCiB7CiAgICAgaWYgKCFpc0ludChhcnJh
eS5nZXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVFlQRV9NSVNNQVRDSF9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVNaXNtYXRjaEVycm9yIH07CiAg
ICAgaWYgKGFycmF5LmJ5dGVMZW5ndGgoKSA+IDY1NTM2KQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgUVVPVEFfRVhDRUVERURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBR
dW90YUV4Y2VlZGVkRXJyb3IgfTsKICNpZiBPUyhEQVJXSU4pCiAgICAgaW50IHJjID0gQ0NSYW5k
b21Db3B5Qnl0ZXMoa0NDUmFuZG9tRGVmYXVsdCwgYXJyYXkuYmFzZUFkZHJlc3MoKSwgYXJyYXku
Ynl0ZUxlbmd0aCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChyYyA9PSBrQ0NTdWNjZXNzKTsKQEAg
LTc5LDcgKzc5LDcgQEAgU3VidGxlQ3J5cHRvJiBDcnlwdG86OnN1YnRsZSgpCiBFeGNlcHRpb25P
cjxXZWJLaXRTdWJ0bGVDcnlwdG8mPiBDcnlwdG86OndlYmtpdFN1YnRsZSgpCiB7CiAgICAgaWYg
KCFpc01haW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JU
RURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9
OwogCiAgICAgaWYgKCFtX3dlYmtpdFN1YnRsZSkgewogICAgICAgICBtX3dlYmtpdFN1YnRsZSA9
IFdlYktpdFN1YnRsZUNyeXB0bzo6Y3JlYXRlKCpkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNl
bGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXgg
MTIwY2EyY2I0NDQ4Zjg5NDFhNDIxZDAzZTljYzUyYzU5YjU0YTQ3NS4uMGZkNzM5NzRkOTkyY2I5
MWYxOTIyMGRjZWVkMmVjNWQ0Y2VjMGE4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6
Y29sbGFwc2VUb0VuZCgpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYgc2VsZWN0aW9u
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgUmVmPEZyYW1lPiBw
cm90ZWN0b3IoKm1fZnJhbWUpOwogICAgIHNlbGVjdGlvbi5tb3ZlVG8oc2VsZWN0aW9uLnNlbGVj
dGlvbigpLmVuZCgpLCBET1dOU1RSRUFNKTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBET01TZWxlY3Rpb246OmNvbGxhcHNlVG9TdGFydCgpCiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgaWYg
KHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
U1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciB9OwogCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKm1fZnJhbWUpOwogICAgIHNlbGVjdGlv
bi5tb3ZlVG8oc2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCksIERPV05TVFJFQU0pOwpAQCAt
MjgwLDcgKzI4MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6ZXh0ZW5kKE5v
ZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgaWYgKG9mZnNldCA+IChub2RlLm9mZnNldEluQ2hhcmFjdGVycygpID8g
Y2FyZXRNYXhPZmZzZXQobm9kZSkgOiBub2RlLmNvdW50Q2hpbGROb2RlcygpKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbmRleFNpemVFcnJvciB9OwogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKCZu
b2RlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMjkyLDcgKzI5Miw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6ZXh0ZW5kKE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNl
dCkKIEV4Y2VwdGlvbk9yPFJlZjxSYW5nZT4+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCh1bnNp
Z25lZCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gcmFuZ2VDb3VudCgpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAgICAvLyBJZiB5b3UncmUgaGl0dGluZyB0aGlz
LCB5b3UndmUgYWRkZWQgYnJva2VuIG11bHRpLXJhbmdlIHNlbGVjdGlvbiBzdXBwb3J0LgogICAg
IEFTU0VSVChyYW5nZUNvdW50KCkgPT0gMSk7CkBAIC0zMDYsNyArMzA2LDcgQEAgRXhjZXB0aW9u
T3I8UmVmPFJhbmdlPj4gRE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KHVuc2lnbmVkIGluZGV4KQog
ICAgIGF1dG8gZmlyc3RSYW5nZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKTsKICAgICBBU1NFUlQoZmlyc3RSYW5nZSk7CiAgICAgaWYgKCFmaXJzdFJhbmdl
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAgICAgcmV0dXJuIGZpcnN0UmFu
Z2UucmVsZWFzZU5vbk51bGwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4
IDlkMTk0NmYyYmU2NGVjOWY2MDI1YTFhZTE5Yzc2MzExMGM4MGY1YzYuLmVkNzRmNWY2NTI1MjRm
NmM1ZjM1YWU4NjdkYjdmZDUwZjdmMzVlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAK
QEAgLTYyOSwxMSArNjI5LDExIEBAIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSYgRE9NV2luZG93Ojpl
bnN1cmVDdXN0b21FbGVtZW50UmVnaXN0cnkoKQogc3RhdGljIEV4Y2VwdGlvbk9yPFNlbGVjdG9y
UXVlcnkmPiBzZWxlY3RvclF1ZXJ5SW5GcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYg
c2VsZWN0b3JzKQogewogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3Vw
cG9ydGVkRXJyb3IgfTsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVu
dCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1Rf
U1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+c2VsZWN0b3JRdWVyeUZvclN0cmluZyhz
ZWxlY3RvcnMpOwogfQpAQCAtODc1LDExICs4NzUsMTEgQEAgRXhjZXB0aW9uT3I8U3RvcmFnZSo+
IERPTVdpbmRvdzo6c2Vzc2lvblN0b3JhZ2UoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGlmICghZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNzU2Vzc2lv
blN0b3JhZ2UoZG9jdW1lbnQtPnRvcE9yaWdpbigpKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlF
cnJvciB9OwogCiAgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2UpIHsKICAgICAgICAgaWYgKCFtX3Nl
c3Npb25TdG9yYWdlLT5hcmVhKCkuY2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKLSAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAgICAgICAgIHJldHVybiBtX3Nlc3Npb25T
dG9yYWdlLmdldCgpOwogICAgIH0KIApAQCAtODg5LDcgKzg4OSw3IEBAIEV4Y2VwdGlvbk9yPFN0
b3JhZ2UqPiBET01XaW5kb3c6OnNlc3Npb25TdG9yYWdlKCkgY29uc3QKIAogICAgIGF1dG8gc3Rv
cmFnZUFyZWEgPSBwYWdlLT5zZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYShTZWN1cml0eU9y
aWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkp
OwogICAgIGlmICghc3RvcmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBTdG9y
YWdlOjpjcmVhdGUobV9mcmFtZSwgV1RGTW92ZShzdG9yYWdlQXJlYSkpOwogICAgIHJldHVybiBt
X3Nlc3Npb25TdG9yYWdlLmdldCgpOwpAQCAtOTA1LDcgKzkwNSw3IEBAIEV4Y2VwdGlvbk9yPFN0
b3JhZ2UqPiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgaWYgKCFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3NM
b2NhbFN0b3JhZ2UobnVsbHB0cikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklU
WV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKIAog
ICAgIGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwogICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgY29uc2lkZXIgc3VwcG9ydGluZyBhY2Nlc3MvbW9kaWZpY2F0aW9uIHRvIGxvY2FsIHN0b3Jh
Z2UKQEAgLTkxMyw3ICs5MTMsNyBAQCBFeGNlcHRpb25PcjxTdG9yYWdlKj4gRE9NV2luZG93Ojps
b2NhbFN0b3JhZ2UoKSBjb25zdAogICAgIGlmICghcGFnZSB8fCAhcGFnZS0+aXNDbG9zaW5nKCkp
IHsKICAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlKSB7CiAgICAgICAgICAgICBpZiAoIW1fbG9j
YWxTdG9yYWdlLT5hcmVhKCkuY2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3IgfTsKICAgICAgICAgICAgIHJldHVybiBt
X2xvY2FsU3RvcmFnZS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTkzMCw3ICs5MzAsNyBA
QCBFeGNlcHRpb25PcjxTdG9yYWdlKj4gRE9NV2luZG93Ojpsb2NhbFN0b3JhZ2UoKSBjb25zdAog
ICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBwYWdlLT5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoKS5s
b2NhbFN0b3JhZ2VBcmVhKCpkb2N1bWVudCk7CiAKICAgICBpZiAoIXN0b3JhZ2VBcmVhLT5jYW5B
Y2Nlc3NTdG9yYWdlKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJ
VFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAK
ICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShtX2ZyYW1lLCBXVEZNb3ZlKHN0
b3JhZ2VBcmVhKSk7CiAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwpAQCAtOTQ0LDcg
Kzk0NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGluY3VtCiAgICAgRG9jdW1lbnQqIHNvdXJjZURv
Y3VtZW50ID0gaW5jdW1iZW50V2luZG93LmRvY3VtZW50KCk7CiAKICAgICAvLyBDb21wdXRlIHRo
ZSB0YXJnZXQgb3JpZ2luLiAgV2UgbmVlZCB0byBkbyB0aGlzIHN5bmNocm9ub3VzbHkgaW4gb3Jk
ZXIKLSAgICAvLyB0byBnZW5lcmF0ZSB0aGUgU1lOVEFYX0VSUiBleGNlcHRpb24gY29ycmVjdGx5
LgorICAgIC8vIHRvIGdlbmVyYXRlIHRoZSBTeW50YXhFcnJvciBleGNlcHRpb24gY29ycmVjdGx5
LgogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gdGFyZ2V0OwogICAgIGlmICh0YXJnZXRPcmln
aW4gPT0gIi8iKSB7CiAgICAgICAgIGlmICghc291cmNlRG9jdW1lbnQpCkBAIC05NTUsNyArOTU1
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NV2luZG93Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgaW5jdW0KICAgICAgICAgLy8gSXQgZG9lc24ndCBtYWtl
IHNlbnNlIHRhcmdldCBhIHBvc3RNZXNzYWdlIGF0IGEgdW5pcXVlIG9yaWdpbgogICAgICAgICAv
LyBiZWNhdXNlIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlcHJlc2VudCBhIHVuaXF1ZSBvcmlnaW4gaW4g
YSBzdHJpbmcuCiAgICAgICAgIGlmICh0YXJnZXQtPmlzVW5pcXVlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgfQogCiAgICAgVmVjdG9yPFJlZlB0cjxNZXNzYWdl
UG9ydD4+IHBvcnRzOwpAQCAtMTY3MCw3ICsxNjcwLDcgQEAgRXhjZXB0aW9uT3I8aW50PiBET01X
aW5kb3c6OnNldFRpbWVvdXQoc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9u
LAogewogICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAg
aWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
ICAgICByZXR1cm4gRE9NVGltZXI6Omluc3RhbGwoKmNvbnRleHQsIFdURk1vdmUoYWN0aW9uKSwg
U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyh0aW1lb3V0KSwgdHJ1ZSk7CiB9CiAKQEAgLTE3MDIs
NyArMTcwMiw3IEBAIEV4Y2VwdGlvbk9yPGludD4gRE9NV2luZG93OjpzZXRJbnRlcnZhbChzdGQ6
OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24sCiB7CiAgICAgYXV0byogY29udGV4
dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHJldHVybiBET01UaW1lcjo6
aW5zdGFsbCgqY29udGV4dCwgV1RGTW92ZShhY3Rpb24pLCBTZWNvbmRzOjpmcm9tTWlsbGlzZWNv
bmRzKHRpbWVvdXQpLCBmYWxzZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAK
aW5kZXggNTRiMGQ2MTk1ZmFmOThiYjBiNjI5NTQ5Y2ZmMjViM2ZkNmE2YmFjOC4uM2Q0NzM1ZjYy
NDdhMGQ4ODViY2JmMzJhYzRmZjI2YWFkNGM0MTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNv
dXJjZS5jcHAKQEAgLTYwLDE2ICs2MCwxNiBAQCBpbmxpbmUgRXZlbnRTb3VyY2U6OkV2ZW50U291
cmNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFVSTCYgdXJsLAogRXhj
ZXB0aW9uT3I8UmVmPEV2ZW50U291cmNlPj4gRXZlbnRTb3VyY2U6OmNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgSW5pdCYgZXZl
bnRTb3VyY2VJbml0KQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3lu
dGF4RXJyb3IgfTsKIAogICAgIFVSTCBmdWxsVVJMID0gY29udGV4dC5jb21wbGV0ZVVSTCh1cmwp
OwogICAgIGlmICghZnVsbFVSTC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBjaGVjayB0aGUgaXNvbGF0ZWQgd29y
bGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBvbmNlIHdlYmtpdC5vcmcvYi8xMDQ1MjAgaXMg
cmVzb2x2ZWQuCiAgICAgaWYgKCFjb250ZXh0LnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRT
ZWN1cml0eVBvbGljeSgpICYmICFjb250ZXh0LmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxv
d0Nvbm5lY3RUb1NvdXJjZShmdWxsVVJMKSkgewogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRo
aXMgYmUgdGhyb3dpbmcgYW4gZXhjZXB0aW9uPwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9y
IH07CiAgICAgfQogCiAgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IEV2ZW50U291cmNl
KGNvbnRleHQsIGZ1bGxVUkwsIGV2ZW50U291cmNlSW5pdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5j
cHAKaW5kZXggZDFjNGNkNDhiMmUyNWYzNzc3NzJlMjFhYmY5OGEyNmM0ZTA3YzQ3MS4uZjQ1ZTE2
YWRmNzY1ZDU0NzY3ZGE2MWFhMDZjZDI1OWRjMmRkZDBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9IaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rvcnku
Y3BwCkBAIC02Miw3ICs2Miw3IEBAIHVuc2lnbmVkIEhpc3Rvcnk6Omxlbmd0aCgpIGNvbnN0CiBF
eGNlcHRpb25PcjxIaXN0b3J5OjpTY3JvbGxSZXN0b3JhdGlvbj4gSGlzdG9yeTo6c2Nyb2xsUmVz
dG9yYXRpb24oKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2Vj
dXJpdHlFcnJvciB9OwogCiAgICAgYXV0byogaGlzdG9yeUl0ZW0gPSBtX2ZyYW1lLT5sb2FkZXIo
KS5oaXN0b3J5KCkuY3VycmVudEl0ZW0oKTsKICAgICBpZiAoIWhpc3RvcnlJdGVtKQpAQCAtNzQs
NyArNzQsNyBAQCBFeGNlcHRpb25PcjxIaXN0b3J5OjpTY3JvbGxSZXN0b3JhdGlvbj4gSGlzdG9y
eTo6c2Nyb2xsUmVzdG9yYXRpb24oKSBjb25zdAogRXhjZXB0aW9uT3I8dm9pZD4gSGlzdG9yeTo6
c2V0U2Nyb2xsUmVzdG9yYXRpb24oU2Nyb2xsUmVzdG9yYXRpb24gc2Nyb2xsUmVzdG9yYXRpb24p
CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJ
VFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07CiAK
ICAgICBhdXRvKiBoaXN0b3J5SXRlbSA9IG1fZnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5jdXJy
ZW50SXRlbSgpOwogICAgIGlmIChoaXN0b3J5SXRlbSkKQEAgLTE3NSwxMiArMTc1LDEyIEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEhpc3Rvcnk6OnN0YXRlT2JqZWN0QWRkZWQoUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4mJiBkYXRhCiAKICAgICBVUkwgZnVsbFVSTCA9IHVybEZvclN0YXRlKHVy
bFN0cmluZyk7CiAgICAgaWYgKCFmdWxsVVJMLmlzVmFsaWQoKSB8fCAhbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5SZXF1ZXN0KGZ1bGxVUkwpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTZWN1cml0eUVycm9yIH07CiAKICAgICBpZiAoZnVsbFVSTC5oYXNVc2VybmFtZSgpIHx8IGZ1
bGxVUkwuaGFzUGFzc3dvcmQoKSkgewogICAgICAgICBpZiAoc3RhdGVPYmplY3RUeXBlID09IFN0
YXRlT2JqZWN0VHlwZTo6UmVwbGFjZSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
RUNVUklUWV9FUlIsICJBdHRlbXB0IHRvIHVzZSBoaXN0b3J5LnJlcGxhY2VTdGF0ZSgpIHRvIGNo
YW5nZSBzZXNzaW9uIGhpc3RvcnkgVVJMIHRvICIgKyBmdWxsVVJMLnN0cmluZygpICsgIiBpcyBp
bnNlY3VyZTsgVXNlcm5hbWUvcGFzc3dvcmRzIGFyZW4ndCBhbGxvd2VkIGluIHN0YXRlIG9iamVj
dCBVUkxzIiB9OwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSLCAiQXR0
ZW1wdCB0byB1c2UgaGlzdG9yeS5wdXNoU3RhdGUoKSB0byBhZGQgVVJMICIgKyBmdWxsVVJMLnN0
cmluZygpICsgIiB0byBzZXNzaW9uIGhpc3RvcnkgaXMgaW5zZWN1cmU7IFVzZXJuYW1lL3Bhc3N3
b3JkcyBhcmVuJ3QgYWxsb3dlZCBpbiBzdGF0ZSBvYmplY3QgVVJMcyIgfTsKKyAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yLCAiQXR0ZW1wdCB0byB1c2UgaGlzdG9y
eS5yZXBsYWNlU3RhdGUoKSB0byBjaGFuZ2Ugc2Vzc2lvbiBoaXN0b3J5IFVSTCB0byAiICsgZnVs
bFVSTC5zdHJpbmcoKSArICIgaXMgaW5zZWN1cmU7IFVzZXJuYW1lL3Bhc3N3b3JkcyBhcmVuJ3Qg
YWxsb3dlZCBpbiBzdGF0ZSBvYmplY3QgVVJMcyIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFNlY3VyaXR5RXJyb3IsICJBdHRlbXB0IHRvIHVzZSBoaXN0b3J5LnB1c2hTdGF0ZSgpIHRv
IGFkZCBVUkwgIiArIGZ1bGxVUkwuc3RyaW5nKCkgKyAiIHRvIHNlc3Npb24gaGlzdG9yeSBpcyBp
bnNlY3VyZTsgVXNlcm5hbWUvcGFzc3dvcmRzIGFyZW4ndCBhbGxvd2VkIGluIHN0YXRlIG9iamVj
dCBVUkxzIiB9OwogICAgIH0KIAogICAgIERvY3VtZW50KiBtYWluRG9jdW1lbnQgPSBtX2ZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCk7CkBAIC0yMDEsOCArMjAxLDggQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSGlzdG9yeTo6c3RhdGVPYmplY3RBZGRlZChSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiYmIGRhdGEKICAgICAKICAgICBpZiAobWFpbkhpc3RvcnktPm1fY3VycmVu
dFN0YXRlT2JqZWN0VGltZVNwYW5PYmplY3RzQWRkZWQgPj0gcGVyU3RhdGVPYmplY3RUaW1lU3Bh
bkxpbWl0KSB7CiAgICAgICAgIGlmIChzdGF0ZU9iamVjdFR5cGUgPT0gU3RhdGVPYmplY3RUeXBl
OjpSZXBsYWNlKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiwg
U3RyaW5nOjpmb3JtYXQoIkF0dGVtcHQgdG8gdXNlIGhpc3RvcnkucmVwbGFjZVN0YXRlKCkgbW9y
ZSB0aGFuICV1IHRpbWVzIHBlciAlZiBzZWNvbmRzIiwgcGVyU3RhdGVPYmplY3RUaW1lU3Bhbkxp
bWl0LCBzdGF0ZU9iamVjdFRpbWVTcGFuKSB9OwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U0VDVVJJVFlfRVJSLCBTdHJpbmc6OmZvcm1hdCgiQXR0ZW1wdCB0byB1c2UgaGlzdG9yeS5wdXNo
U3RhdGUoKSBtb3JlIHRoYW4gJXUgdGltZXMgcGVyICVmIHNlY29uZHMiLCBwZXJTdGF0ZU9iamVj
dFRpbWVTcGFuTGltaXQsIHN0YXRlT2JqZWN0VGltZVNwYW4pIH07CisgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgU3RyaW5nOjpmb3JtYXQoIkF0dGVtcHQgdG8g
dXNlIGhpc3RvcnkucmVwbGFjZVN0YXRlKCkgbW9yZSB0aGFuICV1IHRpbWVzIHBlciAlZiBzZWNv
bmRzIiwgcGVyU3RhdGVPYmplY3RUaW1lU3BhbkxpbWl0LCBzdGF0ZU9iamVjdFRpbWVTcGFuKSB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgU3RyaW5nOjpmb3Jt
YXQoIkF0dGVtcHQgdG8gdXNlIGhpc3RvcnkucHVzaFN0YXRlKCkgbW9yZSB0aGFuICV1IHRpbWVz
IHBlciAlZiBzZWNvbmRzIiwgcGVyU3RhdGVPYmplY3RUaW1lU3BhbkxpbWl0LCBzdGF0ZU9iamVj
dFRpbWVTcGFuKSB9OwogICAgIH0KIAogICAgIENoZWNrZWQ8dW5zaWduZWQ+IHRpdGxlU2l6ZSA9
IHRpdGxlLmxlbmd0aCgpOwpAQCAtMjIzLDggKzIyMyw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhp
c3Rvcnk6OnN0YXRlT2JqZWN0QWRkZWQoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBk
YXRhCiAKICAgICBpZiAobmV3VG90YWxVc2FnZSA+IHRvdGFsU3RhdGVPYmplY3RQYXlsb2FkTGlt
aXQpIHsKICAgICAgICAgaWYgKHN0YXRlT2JqZWN0VHlwZSA9PSBTdGF0ZU9iamVjdFR5cGU6OlJl
cGxhY2UpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUVVPVEFfRVhDRUVERURfRVJS
LCBBU0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gc3RvcmUgbW9yZSBkYXRhIHRoYW4gYWxsb3dlZCB1
c2luZyBoaXN0b3J5LnJlcGxhY2VTdGF0ZSgpIikgfTsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFFVT1RBX0VYQ0VFREVEX0VSUiwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0IHRvIHN0b3JlIG1v
cmUgZGF0YSB0aGFuIGFsbG93ZWQgdXNpbmcgaGlzdG9yeS5wdXNoU3RhdGUoKSIpIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUXVvdGFFeGNlZWRlZEVycm9yLCBBU0NJSUxpdGVy
YWwoIkF0dGVtcHQgdG8gc3RvcmUgbW9yZSBkYXRhIHRoYW4gYWxsb3dlZCB1c2luZyBoaXN0b3J5
LnJlcGxhY2VTdGF0ZSgpIikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFF1b3RhRXhj
ZWVkZWRFcnJvciwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0IHRvIHN0b3JlIG1vcmUgZGF0YSB0aGFu
IGFsbG93ZWQgdXNpbmcgaGlzdG9yeS5wdXNoU3RhdGUoKSIpIH07CiAgICAgfQogCiAgICAgbV9t
b3N0UmVjZW50U3RhdGVPYmplY3RVc2FnZSA9IHBheWxvYWRTaXplLnVuc2FmZUdldCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0xvY2F0aW9uLmNwcAppbmRleCA4ZmMxMmQ0ZDg2YjcyOWY5YmU4MjM0ZWYzMjEzYjQ0
MWZjOTQ2YTcwLi5kNWUwZTkxNjNmYjIwYjVmOTgzZjNhYzVkYmFmNTkzZGI0NmVhMTUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0xvY2F0aW9uLmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IExvY2F0aW9uOjpzZXRQcm90b2NvbChET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywgRE9NV2lu
ZG93JiBmaXJzCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgVVJMIHVybCA9IG1fZnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpOwogICAgIGlmICghdXJsLnNldFByb3RvY29sKHByb3RvY29sKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgcmV0dXJuIHNldExvY2F0aW9uKGFjdGl2ZVdp
bmRvdywgZmlyc3RXaW5kb3csIHVybC5zdHJpbmcoKSk7CiB9CiAKQEAgLTI4Myw3ICsyODMsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBMb2NhdGlvbjo6c2V0TG9jYXRpb24oRE9NV2luZG93JiBhY3Rp
dmVXaW5kb3csIERPTVdpbmRvdyYgZmlycwogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICBp
ZiAoIWFjdGl2ZVdpbmRvdy5kb2N1bWVudCgpLT5jYW5OYXZpZ2F0ZShtX2ZyYW1lKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgp
KTsKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpOwogICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5zZXRMb2NhdGlvbihhY3RpdmVXaW5kb3cs
IGZpcnN0V2luZG93LCB1cmwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZVVzZXJUaW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVz
ZXJUaW1pbmcuY3BwCmluZGV4IGFjNmJlNzI4MzYwNmVmMDkxMDBmMGJiNzJlM2Y5MjIzZDQyZTg2
NjAuLjg2YTIzNWM3OWZmMDBhYjAzYzkyZjI1YmEyODkzZGEwZjViNWQxYWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKQEAgLTkwLDcgKzkwLDcg
QEAgc3RhdGljIHZvaWQgY2xlYXJQZXJmb3JtYW5jZUVudHJpZXMoUGVyZm9ybWFuY2VFbnRyeU1h
cCYgbWFwLCBjb25zdCBTdHJpbmcmIG5hbWUKIEV4Y2VwdGlvbk9yPFJlZjxQZXJmb3JtYW5jZU1h
cms+PiBVc2VyVGltaW5nOjptYXJrKGNvbnN0IFN0cmluZyYgbWFya05hbWUpCiB7CiAgICAgaWYg
KGlzPERvY3VtZW50PihtX3BlcmZvcm1hbmNlLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgJiYg
cmVzdHJpY3RlZE1hcmtGdW5jdGlvbihtYXJrTmFtZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwogCiAgICAgYXV0byYgcGVyZm9ybWFuY2VFbnRyeUxpc3QgPSBtX21hcmtzTWFwLmVuc3Vy
ZShtYXJrTmFtZSwgW10geyByZXR1cm4gVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5jZUVudHJ5Pj4o
KTsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGF1dG8gZW50cnkgPSBQZXJmb3JtYW5jZU1hcms6
OmNyZWF0ZShtYXJrTmFtZSwgbV9wZXJmb3JtYW5jZS5ub3coKSk7CkBAIC0xMTEsMTYgKzExMSwx
NiBAQCBFeGNlcHRpb25Pcjxkb3VibGU+IFVzZXJUaW1pbmc6OmZpbmRFeGlzdGluZ01hcmtTdGFy
dFRpbWUoY29uc3QgU3RyaW5nJiBtYXJrTmFtZQogCiAgICAgYXV0byogdGltaW5nID0gbV9wZXJm
b3JtYW5jZS50aW1pbmcoKTsKICAgICBpZiAoIXRpbWluZykKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNZTlRBWF9FUlIsIG1ha2VTdHJpbmcoIk5vIG1hcmsgbmFtZWQgJyIsIG1hcmtOYW1l
LCAiJyBleGlzdHMiKSB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3Is
IG1ha2VTdHJpbmcoIk5vIG1hcmsgbmFtZWQgJyIsIG1hcmtOYW1lLCAiJyBleGlzdHMiKSB9Owog
CiAgICAgaWYgKGF1dG8gZnVuY3Rpb24gPSByZXN0cmljdGVkTWFya0Z1bmN0aW9uKG1hcmtOYW1l
KSkgewogICAgICAgICBkb3VibGUgdmFsdWUgPSAoKCp0aW1pbmcpLiooZnVuY3Rpb24pKSgpOwog
ICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQUNDRVNTX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogICAgICAgICByZXR1cm4gdmFsdWUgLSB0aW1pbmctPm5hdmlnYXRpb25T
dGFydCgpOwogICAgIH0KIAotICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07Cisg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKIEV4Y2VwdGlvbk9yPFJl
ZjxQZXJmb3JtYW5jZU1lYXN1cmU+PiBVc2VyVGltaW5nOjptZWFzdXJlKGNvbnN0IFN0cmluZyYg
bWVhc3VyZU5hbWUsIGNvbnN0IFN0cmluZyYgc3RhcnRNYXJrLCBjb25zdCBTdHJpbmcmIGVuZE1h
cmspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5jcHAKaW5kZXggMTYx
NTM0NDI1MmVkNWIwNTgxMmZlMjhiMmJiMmFmYTBjNTYyNTU0ZC4uYTRkMDVkMDY0MGY5ZGYzMmEx
ODhiYmE3Mjg4NDNmMzkyOWFhZWIyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9V
c2VyTWVzc2FnZUhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3Nh
Z2VIYW5kbGVyLmNwcApAQCAtNDgsNyArNDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBVc2VyTWVz
c2FnZUhhbmRsZXI6OnBvc3RNZXNzYWdlKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Jgog
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZGVzY3JpcHRvciBoYXMgYmVlbiByZW1vdmVkLiBU
aGlzIGNhbiBoYXBwZW4gaWYgdGhlIGhvc3QgYXBwbGljYXRpb24gaGFzCiAgICAgLy8gcmVtb3Zl
ZCB0aGUgbmFtZWQgbWVzc2FnZSBoYW5kbGVyIGF0IHRoZSBXZWJLaXQyIEFQSSBsZXZlbC4KICAg
ICBpZiAoIW1fZGVzY3JpcHRvcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CiAKICAgICBtX2Rlc2NyaXB0b3ItPmRpZFBvc3RNZXNzYWdlKCp0aGlzLCB2YWx1ZS5n
ZXQoKSk7CiAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaAppbmRleCA2ZGZlNTUyOGE3Y2M0ZDg5NTZhZDhk
ZTlhYmQxNmJkYWVhODI1OTg3Li41MWI1MWQ0ZTA4YTNkZDNlZmIwOWEwMTFlMzI5NzRkMjhiNzlk
Zjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUVuZHBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFFbmRwb2ludC5oCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBlbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmKSB7IH07CiAKLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0U3RhdHMoTWVkaWFTdHJlYW1UcmFjayosIFBlZXJDb25uZWN0aW9uOjpTdGF0c1By
b21pc2UmJiBwcm9taXNlKSB7IHByb21pc2UucmVqZWN0KE5PVF9TVVBQT1JURURfRVJSKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBnZXRTdGF0cyhNZWRpYVN0cmVhbVRyYWNrKiwgUGVlckNvbm5lY3Rp
b246OlN0YXRzUHJvbWlzZSYmIHByb21pc2UpIHsgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVk
RXJyb3IpOyB9CiB9OwogCiBjbGFzcyBNZWRpYUVuZHBvaW50Q2xpZW50IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5jcHAKaW5kZXggZmJlNzY3OWFlMjY2ODY3YjA1OGQ4ZDUwMWQwYTE0
Njc1MTNmYzJhNS4uNzYzZmIyZWRmNjIwOGE5MWJiZDcwOWFjYmVmMTRhOTU0MTNkYjhiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzZXREZXZpY2VFbmFibGVk
KGNvbnN0IFN0cmluZyYgaWQsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVy
cm9yIH07CiB9CiAKIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OkRldmljZXNDaGFuZ2VkT2Jz
ZXJ2ZXJUb2tlbiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjphZGREZXZpY2VzQ2hhbmdlZE9i
c2VydmVyKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIG9ic2VydmVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZS5jcHAKaW5kZXggYmE2ZTI4YWJkODFkNThhNzcxNGFlOTMwYThmOTQyNGJlZjdmZWRk
MC4uYWM5YTE2NmZjNmE3ZDQwMThlMmE0ZDk5MWNkNTdiZGRjMzk1ODEwMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2UuY3BwCkBAIC02MCw3ICs2MCw3IEBAIFN0b3JhZ2U6On5TdG9yYWdlKCkK
IEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBTdG9yYWdlOjpsZW5ndGgoKSBjb25zdAogewogICAgIGlm
ICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmxlbmd0aCgp
OwogfQpAQCAtNjgsNyArNjgsNyBAQCBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gU3RvcmFnZTo6bGVu
Z3RoKCkgY29uc3QKIEV4Y2VwdGlvbk9yPFN0cmluZz4gU3RvcmFnZTo6a2V5KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAogewogICAgIGlmICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZSht
X2ZyYW1lKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgcmV0dXJuIG1f
c3RvcmFnZUFyZWEtPmtleShpbmRleCk7CiB9CkBAIC03Niw3ICs3Niw3IEBAIEV4Y2VwdGlvbk9y
PFN0cmluZz4gU3RvcmFnZTo6a2V5KHVuc2lnbmVkIGluZGV4KSBjb25zdAogRXhjZXB0aW9uT3I8
U3RyaW5nPiBTdG9yYWdlOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogewogICAg
IGlmICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPml0ZW0o
a2V5KTsKIH0KQEAgLTg0LDE5ICs4NCwxOSBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IFN0b3JhZ2U6
OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiBFeGNlcHRpb25Pcjx2b2lkPiBTdG9y
YWdlOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewog
ICAgIGlmICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbiA9IGZh
bHNlOwogICAgIG1fc3RvcmFnZUFyZWEtPnNldEl0ZW0obV9mcmFtZSwga2V5LCB2YWx1ZSwgcXVv
dGFFeGNlcHRpb24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFFVT1RBX0VYQ0VFREVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgUXVvdGFFeGNlZWRlZEVycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogRXhjZXB0aW9u
T3I8dm9pZD4gU3RvcmFnZTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBp
ZiAoIW1fc3RvcmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFNlY3VyaXR5RXJyb3IgfTsKIAogICAgIG1fc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0obV9m
cmFtZSwga2V5KTsKICAgICByZXR1cm4geyB9OwpAQCAtMTA1LDcgKzEwNSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFN0b3JhZ2U6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCiBFeGNlcHRp
b25Pcjx2b2lkPiBTdG9yYWdlOjpjbGVhcigpCiB7CiAgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5j
YW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VD
VVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTZWN1cml0eUVycm9yIH07
CiAKICAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcihtX2ZyYW1lKTsKICAgICByZXR1cm4geyB9OwpA
QCAtMTE0LDcgKzExNCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OmNsZWFyKCkKIEV4
Y2VwdGlvbk9yPGJvb2w+IFN0b3JhZ2U6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25z
dAogewogICAgIGlmICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgcmV0dXJuIG1fc3RvcmFnZUFy
ZWEtPmNvbnRhaW5zKGtleSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QWx0R2x5cGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1l
bnQuY3BwCmluZGV4IGI5YjU2NTkxMGUyNGQ4Y2VkNDU1NDA5MjU2Yzg2NzBkMTg5NWJhMzcuLjVj
ODlhMDFhN2ViYTY5MzY1ZDE4NjBhNmYwYmVmMzJmMWU3NTNiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCkBAIC01Niw3ICs1Niw3IEBAIFJlZjxTVkdBbHRH
bHlwaEVsZW1lbnQ+IFNWR0FsdEdseXBoRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsCiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FsdEdseXBoRWxlbWVudDo6c2V0
R2x5cGhSZWYoY29uc3QgQXRvbWljU3RyaW5nJikKIHsKLSAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
TW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZH
QWx0R2x5cGhFbGVtZW50OjpnbHlwaFJlZigpIGNvbnN0CkBAIC02Niw3ICs2Niw3IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgU1ZHQWx0R2x5cGhFbGVtZW50OjpnbHlwaFJlZigpIGNvbnN0CiAKIEV4
Y2VwdGlvbk9yPHZvaWQ+IFNWR0FsdEdseXBoRWxlbWVudDo6c2V0Rm9ybWF0KGNvbnN0IEF0b21p
Y1N0cmluZyYpCiB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRF
cnJvciB9OwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNWR0FsdEdseXBoRWxlbWVudDo6Zm9y
bWF0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZS5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgKaW5kZXggZTAzMTg0ZmFlNmE5ZjU1NjBhMGUw
MGMyY2YxYjY3YjAzNjM3NzcxMC4uMDQzMjk0M2FlYmI0NGZhMGFjM2NmYmQyNGZiNWE5YTU4NDMz
ZWUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAg
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlRm9yQmluZGluZ3MoZmxvYXQgdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgcHJvcGVy
dHlSZWZlcmVuY2UoKS5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpA
QCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVJ
blNwZWNpZmllZFVuaXRzKGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKICAgICB7CiAgICAg
ICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBwcm9wZXJ0eVJlZmVy
ZW5jZSgpLnNldFZhbHVlSW5TcGVjaWZpZWRVbml0cyh2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwog
ICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBhdXRv
IHJlc3VsdCA9IHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAg
ICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVi
bGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IG5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWdu
ZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKICAgICB7CiAg
ICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBhdXRvIHJlc3Vs
dCA9IHByb3BlcnR5UmVmZXJlbmNlKCkubmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bml0VHlwZSwg
dmFsdWVJblNwZWNpZmllZFVuaXRzKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY29u
dmVydFRvU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCiAgICAgewogICAg
ICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgYXV0byByZXN1bHQg
PSBwcm9wZXJ0eVJlZmVyZW5jZSgpLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuaXRUeXBlKTsK
ICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmds
ZVZhbHVlLmNwcAppbmRleCA0ZWY1YWVkYWQxYzU2MTMyMjBjN2FmYzc3OGFjZGM1OWMyM2IxYThj
Li41OWNkNzY5NDE5OThiYzA4MTNkNjY1YWViYWZiYzExMDkxNzlhNzgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCkBAIC0xMTIsMTEgKzExMiwxMSBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBTVkdBbmdsZVZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAKICAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwogICAgIGlmICghcGFyc2VO
dW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IgfTsKIAogICAgIGF1dG8gdW5pdFR5cGUgPSBwYXJzZUFuZ2xlVHlwZShw
dHIsIGVuZCk7CiAgICAgaWYgKHVuaXRUeXBlID09IFNWR19BTkdMRVRZUEVfVU5LTk9XTikKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7CiAg
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CkBAIC0x
MjYsNyArMTI2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdWVB
c1N0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogRXhjZXB0aW9uT3I8dm9pZD4gU1ZHQW5nbGVW
YWx1ZTo6bmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZmxv
YXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKQogewogICAgIGlmICh1bml0VHlwZSA9PSBTVkdfQU5H
TEVUWVBFX1VOS05PV04gfHwgdW5pdFR5cGUgPiBTVkdfQU5HTEVUWVBFX0dSQUQpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIG1fdW5pdFR5cGUgPSBzdGF0
aWNfY2FzdDxUeXBlPih1bml0VHlwZSk7CiAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2
YWx1ZUluU3BlY2lmaWVkVW5pdHM7CkBAIC0xMzYsNyArMTM2LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gU1ZHQW5nbGVWYWx1ZTo6bmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1
bml0VHlwZSwKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6OmNvbnZlcnRUb1NwZWNp
ZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQogewogICAgIGlmICh1bml0VHlwZSA9
PSBTVkdfQU5HTEVUWVBFX1VOS05PV04gfHwgbV91bml0VHlwZSA9PSBTVkdfQU5HTEVUWVBFX1VO
S05PV04gfHwgdW5pdFR5cGUgPiBTVkdfQU5HTEVUWVBFX0dSQUQpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGlmICh1bml0VHlwZSA9PSBtX3VuaXRUeXBl
KQogICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5oCmluZGV4IDNhODQ4MmYz
YTlhYjNkMzE2NTg2MzY2YzcxNjg5Njg0MDRiNjU5NzQuLmNjODkxMTA2NTg4MjYyMzlhNDIzNmFm
ZDQ2MTkyNjFkZjQzZWQzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmgKQEAgLTgyLDcgKzgyLDcg
QEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlRm9yQmluZGluZ3MoZmxv
YXQgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAK
ICAgICAgICAgYXV0byByZXN1bHQgPSBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldFZhbHVlKHZhbHVl
LCBTVkdMZW5ndGhDb250ZXh0IHsgY29udGV4dEVsZW1lbnQoKSB9KTsKICAgICAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKGZsb2F0IHZhbHVlSW5TcGVj
aWZpZWRVbml0cykKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsK
IAogICAgICAgICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldFZhbHVlSW5TcGVjaWZpZWRVbml0cyh2
YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTExNiw3
ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkK
LSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlSZWZlcmVuY2UoKS5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gbmV3
VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZmxvYXQgdmFsdWVJ
blNwZWNpZmllZFVuaXRzKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsK
KyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJv
ciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlSZWZlcmVuY2UoKS5uZXdWYWx1
ZVNwZWNpZmllZFVuaXRzKHVuaXRUeXBlLCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwogICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpAQCAtMTQyLDcgKzE0Miw3IEBAIHB1YmxpYzoK
ICAgICBFeGNlcHRpb25Pcjx2b2lkPiBjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBz
aG9ydCB1bml0VHlwZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07Cisg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3Ig
fTsKIAogICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3BlcnR5UmVmZXJlbmNlKCkuY29udmVydFRv
U3BlY2lmaWVkVW5pdHModW5pdFR5cGUsIFNWR0xlbmd0aENvbnRleHQgeyBjb250ZXh0RWxlbWVu
dCgpIH0pOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCmluZGV4IGZjZWNkZjlhYmVlYTJmMmE5ZjViOGYzMjU0
N2M3MDdjZjZlZWEzZWMuLjA5OTA2ZTczOThmMDBkZTZhYjYzNjk2MDBkZjM5NjQ4ZGYxNWM0MmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKQEAgLTEyMiw3ICsxMjIs
NyBAQCBFeGNlcHRpb25PcjxmbG9hdD4gU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlVG9V
c2VyVW5pdHMoZmxvYXQgdmFsdWUsIFNWR0xlbgogCiAgICAgc3dpdGNoIChmcm9tVW5pdCkgewog
ICAgIGNhc2UgTGVuZ3RoVHlwZVVua25vd246Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T1RfU1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9y
dGVkRXJyb3IgfTsKICAgICBjYXNlIExlbmd0aFR5cGVOdW1iZXI6CiAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICBjYXNlIExlbmd0aFR5cGVQWDoKQEAgLTE1Myw3ICsxNTMsNyBAQCBFeGNlcHRp
b25PcjxmbG9hdD4gU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0cyhm
bG9hdCB2YWx1ZSwgU1ZHTAogewogICAgIHN3aXRjaCAodG9Vbml0KSB7CiAgICAgY2FzZSBMZW5n
dGhUeXBlVW5rbm93bjoKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9Owog
ICAgIGNhc2UgTGVuZ3RoVHlwZU51bWJlcjoKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIGNh
c2UgTGVuZ3RoVHlwZVBlcmNlbnRhZ2U6CkBAIC0xODQsNyArMTg0LDcgQEAgRXhjZXB0aW9uT3I8
ZmxvYXQ+IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb1BlcmNl
bnRhZ2UoZmxvYXQKIHsKICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwogICAgIGlmICghZGV0
ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciB9OwogCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBMZW5ndGhNb2Rl
V2lkdGg6CkBAIC0yMDMsNyArMjAzLDcgQEAgRXhjZXB0aW9uT3I8ZmxvYXQ+IFNWR0xlbmd0aENv
bnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21QZXJjZW50YWdlVG9Vc2VyVW5pdHMoZmxvYXQKIHsKICAg
ICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwogICAgIGlmICghZGV0ZXJtaW5lVmlld3BvcnQodmll
d3BvcnRTaXplKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAg
ICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBMZW5ndGhNb2RlV2lkdGg6CkBAIC0yMzksMTEg
KzIzOSwxMSBAQCBFeGNlcHRpb25PcjxmbG9hdD4gU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZh
bHVlRnJvbVVzZXJVbml0c1RvRU1TKGZsb2F0IHZhbHVlKQogewogICAgIGF1dG8qIHN0eWxlID0g
cmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxl
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICBmbG9hdCBm
b250U2l6ZSA9IHN0eWxlLT5jb21wdXRlZEZvbnRQaXhlbFNpemUoKTsKICAgICBpZiAoIWZvbnRT
aXplKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKICAgICByZXR1
cm4gdmFsdWUgLyBmb250U2l6ZTsKIH0KQEAgLTI1Miw3ICsyNTIsNyBAQCBFeGNlcHRpb25Pcjxm
bG9hdD4gU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKGZs
b2F0IHZhbHVlKQogewogICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNv
bHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
dFN1cHBvcnRlZEVycm9yIH07CiAKICAgICByZXR1cm4gdmFsdWUgKiBzdHlsZS0+Y29tcHV0ZWRG
b250UGl4ZWxTaXplKCk7CiB9CkBAIC0yNjEsMTMgKzI2MSwxMyBAQCBFeGNlcHRpb25PcjxmbG9h
dD4gU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRVhTKGZsb2F0
IHZhbHVlKQogewogICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZp
bmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1
cHBvcnRlZEVycm9yIH07CiAKICAgICAvLyBVc2Ugb2YgY2VpbCBhbGxvd3MgYSBwaXhlbCBtYXRj
aCB0byB0aGUgVzNDcyBleHBlY3RlZCBvdXRwdXQgb2YgY29vcmRzLXVuaXRzLTAzLWIuc3ZnCiAg
ICAgLy8gaWYgdGhpcyBjYXVzZXMgcHJvYmxlbXMgaW4gcmVhbCB3b3JsZCBjYXNlcyBtYXliZSBp
dCB3b3VsZCBiZSBiZXN0IHRvIHJlbW92ZSB0aGlzCiAgICAgZmxvYXQgeEhlaWdodCA9IHN0ZDo6
Y2VpbChzdHlsZS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCkpOwogICAgIGlmICgheEhlaWdodCkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgcmV0dXJuIHZh
bHVlIC8geEhlaWdodDsKIH0KQEAgLTI3Niw3ICsyNzYsNyBAQCBFeGNlcHRpb25PcjxmbG9hdD4g
U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0IHZh
bHVlKQogewogICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmco
bV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBv
cnRlZEVycm9yIH07CiAKICAgICAvLyBVc2Ugb2YgY2VpbCBhbGxvd3MgYSBwaXhlbCBtYXRjaCB0
byB0aGUgVzNDcyBleHBlY3RlZCBvdXRwdXQgb2YgY29vcmRzLXVuaXRzLTAzLWIuc3ZnCiAgICAg
Ly8gaWYgdGhpcyBjYXVzZXMgcHJvYmxlbXMgaW4gcmVhbCB3b3JsZCBjYXNlcyBtYXliZSBpdCB3
b3VsZCBiZSBiZXN0IHRvIHJlbW92ZSB0aGlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGVuZ3RoVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVl
LmNwcAppbmRleCA4ZjU2MzA1ZWY3NjRmYmQ4NjE5MGM5MjlmMTA1YjFjZDUxYTg2MDMyLi4wNWUw
YTM5MGQ2MTYwNDk4NTc1MGZiZWZhMDExYWM2ZTBiM2Q4YzVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhWYWx1ZS5jcHAKQEAgLTIxOSwxMSArMjE5LDExIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQog
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7CiAKICAgICBpZiAo
IXBhcnNlTnVtYmVyKHB0ciwgZW5kLCBjb252ZXJ0ZWROdW1iZXIsIGZhbHNlKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvIHR5cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRy
LCBlbmQpOwogICAgIGlmICh0eXBlID09IExlbmd0aFR5cGVVbmtub3duKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKIAogICAgIG1fdW5pdCA9IHN0b3JlVW5pdChleHRyYWN0TW9kZShtX3Vu
aXQpLCB0eXBlKTsKICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IGNvbnZlcnRlZE51bWJl
cjsKQEAgLTIzOCw3ICsyMzgsNyBAQCBTdHJpbmcgU1ZHTGVuZ3RoVmFsdWU6OnZhbHVlQXNTdHJp
bmcoKSBjb25zdAogRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6Om5ld1ZhbHVlU3Bl
Y2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdHlwZSwgZmxvYXQgdmFsdWUpCiB7CiAgICAgaWYg
KHR5cGUgPT0gTGVuZ3RoVHlwZVVua25vd24gfHwgdHlwZSA+IExlbmd0aFR5cGVQQykKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07CisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgbV91bml0ID0gc3RvcmVV
bml0KGV4dHJhY3RNb2RlKG1fdW5pdCksIHN0YXRpY19jYXN0PFNWR0xlbmd0aFR5cGU+KHR5cGUp
KTsKICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IHZhbHVlOwpAQCAtMjQ4LDcgKzI0OCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpuZXdWYWx1ZVNwZWNpZmllZFVu
aXRzKHVuc2lnbmVkIHNob3J0IHR5cGUsIGZsCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhW
YWx1ZTo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdHlwZSwgY29uc3Qg
U1ZHTGVuZ3RoQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAodHlwZSA9PSBMZW5ndGhUeXBl
VW5rbm93biB8fCB0eXBlID4gTGVuZ3RoVHlwZVBDKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTk9UX1NVUFBPUlRFRF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1
cHBvcnRlZEVycm9yIH07CiAKICAgICBhdXRvIHZhbHVlSW5Vc2VyVW5pdHMgPSB2YWx1ZUZvckJp
bmRpbmdzKGNvbnRleHQpOwogICAgIGlmICh2YWx1ZUluVXNlclVuaXRzLmhhc0V4Y2VwdGlvbigp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcAppbmRleCAzNDdiMGNiNTlmMTM5MzExZTJi
ZDYyZjNmN2MzNzlmMDIzNzE3Y2FkLi4yZjg2NjE0NGUyZDAyZmQwMDhhMDdlODU1MDg5ZGE5YzUw
MDA4MmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcApAQCAtMTA2LDcgKzEwNiw3
IEBAIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+PiBTVkdMb2NhdGFibGU6OmdldFRyYW5zZm9y
bVRvRWxlbWVudChTVkdFbGVtZW50KiB0YXJnCiAgICAgICAgIGlmIChhdXRvIGludmVyc2UgPSB0
YXJnZXRDVE0uaW52ZXJzZSgpKQogICAgICAgICAgICAgY3RtID0gaW52ZXJzZS52YWx1ZSgpICog
Y3RtOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9TVEFURV9FUlIsIEFTQ0lJTGl0ZXJhbCgiTWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIikgfTsK
KyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlM
aXRlcmFsKCJNYXRyaXggaXMgbm90IGludmVydGlibGUiKSB9OwogICAgIH0KIAogICAgIHJldHVy
biBTVkdNYXRyaXg6OmNyZWF0ZShjdG0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR01hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hdHJpeC5oCmluZGV4IDc4MThk
MWRmMzdjZmEyOTcxYmEwNzAyOTA2N2JmODI2ZTU4ZTI1YWMuLmUyNGFkYWQzYzgyZjM4Y2VkMGMy
MTgxMGM3NjZjYmE2ZWRkNmYxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdN
YXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWF0cml4LmgKQEAgLTYzLDcgKzYz
LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEEoZG91YmxlIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHBy
b3BlcnR5UmVmZXJlbmNlKCkuc2V0QSh2YWx1ZSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpA
QCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0Qihkb3Vi
bGUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAK
ICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRCKHZhbHVlKTsKICAgICAgICAgY29tbWl0
Q2hhbmdlKCk7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRDKGRvdWJsZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJS
IH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2Vk
RXJyb3IgfTsKIAogICAgICAgICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldEModmFsdWUpOwogICAg
ICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0RChkb3VibGUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNS
ZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZp
Y2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRE
KHZhbHVlKTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC0xMjcsNyArMTI3LDcgQEAgcHVi
bGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEUoZG91YmxlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVm
ZXJlbmNlKCkuc2V0RSh2YWx1ZSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpAQCAtMTQzLDcg
KzE0Myw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGKGRvdWJsZSB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAg
ICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldEYodmFsdWUpOwogICAgICAgICBjb21taXRDaGFuZ2Uo
KTsKQEAgLTE1NCw3ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPFNWR01h
dHJpeD4+IG11bHRpcGx5KFNWR01hdHJpeCYgc2Vjb25kTWF0cml4KQogICAgIHsKICAgICAgICAg
aWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJv
cGVydHlSZWZlcmVuY2UoKS5tdWx0aXBseShzZWNvbmRNYXRyaXgucHJvcGVydHlSZWZlcmVuY2Uo
KSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHB1YmxpYzoK
ICAgICBFeGNlcHRpb25PcjxSZWY8U1ZHTWF0cml4Pj4gaW52ZXJzZSgpCiAgICAgewogICAgICAg
ICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgYXV0byByZXN1bHQgPSBw
cm9wZXJ0eVJlZmVyZW5jZSgpLmludmVyc2UoKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVm
PFNWR01hdHJpeD4+IHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogICAgIHsKICAgICAgICAg
aWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJv
cGVydHlSZWZlcmVuY2UoKS50cmFuc2xhdGUoeCwgeSk7ICAgICAgICAKICAgICAgICAgY29tbWl0
Q2hhbmdlKCk7CkBAIC0xODksNyArMTg5LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJl
ZjxTVkdNYXRyaXg+PiBzY2FsZShmbG9hdCBzY2FsZUZhY3RvcikKICAgICB7CiAgICAgICAgIGlm
IChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9N
b2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3Bl
cnR5UmVmZXJlbmNlKCkuc2NhbGUoc2NhbGVGYWN0b3IpOyAgICAgICAgCiAgICAgICAgIGNvbW1p
dENoYW5nZSgpOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxS
ZWY8U1ZHTWF0cml4Pj4gc2NhbGVOb25Vbmlmb3JtKGZsb2F0IHNjYWxlRmFjdG9yWCwgZmxvYXQg
c2NhbGVGYWN0b3JZKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9
OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlSZWZlcmVuY2UoKS5zY2FsZU5vblVu
aWZvcm0oc2NhbGVGYWN0b3JYLCBzY2FsZUZhY3RvclkpOyAgICAgICAgCiAgICAgICAgIGNvbW1p
dENoYW5nZSgpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxS
ZWY8U1ZHTWF0cml4Pj4gcm90YXRlKGZsb2F0IGFuZ2xlKQogICAgIHsKICAgICAgICAgaWYgKGlz
UmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlm
aWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlS
ZWZlcmVuY2UoKS5yb3RhdGUoYW5nbGUpOyAgICAgICAgCiAgICAgICAgIGNvbW1pdENoYW5nZSgp
OwpAQCAtMjIyLDcgKzIyMiw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8U1ZHTWF0
cml4Pj4gcm90YXRlRnJvbVZlY3RvcihmbG9hdCB4LCBmbG9hdCB5KQogICAgIHsKICAgICAgICAg
aWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJv
cGVydHlSZWZlcmVuY2UoKS5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpOyAgICAgICAgCiAgICAgICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgog
ICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+PiBmbGlwWCgpCiAgICAgewogICAgICAgICBp
ZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
TW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgYXV0byByZXN1bHQgPSBwcm9w
ZXJ0eVJlZmVyZW5jZSgpLmZsaXBYKCk7ICAgICAgICAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7
CkBAIC0yNDYsNyArMjQ2LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRy
aXg+PiBmbGlwWSgpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAg
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07
CiAKICAgICAgICAgYXV0byByZXN1bHQgPSBwcm9wZXJ0eVJlZmVyZW5jZSgpLmZsaXBZKCk7ICAg
ICAgICAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC0yNTcsNyArMjU3LDcgQEAgcHVibGlj
OgogICAgIEV4Y2VwdGlvbk9yPFJlZjxTVkdNYXRyaXg+PiBza2V3WChmbG9hdCBhbmdsZSkKICAg
ICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBhdXRv
IHJlc3VsdCA9IHByb3BlcnR5UmVmZXJlbmNlKCkuc2tld1goYW5nbGUpOyAgICAgICAgCiAgICAg
ICAgIGNvbW1pdENoYW5nZSgpOwpAQCAtMjY4LDcgKzI2OCw3IEBAIHB1YmxpYzoKICAgICBFeGNl
cHRpb25PcjxSZWY8U1ZHTWF0cml4Pj4gc2tld1koZmxvYXQgYW5nbGUpCiAgICAgewogICAgICAg
ICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgYXV0byByZXN1bHQgPSBw
cm9wZXJ0eVJlZmVyZW5jZSgpLnNrZXdZKGFuZ2xlKTsgICAgICAgIAogICAgICAgICBjb21taXRD
aGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXRyaXhWYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hdHJpeFZhbHVlLmgKaW5kZXggNjI1NTBlNGQxY2Fl
MmYyMDg1MTQ2YTZkYjkxNGY3MDI1OWE4NzIxNi4uMTg0MDAyNjlhYTMwYzYxYzk0NjIwYWUyMTYz
ZWJjNDZkZWNkNTViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hdHJpeFZh
bHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hdHJpeFZhbHVlLmgKQEAgLTEwNiw3
ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChhdXRvIGludmVyc2UgPSBBZmZpbmVUcmFu
c2Zvcm06OmludmVyc2UoKSkKICAgICAgICAgICAgIHJldHVybiBTVkdNYXRyaXhWYWx1ZSB7IGlu
dmVyc2UudmFsdWUoKSB9OwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfU1RBVEVfRVJSLCBBU0NJSUxpdGVyYWwoIk1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZSIp
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlM
aXRlcmFsKCJNYXRyaXggaXMgbm90IGludmVydGlibGUiKSB9OwogICAgIH0KIAogICAgIEV4Y2Vw
dGlvbk9yPFNWR01hdHJpeFZhbHVlPiByb3RhdGVGcm9tVmVjdG9yKGRvdWJsZSB4LCBkb3VibGUg
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdOdW1iZXIuaAppbmRleCA4NzNhOGY0NmNkNGVhNTU2ZDQ4ZmYxZmMyYTFm
MzNmZjAwZmE4M2RhLi5lMTJlN2NjYWVkMzA4YzgyODE4ZmJkYWM2ZGFkNDczYzlhZTIzNDQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR051bWJlci5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBFeGNl
cHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUZvckJpbmRpbmdzKGZsb2F0IHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVm
ZXJlbmNlKCkgPSB2YWx1ZTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2lu
dC5oCmluZGV4IGFjMDNiNDgxY2QyZmEyYjZlMzBlNjAzYjUxYzM5NGI1ZjM4MjhlOGMuLmIxNzY4
NmU4ZWMzZThmYjEyNWU1NzUwZDNlMWE3NmI5ZjRjYTZiNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludC5o
CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRYKGZs
b2F0IHhWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsK
IAogICAgICAgICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldFgoeFZhbHVlKTsKICAgICAgICAgY29t
bWl0Q2hhbmdlKCk7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRZKGZsb2F0IHhWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURf
RVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxv
d2VkRXJyb3IgfTsKIAogICAgICAgICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldFkoeFZhbHVlKTsK
ICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBF
eGNlcHRpb25PcjxSZWY8U1ZHUG9pbnQ+PiBtYXRyaXhUcmFuc2Zvcm0oU1ZHTWF0cml4JiBtYXRy
aXgpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAg
ICAgYXV0byBuZXdQb2ludCA9IHByb3BlcnR5UmVmZXJlbmNlKCkubWF0cml4VHJhbnNmb3JtKG1h
dHJpeC5wcm9wZXJ0eVJlZmVyZW5jZSgpKTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAppbmRleCAzY2U1YTVlMTk1
OGFkM2NlNWM4ZjVmMzAyNGExOTg3MmYzNzQzNmI2Li5iOTNlNDNlNjFkZjE3MDIzMTMxNjFjN2Jj
ODE1N2Q5ODk3N2EyMzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IHNldEFsaWduKGZsb2F0IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkK
LSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvciB9OwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvcGVydHlSZWZlcmVuY2UoKS5z
ZXRBbGlnbih2YWx1ZSk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCkBAIC04
MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRNZWV0T3JTbGlj
ZShmbG9hdCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07Cisg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3Ig
fTsKIAogICAgICAgICBhdXRvIHJlc3VsdCA9IHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0TWVldE9y
U2xpY2UodmFsdWUpOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAppbmRl
eCAyMDQxZDBjNzE0NjgzYmFkZWEzNmVhN2RjMzNlODgyOGE0ZjJkODBmLi41NDBkNTIwMTQ5MjQ0
NTkzNmZmYzU5ZWUyM2I2YWQxNThhOTUwZjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcApAQCAtMzgsNyArMzgsNyBAQCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSgpCiBF
eGNlcHRpb25Pcjx2b2lkPiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnNldEFsaWduKHVu
c2lnbmVkIHNob3J0IGFsaWduKQogewogICAgIGlmIChhbGlnbiA9PSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19VTktOT1dOIHx8IGFsaWduID4gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlN
QVgpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIG1fYWxp
Z24gPSBzdGF0aWNfY2FzdDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZT4oYWxpZ24pOwogICAg
IHJldHVybiB7IH07CkBAIC00Nyw3ICs0Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZTo6c2V0QWxpZ24odW5zaWduZWQgc2hvcnQgYWxpZ24pCiBFeGNl
cHRpb25Pcjx2b2lkPiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnNldE1lZXRPclNsaWNl
KHVuc2lnbmVkIHNob3J0IG1lZXRPclNsaWNlKQogewogICAgIGlmIChtZWV0T3JTbGljZSA9PSBT
VkdfTUVFVE9SU0xJQ0VfVU5LTk9XTiB8fCBtZWV0T3JTbGljZSA+IFNWR19NRUVUT1JTTElDRV9T
TElDRSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9TVVBQT1JURURfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogCiAgICAgbV9t
ZWV0T3JTbGljZSA9IHN0YXRpY19jYXN0PFNWR01lZXRPclNsaWNlVHlwZT4obWVldE9yU2xpY2Up
OwogICAgIHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVj
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaAppbmRleCAwZTIxZjVmNjYzMzVjZGRk
YjE5YWJhNzY1Mzk0ZWY0YzNhNzdhMjkxLi5kZmM5Y2FjNDQ5YTcwMjBiNmViNTk4MjUzNWY2MDQ0
OGZlZmVkYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmgKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgog
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFgoZmxvYXQgeFZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNl
KCkuc2V0WCh4VmFsdWUpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTcyLDcgKzcyLDcg
QEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFkoZmxvYXQgeFZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3Bl
cnR5UmVmZXJlbmNlKCkuc2V0WSh4VmFsdWUpOwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAg
LTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFdpZHRoKGZs
b2F0IHdpZHRoVmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaXNSZWFkT25seSgpKQotICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiB9Owor
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9y
IH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVuY2UoKS5zZXRXaWR0aCh3aWR0aFZhbHVlKTsK
ICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgogICAg
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEhlaWdodChmbG9hdCBoZWlnaHRWYWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICBwcm9wZXJ0eVJl
ZmVyZW5jZSgpLnNldEhlaWdodChoZWlnaHRWYWx1ZSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAppbmRleCBh
NjVlZTg4YzZiMzhlOWMyMmM3YzUwNzA5YjlkMTgyMGNiMDU0MGQwLi5lZDUxNDg3ZGNhOTFiMDA4
YTk2MGMzYWIwODkzMjEyM2EzYTRjNjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4
dENvbnRlbnRFbGVtZW50LmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIEV4Y2VwdGlvbk9yPGZsb2F0
PiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBjaGFy
bnVtLCB1CiB7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFycyA9IGdldE51bWJlck9mQ2hhcnMo
KTsKICAgICBpZiAoY2hhcm51bSA+PSBudW1iZXJPZkNoYXJzKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAKICAgICBuY2hhcnMgPSBzdGQ6Om1pbihuY2hhcnMsIG51bWJlck9m
Q2hhcnMgLSBjaGFybnVtKTsKICAgICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLnN1
YlN0cmluZ0xlbmd0aChjaGFybnVtLCBuY2hhcnMpOwpAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2Vw
dGlvbk9yPGZsb2F0PiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN1YlN0cmluZ0xlbmd0aCh1
bnNpZ25lZCBjaGFybnVtLCB1CiBFeGNlcHRpb25PcjxSZWY8U1ZHUG9pbnQ+PiBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OmdldFN0YXJ0UG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSkKIHsK
ICAgICBpZiAoY2hhcm51bSA+IGdldE51bWJlck9mQ2hhcnMoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OwogCiAgICAgcmV0dXJuIFNWR1BvaW50OjpjcmVhdGUoU1ZHVGV4dFF1
ZXJ5KHJlbmRlcmVyKCkpLnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlcihjaGFybnVtKSk7CiB9CkBA
IC0xMzQsNyArMTM0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFNWR1BvaW50Pj4gU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjpnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmUKIEV4Y2VwdGlvbk9yPFJl
ZjxTVkdQb2ludD4+IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RW5kUG9zaXRpb25PZkNoYXIo
dW5zaWduZWQgY2hhcm51bSkKIHsKICAgICBpZiAoY2hhcm51bSA+IGdldE51bWJlck9mQ2hhcnMo
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgcmV0dXJuIFNWR1Bv
aW50OjpjcmVhdGUoU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLmVuZFBvc2l0aW9uT2ZDaGFyYWN0
ZXIoY2hhcm51bSkpOwogfQpAQCAtMTQyLDcgKzE0Miw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTVkdQ
b2ludD4+IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RW5kUG9zaXRpb25PZkNoYXIodW5zaWdu
ZWQKIEV4Y2VwdGlvbk9yPFJlZjxTVkdSZWN0Pj4gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRF
eHRlbnRPZkNoYXIodW5zaWduZWQgY2hhcm51bSkKIHsKICAgICBpZiAoY2hhcm51bSA+IGdldE51
bWJlck9mQ2hhcnMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAg
cmV0dXJuIFNWR1JlY3Q6OmNyZWF0ZShTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuZXh0ZW50T2ZD
aGFyYWN0ZXIoY2hhcm51bSkpOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxTVkdSZWN0Pj4gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFeHRlbnRPZkNoYXIodW5zaWdu
ZWQgY2hhcm51CiBFeGNlcHRpb25PcjxmbG9hdD4gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRS
b3RhdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtKQogewogICAgIGlmIChjaGFybnVtID4gZ2V0
TnVtYmVyT2ZDaGFycygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKICAg
ICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLnJvdGF0aW9uT2ZDaGFyYWN0ZXIoY2hh
cm51bSk7CiB9CkBAIC0xNjUsNyArMTY1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpzZWxlY3RTdWJTdHJpbmcodW5zaWduZWQgY2hhcm51bSwgdW5zaWcKIHsK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJzID0gZ2V0TnVtYmVyT2ZDaGFycygpOwogICAgIGlm
IChjaGFybnVtID49IG51bWJlck9mQ2hhcnMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TkRFWF9TSVpFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJy
b3IgfTsKIAogICAgIG5jaGFycyA9IHN0ZDo6bWluKG5jaGFycywgbnVtYmVyT2ZDaGFycyAtIGNo
YXJudW0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgKaW5kZXggNjk4NjEzODRjMDZmMzY4
NTc5NmQ3NjE2MDY2NTdlOTdkNTUyYjZlMi4uMWI4NjdhMzM4NTE1MGU3ZDA2OTFmYWY5NTUzNjI5
MGNhYjNlMmQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaApAQCAtNzAsNyArNzAsNyBA
QCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TWF0cml4KFNWR01hdHJpeCYgbWF0
cml4KQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAg
ICAgIHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0TWF0cml4KG1hdHJpeC5wcm9wZXJ0eVJlZmVyZW5j
ZSgpKTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoK
ICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRUcmFuc2xhdGUoZmxvYXQgdHgsIGZsb2F0IHR5KQog
ICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHBy
b3BlcnR5UmVmZXJlbmNlKCkuc2V0VHJhbnNsYXRlKHR4LCB0eSk7CiAgICAgICAgIGNvbW1pdENo
YW5nZSgpOwpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4g
c2V0U2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9u
bHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlv
bkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0U2NhbGUo
c3gsIHN5KTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHVi
bGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFJvdGF0ZShmbG9hdCBhbmdsZSwgZmxvYXQg
Y3gsIGZsb2F0IGN5KQogICAgIHsKICAgICAgICAgaWYgKGlzUmVhZE9ubHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgfTsKKyAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciB9
OwogCiAgICAgICAgIHByb3BlcnR5UmVmZXJlbmNlKCkuc2V0Um90YXRlKGFuZ2xlLCBjeCwgY3kp
OwogICAgICAgICBjb21taXRDaGFuZ2UoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAg
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U2tld1goZmxvYXQgYW5nbGUpCiAgICAgewogICAgICAg
ICBpZiAoaXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgcHJvcGVydHlSZWZlcmVu
Y2UoKS5zZXRTa2V3WChhbmdsZSk7CiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwpAQCAtMTI1LDcg
KzEyNSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTa2V3WShmbG9hdCBh
bmdsZSkKICAgICB7CiAgICAgICAgIGlmIChpc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAg
ICAgICBwcm9wZXJ0eVJlZmVyZW5jZSgpLnNldFNrZXdZKGFuZ2xlKTsKICAgICAgICAgY29tbWl0
Q2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAppbmRleCAyYjQ2N2RiMjJmN2Zi
OTkzMjgwMTk3NjYzZTFkNzYzYzAyMzNhZTUyLi4wOThhMTczZGQxZjZmNzFhNzdhNDM5NGMyNWEy
Y2I2YzVjMmVmZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKQEAgLTEwMyw3ICsx
MDMsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFNWR1ZpZXdTcGVjOjp0cmFuc2Zvcm1JZGVudGlm
aWVyKCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ZpZXdTcGVjOjpzZXRab29tQW5kUGFuKHVuc2ln
bmVkIHNob3J0KQogewogICAgIC8vIFNWR1ZpZXdTcGVjIGFuZCBhbGwgb2YgaXRzIGNvbnRlbnQg
aXMgcmVhZC1vbmx5LgotICAgIHJldHVybiBFeGNlcHRpb24geyBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2Vk
RXJyb3IgfTsKIH0KIAogU3RyaW5nIFNWR1ZpZXdTcGVjOjp0cmFuc2Zvcm1TdHJpbmcoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3Bl
cnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHkuaApp
bmRleCA4NDk4Y2ViZmU1MjE1YTA2ZDQwZTViMzFjYzhlNWVhZmY1MGY5MjljLi45NzFiMGFkMGIw
YzZhYTgxOGQ4MTQ1MjRiNzk4NWRiNmFkZGM0NmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHkuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAgICAgRXhjZXB0aW9uT3I8Ym9vbD4gY2FuQWx0ZXJMaXN0KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmIChtX3JvbGUgPT0gQW5pbVZhbFJvbGUpCi0gICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIH07CisgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgfTsKIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0xNzIsNyArMTcyLDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlv
bk9yPGJvb2w+IGNhbkdldEl0ZW0odW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBpZiAo
aW5kZXggPj0gbV92YWx1ZXMtPnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4
U2l6ZUVycm9yIH07CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjc5LDcgKzI3
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CiAKICAgICAgICAgaWYgKGluZGV4ID49IG1fdmFsdWVzLT5zaXplKCkpCi0gICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5ERVhfU0laRV9FUlIgfTsKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwogCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaWYgKG1fdmFsdWVz
LT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vICduZXdJdGVtJyBhbHJlYWR5IGxpdmVkIGlu
IG91ciBsaXN0LCB3ZSByZW1vdmVkIGl0LCBhbmQgbm93IHdlJ3JlIGVtcHR5LCB3aGljaCBtZWFu
cyB0aGVyZSdzIG5vdGhpbmcgdG8gcmVwbGFjZS4KLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTkRFWF9TSVpFX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
ZGV4U2l6ZUVycm9yIH07CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgdGhlIHZhbHVl
IGF0IHRoZSBkZXNpcmVkIHBvc2l0aW9uICdpbmRleCcuIApAQCAtMzMxLDcgKzMzMSw3IEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKG1fdmFsdWVzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFT
U0VSVChtX3dyYXBwZXJzLT5pc0VtcHR5KCkpOwogICAgICAgICAgICAgLy8gJ25ld0l0ZW0nIGFs
cmVhZHkgbGl2ZWQgaW4gb3VyIGxpc3QsIHdlIHJlbW92ZWQgaXQsIGFuZCBub3cgd2UncmUgZW1w
dHksIHdoaWNoIG1lYW5zIHRoZXJlJ3Mgbm90aGluZyB0byByZXBsYWNlLgotICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIERl
dGFjaCB0aGUgZXhpc3Rpbmcgd3JhcHBlci4KQEAgLTM1Niw3ICszNTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogCiAgICAgICAgIGlm
IChpbmRleCA+PSBtX3ZhbHVlcy0+c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOREVYX1NJWkVfRVJSIH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5k
ZXhTaXplRXJyb3IgfTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAppbmRleCBkOGY1YjZlOTU3MWEyNWMy
NjQxY2M1NzZmMTNjMjYwZDQ2MDI3OTU0Li45Mzg5M2JkNTczOWMwZGQyMTY3NTkwMTQyNmNkZmYw
YjMxZWY4OGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5j
cHAKQEAgLTI4OSw3ICsyODksNyBAQCBTZXR0aW5ncyYgSW50ZXJuYWxTZXR0aW5nczo6c2V0dGlu
Z3MoKSBjb25zdAogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VG91Y2hF
dmVudEVtdWxhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmICghbV9wYWdlKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQogICAgIHNldHRpbmdzKCkuc2V0VG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQo
ZW5hYmxlZCk7CiAjZWxzZQpAQCAtMzAxLDcgKzMwMSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElu
dGVybmFsU2V0dGluZ3M6OnNldFRvdWNoRXZlbnRFbXVsYXRpb25FbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFN0YW5kYXJkRm9udEZh
bWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAg
aWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
ICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3JpcHROYW1lVG9Db2RlKHNjcmlwdCk7CiAgICAgaWYg
KGNvZGUgPT0gVVNDUklQVF9JTlZBTElEX0NPREUpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0z
MTMsNyArMzEzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U3Rh
bmRhcmRGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LAogRXhjZXB0aW9uT3I8dm9pZD4g
SW50ZXJuYWxTZXR0aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5
LCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgVVNjcmlwdENvZGUgY29kZSA9IHNj
cmlwdE5hbWVUb0NvZGUoc2NyaXB0KTsKICAgICBpZiAoY29kZSA9PSBVU0NSSVBUX0lOVkFMSURf
Q09ERSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTMyNSw3ICszMjUsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkoY29uc3QgU3RyaW5n
JiBmYW1pbHksIGNvbgogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U2Fu
c1NlcmlmRm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgU3RyaW5nJiBzY3Jp
cHQpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3JpcHROYW1lVG9Db2RlKHNjcmlw
dCk7CiAgICAgaWYgKGNvZGUgPT0gVVNDUklQVF9JTlZBTElEX0NPREUpCiAgICAgICAgIHJldHVy
biB7IH07CkBAIC0zMzcsNyArMzM3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0
aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgaWYgKCFtX3BhZ2Up
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIFVTY3JpcHRD
b2RlIGNvZGUgPSBzY3JpcHROYW1lVG9Db2RlKHNjcmlwdCk7CiAgICAgaWYgKGNvZGUgPT0gVVND
UklQVF9JTlZBTElEX0NPREUpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0zNDksNyArMzQ5LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5
KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb24KIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0
dGluZ3M6OnNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBT
dHJpbmcmIHNjcmlwdCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgVVNjcmlwdENvZGUgY29kZSA9IHNjcmlwdE5hbWVU
b0NvZGUoc2NyaXB0KTsKICAgICBpZiAoY29kZSA9PSBVU0NSSVBUX0lOVkFMSURfQ09ERSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKQEAgLTM2MSw3ICszNjEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJ
bnRlcm5hbFNldHRpbmdzOjpzZXRDdXJzaXZlRm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWls
eSwgYwogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0RmFudGFzeUZvbnRG
YW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IFN0cmluZyYgc2NyaXB0KQogewogICAg
IGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
ICAgICBVU2NyaXB0Q29kZSBjb2RlID0gc2NyaXB0TmFtZVRvQ29kZShzY3JpcHQpOwogICAgIGlm
IChjb2RlID09IFVTQ1JJUFRfSU5WQUxJRF9DT0RFKQogICAgICAgICByZXR1cm4geyB9OwpAQCAt
MzczLDcgKzM3Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEZh
bnRhc3lGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjCiBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbFNldHRpbmdzOjpzZXRQaWN0b2dyYXBoRm9udEZhbWlseShjb25zdCBTdHJpbmcm
IGZhbWlseSwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIFVTY3JpcHRDb2RlIGNv
ZGUgPSBzY3JpcHROYW1lVG9Db2RlKHNjcmlwdCk7CiAgICAgaWYgKGNvZGUgPT0gVVNDUklQVF9J
TlZBTElEX0NPREUpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0zODUsNyArMzg1LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0UGljdG9ncmFwaEZvbnRGYW1pbHko
Y29uc3QgU3RyaW5nJiBmYW1pbHkKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6
OnNldFRleHRBdXRvc2l6aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFtX3Bh
Z2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogI2lmIEVOQUJM
RShURVhUX0FVVE9TSVpJTkcpCiAgICAgc2V0dGluZ3MoKS5zZXRUZXh0QXV0b3NpemluZ0VuYWJs
ZWQoZW5hYmxlZCk7CiAjZWxzZQpAQCAtMzk3LDcgKzM5Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsU2V0dGluZ3M6OnNldFRleHRBdXRvc2l6aW5nRW5hYmxlZChib29sIGVuYWJsZWQp
CiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRUZXh0QXV0b3NpemluZ1dp
bmRvd1NpemVPdmVycmlkZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKCFtX3Bh
Z2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogI2lmIEVOQUJM
RShURVhUX0FVVE9TSVpJTkcpCiAgICAgc2V0dGluZ3MoKS5zZXRUZXh0QXV0b3NpemluZ1dpbmRv
d1NpemVPdmVycmlkZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKICNlbHNlCkBAIC00MTAsNyAr
NDEwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VGV4dEF1dG9z
aXppbmdXaW5kb3dTaXplT3ZlcnJpZGUoaW50IHdpZHQKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVy
bmFsU2V0dGluZ3M6OnNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBl
KQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldE1lZGlhVHlwZU92ZXJyaWRlKG1lZGlhVHlwZSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTQxOCw3ICs0MTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbFNldHRpbmdzOjpzZXRNZWRpYVR5cGVPdmVycmlkZShjb25zdCBTdHJpbmcmIG1l
ZGlhVHlwZQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0Q2FuU3RhcnRN
ZWRpYShib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIG1fcGFnZS0+c2V0Q2FuU3RhcnRNZWRpYShl
bmFibGVkKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNDI2LDcgKzQyNiw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldENhblN0YXJ0TWVkaWEoYm9vbCBlbmFibGVk
KQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0QWxsb3dzQWlyUGxheUZv
ck1lZGlhUGxheWJhY2soYm9vbCBhbGxvd3MpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogI2lmIEVOQUJMRShXSVJFTEVTU19Q
TEFZQkFDS19UQVJHRVQpCiAgICAgc2V0dGluZ3MoKS5zZXRBbGxvd3NBaXJQbGF5Rm9yTWVkaWFQ
bGF5YmFjayhhbGxvd3MpOwogI2Vsc2UKQEAgLTQzOCw3ICs0MzgsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRBbGxvd3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFjayhi
b29sIGFsbG93cwogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0TWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKGJvb2wgcmVxdWlyZXMpCiB7CiAgICAgaWYg
KCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgc2V0dGluZ3MoKS5zZXRNZWRpYUNhcHR1cmVSZXF1
aXJlc1NlY3VyZUNvbm5lY3Rpb24ocmVxdWlyZXMpOwogI2Vsc2UKQEAgLTQ1MCw3ICs0NTAsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRNZWRpYUNhcHR1cmVSZXF1
aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbAogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0
aW5nczo6c2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IFN0cmluZyYgZWRpdGluZ0JlaGF2aW9yKQog
ewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZWRpdGluZ0JlaGF2
aW9yLCAid2luIikpCiAgICAgICAgIHNldHRpbmdzKCkuc2V0RWRpdGluZ0JlaGF2aW9yVHlwZShF
ZGl0aW5nV2luZG93c0JlaGF2aW9yKTsKICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShlZGl0aW5nQmVoYXZpb3IsICJtYWMiKSkKQEAgLTQ2MCwxNCArNDYwLDE0IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEVkaXRpbmdCZWhhdmlvcihj
b25zdCBTdHJpbmcmIGVkaXRpbmdCZWhhCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZWRpdGluZ0JlaGF2aW9yLCAiaW9zIikpCiAgICAgICAgIHNldHRpbmdzKCku
c2V0RWRpdGluZ0JlaGF2aW9yVHlwZShFZGl0aW5nSU9TQmVoYXZpb3IpOwogICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkRGlzcGxheVRyYWNrS2luZChjb25z
dCBTdHJpbmcmIGtpbmQsIGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fcGFnZS0+Z3JvdXAoKS5jYXB0
aW9uUHJlZmVyZW5jZXMoKTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
a2luZCwgInN1YnRpdGxlcyIpKQpAQCAtNDc3LDcgKzQ3Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsU2V0dGluZ3M6OnNldFNob3VsZERpc3BsYXlUcmFja0tpbmQoY29uc3QgU3RyaW5n
JiBraW5kCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2luZCwg
InRleHRkZXNjcmlwdGlvbnMiKSkKICAgICAgICAgY2FwdGlvblByZWZlcmVuY2VzLnNldFVzZXJQ
cmVmZXJzVGV4dERlc2NyaXB0aW9ucyhlbmFibGVkKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
eW50YXhFcnJvciB9OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oa2luZCk7CiAgICAgVU5VU0VE
X1BBUkFNKGVuYWJsZWQpOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElu
dGVybmFsU2V0dGluZ3M6OnNldFNob3VsZERpc3BsYXlUcmFja0tpbmQoY29uc3QgU3RyaW5nJiBr
aW5kCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbFNldHRpbmdzOjpzaG91bGREaXNwbGF5VHJh
Y2tLaW5kKGNvbnN0IFN0cmluZyYga2luZCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fcGFnZS0+Z3JvdXAoKS5jYXB0aW9u
UHJlZmVyZW5jZXMoKTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2lu
ZCwgInN1YnRpdGxlcyIpKQpAQCAtNDk4LDcgKzQ5OCw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IElu
dGVybmFsU2V0dGluZ3M6OnNob3VsZERpc3BsYXlUcmFja0tpbmQoY29uc3QgU3RyaW5nJiBraW5k
KQogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShraW5kLCAidGV4dGRlc2Ny
aXB0aW9ucyIpKQogICAgICAgICByZXR1cm4gY2FwdGlvblByZWZlcmVuY2VzLnVzZXJQcmVmZXJz
VGV4dERlc2NyaXB0aW9ucygpOwogCi0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIg
fTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGtpbmQpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTUwOCw3ICs1MDgsNyBAQCBF
eGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbFNldHRpbmdzOjpzaG91bGREaXNwbGF5VHJhY2tLaW5k
KGNvbnN0IFN0cmluZyYga2luZCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6
OnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgaWYg
KCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAg
IGlmIChtb2RlID09ICJBbGxvd0FsbCIpCiAgICAgICAgIHNldHRpbmdzKCkuc2V0U3RvcmFnZUJs
b2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpBbGxvd0FsbFN0b3JhZ2UpOwogICAgIGVsc2Ug
aWYgKG1vZGUgPT0gIkJsb2NrVGhpcmRQYXJ0eSIpCkBAIC01MTYsMTQgKzUxNiwxNCBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3ko
Y29uc3QgU3RyaW5nJiBtb2RlKQogICAgIGVsc2UgaWYgKG1vZGUgPT0gIkJsb2NrQWxsIikKICAg
ICAgICAgc2V0dGluZ3MoKS5zZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46
OkJsb2NrQWxsU3RvcmFnZSk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsK
ICAgICByZXR1cm4geyB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdz
OjpzZXRQcmVmZXJNSU1FVHlwZUZvckltYWdlcyhib29sIHByZWZlck1JTUVUeXBlRm9ySW1hZ2Vz
KQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKHByZWZl
ck1JTUVUeXBlRm9ySW1hZ2VzKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTMxLDcgKzUzMSw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFByZWZlck1JTUVUeXBl
Rm9ySW1hZ2VzKGJvb2wgcHJlZmVyTUlNRVR5CiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNl
dHRpbmdzOjpzZXRJbWFnZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoIW1fcGFn
ZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgc2V0dGlu
Z3MoKS5zZXRJbWFnZXNFbmFibGVkKGVuYWJsZWQpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC01
MzksNyArNTM5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0SW1h
Z2VzRW5hYmxlZChib29sIGVuYWJsZWQpCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRp
bmdzOjpzZXRQREZJbWFnZUNhY2hpbmdQb2xpY3koY29uc3QgU3RyaW5nJiBwb2xpY3kpCiB7CiAg
ICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VT
U19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9
OwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb2xpY3ksICJkaXNhYmxl
ZCIpKQogICAgICAgICBzZXR0aW5ncygpLnNldFBkZkltYWdlQ2FjaGluZ1BvbGljeShQREZJbWFn
ZUNhY2hpbmdEaXNhYmxlZCk7CiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UocG9saWN5LCAiYmVsb3dtZW1vcnlsaW1pdCIpKQpAQCAtNTQ5LDE0ICs1NDksMTQgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0UERGSW1hZ2VDYWNoaW5nUG9s
aWN5KGNvbnN0IFN0cmluZyYgcG9saWMKICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShwb2xpY3ksICJlbmFibGVkIikpCiAgICAgICAgIHNldHRpbmdzKCkuc2V0UGRm
SW1hZ2VDYWNoaW5nUG9saWN5KFBERkltYWdlQ2FjaGluZ0VuYWJsZWQpOwogICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91Ymxl
IGludGVydmFsSW5TZWNvbmRzKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldE1pbmltdW1ET01U
aW1lckludGVydmFsKFNlY29uZHMgeyBpbnRlcnZhbEluU2Vjb25kcyB9KTsKICAgICByZXR1cm4g
eyB9OwogfQpAQCAtNTY0LDcgKzU2NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0
dGluZ3M6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSBpbnRlcnZhbEluU2VjCiBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXREZWZhdWx0VmlkZW9Qb3N0ZXJVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdzKCkuc2V0RGVmYXVsdFZpZGVv
UG9zdGVyVVJMKHVybCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU3Miw3ICs1NzIsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXREZWZhdWx0VmlkZW9Qb3N0ZXJV
UkwoY29uc3QgU3RyaW5nJiB1cmwpCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdz
OjpzZXRGb3JjZVBlbmRpbmdXZWJHTFBvbGljeShib29sIGZvcmNlZCkKIHsKICAgICBpZiAoIW1f
cGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgc2V0
dGluZ3MoKS5zZXRGb3JjZVBlbmRpbmdXZWJHTFBvbGljeShmb3JjZWQpOwogICAgIHJldHVybiB7
IH07CiB9CkBAIC01ODAsNyArNTgwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0
aW5nczo6c2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9vbCBmb3JjZWQpCiBFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRUaW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZv
cmVIaWRpbmdDb250cm9scyhkb3VibGUgdGltZSkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgc2V0dGluZ3MoKS5zZXRU
aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scyhTZWNvbmRzIHsgdGlt
ZSB9KTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTg4LDcgKzU4OCw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFRpbWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9y
ZUhpZGluZ0NvbnRyCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRVc2VM
ZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yKGJvb2wgZW5hYmxlZCkKIHsKICAg
ICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNT
X0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07
CiAgICAgc2V0dGluZ3MoKS5zZXRVc2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yKGVuYWJsZWQpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC01OTYsNyArNTk2LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VXNlTGVnYWN5QmFja2dyb3VuZFNp
emVTaG9ydGhhbmRCZWhhdmlvcigKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6
OnNldEF1dG9zY3JvbGxGb3JEcmFnQW5kRHJvcEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAg
IGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
ICAgICBzZXR0aW5ncygpLnNldEF1dG9zY3JvbGxGb3JEcmFnQW5kRHJvcEVuYWJsZWQoZW5hYmxl
ZCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTYwNCw3ICs2MDQsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRBdXRvc2Nyb2xsRm9yRHJhZ0FuZERyb3BFbmFibGVk
KGJvb2wgZW5hYgogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0Rm9udEZh
bGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKGJvb2wgcHJlZmVyUGljdG9ncmFwaHMpCiB7CiAgICAg
aWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
ICAgIHNldHRpbmdzKCkuc2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKHByZWZlclBp
Y3RvZ3JhcGhzKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNjEyLDcgKzYxMiw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0
b2dyYXBocyhib29sIHByZWZlCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpz
ZXRXZWJGb250c0Fsd2F5c0ZhbGxCYWNrKGJvb2wgZW5hYmxlKQogewogICAgIGlmICghbV9wYWdl
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBzZXR0aW5n
cygpLnNldFdlYkZvbnRzQWx3YXlzRmFsbEJhY2soZW5hYmxlKTsKICAgICByZXR1cm4geyB9Owog
fQpAQCAtNjIwLDcgKzYyMCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6
OnNldFdlYkZvbnRzQWx3YXlzRmFsbEJhY2soYm9vbCBlbmFibGUpCiBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbFNldHRpbmdzOjpzZXRRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudEVuYWJsZWQo
Ym9vbCBlbmFibGVkKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldFF1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50RW5hYmxlZChlbmFibGVkKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNjI4LDcg
KzYyOCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50RW5hYmxlZChib29sIGVuCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbFNldHRpbmdzOjpzZXRZb3VUdWJlRmxhc2hQbHVnaW5SZXBsYWNlbWVudEVuYWJsZWQoYm9v
bCBlbmFibGVkKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldFlvdVR1YmVGbGFzaFBsdWdpblJl
cGxhY2VtZW50RW5hYmxlZChlbmFibGVkKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNjM2LDcg
KzYzNiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFlvdVR1YmVG
bGFzaFBsdWdpblJlcGxhY2VtZW50RW5hYmxlZChib29sCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbFNldHRpbmdzOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShib29sIGhh
c0V4dGVuZGVkQmFja2dyb3VuZCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgc2V0dGluZ3MoKS5zZXRCYWNrZ3JvdW5k
U2hvdWxkRXh0ZW5kQmV5b25kUGFnZShoYXNFeHRlbmRlZEJhY2tncm91bmQpOwogICAgIHJldHVy
biB7IH07CiB9CkBAIC02NDQsNyArNjQ0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxT
ZXR0aW5nczo6c2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoYm9vbCBoYXMKIEV4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFNob3VsZENvbnZlcnRQb3NpdGlv
blN0eWxlT25Db3B5KGJvb2wgY29udmVydCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgc2V0dGluZ3MoKS5zZXRTaG91
bGRDb252ZXJ0UG9zaXRpb25TdHlsZU9uQ29weShjb252ZXJ0KTsKICAgICByZXR1cm4geyB9Owog
fQpAQCAtNjUyLDcgKzY1Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6
OnNldFNob3VsZENvbnZlcnRQb3NpdGlvblN0eWxlT25Db3B5KGJvb2wgY29uCiBFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTY3JvbGxpbmdUcmVlSW5jbHVkZXNGcmFtZXMo
Ym9vbCBlbmFibGVkKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBzZXR0aW5ncygpLnNldFNjcm9sbGluZ1RyZWVJbmNs
dWRlc0ZyYW1lcyhlbmFibGVkKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNjYwLDcgKzY2MCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFNjcm9sbGluZ1RyZWVJ
bmNsdWRlc0ZyYW1lcyhib29sIGVuYWJsZWQpCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNl
dHRpbmdzOjpzZXRBbGxvd1VuY2xhbXBlZFNjcm9sbFBvc2l0aW9uKGJvb2wgYWxsb3dVbmNsYW1w
ZWQpCiB7CiAgICAgaWYgKCFtX3BhZ2UgfHwgIW1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIG1fcGFnZS0+
bWFpbkZyYW1lKCkudmlldygpLT5zZXRBbGxvd3NVbmNsYW1wZWRTY3JvbGxQb3NpdGlvbkZvclRl
c3RpbmcoYWxsb3dVbmNsYW1wZWQpOwogICAgIHJldHVybiB7IH07CkBAIC02NjksNyArNjY5LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0QWxsb3dVbmNsYW1wZWRT
Y3JvbGxQb3NpdGlvbihib29sIGFsbG93VW4KIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0
dGluZ3M6OnNldEFsbG93c0lubGluZU1lZGlhUGxheWJhY2soYm9vbCBhbGxvd3MpCiB7CiAgICAg
aWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
ICAgIHNldHRpbmdzKCkuc2V0QWxsb3dzSW5saW5lTWVkaWFQbGF5YmFjayhhbGxvd3MpOwogICAg
IHJldHVybiB7IH07CiB9CkBAIC02NzcsNyArNjc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50
ZXJuYWxTZXR0aW5nczo6c2V0QWxsb3dzSW5saW5lTWVkaWFQbGF5YmFjayhib29sIGFsbG93cykK
IEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEFsbG93c0lubGluZU1lZGlh
UGxheWJhY2tBZnRlckZ1bGxzY3JlZW4oYm9vbCBhbGxvd3MpCiB7CiAgICAgaWYgKCFtX3BhZ2Up
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdz
KCkuc2V0QWxsb3dzSW5saW5lTWVkaWFQbGF5YmFja0FmdGVyRnVsbHNjcmVlbihhbGxvd3MpOwog
ICAgIHJldHVybiB7IH07CiB9CkBAIC02ODUsNyArNjg1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
SW50ZXJuYWxTZXR0aW5nczo6c2V0QWxsb3dzSW5saW5lTWVkaWFQbGF5YmFja0FmdGVyRnVsbHNj
cmVlbigKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldElubGluZU1lZGlh
UGxheWJhY2tSZXF1aXJlc1BsYXlzSW5saW5lQXR0cmlidXRlKGJvb2wgcmVxdWlyZXMpCiB7CiAg
ICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VT
U19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9
OwogICAgIHNldHRpbmdzKCkuc2V0SW5saW5lTWVkaWFQbGF5YmFja1JlcXVpcmVzUGxheXNJbmxp
bmVBdHRyaWJ1dGUocmVxdWlyZXMpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC02OTMsNyArNjkz
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0SW5saW5lTWVkaWFQ
bGF5YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHQKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFs
U2V0dGluZ3M6OnNldFNob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkoYm9v
bCByZXF1aXJlcykKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkocmVxdWlyZXMpOwogICAgIEZvbnRD
YWNoZTo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJp
bGl0eShyZXF1aXJlcyk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTczNCw3ICs3MzQsNyBAQCB2b2lk
IEludGVybmFsU2V0dGluZ3M6OnNldFdlYkdQVUVuYWJsZWQoYm9vbCBlbmFibGVkKQogRXhjZXB0
aW9uT3I8U3RyaW5nPiBJbnRlcm5hbFNldHRpbmdzOjp1c2VySW50ZXJmYWNlRGlyZWN0aW9uUG9s
aWN5KCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAgICAgc3dpdGNoIChzZXR0aW5ncygpLnVzZXJJbnRlcmZhY2VEaXJlY3Rp
b25Qb2xpY3koKSkgewogICAgIGNhc2UgVXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeTo6Q29u
dGVudDoKICAgICAgICAgcmV0dXJuIFN0cmluZyB7IEFTQ0lJTGl0ZXJhbCB7ICJDb250ZW50IiB9
IH07CkBAIC03NDIsMTMgKzc0MiwxMyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsU2V0
dGluZ3M6OnVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3koKQogICAgICAgICByZXR1cm4gU3Ry
aW5nIHsgQVNDSUlMaXRlcmFsIHsgIlZpZXciIH0gfTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIH0KIAogRXhjZXB0
aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VXNlckludGVyZmFjZURpcmVjdGlvblBv
bGljeShjb25zdCBTdHJpbmcmIHBvbGljeSkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHBvbGljeSwgImNvbnRlbnQiKSkgewogICAgICAgICBzZXR0aW5ncygp
LnNldFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3koVXNlckludGVyZmFjZURpcmVjdGlvblBv
bGljeTo6Q29udGVudCk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC03NTcsMTMgKzc1NywxMyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRVc2VySW50ZXJmYWNlRGly
ZWN0aW9uUG9saWN5KGNvbnN0IFN0cmluZwogICAgICAgICBzZXR0aW5ncygpLnNldFVzZXJJbnRl
cmZhY2VEaXJlY3Rpb25Qb2xpY3koVXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeTo6U3lzdGVt
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbFNldHRpbmdzOjpzeXN0
ZW1MYXlvdXREaXJlY3Rpb24oKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBzd2l0Y2ggKHNldHRpbmdzKCkuc3lzdGVt
TGF5b3V0RGlyZWN0aW9uKCkpIHsKICAgICBjYXNlIExUUjoKICAgICAgICAgcmV0dXJuIFN0cmlu
ZyB7IEFTQ0lJTGl0ZXJhbCB7ICJMVFIiIH0gfTsKQEAgLTc3MSwxMyArNzcxLDEzIEBAIEV4Y2Vw
dGlvbk9yPFN0cmluZz4gSW50ZXJuYWxTZXR0aW5nczo6c3lzdGVtTGF5b3V0RGlyZWN0aW9uKCkK
ICAgICAgICAgcmV0dXJuIFN0cmluZyB7IEFTQ0lJTGl0ZXJhbCB7ICJSVEwiIH0gfTsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQUNDRVNTX0VSUiB9OworICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U3lzdGVt
TGF5b3V0RGlyZWN0aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKQogewogICAgIGlmICghbV9w
YWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07Cisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZGlyZWN0aW9uLCAibHRyIikpIHsKICAgICAg
ICAgc2V0dGluZ3MoKS5zZXRTeXN0ZW1MYXlvdXREaXJlY3Rpb24oTFRSKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTc4Niw3ICs3ODYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNl
dHRpbmdzOjpzZXRTeXN0ZW1MYXlvdXREaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBkaXJlYwogICAg
ICAgICBzZXR0aW5ncygpLnNldFN5c3RlbUxheW91dERpcmVjdGlvbihSVEwpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KLSAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogfQog
CiBzdGF0aWMgRnJhbWVGbGF0dGVuaW5nIGludGVybmFsU2V0dGluZ3NUb1dlYkNvcmVWYWx1ZShJ
bnRlcm5hbFNldHRpbmdzOjpGcmFtZUZsYXR0ZW5pbmdWYWx1ZSB2YWx1ZSkKQEAgLTgwNyw3ICs4
MDcsNyBAQCBzdGF0aWMgRnJhbWVGbGF0dGVuaW5nIGludGVybmFsU2V0dGluZ3NUb1dlYkNvcmVW
YWx1ZShJbnRlcm5hbFNldHRpbmdzOjpGcmFtZUZsYQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJu
YWxTZXR0aW5nczo6c2V0RnJhbWVGbGF0dGVuaW5nKGNvbnN0IEZyYW1lRmxhdHRlbmluZ1ZhbHVl
JiBmcmFtZUZsYXR0ZW5pbmcpCiB7CiAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdzKCkuc2V0RnJhbWVGbGF0dGVu
aW5nKGludGVybmFsU2V0dGluZ3NUb1dlYkNvcmVWYWx1ZShmcmFtZUZsYXR0ZW5pbmcpKTsKICAg
ICByZXR1cm4geyB9OwogfQpAQCAtODIzLDE0ICs4MjMsMTQgQEAgdm9pZCBJbnRlcm5hbFNldHRp
bmdzOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sIGFsbG93c0FueUNlcnRpZmljYXRl
KQogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxTZXR0aW5nczo6ZGVmZXJyZWRDU1NQYXJzZXJF
bmFibGVkKCkKIHsKICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAgICAgcmV0dXJuIHNldHRpbmdzKCkuZGVmZXJyZWRDU1NQYXJzZXJF
bmFibGVkKCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldERl
ZmVycmVkQ1NTUGFyc2VyRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFtX3BhZ2Up
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIHNldHRpbmdz
KCkuc2V0RGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKGVuYWJsZWQpOwogICAgIHJldHVybiB7IH07
CiB9CkBAIC04NDIsNyArODQyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5n
czo6c2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoYm9vbCBzaG8KICAgICByZXR1
cm4geyB9OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2hvdWxkKTsKLSAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAppbmRleCAwMTA2NGZhYTRlNzE4NmIxNmI4OWZlMjU5MTU4ZWYyMTYwNGVlOGYzLi45
NDk2YjI5ZjU2ZGUzMjZkNjBjZWU0YTdjYTI4OTZkOGI3NDc4MzJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCkBAIC01NDAsMTAgKzU0MCwxMCBAQCBFeGNlcHRpb25Pcjxib29s
PiBJbnRlcm5hbHM6OmFyZVNWR0FuaW1hdGlvbnNQYXVzZWQoKSBjb25zdAogewogICAgIGF1dG8q
IGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgQVNDSUlMaXRlcmFsKCJO
byBjb250ZXh0IGRvY3VtZW50IikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJObyBjb250ZXh0IGRvY3VtZW50IikgfTsKIAog
ICAgIGlmICghZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5PVF9GT1VORF9FUlIsIEFTQ0lJTGl0ZXJhbCgiTm8gU1ZHIGFuaW1hdGlvbnMiKSB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwgQVNDSUlMaXRlcmFs
KCJObyBTVkcgYW5pbWF0aW9ucyIpIH07CiAKICAgICByZXR1cm4gZG9jdW1lbnQtPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5hcmVBbmltYXRpb25zUGF1c2VkKCk7CiB9CkBAIC02ODIsNyArNjgyLDcg
QEAgdm9pZCBJbnRlcm5hbHM6OnNldE92ZXJyaWRlQ2FjaGVQb2xpY3koQ2FjaGVQb2xpY3kgcG9s
aWN5KQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRDYW5TaG93TW9kYWxEaWFsb2dP
dmVycmlkZShib29sIGFsbG93KQogewogICAgIGlmICghY29udGV4dERvY3VtZW50KCkgfHwgIWNv
bnRleHREb2N1bWVudCgpLT5kb21XaW5kb3coKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKICAgICBjb250ZXh0RG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnNl
dENhblNob3dNb2RhbERpYWxvZ092ZXJyaWRlKGFsbG93KTsKICAgICByZXR1cm4geyB9OwpAQCAt
ODY2LDcgKzg2Niw3IEBAIE5vZGUqIEludGVybmFsczo6cGFyZW50VHJlZVNjb3BlKE5vZGUmIG5v
ZGUpCiBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpsYXN0U3BhdGlhbE5hdmlnYXRp
b25DYW5kaWRhdGVDb3VudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFjb250ZXh0RG9jdW1lbnQoKSB8
fCAhY29udGV4dERvY3VtZW50KCktPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gY29udGV4dERvY3VtZW50KCktPnBhZ2UoKS0+
bGFzdFNwYXRpYWxOYXZpZ2F0aW9uQ2FuZGlkYXRlQ291bnQoKTsKIH0KQEAgLTg4MCw3ICs4ODAs
NyBAQCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQo
KSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwog
ICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUo
KS0+YW5pbWF0aW9uKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50
KTsKIH0KQEAgLTg5OCw3ICs4OTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN1
c3BlbmRBbmltYXRpb25zKCkgY29uc3QKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBkb2N1bWVu
dC0+ZnJhbWUoKS0+YW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1
bWVudCk7CiAKQEAgLTkxNCw3ICs5MTQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6
OnJlc3VtZUFuaW1hdGlvbnMoKSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
bnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3Vt
ZW50LT5mcmFtZSgpLT5hbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9j
dW1lbnQpOwogCkBAIC05MjksMjEgKzkyOSwyMSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bHM6OnJlc3VtZUFuaW1hdGlvbnMoKSBjb25zdAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxz
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKHBhdXNl
VGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAg
IHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50
LnJlbmRlcmVyKCksIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsKIH0K
IAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNl
dWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUs
IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCiB7CiAgICAgaWYgKHBh
dXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
CiAgICAgaWYgKHBzZXVkb0lkICE9ICJiZWZvcmUiICYmIHBzZXVkb0lkICE9ICJhZnRlciIpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgUHNldWRvRWxl
bWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC5iZWZv
cmVQc2V1ZG9FbGVtZW50KCkgOiBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAgIGlm
ICghcHNldWRvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUND
RVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CiAKICAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRp
bWUocHNldWRvRWxlbWVudC0+cmVuZGVyZXIoKSwgQXRvbWljU3RyaW5nKGFuaW1hdGlvbk5hbWUp
LCBwYXVzZVRpbWUpOwogfQpAQCAtOTUxLDIxICs5NTEsMjEgQEAgRXhjZXB0aW9uT3I8Ym9vbD4g
SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJp
bmcmIGEKIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBF
bGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChwYXVzZVRpbWUgPCAwKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0
aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVyZXIoKSwgcHJvcGVydHlO
YW1lLCBwYXVzZVRpbWUpOwogfQogCiBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNl
VHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBk
b3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lk
KQogewogICAgIGlmIChwYXVzZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKIAogICAgIGlmIChwc2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBwc2V1ZG9J
ZCAhPSAiYWZ0ZXIiKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
IAogICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1ZG9JZCA9PSAiYmVmb3Jl
IiA/IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVudC5hZnRlclBzZXVkb0Vs
ZW1lbnQoKTsKICAgICBpZiAoIXBzZXVkb0VsZW1lbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBh
dXNlVHJhbnNpdGlvbkF0VGltZShwc2V1ZG9FbGVtZW50LT5yZW5kZXJlcigpLCBwcm9wZXJ0eSwg
cGF1c2VUaW1lKTsKIH0KQEAgLTk3Niw3ICs5NzYsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IElu
dGVybmFsczo6ZWxlbWVudFJlbmRlclRyZWVBc1RleHQoRWxlbWVudCYgZWxlbWVudCkKIAogICAg
IFN0cmluZyByZXByZXNlbnRhdGlvbiA9IGV4dGVybmFsUmVwcmVzZW50YXRpb24oJmVsZW1lbnQp
OwogICAgIGlmIChyZXByZXNlbnRhdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIFdURk1vdmUocmVwcmVzZW50YXRp
b24pOwogfQpAQCAtMTAwNSw3ICsxMDA1LDcgQEAgTm9kZSogSW50ZXJuYWxzOjpzaGFkb3dSb290
KEVsZW1lbnQmIGhvc3QpCiBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6c2hhZG93Um9v
dFR5cGUoY29uc3QgTm9kZSYgcm9vdCkgY29uc3QKIHsKICAgICBpZiAoIWlzPFNoYWRvd1Jvb3Q+
KHJvb3QpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAg
IHN3aXRjaCAoZG93bmNhc3Q8U2hhZG93Um9vdD4ocm9vdCkubW9kZSgpKSB7CiAgICAgY2FzZSBT
aGFkb3dSb290TW9kZTo6VXNlckFnZW50OgpAQCAtMTEyOSw3ICsxMTI5LDcgQEAgRXhjZXB0aW9u
T3I8Ym9vbD4gSW50ZXJuYWxzOjppc1RpbWVyVGhyb3R0bGVkKGludCB0aW1lb3V0SWQpCiB7CiAg
ICAgYXV0byogdGltZXIgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmZpbmRUaW1lb3V0KHRp
bWVvdXRJZCk7CiAgICAgaWYgKCF0aW1lcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5P
VF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3Ig
fTsKIAogICAgIGlmICh0aW1lci0+aW50ZXJ2YWxDbGFtcGVkVG9NaW5pbXVtKCkgPiB0aW1lci0+
bV9vcmlnaW5hbEludGVydmFsKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMzAsMTAgKzEy
MzAsMTAgQEAgRXhjZXB0aW9uT3I8VmVjdG9yPFN0cmluZz4+IEludGVybmFsczo6Zm9ybUNvbnRy
b2xTdGF0ZU9mUHJldmlvdXNIaXN0b3J5SXRlbSgpCiB7CiAgICAgSGlzdG9yeUl0ZW0qIG1haW5J
dGVtID0gZnJhbWUoKS0+bG9hZGVyKCkuaGlzdG9yeSgpLnByZXZpb3VzSXRlbSgpOwogICAgIGlm
ICghbWFpbkl0ZW0pCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
ICAgIFN0cmluZyB1bmlxdWVOYW1lID0gZnJhbWUoKS0+dHJlZSgpLnVuaXF1ZU5hbWUoKTsKICAg
ICBpZiAobWFpbkl0ZW0tPnRhcmdldCgpICE9IHVuaXF1ZU5hbWUgJiYgIW1haW5JdGVtLT5jaGls
ZEl0ZW1XaXRoVGFyZ2V0KHVuaXF1ZU5hbWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4geyBtYWluSXRlbS0+dGFy
Z2V0KCkgPT0gdW5pcXVlTmFtZSA/IG1haW5JdGVtLT5kb2N1bWVudFN0YXRlKCkgOiBtYWluSXRl
bS0+Y2hpbGRJdGVtV2l0aFRhcmdldCh1bmlxdWVOYW1lKS0+ZG9jdW1lbnRTdGF0ZSgpIH07CiB9
CiAKQEAgLTEyNDEsMTQgKzEyNDEsMTQgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpz
ZXRGb3JtQ29udHJvbFN0YXRlT2ZQcmV2aW91c0hpc3RvcnlJdGVtKGNvbnN0IFZlY3QKIHsKICAg
ICBIaXN0b3J5SXRlbSogbWFpbkl0ZW0gPSBmcmFtZSgpLT5sb2FkZXIoKS5oaXN0b3J5KCkucHJl
dmlvdXNJdGVtKCk7CiAgICAgaWYgKCFtYWluSXRlbSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgU3RyaW5nIHVuaXF1ZU5hbWUgPSBmcmFtZSgpLT50cmVl
KCkudW5pcXVlTmFtZSgpOwogICAgIGlmIChtYWluSXRlbS0+dGFyZ2V0KCkgPT0gdW5pcXVlTmFt
ZSkKICAgICAgICAgbWFpbkl0ZW0tPnNldERvY3VtZW50U3RhdGUoc3RhdGUpOwogICAgIGVsc2Ug
aWYgKEhpc3RvcnlJdGVtKiBzdWJJdGVtID0gbWFpbkl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQo
dW5pcXVlTmFtZSkpCiAgICAgICAgIHN1Ykl0ZW0tPnNldERvY3VtZW50U3RhdGUoc3RhdGUpOwog
ICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAg
cmV0dXJuIHsgfTsKIH0KIApAQCAtMTM1NCw3ICsxMzU0LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERP
TVJlY3Q+PiBJbnRlcm5hbHM6OmFic29sdXRlQ2FyZXRCb3VuZHMoKQogewogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRv
Y3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NF
U1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKIAogICAgIHJldHVybiBET01SZWN0OjpjcmVhdGUoZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVj
dGlvbigpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7CiB9CkBAIC0xMzcyLDcgKzEzNzIsNyBAQCBF
eGNlcHRpb25PcjxSZWY8RE9NUmVjdExpc3Q+PiBJbnRlcm5hbHM6Omluc3BlY3RvckhpZ2hsaWdo
dFJlY3RzKCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7CiAg
ICAgZG9jdW1lbnQtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmdldEhpZ2hsaWdodCho
aWdobGlnaHQsIEluc3BlY3Rvck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXcpOwpAQCAt
MTM4Myw3ICsxMzgzLDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6Omluc3BlY3Rv
ckhpZ2hsaWdodE9iamVjdCgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERv
Y3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gZG9jdW1l
bnQtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0
ZWROb2RlcygpLT50b0pTT05TdHJpbmcoKTsKIH0KQEAgLTEzOTIsNyArMTM5Miw3IEBAIEV4Y2Vw
dGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6Om1hcmtlckNvdW50Rm9yTm9kZShOb2RlJiBub2Rl
LCBjb25zdCBTdHJpbmcmIG1hCiB7CiAgICAgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiBtYXJrZXJUeXBlczsKICAgICBpZiAoIW1hcmtlclR5cGVzRnJvbShtYXJrZXJUeXBl
LCBtYXJrZXJUeXBlcykpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgbm9kZS5k
b2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQo
KTsKICAgICByZXR1cm4gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCZub2Rl
LCBtYXJrZXJUeXBlcykuc2l6ZSgpOwpAQCAtMTQwNCw3ICsxNDA0LDcgQEAgRXhjZXB0aW9uT3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IEludGVybmFsczo6bWFya2VyQXQoTm9kZSYgbm9kZSwg
Y29uc3QgU3RyaW4KIAogICAgIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
bWFya2VyVHlwZXM7CiAgICAgaWYgKCFtYXJrZXJUeXBlc0Zyb20obWFya2VyVHlwZSwgbWFya2Vy
VHlwZXMpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIG5vZGUuZG9jdW1lbnQo
KS5mcmFtZSgpLT5lZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CiAKQEAg
LTE0NDAsNyArMTQ0MCw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpkdW1wTWFy
a2VyUmVjdHMoY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlU3RyaW5nKQogewogICAgIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGU7CiAgICAgaWYgKCFtYXJrZXJUeXBlRnJvbSht
YXJrZXJUeXBlU3RyaW5nLCBtYXJrZXJUeXBlKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKICAgICBjb250ZXh0RG9jdW1lbnQoKS0+bWFya2VycygpLnVwZGF0ZVJlY3RzRm9ySW52YWxp
ZGF0ZWRNYXJrZXJzT2ZUeXBlKG1hcmtlclR5cGUpOwogICAgIGF1dG8gcmVjdHMgPSBjb250ZXh0
RG9jdW1lbnQoKS0+bWFya2VycygpLnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKG1hcmtlclR5cGUp
OwpAQCAtMTQ3MSw3ICsxNDcxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRN
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKIHsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFk
b2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUND
RVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CiAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLnNldE1hcmtlZFRleHRNYXRjaGVz
QXJlSGlnaGxpZ2h0ZWQoZmxhZyk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE0OTAsMTAgKzE0
OTAsMTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRMb3dQb3dlck1vZGVFbmFi
bGVkKGJvb2wgaXNFbmFibGVkKQogewogICAgIGF1dG8qIGRvY3VtZW50ID0gY29udGV4dERvY3Vt
ZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAgICAgaWYg
KCFwYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAg
IHBhZ2UtPnNldExvd1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcoaXNFbmFibGVk
KTsKICAgICByZXR1cm4geyB9OwpAQCAtMTUwMyw3ICsxNTAzLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gSW50ZXJuYWxzOjpzZXRTY3JvbGxWaWV3UG9zaXRpb24oaW50IHgsIGludCB5KQogewogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT52aWV3KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAgICAgYXV0byYgZnJhbWVWaWV3ID0gKmRvY3VtZW50LT52aWV3KCk7CiAg
ICAgYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZU9sZFZhbHVlID0gZnJhbWVW
aWV3LmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCk7CkBAIC0xNTIyLDcgKzE1MjIs
NyBAQCBFeGNlcHRpb25PcjxSZWY8RE9NUmVjdD4+IEludGVybmFsczo6bGF5b3V0Vmlld3BvcnRS
ZWN0KCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAg
ICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKQEAgLTE1MzQsNyArMTUzNCw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxET01SZWN0Pj4gSW50ZXJuYWxzOjp2aXN1YWxWaWV3cG9ydFJlY3QoKQogewogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5W
QUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNj
ZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKIApAQCAtMTU0Niw3ICsxNTQ2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50
ZXJuYWxzOjpzZXRWaWV3QmFzZUJhY2tncm91bmRDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yVmFs
dWUKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBp
ZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT52aWV3KCktPnNldEJhc2VCYWNr
Z3JvdW5kQ29sb3IoQ29sb3IoY29sb3JWYWx1ZSkpOwogICAgIHJldHVybiB7IH07CkBAIC0xNTU2
LDcgKzE1NTYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldFBhZ2luYXRpb24o
Y29uc3QgU3RyaW5nJiBtb2RlLCBpbnQgZ2FwLCBpbnQgcGFnZQogewogICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3Vt
ZW50LT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19F
UlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
CiAgICAgUGFnaW5hdGlvbiBwYWdpbmF0aW9uOwogICAgIGlmIChtb2RlID09ICJVbnBhZ2luYXRl
ZCIpCkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNl
dFBhZ2luYXRpb24oY29uc3QgU3RyaW5nJiBtb2RlLCBpbnQgZ2FwLCBpbnQgcGFnZQogICAgIGVs
c2UgaWYgKG1vZGUgPT0gIkJvdHRvbVRvVG9wUGFnaW5hdGVkIikKICAgICAgICAgcGFnaW5hdGlv
bi5tb2RlID0gUGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ7CiAgICAgZWxzZQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIHBhZ2luYXRpb24uZ2FwID0gZ2FwOwogICAg
IHBhZ2luYXRpb24ucGFnZUxlbmd0aCA9IHBhZ2VMZW5ndGg7CkBAIC0xNTgzLDcgKzE1ODMsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1
bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIGRvY3VtZW50LT5wYWdlKCkt
PnNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQoZW5hYmxlZCk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KQEAgLTE1OTIsNyArMTU5Miw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpj
b25maWd1cmF0aW9uRm9yVmlld3BvcnQoZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbywKIHsKICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKIAogICAgIGNvbnN0IGludCBkZWZhdWx0TGF5b3V0V2lkdGhGb3JOb25Nb2JpbGVQ
YWdlcyA9IDk4MDsKIApAQCAtMTYxMiw3ICsxNjEyLDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gSW50
ZXJuYWxzOjp3YXNMYXN0Q2hhbmdlVXNlckVkaXQoRWxlbWVudCYgdGV4dEZpZWxkKQogICAgIGlm
IChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pih0ZXh0RmllbGQpKQogICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4odGV4dEZpZWxkKS5sYXN0Q2hhbmdlV2FzVXNlckVk
aXQoKTsKIAotICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX05PREVfVFlQRV9FUlIgfTsK
KyAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKIH0KIAogYm9v
bCBJbnRlcm5hbHM6OmVsZW1lbnRTaG91bGRBdXRvQ29tcGxldGUoSFRNTElucHV0RWxlbWVudCYg
ZWxlbWVudCkKQEAgLTE2NTMsNyArMTY1Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFs
czo6c2Nyb2xsRWxlbWVudFRvUmVjdChFbGVtZW50JiBlbGVtZW50LCBpbnQgeCwgaW50IHksCiB7
CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBlbGVtZW50LmRvY3VtZW50KCkudmlldygpOwog
ICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9B
Q0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKICAgICBmcmFtZVZpZXctPnNjcm9sbEVsZW1lbnRUb1JlY3QoZWxlbWVudCwgeyB4LCB5
LCB3LCBoIH0pOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNjYxLDcgKzE2NjEsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCYgZWxl
bWVudCwgaW50IHgsIGludCB5LAogRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmF1dG9m
aWxsRmllbGROYW1lKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFpczxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfTk9ERV9UWVBFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5v
ZGVUeXBlRXJyb3IgfTsKIAogICAgIHJldHVybiBTdHJpbmcgeyBkb3duY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PihlbGVtZW50KS5hdXRvZmlsbERhdGEoKS5maWVsZE5hbWUgfTsKIH0KQEAg
LTE2NzAsNyArMTY3MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6cGFpbnRDb250
cm9sVGludHMoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52aWV3KCkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgZG9jdW1lbnQtPnZpZXcoKS0+cGFp
bnRDb250cm9sVGludHMoKTsKICAgICByZXR1cm4geyB9OwpAQCAtMTcxNyw3ICsxNzE3LDcgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50ZXJuYWxzOjpyYW5nZUZvckRpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKGludCB4LAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBhdXRvKiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAog
ICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApA
QCAtMTcyNyw3ICsxNzI3LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50ZXJuYWxz
OjpyYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGludCB4LAogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0oeCk7CiAgICAgVU5VU0VEX1BBUkFNKHkpOwotICAgIHJldHVybiBFeGNlcHRp
b24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAjZW5kaWYKIH0KIApAQCAtMTczNiw3ICsxNzM2LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXREZWxlZ2F0ZXNTY3JvbGxpbmcoYm9vbCBlbmFibGVk
KQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIC8vIERl
bGVnYXRlIHNjcm9sbGluZyBpcyB2YWxpZCBvbmx5IG9uIG1haW5mcmFtZSdzIHZpZXcuCiAgICAg
aWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXcoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSB8
fCAmZG9jdW1lbnQtPnBhZ2UoKS0+bWFpbkZyYW1lKCkgIT0gZG9jdW1lbnQtPmZyYW1lKCkpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgZG9jdW1lbnQt
PnZpZXcoKS0+c2V0RGVsZWdhdGVzU2Nyb2xsaW5nKGVuYWJsZWQpOwogICAgIHJldHVybiB7IH07
CkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCBFeGNlcHRpb25PcjxpbnQ+IEludGVybmFsczo6bGFzdFNw
ZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
bnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgp
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVy
biBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc3BlbGxDaGVja2VyKCkubGFzdFJlcXVlc3RT
ZXF1ZW5jZSgpOwogfQpAQCAtMTc1NSw3ICsxNzU1LDcgQEAgRXhjZXB0aW9uT3I8aW50PiBJbnRl
cm5hbHM6Omxhc3RTcGVsbENoZWNrUHJvY2Vzc2VkU2VxdWVuY2UoKQogewogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRv
Y3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NF
U1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc3BlbGxDaGVja2Vy
KCkubGFzdFByb2Nlc3NlZFNlcXVlbmNlKCk7CiB9CkBAIC0xNzk4LDcgKzE3OTgsNyBAQCBFeGNl
cHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjp3aGVlbEV2ZW50SGFuZGxlckNvdW50KCkKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRv
Y3VtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAg
IHJldHVybiBkb2N1bWVudC0+d2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOwogfQpAQCAtMTgwNyw3
ICsxODA3LDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6dG91Y2hFdmVudEhh
bmRsZXJDb3VudCgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50
KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CiAKICAgICByZXR1cm4gZG9jdW1lbnQtPnRvdWNoRXZlbnRIYW5kbGVyQ291bnQo
KTsKIH0KQEAgLTE4MTYsNyArMTgxNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxET01SZWN0TGlzdD4+
IEludGVybmFsczo6dG91Y2hFdmVudFJlY3RzRm9yRXZlbnQoY29uc3QgU3RyaW5nJiBlCiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1
bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+dG91Y2hFdmVudFJl
Y3RzRm9yRXZlbnQoZXZlbnROYW1lKTsKIH0KQEAgLTE4MjUsNyArMTgyNSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxET01SZWN0TGlzdD4+IEludGVybmFsczo6cGFzc2l2ZVRvdWNoRXZlbnRMaXN0ZW5l
clJlY3RzKCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+cGFnZSgp
LT5wYXNzaXZlVG91Y2hFdmVudExpc3RlbmVyUmVjdHMoKTsKIH0KQEAgLTE4MzcsNyArMTgzNyw3
IEBAIEV4Y2VwdGlvbk9yPFJlZjxET01SZWN0TGlzdD4+IEludGVybmFsczo6cGFzc2l2ZVRvdWNo
RXZlbnRMaXN0ZW5lclJlY3RzKCkKIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlTGlzdD4+IEludGVy
bmFsczo6bm9kZXNGcm9tUmVjdChEb2N1bWVudCYgZG9jdW1lbnQsIGludCBjZW50ZXJYLCBpbnQg
Y2VudGVyWSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNp
Z25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlw
cGluZywgYm9vbCBhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQsIGJvb2wgYWxsb3dDaGlsZEZy
YW1lQ29udGVudCkgY29uc3QKIHsKICAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCkgfHwgIWRvY3Vt
ZW50LmZyYW1lKCktPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CiAKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwogICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQudmlldygpOwpAQCAtMTk2Nyw3ICsxOTY3LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXREZXZpY2VQcm94aW1pdHkoY29uc3QgU3Ry
aW5nJiwgZG91YmxlIHZhbHVlLCBkb3UKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogI2lmIEVOQUJMRShQ
Uk9YSU1JVFlfRVZFTlRTKQogICAgIERldmljZVByb3hpbWl0eUNvbnRyb2xsZXI6OmZyb20oZG9j
dW1lbnQtPnBhZ2UoKSktPmRpZENoYW5nZURldmljZVByb3hpbWl0eSh2YWx1ZSwgbWluLCBtYXgp
OwpAQCAtMjE0MSw3ICsyMTQxLDcgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPEZpbmRPcHRpb25zPiBw
YXJzZUZpbmRPcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25MaXMKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTeW50YXhFcnJvciB9OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjE1MCw3
ICsyMTUwLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50ZXJuYWxzOjpyYW5nZU9m
U3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPFIKIHsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVu
dC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
ICAgICBhdXRvIHBhcnNlZE9wdGlvbnMgPSBwYXJzZUZpbmRPcHRpb25zKGZpbmRPcHRpb25zKTsK
ICAgICBpZiAocGFyc2VkT3B0aW9ucy5oYXNFeGNlcHRpb24oKSkKQEAgLTIxNjMsNyArMjE2Myw3
IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6OmNvdW50TWF0Y2hlc0ZvclRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
Y29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1l
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgYXV0
byBwYXJzZWRPcHRpb25zID0gcGFyc2VGaW5kT3B0aW9ucyhmaW5kT3B0aW9ucyk7CiAgICAgaWYg
KHBhcnNlZE9wdGlvbnMuaGFzRXhjZXB0aW9uKCkpCkBAIC0yMTc3LDcgKzIxNzcsNyBAQCBFeGNl
cHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRE
b2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgYXV0byBwYXJzZWRP
cHRpb25zID0gcGFyc2VGaW5kT3B0aW9ucyhmaW5kT3B0aW9ucyk7CiAgICAgaWYgKHBhcnNlZE9w
dGlvbnMuaGFzRXhjZXB0aW9uKCkpCkBAIC0yMjIyLDcgKzIyMjIsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBJbnRlcm5hbHM6OnNldEluc3BlY3RvcklzVW5kZXJUZXN0KGJvb2wgaXNVbmRlclRlc3Qp
CiB7CiAgICAgUGFnZSogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCk7
CiAgICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NF
U1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKIAogICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJc1VuZGVyVGVzdChpc1Vu
ZGVyVGVzdCk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTIyNjAsNyArMjI2MCw3IEBAIEV4Y2VwdGlv
bk9yPGJvb2w+IEludGVybmFsczo6aXNQYWdlQm94VmlzaWJsZShpbnQgcGFnZU51bWJlcikKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRv
Y3VtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAg
IHJldHVybiBkb2N1bWVudC0+aXNQYWdlQm94VmlzaWJsZShwYWdlTnVtYmVyKTsKIH0KQEAgLTIy
OTMsNyArMjI5Myw3IEBAIHN0YXRpYyBMYXllclRyZWVGbGFncyB0b0xheWVyVHJlZUZsYWdzKHVu
c2lnbmVkIHNob3J0IGZsYWdzKQogRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmxheWVy
VHJlZUFzVGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIHVuc2lnbmVkIHNob3J0IGZsYWdzKSBjb25z
dAogewogICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gZG9jdW1lbnQuZnJhbWUoKS0+bGF5ZXJU
cmVlQXNUZXh0KHRvTGF5ZXJUcmVlRmxhZ3MoZmxhZ3MpKTsKIH0KQEAgLTIzMDIsMTQgKzIzMDIs
MTQgQEAgRXhjZXB0aW9uT3I8dWludDY0X3Q+IEludGVybmFsczo6bGF5ZXJJREZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9j
dW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBpZiAoIWVsZW1lbnQu
cmVuZGVyZXIoKSB8fCAhZWxlbWVudC5yZW5kZXJlcigpLT5oYXNMYXllcigpKQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTk9UX0ZPVU5EX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTm90Rm91bmRFcnJvciB9OwogCiAgICAgYXV0byYgbGF5ZXJNb2RlbE9iamVjdCA9IGRv
d25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCplbGVtZW50LnJlbmRlcmVyKCkpOwogICAg
IGlmICghbGF5ZXJNb2RlbE9iamVjdC5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5PVF9GT1VORF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKIAogICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllck1vZGVs
T2JqZWN0LmxheWVyKCktPmJhY2tpbmcoKTsKICAgICByZXR1cm4gYmFja2luZy0+Z3JhcGhpY3NM
YXllcigpLT5wcmltYXJ5TGF5ZXJJRCgpOwpAQCAtMjMxOSw3ICsyMzE5LDcgQEAgRXhjZXB0aW9u
T3I8U3RyaW5nPiBJbnRlcm5hbHM6OnJlcGFpbnRSZWN0c0FzVGV4dCgpIGNvbnN0CiB7CiAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVu
dCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT50cmFja2VkUmVwYWlu
dFJlY3RzQXNUZXh0KCk7CiB9CkBAIC0yMzI4LDcgKzIzMjgsNyBAQCBFeGNlcHRpb25PcjxTdHJp
bmc+IEludGVybmFsczo6c2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KCkgY29uc3QKIHsKICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CiAKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAo
IXBhZ2UpCkBAIC0yMzQxLDcgKzIzNDEsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFs
czo6bWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMoKSBjb25zdAogewogICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3Vt
ZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
IAogICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKQEAg
LTIzNTQsNyArMjM1NCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxET01SZWN0TGlzdD4+IEludGVybmFs
czo6bm9uRmFzdFNjcm9sbGFibGVSZWN0cygpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAg
ICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMjM2
NywxMCArMjM2NywxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldEVsZW1lbnRV
c2VzRGlzcGxheUxpc3REcmF3aW5nKEVsZW1lbnQmIGVsZW1lbnQsCiB7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9j
dW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CiAKICAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+
KGVsZW1lbnQpKSB7CiAgICAgICAgIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihlbGVtZW50
KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwpAQCAt
MjM3OCwxMSArMjM3OCwxMSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldEVsZW1l
bnRVc2VzRGlzcGxheUxpc3REcmF3aW5nKEVsZW1lbnQmIGVsZW1lbnQsCiAgICAgfQogCiAgICAg
aWYgKCFlbGVtZW50LnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNh
c3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oZWxlbWVudC5yZW5kZXJlcigpKS0+bGF5ZXIoKTsK
ICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBsYXllci0+YmFja2luZygpLT5zZXRVc2VzRGlzcGxh
eUxpc3REcmF3aW5nKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwogICAgIHJldHVybiB7IH07CkBA
IC0yMzkyLDEwICsyMzkyLDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0RWxl
bWVudFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KEVsZW1lbnQmIGVsZW1lbnQsCiB7CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAKICAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBpZiAoaXM8SFRNTENhbnZhc0Vs
ZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAgICAgIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihl
bGVtZW50KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShpc1RyYWNraW5nUmVwbGF5KTsKQEAg
LTI0MDMsMTEgKzI0MDMsMTEgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRFbGVt
ZW50VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoRWxlbWVudCYgZWxlbWVudCwKICAgICB9CiAKICAg
ICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihlbGVtZW50LnJlbmRlcmVyKCkpLT5sYXllcigp
OwogICAgIGlmICghbGF5ZXItPmlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGxheWVyLT5iYWNraW5nKCktPnNldElzVHJhY2tp
bmdEaXNwbGF5TGlzdFJlcGxheShpc1RyYWNraW5nUmVwbGF5KTsKICAgICByZXR1cm4geyB9OwpA
QCAtMjQxNywxMCArMjQxNywxMCBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6ZGlz
cGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkCiB7CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAKICAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKSkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBEaXNwbGF5TGlzdDo6QXNUZXh0
RmxhZ3MgZGlzcGxheUxpc3RGbGFncyA9IDA7CiAgICAgaWYgKGZsYWdzICYgRElTUExBWV9MSVNU
X0lOQ0xVREVTX1BMQVRGT1JNX09QRVJBVElPTlMpCkBAIC0yNDMwLDExICsyNDMwLDExIEBAIEV4
Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVu
dCYgZWxlbWVudCwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxDYW52YXNF
bGVtZW50PihlbGVtZW50KS5kaXNwbGF5TGlzdEFzVGV4dChkaXNwbGF5TGlzdEZsYWdzKTsKIAog
ICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpLT5oYXNMYXllcigpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRv
d25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGVsZW1lbnQucmVuZGVyZXIoKSktPmxheWVy
KCk7CiAgICAgaWYgKCFsYXllci0+aXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGxheWVyLT5iYWNraW5nKCktPmRp
c3BsYXlMaXN0QXNUZXh0KGRpc3BsYXlMaXN0RmxhZ3MpOwogfQpAQCAtMjQ0MywxMCArMjQ0Mywx
MCBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6cmVwbGF5RGlzcGxheUxpc3RGb3JF
bGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIHVucwogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5yZW5k
ZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAg
ICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
TlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogCiAgICAgRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGRpc3BsYXlMaXN0
RmxhZ3MgPSAwOwogICAgIGlmIChmbGFncyAmIERJU1BMQVlfTElTVF9JTkNMVURFU19QTEFURk9S
TV9PUEVSQVRJT05TKQpAQCAtMjQ1NiwxMSArMjQ1NiwxMSBAQCBFeGNlcHRpb25PcjxTdHJpbmc+
IEludGVybmFsczo6cmVwbGF5RGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQs
IHVucwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQp
LnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGRpc3BsYXlMaXN0RmxhZ3MpOwogCiAgICAgaWYgKCFl
bGVtZW50LnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRBY2Nlc3NFcnJvciB9OwogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdD4oZWxlbWVudC5yZW5kZXJlcigpKS0+bGF5ZXIoKTsKICAgICBp
ZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gbGF5ZXItPmJhY2tpbmcoKS0+cmVwbGF5RGlzcGxh
eUxpc3RBc1RleHQoZGlzcGxheUxpc3RGbGFncyk7CiB9CkBAIC0yNDY5LDcgKzI0NjksNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJj
ZXMoKSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElE
X0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NF
cnJvciB9OwogICAgIGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmdhcmJhZ2VDb2xs
ZWN0RG9jdW1lbnRSZXNvdXJjZXMoKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMjQ5Myw3ICsy
NDkzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjppbnNlcnRBdXRob3JDU1MoY29u
c3QgU3RyaW5nJiBjc3MpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4
dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBhdXRvIHBhcnNlZFNoZWV0ID0gU3R5bGVTaGVldENv
bnRlbnRzOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBwYXJzZWRTaGVldC5nZXQoKS5zZXRJc1Vz
ZXJTdHlsZVNoZWV0KGZhbHNlKTsKQEAgLTI1MDYsNyArMjUwNiw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IEludGVybmFsczo6aW5zZXJ0VXNlckNTUyhjb25zdCBTdHJpbmcmIGNzcykgY29uc3QKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRv
Y3VtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAg
IGF1dG8gcGFyc2VkU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSgqZG9jdW1lbnQp
OwogICAgIHBhcnNlZFNoZWV0LmdldCgpLnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CkBAIC0y
NTUyLDcgKzI1NTIsNyBAQCBpbnQgSW50ZXJuYWxzOjpudW1iZXJPZlBhZ2VzKGZsb2F0IHBhZ2VX
aWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpw
YWdlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBj
b25zdAogewogICAgIGlmICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElO
VkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CiAKICAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlUHJvcGVydHkoZnJh
bWUoKSwgcHJvcGVydHlOYW1lLnV0ZjgoKS5kYXRhKCksIHBhZ2VOdW1iZXIpOwogfQpAQCAtMjU2
MCw3ICsyNTYwLDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OnBhZ2VQcm9wZXJ0
eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgaW50IHBhZ2UKIEV4Y2VwdGlvbk9yPFN0cmlu
Zz4gSW50ZXJuYWxzOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZU51bWJlciwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGlu
dCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KSBjb25zdAogewogICAgIGlmICghZnJhbWUo
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICByZXR1
cm4gUHJpbnRDb250ZXh0OjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhmcmFtZSgpLCBwYWdl
TnVtYmVyLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0
b20sIG1hcmdpbkxlZnQpOwogfQpAQCAtMjU2OSw3ICsyNTY5LDcgQEAgRXhjZXB0aW9uT3I8Zmxv
YXQ+IEludGVybmFsczo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1
bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
IAogICAgIHJldHVybiBkb2N1bWVudC0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KQEAg
LTI1NzgsNyArMjU3OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0UGFnZVNj
YWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yLCBpbnQgeCwgaW50IHkpCiB7CiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAh
ZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUND
RVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CiAKICAgICBkb2N1bWVudC0+cGFnZSgpLT5zZXRQYWdlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0
b3IsIEludFBvaW50KHgsIHkpKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjU4OCw3ICsyNTg4LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRQYWdlWm9vbUZhY3RvcihmbG9hdCB6
b29tRmFjdG9yKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT5mcmFtZSgpLT5z
ZXRQYWdlWm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjU5OCw3
ICsyNTk4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRUZXh0Wm9vbUZhY3Rv
cihmbG9hdCB6b29tRmFjdG9yKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRE
b2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT5m
cmFtZSgpLT5zZXRUZXh0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKICAgICByZXR1cm4geyB9OwpA
QCAtMjYwOCw3ICsyNjA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRVc2VG
aXhlZExheW91dChib29sIHVzZUZpeGVkTGF5b3V0KQogewogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52
aWV3KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAg
ZG9jdW1lbnQtPnZpZXcoKS0+c2V0VXNlRml4ZWRMYXlvdXQodXNlRml4ZWRMYXlvdXQpOwogICAg
IHJldHVybiB7IH07CkBAIC0yNjE4LDcgKzI2MTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbHM6OnNldEZpeGVkTGF5b3V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVu
dCB8fCAhZG9jdW1lbnQtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CiAKICAgICBkb2N1bWVudC0+dmlldygpLT5zZXRGaXhlZExheW91dFNpemUoSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTI2MjgsNyArMjYyOCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0Vmlld0V4cG9zZWRSZWN0KGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
Y29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnZpZXco
KSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBkb2N1
bWVudC0+dmlldygpLT5zZXRWaWV3RXhwb3NlZFJlY3QoRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjc1MSw3ICsyNzUxLDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxzOjpzdGFydFRyYWNraW5nUmVwYWludHMoKQogewogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwg
IWRvY3VtZW50LT52aWV3KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FD
Q0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJv
ciB9OwogCiAgICAgZG9jdW1lbnQtPnZpZXcoKS0+c2V0VHJhY2tzUmVwYWludHModHJ1ZSk7CiAg
ICAgcmV0dXJuIHsgfTsKQEAgLTI3NjEsNyArMjc2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElu
dGVybmFsczo6c3RvcFRyYWNraW5nUmVwYWludHMoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52
aWV3KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAg
ZG9jdW1lbnQtPnZpZXcoKS0+c2V0VHJhY2tzUmVwYWludHMoZmFsc2UpOwogICAgIHJldHVybiB7
IH07CkBAIC0yNzcxLDcgKzI3NzEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN0
YXJ0VHJhY2tpbmdMYXllckZsdXNoZXMoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
bnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5yZW5kZXJW
aWV3KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAg
ZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+Y29tcG9zaXRvcigpLnN0YXJ0VHJhY2tpbmdMYXllckZs
dXNoZXMoKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjc4MSw3ICsyNzgxLDcgQEAgRXhjZXB0aW9u
T3I8dW5zaWduZWQ+IEludGVybmFsczo6bGF5ZXJGbHVzaENvdW50KCkKIHsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFk
b2N1bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5jb21wb3NpdG9y
KCkubGF5ZXJGbHVzaENvdW50KCk7CiB9CkBAIC0yNzkwLDcgKzI3OTAsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbHM6OnN0YXJ0VHJhY2tpbmdTdHlsZVJlY2FsY3MoKQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgZG9jdW1l
bnQtPnN0YXJ0VHJhY2tpbmdTdHlsZVJlY2FsY3MoKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjgw
MCw3ICsyODAwLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6c3R5bGVSZWNh
bGNDb3VudCgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7
CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURf
QUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CiAKICAgICByZXR1cm4gZG9jdW1lbnQtPnN0eWxlUmVjYWxjQ291bnQoKTsKIH0KQEAg
LTI4MTcsNyArMjgxNyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c3RhcnRUcmFj
a2luZ0NvbXBvc2l0aW5nVXBkYXRlcygpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29u
dGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnJlbmRlclZp
ZXcoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBk
b2N1bWVudC0+cmVuZGVyVmlldygpLT5jb21wb3NpdG9yKCkuc3RhcnRUcmFja2luZ0NvbXBvc2l0
aW5nVXBkYXRlcygpOwogICAgIHJldHVybiB7IH07CkBAIC0yODI3LDcgKzI4MjcsNyBAQCBFeGNl
cHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjpjb21wb3NpdGluZ1VwZGF0ZUNvdW50KCkKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRv
Y3VtZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+cmVuZGVyVmlldygp
LT5jb21wb3NpdG9yKCkuY29tcG9zaXRpbmdVcGRhdGVDb3VudCgpOwogfQpAQCAtMjkxNSw3ICsy
OTE1LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmdldEN1cnJlbnRDdXJzb3JJ
bmZvKCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAg
ICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIEN1cnNv
ciBjdXJzb3IgPSBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuY3VycmVudE1vdXNl
Q3Vyc29yKCk7CkBAIC0zMDc5LDcgKzMwNzksNyBAQCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5h
bHM6Om1lZGlhRWxlbWVudEhhc0NoYXJhY3RlcmlzdGljKEhUTUxNZWRpYUVsZW1lbnQmIGVsZQog
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjaGFyYWN0ZXJpc3RpYywgImxl
Z2libGUiKSkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzQ2xvc2VkQ2FwdGlvbnMoKTsKIAot
ICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiB9CiAKICNlbmRpZgpAQCAtMzEwMiw3ICszMTAyLDcgQEAgRXhj
ZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCkK
IHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICByZXR1cm4g
ZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uc1N0
eWxlU2hlZXRPdmVycmlkZSgpOwpAQCAtMzExNSw3ICszMTE1LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gSW50ZXJuYWxzOjpzZXRDYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZShjb25zdCBTdHJpbmcm
IG92ZXJyaWQKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAg
ICBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNldENhcHRp
b25zU3R5bGVTaGVldE92ZXJyaWRlKG92ZXJyaWRlKTsKQEAgLTMxMjksNyArMzEyOSw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0UHJpbWFyeUF1ZGlvVHJhY2tMYW5ndWFnZU92
ZXJyaWRlKGNvbnN0IFN0cmluZyYKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0
RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKICAgICBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNl
cygpLnNldFByaW1hcnlBdWRpb1RyYWNrTGFuZ3VhZ2VPdmVycmlkZShsYW5ndWFnZSk7CkBAIC0z
MTQzLDcgKzMxNDMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldENhcHRpb25E
aXNwbGF5TW9kZShjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBh
Z2UoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gZG9jdW1l
bnQtPnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKQEAgLTMxNTcsNyArMzE1
Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0Q2FwdGlvbkRpc3BsYXlNb2Rl
KGNvbnN0IFN0cmluZyYgbW9kZSkKICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtb2RlLCAibWFudWFsIikpCiAgICAgICAgIGNhcHRpb25QcmVmZXJlbmNlcy5zZXRD
YXB0aW9uRGlzcGxheU1vZGUoQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6TWFudWFsKTsKICAgICBl
bHNlCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
bW9kZSk7CiAjZW5kaWYKQEAgLTMxODgsNyArMzE4OCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxET01S
ZWN0Pj4gSW50ZXJuYWxzOjpzZWxlY3Rpb25Cb3VuZHMoKQogewogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAog
ICAgIHJldHVybiBET01SZWN0OjpjcmVhdGUoZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigp
LnNlbGVjdGlvbkJvdW5kcygpKTsKIH0KQEAgLTMxOTcsNyArMzE5Nyw3IEBAIEV4Y2VwdGlvbk9y
PGJvb2w+IEludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRvck9ic2N1cmVk
KEVsZW1lbnQmIGVsCiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFpczxIVE1MUGx1Z0luRWxlbWVudD4oZWxlbWVudCkgfHwgIWlzPFJlbmRlckVt
YmVkZGVkT2JqZWN0PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxQbHVnSW5FbGVtZW50PihlbGVt
ZW50KS5pc1JlcGxhY2VtZW50T2JzY3VyZWQoKTsKIH0KQEAgLTMyNTIsNyArMzI1Miw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6YmVnaW5NZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24o
Y29uc3QgU3RyaW5nJiBpbnRlcnJ1CiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoaW50ZXJydXB0aW9uU3RyaW5nLCAic3VzcGVuZGVkdW5kZXJsb2NrIikpCiAgICAg
ICAgIGludGVycnVwdGlvbiA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpTdXNwZW5kZWRVbmRlckxv
Y2s7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1Nf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
IAogICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmJlZ2lu
SW50ZXJydXB0aW9uKGludGVycnVwdGlvbik7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTMzMDgsNyAr
MzMwOCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0TWVkaWFTZXNzaW9uUmVz
dHJpY3Rpb25zKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlCiB7CiAgICAgUGxhdGZvcm1NZWRpYVNl
c3Npb246Ok1lZGlhVHlwZSBtZWRpYVR5cGUgPSBtZWRpYVR5cGVGcm9tU3RyaW5nKG1lZGlhVHlw
ZVN0cmluZyk7CiAgICAgaWYgKG1lZGlhVHlwZSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Tm9u
ZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKICAgICBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OlNlc3Npb25SZXN0cmljdGlvbnMgcmVzdHJpY3Rpb25z
ID0gUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVzdHJpY3Rp
b25zKG1lZGlhVHlwZSk7CiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRN
YW5hZ2VyKCkucmVtb3ZlUmVzdHJpY3Rpb24obWVkaWFUeXBlLCByZXN0cmljdGlvbnMpOwpAQCAt
MzMzNyw3ICszMzM3LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6Om1lZGlhU2Vz
c2lvblJlc3RyaWN0aW9ucyhjb25zdCBTdHJpbmcmIG1lZGlhVHlwZVMKIHsKICAgICBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1lZGlhVHlwZSA9IG1lZGlhVHlwZUZyb21TdHJpbmco
bWVkaWFUeXBlU3RyaW5nKTsKICAgICBpZiAobWVkaWFUeXBlID09IFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpOb25lKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAog
ICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6U2Vzc2lvblJlc3RyaWN0aW9ucyByZXN0
cmljdGlvbnMgPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5y
ZXN0cmljdGlvbnMobWVkaWFUeXBlKTsKICAgICBpZiAocmVzdHJpY3Rpb25zID09IFBsYXRmb3Jt
TWVkaWFTZXNzaW9uTWFuYWdlcjo6Tm9SZXN0cmljdGlvbnMpCkBAIC0zNDI4LDcgKzM0MjgsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnBvc3RSZW1vdGVDb250cm9sQ29tbWFuZChj
b25zdCBTdHJpbmcmIGNvbW1hbmRTdHJpbgogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGNvbW1hbmRTdHJpbmcsICJzZWVrdG9wbGF5YmFja3Bvc2l0aW9uIikpCiAg
ICAgICAgIGNvbW1hbmQgPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U2Vla1RvUGxheWJhY2tQb3Np
dGlvbkNvbW1hbmQ7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJ
RF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKIAogICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmRpZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZChjb21tYW5kLCAmcGFyYW1ldGVyKTsK
ICAgICByZXR1cm4geyB9OwpAQCAtMzU0OSw3ICszNTQ5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
SW50ZXJuYWxzOjpzZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlclN0YXRlKGNvbnN0IFN0
cmluZyYKICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkZXZpY2VT
dGF0ZSwgInVua25vd24iKSkKICAgICAgICAgc3RhdGUgPSBNZWRpYVBsYXliYWNrVGFyZ2V0Q29u
dGV4dDo6VW5rbm93bjsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZB
TElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAgICAgcGFnZS0+c2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJT
dGF0ZShkZXZpY2VOYW1lLCBzdGF0ZSk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTM1NjEsNyArMzU2
MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxNb2NrUGFnZU92ZXJsYXk+PiBJbnRlcm5hbHM6Omluc3Rh
bGxNb2NrUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXlUCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZy
YW1lKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAg
cmV0dXJuIE1vY2tQYWdlT3ZlcmxheUNsaWVudDo6c2luZ2xldG9uKCkuaW5zdGFsbE92ZXJsYXko
ZG9jdW1lbnQtPmZyYW1lKCktPm1haW5GcmFtZSgpLCB0eXBlID09IFBhZ2VPdmVybGF5VHlwZTo6
VmlldyA/IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyA6IFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6RG9jdW1lbnQpOwogfQpAQCAtMzU3MCw3ICszNTcwLDcgQEAgRXhjZXB0aW9uT3I8
U3RyaW5nPiBJbnRlcm5hbHM6OnBhZ2VPdmVybGF5TGF5ZXJUcmVlQXNUZXh0KHVuc2lnbmVkIHNo
b3J0IGZsYWdzKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlv
dXQoKTsKIApAQCAtMzcyNCwxMiArMzcyNCwxMiBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVy
bmFsczo6c2Nyb2xsU25hcE9mZnNldHMoRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAoYm94Lmlz
Qm9keSgpKSB7CiAgICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gYm94LmZyYW1lKCkubWFp
bkZyYW1lKCkudmlldygpOwogICAgICAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3LT5p
c1Njcm9sbGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FD
Q0VTU19FUlIgfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBmcmFtZVZpZXc7CiAKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEo
KSkKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsK
KyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAg
ICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsKICAgICB9CiAKQEAgLTM3NjgsNyAr
Mzc2OCw3IEBAIGJvb2wgSW50ZXJuYWxzOjp0ZXN0UHJlbG9hZGVyU2V0dGluZ1ZpZXdwb3J0KCkK
IEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpwYXRoU3RyaW5nV2l0aFNocmlua1dyYXBw
ZWRSZWN0cyhjb25zdCBWZWN0b3I8ZG91YmxlPiYgcmVjdENvbXBvbmVudHMsIGRvdWJsZSByYWRp
dXMpCiB7CiAgICAgaWYgKHJlY3RDb21wb25lbnRzLnNpemUoKSAlIDQpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVj
dHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RDb21wb25lbnRzLnNpemUoKTsg
aSArPSA0KQpAQCAtNDEzMSwxNSArNDEzMSwxNSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bHM6OnNldE1lZGlhRGV2aWNlU3RhdGUoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJgog
ewogICAgIGF1dG8qIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1
bWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiwgQVND
SUlMaXRlcmFsKCJObyBjb250ZXh0IGRvY3VtZW50IikgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJObyBjb250ZXh0IGRvY3Vt
ZW50IikgfTsKIAogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJvcGVy
dHksICJlbmFibGVkIikpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VT
U19FUlIsIG1ha2VTdHJpbmcoIlwiIiArIHByb3BlcnR5LCAiXCIgaXMgbm90IGEgdmFsaWQgcHJv
cGVydHkgZm9yIHRoaXMgbWV0aG9kLiIpIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IsIG1ha2VTdHJpbmcoIlwiIiArIHByb3BlcnR5LCAiXCIgaXMgbm90
IGEgdmFsaWQgcHJvcGVydHkgZm9yIHRoaXMgbWV0aG9kLiIpIH07CiAKICAgICBhdXRvIHNhbHQg
PSBkb2N1bWVudC0+ZGV2aWNlSURIYXNoU2FsdCgpOwogICAgIHN0ZDo6b3B0aW9uYWw8Q2FwdHVy
ZURldmljZT4gZGV2aWNlID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCku
Y2FwdHVyZURldmljZVdpdGhVbmlxdWVJRChpZCwgc2FsdCk7CiAgICAgaWYgKCFkZXZpY2UpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIsIG1ha2VTdHJpbmco
ImRldmljZSB3aXRoIElEIFwiIiArIGlkLCAiXCIgbm90IGZvdW5kLiIpIH07CisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIG1ha2VTdHJpbmcoImRldmljZSB3
aXRoIElEIFwiIiArIGlkLCAiXCIgbm90IGZvdW5kLiIpIH07CiAKICAgICBhdXRvIHJlc3VsdCA9
IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnNldERldmljZUVuYWJsZWQo
ZGV2aWNlLT5wZXJzaXN0ZW50SWQoKSwgdmFsdWUpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCmluZGV4IGRk
MzM5MzNjZjMxZTk2YzMxNjg5ZjZjMTVlNWU1NGU0Y2Q4MmI5M2YuLjU5ZDI2YWM0NzFkYWIxYmI0
MzMzYmVhNzczZmJmZjI0Mzg2ZjAwYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvQWJzdHJhY3RXb3JrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJh
Y3RXb3JrZXIuY3BwCkBAIC00MCwyMSArNDAsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRXhj
ZXB0aW9uT3I8VVJMPiBBYnN0cmFjdFdvcmtlcjo6cmVzb2x2ZVVSTChjb25zdCBTdHJpbmcmIHVy
bCwgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kpCiB7CiAg
ICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAg
YXV0byYgY29udGV4dCA9ICpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgdXNlIHRoZSBkeW5hbWljIGdsb2JhbCBzY29wZSAoYnVnICMyNzg4Nyku
CiAgICAgVVJMIHNjcmlwdFVSTCA9IGNvbnRleHQuY29tcGxldGVVUkwodXJsKTsKICAgICBpZiAo
IXNjcmlwdFVSTC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTWU5UQVhf
RVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAg
aWYgKCFjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qoc2NyaXB0VVJMKSkKLSAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciB9OwogCiAgICAgQVNTRVJUKGNvbnRleHQuY29udGVu
dFNlY3VyaXR5UG9saWN5KCkpOwogICAgIGlmICghc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVu
dFNlY3VyaXR5UG9saWN5ICYmICFjb250ZXh0LmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxv
d0NoaWxkQ29udGV4dEZyb21Tb3VyY2Uoc2NyaXB0VVJMKSkKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNFQ1VSSVRZX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJp
dHlFcnJvciB9OwogCiAgICAgcmV0dXJuIFdURk1vdmUoc2NyaXB0VVJMKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKaW5kZXggNzFlZDk3Njk1YjI3
ZDczMDQ1MjI0NjVlZWUyODFkNzZhMjYyODBjMi4uNWZkNTFkZGI2YmUwY2Q1N2QyNzZlNzZjZjBl
MGY4Zjg2ZmMwODg0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJH
bG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxT
Y29wZS5jcHAKQEAgLTI1MSw3ICsyNTEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXb3JrZXJHbG9i
YWxTY29wZTo6aW1wb3J0U2NyaXB0cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdXJscykKICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogdXJscykgewogICAgICAgICBVUkwgdXJsID0gY29tcGxldGVVUkwo
ZW50cnkpOwogICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07CiAgICAgICAgIGNvbXBsZXRlZFVSTHMudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUodXJsKSk7CiAgICAgfQogCkBAIC0yNTksMTQgKzI1OSwxNCBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0U2NyaXB0cyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgdXJscykKICAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBjaGVjayB0aGUgaXNv
bGF0ZWQgd29ybGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBvbmNlIHdlYmtpdC5vcmcvYi8x
MDQ1MjAgaXMgc29sdmVkLgogICAgICAgICBib29sIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRl
bnRTZWN1cml0eVBvbGljeSA9IHRoaXMtPnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1
cml0eVBvbGljeSgpOwogICAgICAgICBpZiAoIXNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRT
ZWN1cml0eVBvbGljeSAmJiAhY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93U2NyaXB0RnJv
bVNvdXJjZSh1cmwpKQotICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5FVFdPUktfRVJS
IH07CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTmV0d29ya0Vycm9yIH07CiAKICAg
ICAgICAgYXV0byBzY3JpcHRMb2FkZXIgPSBXb3JrZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZSgpOwog
ICAgICAgICBzY3JpcHRMb2FkZXItPmxvYWRTeW5jaHJvbm91c2x5KHRoaXMsIHVybCwgRmV0Y2hP
cHRpb25zOjpNb2RlOjpOb0NvcnMsIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0
eVBvbGljeSA/IENvbnRlbnRTZWN1cml0eVBvbGljeUVuZm9yY2VtZW50OjpEb05vdEVuZm9yY2Ug
OiBDb250ZW50U2VjdXJpdHlQb2xpY3lFbmZvcmNlbWVudDo6RW5mb3JjZVNjcmlwdFNyY0RpcmVj
dGl2ZSwgcmVzb3VyY2VSZXF1ZXN0SWRlbnRpZmllcigpKTsKIAotICAgICAgICAvLyBJZiB0aGUg
ZmV0Y2hpbmcgYXR0ZW1wdCBmYWlsZWQsIHRocm93IGEgTkVUV09SS19FUlIgZXhjZXB0aW9uIGFu
ZCBhYm9ydCBhbGwgdGhlc2Ugc3RlcHMuCisgICAgICAgIC8vIElmIHRoZSBmZXRjaGluZyBhdHRl
bXB0IGZhaWxlZCwgdGhyb3cgYSBOZXR3b3JrRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCBhbGwg
dGhlc2Ugc3RlcHMuCiAgICAgICAgIGlmIChzY3JpcHRMb2FkZXItPmZhaWxlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5FVFdPUktfRVJSIH07CisgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTmV0d29ya0Vycm9yIH07CiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRlZCgqdGhpcywgc2NyaXB0TG9hZGVyLT5pZGVudGlmaWVy
KCksIHNjcmlwdExvYWRlci0+c2NyaXB0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAppbmRleCA2NDMwODk5YzM0ODg1ODFmYmE1MjE3NGFiMmNiMTVhYTNhYjc0ZGIwLi40
OTdhMTYwZWMxZWRlMzM0NjA1ZDc2MTkzNGRjM2Q3YmQ1MWY3MWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTE1OSw3ICsxNTksNyBAQCBYTUxIdHRwUmVxdWVzdDo6
U3RhdGUgWE1MSHR0cFJlcXVlc3Q6OnJlYWR5U3RhdGUoKSBjb25zdAogRXhjZXB0aW9uT3I8T3du
ZWRTdHJpbmc+IFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQoKQogewogICAgIGlmIChtX3Jl
c3BvbnNlVHlwZSAhPSBSZXNwb25zZVR5cGU6OkVtcHR5U3RyaW5nICYmIG1fcmVzcG9uc2VUeXBl
ICE9IFJlc3BvbnNlVHlwZTo6VGV4dCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFM
SURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVF
cnJvciB9OwogICAgIHJldHVybiBPd25lZFN0cmluZyB7IHJlc3BvbnNlVGV4dElnbm9yaW5nUmVz
cG9uc2VUeXBlKCkgfTsKIH0KIApAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmRpZENhY2hlUmVzcG9uc2UoKQogRXhjZXB0aW9uT3I8RG9jdW1lbnQqPiBYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2VYTUwoKQogewogICAgIGlmIChtX3Jlc3BvbnNlVHlwZSAhPSBSZXNwb25z
ZVR5cGU6OkVtcHR5U3RyaW5nICYmIG1fcmVzcG9uc2VUeXBlICE9IFJlc3BvbnNlVHlwZTo6RG9j
dW1lbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGlm
ICghZG9uZVdpdGhvdXRFcnJvcnMoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMzgs
NyArMjM4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6OnNldFRpbWVvdXQo
dW5zaWduZWQgdGltZW91dCkKIHsKICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c0RvY3VtZW50KCkgJiYgIW1fYXN5bmMpIHsKICAgICAgICAgbG9nQ29uc29sZUVycm9yKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgIlhNTEh0dHBSZXF1ZXN0LnRpbWVvdXQgY2Fubm90IGJlIHNl
dCBmb3Igc3luY2hyb25vdXMgSFRUUChTKSByZXF1ZXN0cyBtYWRlIGZyb20gdGhlIHdpbmRvdyBj
b250ZXh0LiIpOwotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJS
IH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAg
ICB9CiAgICAgbV90aW1lb3V0TWlsbGlzZWNvbmRzID0gdGltZW91dDsKICAgICBpZiAoIW1fdGlt
ZW91dFRpbWVyLmlzQWN0aXZlKCkpCkBAIC0yNTMsNyArMjUzLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gWE1MSHR0cFJlcXVlc3Q6OnNldFRpbWVvdXQodW5zaWduZWQgdGltZW91dCkKIEV4Y2VwdGlv
bk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXNwb25zZVR5cGUoUmVzcG9uc2VUeXBlIHR5
cGUpCiB7CiAgICAgaWYgKG1fc3RhdGUgPj0gTE9BRElORykKLSAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwogCiAgICAgLy8gTmV3ZXIgZnVuY3Rpb25hbGl0eSBpcyBub3Qg
YXZhaWxhYmxlIHRvIHN5bmNocm9ub3VzIHJlcXVlc3RzIGluIHdpbmRvdyBjb250ZXh0cywgYXMg
YSBzcGVjLW1hbmRhdGVkCiAgICAgLy8gYXR0ZW1wdCB0byBkaXNjb3VyYWdlIHN5bmNocm9ub3Vz
IFhIUiB1c2UuIHJlc3BvbnNlVHlwZSBpcyBvbmUgc3VjaCBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5
LgpAQCAtMjYxLDcgKzI2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0Ojpz
ZXRSZXNwb25zZVR5cGUoUmVzcG9uc2VUeXBlIHR5cGUpCiAgICAgLy8gc3VjaCBhcyBmaWxlOiBh
bmQgZGF0YTogc3RpbGwgbWFrZSBzZW5zZSB0byBhbGxvdy4KICAgICBpZiAoIW1fYXN5bmMgJiYg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkgJiYgbV91cmwucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKSB7CiAgICAgICAgIGxvZ0NvbnNvbGVFcnJvcihzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksICJYTUxIdHRwUmVxdWVzdC5yZXNwb25zZVR5cGUgY2Fubm90IGJlIGNoYW5n
ZWQgZm9yIHN5bmNocm9ub3VzIEhUVFAoUykgcmVxdWVzdHMgbWFkZSBmcm9tIHRoZSB3aW5kb3cg
Y29udGV4dC4iKTsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VS
UiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAg
ICAgfQogCiAgICAgbV9yZXNwb25zZVR5cGUgPSB0eXBlOwpAQCAtMzE3LDcgKzMxNyw3IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKQogRXhjZXB0
aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6OnNldFdpdGhDcmVkZW50aWFscyhib29sIHZhbHVl
KQogewogICAgIGlmIChtX3N0YXRlID4gT1BFTkVEIHx8IG1fc2VuZEZsYWcpCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIG1faW5jbHVkZUNyZWRlbnRpYWxz
ID0gdmFsdWU7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTQxOCwxMCArNDE4LDEwIEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25z
dCBVUkwmIHVybCwgYm9vCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gVU5TRU5UKTsKIAogICAgIGlm
ICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsK
IAogICAgIGlmICghaXNBbGxvd2VkSFRUUE1ldGhvZChtZXRob2QpKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
ZWN1cml0eUVycm9yIH07CiAKICAgICBpZiAoIWFzeW5jICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIE5ld2VyIGZ1bmN0aW9uYWxpdHkgaXMg
bm90IGF2YWlsYWJsZSB0byBzeW5jaHJvbm91cyByZXF1ZXN0cyBpbiB3aW5kb3cgY29udGV4dHMs
IGFzIGEgc3BlYy1tYW5kYXRlZApAQCAtNDMwLDEzICs0MzAsMTMgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYg
dXJsLCBib28KICAgICAgICAgLy8gc3VjaCBhcyBmaWxlOiBhbmQgZGF0YTogc3RpbGwgbWFrZSBz
ZW5zZSB0byBhbGxvdy4KICAgICAgICAgaWYgKHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkg
JiYgbV9yZXNwb25zZVR5cGUgIT0gUmVzcG9uc2VUeXBlOjpFbXB0eVN0cmluZykgewogICAgICAg
ICAgICAgbG9nQ29uc29sZUVycm9yKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgIlN5bmNocm9u
b3VzIEhUVFAoUykgcmVxdWVzdHMgbWFkZSBmcm9tIHRoZSB3aW5kb3cgY29udGV4dCBjYW5ub3Qg
aGF2ZSBYTUxIdHRwUmVxdWVzdC5yZXNwb25zZVR5cGUgc2V0LiIpOwotICAgICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfQUNDRVNTX0VSUiB9OworICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gU2ltaWxhcmx5LCB0aW1lb3V0cyBhcmUgZGlzYWJsZWQgZm9yIHN5bmNocm9ub3VzIHJlcXVl
c3RzIGFzIHdlbGwuCiAgICAgICAgIGlmIChtX3RpbWVvdXRNaWxsaXNlY29uZHMgPiAwKSB7CiAg
ICAgICAgICAgICBsb2dDb25zb2xlRXJyb3Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAiU3lu
Y2hyb25vdXMgWE1MSHR0cFJlcXVlc3RzIG11c3Qgbm90IGhhdmUgYSB0aW1lb3V0IHZhbHVlIHNl
dC4iKTsKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX0FDQ0VTU19FUlIg
fTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNDgyLDEzICs0ODIsMTMgQEAgc3RkOjpvcHRpb25hbDxF
eGNlcHRpb25Pcjx2b2lkPj4gWE1MSHR0cFJlcXVlc3Q6OnByZXBhcmVUb1NlbmQoKQogICAgIGF1
dG8mIGNvbnRleHQgPSAqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3Rh
dGUgIT0gT1BFTkVEIHx8IG1fc2VuZEZsYWcpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb25Pcjx2
b2lkPiB7IEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH0gfTsKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbk9yPHZvaWQ+IHsgRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfSB9Owog
ICAgIEFTU0VSVCghbV9sb2FkZXIpOwogCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBj
aGVjayB0aGUgaXNvbGF0ZWQgd29ybGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBvbmNlIHdl
YmtpdC5vcmcvYi8xMDQ1MjAgaXMgc29sdmVkLgogICAgIGlmICghY29udGV4dC5zaG91bGRCeXBh
c3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSAmJiAhY29udGV4dC5jb250ZW50U2Vj
dXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9Tb3VyY2UobV91cmwpKSB7CiAgICAgICAgIGlm
ICghbV9hc3luYykKLSAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25Pcjx2b2lkPiB7IEV4Y2Vw
dGlvbiB7IE5FVFdPUktfRVJSIH0gfTsKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25Pcjx2
b2lkPiB7IEV4Y2VwdGlvbiB7IE5ldHdvcmtFcnJvciB9IH07CiAgICAgICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKICAgICAgICAgbV90aW1lb3V0VGltZXIuc3RvcCgpOwogICAgICAgICBt
X25ldHdvcmtFcnJvclRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwpAQCAtNjg2LDcgKzY4Niw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KCkKIHsKICAg
ICAvLyBPbmx5IEdFVCByZXF1ZXN0IGlzIHN1cHBvcnRlZCBmb3IgYmxvYiBVUkwuCiAgICAgaWYg
KCFtX2FzeW5jICYmIG1fdXJsLnByb3RvY29sSXNCbG9iKCkgJiYgbV9tZXRob2QgIT0gIkdFVCIp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBORVRXT1JLX0VSUiB9OworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTmV0d29ya0Vycm9yIH07CiAKICAgICBtX3NlbmRGbGFnID0gdHJ1ZTsK
IApAQCAtNzY5LDcgKzc2OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0Ojpj
cmVhdGVSZXF1ZXN0KCkKICAgICBpZiAobV9leGNlcHRpb25Db2RlKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgbV9leGNlcHRpb25Db2RlIH07CiAgICAgaWYgKG1fZXJyb3IpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBORVRXT1JLX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTmV0d29ya0Vycm9yIH07CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtODk2LDcgKzg5
Niw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkKIEV4Y2VwdGlvbk9y
PHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpvdmVycmlkZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgb3Zl
cnJpZGUpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gTE9BRElORyB8fCBtX3N0YXRlID09IERPTkUp
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIG1fbWltZVR5
cGVPdmVycmlkZSA9IG92ZXJyaWRlOwogICAgIHJldHVybiB7IH07CkBAIC05MDksMTIgKzkwOSwx
MiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cgogICAgICAgICBpZiAodXNlc0Rhc2hib2FyZEJh
Y2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAjZW5k
aWYKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAogICAg
IFN0cmluZyBub3JtYWxpemVkVmFsdWUgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUVFBTcGFj
ZXModmFsdWUpOwogICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihuYW1lKSB8fCAhaXNWYWxpZEhU
VFBIZWFkZXJWYWx1ZShub3JtYWxpemVkVmFsdWUpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3Ig
fTsKIAogICAgIC8vIEEgcHJpdmlsZWdlZCBzY3JpcHQgKGUuZy4gYSBEYXNoYm9hcmQgd2lkZ2V0
KSBjYW4gc2V0IGFueSBoZWFkZXJzLgogICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9h
ZExvY2FsUmVzb3VyY2VzKCkgJiYgIWlzQWxsb3dlZEhUVFBIZWFkZXIobmFtZSkpIHsKQEAgLTEw
MDQsNyArMTAwNCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChlcnJvci5pc0NhbmNl
bGxhdGlvbigpKSB7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ29kZSA9IEFCT1JUX0VSUjsKKyAgICAg
ICAgbV9leGNlcHRpb25Db2RlID0gQWJvcnRFcnJvcjsKICAgICAgICAgYWJvcnRFcnJvcigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTAzMiw3ICsxMDMyLDcgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICAgICAgbV9u
ZXR3b3JrRXJyb3JUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBtX2V4Y2VwdGlvbkNvZGUgPSBORVRXT1JLX0VSUjsKKyAgICBtX2V4Y2VwdGlvbkNv
ZGUgPSBOZXR3b3JrRXJyb3I7CiAgICAgbmV0d29ya0Vycm9yKCk7CiB9CiAKQEAgLTExOTcsMTEg
KzExOTcsMTEgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVhY2hUaW1lb3V0KCkKIAogICAg
IG1fc2VuZEZsYWcgPSBmYWxzZTsKICAgICBtX2Vycm9yID0gdHJ1ZTsKLSAgICBtX2V4Y2VwdGlv
bkNvZGUgPSBUSU1FT1VUX0VSUjsKKyAgICBtX2V4Y2VwdGlvbkNvZGUgPSBUaW1lb3V0RXJyb3I7
CiAKICAgICBpZiAoIW1fYXN5bmMpIHsKICAgICAgICAgbV9zdGF0ZSA9IERPTkU7Ci0gICAgICAg
IG1fZXhjZXB0aW9uQ29kZSA9IFRJTUVPVVRfRVJSOworICAgICAgICBtX2V4Y2VwdGlvbkNvZGUg
PSBUaW1lb3V0RXJyb3I7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aEV2YWx1YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
WFBhdGhFdmFsdWF0b3IuY3BwCmluZGV4IGYzMmFkODJhYzVjZDU2NDhmMGMwOTM4MGMyM2NkMTMw
NmY4MTkzY2UuLjBjYzFkNWQ4NzNmZjkxODMxN2MwODEzYjNiZTM5MjY1MmRhYTdmMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEV2YWx1YXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoRXZhbHVhdG9yLmNwcApAQCAtNDksNyArNDksNyBAQCBSZWY8WFBh
dGhOU1Jlc29sdmVyPiBYUGF0aEV2YWx1YXRvcjo6Y3JlYXRlTlNSZXNvbHZlcihOb2RlKiBub2Rl
UmVzb2x2ZXIpCiBFeGNlcHRpb25PcjxSZWY8WFBhdGhSZXN1bHQ+PiBYUGF0aEV2YWx1YXRvcjo6
ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBOb2RlKiBjb250ZXh0Tm9kZSwgUmVm
UHRyPFhQYXRoTlNSZXNvbHZlcj4mJiByZXNvbHZlciwgdW5zaWduZWQgc2hvcnQgdHlwZSwgWFBh
dGhSZXN1bHQqIHJlc3VsdCkKIHsKICAgICBpZiAoIWlzVmFsaWRDb250ZXh0Tm9kZShjb250ZXh0
Tm9kZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9Owor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAogICAgIGF1
dG8gY3JlYXRlUmVzdWx0ID0gY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBXVEZNb3ZlKHJl
c29sdmVyKSk7CiAgICAgaWYgKGNyZWF0ZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEV4cHJlc3Npb24uY3BwIGIvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoRXhwcmVzc2lvbi5jcHAKaW5kZXggZDAyNThlNzQ0M2MxOTY0MTcyYTJkMDAx
YmRhNzIyMDA1MWM4NTI3ZC4uZGFjYTQ2OWY3ZDM0NmQ2NzVlZjc4OGQ1NTlkMWFiNzcxMGZlMGE4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRXhwcmVzc2lvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRXhwcmVzc2lvbi5jcHAKQEAgLTU5LDcgKzU5LDcg
QEAgWFBhdGhFeHByZXNzaW9uOjp+WFBhdGhFeHByZXNzaW9uKCkKIEV4Y2VwdGlvbk9yPFJlZjxY
UGF0aFJlc3VsdD4+IFhQYXRoRXhwcmVzc2lvbjo6ZXZhbHVhdGUoTm9kZSogY29udGV4dE5vZGUs
IHVuc2lnbmVkIHNob3J0IHR5cGUsIFhQYXRoUmVzdWx0KikKIHsKICAgICBpZiAoIWlzVmFsaWRD
b250ZXh0Tm9kZShjb250ZXh0Tm9kZSkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1Rf
U1VQUE9SVEVEX0VSUiB9OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKIAogICAgIEV2YWx1YXRpb25Db250ZXh0JiBldmFsdWF0aW9uQ29udGV4dCA9IEV4
cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCk7CiAgICAgZXZhbHVhdGlvbkNvbnRleHQubm9k
ZSA9IGNvbnRleHROb2RlOwpAQCAtNzAsNyArNzAsNyBAQCBFeGNlcHRpb25PcjxSZWY8WFBhdGhS
ZXN1bHQ+PiBYUGF0aEV4cHJlc3Npb246OmV2YWx1YXRlKE5vZGUqIGNvbnRleHROb2RlLCB1bnNp
ZwogICAgIGV2YWx1YXRpb25Db250ZXh0Lm5vZGUgPSBudWxscHRyOyAvLyBEbyBub3QgaG9sZCBh
IHJlZmVyZW5jZSB0byB0aGUgY29udGV4dCBub2RlLCBhcyB0aGlzIG1heSBwcmV2ZW50IHRoZSB3
aG9sZSBkb2N1bWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZCBpbiB0aW1lLgogCiAgICAgaWYgKGV2
YWx1YXRpb25Db250ZXh0LmhhZFR5cGVDb252ZXJzaW9uRXJyb3IpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTWU5UQVhfRVJSIH07CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50
YXhFcnJvciB9OwogCiAgICAgaWYgKHR5cGUgIT0gWFBhdGhSZXN1bHQ6OkFOWV9UWVBFKSB7CiAg
ICAgICAgIGF1dG8gY29udmVydFRvUmVzdWx0ID0gcmVzdWx0LT5jb252ZXJ0VG8odHlwZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAppbmRleCA4MzI0NjE1YmQzYTE1MjVhNTAwYTM4MjNj
NDNmM2VhNzlkODJmZWNmLi4zOGVmNTU3NGRhMWZmNjUxMTFjYTFjMWRmZTAwODRjNzVhZDI5ZDlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAKQEAgLTQ1NywxMCArNDU3LDEwIEBAIEV4
Y2VwdGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4gUGFyc2VyOjpwYXJzZVN0YXRl
bWVudChjb25zdCBTdHJpbmcmIHN0CiAgICAgaW50IHBhcnNlRXJyb3IgPSB4cGF0aHl5cGFyc2Uo
cGFyc2VyKTsKIAogICAgIGlmIChwYXJzZXIubV9zYXdOYW1lc3BhY2VFcnJvcikKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IE5BTUVTUEFDRV9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5hbWVzcGFjZUVycm9yIH07CiAKICAgICBpZiAocGFyc2VFcnJvcikKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiAKICAgICByZXR1cm4gV1RGTW92ZShwYXJzZXIubV9yZXN1bHQp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUmVzdWx0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aFJlc3VsdC5jcHAKaW5kZXggMmUzMzE4YzgwZGJhYTRhOWJk
NWRmZTI5YmRiNDhlMTE1MTFjOTEyZC4uNjVmNDIyZDllZmQyNTgzNDQwMTgyNDA3NjdiYmNhYzQ2
ODM4MDJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUmVzdWx0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhSZXN1bHQuY3BwCkBAIC0xNjQsNyArMTY0LDcg
QEAgRXhjZXB0aW9uT3I8Tm9kZSo+IFhQYXRoUmVzdWx0OjppdGVyYXRlTmV4dCgpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAogICAgIGlmIChpbnZhbGlkSXRlcmF0
b3JTdGF0ZSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIg
fTsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKICAg
ICBpZiAobV9ub2RlU2V0UG9zaXRpb24gPj0gbV9ub2RlU2V0LnNpemUoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRXhj
ZXB0aW9uSGFuZGxlcnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRXhjZXB0aW9u
SGFuZGxlcnMubW0KaW5kZXggZWE4NDczY2U4ZTcwNzBjN2YyNTI3YjE0NzQ0ZDk5Nzc3ZmU4YzEx
Ni4uZjNjZmViMTAyZWJlNGU0MDYwYmJmMjNmZTZiYzZiYWUwNDYwZmY3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0V4Y2VwdGlvbkhhbmRsZXJzLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9FeGNlcHRpb25IYW5kbGVycy5tbQpAQCAtNjcsNyAr
NjcsNyBAQCB2b2lkIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCkKIAogdm9pZCByYWlzZU5vdFN1
cHBvcnRlZEVycm9yRXhjZXB0aW9uKCkKIHsKLSAgICByYWlzZURPTUVycm9yRXhjZXB0aW9uKFdl
YkNvcmU6Ok5PVF9TVVBQT1JURURfRVJSKTsKKyAgICByYWlzZURPTUVycm9yRXhjZXB0aW9uKFdl
YkNvcmU6Ok5vdFN1cHBvcnRlZEVycm9yKTsKIH0KIAogdm9pZCByYWlzZURPTUVycm9yRXhjZXB0
aW9uKFdlYkNvcmU6OkV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikK
</data>

          </attachment>
      

    </bug>

</bugzilla>