<?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>108146</bug_id>
          
          <creation_ts>2013-01-28 19:45:46 -0800</creation_ts>
          <short_desc>webdatabase: Change DatabaseManager interface to be static methods.</short_desc>
          <delta_ts>2013-01-28 21:27:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>abarth</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mifenton</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>sam</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>818411</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-28 19:45:46 -0800</bug_when>
    <thetext>The DatabaseManager is a singleton class.  Instead of DatabaseManager::manager().isAvailable(), we should be able to call DatabaseManager::isAvailable() instead.  The latter form is a little shorter and easier to read.  This patch does a small refactor to make this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818426</commentid>
    <comment_count>1</comment_count>
      <attachid>185139</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-28 20:05:51 -0800</bug_when>
    <thetext>Created attachment 185139
the patch.

This patch is mostly cosmetic.  I basically moved the DatabaseManager implementation to an Internal class, and reimplemented DatabaseManager methods as static which forwards the call to the Internal instance.

This patch was rs= Sam Weinig.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818439</commentid>
    <comment_count>2</comment_count>
      <attachid>185139</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-28 20:35:03 -0800</bug_when>
    <thetext>Comment on attachment 185139
the patch.

Attachment 185139 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16163938</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818476</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-28 21:27:54 -0800</bug_when>
    <thetext>This turned out to be harder than I originally thought.  The Windows port does not think that DatabaseManager&apos;s &quot;friend&quot;-ship extends to DatabaseManager::Internal.

Since, this effort is turning hairy (it was supposed to be a slam dunk), I&apos;ll postpone it.  The implementation of DatabaseManager will shift in the near future.  I might be able to make this change with minimal effort then.  I&apos;ll leave it be for now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185139</attachid>
            <date>2013-01-28 20:05:51 -0800</date>
            <delta_ts>2013-01-28 21:24:10 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-108146.patch</filename>
            <type>text/plain</type>
            <size>98906</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNyBAQAorMjAxMy0wMS0yOCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIERhdGFiYXNlTWFuYWdl
ciBpbnRlcmZhY2UgdG8gYmUgc3RhdGljIG1ldGhvZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxNDYuCisKKyAgICAgICAgUnViYmVyIHN0YW1w
ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01X
aW5kb3dXZWJEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6bWF4aW11bVNpemUpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlQ29udGV4dDo6ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6aW5pdGlhbGl6ZUludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OnNldENsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpkYXRhYmFzZURpcmVjdG9y
eVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6c2V0
RGF0YWJhc2VEaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdl
cjo6SW50ZXJuYWw6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFu
YWdlcjo6SW50ZXJuYWw6OnNldElzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlTWFuYWdlcjo6SW50ZXJuYWw6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6Omhhc09wZW5EYXRhYmFzZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6c2V0SGFzT3BlbkRhdGFi
YXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpzdG9w
RGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6
OmZ1bGxQYXRoRm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpJbnRlcm5hbDo6aGFzRW50cnlGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VNYW5hZ2VyOjpJbnRlcm5hbDo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZU1hbmFnZXI6OkludGVybmFsOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OnVzYWdlRm9y
T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OnF1
b3RhRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJu
YWw6OnNldFF1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJu
YWw6OmRlbGV0ZUFsbERhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFn
ZXI6OkludGVybmFsOjpkZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VN
YW5hZ2VyOjpJbnRlcm5hbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6c2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6ZGF0YWJhc2VDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OmNsb3Nl
RGF0YWJhc2VzSW1tZWRpYXRlbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpJbnRlcm5hbDo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjphZGRPcGVuRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6cmVt
b3ZlT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6SW50
ZXJuYWw6OnNldERhdGFiYXNlRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6OkludGVybmFsOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmg6CisgICAgICAgIChEYXRhYmFzZU1hbmFn
ZXIpOgorICAgICAgICAoSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5h
Z2VyOjpJbnRlcm5hbDo6fkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFu
YWdlcjo6aW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VNYW5hZ2VyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VNYW5hZ2VyOjpzZXREYXRhYmFzZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZU1hbmFnZXI6OnNldElzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlTWFuYWdlcjo6aGFzT3BlbkRhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZU1hbmFnZXI6OnNldEhhc09wZW5EYXRhYmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VNYW5hZ2VyOjpzdG9wRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
TWFuYWdlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZU1hbmFnZXI6Omhhc0VudHJ5Rm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
TWFuYWdlcjo6b3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRh
dGFiYXNlTmFtZXNGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6OnVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdl
cjo6cXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpz
ZXRRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZUFsbERh
dGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZU9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZURhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6c2NoZWR1bGVOb3RpZnlEYXRhYmFz
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpjbG9zZURhdGFiYXNl
c0ltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6aW50ZXJy
dXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
TWFuYWdlcjo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFu
YWdlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFu
YWdlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFu
YWdlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6On5E
YXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjbG9zZUltbWVk
aWF0ZWx5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21t
aXRXcml0ZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ2xp
ZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBXZWJD
b3JlLmV4cC5pbjoKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6b3Bl
bkRhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpvcGVuRGF0YWJhc2VTeW5jRW5hYmxlZCk6CisgICAgICAgICogaGlzdG9yeS9QYWdlQ2Fj
aGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFt
ZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJl
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkU2h1dGRvd25TdGFydFRhc2s6
OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6c3RvcCk6CisK
IDIwMTMtMDEtMjggIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W3Y4XSBTZWN1cml0eSBmZWF0dXJlOiBKYXZhU2NyaXB0IEJpbmRpbmdzIGhhcmRlbmluZwpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsMjAgKzM2NywyMSBAQCBfX1pO
N1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybUMxRXYKIF9fWk43V2ViQ29yZTE1QXJjaGl2ZVJlc291
cmNlNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU18xMlNoYXJlZEJ1ZmZlckVFRVJLTlNfNEtV
UkxFUktOUzFfNlN0cmluZ0VTQV9TQV9SS05TXzE2UmVzb3VyY2VSZXNwb25zZUUKIF9fWk43V2Vi
Q29yZTE1RE9NV3JhcHBlcldvcmxkMTNjbGVhcldyYXBwZXJzRXYKIF9fWk43V2ViQ29yZTE1RE9N
V3JhcHBlcldvcmxkRDFFdgotX19aTjdXZWJDb3JlMTVEYXRhYmFzZU1hbmFnZXIxNHNldElzQXZh
aWxhYmxlRWIKLV9fWk43V2ViQ29yZTE1RGF0YWJhc2VNYW5hZ2VyMTZoYXNPcGVuRGF0YWJhc2Vz
RVBOU18yMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHRFCi1fX1pON1dlYkNvcmUxNURhdGFiYXNlTWFu
YWdlcjEyZGVsZXRlT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQotX19aTjdXZWJDb3JlMTVE
YXRhYmFzZU1hbmFnZXIxNGRlbGV0ZURhdGFiYXNlRVBOU18xNFNlY3VyaXR5T3JpZ2luRVJLTjNX
VEY2U3RyaW5nRQotX19aTjdXZWJDb3JlMTVEYXRhYmFzZU1hbmFnZXIxNHF1b3RhRm9yT3JpZ2lu
RVBOU18xNFNlY3VyaXR5T3JpZ2luRQotX19aTjdXZWJDb3JlMTVEYXRhYmFzZU1hbmFnZXIxNHVz
YWdlRm9yT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQotX19aTjdXZWJDb3JlMTVEYXRhYmFz
ZU1hbmFnZXIxMGluaXRpYWxpemVFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxNURhdGFi
YXNlTWFuYWdlcjE4ZGVsZXRlQWxsRGF0YWJhc2VzRXYKLV9fWk43V2ViQ29yZTE1RGF0YWJhc2VN
YW5hZ2VyMjJkYXRhYmFzZU5hbWVzRm9yT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRVJOM1dU
RjZWZWN0b3JJTlMzXzZTdHJpbmdFTG0wRUVFCi1fX1pON1dlYkNvcmUxNURhdGFiYXNlTWFuYWdl
cjIzZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW5FUktOM1dURjZTdHJpbmdFUE5TXzE0U2VjdXJpdHlP
cmlnaW5FCi1fX1pON1dlYkNvcmUxNURhdGFiYXNlTWFuYWdlcjdvcmlnaW5zRVJOM1dURjZWZWN0
b3JJTlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRUxtMEVFRQotX19aTjdXZWJDb3Jl
MTVEYXRhYmFzZU1hbmFnZXI3bWFuYWdlckV2Ci1fX1pON1dlYkNvcmUxNURhdGFiYXNlTWFuYWdl
cjhzZXRRdW90YUVQTlNfMTRTZWN1cml0eU9yaWdpbkV5Ci1fX1pON1dlYkNvcmUxNURhdGFiYXNl
TWFuYWdlcjlzZXRDbGllbnRFUE5TXzIxRGF0YWJhc2VNYW5hZ2VyQ2xpZW50RQorX19aTjdXZWJD
b3JlMTVEYXRhYmFzZU1hbmFnZXIxMHNfaW50ZXJuYWxFCitfX1pON1dlYkNvcmUxNURhdGFiYXNl
TWFuYWdlcjE4aW5pdGlhbGl6ZUludGVybmFsRXYKK19fWk43V2ViQ29yZTE1RGF0YWJhc2VNYW5h
Z2VyOEludGVybmFsMTBpbml0aWFsaXplRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTVE
YXRhYmFzZU1hbmFnZXI4SW50ZXJuYWwxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdp
bkUKK19fWk43V2ViQ29yZTE1RGF0YWJhc2VNYW5hZ2VyOEludGVybmFsMTRkZWxldGVEYXRhYmFz
ZUVQTlNfMTRTZWN1cml0eU9yaWdpbkVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE1RGF0
YWJhc2VNYW5hZ2VyOEludGVybmFsMTRxdW90YUZvck9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdp
bkUKK19fWk43V2ViQ29yZTE1RGF0YWJhc2VNYW5hZ2VyOEludGVybmFsMTRzZXRJc0F2YWlsYWJs
ZUViCitfX1pON1dlYkNvcmUxNURhdGFiYXNlTWFuYWdlcjhJbnRlcm5hbDE0dXNhZ2VGb3JPcmln
aW5FUE5TXzE0U2VjdXJpdHlPcmlnaW5FCitfX1pON1dlYkNvcmUxNURhdGFiYXNlTWFuYWdlcjhJ
bnRlcm5hbDE2aGFzT3BlbkRhdGFiYXNlc0VQTlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0RQor
X19aTjdXZWJDb3JlMTVEYXRhYmFzZU1hbmFnZXI4SW50ZXJuYWwxOGRlbGV0ZUFsbERhdGFiYXNl
c0V2CitfX1pON1dlYkNvcmUxNURhdGFiYXNlTWFuYWdlcjhJbnRlcm5hbDIyZGF0YWJhc2VOYW1l
c0Zvck9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkVSTjNXVEY2VmVjdG9ySU5TNF82U3RyaW5n
RUxtMEVFRQorX19aTjdXZWJDb3JlMTVEYXRhYmFzZU1hbmFnZXI4SW50ZXJuYWwyM2RldGFpbHNG
b3JOYW1lQW5kT3JpZ2luRVJLTjNXVEY2U3RyaW5nRVBOU18xNFNlY3VyaXR5T3JpZ2luRQorX19a
TjdXZWJDb3JlMTVEYXRhYmFzZU1hbmFnZXI4SW50ZXJuYWw3b3JpZ2luc0VSTjNXVEY2VmVjdG9y
SU5TMl82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVMbTBFRUUKK19fWk43V2ViQ29yZTE1
RGF0YWJhc2VNYW5hZ2VyOEludGVybmFsOHNldFF1b3RhRVBOU18xNFNlY3VyaXR5T3JpZ2luRXkK
K19fWk43V2ViQ29yZTE1RGF0YWJhc2VNYW5hZ2VyOEludGVybmFsOXNldENsaWVudEVQTlNfMjFE
YXRhYmFzZU1hbmFnZXJDbGllbnRFCiBfX1pON1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjEwc2V0
Rm9jdXNlZEViCiBfX1pON1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjE0c2V0Rm9jdXNlZE5vZGVF
UE5TXzROb2RlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzVGcmFtZUVFRQogX19aTjdXZWJDb3JlMTVG
b2N1c0NvbnRyb2xsZXIxNXNldEZvY3VzZWRGcmFtZUVOM1dURjEwUGFzc1JlZlB0cklOU181RnJh
bWVFRUUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3RE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA3LDggKzIwNyw4IEBAIEFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJh
c2UoU2NyaXAKICAgICAgICAgaGFzaFNldC0+YWRkKHRoaXMpOwogICAgIH0KIAotICAgIG1fZmls
ZW5hbWUgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNl
Y3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCku
YWRkT3BlbkRhdGFiYXNlKHRoaXMpOworICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZU1hbmFnZXI6
OmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKKyAgICBEYXRh
YmFzZU1hbmFnZXI6OmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKIH0KIAogQWJzdHJhY3REYXRhYmFz
ZTo6fkFic3RyYWN0RGF0YWJhc2UoKQpAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgQWJzdHJhY3RE
YXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkKIAogdW5zaWduZWQgbG9uZyBsb25nIEFic3RyYWN0
RGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRGF0YWJhc2VNYW5h
Z2VyOjptYW5hZ2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKHRoaXMpOworICAgIHJldHVybiBE
YXRhYmFzZU1hbmFnZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZSh0aGlzKTsKIH0KIAogdm9pZCBB
YnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93
V2ViRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOSArNDYsOCBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBET01XaW5kb3dXZWJEYXRhYmFz
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSA9IDA7
Ci0gICAgRGF0YWJhc2VNYW5hZ2VyJiBkYk1hbmFnZXIgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFn
ZXIoKTsKLSAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkgJiYgd2luZG93LT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSh3aW5kb3ctPmRvY3VtZW50
KCktPnRvcERvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICBkYXRhYmFzZSA9
IGRiTWFuYWdlci5vcGVuRGF0YWJhc2Uod2luZG93LT5kb2N1bWVudCgpLCBuYW1lLCB2ZXJzaW9u
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOworICAg
IGlmIChEYXRhYmFzZU1hbmFnZXI6OmlzQXZhaWxhYmxlKCkgJiYgd2luZG93LT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSh3aW5kb3ctPmRvY3VtZW50KCkt
PnRvcERvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICBkYXRhYmFzZSA9IERh
dGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKHdpbmRvdy0+ZG9jdW1lbnQoKSwgbmFtZSwgdmVy
c2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsK
IAogICAgIGlmICghZGF0YWJhc2UgJiYgIWVjKQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2Uu
Y3BwCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQg
RGF0YWJhc2U6OmNsb3NlKCkKICAgICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOwog
ICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNs
b3NlZCh0aGlzKTsKICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5z
Y2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2Vy
KCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOworICAgIERhdGFiYXNlTWFuYWdlcjo6cmVtb3Zl
T3BlbkRhdGFiYXNlKHRoaXMpOwogfQogCiB2b2lkIERhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5
KCkKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIERhdGFiYXNlOjpjbG9zZUltbWVkaWF0ZWx5KCkK
IAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmdldE1heFNpemVGb3JEYXRhYmFz
ZSh0aGlzKTsKKyAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjpnZXRNYXhTaXplRm9yRGF0YWJh
c2UodGhpcyk7CiB9CiAKIGJvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wg
c2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBEYXRhYmFzZUNvbnRleHQ6OmRhdGFiYXNlRXhj
ZWVkZWRRdQogI2lmICFQTEFURk9STShDSFJPTUlVTSkKICAgICAvLyBGSVhNRTogVGhpcyBuZWVk
cyBhIHJlYWwgaW1wbGVtZW50YXRpb247IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gZm9y
IHRlc3RpbmcuCiAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRRdW90YSA9IDUg
KiAxMDI0ICogMTAyNDsKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5zZXRRdW90YSht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7
CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpzZXRRdW90YShtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5h
Z2VyLmNwcAkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcs
MjkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EYXRhYmFzZU1hbmFnZXImIERhdGFiYXNl
TWFuYWdlcjo6bWFuYWdlcigpCitEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsKiBEYXRhYmFzZU1h
bmFnZXI6OnNfaW50ZXJuYWwgPSAwOworCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6aW5pdGlhbGl6
ZUludGVybmFsKCkKK3sKKyAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBpcyB2dWxuZXJhYmxl
IHRvIGEgcmFjZSBiZXR3ZWVuIHRocmVhZHMuIE5lZWQgdG8KKyAgICAvLyBpbXBsZW1lbnQgYSB0
aHJlYWQgc2FmZSBvbi1maXJzdC11c2Ugc3RhdGljIGluaXRpYWxpemVyLgorICAgIGlmICghc19p
bnRlcm5hbCkKKyAgICAgICAgc19pbnRlcm5hbCA9IG5ldyBJbnRlcm5hbCgpOworfQorCitQYXNz
UmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY2FsbGJhY2ssIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIHN0YXRpYyBEYXRhYmFzZU1hbmFnZXIqIGRiTWFuYWdl
ciA9IDA7Ci0gICAgaWYgKCFkYk1hbmFnZXIpCi0gICAgICAgIGRiTWFuYWdlciA9IG5ldyBEYXRh
YmFzZU1hbmFnZXIoKTsKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgpOworICAgIHJl
dHVybiBzX2ludGVybmFsLT5vcGVuRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJz
aW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY2FsbGJhY2ssIGVjKTsKK30KIAotICAg
IHJldHVybiAqZGJNYW5hZ2VyOworUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlTWFu
YWdlcjo6b3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQ
dHI8RGF0YWJhc2VDYWxsYmFjaz4gY2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGluaXRpYWxpemVJbnRlcm5hbElmTmVlZGVkKCk7CisgICAgcmV0dXJuIHNfaW50ZXJuYWwtPm9w
ZW5EYXRhYmFzZVN5bmMoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSwgY2FsbGJhY2ssIGVjKTsKIH0KIAotRGF0YWJhc2VNYW5hZ2VyOjpE
YXRhYmFzZU1hbmFnZXIoKQorRGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6SW50ZXJuYWwoKQog
ICAgIDogbV9jbGllbnQoMCkKICAgICAsIG1fZGF0YWJhc2VJc0F2YWlsYWJsZSh0cnVlKQogewpA
QCAtNjgsMzMgKzgxLDMzIEBAIERhdGFiYXNlTWFuYWdlcjo6RGF0YWJhc2VNYW5hZ2VyKCkKICAg
ICBBU1NFUlQobV9zZXJ2ZXIpOyAvLyBXZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBzZXJ2ZXIgdG8g
d29yayB3aXRoLgogfQogCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBT
dHJpbmcmIGRhdGFiYXNlUGF0aCkKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6aW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKIHsKICAgICBtX3NlcnZlci0+aW5p
dGlhbGl6ZShkYXRhYmFzZVBhdGgpOwogfQogCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6c2V0Q2xp
ZW50KERhdGFiYXNlTWFuYWdlckNsaWVudCogY2xpZW50KQordm9pZCBEYXRhYmFzZU1hbmFnZXI6
OkludGVybmFsOjpzZXRDbGllbnQoRGF0YWJhc2VNYW5hZ2VyQ2xpZW50KiBjbGllbnQpCiB7CiAg
ICAgbV9jbGllbnQgPSBjbGllbnQ7CiAgICAgbV9zZXJ2ZXItPnNldENsaWVudChjbGllbnQpOwog
fQogCi1TdHJpbmcgRGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjb25z
dAorU3RyaW5nIERhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OmRhdGFiYXNlRGlyZWN0b3J5UGF0
aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2VydmVyLT5kYXRhYmFzZURpcmVjdG9yeVBhdGgo
KTsKIH0KIAotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChj
b25zdCBTdHJpbmcmIHBhdGgpCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OnNldERh
dGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgbV9zZXJ2ZXIt
PnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChwYXRoKTsKIH0KIAotYm9vbCBEYXRhYmFzZU1hbmFn
ZXI6OmlzQXZhaWxhYmxlKCkKK2Jvb2wgRGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6aXNBdmFp
bGFibGUoKQogewogICAgIHJldHVybiBtX2RhdGFiYXNlSXNBdmFpbGFibGU7CiB9CiAKLXZvaWQg
RGF0YWJhc2VNYW5hZ2VyOjpzZXRJc0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3ZvaWQgRGF0
YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6c2V0SXNBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCiB7
CiAgICAgbV9kYXRhYmFzZUlzQXZhaWxhYmxlID0gYXZhaWxhYmxlOwogfQpAQCAtMTIyLDcgKzEz
NSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25D
YWxsYmFjazsKIH07CiAKLVBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3Bl
bkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCitQYXNzUmVmUHRyPERh
dGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBj
cmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlKQogewpAQCAtMTM2LDEyICsxNDksMTIg
QEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VNYW5hZ2VyOjpvcAogICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7CiAgICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNy
ZWF0aW9uQ2FsbGJhY2ssIGUsIGVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgZGF0YWJhc2UtPmxv
Z0Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwotICAgICAgICBEYXRhYmFzZU1hbmFnZXI6Om1h
bmFnZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICByZW1v
dmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5zZXREYXRhYmFzZURldGFpbHMoY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUp
OwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnNldEhhc09wZW5EYXRhYmFzZXMoY29u
dGV4dCk7CisgICAgc2V0RGF0YWJhc2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCks
IG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICBzZXRIYXNPcGVuRGF0YWJh
c2VzKGNvbnRleHQpOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0
YWJhc2UoY29udGV4dCwgZGF0YWJhc2UsIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmhvc3Qo
KSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uKTsKIApAQCAtMTUzLDcgKzE2Niw3IEBAIFBhc3NSZWZQ
dHI8RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKICAgICByZXR1cm4gZGF0YWJhc2U7CiB9
CiAKLVBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFz
ZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKK1Bhc3NSZWZQdHI8RGF0YWJh
c2VTeW5jPiBEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpvcGVuRGF0YWJhc2VTeW5jKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKICAg
ICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFj
az4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CkBAIC0xNjksMTEgKzE4
MiwxMSBAQCBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VNYW5hZ2VyCiAgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZTsKICAgICBpZiAoIWRhdGFiYXNlLT5wZXJmb3JtT3BlbkFuZFZlcmlm
eSghY3JlYXRpb25DYWxsYmFjaywgZWMsIGVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgZGF0YWJh
c2UtPmxvZ0Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwotICAgICAgICBEYXRhYmFzZU1hbmFn
ZXI6Om1hbmFnZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOworICAgICAg
ICByZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5zZXREYXRhYmFzZURldGFp
bHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpOworICAgIHNldERhdGFiYXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigp
LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CiAKICAgICBpZiAoZGF0YWJhc2Ut
PmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewogICAgICAgICBMT0coU3RvcmFn
ZUFQSSwgIkludm9raW5nIHRoZSBjcmVhdGlvbiBjYWxsYmFjayBmb3IgZGF0YWJhc2UgJXBcbiIs
IGRhdGFiYXNlLmdldCgpKTsKQEAgLTE4MywxMjEgKzE5NiwxMjEgQEAgUGFzc1JlZlB0cjxEYXRh
YmFzZVN5bmM+IERhdGFiYXNlTWFuYWdlcgogICAgIHJldHVybiBkYXRhYmFzZTsKIH0KIAotYm9v
bCBEYXRhYmFzZU1hbmFnZXI6Omhhc09wZW5EYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKK2Jvb2wgRGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6aGFzT3BlbkRhdGFi
YXNlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIHJldHVybiBEYXRh
YmFzZUNvbnRleHQ6Omhhc09wZW5EYXRhYmFzZXMoY29udGV4dCk7CiB9CiAKLXZvaWQgRGF0YWJh
c2VNYW5hZ2VyOjpzZXRIYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OnNldEhhc09wZW5EYXRhYmFz
ZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBEYXRhYmFzZUNvbnRl
eHQ6OmZyb20oY29udGV4dCktPnNldEhhc09wZW5EYXRhYmFzZXMoKTsKIH0KIAotdm9pZCBEYXRh
YmFzZU1hbmFnZXI6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCit2b2lkIERhdGFiYXNl
TWFuYWdlcjo6SW50ZXJuYWw6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCiB7CiAgICAg
RGF0YWJhc2VDb250ZXh0OjpzdG9wRGF0YWJhc2VzKGNvbnRleHQsIHN5bmNocm9uaXplcik7CiB9
CiAKLVN0cmluZyBEYXRhYmFzZU1hbmFnZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KQorU3RyaW5nIERhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OmZ1bGxQYXRoRm9yRGF0YWJh
c2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0
ZUlmRG9lc05vdEV4aXN0KQogewogICAgIHJldHVybiBtX3NlcnZlci0+ZnVsbFBhdGhGb3JEYXRh
YmFzZShvcmlnaW4sIG5hbWUsIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKIH0KIAogI2lmICFQTEFU
Rk9STShDSFJPTUlVTSkKLWJvb2wgRGF0YWJhc2VNYW5hZ2VyOjpoYXNFbnRyeUZvck9yaWdpbihT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQorYm9vbCBEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpo
YXNFbnRyeUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIHJldHVybiBt
X3NlcnZlci0+aGFzRW50cnlGb3JPcmlnaW4ob3JpZ2luKTsKIH0KIAotdm9pZCBEYXRhYmFzZU1h
bmFnZXI6Om9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KQor
dm9pZCBEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkKIHsKICAgICBtX3NlcnZlci0+b3JpZ2lucyhyZXN1bHQp
OwogfQogCi1ib29sIERhdGFiYXNlTWFuYWdlcjo6ZGF0YWJhc2VOYW1lc0Zvck9yaWdpbihTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KQorYm9vbCBEYXRhYmFz
ZU1hbmFnZXI6OkludGVybmFsOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4sIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIG1fc2VydmVy
LT5kYXRhYmFzZU5hbWVzRm9yT3JpZ2luKG9yaWdpbiwgcmVzdWx0KTsKIH0KIAotRGF0YWJhc2VE
ZXRhaWxzIERhdGFiYXNlTWFuYWdlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorRGF0YWJhc2VEZXRhaWxzIERhdGFi
YXNlTWFuYWdlcjo6SW50ZXJuYWw6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9zZXJ2ZXIt
PmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKG5hbWUsIG9yaWdpbik7CiB9CiAKLXVuc2lnbmVkIGxv
bmcgbG9uZyBEYXRhYmFzZU1hbmFnZXI6OnVzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4pCit1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6dXNh
Z2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9zZXJ2
ZXItPnVzYWdlRm9yT3JpZ2luKG9yaWdpbik7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRh
YmFzZU1hbmFnZXI6OnF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit1bnNp
Z25lZCBsb25nIGxvbmcgRGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6cXVvdGFGb3JPcmlnaW4o
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9zZXJ2ZXItPnF1b3RhRm9y
T3JpZ2luKG9yaWdpbik7CiB9CiAKLXZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzZXRRdW90YShTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGFTaXplKQordm9pZCBE
YXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpzZXRRdW90YShTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGFTaXplKQogewogICAgIG1fc2VydmVyLT5zZXRRdW90
YShvcmlnaW4sIHF1b3RhU2l6ZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVB
bGxEYXRhYmFzZXMoKQordm9pZCBEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpkZWxldGVBbGxE
YXRhYmFzZXMoKQogewogICAgIG1fc2VydmVyLT5kZWxldGVBbGxEYXRhYmFzZXMoKTsKIH0KIAot
Ym9vbCBEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZU9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQorYm9vbCBEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9zZXJ2ZXItPmRlbGV0ZU9yaWdpbihvcmln
aW4pOwogfQogCi1ib29sIERhdGFiYXNlTWFuYWdlcjo6ZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQorYm9vbCBEYXRhYmFzZU1hbmFnZXI6
OkludGVybmFsOjpkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIG1fc2VydmVyLT5kZWxldGVEYXRhYmFzZShvcmln
aW4sIG5hbWUpOwogfQogCiAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0aHJl
YWQgc2FmZSB3aXRoIGl0cyBkYXRhCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6c2NoZWR1bGVOb3Rp
ZnlEYXRhYmFzZUNoYW5nZWQoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lKQordm9pZCBEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpzY2hlZHVsZU5vdGlmeURhdGFi
YXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgbV9zZXJ2ZXItPnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKG9yaWdpbiwgbmFt
ZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZUNoYW5nZWQoQWJzdHJhY3RE
YXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OmRhdGFi
YXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBtX3NlcnZlci0+
ZGF0YWJhc2VDaGFuZ2VkKGRhdGFiYXNlKTsKIH0KIAogI2Vsc2UgLy8gUExBVEZPUk0oQ0hST01J
VU0pCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6Y2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgRGF0
YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6Y2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBtX3Nl
cnZlci0+Y2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShvcmlnaW5JZGVudGlmaWVyLCBuYW1lKTsK
IH0KICNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKIAotdm9pZCBEYXRhYmFzZU1hbmFnZXI6
OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKK3ZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6aW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQogewogICAgIG1fc2VydmVyLT5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNv
bnRleHQpOwogfQogCi1ib29sIERhdGFiYXNlTWFuYWdlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitib29s
IERhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OmNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogewogICAgIHJldHVy
biBtX3NlcnZlci0+Y2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpOwogfQogCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6YWRkT3BlbkRh
dGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZU1hbmFnZXI6
OkludGVybmFsOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7
CiAgICAgbV9zZXJ2ZXItPmFkZE9wZW5EYXRhYmFzZShkYXRhYmFzZSk7CiB9CiAKLXZvaWQgRGF0
YWJhc2VNYW5hZ2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJh
c2UpCit2b2lkIERhdGFiYXNlTWFuYWdlcjo6SW50ZXJuYWw6OnJlbW92ZU9wZW5EYXRhYmFzZShB
YnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBtX3NlcnZlci0+cmVtb3ZlT3BlbkRh
dGFiYXNlKGRhdGFiYXNlKTsKIH0KIAotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnNldERhdGFiYXNl
RGV0YWlscyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK3ZvaWQg
RGF0YWJhc2VNYW5hZ2VyOjpJbnRlcm5hbDo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogewogICAgIG1fc2VydmVyLT5zZXREYXRh
YmFzZURldGFpbHMob3JpZ2luLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CiB9
CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZU1hbmFnZXI6OmdldE1heFNpemVGb3JEYXRh
YmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKK3Vuc2lnbmVkIGxvbmcgbG9u
ZyBEYXRhYmFzZU1hbmFnZXI6OkludGVybmFsOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3Qg
QWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgcmV0dXJuIG1fc2VydmVyLT5nZXRN
YXhTaXplRm9yRGF0YWJhc2UoZGF0YWJhc2UpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCShyZXZpc2lvbiAx
NDEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2OCArNDQsMzA4IEBAIGNsYXNzIFNlY3VyaXR5
T3JpZ2luOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgRGF0YWJhc2VN
YW5hZ2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhYmFzZU1hbmFnZXIpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRGF0YWJhc2VNYW5hZ2Vy
JiBtYW5hZ2VyKCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpemUoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVBhdGgpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRDbGllbnQoRGF0
YWJhc2VNYW5hZ2VyQ2xpZW50Kik7CisgICAgc3RhdGljIGlubGluZSBTdHJpbmcgZGF0YWJhc2VE
aXJlY3RvcnlQYXRoKCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIHNldERhdGFiYXNlRGlyZWN0
b3J5UGF0aChjb25zdCBTdHJpbmcmKTsKKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F2YWls
YWJsZSgpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJc0F2YWlsYWJsZShib29sKTsKKwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZl
cnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVj
dGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7
CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaGFzT3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0Kik7CisgICAgc3RhdGljIGlubGluZSB2b2lkIHNldEhhc09wZW5EYXRhYmFzZXMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzdG9wRGF0
YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIq
KTsKIAotICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7Ci0g
ICAgdm9pZCBzZXRDbGllbnQoRGF0YWJhc2VNYW5hZ2VyQ2xpZW50Kik7Ci0gICAgU3RyaW5nIGRh
dGFiYXNlRGlyZWN0b3J5UGF0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3Rv
cnlQYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGZ1bGxQYXRo
Rm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3Jl
YXRlSWZEb2VzTm90RXhpc3QgPSB0cnVlKTsKIAotICAgIGJvb2wgaXNBdmFpbGFibGUoKTsKLSAg
ICB2b2lkIHNldElzQXZhaWxhYmxlKGJvb2wpOworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAg
ICBzdGF0aWMgaW5saW5lIGJvb2wgaGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsK
KyAgICBzdGF0aWMgaW5saW5lIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiA+JiByZXN1bHQpOworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBkYXRhYmFzZU5hbWVzRm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKiwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCk7CisgICAgc3Rh
dGljIGlubGluZSBEYXRhYmFzZURldGFpbHMgZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3Qg
U3RyaW5nJiwgU2VjdXJpdHlPcmlnaW4qKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bG9uZyBsb25nIHVzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisgICAgc3RhdGljIGlu
bGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsK
KworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRRdW90YShTZWN1cml0eU9yaWdpbiosIHVuc2ln
bmVkIGxvbmcgbG9uZyk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgZGVsZXRlQWxsRGF0YWJh
c2VzKCk7CisgICAgc3RhdGljIGlubGluZSBib29sIGRlbGV0ZU9yaWdpbihTZWN1cml0eU9yaWdp
biopOworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVh
ZCwgbXVzdCBiZSB0aHJlYWQgc2FmZSB3aXRoIGl0cyBkYXRhCisgICAgc3RhdGljIGlubGluZSB2
b2lkIHNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBkYXRhYmFzZUNoYW5nZWQo
QWJzdHJhY3REYXRhYmFzZSopOworCisjZWxzZSAvLyBQTEFURk9STShDSFJPTUlVTSkKKyAgICBz
dGF0aWMgaW5saW5lIHZvaWQgY2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisjZW5kaWYgLy8gUExBVEZP
Uk0oQ0hST01JVU0pCisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICBzdGF0
aWMgaW5saW5lIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYWRkT3BlbkRh
dGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3Zl
T3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKIAotICAgIFBhc3NSZWZQdHI8RGF0YWJh
c2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2Fs
bGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9w
ZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxi
YWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXREYXRhYmFz
ZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAgc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFi
c3RyYWN0RGF0YWJhc2UqKTsKIAotICAgIGJvb2wgaGFzT3BlbkRhdGFiYXNlcyhTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7Ci0gICAgdm9pZCBzZXRIYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKTsKLSAgICB2b2lkIHN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOworcHJpdmF0ZToKKyAgICBjbGFzcyBJ
bnRlcm5hbCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEludGVybmFsKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBJbnRlcm5hbCgpOworCisg
ICAgICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CisgICAg
ICAgIHZvaWQgc2V0Q2xpZW50KERhdGFiYXNlTWFuYWdlckNsaWVudCopOworICAgICAgICBTdHJp
bmcgZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RGF0YWJh
c2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIGJvb2wgaXNBdmFpbGFi
bGUoKTsKKyAgICAgICAgdm9pZCBzZXRJc0F2YWlsYWJsZShib29sKTsKKworICAgICAgICBQYXNz
UmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0
cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVmUHRy
PERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAgICAgYm9vbCBo
YXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICAgICAgdm9pZCBz
ZXRIYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICAgICAgdm9p
ZCBzdG9wRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVRhc2tTeW5j
aHJvbml6ZXIqKTsKIAotICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1
ZSk7CisgICAgICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7CiAK
ICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCi0gICAgYm9vbCBoYXNFbnRyeUZvck9yaWdpbihTZWN1
cml0eU9yaWdpbiopOwotICAgIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiA+JiByZXN1bHQpOwotICAgIGJvb2wgZGF0YWJhc2VOYW1lc0Zvck9yaWdpbihTZWN1cml0
eU9yaWdpbiosIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpOwotICAgIERhdGFiYXNlRGV0YWlscyBk
ZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmLCBTZWN1cml0eU9yaWdpbiopOwot
Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7
Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7
Ci0KLSAgICB2b2lkIHNldFF1b3RhKFNlY3VyaXR5T3JpZ2luKiwgdW5zaWduZWQgbG9uZyBsb25n
KTsKLQotICAgIHZvaWQgZGVsZXRlQWxsRGF0YWJhc2VzKCk7Ci0gICAgYm9vbCBkZWxldGVPcmln
aW4oU2VjdXJpdHlPcmlnaW4qKTsKLSAgICBib29sIGRlbGV0ZURhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgYm9vbCBoYXNFbnRyeUZvck9yaWdp
bihTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2b2lkIG9yaWdpbnMoVmVjdG9yPFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KTsKKyAgICAgICAgYm9vbCBkYXRhYmFzZU5hbWVzRm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKiwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCk7CisgICAgICAg
IERhdGFiYXNlRGV0YWlscyBkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmLCBT
ZWN1cml0eU9yaWdpbiopOwogCi0gICAgLy8gRnJvbSBhIHNlY29uZGFyeSB0aHJlYWQsIG11c3Qg
YmUgdGhyZWFkIHNhZmUgd2l0aCBpdHMgZGF0YQotICAgIHZvaWQgc2NoZWR1bGVOb3RpZnlEYXRh
YmFzZUNoYW5nZWQoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7
CisKKyAgICAgICAgdm9pZCBzZXRRdW90YShTZWN1cml0eU9yaWdpbiosIHVuc2lnbmVkIGxvbmcg
bG9uZyk7CiAKLSAgICB2b2lkIGRhdGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKik7Cisg
ICAgICAgIHZvaWQgZGVsZXRlQWxsRGF0YWJhc2VzKCk7CisgICAgICAgIGJvb2wgZGVsZXRlT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luKik7CisgICAgICAgIGJvb2wgZGVsZXRlRGF0YWJhc2UoU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgICAgIC8vIEZyb20gYSBzZWNv
bmRhcnkgdGhyZWFkLCBtdXN0IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRhdGEKKyAgICAgICAg
dm9pZCBzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiosIGNvbnN0
IFN0cmluZyYgbmFtZSk7CisKKyAgICAgICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoQWJzdHJhY3RE
YXRhYmFzZSopOwogCiAjZWxzZSAvLyBQTEFURk9STShDSFJPTUlVTSkKLSAgICB2b2lkIGNsb3Nl
RGF0YWJhc2VzSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgICAgICB2b2lkIGNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHko
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogI2Vu
ZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQogCi0gICAgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFz
ZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICAgICAgdm9p
ZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKIAotICAgIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLSAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShB
YnN0cmFjdERhdGFiYXNlKik7Ci0gICAgdm9pZCByZW1vdmVPcGVuRGF0YWJhc2UoQWJzdHJhY3RE
YXRhYmFzZSopOworICAgICAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAgICAgIHZvaWQgYWRkT3BlbkRh
dGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICAgICAgdm9pZCByZW1vdmVPcGVuRGF0YWJh
c2UoQWJzdHJhY3REYXRhYmFzZSopOworCisgICAgICAgIHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxz
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworICAgICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIH5JbnRlcm5hbCgpIHsgfQorCisgICAgICAgIEFic3Ry
YWN0RGF0YWJhc2VTZXJ2ZXIqIG1fc2VydmVyOworICAgICAgICBEYXRhYmFzZU1hbmFnZXJDbGll
bnQqIG1fY2xpZW50OworICAgICAgICBib29sIG1fZGF0YWJhc2VJc0F2YWlsYWJsZTsKKyAgICB9
OworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQoKQorICAgIHsK
KyAgICAgICAgaWYgKCFzX2ludGVybmFsKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUludGVybmFs
KCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVJbnRlcm5hbCgpOwogCi0gICAg
dm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBB
YnN0cmFjdERhdGFiYXNlKik7CisgICAgc3RhdGljIEludGVybmFsKiBzX2ludGVybmFsOworfTsK
IAotcHJpdmF0ZToKLSAgICBEYXRhYmFzZU1hbmFnZXIoKTsKLSAgICB+RGF0YWJhc2VNYW5hZ2Vy
KCkgeyB9CitpbmxpbmUgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmluaXRpYWxpemUoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVBhdGgpCit7CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQoKTsK
KyAgICBzX2ludGVybmFsLT5pbml0aWFsaXplKGRhdGFiYXNlUGF0aCk7Cit9CisKK2lubGluZSB2
b2lkIERhdGFiYXNlTWFuYWdlcjo6c2V0Q2xpZW50KERhdGFiYXNlTWFuYWdlckNsaWVudCogY2xp
ZW50KQoreworICAgIGluaXRpYWxpemVJbnRlcm5hbElmTmVlZGVkKCk7CisgICAgc19pbnRlcm5h
bC0+c2V0Q2xpZW50KGNsaWVudCk7Cit9CisKK2lubGluZSBTdHJpbmcgRGF0YWJhc2VNYW5hZ2Vy
OjpkYXRhYmFzZURpcmVjdG9yeVBhdGgoKQoreworICAgIGluaXRpYWxpemVJbnRlcm5hbElmTmVl
ZGVkKCk7CisgICAgcmV0dXJuIHNfaW50ZXJuYWwtPmRhdGFiYXNlRGlyZWN0b3J5UGF0aCgpOwor
fQorCitpbmxpbmUgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0
aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQo
KTsKKyAgICBzX2ludGVybmFsLT5zZXREYXRhYmFzZURpcmVjdG9yeVBhdGgocGF0aCk7Cit9CisK
K2lubGluZSBib29sIERhdGFiYXNlTWFuYWdlcjo6aXNBdmFpbGFibGUoKQoreworICAgIGluaXRp
YWxpemVJbnRlcm5hbElmTmVlZGVkKCk7CisgICAgcmV0dXJuIHNfaW50ZXJuYWwtPmlzQXZhaWxh
YmxlKCk7Cit9CisKK2lubGluZSB2b2lkIERhdGFiYXNlTWFuYWdlcjo6c2V0SXNBdmFpbGFibGUo
Ym9vbCBpc0F2YWlsYWJsZSkKK3sKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgpOwor
ICAgIHNfaW50ZXJuYWwtPnNldElzQXZhaWxhYmxlKGlzQXZhaWxhYmxlKTsKK30KKworaW5saW5l
IGJvb2wgRGF0YWJhc2VNYW5hZ2VyOjpoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCit7CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQoKTsKKyAg
ICByZXR1cm4gc19pbnRlcm5hbC0+aGFzT3BlbkRhdGFiYXNlcyhjb250ZXh0KTsKK30KKworaW5s
aW5lIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzZXRIYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQo
KTsKKyAgICBzX2ludGVybmFsLT5zZXRIYXNPcGVuRGF0YWJhc2VzKGNvbnRleHQpOworfQorCitp
bmxpbmUgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIp
Cit7CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc19pbnRl
cm5hbC0+c3RvcERhdGFiYXNlcyhjb250ZXh0LCBzeW5jaHJvbml6ZXIpOworfQorCitpbmxpbmUg
U3RyaW5nIERhdGFiYXNlTWFuYWdlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3Qp
Cit7CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc19pbnRl
cm5hbC0+ZnVsbFBhdGhGb3JEYXRhYmFzZShvcmlnaW4sIG5hbWUsIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KTsKK30KIAotICAgIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIqIG1fc2VydmVyOwotICAgIERh
dGFiYXNlTWFuYWdlckNsaWVudCogbV9jbGllbnQ7Ci0gICAgYm9vbCBtX2RhdGFiYXNlSXNBdmFp
bGFibGU7Ci19OworI2lmICFQTEFURk9STShDSFJPTUlVTSkKK2lubGluZSBib29sIERhdGFiYXNl
TWFuYWdlcjo6aGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAg
ICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgpOworICAgIHJldHVybiBzX2ludGVybmFsLT5o
YXNFbnRyeUZvck9yaWdpbihvcmlnaW4pOworfQorCitpbmxpbmUgdm9pZCBEYXRhYmFzZU1hbmFn
ZXI6Om9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KQorewor
ICAgIGluaXRpYWxpemVJbnRlcm5hbElmTmVlZGVkKCk7CisgICAgc19pbnRlcm5hbC0+b3JpZ2lu
cyhyZXN1bHQpOworfQorCitpbmxpbmUgYm9vbCBEYXRhYmFzZU1hbmFnZXI6OmRhdGFiYXNlTmFt
ZXNGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgVmVjdG9yPFN0cmluZz4mIHJlc3Vs
dCkKK3sKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgpOworICAgIHJldHVybiBzX2lu
dGVybmFsLT5kYXRhYmFzZU5hbWVzRm9yT3JpZ2luKG9yaWdpbiwgcmVzdWx0KTsKK30KKworaW5s
aW5lIERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZU1hbmFnZXI6OmRldGFpbHNGb3JOYW1lQW5kT3Jp
Z2luKGNvbnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBp
bml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgpOworICAgIHJldHVybiBzX2ludGVybmFsLT5kZXRh
aWxzRm9yTmFtZUFuZE9yaWdpbihuYW1lLCBvcmlnaW4pOworfQorCitpbmxpbmUgdW5zaWduZWQg
bG9uZyBsb25nIERhdGFiYXNlTWFuYWdlcjo6dXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbikKK3sKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgpOworICAgIHJldHVy
biBzX2ludGVybmFsLT51c2FnZUZvck9yaWdpbihvcmlnaW4pOworfQorCitpbmxpbmUgdW5zaWdu
ZWQgbG9uZyBsb25nIERhdGFiYXNlTWFuYWdlcjo6cXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKK3sKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgpOworICAgIHJl
dHVybiBzX2ludGVybmFsLT5xdW90YUZvck9yaWdpbihvcmlnaW4pOworfQorCitpbmxpbmUgdm9p
ZCBEYXRhYmFzZU1hbmFnZXI6OnNldFF1b3RhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHVuc2ln
bmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgp
OworICAgIHNfaW50ZXJuYWwtPnNldFF1b3RhKG9yaWdpbiwgcXVvdGEpOworfQorCitpbmxpbmUg
dm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCit7CisgICAgaW5pdGlh
bGl6ZUludGVybmFsSWZOZWVkZWQoKTsKKyAgICBzX2ludGVybmFsLT5kZWxldGVBbGxEYXRhYmFz
ZXMoKTsKK30KKworaW5saW5lIGJvb2wgRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgp
OworICAgIHJldHVybiBzX2ludGVybmFsLT5kZWxldGVPcmlnaW4ob3JpZ2luKTsKK30KKworaW5s
aW5lIGJvb2wgRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZO
ZWVkZWQoKTsKKyAgICByZXR1cm4gc19pbnRlcm5hbC0+ZGVsZXRlRGF0YWJhc2Uob3JpZ2luLCBu
YW1lKTsKK30KKworaW5saW5lIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzY2hlZHVsZU5vdGlmeURh
dGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQoKTsKKyAgICBzX2ludGVybmFsLT5z
Y2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChvcmlnaW4sIG5hbWUpOworfQorCitpbmxpbmUg
dm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRhdGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKiBk
YXRhYmFzZSkKK3sKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgpOworICAgIHNfaW50
ZXJuYWwtPmRhdGFiYXNlQ2hhbmdlZChkYXRhYmFzZSk7Cit9CisKKyNlbHNlIC8vIFBMQVRGT1JN
KENIUk9NSVVNKQoraW5saW5lIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpjbG9zZURhdGFiYXNlc0lt
bWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIGluaXRpYWxpemVJbnRlcm5hbElmTmVlZGVkKCk7CisgICAgc19pbnRlcm5h
bC0+Y2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShvcmlnaW5JZGVudGlmaWVyLCBuYW1lKTsKK30K
KworI2VuZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQorCitpbmxpbmUgdm9pZCBEYXRhYmFzZU1h
bmFnZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbml0aWFsaXplSW50ZXJuYWxJZk5lZWRlZCgp
OworICAgIHNfaW50ZXJuYWwtPmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29udGV4
dCk7Cit9CisKK2lubGluZSBib29sIERhdGFiYXNlTWFuYWdlcjo6Y2FuRXN0YWJsaXNoRGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCit7
CisgICAgaW5pdGlhbGl6ZUludGVybmFsSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc19pbnRlcm5h
bC0+Y2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUpOworfQorCitpbmxpbmUgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmFkZE9wZW5EYXRh
YmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBpbml0aWFsaXplSW50ZXJu
YWxJZk5lZWRlZCgpOworICAgIHNfaW50ZXJuYWwtPmFkZE9wZW5EYXRhYmFzZShkYXRhYmFzZSk7
Cit9CisKK2lubGluZSB2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKEFi
c3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGluaXRpYWxpemVJbnRlcm5hbElmTmVl
ZGVkKCk7CisgICAgc19pbnRlcm5hbC0+cmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlKTsKK30K
KworaW5saW5lIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzZXREYXRhYmFzZURldGFpbHMoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCit7CisgICAgaW5pdGlhbGl6ZUlu
dGVybmFsSWZOZWVkZWQoKTsKKyAgICBzX2ludGVybmFsLT5zZXREYXRhYmFzZURldGFpbHMob3Jp
Z2luLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Cit9CisKK2lubGluZSB1bnNp
Z25lZCBsb25nIGxvbmcgRGF0YWJhc2VNYW5hZ2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29u
c3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgaW5pdGlhbGl6ZUludGVybmFs
SWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc19pbnRlcm5hbC0+Z2V0TWF4U2l6ZUZvckRhdGFiYXNl
KGRhdGFiYXNlKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCShy
ZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgRGF0YWJhc2VT
eW5jOjp+RGF0YWJhc2VTeW5jKCkKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKICAgICBpZiAob3BlbmVkKCkpIHsKLSAgICAgICAgRGF0
YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOworICAgICAg
ICBEYXRhYmFzZU1hbmFnZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAgICAgICAgY2xv
c2VEYXRhYmFzZSgpOwogICAgIH0KIH0KQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIERhdGFiYXNl
U3luYzo6Y2xvc2VJbW1lZGlhdGVseSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGxvZ0Vycm9y
TWVzc2FnZSgiZm9yY2libHkgY2xvc2luZyBkYXRhYmFzZSIpOwotICAgIERhdGFiYXNlTWFuYWdl
cjo6bWFuYWdlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKKyAgICBEYXRhYmFzZU1hbmFn
ZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAgICBjbG9zZURhdGFiYXNlKCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25D
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsMjEgKzQzLDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihBYnN0cmFj
dERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5z
Y2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZCgKKyAgICBEYXRhYmFzZU1hbmFnZXI6OnNjaGVk
dWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKAogICAgICAgICBkYXRhYmFzZS0+c2VjdXJpdHlPcmln
aW4oKSwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgU1FMVHJhbnNh
Y3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJh
c2UpCiB7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZGF0YWJhc2VDaGFuZ2VkKGRh
dGFiYXNlKTsKKyAgICBEYXRhYmFzZU1hbmFnZXI6OmRhdGFiYXNlQ2hhbmdlZChkYXRhYmFzZSk7
CiB9CiAKIGJvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKEFic3RyYWN0
RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25n
IGN1cnJlbnRRdW90YSA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnF1b3RhRm9yT3JpZ2lu
KGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3Vy
cmVudFF1b3RhID0gRGF0YWJhc2VNYW5hZ2VyOjpxdW90YUZvck9yaWdpbihkYXRhYmFzZS0+c2Vj
dXJpdHlPcmlnaW4oKSk7CiAgICAgZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFz
ZUV4Y2VlZGVkUXVvdGEoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSwgZGF0YWJhc2UtPmRl
dGFpbHMoKSk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhID0gRGF0YWJhc2VNYW5h
Z2VyOjptYW5hZ2VyKCkucXVvdGFGb3JPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkp
OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSA9IERhdGFiYXNlTWFuYWdlcjo6cXVv
dGFGb3JPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogICAgIHJldHVybiAobmV3
UXVvdGEgPiBjdXJyZW50UXVvdGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJh
c2UuY3BwCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDI0ICs0MiwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8RGF0YWJhc2U+
IFdvcmtlckNvbnRleHRXZWJEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKFdvcmtlckNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQ
dHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyJiBkYk1hbmFnZXIgPSBEYXRhYmFzZU1hbmFnZXI6Om1h
bmFnZXIoKTsKLSAgICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0Rh
dGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSB8fCAhZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkp
IHsKKyAgICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNl
KGNvbnRleHQtPnRvcE9yaWdpbigpKSB8fCAhRGF0YWJhc2VNYW5hZ2VyOjppc0F2YWlsYWJsZSgp
KSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICByZXR1cm4gZGJNYW5hZ2VyLm9wZW5EYXRhYmFzZShjb250ZXh0LCBuYW1lLCB2ZXJz
aW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOwor
ICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZShjb250ZXh0LCBuYW1lLCB2
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMp
OwogfQogCiBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gV29ya2VyQ29udGV4dFdlYkRhdGFiYXNl
OjpvcGVuRGF0YWJhc2VTeW5jKFdvcmtlckNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4g
Y3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRGF0YWJhc2VNYW5h
Z2VyJiBkYk1hbmFnZXIgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKTsKLSAgICBpZiAoIWNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9y
aWdpbigpKSB8fCAhZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkpIHsKKyAgICBpZiAoIWNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigp
KSB8fCAhRGF0YWJhc2VNYW5hZ2VyOjppc0F2YWlsYWJsZSgpKSB7CiAgICAgICAgIGVjID0gU0VD
VVJJVFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gZGJNYW5h
Z2VyLm9wZW5EYXRhYmFzZVN5bmMoY29udGV4dCwgbmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsKKyAgICByZXR1cm4gRGF0YWJh
c2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAkocmV2aXNpb24gMTQx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDEyICsxNTAsMTIgQEAgYm9vbCBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJTb2NrZXRFbgogI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
CiBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6Om9wZW5EYXRhYmFzZUVuYWJsZWQoKQogewot
ICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5pc0F2YWlsYWJsZSgpOworICAg
IHJldHVybiBEYXRhYmFzZU1hbmFnZXI6OmlzQXZhaWxhYmxlKCk7CiB9CiAKIGJvb2wgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6b3BlbkRhdGFiYXNlU3luY0VuYWJsZWQoKQogewotICAgIHJldHVy
biBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5pc0F2YWlsYWJsZSgpOworICAgIHJldHVybiBE
YXRhYmFzZU1hbmFnZXI6OmlzQXZhaWxhYmxlKCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQz
LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbgogICAgICAgICBy
ZWplY3RSZWFzb25zIHw9IDEgPDwgSGFzVW5sb2FkTGlzdGVuZXI7CiAgICAgfQogI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCi0gICAgaWYgKERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmhhc09w
ZW5EYXRhYmFzZXMoZnJhbWUtPmRvY3VtZW50KCkpKSB7CisgICAgaWYgKERhdGFiYXNlTWFuYWdl
cjo6aGFzT3BlbkRhdGFiYXNlcyhmcmFtZS0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgUENMT0co
IiAgIC1GcmFtZSBoYXMgb3BlbiBkYXRhYmFzZSBoYW5kbGVzIik7CiAgICAgICAgIHJlamVjdFJl
YXNvbnMgfD0gMSA8PCBIYXNEYXRhYmFzZUhhbmRsZXM7CiAgICAgfQpAQCAtMzUyLDcgKzM1Miw3
IEBAIGJvb2wgUGFnZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGgKICAgICAgICAgJiYg
KCFkb2N1bWVudC0+dXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSB8fCAoIWRvY3VtZW50TG9hZGVy
LT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpICYmICFkb2N1bWVudExv
YWRlci0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkpCiAgICAgICAg
ICYmICghZG9jdW1lbnQtPmRvbVdpbmRvdygpIHx8ICFkb2N1bWVudC0+ZG9tV2luZG93KCktPmhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCiAjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKLSAgICAgICAgJiYgIURhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmhhc09w
ZW5EYXRhYmFzZXMoZG9jdW1lbnQpCisgICAgICAgICYmICFEYXRhYmFzZU1hbmFnZXI6Omhhc09w
ZW5EYXRhYmFzZXMoZG9jdW1lbnQpCiAjZW5kaWYKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMp
CiAgICAgICAgICYmICFTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKGRv
Y3VtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lv
biAxNDEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcExvYWRp
bmcoVW5sb2FkRXZlbgogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICAgICAgLy8gRklY
TUU6IFNob3VsZCB0aGUgRGF0YWJhc2VNYW5hZ2VyIHdhdGNoIGZvciBzb21ldGhpbmcgbGlrZSBB
Y3RpdmVET01PYmplY3Q6OnN0b3AoKSByYXRoZXIgdGhhbiBiZWluZyBzcGVjaWFsLWNhc2VkIGhl
cmU/Ci0gICAgICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnN0b3BEYXRhYmFzZXMoZG9j
LCAwKTsKKyAgICAgICAgRGF0YWJhc2VNYW5hZ2VyOjpzdG9wRGF0YWJhc2VzKGRvYywgMCk7CiAj
ZW5kaWYKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5j
cHAJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIHB1YmxpYzoKICNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHN0b3AgdGhl
IGRhdGFiYXNlcyBhcyBwYXJ0IG9mIHN0b3BBY3RpdmVET01PYmplY3RzKCkgYmVsb3c/CiAgICAg
ICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciBjbGVhbnVwU3luYzsKLSAgICAgICAgRGF0YWJh
c2VNYW5hZ2VyOjptYW5hZ2VyKCkuc3RvcERhdGFiYXNlcyh3b3JrZXJDb250ZXh0LCAmY2xlYW51
cFN5bmMpOworICAgICAgICBEYXRhYmFzZU1hbmFnZXI6OnN0b3BEYXRhYmFzZXMod29ya2VyQ29u
dGV4dCwgJmNsZWFudXBTeW5jKTsKICNlbmRpZgogCiAgICAgICAgIHdvcmtlckNvbnRleHQtPnN0
b3BBY3RpdmVET01PYmplY3RzKCk7CkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBXb3JrZXJUaHJl
YWQ6OnN0b3AoKQogICAgICAgICBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5zY2hlZHVsZUV4
ZWN1dGlvblRlcm1pbmF0aW9uKCk7CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgICAg
ICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250
ZXh0KG1fd29ya2VyQ29udGV4dC5nZXQoKSk7CisgICAgICAgIERhdGFiYXNlTWFuYWdlcjo6aW50
ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChtX3dvcmtlckNvbnRleHQuZ2V0KCkpOwogI2Vu
ZGlmCiAgICAgICAgIG1fcnVuTG9vcC5wb3N0VGFza0FuZFRlcm1pbmF0ZShXb3JrZXJUaHJlYWRT
aHV0ZG93blN0YXJ0VGFzazo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMy0wMS0yOCAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIERhdGFiYXNlTWFuYWdlciBpbnRlcmZhY2Ug
dG8gYmUgc3RhdGljIG1ldGhvZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDgxNDYuCisKKyAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgU2FtIFdl
aW5pZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFi
YXNlUXVvdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGF0YWJh
c2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2VNYW5hZ2VyOjppbml0
aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2VNYW5hZ2VyOjpnZXREYXRhYmFz
ZXNCeU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlTWFuYWdlcjo6Z2V0RGF0
YWJhc2VPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2VNYW5hZ2VyOjpkZWxl
dGVEYXRhYmFzZVdpdGhOYW1lRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJh
c2VNYW5hZ2VyOjpkZWxldGVEYXRhYmFzZXNGb3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZUFsbERhdGFiYXNlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkRhdGFiYXNlTWFuYWdlcjo6c2V0UXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBk
YXRlUHJlZmVyZW5jZXMpOgorCiAyMDEzLTAxLTI4ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5r
aW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRkIFN0b3JhZ2VNYW5hZ2VyIGNsYXNzIHRvIGNt
YWtlIHBvcnRzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAxNDEwMzQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw5ICs1NDksOCBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gc3Rh
dGljX2Nhc3Q8V2ViRnJhbWVMb2FkZXJDbGllbnQqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
KS0+d2ViRnJhbWUoKTsKICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7CiAKLSAgICBEYXRhYmFzZU1hbmFnZXImIGRiTWFuYWdl
ciA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpOwotICAgIHVpbnQ2NF90IGN1cnJlbnRRdW90
YSA9IGRiTWFuYWdlci5xdW90YUZvck9yaWdpbihvcmlnaW4pOwotICAgIHVpbnQ2NF90IGN1cnJl
bnRPcmlnaW5Vc2FnZSA9IGRiTWFuYWdlci51c2FnZUZvck9yaWdpbihvcmlnaW4pOworICAgIHVp
bnQ2NF90IGN1cnJlbnRRdW90YSA9IERhdGFiYXNlTWFuYWdlcjo6cXVvdGFGb3JPcmlnaW4ob3Jp
Z2luKTsKKyAgICB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2UgPSBEYXRhYmFzZU1hbmFnZXI6
OnVzYWdlRm9yT3JpZ2luKG9yaWdpbik7CiAgICAgdWludDY0X3QgbmV3UXVvdGEgPSAwOwogICAg
IFJlZlB0cjxXZWJTZWN1cml0eU9yaWdpbj4gd2ViU2VjdXJpdHlPcmlnaW4gPSBXZWJTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcihvcmlnaW4tPmRhdGFiYXNlSWRl
bnRpZmllcigpKTsKICAgICBuZXdRdW90YSA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVVSUNsaWVu
dCgpLmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEobV9wYWdlLCB3ZWJTZWN1cml0eU9yaWdpbi5nZXQo
KSwgZGF0YWJhc2VOYW1lLCBkZXRhaWxzLmRpc3BsYXlOYW1lKCksIGN1cnJlbnRRdW90YSwgY3Vy
cmVudE9yaWdpblVzYWdlLCBkZXRhaWxzLmN1cnJlbnRVc2FnZSgpLCBkZXRhaWxzLmV4cGVjdGVk
VXNhZ2UoKSk7CkBAIC01NjIsNyArNTYxLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4Y2Vl
ZGVkRGF0YWJhc2VRdQogICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVk
ZWREYXRhYmFzZVF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFnZS0+cGFnZUlEKCkpOwogICAg
IH0KIAotICAgIGRiTWFuYWdlci5zZXRRdW90YShvcmlnaW4sIG5ld1F1b3RhKTsKKyAgICBEYXRh
YmFzZU1hbmFnZXI6OnNldFF1b3RhKG9yaWdpbiwgbmV3UXVvdGEpOwogfQogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGF0YWJhc2VN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkRhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGF0YWJhc2VNYW5hZ2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsOCBAQCBXZWJEYXRhYmFzZU1hbmFnZXI6
OldlYkRhdGFiYXNlTWFuYWdlcihXCiAKIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjppbml0aWFs
aXplKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0g
ICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzLmRhdGFi
YXNlRGlyZWN0b3J5KTsKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5zZXRDbGllbnQo
dGhpcyk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjppbml0aWFsaXplKHBhcmFtZXRlcnMuZGF0YWJh
c2VEaXJlY3RvcnkpOworICAgIERhdGFiYXNlTWFuYWdlcjo6c2V0Q2xpZW50KHRoaXMpOwogfQog
CiB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgV2ViRGF0
YWJhc2VNYW5hZ2VyOjpnZXREYXRhYmFzZXNCeU8KICAgICAvLyBzaG90LiAgVGhhdCB3b3VsZCBh
dm9pZCB0YWtpbmcgdGhlIG51bWVyb3VzIGxvY2tzIHRoaXMgcmVxdWlyZXMuCiAKICAgICBWZWN0
b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IG9yaWdpbnM7Ci0gICAgRGF0YWJhc2VNYW5hZ2Vy
OjptYW5hZ2VyKCkub3JpZ2lucyhvcmlnaW5zKTsKKyAgICBEYXRhYmFzZU1hbmFnZXI6Om9yaWdp
bnMob3JpZ2lucyk7CiAKICAgICBWZWN0b3I8T3JpZ2luQW5kRGF0YWJhc2VzPiBvcmlnaW5BbmRE
YXRhYmFzZXNWZWN0b3I7CiAgICAgb3JpZ2luQW5kRGF0YWJhc2VzVmVjdG9yLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkob3JpZ2lucy5zaXplKCkpOwpAQCAtODEsMTMgKzgxLDEzIEBAIHZvaWQgV2Vi
RGF0YWJhc2VNYW5hZ2VyOjpnZXREYXRhYmFzZXNCeU8KICAgICAgICAgT3JpZ2luQW5kRGF0YWJh
c2VzIG9yaWdpbkFuZERhdGFiYXNlczsKIAogICAgICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lVmVj
dG9yOwotICAgICAgICBpZiAoIURhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRhdGFiYXNlTmFt
ZXNGb3JPcmlnaW4ob3JpZ2luc1tpXS5nZXQoKSwgbmFtZVZlY3RvcikpCisgICAgICAgIGlmICgh
RGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKG9yaWdpbnNbaV0uZ2V0KCks
IG5hbWVWZWN0b3IpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmVjdG9yPERh
dGFiYXNlRGV0YWlscz4gZGV0YWlsc1ZlY3RvcjsKICAgICAgICAgZGV0YWlsc1ZlY3Rvci5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG5hbWVWZWN0b3Iuc2l6ZSgpKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBuYW1lVmVjdG9yLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICBEYXRh
YmFzZURldGFpbHMgZGV0YWlscyA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRldGFpbHNG
b3JOYW1lQW5kT3JpZ2luKG5hbWVWZWN0b3Jbal0sIG9yaWdpbnNbaV0uZ2V0KCkpOworICAgICAg
ICAgICAgRGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBEYXRhYmFzZU1hbmFnZXI6OmRldGFpbHNG
b3JOYW1lQW5kT3JpZ2luKG5hbWVWZWN0b3Jbal0sIG9yaWdpbnNbaV0uZ2V0KCkpOwogICAgICAg
ICAgICAgaWYgKGRldGFpbHMubmFtZSgpLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCkBAIC05OCw4ICs5OCw4IEBAIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpnZXREYXRh
YmFzZXNCeU8KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG9yaWdpbkFuZERhdGFi
YXNlcy5vcmlnaW5JZGVudGlmaWVyID0gb3JpZ2luc1tpXS0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7
Ci0gICAgICAgIG9yaWdpbkFuZERhdGFiYXNlcy5vcmlnaW5RdW90YSA9IERhdGFiYXNlTWFuYWdl
cjo6bWFuYWdlcigpLnF1b3RhRm9yT3JpZ2luKG9yaWdpbnNbaV0uZ2V0KCkpOwotICAgICAgICBv
cmlnaW5BbmREYXRhYmFzZXMub3JpZ2luVXNhZ2UgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIo
KS51c2FnZUZvck9yaWdpbihvcmlnaW5zW2ldLmdldCgpKTsKKyAgICAgICAgb3JpZ2luQW5kRGF0
YWJhc2VzLm9yaWdpblF1b3RhID0gRGF0YWJhc2VNYW5hZ2VyOjpxdW90YUZvck9yaWdpbihvcmln
aW5zW2ldLmdldCgpKTsKKyAgICAgICAgb3JpZ2luQW5kRGF0YWJhc2VzLm9yaWdpblVzYWdlID0g
RGF0YWJhc2VNYW5hZ2VyOjp1c2FnZUZvck9yaWdpbihvcmlnaW5zW2ldLmdldCgpKTsKICAgICAg
ICAgb3JpZ2luQW5kRGF0YWJhc2VzLmRhdGFiYXNlcy5zd2FwKGRldGFpbHNWZWN0b3IpOyAKICAg
ICAgICAgb3JpZ2luQW5kRGF0YWJhc2VzVmVjdG9yLmFwcGVuZChvcmlnaW5BbmREYXRhYmFzZXMp
OwogICAgIH0KQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlcjo6Z2V0
RGF0YWJhc2VzQnlPCiB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlcjo6Z2V0RGF0YWJhc2VPcmlnaW5z
KHVpbnQ2NF90IGNhbGxiYWNrSUQpIGNvbnN0CiB7CiAgICAgVmVjdG9yPFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gPiBvcmlnaW5zOwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLm9yaWdp
bnMob3JpZ2lucyk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpvcmlnaW5zKG9yaWdpbnMpOwogCiAg
ICAgc2l6ZV90IG51bU9yaWdpbnMgPSBvcmlnaW5zLnNpemUoKTsKIApAQCAtMTI2LDcgKzEyNiw3
IEBAIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVEYXRhYmFzZVcKICAgICBpZiAoIW9y
aWdpbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCku
ZGVsZXRlRGF0YWJhc2Uob3JpZ2luLmdldCgpLCBkYXRhYmFzZUlkZW50aWZpZXIpOworICAgIERh
dGFiYXNlTWFuYWdlcjo6ZGVsZXRlRGF0YWJhc2Uob3JpZ2luLmdldCgpLCBkYXRhYmFzZUlkZW50
aWZpZXIpOwogfQogCiB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlcjo6ZGVsZXRlRGF0YWJhc2VzRm9y
T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikgY29uc3QKQEAgLTEzNSwxMiAr
MTM1LDEyIEBAIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVEYXRhYmFzZXMKICAgICBp
ZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5h
Z2VyKCkuZGVsZXRlT3JpZ2luKG9yaWdpbi5nZXQoKSk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpk
ZWxldGVPcmlnaW4ob3JpZ2luLmdldCgpKTsKIH0KIAogdm9pZCBXZWJEYXRhYmFzZU1hbmFnZXI6
OmRlbGV0ZUFsbERhdGFiYXNlcygpIGNvbnN0CiB7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5h
Z2VyKCkuZGVsZXRlQWxsRGF0YWJhc2VzKCk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVB
bGxEYXRhYmFzZXMoKTsKIH0KIAogdm9pZCBXZWJEYXRhYmFzZU1hbmFnZXI6OnNldFF1b3RhRm9y
T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgdW5zaWduZWQgbG9uZyBsb25n
IHF1b3RhKSBjb25zdApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2Vy
OjpzZXRRdW90YUZvck9yaWcKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2V0UXVvdGEob3JpZ2luLmdldCgpLCBxdW90
YSk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpzZXRRdW90YShvcmlnaW4uZ2V0KCksIHF1b3RhKTsK
IH0KIAogdm9pZCBXZWJEYXRhYmFzZU1hbmFnZXI6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzEs
NyArMjM3MSw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2UKICAg
ICBzZXR0aW5ncy0+c2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQoc3RvcmUuZ2V0
Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjppbnRlcmFjdGl2ZUZvcm1WYWxpZGF0
aW9uRW5hYmxlZEtleSgpKSk7CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIERhdGFi
YXNlTWFuYWdlcjo6bWFuYWdlcigpLnNldElzQXZhaWxhYmxlKHN0b3JlLmdldEJvb2xWYWx1ZUZv
cktleShXZWJQcmVmZXJlbmNlc0tleTo6ZGF0YWJhc2VzRW5hYmxlZEtleSgpKSk7CisgICAgRGF0
YWJhc2VNYW5hZ2VyOjpzZXRJc0F2YWlsYWJsZShzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2Vi
UHJlZmVyZW5jZXNLZXk6OmRhdGFiYXNlc0VuYWJsZWRLZXkoKSkpOwogI2VuZGlmCiAKICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMS0yOCAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIERhdGFiYXNlTWFuYWdlciBpbnRl
cmZhY2UgdG8gYmUgc3RhdGljIG1ldGhvZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxNDYuCisKKyAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkg
U2FtIFdlaW5pZy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZXhj
ZWVkZWREYXRhYmFzZVF1b3RhKToKKwogMjAxMy0wMS0yOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB3ZWJraXROb3RpZmljYXRpb25zLmNyZWF0ZUhU
TUxOb3RpZmljYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAJ
KHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk2LDgg
KzQ5Niw2IEBAIHZvaWQgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6ZXhjZWVkZWREYXQKICAgICB9
CiAjZW5kaWYKIAotICAgIERhdGFiYXNlTWFuYWdlciYgbWFuYWdlciA9IERhdGFiYXNlTWFuYWdl
cjo6bWFuYWdlcigpOwotCiAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9yaWdpblVzYWdlID0gdHJh
Y2tlci51c2FnZUZvck9yaWdpbihvcmlnaW4pOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJy
ZW50UXVvdGEgPSB0cmFja2VyLnF1b3RhRm9yT3JpZ2luKG9yaWdpbik7CiAKQEAgLTUwOCw3ICs1
MDYsNyBAQCB2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OmV4Y2VlZGVkRGF0CiAKICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEgPSBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+ZGF0
YWJhc2VRdW90YShvcmlnaW5TdHIsIG5hbWVTdHIsIG9yaWdpblVzYWdlLCBjdXJyZW50UXVvdGEs
IGVzdGltYXRlZFNpemUpOwogCi0gICAgbWFuYWdlci5zZXRRdW90YShvcmlnaW4sIHF1b3RhKTsK
KyAgICBEYXRhYmFzZU1hbmFnZXI6OnNldFF1b3RhKG9yaWdpbiwgcXVvdGEpOwogI2VuZGlmCiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDEwMzQpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDEzLTAxLTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAg
ICAgICBDaGFuZ2UgRGF0YWJhc2VNYW5hZ2VyIGludGVyZmFjZSB0byBiZSBzdGF0aWMgbWV0aG9k
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODE0
Ni4KKworICAgICAgICBSdWJiZXIgc3RhbXBlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICog
c3JjL1dlYkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6OmNsb3Nl
RGF0YWJhc2VJbW1lZGlhdGVseSk6CisgICAgICAgICogc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlRGF0YWJhc2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzRGF0YWJhc2VFbmFibGVk
KToKKwogMjAxMy0wMS0yOCAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbdjhdIFNlY3VyaXR5IGZlYXR1cmU6IEphdmFTY3JpcHQgQmluZGluZ3MgaGFyZGVuaW5n
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCShyZXZp
c2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhYmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIFdlYkRhdGFiYXNlOjpy
ZXNldFNwYWNlQXZhaWxhYmxlKGNvCiB2b2lkIFdlYkRhdGFiYXNlOjpjbG9zZURhdGFiYXNlSW1t
ZWRpYXRlbHkoY29uc3QgV2ViU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJTdHJp
bmcmIGRhdGFiYXNlTmFtZSkKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIERhdGFi
YXNlTWFuYWdlcjo6bWFuYWdlcigpLmNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkob3JpZ2luSWRl
bnRpZmllciwgZGF0YWJhc2VOYW1lKTsKKyAgICBEYXRhYmFzZU1hbmFnZXI6OmNsb3NlRGF0YWJh
c2VzSW1tZWRpYXRlbHkob3JpZ2luSWRlbnRpZmllciwgZGF0YWJhc2VOYW1lKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVG
ZWF0dXJlcy5jcHAJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE0ICs0NSwx
NCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVE
YXRhYmFzZShib29sIGVuYWJsZSkKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIERh
dGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnNldElzQXZhaWxhYmxlKGVuYWJsZSk7CisgICAgRGF0
YWJhc2VNYW5hZ2VyOjpzZXRJc0F2YWlsYWJsZShlbmFibGUpOwogI2VuZGlmCiB9CiAKIGJvb2wg
V2ViUnVudGltZUZlYXR1cmVzOjppc0RhdGFiYXNlRW5hYmxlZCgpCiB7CiAjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKLSAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuaXNBdmFp
bGFibGUoKTsKKyAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjppc0F2YWlsYWJsZSgpOwogI2Vs
c2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI3IEBACisyMDEzLTAxLTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KKworICAgICAgICBDaGFuZ2UgRGF0YWJhc2VNYW5hZ2VyIGludGVyZmFjZSB0byBiZSBz
dGF0aWMgbWV0aG9kcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwODE0Ni4KKworICAgICAgICBSdWJiZXIgc3RhbXBlZCBieSBTYW0gV2VpbmlnLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKToKKyAgICAg
ICAgKiBld2svZXdrX3NlY3VyaXR5X29yaWdpbi5jcHA6CisgICAgICAgIChld2tfc2VjdXJpdHlf
b3JpZ2luX3dlYl9kYXRhYmFzZV91c2FnZV9nZXQpOgorICAgICAgICAoZXdrX3NlY3VyaXR5X29y
aWdpbl93ZWJfZGF0YWJhc2VfcXVvdGFfZ2V0KToKKyAgICAgICAgKGV3a19zZWN1cml0eV9vcmln
aW5fd2ViX2RhdGFiYXNlX3F1b3RhX3NldCk6CisgICAgICAgIChld2tfc2VjdXJpdHlfb3JpZ2lu
X3dlYl9kYXRhYmFzZV9nZXRfYWxsKToKKyAgICAgICAgKiBld2svZXdrX3NldHRpbmdzLmNwcDoK
KyAgICAgICAgKGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfcGF0aF9zZXQpOgorICAgICAgICAq
IGV3ay9ld2tfd2ViX2RhdGFiYXNlLmNwcDoKKyAgICAgICAgKGV3a193ZWJfZGF0YWJhc2VfZGlz
cGxheV9uYW1lX2dldCk6CisgICAgICAgIChld2tfd2ViX2RhdGFiYXNlX2V4cGVjdGVkX3NpemVf
Z2V0KToKKyAgICAgICAgKGV3a193ZWJfZGF0YWJhc2VfZmlsZW5hbWVfZ2V0KToKKyAgICAgICAg
KGV3a193ZWJfZGF0YWJhc2Vfc2l6ZV9nZXQpOgorICAgICAgICAoZXdrX3dlYl9kYXRhYmFzZV9y
ZW1vdmUpOgorICAgICAgICAoZXdrX3dlYl9kYXRhYmFzZV9yZW1vdmVfYWxsKToKKwogMjAxMy0w
MS0yMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVz
ZSBhIHBsYXRmb3JvbSBzdHJhdGVneSBmb3IgbG9jYWwgc3RvcmFnZQpJbmRleDogU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwCShy
ZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsMTAgKzQzMiwxMCBAQCB2b2lk
IENocm9tZUNsaWVudEVmbDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgLyogaWYgY2xpZW50IGRp
ZCBub3Qgc2V0IHF1b3RhLCBhbmQgZGF0YWJhc2UgaXMgYmVpbmcgY3JlYXRlZCBub3csIHRoZQog
ICAgICAqIGRlZmF1bHQgcXVvdGEgaXMgYXBwbGllZAogICAgICAqLwotICAgIGlmICghcXVvdGEg
JiYgIURhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmhhc0VudHJ5Rm9yT3JpZ2luKG9yaWdpbikp
CisgICAgaWYgKCFxdW90YSAmJiAhRGF0YWJhc2VNYW5hZ2VyOjpoYXNFbnRyeUZvck9yaWdpbihv
cmlnaW4pKQogICAgICAgICBxdW90YSA9IGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfZGVmYXVs
dF9xdW90YV9nZXQoKTsKIAotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnNldFF1b3Rh
KG9yaWdpbiwgcXVvdGEpOworICAgIERhdGFiYXNlTWFuYWdlcjo6c2V0UXVvdGEob3JpZ2luLCBx
dW90YSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZWN1
cml0eV9vcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
c2VjdXJpdHlfb3JpZ2luLmNwcAkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2
Nyw3IEBAIHVpbnQ2NF90IGV3a19zZWN1cml0eV9vcmlnaW5fd2ViX2RhdGFiYXMKICNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvcmln
aW4sIDApOwogCi0gICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigp
LnVzYWdlRm9yT3JpZ2luKG9yaWdpbi0+c2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworICAgIHJldHVy
biBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnVzYWdlRm9yT3JpZ2luKG9yaWdpbi0+c2VjdXJp
dHlPcmlnaW4uZ2V0KCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKICAgICBy
ZXR1cm4gMDsKQEAgLTc5LDcgKzc5LDcgQEAgdWludDY0X3QgZXdrX3NlY3VyaXR5X29yaWdpbl93
ZWJfZGF0YWJhcwogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKG9yaWdpbiwgMCk7CiAKLSAgICByZXR1cm4gV2ViQ29yZTo6RGF0YWJh
c2VNYW5hZ2VyOjptYW5hZ2VyKCkucXVvdGFGb3JPcmlnaW4ob3JpZ2luLT5zZWN1cml0eU9yaWdp
bi5nZXQoKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6cXVvdGFGb3JP
cmlnaW4ob3JpZ2luLT5zZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShvcmlnaW4pCiAgICAgcmV0dXJuIDA7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgZXdrX3Nl
Y3VyaXR5X29yaWdpbl93ZWJfZGF0YWJhc2VfcXUKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihvcmlnaW4pOwogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICBXZWJDb3JlOjpE
YXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5zZXRRdW90YShvcmlnaW4tPnNlY3VyaXR5T3JpZ2lu
LmdldCgpLCBxdW90YSk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpzZXRRdW90YShv
cmlnaW4tPnNlY3VyaXR5T3JpZ2luLmdldCgpLCBxdW90YSk7CiAjZW5kaWYKIH0KIApAQCAtMTE1
LDcgKzExNSw3IEBAIEVpbmFfTGlzdCogZXdrX3NlY3VyaXR5X29yaWdpbl93ZWJfZGF0YWIKICNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIFZlY3RvcjxXVEY6OlN0cmluZz4gbmFtZXM7CiAK
LSAgICBpZiAoIVdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRhdGFiYXNlTmFt
ZXNGb3JPcmlnaW4ob3JpZ2luLT5zZWN1cml0eU9yaWdpbi5nZXQoKSwgbmFtZXMpKQorICAgIGlm
ICghV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKG9yaWdp
bi0+c2VjdXJpdHlPcmlnaW4uZ2V0KCksIG5hbWVzKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyBpKyspIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxNDEwMzQpCisrKyBT
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM2LDcgKzEzNiw3IEBAIHZvaWQgZXdrX3NldHRpbmdzX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2UK
IHZvaWQgZXdrX3NldHRpbmdzX3dlYl9kYXRhYmFzZV9wYXRoX3NldChjb25zdCBjaGFyKiBwYXRo
KQogewogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgV2ViQ29yZTo6RGF0YWJhc2VNYW5h
Z2VyOjptYW5hZ2VyKCkuc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKFdURjo6U3RyaW5nOjpmcm9t
VVRGOChwYXRoKSk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpzZXREYXRhYmFzZURp
cmVjdG9yeVBhdGgoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHBhdGgpKTsKICAgICBlaW5hX3N0cmlu
Z3NoYXJlX3JlcGxhY2UoJnNfd2ViRGF0YWJhc2VQYXRoLCBwYXRoKTsKICNlbmRpZgogfQpJbmRl
eDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a193ZWJfZGF0YWJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfd2ViX2RhdGFiYXNlLmNwcAkocmV2aXNpb24g
MTQxMDM0KQorKysgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a193ZWJfZGF0YWJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNvbnN0IGNoYXIqIGV3a193ZWJfZGF0YWJh
c2VfZGlzcGxheV9uYW0KICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLT5kaXNwbGF5TmFtZTsKIAog
ICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkYXRhYmFzZS0+c2VjdXJpdHlP
cmlnaW4uZ2V0KCk7Ci0gICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBXZWJD
b3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihk
YXRhYmFzZS0+bmFtZSwgb3JpZ2luKTsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0
YWlscyA9IFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4o
ZGF0YWJhc2UtPm5hbWUsIG9yaWdpbik7CiAgICAgZGF0YWJhc2UtPmRpc3BsYXlOYW1lID0gZWlu
YV9zdHJpbmdzaGFyZV9hZGQoZGV0YWlscy5kaXNwbGF5TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgcmV0dXJuIGRhdGFiYXNlLT5kaXNwbGF5TmFtZTsKQEAgLTYwLDcgKzYwLDcgQEAgdWlu
dDY0X3QgZXdrX3dlYl9kYXRhYmFzZV9leHBlY3RlZF9zaXplXwogewogI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGRhdGFiYXNl
LT5zZWN1cml0eU9yaWdpbi5nZXQoKTsKLSAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0
YWlscyA9IFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRldGFpbHNGb3JOYW1l
QW5kT3JpZ2luKGRhdGFiYXNlLT5uYW1lLCBvcmlnaW4pOworICAgIFdlYkNvcmU6OkRhdGFiYXNl
RGV0YWlscyBkZXRhaWxzID0gV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkZXRhaWxzRm9yTmFt
ZUFuZE9yaWdpbihkYXRhYmFzZS0+bmFtZSwgb3JpZ2luKTsKICAgICByZXR1cm4gZGV0YWlscy5l
eHBlY3RlZFVzYWdlKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShkYXRhYmFzZSk7CkBAIC03
NSw3ICs3NSw3IEBAIGNvbnN0IGNoYXIqIGV3a193ZWJfZGF0YWJhc2VfZmlsZW5hbWVfZ2UKICAg
ICAgICAgcmV0dXJuIGRhdGFiYXNlLT5maWxlbmFtZTsKIAogICAgIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4gPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4uZ2V0KCk7Ci0gICAgV1RG
OjpTdHJpbmcgcGF0aCA9IFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmZ1bGxQ
YXRoRm9yRGF0YWJhc2Uob3JpZ2luLCBkYXRhYmFzZS0+Y29yZU5hbWUpOworICAgIFdURjo6U3Ry
aW5nIHBhdGggPSBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2Uo
b3JpZ2luLCBkYXRhYmFzZS0+Y29yZU5hbWUpOwogICAgIGRhdGFiYXNlLT5maWxlbmFtZSA9IGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHBhdGgudXRmOCgpLmRhdGEoKSk7CiAKICAgICByZXR1cm4gZGF0
YWJhc2UtPmZpbGVuYW1lOwpAQCAtMTA5LDcgKzEwOSw3IEBAIHVpbnQ2NF90IGV3a193ZWJfZGF0
YWJhc2Vfc2l6ZV9nZXQoY29uc3QKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4u
Z2V0KCk7Ci0gICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBXZWJDb3JlOjpE
YXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihkYXRhYmFz
ZS0+bmFtZSwgb3JpZ2luKTsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0YWlscyA9
IFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oZGF0YWJh
c2UtPm5hbWUsIG9yaWdpbik7CiAgICAgcmV0dXJuIGRldGFpbHMuY3VycmVudFVzYWdlKCk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShkYXRhYmFzZSk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdWlu
dDY0X3QgZXdrX3dlYl9kYXRhYmFzZV9zaXplX2dldChjb25zdAogdm9pZCBld2tfd2ViX2RhdGFi
YXNlX3JlbW92ZShFd2tfV2ViX0RhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQotICAgIFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRlbGV0
ZURhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YWJhc2UtPmNvcmVO
YW1lKTsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZURhdGFiYXNlKGRhdGFi
YXNlLT5zZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YWJhc2UtPmNvcmVOYW1lKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGRhdGFiYXNlKTsKICNlbmRpZgpAQCAtMTI5LDcgKzEyOSw3IEBAIHZv
aWQgZXdrX3dlYl9kYXRhYmFzZV9yZW1vdmUoRXdrX1dlYl9EYXQKIHZvaWQgZXdrX3dlYl9kYXRh
YmFzZV9yZW1vdmVfYWxsKHZvaWQpCiB7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICBX
ZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5kZWxldGVBbGxEYXRhYmFzZXMoKTsK
KyAgICBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpOwogI2Vu
ZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisy
MDEzLTAxLTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFu
Z2UgRGF0YWJhc2VNYW5hZ2VyIGludGVyZmFjZSB0byBiZSBzdGF0aWMgbWV0aG9kcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODE0Ni4KKworICAg
ICAgICBSdWJiZXIgc3RhbXBlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
OjpleGNlZWRlZERhdGFiYXNlUXVvdGEpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRzZWN1cml0
eW9yaWdpbi5jcHA6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0
YWJhc2VfdXNhZ2UpOgorICAgICAgICAod2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2Rh
dGFiYXNlX3F1b3RhKToKKyAgICAgICAgKHdlYmtpdF9zZWN1cml0eV9vcmlnaW5fc2V0X3dlYl9k
YXRhYmFzZV9xdW90YSk6CisgICAgICAgICh3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF9hbGxf
d2ViX2RhdGFiYXNlcyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmNwcDoK
KyAgICAgICAgKHdlYmtpdF93ZWJfZGF0YWJhc2VfZ2V0X2Rpc3BsYXlfbmFtZSk6CisgICAgICAg
ICh3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9leHBlY3RlZF9zaXplKToKKyAgICAgICAgKHdlYmtp
dF93ZWJfZGF0YWJhc2VfZ2V0X3NpemUpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9n
ZXRfZmlsZW5hbWUpOgorICAgICAgICAod2Via2l0X3dlYl9kYXRhYmFzZV9yZW1vdmUpOgorICAg
ICAgICAod2Via2l0X3JlbW92ZV9hbGxfd2ViX2RhdGFiYXNlcyk6CisgICAgICAgICh3ZWJraXRf
c2V0X3dlYl9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCk6CisgICAgICAgICogd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3VwZGF0ZV9zZXR0aW5ncyk6
CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90aWZ5KToKKwogMjAxMy0wMS0y
NSAgSm9vbmUgSHVyICA8am9vbmUuaHVyQGludGVsLmNvbT4KIAogICAgICAgICBbR1RLXVtBQ10g
VXNlIG5ldyBDbHV0dGVyIEFQSXMgaW5zdGVhZCBvZiBkZXByZWNhdGVkIEFQSXMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEyLDcgKzgxMiw3IEBA
IHZvaWQgQ2hyb21lQ2xpZW50OjpwcmludChGcmFtZSogZnJhbWUpCiB2b2lkIENocm9tZUNsaWVu
dDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUsIERhdGFiYXNlRGV0YWlscykKIHsKICAgICBndWludDY0IGRlZmF1bHRRdW90YSA9
IHdlYmtpdF9nZXRfZGVmYXVsdF93ZWJfZGF0YWJhc2VfcXVvdGEoKTsKLSAgICBEYXRhYmFzZU1h
bmFnZXI6Om1hbmFnZXIoKS5zZXRRdW90YShmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKSwgZGVmYXVsdFF1b3RhKTsKKyAgICBEYXRhYmFzZU1hbmFnZXI6OnNldFF1b3RhKGZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBkZWZhdWx0UXVvdGEpOwogCiAgICAgV2Vi
S2l0V2ViRnJhbWUqIHdlYkZyYW1lID0ga2l0KGZyYW1lKTsKICAgICBXZWJLaXRTZWN1cml0eU9y
aWdpbiogb3JpZ2luID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfc2VjdXJpdHlfb3JpZ2luKHdlYkZy
YW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3Vy
aXR5b3JpZ2luLmNwcAkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDcgKzI5
OCw3IEBAIGd1aW50NjQgd2Via2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfd2ViX2QKIAogI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIGNvcmVPcmln
aW4gPSBjb3JlKHNlY3VyaXR5T3JpZ2luKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6RGF0YWJhc2VN
YW5hZ2VyOjptYW5hZ2VyKCkudXNhZ2VGb3JPcmlnaW4oY29yZU9yaWdpbik7CisgICAgcmV0dXJu
IFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6dXNhZ2VGb3JPcmlnaW4oY29yZU9yaWdpbik7CiAj
ZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCkBAIC0zMjEsNyArMzIxLDcgQEAgZ3VpbnQ2NCB3
ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKICAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiogY29yZU9yaWdpbiA9IGNvcmUoc2VjdXJp
dHlPcmlnaW4pOwotICAgIHJldHVybiBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIo
KS5xdW90YUZvck9yaWdpbihjb3JlT3JpZ2luKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6RGF0YWJh
c2VNYW5hZ2VyOjpxdW90YUZvck9yaWdpbihjb3JlT3JpZ2luKTsKICNlbHNlCiAgICAgcmV0dXJu
IDA7CiAjZW5kaWYKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIHdlYmtpdF9zZWN1cml0eV9vcmln
aW5fc2V0X3dlYl9kYXRhCiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luKiBjb3JlT3JpZ2luID0gY29yZShzZWN1cml0eU9yaWdpbik7Ci0gICAg
V2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2V0UXVvdGEoY29yZU9yaWdpbiwg
cXVvdGEpOworICAgIFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6c2V0UXVvdGEoY29yZU9yaWdp
biwgcXVvdGEpOwogI2VuZGlmCiB9CiAKQEAgLTM2Niw3ICszNjYsNyBAQCBHTGlzdCogd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfYWxsX3dlCiAgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4q
IGNvcmVPcmlnaW4gPSBjb3JlKHNlY3VyaXR5T3JpZ2luKTsKICAgICBWZWN0b3I8V1RGOjpTdHJp
bmc+IGRhdGFiYXNlTmFtZXM7CiAKLSAgICBpZiAoIVdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6
bWFuYWdlcigpLmRhdGFiYXNlTmFtZXNGb3JPcmlnaW4oY29yZU9yaWdpbiwgZGF0YWJhc2VOYW1l
cykpCisgICAgaWYgKCFXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRhdGFiYXNlTmFtZXNGb3JP
cmlnaW4oY29yZU9yaWdpbiwgZGF0YWJhc2VOYW1lcykpCiAgICAgICAgIHJldHVybiBOVUxMOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kp
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNl
LmNwcAkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDcgKzMzMCw3IEBAIGNvbnN0
IGdjaGFyKiB3ZWJraXRfd2ViX2RhdGFiYXNlX2dldF9kaXMKIAogI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCiAgICAgV2ViS2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViRGF0YWJhc2Ut
PnByaXY7Ci0gICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBXZWJDb3JlOjpE
YXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihwcml2LT5u
YW1lLCBjb3JlKHByaXYtPm9yaWdpbikpOworICAgIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyBk
ZXRhaWxzID0gV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdp
bihwcml2LT5uYW1lLCBjb3JlKHByaXYtPm9yaWdpbikpOwogICAgIFdURjo6U3RyaW5nIGRpc3Bs
YXlOYW1lID0gIGRldGFpbHMuZGlzcGxheU5hbWUoKTsKIAogICAgIGlmIChkaXNwbGF5TmFtZS5p
c0VtcHR5KCkpCkBAIC0zNjIsNyArMzYyLDcgQEAgZ3VpbnQ2NCB3ZWJraXRfd2ViX2RhdGFiYXNl
X2dldF9leHBlY3RlZAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICBXZWJLaXRXZWJE
YXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJEYXRhYmFzZS0+cHJpdjsKLSAgICBXZWJDb3JlOjpE
YXRhYmFzZURldGFpbHMgZGV0YWlscyA9IFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdl
cigpLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKHByaXYtPm5hbWUsIGNvcmUocHJpdi0+b3JpZ2lu
KSk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBXZWJDb3JlOjpEYXRh
YmFzZU1hbmFnZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKHByaXYtPm5hbWUsIGNvcmUocHJp
di0+b3JpZ2luKSk7CiAgICAgcmV0dXJuIGRldGFpbHMuZXhwZWN0ZWRVc2FnZSgpOwogI2Vsc2UK
ICAgICByZXR1cm4gMDsKQEAgLTM4NSw3ICszODUsNyBAQCBndWludDY0IHdlYmtpdF93ZWJfZGF0
YWJhc2VfZ2V0X3NpemUoV2ViCiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIFdlYktp
dFdlYkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IHdlYkRhdGFiYXNlLT5wcml2OwotICAgIFdlYkNv
cmU6OkRhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpt
YW5hZ2VyKCkuZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJpdi0+bmFtZSwgY29yZShwcml2LT5v
cmlnaW4pKTsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMgZGV0YWlscyA9IFdlYkNvcmU6
OkRhdGFiYXNlTWFuYWdlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4ocHJpdi0+bmFtZSwgY29y
ZShwcml2LT5vcmlnaW4pKTsKICAgICByZXR1cm4gZGV0YWlscy5jdXJyZW50VXNhZ2UoKTsKICNl
bHNlCiAgICAgcmV0dXJuIDA7CkBAIC00MDksNyArNDA5LDcgQEAgY29uc3QgZ2NoYXIqIHdlYmtp
dF93ZWJfZGF0YWJhc2VfZ2V0X2ZpbAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgV2Vi
S2l0V2ViRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gd2ViRGF0YWJhc2UtPnByaXY7CiAgICAgV1RG
OjpTdHJpbmcgY29yZU5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocHJpdi0+bmFtZSk7Ci0g
ICAgV1RGOjpTdHJpbmcgY29yZVBhdGggPSBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFn
ZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKGNvcmUocHJpdi0+b3JpZ2luKSwgY29yZU5hbWUpOwor
ICAgIFdURjo6U3RyaW5nIGNvcmVQYXRoID0gV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpmdWxs
UGF0aEZvckRhdGFiYXNlKGNvcmUocHJpdi0+b3JpZ2luKSwgY29yZU5hbWUpOwogCiAgICAgaWYg
KGNvcmVQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIiI7CkBAIC00MzgsNyArNDM4LDcg
QEAgdm9pZCB3ZWJraXRfd2ViX2RhdGFiYXNlX3JlbW92ZShXZWJLaXRXZQogCiAjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKICAgICBXZWJLaXRXZWJEYXRhYmFzZVByaXZhdGUqIHByaXYgPSB3ZWJE
YXRhYmFzZS0+cHJpdjsKLSAgICBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5k
ZWxldGVEYXRhYmFzZShjb3JlKHByaXYtPm9yaWdpbiksIHByaXYtPm5hbWUpOworICAgIFdlYkNv
cmU6OkRhdGFiYXNlTWFuYWdlcjo6ZGVsZXRlRGF0YWJhc2UoY29yZShwcml2LT5vcmlnaW4pLCBw
cml2LT5uYW1lKTsKICNlbmRpZgogfQogCkBAIC00NTIsNyArNDUyLDcgQEAgdm9pZCB3ZWJraXRf
d2ViX2RhdGFiYXNlX3JlbW92ZShXZWJLaXRXZQogdm9pZCB3ZWJraXRfcmVtb3ZlX2FsbF93ZWJf
ZGF0YWJhc2VzKCkKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIFdlYkNvcmU6OkRh
dGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRlbGV0ZUFsbERhdGFiYXNlcygpOworICAgIFdlYkNv
cmU6OkRhdGFiYXNlTWFuYWdlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCk7CiAjZW5kaWYKIH0KIApA
QCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgd2Via2l0X3NldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5
X3AKIAogICAgIFN0cmluZyBwYXRoU3RyaW5nID0gV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhw
YXRoKTsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIFdlYkNvcmU6OkRhdGFiYXNlTWFu
YWdlcjo6bWFuYWdlcigpLnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChwYXRoU3RyaW5nKTsKKyAg
ICBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChwYXRo
U3RyaW5nKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiAxNDEw
MzQpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0MTIsNyArMzQxMiw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d191cGRhdGVfc2V0dGkKICAgICBjb3JlU2V0dGluZ3MtPnNldEFsbG93UnVubmluZ09mSW5zZWN1
cmVDb250ZW50KHNldHRpbmdzUHJpdmF0ZS0+ZW5hYmxlUnVubmluZ09mSW5zZWN1cmVDb250ZW50
KTsKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5h
Z2VyKCkuc2V0SXNBdmFpbGFibGUoc2V0dGluZ3NQcml2YXRlLT5lbmFibGVIVE1MNURhdGFiYXNl
KTsKKyAgICBEYXRhYmFzZU1hbmFnZXI6OnNldElzQXZhaWxhYmxlKHNldHRpbmdzUHJpdmF0ZS0+
ZW5hYmxlSFRNTDVEYXRhYmFzZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKQEAgLTM1MTYsNyArMzUxNiw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXR0
aW5nc19ub3QKICAgICAgICAgc2V0dGluZ3MtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGdfdmFs
dWVfZ2V0X2Jvb2xlYW4oJnZhbHVlKSk7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICBl
bHNlIGlmIChuYW1lID09IGdfaW50ZXJuX3N0cmluZygiZW5hYmxlLWh0bWw1LWRhdGFiYXNlIikp
IHsKLSAgICAgICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2V0SXNBdmFpbGFibGUoZ192
YWx1ZV9nZXRfYm9vbGVhbigmdmFsdWUpKTsKKyAgICAgICAgRGF0YWJhc2VNYW5hZ2VyOjpzZXRJ
c0F2YWlsYWJsZShnX3ZhbHVlX2dldF9ib29sZWFuKCZ2YWx1ZSkpOwogICAgIH0KICNlbmRpZgog
ICAgIGVsc2UgaWYgKG5hbWUgPT0gZ19pbnRlcm5fc3RyaW5nKCJlbmFibGUtaHRtbDUtbG9jYWwt
c3RvcmFnZSIpKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTQxMDM0KQorKysgU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTMtMDEtMjggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIENo
YW5nZSBEYXRhYmFzZU1hbmFnZXIgaW50ZXJmYWNlIHRvIGJlIHN0YXRpYyBtZXRob2RzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MTQ2LgorCisg
ICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBTdG9yYWdl
L1dlYkRhdGFiYXNlTWFuYWdlci5tbToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VNYW5hZ2VyIG9y
aWdpbnNdKToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VNYW5hZ2VyIGRhdGFiYXNlc1dpdGhPcmln
aW46XSk6CisgICAgICAgICgtW1dlYkRhdGFiYXNlTWFuYWdlciBkZXRhaWxzRm9yRGF0YWJhc2U6
d2l0aE9yaWdpbjpdKToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VNYW5hZ2VyIGRlbGV0ZUFsbERh
dGFiYXNlc10pOgorICAgICAgICAoLVtXZWJEYXRhYmFzZU1hbmFnZXIgZGVsZXRlT3JpZ2luOl0p
OgorICAgICAgICAoLVtXZWJEYXRhYmFzZU1hbmFnZXIgZGVsZXRlRGF0YWJhc2U6d2l0aE9yaWdp
bjpdKToKKyAgICAgICAgKFdlYktpdEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSk6Cisg
ICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZVF1b3RhTWFuYWdlci5tbToKKyAgICAgICAgKC1b
V2ViRGF0YWJhc2VRdW90YU1hbmFnZXIgdXNhZ2VdKToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VR
dW90YU1hbmFnZXIgcXVvdGFdKToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VRdW90YU1hbmFnZXIg
c2V0UXVvdGE6XSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU2VjdXJpdHlPcmlnaW4u
bW06CisgICAgICAgICgtW1dlYlNlY3VyaXR5T3JpZ2luIHVzYWdlXSk6CisgICAgICAgICgtW1dl
YlNlY3VyaXR5T3JpZ2luIHF1b3RhXSk6CisgICAgICAgICgtW1dlYlNlY3VyaXR5T3JpZ2luIHNl
dFF1b3RhOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dl
YkZyYW1lIF9jYWNoZWFiaWxpdHlEaWN0aW9uYXJ5XSk6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9wcmVmZXJlbmNlc0NoYW5nZWQ6XSk6CisKIDIw
MTMtMDEtMjggIFByYXRpayBTb2xhbmtpICA8cHNvbGFua2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFBMQVRGT1JNKElPUykgc2hvdWxkIGNvbWUgYmVmb3JlIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5h
Z2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0YWJh
c2VNYW5hZ2VyLm1tCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9y
YWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBA
QCArIChXZWJEYXRhYmFzZU1hbmFnZXIgKikgc2hhcmVkV2ViRGF0YWJhCiAtIChOU0FycmF5ICop
b3JpZ2lucwogewogICAgIFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gY29yZU9yaWdp
bnM7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkub3JpZ2lucyhjb3JlT3JpZ2lucyk7
CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpvcmlnaW5zKGNvcmVPcmlnaW5zKTsKICAgICBOU011dGFi
bGVBcnJheSAqd2ViT3JpZ2lucyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2Fw
YWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgpXTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3JlT3JpZ2lucy5zaXplKCk7ICsraSkgewpAQCAtNzcsNyArNzcsNyBAQCAtIChOU0FycmF5
ICopb3JpZ2lucwogLSAoTlNBcnJheSAqKWRhdGFiYXNlc1dpdGhPcmlnaW46KFdlYlNlY3VyaXR5
T3JpZ2luICopb3JpZ2luCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gbmFtZVZlY3RvcjsKLSAgICBp
ZiAoIURhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRhdGFiYXNlTmFtZXNGb3JPcmlnaW4oW29y
aWdpbiBfY29yZV0sIG5hbWVWZWN0b3IpKQorICAgIGlmICghRGF0YWJhc2VNYW5hZ2VyOjpkYXRh
YmFzZU5hbWVzRm9yT3JpZ2luKFtvcmlnaW4gX2NvcmVdLCBuYW1lVmVjdG9yKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAKICAgICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om5hbWVWZWN0b3Iuc2l6ZSgpXTsKQEAgLTky
LDcgKzkyLDcgQEAgLSAoTlNEaWN0aW9uYXJ5ICopZGV0YWlsc0ZvckRhdGFiYXNlOihOUwogewog
ICAgIHN0YXRpYyBpZCBrZXlzWzNdID0ge1dlYkRhdGFiYXNlRGlzcGxheU5hbWVLZXksIFdlYkRh
dGFiYXNlRXhwZWN0ZWRTaXplS2V5LCBXZWJEYXRhYmFzZVVzYWdlS2V5fTsKICAgICAKLSAgICBE
YXRhYmFzZURldGFpbHMgZGV0YWlscyA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRldGFp
bHNGb3JOYW1lQW5kT3JpZ2luKGRhdGFiYXNlSWRlbnRpZmllciwgW29yaWdpbiBfY29yZV0pOwor
ICAgIERhdGFiYXNlRGV0YWlscyBkZXRhaWxzID0gRGF0YWJhc2VNYW5hZ2VyOjpkZXRhaWxzRm9y
TmFtZUFuZE9yaWdpbihkYXRhYmFzZUlkZW50aWZpZXIsIFtvcmlnaW4gX2NvcmVdKTsKICAgICBp
ZiAoZGV0YWlscy5uYW1lKCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAg
IApAQCAtMTA2LDE3ICsxMDYsMTcgQEAgLSAoTlNEaWN0aW9uYXJ5ICopZGV0YWlsc0ZvckRhdGFi
YXNlOihOUwogCiAtICh2b2lkKWRlbGV0ZUFsbERhdGFiYXNlcwogewotICAgIERhdGFiYXNlTWFu
YWdlcjo6bWFuYWdlcigpLmRlbGV0ZUFsbERhdGFiYXNlcygpOworICAgIERhdGFiYXNlTWFuYWdl
cjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCk7CiB9CiAKIC0gKEJPT0wpZGVsZXRlT3JpZ2luOihXZWJT
ZWN1cml0eU9yaWdpbiAqKW9yaWdpbgogewotICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6Om1h
bmFnZXIoKS5kZWxldGVPcmlnaW4oW29yaWdpbiBfY29yZV0pOworICAgIHJldHVybiBEYXRhYmFz
ZU1hbmFnZXI6OmRlbGV0ZU9yaWdpbihbb3JpZ2luIF9jb3JlXSk7CiB9CiAKIC0gKEJPT0wpZGVs
ZXRlRGF0YWJhc2U6KE5TU3RyaW5nICopZGF0YWJhc2VJZGVudGlmaWVyIHdpdGhPcmlnaW46KFdl
YlNlY3VyaXR5T3JpZ2luICopb3JpZ2luCiB7Ci0gICAgcmV0dXJuIERhdGFiYXNlTWFuYWdlcjo6
bWFuYWdlcigpLmRlbGV0ZURhdGFiYXNlKFtvcmlnaW4gX2NvcmVdLCBkYXRhYmFzZUlkZW50aWZp
ZXIpOworICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZURhdGFiYXNlKFtvcmlnaW4g
X2NvcmVdLCBkYXRhYmFzZUlkZW50aWZpZXIpOwogfQogCiBAZW5kCkBAIC0xMzcsMTMgKzEzNywx
MSBAQCB2b2lkIFdlYktpdEluaXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyCiAgICAgaWYgKGlu
aXRpYWxpemVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBEYXRhYmFzZU1hbmFnZXImIGRiTWFu
YWdlciA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpOwotCiAgICAgLy8gU2V0IHRoZSBkYXRh
YmFzZSByb290IHBhdGggaW4gV2ViQ29yZQotICAgIGRiTWFuYWdlci5pbml0aWFsaXplKGRhdGFi
YXNlc0RpcmVjdG9yeVBhdGgoKSk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjppbml0aWFsaXplKGRh
dGFiYXNlc0RpcmVjdG9yeVBhdGgoKSk7CiAKICAgICAvLyBTZXQgdGhlIERhdGFiYXNlTWFuYWdl
ckNsaWVudAotICAgIGRiTWFuYWdlci5zZXRDbGllbnQoV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50
OjpzaGFyZWRXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQoKSk7CisgICAgRGF0YWJhc2VNYW5hZ2Vy
OjpzZXRDbGllbnQoV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50OjpzaGFyZWRXZWJEYXRhYmFzZU1h
bmFnZXJDbGllbnQoKSk7CiAgICAgCiAgICAgaW5pdGlhbGl6ZWQgPSBZRVM7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlUXVvdGFNYW5hZ2VyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VRdW90YU1hbmFn
ZXIubW0JKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2Vi
RGF0YWJhc2VRdW90YU1hbmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
LSAoV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4KIC0gKHVuc2lnbmVkIGxvbmcgbG9uZyl1c2Fn
ZQogewogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgcmV0dXJuIERhdGFiYXNlTWFuYWdl
cjo6bWFuYWdlcigpLnVzYWdlRm9yT3JpZ2luKFtfb3JpZ2luIF9jb3JlXSk7CisgICAgcmV0dXJu
IERhdGFiYXNlTWFuYWdlcjo6dXNhZ2VGb3JPcmlnaW4oW19vcmlnaW4gX2NvcmVdKTsKICNlbHNl
CiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKQEAgLTU5LDcgKzU5LDcgQEAgLSAodW5zaWduZWQgbG9u
ZyBsb25nKXVzYWdlCiAtICh1bnNpZ25lZCBsb25nIGxvbmcpcXVvdGEKIHsKICNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQotICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5xdW90
YUZvck9yaWdpbihbX29yaWdpbiBfY29yZV0pOworICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6
OnF1b3RhRm9yT3JpZ2luKFtfb3JpZ2luIF9jb3JlXSk7CiAjZWxzZQogICAgIHJldHVybiAwOwog
I2VuZGlmCkBAIC03MSw3ICs3MSw3IEBAIC0gKHVuc2lnbmVkIGxvbmcgbG9uZylxdW90YQogLSAo
dm9pZClzZXRRdW90YToodW5zaWduZWQgbG9uZyBsb25nKXF1b3RhCiB7CiAjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5zZXRRdW90YShbX29y
aWdpbiBfY29yZV0sIHF1b3RhKTsKKyAgICBEYXRhYmFzZU1hbmFnZXI6OnNldFF1b3RhKFtfb3Jp
Z2luIF9jb3JlXSwgcXVvdGEpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlY3VyaXR5T3JpZ2luLm1tCShyZXZpc2lv
biAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWN1cml0
eU9yaWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIC0gKGlkPFdlYlF1
b3RhTWFuYWdlcj4pZGF0YWJhc2VRdW90YU1hbmEKIC0gKHVuc2lnbmVkIGxvbmcgbG9uZyl1c2Fn
ZQogewogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgcmV0dXJuIERhdGFiYXNlTWFuYWdl
cjo6bWFuYWdlcigpLnVzYWdlRm9yT3JpZ2luKHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmln
aW4qPihfcHJpdmF0ZSkpOworICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6OnVzYWdlRm9yT3Jp
Z2luKHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSkpOwogI2Vsc2UK
ICAgICByZXR1cm4gMDsKICNlbmRpZgpAQCAtMTc3LDcgKzE3Nyw3IEBAIC0gKHVuc2lnbmVkIGxv
bmcgbG9uZyl1c2FnZQogLSAodW5zaWduZWQgbG9uZyBsb25nKXF1b3RhCiB7CiAjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKLSAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkucXVv
dGFGb3JPcmlnaW4ocmVpbnRlcnByZXRfY2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKSk7
CisgICAgcmV0dXJuIERhdGFiYXNlTWFuYWdlcjo6cXVvdGFGb3JPcmlnaW4ocmVpbnRlcnByZXRf
Y2FzdDxTZWN1cml0eU9yaWdpbio+KF9wcml2YXRlKSk7CiAjZWxzZQogICAgIHJldHVybiAwOwog
I2VuZGlmCkBAIC0xODYsNyArMTg2LDcgQEAgLSAodW5zaWduZWQgbG9uZyBsb25nKXF1b3RhCiAt
ICh2b2lkKXNldFF1b3RhOih1bnNpZ25lZCBsb25nIGxvbmcpcXVvdGEKIHsKICNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnNldFF1b3RhKHJl
aW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4qPihfcHJpdmF0ZSksIHF1b3RhKTsKKyAgICBE
YXRhYmFzZU1hbmFnZXI6OnNldFF1b3RhKHJlaW50ZXJwcmV0X2Nhc3Q8U2VjdXJpdHlPcmlnaW4q
PihfcHJpdmF0ZSksIHF1b3RhKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNzEsNyArMTA3MSw3IEBA
IC0gKE5TTXV0YWJsZURpY3Rpb25hcnkgKilfY2FjaGVhYmlsaXR5RGkKICAgICAKICAgICBpZiAo
RG9jdW1lbnQqIGRvY3VtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkgewog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgICAgIGlmIChEYXRhYmFzZU1hbmFnZXI6Om1h
bmFnZXIoKS5oYXNPcGVuRGF0YWJhc2VzKGRvY3VtZW50KSkKKyAgICAgICAgaWYgKERhdGFiYXNl
TWFuYWdlcjo6aGFzT3BlbkRhdGFiYXNlcyhkb2N1bWVudCkpCiAgICAgICAgICAgICBbcmVzdWx0
IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6V2ViRnJhbWVV
c2VzRGF0YWJhc2VzXTsKICNlbmRpZgogICAgICAgICBpZiAoIWRvY3VtZW50LT5jYW5TdXNwZW5k
QWN0aXZlRE9NT2JqZWN0cygpKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYyLDcgKzE0NjIsNyBAQCAtICh2b2lkKV9wcmVmZXJl
bmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVuCiAgICAgc2V0dGluZ3MtPnNldFBpY3RvZ3JhcGhGb250
RmFtaWx5KFtwcmVmZXJlbmNlcyBwaWN0b2dyYXBoRm9udEZhbWlseV0pOwogICAgIHNldHRpbmdz
LT5zZXRQbHVnaW5zRW5hYmxlZChbcHJlZmVyZW5jZXMgYXJlUGx1Z0luc0VuYWJsZWRdKTsKICNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnNl
dElzQXZhaWxhYmxlKFtwcmVmZXJlbmNlcyBkYXRhYmFzZXNFbmFibGVkXSk7CisgICAgRGF0YWJh
c2VNYW5hZ2VyOjpzZXRJc0F2YWlsYWJsZShbcHJlZmVyZW5jZXMgZGF0YWJhc2VzRW5hYmxlZF0p
OwogI2VuZGlmCiAgICAgc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoW3ByZWZlcmVu
Y2VzIGxvY2FsU3RvcmFnZUVuYWJsZWRdKTsKICAgICBzZXR0aW5ncy0+c2V0RXhwZXJpbWVudGFs
Tm90aWZpY2F0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2VzIGV4cGVyaW1lbnRhbE5vdGlmaWNhdGlv
bnNFbmFibGVkXSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTQxMDM0KQorKysgU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAor
MjAxMy0wMS0yOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hh
bmdlIERhdGFiYXNlTWFuYWdlciBpbnRlcmZhY2UgdG8gYmUgc3RhdGljIG1ldGhvZHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxNDYuCisKKyAg
ICAgICAgUnViYmVyIHN0YW1wZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICAqIEFwaS9xd2Vi
ZGF0YWJhc2UuY3BwOgorICAgICAgICAoUVdlYkRhdGFiYXNlOjpkaXNwbGF5TmFtZSk6CisgICAg
ICAgIChRV2ViRGF0YWJhc2U6OmV4cGVjdGVkU2l6ZSk6CisgICAgICAgIChRV2ViRGF0YWJhc2U6
OnNpemUpOgorICAgICAgICAoUVdlYkRhdGFiYXNlOjpmaWxlTmFtZSk6CisgICAgICAgIChRV2Vi
RGF0YWJhc2U6OnJlbW92ZURhdGFiYXNlKToKKyAgICAgICAgKFFXZWJEYXRhYmFzZTo6cmVtb3Zl
QWxsRGF0YWJhc2VzKToKKyAgICAgICAgKiBBcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcDoKKyAg
ICAgICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6ZGF0YWJhc2VVc2FnZSk6CisgICAgICAgIChRV2Vi
U2VjdXJpdHlPcmlnaW46OmRhdGFiYXNlUXVvdGEpOgorICAgICAgICAoUVdlYlNlY3VyaXR5T3Jp
Z2luOjpzZXREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6YWxs
T3JpZ2lucyk6CisgICAgICAgIChRV2ViU2VjdXJpdHlPcmlnaW46OmRhdGFiYXNlcyk6CisgICAg
ICAgICogQXBpL3F3ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2ViU2V0dGluZ3NQcml2YXRl
OjphcHBseSk6CisgICAgICAgIChRV2ViU2V0dGluZ3M6OnNldE9mZmxpbmVTdG9yYWdlUGF0aCk6
CisgICAgICAgIChRV2ViU2V0dGluZ3M6Om9mZmxpbmVTdG9yYWdlUGF0aCk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorCiAyMDEzLTAxLTI0ICBIYWppbWUg
TW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBUaGVyZSBhcmUgYSBmZXcg
b2Ygd3JvbmcgcmVtb3ZlQWxsQ2hpbGRyZW4oKSBjYWxsCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJkYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJkYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgUVN0
cmluZyBRV2ViRGF0YWJhc2U6Om5hbWUoKSBjb25zdAogUVN0cmluZyBRV2ViRGF0YWJhc2U6OmRp
c3BsYXlOYW1lKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIERhdGFi
YXNlRGV0YWlscyBkZXRhaWxzID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZGV0YWlsc0Zv
ck5hbWVBbmRPcmlnaW4oZC0+bmFtZSwgZC0+b3JpZ2luLmdldCgpKTsKKyAgICBEYXRhYmFzZURl
dGFpbHMgZGV0YWlscyA9IERhdGFiYXNlTWFuYWdlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4o
ZC0+bmFtZSwgZC0+b3JpZ2luLmdldCgpKTsKICAgICByZXR1cm4gZGV0YWlscy5kaXNwbGF5TmFt
ZSgpOwogI2Vsc2UKICAgICByZXR1cm4gUVN0cmluZygpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIFFT
dHJpbmcgUVdlYkRhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnMKIHFpbnQ2NCBRV2ViRGF0YWJh
c2U6OmV4cGVjdGVkU2l6ZSgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAg
ICBEYXRhYmFzZURldGFpbHMgZGV0YWlscyA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKGQtPm5hbWUsIGQtPm9yaWdpbi5nZXQoKSk7CisgICAgRGF0
YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBEYXRhYmFzZU1hbmFnZXI6OmRldGFpbHNGb3JOYW1lQW5k
T3JpZ2luKGQtPm5hbWUsIGQtPm9yaWdpbi5nZXQoKSk7CiAgICAgcmV0dXJuIGRldGFpbHMuZXhw
ZWN0ZWRVc2FnZSgpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTExMyw3ICsxMTMsNyBAQCBx
aW50NjQgUVdlYkRhdGFiYXNlOjpleHBlY3RlZFNpemUoKSBjb25zCiBxaW50NjQgUVdlYkRhdGFi
YXNlOjpzaXplKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIERhdGFi
YXNlRGV0YWlscyBkZXRhaWxzID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZGV0YWlsc0Zv
ck5hbWVBbmRPcmlnaW4oZC0+bmFtZSwgZC0+b3JpZ2luLmdldCgpKTsKKyAgICBEYXRhYmFzZURl
dGFpbHMgZGV0YWlscyA9IERhdGFiYXNlTWFuYWdlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4o
ZC0+bmFtZSwgZC0+b3JpZ2luLmdldCgpKTsKICAgICByZXR1cm4gZGV0YWlscy5jdXJyZW50VXNh
Z2UoKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC0xNDgsNyArMTQ4LDcgQEAgUVdlYkRhdGFi
YXNlOjpRV2ViRGF0YWJhc2UoUVdlYkRhdGFiYXNlUAogUVN0cmluZyBRV2ViRGF0YWJhc2U6OmZp
bGVOYW1lKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHJldHVybiBE
YXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKGQtPm9yaWdpbi5n
ZXQoKSwgZC0+bmFtZSwgZmFsc2UpOworICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6OmZ1bGxQ
YXRoRm9yRGF0YWJhc2UoZC0+b3JpZ2luLmdldCgpLCBkLT5uYW1lLCBmYWxzZSk7CiAjZWxzZQog
ICAgIHJldHVybiBRU3RyaW5nKCk7CiAjZW5kaWYKQEAgLTE3MSw3ICsxNzEsNyBAQCBRV2ViU2Vj
dXJpdHlPcmlnaW4gUVdlYkRhdGFiYXNlOjpvcmlnaW4oCiB2b2lkIFFXZWJEYXRhYmFzZTo6cmVt
b3ZlRGF0YWJhc2UoY29uc3QgUVdlYkRhdGFiYXNlJiBkYikKIHsKICNpZiBFTkFCTEUoU1FMX0RB
VEFCQVNFKQotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRlbGV0ZURhdGFiYXNlKGRi
LmQtPm9yaWdpbi5nZXQoKSwgZGIuZC0+bmFtZSk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpkZWxl
dGVEYXRhYmFzZShkYi5kLT5vcmlnaW4uZ2V0KCksIGRiLmQtPm5hbWUpOwogI2VuZGlmCiB9CiAK
QEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFFXZWJEYXRhYmFzZTo6cmVtb3ZlRGF0YWJhc2UoY29u
c3QgCiB2b2lkIFFXZWJEYXRhYmFzZTo6cmVtb3ZlQWxsRGF0YWJhc2VzKCkKIHsKICNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRlbGV0ZUFs
bERhdGFiYXNlcygpOworICAgIERhdGFiYXNlTWFuYWdlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCk7
CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3Jp
Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlv
cmlnaW4uY3BwCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
c2VjdXJpdHlvcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgaW50
IFFXZWJTZWN1cml0eU9yaWdpbjo6cG9ydCgpIGNvbnN0CiBxaW50NjQgUVdlYlNlY3VyaXR5T3Jp
Z2luOjpkYXRhYmFzZVVzYWdlKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQot
ICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS51c2FnZUZvck9yaWdpbihkLT5v
cmlnaW4uZ2V0KCkpOworICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6OnVzYWdlRm9yT3JpZ2lu
KGQtPm9yaWdpbi5nZXQoKSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCkBAIC0xMzMs
NyArMTMzLDcgQEAgcWludDY0IFFXZWJTZWN1cml0eU9yaWdpbjo6ZGF0YWJhc2VVc2FnZQogcWlu
dDY0IFFXZWJTZWN1cml0eU9yaWdpbjo6ZGF0YWJhc2VRdW90YSgpIGNvbnN0CiB7CiAjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKLSAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCku
cXVvdGFGb3JPcmlnaW4oZC0+b3JpZ2luLmdldCgpKTsKKyAgICByZXR1cm4gRGF0YWJhc2VNYW5h
Z2VyOjpxdW90YUZvck9yaWdpbihkLT5vcmlnaW4uZ2V0KCkpOwogI2Vsc2UKICAgICByZXR1cm4g
MDsKICNlbmRpZgpAQCAtMTQ5LDcgKzE0OSw3IEBAIHFpbnQ2NCBRV2ViU2VjdXJpdHlPcmlnaW46
OmRhdGFiYXNlUXVvdGEKIHZvaWQgUVdlYlNlY3VyaXR5T3JpZ2luOjpzZXREYXRhYmFzZVF1b3Rh
KHFpbnQ2NCBxdW90YSkKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIERhdGFiYXNl
TWFuYWdlcjo6bWFuYWdlcigpLnNldFF1b3RhKGQtPm9yaWdpbi5nZXQoKSwgcXVvdGEpOworICAg
IERhdGFiYXNlTWFuYWdlcjo6c2V0UXVvdGEoZC0+b3JpZ2luLmdldCgpLCBxdW90YSk7CiAjZW5k
aWYKIH0KIApAQCAtMTgxLDcgKzE4MSw3IEBAIFFMaXN0PFFXZWJTZWN1cml0eU9yaWdpbj4gUVdl
YlNlY3VyaXR5T3IKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgVmVjdG9yPFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4gPiBjb3JlT3JpZ2luczsKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1h
bmFnZXIoKS5vcmlnaW5zKGNvcmVPcmlnaW5zKTsKKyAgICBEYXRhYmFzZU1hbmFnZXI6Om9yaWdp
bnMoY29yZU9yaWdpbnMpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvcmVPcmln
aW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFFXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqIHBy
aXYgPSBuZXcgUVdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZShjb3JlT3JpZ2luc1tpXS5nZXQoKSk7
CkBAIC0yMDIsNyArMjAyLDcgQEAgUUxpc3Q8UVdlYkRhdGFiYXNlPiBRV2ViU2VjdXJpdHlPcmln
aW46OgogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgVmVjdG9yPFN0cmluZz4gbmFtZVZl
Y3RvcjsKIAotICAgIGlmICghRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZGF0YWJhc2VOYW1l
c0Zvck9yaWdpbihkLT5vcmlnaW4uZ2V0KCksIG5hbWVWZWN0b3IpKQorICAgIGlmICghRGF0YWJh
c2VNYW5hZ2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKGQtPm9yaWdpbi5nZXQoKSwgbmFtZVZl
Y3RvcikpCiAgICAgICAgIHJldHVybiBkYXRhYmFzZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5hbWVWZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUVdlYkRhdGFiYXNlUHJp
dmF0ZSogcHJpdiA9IG5ldyBRV2ViRGF0YWJhc2VQcml2YXRlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3ICsyMzQs
NyBAQCB2b2lkIFFXZWJTZXR0aW5nc1ByaXZhdGU6OmFwcGx5KCkKICNpZiBFTkFCTEUoU1FMX0RB
VEFCQVNFKQogICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUoUVdlYlNldHRpbmdzOjpP
ZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xvYmFsLT5hdHRyaWJ1dGVzLnZhbHVlKFFXZWJTZXR0aW5nczo6T2ZmbGlu
ZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpKTsKLSAgICAgICAgV2ViQ29yZTo6RGF0YWJhc2VNYW5h
Z2VyOjptYW5hZ2VyKCkuc2V0SXNBdmFpbGFibGUodmFsdWUpOworICAgICAgICBXZWJDb3JlOjpE
YXRhYmFzZU1hbmFnZXI6OnNldElzQXZhaWxhYmxlKHZhbHVlKTsKICNlbmRpZgogCiAgICAgICAg
IHZhbHVlID0gYXR0cmlidXRlcy52YWx1ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJBcHBsaWNh
dGlvbkNhY2hlRW5hYmxlZCwKQEAgLTEwMDgsNyArMTAwOCw3IEBAIHZvaWQgUVdlYlNldHRpbmdz
OjpzZXRPZmZsaW5lU3RvcmFnZVBhdGgKIHsKICAgICBXZWJDb3JlOjppbml0aWFsaXplV2ViQ29y
ZVF0KCk7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICBXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6Om1hbmFnZXIoKS5zZXREYXRhYmFzZURpcmVjdG9yeVBhdGgocGF0aCk7CisgICAgV2Vi
Q29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpzZXREYXRhYmFzZURpcmVjdG9yeVBhdGgocGF0aCk7CiAj
ZW5kaWYKIH0KIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgUVN0cmluZyBRV2ViU2V0dGluZ3M6Om9m
ZmxpbmVTdG9yYWdlUGF0aAogewogICAgIFdlYkNvcmU6OmluaXRpYWxpemVXZWJDb3JlUXQoKTsK
ICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHJldHVybiBXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6Om1hbmFnZXIoKS5kYXRhYmFzZURpcmVjdG9yeVBhdGgoKTsKKyAgICByZXR1cm4gV2Vi
Q29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgoKTsKICNlbHNlCiAg
ICAgcmV0dXJuIFFTdHJpbmcoKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDE0MTAzNCkK
KysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MzksOCArNTM5LDggQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6ZXhj
ZWVkZWREYXRhYmFzZVF1bwogewogICAgIHF1aW50NjQgcXVvdGEgPSBRV2ViU2V0dGluZ3M6Om9m
ZmxpbmVTdG9yYWdlRGVmYXVsdFF1b3RhKCk7CiAKLSAgICBpZiAoIURhdGFiYXNlTWFuYWdlcjo6
bWFuYWdlcigpLmhhc0VudHJ5Rm9yT3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpKSkKLSAgICAgICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2V0UXVvdGEoZnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHF1b3RhKTsKKyAgICBpZiAoIURhdGFi
YXNlTWFuYWdlcjo6aGFzRW50cnlGb3JPcmlnaW4oZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCkpKQorICAgICAgICBEYXRhYmFzZU1hbmFnZXI6OnNldFF1b3RhKGZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBxdW90YSk7CiAKICAgICBtX3dlYlBhZ2UtPmRhdGFi
YXNlUXVvdGFFeGNlZWRlZChRV2ViRnJhbWVBZGFwdGVyOjpraXQoZnJhbWUpLCBkYXRhYmFzZU5h
bWUpOwogfQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMTQxMDM0KQorKysgU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIw
MTMtMDEtMjggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5n
ZSBEYXRhYmFzZU1hbmFnZXIgaW50ZXJmYWNlIHRvIGJlIHN0YXRpYyBtZXRob2RzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MTQ2LgorCisgICAg
ICAgIFJ1YmJlciBzdGFtcGVkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBXZWJEYXRhYmFz
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViRGF0YWJhc2VNYW5hZ2VyOjpzaGFyZWRXZWJEYXRh
YmFzZU1hbmFnZXIpOgorICAgICAgICAoV2ViRGF0YWJhc2VNYW5hZ2VyOjpvcmlnaW5zKToKKyAg
ICAgICAgKFdlYkRhdGFiYXNlTWFuYWdlcjo6ZGF0YWJhc2VzV2l0aE9yaWdpbik6CisgICAgICAg
IChXZWJEYXRhYmFzZU1hbmFnZXI6OmRldGFpbHNGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJE
YXRhYmFzZU1hbmFnZXI6OmRlbGV0ZUFsbERhdGFiYXNlcyk6CisgICAgICAgIChXZWJEYXRhYmFz
ZU1hbmFnZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJEYXRhYmFzZU1hbmFnZXI6OmRl
bGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkRhdGFiYXNlTWFuYWdlcjo6c2V0UXVvdGEpOgor
ICAgICAgICAoV2ViS2l0SW5pdGlhbGl6ZVdlYkRhdGFiYXNlc0lmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKiBXZWJTZWN1cml0eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJTZWN1cml0eU9yaWdpbjo6
dXNhZ2UpOgorICAgICAgICAoV2ViU2VjdXJpdHlPcmlnaW46OnF1b3RhKToKKyAgICAgICAgKFdl
YlNlY3VyaXR5T3JpZ2luOjpzZXRRdW90YSk6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDEzLTAxLTI3ICBa
b2x0YW4gQXJ2YWkgIDx6YXJ2YWlAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIEZpeGluZyBh
dG9taWNJbmNyZW1lbnQgaW1wbGVtZW50YXRpb24gZm9yIFdpbmRvd3MgYnkgZHJvcHBpbmcgc3Vw
cG9ydCBiZWZvcmUgWFAgU1AyLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRGF0YWJhc2VN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEYXRhYmFzZU1h
bmFnZXIuY3BwCShyZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEYXRh
YmFzZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEYXRhYmFzZU1hbgogewogICAgIGlmICghc19zaGFyZWRX
ZWJEYXRhYmFzZU1hbmFnZXIpIHsKICAgICAgICAgc19zaGFyZWRXZWJEYXRhYmFzZU1hbmFnZXIu
YWRvcHRSZWYoV2ViRGF0YWJhc2VNYW5hZ2VyOjpjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICAgICAg
RGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2V0Q2xpZW50KHNfc2hhcmVkV2ViRGF0YWJhc2VN
YW5hZ2VyLmdldCgpKTsKKyAgICAgICAgRGF0YWJhc2VNYW5hZ2VyOjpzZXRDbGllbnQoc19zaGFy
ZWRXZWJEYXRhYmFzZU1hbmFnZXIuZ2V0KCkpOwogICAgIH0KIAogICAgIHJldHVybiBzX3NoYXJl
ZFdlYkRhdGFiYXNlTWFuYWdlci5jb3B5UmVmVG8ocmVzdWx0KTsKQEAgLTIyMCw3ICsyMjAsNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRhdGFiYXNlTWFuCiAgICAgICAgIHJldHVy
biBFX0ZBSUw7CiAKICAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IG9yaWdpbnM7
Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkub3JpZ2lucyhvcmlnaW5zKTsKKyAgICBE
YXRhYmFzZU1hbmFnZXI6Om9yaWdpbnMob3JpZ2lucyk7CiAgICAgICAgIENPTVB0cjxDT01FbnVt
VmFyaWFudDxWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+ID4gPiBlbnVtVmFyaWFudChB
ZG9wdENPTSwgQ09NRW51bVZhcmlhbnQ8VmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiA+
OjphZG9wdChvcmlnaW5zKSk7CiAKICAgICAqcmVzdWx0ID0gZW51bVZhcmlhbnQubGVha1JlZigp
OwpAQCAtMjQ0LDcgKzI0NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRGF0YWJh
c2VNYW4KICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGRhdGFi
YXNlTmFtZXM7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZGF0YWJhc2VOYW1lc0Zv
ck9yaWdpbih3ZWJTZWN1cml0eU9yaWdpbi0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2VOYW1l
cyk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKHdlYlNlY3Vy
aXR5T3JpZ2luLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZU5hbWVzKTsKIAogICAgIENPTVB0
cjxDT01FbnVtVmFyaWFudDxWZWN0b3I8U3RyaW5nPiA+ID4gZW51bVZhcmlhbnQoQWRvcHRDT00s
IENPTUVudW1WYXJpYW50PFZlY3RvcjxTdHJpbmc+ID46OmFkb3B0KGRhdGFiYXNlTmFtZXMpKTsK
IApAQCAtMjY5LDcgKzI2OSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRGF0YWJh
c2VNYW4KICAgICBpZiAoIXdlYlNlY3VyaXR5T3JpZ2luKQogICAgICAgICByZXR1cm4gRV9GQUlM
OwogCi0gICAgRGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFn
ZXIoKS5kZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihTdHJpbmcoZGF0YWJhc2VOYW1lLCBTeXNTdHJp
bmdMZW4oZGF0YWJhc2VOYW1lKSksCisgICAgRGF0YWJhc2VEZXRhaWxzIGRldGFpbHMgPSBEYXRh
YmFzZU1hbmFnZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKFN0cmluZyhkYXRhYmFzZU5hbWUs
IFN5c1N0cmluZ0xlbihkYXRhYmFzZU5hbWUpKSwKICAgICAgICAgd2ViU2VjdXJpdHlPcmlnaW4t
PnNlY3VyaXR5T3JpZ2luKCkpOwogCiAgICAgaWYgKGRldGFpbHMubmFtZSgpLmlzTnVsbCgpKQpA
QCAtMjg0LDcgKzI4NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRGF0YWJhc2VN
YW4KICAgICBpZiAodGhpcyAhPSBzX3NoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcikKICAgICAgICAg
cmV0dXJuIEVfRkFJTDsKIAotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRlbGV0ZUFs
bERhdGFiYXNlcygpOworICAgIERhdGFiYXNlTWFuYWdlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCk7
CiAKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTMwMiw3ICszMDIsNyBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYkRhdGFiYXNlTWFuCiAgICAgaWYgKCF3ZWJTZWN1cml0eU9yaWdpbikK
ICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigp
LmRlbGV0ZU9yaWdpbih3ZWJTZWN1cml0eU9yaWdpbi0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAg
RGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVPcmlnaW4od2ViU2VjdXJpdHlPcmlnaW4tPnNlY3VyaXR5
T3JpZ2luKCkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zMjQsNyArMzI0LDcgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEYXRhYmFzZU1hbgogICAgIGlmICghd2ViU2VjdXJp
dHlPcmlnaW4pCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBEYXRhYmFzZU1hbmFnZXI6
Om1hbmFnZXIoKS5kZWxldGVEYXRhYmFzZSh3ZWJTZWN1cml0eU9yaWdpbi0+c2VjdXJpdHlPcmln
aW4oKSwgU3RyaW5nKGRhdGFiYXNlTmFtZSwgU3lzU3RyaW5nTGVuKGRhdGFiYXNlTmFtZSkpKTsK
KyAgICBEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZURhdGFiYXNlKHdlYlNlY3VyaXR5T3JpZ2luLT5z
ZWN1cml0eU9yaWdpbigpLCBTdHJpbmcoZGF0YWJhc2VOYW1lLCBTeXNTdHJpbmdMZW4oZGF0YWJh
c2VOYW1lKSkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zODEsNyArMzgxLDcgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEYXRhYmFzZU1hbgogICAgIGlmICh0aGlzICE9IHNf
c2hhcmVkV2ViRGF0YWJhc2VNYW5hZ2VyKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAg
RGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2V0UXVvdGEoU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZUZyb21TdHJpbmcob3JpZ2luKS5nZXQoKSwgcXVvdGEpOworICAgIERhdGFiYXNlTWFuYWdlcjo6
c2V0UXVvdGEoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcob3JpZ2luKS5nZXQoKSwg
cXVvdGEpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBX
ZWJLaXRJbml0aWFsaXplV2ViRGF0YWJhc2VzSWZOZWNlcwogICAgICAgICByZXR1cm47CiAKICAg
ICBXVEY6OlN0cmluZyBkYXRhYmFzZXNEaXJlY3RvcnkgPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoV2ViQ29yZTo6bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCks
ICJEYXRhYmFzZXMiKTsKLSAgICBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5p
bml0aWFsaXplKGRhdGFiYXNlc0RpcmVjdG9yeSk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2VNYW5h
Z2VyOjppbml0aWFsaXplKGRhdGFiYXNlc0RpcmVjdG9yeSk7CiAKICAgICBpbml0aWFsaXplZCA9
IHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTZWN1cml0eU9yaWdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViU2VjdXJpdHlPcmlnaW4uY3BwCShy
ZXZpc2lvbiAxNDEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTZWN1cml0eU9yaWdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYlNlY3VyaXR5T3JpCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CiAKLSAgICAqcmVzdWx0ID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkudXNh
Z2VGb3JPcmlnaW4obV9zZWN1cml0eU9yaWdpbi5nZXQoKSk7CisgICAgKnJlc3VsdCA9IERhdGFi
YXNlTWFuYWdlcjo6dXNhZ2VGb3JPcmlnaW4obV9zZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKICAg
ICByZXR1cm4gU19PSzsKICNlbHNlCkBAIC0xNTAsNyArMTUwLDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJTZWN1cml0eU9yaQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOwogCi0gICAgKnJlc3VsdCA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigp
LnF1b3RhRm9yT3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworICAgICpyZXN1bHQgPSBE
YXRhYmFzZU1hbmFnZXI6OnF1b3RhRm9yT3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwog
ICAgIHJldHVybiBTX09LOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKQEAgLTE2
Miw3ICsxNjIsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlNlY3VyaXR5T3JpCiAg
ICAgLyogW2luXSAqLyB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpIAogewogI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2V0UXVvdGEobV9z
ZWN1cml0eU9yaWdpbi5nZXQoKSwgcXVvdGEpOworICAgIERhdGFiYXNlTWFuYWdlcjo6c2V0UXVv
dGEobV9zZWN1cml0eU9yaWdpbi5nZXQoKSwgcXVvdGEpOwogCiAgICAgcmV0dXJuIFNfT0s7CiAj
ZWxzZQpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODE4LDcgKzQ4MTgs
NyBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlCiAgICAgaHIgPSBw
cmVmc1ByaXZhdGUtPmRhdGFiYXNlc0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQo
aHIpKQogICAgICAgICByZXR1cm4gaHI7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCku
c2V0SXNBdmFpbGFibGUoZW5hYmxlZCk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpzZXRJc0F2YWls
YWJsZShlbmFibGVkKTsKICNlbmRpZgogCiAgICAgaHIgPSBwcmVmc1ByaXZhdGUtPmxvY2FsU3Rv
cmFnZUVuYWJsZWQoJmVuYWJsZWQpOwpJbmRleDogU291cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTAz
NCkKKysrIFNvdXJjZS9XZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTggQEAKKzIwMTMtMDEtMjggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIENoYW5nZSBEYXRhYmFzZU1hbmFnZXIgaW50ZXJmYWNlIHRvIGJlIHN0YXRpYyBtZXRo
b2RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4
MTQ2LgorCisgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudFd4OjpleGNlZWRlZERhdGFiYXNlUXVvdGEpOgorICAgICAgICAqIFdlYlZpZXcu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpTZXREYXRhYmFzZURpcmVjdG9yeSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OkdldERhdGFiYXNlRGlyZWN0b3J5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6U2V0RGF0YWJhc2VzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OkFyZURhdGFiYXNlc0VuYWJsZWQpOgorCiAyMDEzLTAxLTI0ICBNYXJrIEhhaG5l
bmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgT2JqZWN0aXZlLUMgQVBJ
OiBSZW5hbWUgSlNWYWx1ZS5oL0FQSUpTVmFsdWUuaCB0byBKU0NKU1ZhbHVlLmgvSlNWYWx1ZS5o
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3d4L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd3gvV2ViVmlldy5jcHAJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJL
aXQvd3gvV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjUsNyArMTEyNSw3IEBAIGJv
b2wgV2ViVmlldzo6U2hvdWxkQ2xvc2UoKSBjb25zdAogdm9pZCBXZWJWaWV3OjpTZXREYXRhYmFz
ZURpcmVjdG9yeShjb25zdCB3eFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpCiB7CiAjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKLSAgICBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIo
KS5zZXREYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworICAgIFdlYkNv
cmU6OkRhdGFiYXNlTWFuYWdlcjo6c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlRGly
ZWN0b3J5KTsKICNlbmRpZgogfQogCkBAIC0xMTMzLDcgKzExMzMsNyBAQCB2b2lkIFdlYlZpZXc6
OlNldERhdGFiYXNlRGlyZWN0b3J5KGNvbnN0CiB3eFN0cmluZyBXZWJWaWV3OjpHZXREYXRhYmFz
ZURpcmVjdG9yeSgpCiB7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICByZXR1cm4gV2Vi
Q29yZTo6RGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCk7
CisgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKCk7CiAjZWxzZQogICAgIHJldHVybiB3eEVtcHR5U3RyaW5nOwogI2VuZGlmCkBAIC0xMTQz
LDggKzExNDMsNyBAQCB3eFN0cmluZyBXZWJWaWV3OjpHZXREYXRhYmFzZURpcmVjdG9yeSgpCiB2
b2lkIFdlYlZpZXc6OlNldERhdGFiYXNlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCi0gICAgV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyJiBkYk1hbmFn
ZXIgPSBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKTsKLSAgICBtYW5hZ2VyLnNl
dElzQXZhaWxhYmxlKGVuYWJsZWQpOworICAgIERhdGFiYXNlTWFuYWdlcjo6c2V0SXNBdmFpbGFi
bGUoZW5hYmxlZCk7CiAjZW5kaWYKIH0KIApAQCAtMTE1Miw4ICsxMTUxLDcgQEAgdm9pZCBXZWJW
aWV3OjpTZXREYXRhYmFzZXNFbmFibGVkKGJvb2wgZQogYm9vbCBXZWJWaWV3OjpBcmVEYXRhYmFz
ZXNFbmFibGVkKCkKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIFdlYkNvcmU6OkRh
dGFiYXNlTWFuYWdlciYgZGJNYW5hZ2VyID0gV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjptYW5h
Z2VyKCk7Ci0gICAgcmV0dXJuIGRiTWFuYWdlci5pc0F2YWlsYWJsZSgpOworICAgIHJldHVybiBE
YXRhYmFzZU1hbmFnZXI6OmlzQXZhaWxhYmxlKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVD
bGllbnRXeC5jcHAJKHJldmlzaW9uIDE0MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvd3gvV2ViS2l0
U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNyw4ICs0Mjcs
OCBAQCB2b2lkIENocm9tZUNsaWVudFd4OjpleGNlZWRlZERhdGFiYXNlUXVvCiAgICAgaWYgKFdl
YkZyYW1lKiB3ZWJGcmFtZSA9IG1fd2ViVmlldy0+R2V0TWFpbkZyYW1lKCkpCiAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSB3ZWJGcmFtZS0+R2V0RnJhbWUoKSkKICAgICAgICAgICAgIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBp
ZiAoIURhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmhhc0VudHJ5Rm9yT3JpZ2luKGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICAgICAgRGF0YWJhc2VNYW5hZ2Vy
OjptYW5hZ2VyKCkuc2V0UXVvdGEoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIHF1b3RhKTsK
KyAgICAgICAgICAgICAgICBpZiAoIURhdGFiYXNlTWFuYWdlcjo6aGFzRW50cnlGb3JPcmlnaW4o
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICAgICAgICAgICAgICBEYXRhYmFz
ZU1hbmFnZXI6OnNldFF1b3RhKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBxdW90YSk7CiB9
CiAjZW5kaWYKIAo=
</data>
<flag name="commit-queue"
          id="204091"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>