<?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>225843</bug_id>
          
          <creation_ts>2021-05-15 13:14:26 -0700</creation_ts>
          <short_desc>Clean up BaseAudioContext now that legacy/prefixed WebAudio is gone</short_desc>
          <delta_ts>2021-05-15 19:38:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=180332</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225849</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>225832</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1760453</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-15 13:14:26 -0700</bug_when>
    <thetext>Clean up BaseAudioContext now that legacy/prefixed WebAudio is gone. Now that we have a simpler class hierarchy, we can move more code out of BaseAudioContext and into its subclasses (OfflineAudioContext &amp; AudioContext).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760475</commentid>
    <comment_count>1</comment_count>
      <attachid>428744</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-15 14:57:07 -0700</bug_when>
    <thetext>Created attachment 428744
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760509</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-15 17:37:40 -0700</bug_when>
    <thetext>*** Bug 180332 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760513</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-15 18:05:27 -0700</bug_when>
    <thetext>Committed r277553 (237781@main): &lt;https://commits.webkit.org/237781@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428744.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760514</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-15 18:06:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/78066681&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428744</attachid>
            <date>2021-05-15 14:57:07 -0700</date>
            <delta_ts>2021-05-15 18:05:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225843-20210515145706.patch</filename>
            <type>text/plain</type>
            <size>75569</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiMTc2MWNiM2RlOTQx
MGEzMDRlNTgwODA5MjJhODM0MTUxNjk1Ni4uNWNiNzhkOTM4ZmIyMDMzODY4MzBmMzJiYWViOTU1
NDEwYmYwODBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAyMS0wNS0xNSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIEJhc2VBdWRp
b0NvbnRleHQgbm93IHRoYXQgbGVnYWN5L3ByZWZpeGVkIFdlYkF1ZGlvIGlzIGdvbmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBCYXNlQXVkaW9D
b250ZXh0IGNsYXNzIGhpZXJhcmNoeSB1c2VkIHRvIGJlIGEgYml0IGNvbXBsaWNhdGVkIHdoZW4K
KyAgICAgICAgd2Ugc3VwcG9zZWQgbGVnYWN5IFdlYkF1ZGlvIGJlY2F1c2UgT2ZmbGluZUF1ZGlv
Q29udGV4dCB3b3VsZCBzdWJjbGFzcworICAgICAgICBCYXNlQXVkaW9Db250ZXh0IGRpcmVjdGx5
LCB3aGlsZSBXZWJLaXRPZmZsaW5lQXVkaW9Db250ZXh0IHdvdWxkCisgICAgICAgIHN1YmNsYXNz
IEJhc2VBdWRpb0NvbnRleHQgdmlhIEF1ZGlvQ29udGV4dC4gVGhlIGNsYXNzIGhpZXJhcmNoeSBp
cyBub3cKKyAgICAgICAgYSBsb3Qgc2ltcGxlciwgQmFzZUF1ZGlvQ29udGV4dCBpcyB0aGUgYmFz
ZSBjbGFzcyBhbmQgaXQgaGFzIGV4YWN0bHkKKyAgICAgICAgMiBzdWJjbGFzc2VzOiBPZmZsaW5l
QXVkaW9Db250ZXh0IGFuZCBBdWRpb0NvbnRleHQgKGZvciByZWFsLXRpbWUKKyAgICAgICAgcmVu
ZGVyaW5nKS4gTm93IHRoYXQgdGhlIGxlZ2FjeSBXZWJBdWRpbyBjb2RlIGlzIGdvbmUsIHRoaXMg
cGF0Y2gKKyAgICAgICAgY2xlYW5zIHVwIEJhc2VBdWRpb0NvbnRleHQgYW5kIG1vdmVzIGFzIG11
Y2ggY29kZSBhcyBwb3NzaWJsZSB0byBpdHMKKyAgICAgICAgc3ViY2xhc3NlcyAoT2ZmbGluZUF1
ZGlvQ29udGV4dCAmIEF1ZGlvQ29udGV4dCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyOjpjcmVhdGUp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVyKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OkF1ZGlvQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnVuaW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6YWN0aXZlRE9NT2JqZWN0TmFtZSBj
b25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAg
ICAgKGlzVHlwZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHRTdGF0
ZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvTm9kZTo6c2V0Q2hhbm5lbENvdW50KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05v
ZGVPdXRwdXQ6OkF1ZGlvTm9kZU91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGVP
dXRwdXQ6OnNldE51bWJlck9mQ2hhbm5lbHMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Xb3JrbGV0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1dvcmtsZXROb2Rl
OjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUNvbnRleHRJRCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlQXVkaW9Db250ZXh0OjpCYXNlQXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkJhc2VBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
QXVkaW9Db250ZXh0OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6
OmNyZWF0ZVNjcmlwdFByb2Nlc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250
ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1
ZGlvQ29udGV4dDo6bG9ja0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0Nv
bnRleHQ6OnRyeUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6dW5s
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmhhbmRsZVBvc3RSZW5k
ZXJUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpkZWxldGVNYXJr
ZWROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRv
bWF0aWNQdWxsTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6cG9z
dFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6d29ya2xldElzUmVh
ZHkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aXNJbml0aWFsaXplZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpjdXJyZW50U2FtcGxlRnJhbWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6Y3VycmVudFRpbWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6c2FtcGxlUmF0ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpsaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjppbmNyZW1lbnRDb25uZWN0aW9uQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aXNBdWRpb1RocmVhZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojppc0F1ZGlvVGhyZWFkRmlu
aXNoZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aXNHcmFw
aE93bmVyIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxNZXJnZXJO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5uZWxNZXJnZXJOb2RlOjpjcmVhdGUpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQ2hhbm5lbFNwbGl0dGVyTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaGFubmVsU3BsaXR0ZXJOb2RlOjpjcmVhdGUpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6RGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
dHJlYW1BdWRpb1NvdXJjZU5vZGU6OnNldEZvcm1hdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVB
dWRpb0NvbnRleHQ6Ok9mZmxpbmVBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6T2Zm
bGluZUF1ZGlvQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRp
b0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9D
b250ZXh0OjphY3RpdmVET01PYmplY3ROYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9m
ZmxpbmVBdWRpb0NvbnRleHQ6OnN0YXJ0UmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok9m
ZmxpbmVBdWRpb0NvbnRleHQ6OnN1c3BlbmRSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
T2ZmbGluZUF1ZGlvQ29udGV4dDo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZmxpbmVBdWRpb0NvbnRleHQ6OmRpZFN1c3BlbmRSZW5kZXJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6T2ZmbGluZUF1ZGlvQ29udGV4dDo6ZmluaXNoZWRSZW5kZXJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6T2ZmbGluZUF1ZGlvQ29udGV4dDo6c2V0dGxlUmVuZGVyaW5nUHJvbWlzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9Db250ZXh0OjpkaXNwYXRjaEV2ZW50KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuaDoKKyAgICAgICAg
KGlzVHlwZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250ZXh0
LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6
Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRQcm9jZXNzb3JOb2RlOjpTY3JpcHRQcm9jZXNzb3JOb2RlKToKKwogMjAyMS0wNS0xNSAg
QWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gTW92ZSB0YWJs
ZSB3cmFwcGVyIHF1aXJrcyB0byBpdHMgb3duIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCmluZGV4IGU0ZThlNjgyYjU3ZGEzZTY4YWNh
YTQ4MDkxYmVjMmFiZjFkNTY0OWUuLjE1NzlmODE1NTMyODcwMDFmMDAxNzRlOTJiYWM2NDJhZDc2
ZGQyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZm
ZXIuY3BwCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVmUHRyPEF1
ZGlvQnVmZmVyPiBBdWRpb0J1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMs
IHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgTGVnYWN5UHJldmVudERl
dGFjaGluZyBwcmV2ZW50RGV0YWNoaW5nKQogewotICAgIGlmICghQmFzZUF1ZGlvQ29udGV4dDo6
aXNTdXBwb3J0ZWRTYW1wbGVSYXRlKHNhbXBsZVJhdGUpIHx8ICFudW1iZXJPZkNoYW5uZWxzIHx8
IG51bWJlck9mQ2hhbm5lbHMgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSB8
fCAhbnVtYmVyT2ZGcmFtZXMpCisgICAgaWYgKCFCYXNlQXVkaW9Db250ZXh0Ojppc1N1cHBvcnRl
ZFNhbXBsZVJhdGUoc2FtcGxlUmF0ZSkgfHwgIW51bWJlck9mQ2hhbm5lbHMgfHwgbnVtYmVyT2ZD
aGFubmVscyA+IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscyB8fCAhbnVtYmVyT2ZG
cmFtZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBidWZmZXIgPSBhZG9w
dFJlZigqbmV3IEF1ZGlvQnVmZmVyKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBz
YW1wbGVSYXRlLCBwcmV2ZW50RGV0YWNoaW5nKSk7CkBAIC01Nyw3ICs1Nyw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxBdWRpb0J1ZmZlcj4+IEF1ZGlvQnVmZmVyOjpjcmVhdGUoY29uc3QgQXVkaW9CdWZm
ZXJPcHRpb25zJiBvcHRpCiAgICAgaWYgKCFvcHRpb25zLm51bWJlck9mQ2hhbm5lbHMpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciwgIk51bWJlciBvZiBjaGFu
bmVscyBjYW5ub3QgYmUgMC4iX3MgfTsKIAotICAgIGlmIChvcHRpb25zLm51bWJlck9mQ2hhbm5l
bHMgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSkKKyAgICBpZiAob3B0aW9u
cy5udW1iZXJPZkNoYW5uZWxzID4gQXVkaW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5uZWxzKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IsICJOdW1iZXIgb2Yg
Y2hhbm5lbHMgY2Fubm90IGJlIG1vcmUgdGhhbiBtYXggc3VwcG9ydGVkLiJfcyB9OwogICAgIAog
ICAgIGlmICghb3B0aW9ucy5sZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAKaW5kZXggNDhjMTYzMjBi
YTljOTQ1MTkzMGUwY2I4MDMyNmVhNTUxNjJiOTkxOC4uZTBiZDRjYTNiZjNkMzg1ZTQ0N2Q0ZDc3
OTkxYWRmNzEwZGYzZTEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcApAQCAtNDI2LDcgKzQyNiw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVyKFJlZlB0
cjxBdWRpb0J1ZmZlcj4mJiBidWZmZXIpCiAKICAgICAgICAgLy8gRG8gYW55IG5lY2Vzc3Nhcnkg
cmUtY29uZmlndXJhdGlvbiB0byB0aGUgYnVmZmVyJ3MgbnVtYmVyIG9mIGNoYW5uZWxzLgogICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVmZmVyLT5udW1iZXJPZkNoYW5uZWxz
KCk7Ci0gICAgICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IEF1ZGlvQ29udGV4dDo6bWF4
TnVtYmVyT2ZDaGFubmVscygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mQ2hhbm5lbHMgPD0g
QXVkaW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5uZWxzKTsKIAogICAgICAgICBvdXRwdXQoMCkt
PnNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAppbmRleCA3ZDU2ZDBhNWZm
M2M1M2U3ZWNkNjMyZmNiODY1Mzc5MTRiMTNiZmI2Li43Nzc2YTUxZjBkYTlhZDJlOWM5NTBjYWVm
ZDMyODM4ZDQxMjA1NDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAK
ICNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb0NvbnRleHRPcHRpb25z
LmgiCiAjaW5jbHVkZSAiQXVkaW9UaW1lc3RhbXAuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIK
ICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgpAQCAtNjMsNiArNjQsMTAgQEAgY29u
c3RleHByIHVuc2lnbmVkIG1heEhhcmR3YXJlQ29udGV4dHMgPSA0OwogCiBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoQXVkaW9Db250ZXh0KTsKIAorI2lmIE9TKFdJTkRPV1MpCitzdGF0aWMg
dW5zaWduZWQgaGFyZHdhcmVDb250ZXh0Q291bnQ7CisjZW5kaWYKKwogc3RhdGljIE9wdGlvbmFs
PGZsb2F0PiYgZGVmYXVsdFNhbXBsZVJhdGVGb3JUZXN0aW5nKCkKIHsKICAgICBzdGF0aWMgT3B0
aW9uYWw8ZmxvYXQ+IHNhbXBsZVJhdGU7CkBAIC04NSw3ICs5MCw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxBdWRpb0NvbnRleHQ+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQs
IEF1ZGlvQ29uCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICNpZiBPUyhXSU5ET1dT
KQotICAgIGlmIChzX2hhcmR3YXJlQ29udGV4dENvdW50ID49IG1heEhhcmR3YXJlQ29udGV4dHMp
CisgICAgaWYgKGhhcmR3YXJlQ29udGV4dENvdW50ID49IG1heEhhcmR3YXJlQ29udGV4dHMpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBRdW90YUV4Y2VlZGVkRXJyb3IsICJSZWFjaGVkIG1h
eGltdW0gbnVtYmVyIG9mIGhhcmR3YXJlIGNvbnRleHRzIG9uIHRoaXMgcGxhdGZvcm0iX3MgfTsK
ICNlbmRpZgogICAgIApAQCAtMTA1LDExICsxMTAsMTUgQEAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlv
Q29udGV4dD4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgQXVkaW9D
b24KICAgICByZXR1cm4gYXVkaW9Db250ZXh0OwogfQogCi0vLyBDb25zdHJ1Y3RvciBmb3IgcmVu
ZGVyaW5nIHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KIEF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0
KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgQXVkaW9Db250ZXh0T3B0aW9ucyYgY29udGV4dE9w
dGlvbnMpCi0gICAgOiBCYXNlQXVkaW9Db250ZXh0KGRvY3VtZW50LCBjb250ZXh0T3B0aW9ucykK
KyAgICA6IEJhc2VBdWRpb0NvbnRleHQoZG9jdW1lbnQpCisgICAgLCBtX2Rlc3RpbmF0aW9uTm9k
ZShtYWtlVW5pcXVlUmVmPERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZT4oKnRoaXMsIGNvbnRl
eHRPcHRpb25zLnNhbXBsZVJhdGUpKQogICAgICwgbV9tZWRpYVNlc3Npb24oUGxhdGZvcm1NZWRp
YVNlc3Npb246OmNyZWF0ZShQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKSwgKnRoaXMpKQogeworICAgIC8vIEFjY29yZGluZyB0byBzcGVjIEF1ZGlvQ29udGV4dCBt
dXN0IGRpZSBvbmx5IGFmdGVyIHBhZ2UgbmF2aWdhdGUuCisgICAgLy8gTGV0cyBtYXJrIGl0IGFz
IEFjdGl2ZURPTU9iamVjdCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgYW5kIHVubWFyayBpdCBpbiBj
bGVhciBtZXRob2QuCisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCk7CisKICAgICBjb25zdHJ1Y3RD
b21tb24oKTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIG5vZGUncyBtdXRl
ZCBzdGF0ZSB0byBtYXRjaCB0aGUgcGFnZSdzIGN1cnJlbnQgbXV0ZWQgc3RhdGUuCkBAIC0xMTcs
NiArMTI2LDE0IEBAIEF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KERvY3VtZW50JiBkb2N1bWVu
dCwgY29uc3QgQXVkaW9Db250ZXh0T3B0aW9ucyYgY29udGV4CiAKICAgICBkb2N1bWVudC5hZGRB
dWRpb1Byb2R1Y2VyKCp0aGlzKTsKICAgICBkb2N1bWVudC5yZWdpc3RlckZvclZpc2liaWxpdHlT
dGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOworCisgICAgLy8gVW5saWtlIE9mZmxpbmVBdWRp
b0NvbnRleHQsIEF1ZGlvQ29udGV4dCBkb2VzIG5vdCByZXF1aXJlIGNhbGxpbmcgcmVzdW1lKCkg
dG8gc3RhcnQgcmVuZGVyaW5nLgorICAgIC8vIExhenkgaW5pdGlhbGl6YXRpb24gc3RhcnRzIHJl
bmRlcmluZyBzbyB3ZSBzY2hlZHVsZSBhIHRhc2sgaGVyZSB0byBtYWtlIHN1cmUgbGF6eSBpbml0
aWFsaXphdGlvbgorICAgIC8vIGVuZHMgdXAgaGFwcGVuaW5nLCBldmVuIGlmIG5vIGF1ZGlvIG5v
ZGUgZ2V0cyBjb25zdHJ1Y3RlZC4KKyAgICBwb3N0VGFzayhbdGhpc10geworICAgICAgICBpZiAo
IWlzU3RvcHBlZCgpKQorICAgICAgICAgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBBdWRpb0NvbnRleHQ6OmNvbnN0cnVjdENvbW1vbigpCkBAIC0xNDAsNiArMTU3LDIx
IEBAIEF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpCiAgICAgfQogfQogCit2b2lkIEF1ZGlv
Q29udGV4dDo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQmFzZUF1ZGlvQ29udGV4dDo6dW5pbml0aWFsaXplKCk7CisK
KyNpZiBPUyhXSU5ET1dTKQorICAgIEFTU0VSVChoYXJkd2FyZUNvbnRleHRDb3VudCk7CisgICAg
LS1oYXJkd2FyZUNvbnRleHRDb3VudDsKKyNlbmRpZgorCisgICAgc2V0U3RhdGUoU3RhdGU6OkNs
b3NlZCk7Cit9CisKIGRvdWJsZSBBdWRpb0NvbnRleHQ6OmJhc2VMYXRlbmN5KCkKIHsKICAgICBs
YXp5SW5pdGlhbGl6ZSgpOwpAQCAtMTg2LDE2ICsyMTgsNiBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6
Y2xvc2UoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKICAgICB9KTsKIH0KIAot
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlJiBBdWRpb0NvbnRleHQ6OmRlc3RpbmF0aW9uKCkK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlJj4o
QmFzZUF1ZGlvQ29udGV4dDo6ZGVzdGluYXRpb24oKSk7Ci19Ci0KLWNvbnN0IERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZSYgQXVkaW9Db250ZXh0OjpkZXN0aW5hdGlvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZSY+
KEJhc2VBdWRpb0NvbnRleHQ6OmRlc3RpbmF0aW9uKCkpOwotfQotCiB2b2lkIEF1ZGlvQ29udGV4
dDo6c3VzcGVuZFJlbmRlcmluZyhET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQog
ewogICAgIGlmIChpc09mZmxpbmVDb250ZXh0KCkpIHsKQEAgLTMwOSw3ICszMzEsOSBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6bGF6eUluaXRpYWxpemUoKQogICAgICAgICAgICAgLy8gTk9URTogZm9y
IG5vdyBkZWZhdWx0IEF1ZGlvQ29udGV4dCBkb2VzIG5vdCBuZWVkIGFuIGV4cGxpY2l0IHN0YXJ0
UmVuZGVyaW5nKCkgY2FsbCBmcm9tIEphdmFTY3JpcHQuCiAgICAgICAgICAgICAvLyBXZSBtYXkg
d2FudCB0byBjb25zaWRlciByZXF1aXJpbmcgaXQgZm9yIHN5bW1ldHJ5IHdpdGggT2ZmbGluZUF1
ZGlvQ29udGV4dC4KICAgICAgICAgICAgIHN0YXJ0UmVuZGVyaW5nKCk7Ci0gICAgICAgICAgICAr
K3NfaGFyZHdhcmVDb250ZXh0Q291bnQ7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgICAgICsr
aGFyZHdhcmVDb250ZXh0Q291bnQ7CisjZW5kaWYKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQz
NSw2ICs0NTksMTEgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnJlc3VtZSgpCiAgICAgZG9jdW1lbnQo
KS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAorY29uc3QgY2hhciogQXVkaW9Db250ZXh0
OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIkF1ZGlvQ29udGV4
dCI7Cit9CisKIHZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5kUGxheWJhY2soKQogewogICAgIGlm
IChzdGF0ZSgpID09IFN0YXRlOjpDbG9zZWQgfHwgIWlzSW5pdGlhbGl6ZWQoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDE2NjQ1Njcz
YzkyYzNhMjllMjc2NDMwZmIwZGJjOGUzNTM5ZWY0NmQuLmE2ZWY2N2MxYjM2YTM5NzVlMDYzODlh
ZmU3N2QxYzU1YTZjZTdjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTggKzI1LDIzIEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiQXVkaW9Db250ZXh0T3B0aW9ucy5oIgogI2luY2x1ZGUgIkJhc2VBdWRpb0NvbnRl
eHQuaCIKICNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKICNpbmNsdWRl
ICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRlICJNZWRpYVByb2R1Y2VyLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb24uaCIKICNpbmNsdWRlICJWaXNpYmlsaXR5Q2hh
bmdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFz
cyBNZWRpYVN0cmVhbTsKK2NsYXNzIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU7Citj
bGFzcyBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZTsKIAorc3RydWN0IEF1ZGlvQ29udGV4dE9w
dGlvbnM7CiBzdHJ1Y3QgQXVkaW9UaW1lc3RhbXA7CiAKIGNsYXNzIEF1ZGlvQ29udGV4dCBmaW5h
bApAQCAtNDgsMTUgKzUzLDE2IEBAIGNsYXNzIEF1ZGlvQ29udGV4dCBmaW5hbAogICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoQXVkaW9Db250ZXh0KTsKIHB1YmxpYzoKICAgICAvLyBDcmVhdGUg
YW4gQXVkaW9Db250ZXh0IGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgotICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8QXVkaW9Db250ZXh0Pj4gY3JlYXRlKERvY3VtZW50Jiwg
QXVkaW9Db250ZXh0T3B0aW9ucyYmID0geyB9KTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVm
PEF1ZGlvQ29udGV4dD4+IGNyZWF0ZShEb2N1bWVudCYsIEF1ZGlvQ29udGV4dE9wdGlvbnMmJik7
CiAgICAgfkF1ZGlvQ29udGV4dCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQg
c2V0RGVmYXVsdFNhbXBsZVJhdGVGb3JUZXN0aW5nKE9wdGlvbmFsPGZsb2F0Pik7CiAKICAgICB2
b2lkIGNsb3NlKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmKTsKIAotICAgIERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZSYgZGVzdGluYXRpb24oKTsKLSAgICBjb25zdCBEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGUmIGRlc3RpbmF0aW9uKCkgY29uc3Q7CisgICAgRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlJiBkZXN0aW5hdGlvbigpIGZpbmFsIHsgcmV0dXJuIG1fZGVzdGluYXRpb25O
b2RlLmdldCgpOyB9CisgICAgY29uc3QgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlJiBkZXN0
aW5hdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLmdldCgpOyB9
CisKICAgICBkb3VibGUgYmFzZUxhdGVuY3koKTsKIAogICAgIEF1ZGlvVGltZXN0YW1wIGdldE91
dHB1dFRpbWVzdGFtcChET01XaW5kb3cmKTsKQEAgLTg4LDggKzk0LDggQEAgcHVibGljOgogICAg
IHZvaWQgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmlj
dGlvbikgeyBtX3Jlc3RyaWN0aW9ucyB8PSByZXN0cmljdGlvbjsgfQogICAgIHZvaWQgcmVtb3Zl
QmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbikgeyBt
X3Jlc3RyaWN0aW9ucyAmPSB+cmVzdHJpY3Rpb247IH0KIAotcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IEF1ZGlvQ29udGV4dChEb2N1bWVudCYsIGNvbnN0IEF1ZGlvQ29udGV4dE9wdGlvbnMmID0g
eyB9KTsKK3ByaXZhdGU6CisgICAgQXVkaW9Db250ZXh0KERvY3VtZW50JiwgY29uc3QgQXVkaW9D
b250ZXh0T3B0aW9ucyYpOwogCiAgICAgYm9vbCB3aWxsQmVnaW5QbGF5YmFjaygpOwogCkBAIC05
Nyw3ICsxMDMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25z
dCBmaW5hbDsKICNlbmRpZgogCi1wcml2YXRlOgogICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7
CiAKICAgICBib29sIHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gIWlzT2ZmbGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2Vy
R2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQpAQCAtMTA1LDYgKzExMCw5IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIHdpbGxQYXVzZVBsYXliYWNrKCk7CiAKKyAgICB2b2lkIHVuaW5p
dGlhbGl6ZSgpIGZpbmFsOworICAgIGJvb2wgaXNPZmZsaW5lQ29udGV4dCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICAvLyBNZWRpYVByb2R1Y2VyCiAgICAgTWVkaWFQcm9k
dWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCBmaW5hbDsKICAgICB2b2lk
IHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkgZmluYWw7CkBAIC0xMjksOSArMTM3LDExIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkgZmluYWw7CiAKICAgICAv
LyBBY3RpdmVET01PYmplY3QKKyAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkg
Y29uc3QgZmluYWw7CiAgICAgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pIGZpbmFs
OwogICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7CiAKKyAgICBVbmlxdWVSZWY8RGVmYXVsdEF1ZGlv
RGVzdGluYXRpb25Ob2RlPiBtX2Rlc3RpbmF0aW9uTm9kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UGxhdGZvcm1NZWRpYVNlc3Npb24+IG1fbWVkaWFTZXNzaW9uOwogCiAgICAgQmVoYXZpb3JSZXN0
cmljdGlvbnMgbV9yZXN0cmljdGlvbnMgeyBOb1Jlc3RyaWN0aW9ucyB9OwpAQCAtMTQyLDMgKzE1
Miw3IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpBdWRpb0NvbnRleHQpCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQpIHsgcmV0dXJuICFjb250
ZXh0LmlzT2ZmbGluZUNvbnRleHQoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHRT
dGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHRTdGF0
ZS5oCmluZGV4IDE2MDEzMTEwOGZhNmE0YzE0YTlhZDYxN2I5MmNhMjE0NzQ0ODc4MGIuLjdjMzc4
NzY0NjlmNmNlMDJkZWZhYzA4NGYxOWRjNjUzZDc3MTdiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0U3RhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dFN0YXRlLmgKQEAgLTI3LDYgKzI3
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIGNsYXNzIEF1ZGlvQ29udGV4dFN0
YXRlIHsgU3VzcGVuZGVkLCBSdW5uaW5nLCBJbnRlcnJ1cHRlZCwgQ2xvc2VkIH07CitlbnVtIGNs
YXNzIEF1ZGlvQ29udGV4dFN0YXRlIDogdWludDhfdCB7IFN1c3BlbmRlZCwgUnVubmluZywgSW50
ZXJydXB0ZWQsIENsb3NlZCB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggMjE2ZjZiN2UyMjAyOWI0ZDE2MjdkMzk1MDVlMDkxZThj
ZDM4MmI0Ny4uYjM3M2Q1MDI2ZjAyYzdlMzI1NzNmNDBiMGNkZjY0NDgyNGQyZWQ1YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApAQCAtMzg3LDcg
KzM4Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvTm9kZTo6c2V0Q2hhbm5lbENvdW50KHVu
c2lnbmVkIGNoYW5uZWxDb3VudCkKICAgICBpZiAoIWNoYW5uZWxDb3VudCkKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yLCAiQ2hhbm5lbCBjb3VudCBjYW5ub3Qg
YmUgMCJfcyB9OwogICAgIAotICAgIGlmIChjaGFubmVsQ291bnQgPiBBdWRpb0NvbnRleHQ6Om1h
eE51bWJlck9mQ2hhbm5lbHMoKSkKKyAgICBpZiAoY2hhbm5lbENvdW50ID4gQXVkaW9Db250ZXh0
OjptYXhOdW1iZXJPZkNoYW5uZWxzKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhT
aXplRXJyb3IsICJDaGFubmVsIGNvdW50IGV4Y2VlZHMgbWF4aW11bSBsaW1pdCJfcyB9OwogCiAg
ICAgaWYgKG1fY2hhbm5lbENvdW50ID09IGNoYW5uZWxDb3VudCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAppbmRleCA4ZWM4Y2Qx
ZmRhODcwYWZiMDEzNGI2ZTM0YTU2MTRmM2RiNGYzMDc2Li5lNzZjZThmZThkMmY1NWQyN2Y0ZTVj
OTQzNTU3ODczMjY5MjA2ODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCkBAIC00MiwxNCArNDIsMTQgQEAgQXVkaW9Ob2Rl
T3V0cHV0OjpBdWRpb05vZGVPdXRwdXQoQXVkaW9Ob2RlKiBub2RlLCB1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzKQogICAgICwgbV9udW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpCiAg
ICAgLCBtX2Rlc2lyZWROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpCiB7Ci0gICAg
QVNTRVJUKG51bWJlck9mQ2hhbm5lbHMgPD0gQXVkaW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5u
ZWxzKCkpOworICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IEF1ZGlvQ29udGV4dDo6bWF4
TnVtYmVyT2ZDaGFubmVscyk7CiAKICAgICBtX2ludGVybmFsQnVzID0gQXVkaW9CdXM6OmNyZWF0
ZShudW1iZXJPZkNoYW5uZWxzLCBBdWRpb1V0aWxpdGllczo6cmVuZGVyUXVhbnR1bVNpemUpOwog
fQogCiB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzKQogewotICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IEF1ZGlv
Q29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscygpKTsKKyAgICBBU1NFUlQobnVtYmVyT2ZDaGFu
bmVscyA8PSBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMpOwogICAgIEFTU0VSVChj
b250ZXh0KCkuaXNHcmFwaE93bmVyKCkpOwogCiAgICAgbV9kZXNpcmVkTnVtYmVyT2ZDaGFubmVs
cyA9IG51bWJlck9mQ2hhbm5lbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvV29ya2xldE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1dvcmtsZXROb2RlLmNwcAppbmRleCA1OTIyNjgyNzBjMzE2Yzg2ODlkNjE4
ZTZmOTRiNDUwN2I3Y2YyZjk5Li45YzQxZDEzNjkyM2Y2N2NmYjQwNmE2MjMzYjY0ZDU3ZDExYWNi
MGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29y
a2xldE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9X
b3JrbGV0Tm9kZS5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvV29y
a2xldE5vZGU+PiBBdWRpb1dvcmtsZXROb2RlOjpjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCYK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciwgIkxlbmd0aCBv
ZiBzcGVjaWZpZWQgb3V0cHV0Q2hhbm5lbENvdW50IGRvZXMgbm90IG1hdGNoIHRoZSBnaXZlbiBu
dW1iZXIgb2Ygb3V0cHV0cyJfcyB9OwogCiAgICAgICAgIGZvciAoYXV0byYgY2hhbm5lbENvdW50
IDogKm9wdGlvbnMub3V0cHV0Q2hhbm5lbENvdW50KSB7Ci0gICAgICAgICAgICBpZiAoY2hhbm5l
bENvdW50IDwgMSB8fCBjaGFubmVsQ291bnQgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hh
bm5lbHMoKSkKKyAgICAgICAgICAgIGlmIChjaGFubmVsQ291bnQgPCAxIHx8IGNoYW5uZWxDb3Vu
dCA+IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IsICJQcm92aWRlZCBudW1iZXIgb2Yg
Y2hhbm5lbHMgZm9yIG91dHB1dCBpcyBvdXRzaWRlIHN1cHBvcnRlZCByYW5nZSJfcyB9OwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9CYXNlQXVkaW9Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QmFzZUF1ZGlvQ29udGV4dC5jcHAKaW5kZXggZTFmNGIwNGVmMjNjNjljYjk4Yzc0MDJhMmZmMjEx
YjVhNTQ5YTQ5MS4uMDYyNWYyMWUzYjg0MDI3OTQzZDRmYTE1ZWRiNGZiMjRiZDQ0NWY2YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRl
eHQuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgIkNvbnN0YW50U291cmNlTm9kZS5oIgogI2lu
Y2x1ZGUgIkNvbnN0YW50U291cmNlT3B0aW9ucy5oIgogI2luY2x1ZGUgIkNvbnZvbHZlck5vZGUu
aCIKLSNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKICNpbmNsdWRlICJE
ZWxheU5vZGUuaCIKICNpbmNsdWRlICJEZWxheU9wdGlvbnMuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgpAQCAtNjgsOCArNjcsNiBAQAogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCi0j
aW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCiAjaW5jbHVkZSAiT3NjaWxsYXRvck5vZGUuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFubmVyTm9kZS5oIgpAQCAtODAsOCArNzcsMTQg
QEAKICNpbmNsdWRlICJTdGVyZW9QYW5uZXJOb2RlLmgiCiAjaW5jbHVkZSAiU3RlcmVvUGFubmVy
T3B0aW9ucy5oIgogI2luY2x1ZGUgIldhdmVTaGFwZXJOb2RlLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TY3JpcHRD
YWxsU3RhY2suaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKICNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUwogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC05MSwyMCArOTQsNiBAQAogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIlNjcmlwdENvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9BcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChCYXNlQXVk
aW9Db250ZXh0KTsKQEAgLTExNCw5ICsxMDMsNyBAQCBib29sIEJhc2VBdWRpb0NvbnRleHQ6Omlz
U3VwcG9ydGVkU2FtcGxlUmF0ZShmbG9hdCBzYW1wbGVSYXRlKQogICAgIHJldHVybiBzYW1wbGVS
YXRlID49IDMwMDAgJiYgc2FtcGxlUmF0ZSA8PSAzODQwMDA7CiB9CiAKLXVuc2lnbmVkIEJhc2VB
dWRpb0NvbnRleHQ6OnNfaGFyZHdhcmVDb250ZXh0Q291bnQ7Ci0KLXN0YXRpYyB1aW50NjRfdCBn
ZW5lcmF0ZUF1ZGlvQ29udGV4dElEKCkKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUNvbnRleHRJ
RCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBzdGF0aWMgdWludDY0X3Qg
Y29udGV4dElEU2VlZCA9IDA7CkBAIC0xMzAsNTIgKzExNywxOCBAQCBzdGF0aWMgSGFzaFNldDx1
aW50NjRfdD4mIGxpdmVBdWRpb0NvbnRleHRzKCkKICAgICByZXR1cm4gY29udGV4dHM7CiB9CiAK
LS8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgotQmFz
ZUF1ZGlvQ29udGV4dDo6QmFzZUF1ZGlvQ29udGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0
IEF1ZGlvQ29udGV4dE9wdGlvbnMmIGNvbnRleHRPcHRpb25zKQorQmFzZUF1ZGlvQ29udGV4dDo6
QmFzZUF1ZGlvQ29udGV4dChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBBY3RpdmVET01PYmpl
Y3QoZG9jdW1lbnQpCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgLCBtX2xvZ2dlcihk
b2N1bWVudC5sb2dnZXIoKSkKICAgICAsIG1fbG9nSWRlbnRpZmllcih1bmlxdWVMb2dJZGVudGlm
aWVyKCkpCiAjZW5kaWYKLSAgICAsIG1fY29udGV4dElEKGdlbmVyYXRlQXVkaW9Db250ZXh0SUQo
KSkKKyAgICAsIG1fY29udGV4dElEKGdlbmVyYXRlQ29udGV4dElEKCkpCiAgICAgLCBtX3dvcmts
ZXQoQXVkaW9Xb3JrbGV0OjpjcmVhdGUoKnRoaXMpKQotICAgICwgbV9kZXN0aW5hdGlvbk5vZGUo
bWFrZVVuaXF1ZVJlZjxEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU+KCp0aGlzLCBjb250ZXh0
T3B0aW9ucy5zYW1wbGVSYXRlKSkKICAgICAsIG1fbGlzdGVuZXIoQXVkaW9MaXN0ZW5lcjo6Y3Jl
YXRlKCp0aGlzKSkKIHsKICAgICBsaXZlQXVkaW9Db250ZXh0cygpLmFkZChtX2NvbnRleHRJRCk7
CiAKLSAgICAvLyBBY2NvcmRpbmcgdG8gc3BlYyBBdWRpb0NvbnRleHQgbXVzdCBkaWUgb25seSBh
ZnRlciBwYWdlIG5hdmlnYXRlLgotICAgIC8vIExldHMgbWFyayBpdCBhcyBBY3RpdmVET01PYmpl
Y3Qgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IGFuZCB1bm1hcmsgaXQgaW4gY2xlYXIgbWV0aG9kLgot
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSgpOwotCi0gICAgRkZURnJhbWU6OmluaXRpYWxpemUoKTsK
LQotICAgIC8vIFVubGlrZSBPZmZsaW5lQXVkaW9Db250ZXh0LCBBdWRpb0NvbnRleHQgZG9lcyBu
b3QgcmVxdWlyZSBjYWxsaW5nIHJlc3VtZSgpIHRvIHN0YXJ0IHJlbmRlcmluZy4KLSAgICAvLyBM
YXp5IGluaXRpYWxpemF0aW9uIHN0YXJ0cyByZW5kZXJpbmcgc28gd2Ugc2NoZWR1bGUgYSB0YXNr
IGhlcmUgdG8gbWFrZSBzdXJlIGxhenkgaW5pdGlhbGl6YXRpb24KLSAgICAvLyBlbmRzIHVwIGhh
cHBlbmluZywgZXZlbiBpZiBubyBhdWRpbyBub2RlIGdldHMgY29uc3RydWN0ZWQuCi0gICAgcG9z
dFRhc2soW3RoaXNdIHsKLSAgICAgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgfSk7Ci19Ci0KLS8v
IENvbnN0cnVjdG9yIGZvciBvZmZsaW5lIChub24tcmVhbHRpbWUpIHJlbmRlcmluZy4KLUJhc2VB
dWRpb0NvbnRleHQ6OkJhc2VBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCB1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXI+
JiYgcmVuZGVyVGFyZ2V0KQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50KQotI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAotICAgICwgbV9sb2dnZXIoZG9jdW1lbnQubG9nZ2VyKCkpCi0g
ICAgLCBtX2xvZ0lkZW50aWZpZXIodW5pcXVlTG9nSWRlbnRpZmllcigpKQotI2VuZGlmCi0gICAg
LCBtX2NvbnRleHRJRChnZW5lcmF0ZUF1ZGlvQ29udGV4dElEKCkpCi0gICAgLCBtX3dvcmtsZXQo
QXVkaW9Xb3JrbGV0OjpjcmVhdGUoKnRoaXMpKQotICAgICwgbV9pc09mZmxpbmVDb250ZXh0KHRy
dWUpCi0gICAgLCBtX3JlbmRlclRhcmdldChXVEZNb3ZlKHJlbmRlclRhcmdldCkpCi0gICAgLCBt
X2Rlc3RpbmF0aW9uTm9kZShtYWtlVW5pcXVlUmVmPE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZT4oKnRoaXMsIG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUsIG1fcmVuZGVyVGFyZ2V0LmNv
cHlSZWYoKSkpCi0gICAgLCBtX2xpc3RlbmVyKEF1ZGlvTGlzdGVuZXI6OmNyZWF0ZSgqdGhpcykp
Ci17Ci0gICAgbGl2ZUF1ZGlvQ29udGV4dHMoKS5hZGQobV9jb250ZXh0SUQpOwogICAgIEZGVEZy
YW1lOjppbml0aWFsaXplKCk7CiB9CiAKQEAgLTIxMiw3ICsxNjUsNyBAQCB2b2lkIEJhc2VBdWRp
b0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKICAgICBpZiAobV9pc0F1ZGlvVGhyZWFkRmluaXNo
ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGVzdGluYXRpb25Ob2RlLT5pbml0aWFsaXpl
KCk7CisgICAgZGVzdGluYXRpb24oKS5pbml0aWFsaXplKCk7CiAKICAgICBtX2lzSW5pdGlhbGl6
ZWQgPSB0cnVlOwogfQpAQCAtMjQwLDE5ICsxOTMsMTEgQEAgdm9pZCBCYXNlQXVkaW9Db250ZXh0
Ojp1bmluaXRpYWxpemUoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGlzIHN0b3BzIHRo
ZSBhdWRpbyB0aHJlYWQgYW5kIGFsbCBhdWRpbyByZW5kZXJpbmcuCi0gICAgbV9kZXN0aW5hdGlv
bk5vZGUtPnVuaW5pdGlhbGl6ZSgpOworICAgIGRlc3RpbmF0aW9uKCkudW5pbml0aWFsaXplKCk7
CiAKICAgICAvLyBEb24ndCBhbGxvdyB0aGUgY29udGV4dCB0byBpbml0aWFsaXplIGEgc2Vjb25k
IHRpbWUgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4gZXhwbGljaXRseSB1bmluaXRpYWxpemVkLgog
ICAgIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkID0gdHJ1ZTsKIAotICAgIGlmICghaXNPZmZsaW5l
Q29udGV4dCgpKSB7Ci0gICAgICAgIEFTU0VSVChzX2hhcmR3YXJlQ29udGV4dENvdW50KTsKLSAg
ICAgICAgLS1zX2hhcmR3YXJlQ29udGV4dENvdW50OwotCi0gICAgICAgIC8vIE9mZmxpbmUgY29u
dGV4dHMgbW92ZSB0byAnQ2xvc2VkJyBzdGF0ZSB3aGVuIGRpc3BhdGNoaW5nIHRoZSBjb21wbGV0
aW9uIGV2ZW50LgotICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6Q2xvc2VkKTsKLSAgICB9Ci0KICAg
ICB7CiAgICAgICAgIEF1dG9Mb2NrZXIgbG9ja2VyKCp0aGlzKTsKICAgICAgICAgLy8gVGhpcyBz
aG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBmcm9tIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpIGF0IHRo
ZSBlbmQgb2YgcmVuZGVyaW5nLgpAQCAtMjY4LDExICsyMTMsNiBAQCB2b2lkIEJhc2VBdWRpb0Nv
bnRleHQ6OnVuaW5pdGlhbGl6ZSgpCiAgICAgbV9pc0luaXRpYWxpemVkID0gZmFsc2U7CiB9CiAK
LWJvb2wgQmFzZUF1ZGlvQ29udGV4dDo6aXNJbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNJbml0aWFsaXplZDsKLX0KLQogdm9pZCBCYXNlQXVkaW9Db250ZXh0OjphZGRSZWFj
dGlvbihTdGF0ZSBzdGF0ZSwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsK
ICAgICBzaXplX3Qgc3RhdGVJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGUpOwpAQCAt
MzAyLDE0ICsyNDIsMTUgQEAgdm9pZCBCYXNlQXVkaW9Db250ZXh0OjpzZXRTdGF0ZShTdGF0ZSBz
dGF0ZSkKIAogdm9pZCBCYXNlQXVkaW9Db250ZXh0OjpzdG9wKCkKIHsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAgICAgCi0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKTsKLQogICAgIC8vIFVzdWFsbHkgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBjYWxscyBz
dG9wIHR3aWNlLgogICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKICAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CisKICAgICBtX2lzU3Rv
cFNjaGVkdWxlZCA9IHRydWU7CiAKICAgICBBU1NFUlQoZG9jdW1lbnQoKSk7CkBAIC0zMTksMjEg
KzI2MCwxMSBAQCB2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnN0b3AoKQogICAgIGNsZWFyKCk7CiB9
CiAKLWNvbnN0IGNoYXIqIEJhc2VBdWRpb0NvbnRleHQ6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBj
b25zdAotewotICAgIHJldHVybiAiQXVkaW9Db250ZXh0IjsKLX0KLQogRG9jdW1lbnQqIEJhc2VB
dWRpb0NvbnRleHQ6OmRvY3VtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gZG93bmNhc3Q8RG9j
dW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiB9CiAKLWZsb2F0IEJhc2VBdWRpb0Nv
bnRleHQ6OnNhbXBsZVJhdGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rlc3RpbmF0aW9uTm9k
ZS0+c2FtcGxlUmF0ZSgpOwotfQotCiBib29sIEJhc2VBdWRpb0NvbnRleHQ6OndvdWxkVGFpbnRP
cmlnaW4oY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgaWYgKHVybC5wcm90b2NvbElzRGF0
YSgpKQpAQCAtMzc4LDExICszMDksNiBAQCB2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmRlY29kZUF1
ZGlvRGF0YShSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBSZWZQdHI8QXVkaQogICAgIH0p
OwogfQogCi1BdWRpb0xpc3RlbmVyJiBXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpsaXN0ZW5l
cigpCi17Ci0gICAgcmV0dXJuIG1fbGlzdGVuZXI7Ci19Ci0KIEV4Y2VwdGlvbk9yPFJlZjxBdWRp
b0J1ZmZlclNvdXJjZU5vZGU+PiBCYXNlQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXJTb3VyY2Uo
KQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CkBAIC00MzUsMTMgKzM2MSwxMyBA
QCBFeGNlcHRpb25PcjxSZWY8U2NyaXB0UHJvY2Vzc29yTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6
OmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaQogICAgIC8vIFRoaXMgcGFyYW1ldGVyIFtudW1iZXJP
ZklucHV0Q2hhbm5lbHNdIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBjaGFubmVscyBmb3IgdGhp
cyBub2RlJ3MgaW5wdXQuIFZhbHVlcyBvZgogICAgIC8vIHVwIHRvIDMyIG11c3QgYmUgc3VwcG9y
dGVkLiBBIE5vdFN1cHBvcnRlZEVycm9yIG11c3QgYmUgdGhyb3duIGlmIHRoZSBudW1iZXIgb2Yg
Y2hhbm5lbHMgaXMgbm90IHN1cHBvcnRlZC4KIAotICAgIGlmIChudW1iZXJPZklucHV0Q2hhbm5l
bHMgPiBtYXhOdW1iZXJPZkNoYW5uZWxzKCkpCisgICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVs
cyA+IG1heE51bWJlck9mQ2hhbm5lbHMpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RT
dXBwb3J0ZWRFcnJvciwgIm51bWJlck9mSW5wdXRDaGFubmVscyBleGNlZWRzIG1heGltdW0gbnVt
YmVyIG9mIGNoYW5uZWxzIl9zIH07CiAKICAgICAvLyBUaGlzIHBhcmFtZXRlciBbbnVtYmVyT2ZP
dXRwdXRDaGFubmVsc10gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlz
IG5vZGUncyBvdXRwdXQuIFZhbHVlcyBvZgogICAgIC8vIHVwIHRvIDMyIG11c3QgYmUgc3VwcG9y
dGVkLiBBIE5vdFN1cHBvcnRlZEVycm9yIG11c3QgYmUgdGhyb3duIGlmIHRoZSBudW1iZXIgb2Yg
Y2hhbm5lbHMgaXMgbm90IHN1cHBvcnRlZC4KIAotICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5u
ZWxzID4gbWF4TnVtYmVyT2ZDaGFubmVscygpKQorICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5u
ZWxzID4gbWF4TnVtYmVyT2ZDaGFubmVscykKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
dFN1cHBvcnRlZEVycm9yLCAibnVtYmVyT2ZPdXRwdXRDaGFubmVscyBleGNlZWRzIG1heGltdW0g
bnVtYmVyIG9mIGNoYW5uZWxzIl9zIH07CiAKICAgICByZXR1cm4gU2NyaXB0UHJvY2Vzc29yTm9k
ZTo6Y3JlYXRlKCp0aGlzLCBidWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJl
ck9mT3V0cHV0Q2hhbm5lbHMpOwpAQCAtNTgzLDExICs1MDksNiBAQCBFeGNlcHRpb25PcjxSZWY8
SUlSRmlsdGVyTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNyZWF0ZUlJUkZpbHRlcihTY3JpcHRF
eGVjdXRpbwogICAgIHJldHVybiBJSVJGaWx0ZXJOb2RlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgKnRoaXMsIFdURk1vdmUob3B0aW9ucykpOwogfQogCi1zdGF0aWMgYm9vbCBpc0Zp
bmlzaGVkU291cmNlTm9kZShjb25zdCBBdWRpb0Nvbm5lY3Rpb25SZWZQdHI8QXVkaW9Ob2RlPiYg
bm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+aXNGaW5pc2hlZFNvdXJjZU5vZGUoKTsKLX0KLQog
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKQogewogICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CkBAIC01OTYsNyArNTE3LDcgQEAgdm9pZCBCYXNlQXVk
aW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKQogICAgIGlmICghbV9oYXNGaW5p
c2hlZEF1ZGlvU291cmNlTm9kZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcmVmZXJlbmNl
ZFNvdXJjZU5vZGVzLnJlbW92ZUFsbE1hdGNoaW5nKGlzRmluaXNoZWRTb3VyY2VOb2RlKTsKKyAg
ICBtX3JlZmVyZW5jZWRTb3VyY2VOb2Rlcy5yZW1vdmVBbGxNYXRjaGluZyhbXShhdXRvJiBub2Rl
KSB7IHJldHVybiBub2RlLT5pc0ZpbmlzaGVkU291cmNlTm9kZSgpOyB9KTsKICAgICBtX2hhc0Zp
bmlzaGVkQXVkaW9Tb3VyY2VOb2RlcyA9IGZhbHNlOwogfQogCkBAIC02NDEsNyArNTYyLDcgQEAg
dm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpsb2NrSW50ZXJuYWwoYm9vbCYgbXVzdFJlbGVhc2VMb2Nr
KQogICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAg
ICAvLyBBY3F1aXJlIHRoZSBsb2NrLgotICAgICAgICBtX2NvbnRleHRHcmFwaE11dGV4LmxvY2so
KTsKKyAgICAgICAgbV9jb250ZXh0R3JhcGhMb2NrLmxvY2soKTsKICAgICAgICAgbV9ncmFwaE93
bmVyVGhyZWFkID0gJnRoaXNUaHJlYWQ7CiAgICAgICAgIG11c3RSZWxlYXNlTG9jayA9IHRydWU7
CiAgICAgfQpAQCAtNjQ5LDEzICs1NzAsMTAgQEAgdm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpsb2Nr
SW50ZXJuYWwoYm9vbCYgbXVzdFJlbGVhc2VMb2NrKQogCiBib29sIEJhc2VBdWRpb0NvbnRleHQ6
OnRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKQogewotICAgIFRocmVhZCYgdGhpc1RocmVh
ZCA9IFRocmVhZDo6Y3VycmVudCgpOwotICAgIGJvb2wgaXNBdWRpb1RocmVhZCA9ICZ0aGlzVGhy
ZWFkID09IGF1ZGlvVGhyZWFkKCk7Ci0KICAgICAvLyBUcnkgdG8gY2F0Y2ggY2FzZXMgb2YgdXNp
bmcgdHJ5IGxvY2sgb24gbWFpbiB0aHJlYWQgLSBpdCBzaG91bGQgdXNlIHJlZ3VsYXIgbG9jay4K
LSAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Cisg
ICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7CiAg
ICAgCi0gICAgaWYgKCFpc0F1ZGlvVGhyZWFkKSB7CisgICAgaWYgKCFpc0F1ZGlvVGhyZWFkKCkp
IHsKICAgICAgICAgLy8gSW4gcmVsZWFzZSBidWlsZCB0cmVhdCB0cnlMb2NrKCkgYXMgbG9jaygp
IChzaW5jZSBhYm92ZSBBU1NFUlQoaXNBdWRpb1RocmVhZCkgbmV2ZXIgZmlyZXMpIC0gdGhpcyBp
cyB0aGUgYmVzdCB3ZSBjYW4gZG8uCiAgICAgICAgIGxvY2sobXVzdFJlbGVhc2VMb2NrKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC02NjMsMTYgKzU4MSwxNiBAQCBib29sIEJhc2VBdWRpb0Nv
bnRleHQ6OnRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKQogICAgIAogICAgIGJvb2wgaGFz
TG9jazsKICAgICAKLSAgICBpZiAoJnRoaXNUaHJlYWQgPT0gbV9ncmFwaE93bmVyVGhyZWFkKSB7
CisgICAgaWYgKGlzR3JhcGhPd25lcigpKSB7CiAgICAgICAgIC8vIFRocmVhZCBhbHJlYWR5IGhh
cyB0aGUgbG9jay4KICAgICAgICAgaGFzTG9jayA9IHRydWU7CiAgICAgICAgIG11c3RSZWxlYXNl
TG9jayA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIERvbid0IGFscmVhZHkgaGF2
ZSB0aGUgbG9jayAtIHRyeSB0byBhY3F1aXJlIGl0LgotICAgICAgICBoYXNMb2NrID0gbV9jb250
ZXh0R3JhcGhNdXRleC50cnlMb2NrKCk7CisgICAgICAgIGhhc0xvY2sgPSBtX2NvbnRleHRHcmFw
aExvY2sudHJ5TG9jaygpOwogICAgICAgICAKICAgICAgICAgaWYgKGhhc0xvY2spCi0gICAgICAg
ICAgICBtX2dyYXBoT3duZXJUaHJlYWQgPSAmdGhpc1RocmVhZDsKKyAgICAgICAgICAgIG1fZ3Jh
cGhPd25lclRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKIAogICAgICAgICBtdXN0UmVsZWFz
ZUxvY2sgPSBoYXNMb2NrOwogICAgIH0KQEAgLTY4NSwxNyArNjAzLDcgQEAgdm9pZCBCYXNlQXVk
aW9Db250ZXh0Ojp1bmxvY2soKQogICAgIEFTU0VSVChtX2dyYXBoT3duZXJUaHJlYWQgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKIAogICAgIG1fZ3JhcGhPd25lclRocmVhZCA9IG51bGxwdHI7Ci0g
ICAgbV9jb250ZXh0R3JhcGhNdXRleC51bmxvY2soKTsKLX0KLQotYm9vbCBCYXNlQXVkaW9Db250
ZXh0Ojppc0F1ZGlvVGhyZWFkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hdWRpb1RocmVhZCA9
PSAmVGhyZWFkOjpjdXJyZW50KCk7Ci19Ci0KLWJvb2wgQmFzZUF1ZGlvQ29udGV4dDo6aXNHcmFw
aE93bmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ncmFwaE93bmVyVGhyZWFkID09ICZUaHJl
YWQ6OmN1cnJlbnQoKTsKKyAgICBtX2NvbnRleHRHcmFwaExvY2sudW5sb2NrKCk7CiB9CiAKIHZv
aWQgQmFzZUF1ZGlvQ29udGV4dDo6YWRkRGVmZXJyZWREZWNyZW1lbnRDb25uZWN0aW9uQ291bnQo
QXVkaW9Ob2RlKiBub2RlKQpAQCAtNzM5LDI2ICs2NDcsMjcgQEAgdm9pZCBCYXNlQXVkaW9Db250
ZXh0OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQogICAgIC8vIFRoZSB3b3JzdCB0aGF0IGNhbiBo
YXBwZW4gaXMgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgbm9kZXMgd2hpY2ggd2lsbCB0YWtlIHNs
aWdodGx5IGxvbmdlciB0aGFuIHVzdWFsIHRvIGJlIGRlbGV0ZWQgb3IgcmVtb3ZlZAogICAgIC8v
IGZyb20gdGhlIHJlbmRlciBncmFwaCAoaW4gd2hpY2ggY2FzZSB0aGV5J2xsIHJlbmRlciBzaWxl
bmNlKS4KICAgICBib29sIG11c3RSZWxlYXNlTG9jazsKLSAgICBpZiAodHJ5TG9jayhtdXN0UmVs
ZWFzZUxvY2spKSB7Ci0gICAgICAgIC8vIFRha2UgY2FyZSBvZiBmaW5pc2hpbmcgYW55IGRlcmVm
cyB3aGVyZSB0aGUgdHJ5TG9jaygpIGZhaWxlZCBwcmV2aW91c2x5LgotICAgICAgICBoYW5kbGVE
ZWZlcnJlZERlY3JlbWVudENvbm5lY3Rpb25Db3VudHMoKTsKKyAgICBpZiAoIXRyeUxvY2sobXVz
dFJlbGVhc2VMb2NrKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIER5bmFtaWNhbGx5
IGNsZWFuIHVwIG5vZGVzIHdoaWNoIGFyZSBubyBsb25nZXIgbmVlZGVkLgotICAgICAgICBkZXJl
ZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKKyAgICAvLyBUYWtlIGNhcmUgb2YgZmluaXNoaW5nIGFu
eSBkZXJlZnMgd2hlcmUgdGhlIHRyeUxvY2soKSBmYWlsZWQgcHJldmlvdXNseS4KKyAgICBoYW5k
bGVEZWZlcnJlZERlY3JlbWVudENvbm5lY3Rpb25Db3VudHMoKTsKIAotICAgICAgICAvLyBEb24n
dCBkZWxldGUgaW4gdGhlIHJlYWwtdGltZSB0aHJlYWQuIExldCB0aGUgbWFpbiB0aHJlYWQgZG8g
aXQuCi0gICAgICAgIC8vIFJlZi1jb3VudGVkIG9iamVjdHMgaGVsZCBieSBjZXJ0YWluIEF1ZGlv
Tm9kZXMgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4KLSAgICAgICAgc2NoZWR1bGVOb2RlRGVsZXRp
b24oKTsKKyAgICAvLyBEeW5hbWljYWxseSBjbGVhbiB1cCBub2RlcyB3aGljaCBhcmUgbm8gbG9u
Z2VyIG5lZWRlZC4KKyAgICBkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKIAotICAgICAgICAv
LyBGaXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlvU3VtbWluZ0p1bmN0aW9ucyBhbmQg
QXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAgaGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlv
bnMoKTsKLSAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CisgICAgLy8gRG9u
J3QgZGVsZXRlIGluIHRoZSByZWFsLXRpbWUgdGhyZWFkLiBMZXQgdGhlIG1haW4gdGhyZWFkIGRv
IGl0LgorICAgIC8vIFJlZi1jb3VudGVkIG9iamVjdHMgaGVsZCBieSBjZXJ0YWluIEF1ZGlvTm9k
ZXMgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4KKyAgICBzY2hlZHVsZU5vZGVEZWxldGlvbigpOwog
Ci0gICAgICAgIHVwZGF0ZUF1dG9tYXRpY1B1bGxOb2RlcygpOworICAgIC8vIEZpeHVwIHRoZSBz
dGF0ZSBvZiBhbnkgZGlydHkgQXVkaW9TdW1taW5nSnVuY3Rpb25zIGFuZCBBdWRpb05vZGVPdXRw
dXRzLgorICAgIGhhbmRsZURpcnR5QXVkaW9TdW1taW5nSnVuY3Rpb25zKCk7CisgICAgaGFuZGxl
RGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CiAKLSAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykK
LSAgICAgICAgICAgIHVubG9jaygpOwotICAgIH0KKyAgICB1cGRhdGVBdXRvbWF0aWNQdWxsTm9k
ZXMoKTsKKworICAgIGlmIChtdXN0UmVsZWFzZUxvY2spCisgICAgICAgIHVubG9jaygpOwogfQog
CiB2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmhhbmRsZURlZmVycmVkRGVjcmVtZW50Q29ubmVjdGlv
bkNvdW50cygpCkBAIC04MjAsMjkgKzcyOSwyOCBAQCB2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmRl
bGV0ZU1hcmtlZE5vZGVzKCkKIAogICAgIC8vIFByb3RlY3QgdGhpcyBvYmplY3QgZnJvbSBiZWlu
ZyBkZWxldGVkIGJlZm9yZSB3ZSByZWxlYXNlIHRoZSBtdXRleCBsb2NrZWQgYnkgQXV0b0xvY2tl
ci4KICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICB7Ci0gICAg
ICAgIEF1dG9Mb2NrZXIgbG9ja2VyKCp0aGlzKTsKIAotICAgICAgICB3aGlsZSAobV9ub2Rlc1Rv
RGVsZXRlLnNpemUoKSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlKiBub2RlID0gbV9ub2Rlc1Rv
RGVsZXRlLnRha2VMYXN0KCk7CisgICAgQXV0b0xvY2tlciBsb2NrZXIoKnRoaXMpOworCisgICAg
d2hpbGUgKG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpIHsKKyAgICAgICAgQXVkaW9Ob2RlKiBub2Rl
ID0gbV9ub2Rlc1RvRGVsZXRlLnRha2VMYXN0KCk7CiAKLSAgICAgICAgICAgIC8vIEJlZm9yZSBk
ZWxldGluZyB0aGUgbm9kZSwgY2xlYXIgb3V0IGFueSBBdWRpb05vZGVJbnB1dHMgZnJvbSBtX2Rp
cnR5U3VtbWluZ0p1bmN0aW9ucy4KLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRz
ID0gbm9kZS0+bnVtYmVyT2ZJbnB1dHMoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZklucHV0czsgKytpKQotICAgICAgICAgICAgICAgIG1fZGlydHlTdW1t
aW5nSnVuY3Rpb25zLnJlbW92ZShub2RlLT5pbnB1dChpKSk7CisgICAgICAgIC8vIEJlZm9yZSBk
ZWxldGluZyB0aGUgbm9kZSwgY2xlYXIgb3V0IGFueSBBdWRpb05vZGVJbnB1dHMgZnJvbSBtX2Rp
cnR5U3VtbWluZ0p1bmN0aW9ucy4KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMgPSBu
b2RlLT5udW1iZXJPZklucHV0cygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZJbnB1dHM7ICsraSkKKyAgICAgICAgICAgIG1fZGlydHlTdW1taW5nSnVuY3Rpb25z
LnJlbW92ZShub2RlLT5pbnB1dChpKSk7CiAKLSAgICAgICAgICAgIC8vIEJlZm9yZSBkZWxldGlu
ZyB0aGUgbm9kZSwgY2xlYXIgb3V0IGFueSBBdWRpb05vZGVPdXRwdXRzIGZyb20gbV9kaXJ0eUF1
ZGlvTm9kZU91dHB1dHMuCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMgPSBu
b2RlLT5udW1iZXJPZk91dHB1dHMoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZk91dHB1dHM7ICsraSkKLSAgICAgICAgICAgICAgICBtX2RpcnR5QXVkaW9O
b2RlT3V0cHV0cy5yZW1vdmUobm9kZS0+b3V0cHV0KGkpKTsKKyAgICAgICAgLy8gQmVmb3JlIGRl
bGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZU91dHB1dHMgZnJvbSBtX2Rp
cnR5QXVkaW9Ob2RlT3V0cHV0cy4KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzID0g
bm9kZS0+bnVtYmVyT2ZPdXRwdXRzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZk91dHB1dHM7ICsraSkKKyAgICAgICAgICAgIG1fZGlydHlBdWRpb05vZGVPdXRw
dXRzLnJlbW92ZShub2RlLT5vdXRwdXQoaSkpOwogCi0gICAgICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG5vZGUtPm5vZGVUeXBlKCkgIT0gQXVkaW9Ob2RlOjpOb2RlVHlwZURlc3RpbmF0aW9u
LCAiRGVzdGluYXRpb24gbm9kZSBpcyBvd25lZCBieSB0aGUgQmFzZUF1ZGlvQ29udGV4dCIpOwor
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5vZGUtPm5vZGVUeXBlKCkgIT0gQXVkaW9Ob2Rl
OjpOb2RlVHlwZURlc3RpbmF0aW9uLCAiRGVzdGluYXRpb24gbm9kZSBpcyBvd25lZCBieSB0aGUg
QmFzZUF1ZGlvQ29udGV4dCIpOwogCi0gICAgICAgICAgICAvLyBGaW5hbGx5LCBkZWxldGUgaXQu
Ci0gICAgICAgICAgICBkZWxldGUgbm9kZTsKLSAgICAgICAgfQotICAgICAgICBtX2lzRGVsZXRp
b25TY2hlZHVsZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gRmluYWxseSwgZGVsZXRlIGl0LgorICAg
ICAgICBkZWxldGUgbm9kZTsKICAgICB9CisgICAgbV9pc0RlbGV0aW9uU2NoZWR1bGVkID0gZmFs
c2U7CiB9CiAKIHZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6bWFya1N1bW1pbmdKdW5jdGlvbkRpcnR5
KEF1ZGlvU3VtbWluZ0p1bmN0aW9uKiBzdW1taW5nSnVuY3Rpb24pCkBAIC05MTUsMjAgKzgyMywy
MSBAQCB2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1dG9tYXRpY1B1bGxOb2RlcygpCiB7
CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKIAotICAgIGlmIChtX2F1dG9tYXRpY1B1bGxO
b2Rlc05lZWRVcGRhdGluZykgewotICAgICAgICAvLyBIZWFwIGFsbG9jYXRpb25zIGFyZSBmb3Ji
aWRkZW4gb24gdGhlIGF1ZGlvIHRocmVhZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBzbyB3ZSBu
ZWVkIHRvCi0gICAgICAgIC8vIGV4cGxpY2l0bHkgYWxsb3cgdGhlIGZvbGxvd2luZyBhbGxvY2F0
aW9uKHMpLgotICAgICAgICBEaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25zRm9yQ3VycmVudFRocmVh
ZFNjb3BlIGRpc2FibGVNYWxsb2NSZXN0cmljdGlvbnM7CisgICAgaWYgKCFtX2F1dG9tYXRpY1B1
bGxOb2Rlc05lZWRVcGRhdGluZykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIENvcHkg
ZnJvbSBtX2F1dG9tYXRpY1B1bGxOb2RlcyB0byBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rl
cy4KLSAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMucmVzaXplKG1fYXV0b21h
dGljUHVsbE5vZGVzLnNpemUoKSk7CisgICAgLy8gSGVhcCBhbGxvY2F0aW9ucyBhcmUgZm9yYmlk
ZGVuIG9uIHRoZSBhdWRpbyB0aHJlYWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgc28gd2UgbmVl
ZCB0bworICAgIC8vIGV4cGxpY2l0bHkgYWxsb3cgdGhlIGZvbGxvd2luZyBhbGxvY2F0aW9uKHMp
LgorICAgIERpc2FibGVNYWxsb2NSZXN0cmljdGlvbnNGb3JDdXJyZW50VGhyZWFkU2NvcGUgZGlz
YWJsZU1hbGxvY1Jlc3RyaWN0aW9uczsKIAotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAg
ICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX2F1dG9tYXRpY1B1bGxOb2RlcykKLSAgICAgICAgICAg
IG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2krK10gPSBvdXRwdXQ7CisgICAgLy8gQ29w
eSBmcm9tIG1fYXV0b21hdGljUHVsbE5vZGVzIHRvIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5v
ZGVzLgorICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnJlc2l6ZShtX2F1dG9tYXRp
Y1B1bGxOb2Rlcy5zaXplKCkpOwogCi0gICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVw
ZGF0aW5nID0gZmFsc2U7Ci0gICAgfQorICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGZvciAoYXV0
byYgb3V0cHV0IDogbV9hdXRvbWF0aWNQdWxsTm9kZXMpCisgICAgICAgIG1fcmVuZGVyaW5nQXV0
b21hdGljUHVsbE5vZGVzW2krK10gPSBvdXRwdXQ7CisKKyAgICBtX2F1dG9tYXRpY1B1bGxOb2Rl
c05lZWRVcGRhdGluZyA9IGZhbHNlOwogfQogCiB2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnByb2Nl
c3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKQEAgLTk0NCw2ICs4
NTMsNyBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBCYXNlQXVkaW9Db250ZXh0OjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiB9CiAKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJs
eSBtb3ZlIHRvIEF1ZGlvQ29udGV4dC4KIHZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6aXNQbGF5aW5n
QXVkaW9EaWRDaGFuZ2UoKQogewogICAgIC8vIEhlYXAgYWxsb2NhdGlvbnMgYXJlIGZvcmJpZGRl
biBvbiB0aGUgYXVkaW8gdGhyZWFkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHNvIHdlIG5lZWQg
dG8KQEAgLTk1OCw1MyArODY4LDYgQEAgdm9pZCBCYXNlQXVkaW9Db250ZXh0Ojppc1BsYXlpbmdB
dWRpb0RpZENoYW5nZSgpCiAgICAgfSk7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRvIE9mZmxpbmVB
dWRpb0NvbnRleHQgb25jZSBXZWJLaXRPZmZsaW5lQXVkaW9Db250ZXh0IGdldHMgcmVtb3ZlZC4K
LXZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6ZmluaXNoZWRSZW5kZXJpbmcoYm9vbCBkaWRSZW5kZXJp
bmcpCi17Ci0gICAgQVNTRVJUKGlzT2ZmbGluZUNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBhdXRvIGZpbmlzaGVkUmVuZGVyaW5nU2NvcGUgPSBXVEY6Om1ha2VT
Y29wZUV4aXQoW3RoaXNdIHsKLSAgICAgICAgZGlkRmluaXNoT2ZmbGluZVJlbmRlcmluZyhFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIk9mZmxpbmUgcmVuZGVyaW5nIGZhaWxlZCJfcyB9
KTsKLSAgICB9KTsKLQotICAgIGlmICghaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gY2xlYXJQZW5kaW5nQWN0aXZpdHlJZkV4aXRFYXJseSA9IFdURjo6bWFrZVNj
b3BlRXhpdChbdGhpc10gewotICAgICAgICBjbGVhclBlbmRpbmdBY3Rpdml0eSgpOwotICAgIH0p
OwotCi0KLSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotCi0gICAgaWYgKCFkaWRSZW5k
ZXJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gcmVuZGVy
ZWRCdWZmZXIgPSBtX3JlbmRlclRhcmdldC5nZXQoKTsKLSAgICBzZXRTdGF0ZShTdGF0ZTo6Q2xv
c2VkKTsKLQotICAgIEFTU0VSVChyZW5kZXJlZEJ1ZmZlcik7Ci0gICAgaWYgKCFyZW5kZXJlZEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXZvaWQgZmlyaW5nIHRoZSBldmVudCBp
ZiB0aGUgZG9jdW1lbnQgaGFzIGFscmVhZHkgZ29uZSBhd2F5LgotICAgIGlmIChtX2lzU3RvcFNj
aGVkdWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJQZW5kaW5nQWN0aXZpdHlJZkV4
aXRFYXJseS5yZWxlYXNlKCk7Ci0gICAgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCp0aGlzLCBU
YXNrU291cmNlOjpNZWRpYUVsZW1lbnQsIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3Jl
YXRlKCpyZW5kZXJlZEJ1ZmZlcikpOwotCi0gICAgZmluaXNoZWRSZW5kZXJpbmdTY29wZS5yZWxl
YXNlKCk7Ci0gICAgZGlkRmluaXNoT2ZmbGluZVJlbmRlcmluZyhyZW5kZXJlZEJ1ZmZlci5yZWxl
YXNlTm9uTnVsbCgpKTsKLX0KLQotdm9pZCBCYXNlQXVkaW9Db250ZXh0OjpkaXNwYXRjaEV2ZW50
KEV2ZW50JiBldmVudCkKLXsKLSAgICBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudCk7
Ci0gICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gT2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50SW50ZXJmYWNlVHlwZSkKLSAgICAgICAgY2xlYXJQZW5kaW5nQWN0aXZpdHkoKTsKLX0K
LQogdm9pZCBCYXNlQXVkaW9Db250ZXh0OjppbmNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpCiB7
CiAgICAgKyttX2FjdGl2ZVNvdXJjZUNvdW50OwpAQCAtMTAxNSwxOCArODc4LDExIEBAIHZvaWQg
QmFzZUF1ZGlvQ29udGV4dDo6ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKQogICAgIC0tbV9h
Y3RpdmVTb3VyY2VDb3VudDsKIH0KIAotdm9pZCBCYXNlQXVkaW9Db250ZXh0OjpkaWRTdXNwZW5k
UmVuZGVyaW5nKHNpemVfdCkKLXsKLSAgICBzZXRTdGF0ZShTdGF0ZTo6U3VzcGVuZGVkKTsKLX0K
LQotdm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpwb3N0VGFzayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiB0YXNrKQordm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpwb3N0VGFzayhGdW5jdGlvbjx2b2lkKCk+
JiYgdGFzaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3Rv
cFNjaGVkdWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXVldWVUYXNrS2VlcGluZ09iamVj
dEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpNZWRpYUVsZW1lbnQsIFdURk1vdmUodGFzaykpOwor
ICAgIGlmICghbV9pc1N0b3BTY2hlZHVsZWQpCisgICAgICAgIHF1ZXVlVGFza0tlZXBpbmdPYmpl
Y3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6TWVkaWFFbGVtZW50LCBXVEZNb3ZlKHRhc2spKTsK
IH0KIAogY29uc3QgU2VjdXJpdHlPcmlnaW4qIEJhc2VBdWRpb0NvbnRleHQ6Om9yaWdpbigpIGNv
bnN0CkBAIC0xMTA0LDcgKzk2MCw3IEBAIHZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6d29ya2xldElz
UmVhZHkoKQogCiAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSByZW5kZXJpbmcgd2hlbiB0aGUgd29y
a2xldCBiZWNvbWVzIHJlYWR5LCB3ZSBuZWVkIHRvIHJlc3RhcnQKICAgICAvLyByZW5kZXJpbmcg
aW4gb3JkZXIgdG8gc3dpdGNoIHRvIHRoZSBhdWRpbyB3b3JrbGV0IHRocmVhZC4KLSAgICBtX2Rl
c3RpbmF0aW9uTm9kZS0+cmVzdGFydFJlbmRlcmluZygpOworICAgIGRlc3RpbmF0aW9uKCkucmVz
dGFydFJlbmRlcmluZygpOwogfQogCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oCmluZGV4
IGFlMGY0OTExMmEzNzUxNzkzMjM1Y2E2ZjhlMGM0NDM0NzNmNGJhMTAuLjU2MzA2ZmEzNWM3NTFl
MDhiZWUxODVmN2M5OGZhMGIyZmZiMWNkN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywzNyArMjcsMjggQEAKIAog
I2lmIEVOQUJMRShXRUJfQVVESU8pCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dE9wdGlvbnMuaCIKICNpbmNsdWRlICJBdWRpb0NvbnRleHRTdGF0ZS5o
IgogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJn
ZXQuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIk9zY2ls
bGF0b3JUeXBlLmgiCiAjaW5jbHVkZSAiUGVyaW9kaWNXYXZlQ29uc3RyYWludHMuaCIKLSNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Q29uc29sZVR5cGVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRmxvYXQzMkFycmF5Lmg+
CiAjaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuYWx5c2VyTm9kZTsKK2NsYXNzIEFzeW5j
QXVkaW9EZWNvZGVyOwogY2xhc3MgQXVkaW9CdWZmZXI7CiBjbGFzcyBBdWRpb0J1ZmZlckNhbGxi
YWNrOwogY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOwogY2xhc3MgQXVkaW9MaXN0ZW5lcjsK
K2NsYXNzIEF1ZGlvTm9kZU91dHB1dDsKIGNsYXNzIEF1ZGlvU3VtbWluZ0p1bmN0aW9uOwogY2xh
c3MgQXVkaW9Xb3JrbGV0OwogY2xhc3MgQmlxdWFkRmlsdGVyTm9kZTsKQEAgLTY5LDIxICs2MCwx
NyBAQCBjbGFzcyBEZWxheU5vZGU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU7CiBjbGFzcyBHYWluTm9kZTsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiBj
bGFzcyBJSVJGaWx0ZXJOb2RlOwogY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOwot
Y2xhc3MgTWVkaWFTdHJlYW07Ci1jbGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2Rl
OwotY2xhc3MgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU7CiBjbGFzcyBPc2NpbGxhdG9yTm9k
ZTsKIGNsYXNzIFBhbm5lck5vZGU7CiBjbGFzcyBQZXJpb2RpY1dhdmU7Ci1jbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2NyaXB0UHJvY2Vzc29yTm9kZTsKIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogY2xhc3MgU3RlcmVvUGFubmVyTm9kZTsKIGNsYXNzIFdhdmVTaGFwZXJOb2Rl
OwogCitzdHJ1Y3QgQXVkaW9JT1Bvc2l0aW9uOwogc3RydWN0IEF1ZGlvUGFyYW1EZXNjcmlwdG9y
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiBjbGFzcyBET01Qcm9taXNlRGVmZXJyZWQ7
CkBAIC0xMTIsMzMgKzk5LDI0IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBjb250ZXh0SUQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRleHRJRDsgfQogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3Q7CisgICAgYm9vbCBpc0luaXRp
YWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0luaXRpYWxpemVkOyB9CiAgICAgCi0gICAgYm9v
bCBpc09mZmxpbmVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc09mZmxpbmVDb250ZXh0OyB9
CisgICAgdmlydHVhbCBib29sIGlzT2ZmbGluZUNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBBdWRpb0Rlc3RpbmF0aW9uTm9kZSYgZGVzdGluYXRpb24oKSA9IDA7CisgICAgdmlydHVh
bCBjb25zdCBBdWRpb0Rlc3RpbmF0aW9uTm9kZSYgZGVzdGluYXRpb24oKSBjb25zdCA9IDA7CiAK
LSAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSYgZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uTm9kZS5nZXQoKTsgfQotICAgIGNvbnN0IEF1ZGlvRGVzdGluYXRpb25Ob2RlJiBkZXN0
aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLmdldCgpOyB9Ci0KLSAg
ICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlv
bk5vZGUtPmN1cnJlbnRTYW1wbGVGcmFtZSgpOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRUaW1lKCk7IH0KLSAgICBm
bG9hdCBzYW1wbGVSYXRlKCkgY29uc3Q7CisgICAgc2l6ZV90IGN1cnJlbnRTYW1wbGVGcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIGRlc3RpbmF0aW9uKCkuY3VycmVudFNhbXBsZUZyYW1lKCk7IH0KKyAg
ICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCB7IHJldHVybiBkZXN0aW5hdGlvbigpLmN1cnJl
bnRUaW1lKCk7IH0KKyAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gZGVzdGlu
YXRpb24oKS5zYW1wbGVSYXRlKCk7IH0KICAgICB1bnNpZ25lZCBsb25nIGFjdGl2ZVNvdXJjZUNv
dW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9hY3RpdmVT
b3VyY2VDb3VudCk7IH0KIAogICAgIHZvaWQgaW5jcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsK
ICAgICB2b2lkIGRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU3VzcGVuZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgRXhjZXB0aW9u
T3I8UmVmPEF1ZGlvQnVmZmVyPj4gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMsIHVuc2lnbmVkIGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KICAgICAvLyBBc3luY2hy
b25vdXMgYXVkaW8gZmlsZSBkYXRhIGRlY29kaW5nLgogICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRh
KFJlZjxBcnJheUJ1ZmZlcj4mJiwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYsIFJlZlB0
cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmLCBPcHRpb25hbDxSZWY8RGVmZXJyZWRQcm9taXNlPj4m
JiA9IFdURjo6bnVsbG9wdCk7CiAKLSAgICBBdWRpb0xpc3RlbmVyJiBsaXN0ZW5lcigpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGRpZFN1c3BlbmRSZW5kZXJpbmcoc2l6ZV90IGZyYW1lKTsKLQotICAg
IEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclRhcmdl
dC5nZXQoKTsgfQorICAgIEF1ZGlvTGlzdGVuZXImIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9saXN0
ZW5lcjsgfQogCiAgICAgdXNpbmcgU3RhdGUgPSBBdWRpb0NvbnRleHRTdGF0ZTsKICAgICBTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KQEAgLTE2Niw2ICsxNDQsNyBAQCBw
dWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPENvbnN0YW50U291cmNlTm9kZT4+IGNyZWF0ZUNv
bnN0YW50U291cmNlKCk7CiAgICAgRXhjZXB0aW9uT3I8UmVmPFN0ZXJlb1Bhbm5lck5vZGU+PiBj
cmVhdGVTdGVyZW9QYW5uZXIoKTsKICAgICBFeGNlcHRpb25PcjxSZWY8SUlSRmlsdGVyTm9kZT4+
IGNyZWF0ZUlJUkZpbHRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgVmVjdG9yPGRvdWJsZT4m
JiBmZWVkZm9yd2FyZCwgVmVjdG9yPGRvdWJsZT4mJiBmZWVkYmFjayk7CisgICAgRXhjZXB0aW9u
T3I8UmVmPEF1ZGlvQnVmZmVyPj4gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMsIHVuc2lnbmVkIGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICAvLyBDYWxsZWQg
YXQgdGhlIHN0YXJ0IG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCiAgICAgdm9pZCBoYW5kbGVQcmVS
ZW5kZXJUYXNrcyhjb25zdCBBdWRpb0lPUG9zaXRpb24mIG91dHB1dFBvc2l0aW9uKTsKQEAgLTE3
NSw5ICsxNTQsNiBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBy
ZW5kZXIgcXVhbnR1bS4KICAgICB2b2lkIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpOwogCi0gICAg
Ly8gQ2FsbGVkIHBlcmlvZGljYWxseSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0g
dG8gZGVyZWZlcmVuY2UgZmluaXNoZWQgc291cmNlIG5vZGVzLgotICAgIHZvaWQgZGVyZWZGaW5p
c2hlZFNvdXJjZU5vZGVzKCk7Ci0KICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwg
bWFya2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4K
ICAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUmKTsKICAgICB2b2lkIGRlbGV0ZU1h
cmtlZE5vZGVzKCk7CkBAIC0xOTQsNyArMTcwLDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5jcmVt
ZW50Q29ubmVjdGlvbkNvdW50KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgICAgIG1fY29ubmVjdGlvbkNvdW50Kys7CisgICAgICAgICsrbV9jb25uZWN0aW9u
Q291bnQ7CiAgICAgfQogCiAgICAgdW5zaWduZWQgY29ubmVjdGlvbkNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25uZWN0aW9uQ291bnQ7IH0KQEAgLTIwNCwxMSArMTgwLDEwIEBAIHB1YmxpYzoK
ICAgICAvLwogICAgIAogICAgIHZvaWQgc2V0QXVkaW9UaHJlYWQoVGhyZWFkJiB0aHJlYWQpIHsg
bV9hdWRpb1RocmVhZCA9ICZ0aHJlYWQ7IH0gLy8gRklYTUU6IGNoZWNrIGVpdGhlciBub3QgaW5p
dGlhbGl6ZWQgb3IgdGhlIHNhbWUKLSAgICBUaHJlYWQqIGF1ZGlvVGhyZWFkKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdWRpb1RocmVhZDsgfQotICAgIGJvb2wgaXNBdWRpb1RocmVhZCgpIGNvbnN0Owor
ICAgIGJvb2wgaXNBdWRpb1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9UaHJlYWQgPT0g
JlRocmVhZDo6Y3VycmVudCgpOyB9CiAKICAgICAvLyBSZXR1cm5zIHRydWUgb25seSBhZnRlciB0
aGUgYXVkaW8gdGhyZWFkIGhhcyBiZWVuIHN0YXJ0ZWQgYW5kIHRoZW4gc2h1dGRvd24uCi0gICAg
Ym9vbCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSB7IHJldHVybiBtX2lzQXVkaW9UaHJlYWRGaW5p
c2hlZDsgfQorICAgIGJvb2wgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQ7IH0KIAogICAgIC8vIG11c3RSZWxlYXNlTG9jayBpcyBz
ZXQgdG8gdHJ1ZSBpZiB3ZSBhY3F1aXJlZCB0aGUgbG9jayBpbiB0aGlzIG1ldGhvZCBjYWxsIGFu
ZCBjYWxsZXIgbXVzdCB1bmxvY2soKSwgZmFsc2UgaWYgaXQgd2FzIHByZXZpb3VzbHkgYWNxdWly
ZWQuCiAgICAgdm9pZCBsb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jayk7CkBAIC0yMjAsMTcgKzE5
NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmxvY2soKTsKIAogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIHRocmVhZCBvd25zIHRoZSBjb250ZXh0J3MgbG9jay4KLSAgICBib29sIGlzR3Jh
cGhPd25lcigpIGNvbnN0OworICAgIGJvb2wgaXNHcmFwaE93bmVyKCkgY29uc3QgeyByZXR1cm4g
bV9ncmFwaE93bmVyVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKTsgfQogCi0gICAgLy8gUmV0
dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMgd2UgY2FuIHN1cHBvcnQuCi0gICAg
c3RhdGljIHVuc2lnbmVkIG1heE51bWJlck9mQ2hhbm5lbHMoKSB7IHJldHVybiBNYXhOdW1iZXJP
ZkNoYW5uZWxzOyB9CisgICAgLy8gVGhpcyBpcyBjb25zaWRlcmluZyAzMiBpcyBsYXJnZSBlbm91
Z2ggZm9yIG11bHRpcGxlIGNoYW5uZWxzIGF1ZGlvLgorICAgIC8vIEl0IGlzIHNvbWV3aGF0IGFy
Yml0cmFyeSBhbmQgY291bGQgYmUgaW5jcmVhc2VkIGlmIG5lY2Vzc2FyeS4KKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heE51bWJlck9mQ2hhbm5lbHMgPSAzMjsKICAgICAKICAgICAv
LyBJbiBBdWRpb05vZGU6OmRlY3JlbWVudENvbm5lY3Rpb25Db3VudCgpIGEgdHJ5TG9jaygpIGlz
IHVzZWQgZm9yIGNhbGxpbmcgZGVjcmVtZW50Q29ubmVjdGlvbkNvdW50V2l0aExvY2soKSwgYnV0
IGlmIGl0IGZhaWxzIGtlZXAgdHJhY2sgaGVyZS4KICAgICB2b2lkIGFkZERlZmVycmVkRGVjcmVt
ZW50Q29ubmVjdGlvbkNvdW50KEF1ZGlvTm9kZSopOwogCi0gICAgLy8gSW4gdGhlIGF1ZGlvIHRo
cmVhZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgY3ljbGUsIHdlJ2xsIGNhbGwgaGFuZGxl
RGVmZXJyZWREZWNyZW1lbnRDb25uZWN0aW9uQ291bnRzKCkuCi0gICAgdm9pZCBoYW5kbGVEZWZl
cnJlZERlY3JlbWVudENvbm5lY3Rpb25Db3VudHMoKTsKLQogICAgIC8vIE9ubHkgYWNjZXNzZWQg
d2hlbiB0aGUgZ3JhcGggbG9jayBpcyBoZWxkLgogICAgIHZvaWQgbWFya1N1bW1pbmdKdW5jdGlv
bkRpcnR5KEF1ZGlvU3VtbWluZ0p1bmN0aW9uKik7CiAgICAgdm9pZCBtYXJrQXVkaW9Ob2RlT3V0
cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0Kik7CkBAIC0yMzksMTQgKzIxMiw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlbW92ZU1hcmtlZFN1bW1pbmdKdW5jdGlvbihBdWRpb1N1bW1pbmdKdW5jdGlv
biopOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHJlZkV2
ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQotICAgIHZvaWQgZGVyZWZFdmVudFRhcmdl
dCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQotCi0gICAgdm9pZCBmaW5pc2hlZFJlbmRlcmluZyhi
b29sIGRpZFJlbmRlcmluZyk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgc19oYXJkd2FyZUNvbnRl
eHRDb3VudDsKIAogICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKTsKIApAQCAtMjYy
LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCB2b2lkKiBuZXh0QXVkaW9QYXJhbWV0ZXJM
b2dJZGVudGlmaWVyKCkgeyByZXR1cm4gY2hpbGRMb2dJZGVudGlmaWVyKG1fbG9nSWRlbnRpZmll
ciwgKyttX25leHRBdWRpb1BhcmFtZXRlcklkZW50aWZpZXIpOyB9CiAjZW5kaWYKIAotICAgIHZv
aWQgcG9zdFRhc2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIHZvaWQgcG9zdFRhc2so
RnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICBib29sIGlzU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNTdG9wU2NoZWR1bGVkOyB9CiAgICAgY29uc3QgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbigp
IGNvbnN0OwogICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwpAQCAtMjk2LDggKzI2Miw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgVmVjdG9yPEF1ZGlvUGFyYW1EZXNjcmlwdG9y
Pj4mIHBhcmFtZXRlckRlc2NyaXB0b3JNYXAoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlckRl
c2NyaXB0b3JNYXA7IH0KIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEJhc2VBdWRpb0NvbnRl
eHQoRG9jdW1lbnQmLCBjb25zdCBBdWRpb0NvbnRleHRPcHRpb25zJiA9IHsgfSk7Ci0gICAgQmFz
ZUF1ZGlvQ29udGV4dChEb2N1bWVudCYsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0
IHNhbXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlcj4mJiByZW5kZXJUYXJnZXQpOworICAgIGV4
cGxpY2l0IEJhc2VBdWRpb0NvbnRleHQoRG9jdW1lbnQmKTsKICAgICAKICAgICB2b2lkIGNsZWFy
UGVuZGluZ0FjdGl2aXR5KCk7CiAgICAgdm9pZCBzZXRQZW5kaW5nQWN0aXZpdHkoKTsKQEAgLTMx
Myw3ICsyNzgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhZGRSZWFjdGlvbihTdGF0ZSwgRE9N
UHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwogICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaE9mZmxpbmVSZW5kZXJpbmcoRXhjZXB0aW9uT3I8UmVm
PEF1ZGlvQnVmZmVyPj4mJikgeyB9CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpAQCAt
MzI3LDEyICsyOTEsMTkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlZlNvdXJjZU5vZGUoQXVkaW9O
b2RlJik7CiAgICAgdm9pZCBkZXJlZlNvdXJjZU5vZGUoQXVkaW9Ob2RlJik7CiAKKyAgICAvLyBD
YWxsZWQgcGVyaW9kaWNhbGx5IGF0IHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSB0byBk
ZXJlZmVyZW5jZSBmaW5pc2hlZCBzb3VyY2Ugbm9kZXMuCisgICAgdm9pZCBkZXJlZkZpbmlzaGVk
U291cmNlTm9kZXMoKTsKKworICAgIC8vIEluIHRoZSBhdWRpbyB0aHJlYWQgYXQgdGhlIHN0YXJ0
IG9mIGVhY2ggcmVuZGVyIGN5Y2xlLCB3ZSdsbCBjYWxsIGhhbmRsZURlZmVycmVkRGVjcmVtZW50
Q29ubmVjdGlvbkNvdW50cygpLgorICAgIHZvaWQgaGFuZGxlRGVmZXJyZWREZWNyZW1lbnRDb25u
ZWN0aW9uQ291bnRzKCk7CisKICAgICAvLyBFdmVudFRhcmdldAotICAgIHZvaWQgZGlzcGF0Y2hF
dmVudChFdmVudCYpIGZpbmFsOworICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJy
aWRlIHsgcmVmKCk7IH0KKyAgICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IGRl
cmVmKCk7IH0KIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCiAgICAgdm9pZCBzdG9wKCkg
b3ZlcnJpZGU7Ci0gICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgLy8gV2hlbiB0aGUgY29udGV4dCBnb2VzIGF3YXksIHRoZXJlIG1pZ2h0
IHN0aWxsIGJlIHNvbWUgc291cmNlcyB3aGljaCBoYXZlbid0IGZpbmlzaGVkIHBsYXlpbmcuCiAg
ICAgLy8gTWFrZSBzdXJlIHRvIGRlcmVmZXJlbmNlIHRoZW0gaGVyZS4KQEAgLTM2NiwxMyArMzM3
LDYgQEAgcHJpdmF0ZToKICAgICAvLyBUaGV5IHdpbGwgYmUgc2NoZWR1bGVkIGZvciBkZWxldGlv
biAob24gdGhlIG1haW4gdGhyZWFkKSBhdCB0aGUgZW5kIG9mIGEgcmVuZGVyIGN5Y2xlIChpbiBy
ZWFsdGltZSB0aHJlYWQpLgogICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX25vZGVzVG9EZWxldGU7
CiAKLSAgICBib29sIG1faXNEZWxldGlvblNjaGVkdWxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2lzU3RvcFNjaGVkdWxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9pc09mZmxpbmVDb250ZXh0IHsgZmFsc2UgfTsKLQogICAgIC8vIE9ubHkgYWNjZXNzZWQg
d2hlbiB0aGUgZ3JhcGggbG9jayBpcyBoZWxkLgogICAgIEhhc2hTZXQ8QXVkaW9TdW1taW5nSnVu
Y3Rpb24qPiBtX2RpcnR5U3VtbWluZ0p1bmN0aW9uczsKICAgICBIYXNoU2V0PEF1ZGlvTm9kZU91
dHB1dCo+IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzOwpAQCAtMzg1LDM1ICszNDksMTggQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9kZWZlcnJlZEJyZWFrQ29ubmVjdGlvbkxp
c3Q7CiAgICAgVmVjdG9yPFZlY3RvcjxET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4+PiBtX3N0YXRl
UmVhY3Rpb25zOwogCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX3JlbmRlclRhcmdldDsKLSAg
ICBVbmlxdWVSZWY8QXVkaW9EZXN0aW5hdGlvbk5vZGU+IG1fZGVzdGluYXRpb25Ob2RlOwogICAg
IFJlZjxBdWRpb0xpc3RlbmVyPiBtX2xpc3RlbmVyOwogCi0gICAgdW5zaWduZWQgbV9jb25uZWN0
aW9uQ291bnQgeyAwIH07Ci0KLSAgICAvLyBHcmFwaCBsb2NraW5nLgotICAgIExvY2sgbV9jb250
ZXh0R3JhcGhNdXRleDsKLSAgICAvLyBGSVhNRTogVXNpbmcgdm9sYXRpbGUgc2VlbXMgaW5jb3Jy
ZWN0LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAz
MzIKLSAgICBUaHJlYWQqIHZvbGF0aWxlIG1fYXVkaW9UaHJlYWQgeyBudWxscHRyIH07Ci0gICAg
VGhyZWFkKiB2b2xhdGlsZSBtX2dyYXBoT3duZXJUaHJlYWQgeyBudWxscHRyIH07IC8vIGlmIHRo
ZSBsb2NrIGlzIGhlbGQgdGhlbiB0aGlzIGlzIHRoZSB0aHJlYWQgd2hpY2ggb3ducyBpdCwgb3Ro
ZXJ3aXNlID09IG51bGxwdHIuCisgICAgc3RkOjphdG9taWM8VGhyZWFkKj4gbV9hdWRpb1RocmVh
ZDsKKyAgICBzdGQ6OmF0b21pYzxUaHJlYWQqPiBtX2dyYXBoT3duZXJUaHJlYWQ7IC8vIGlmIHRo
ZSBsb2NrIGlzIGhlbGQgdGhlbiB0aGlzIGlzIHRoZSB0aHJlYWQgd2hpY2ggb3ducyBpdCwgb3Ro
ZXJ3aXNlID09IG51bGxwdHIuCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNBdWRpb0RlY29k
ZXI+IG1fYXVkaW9EZWNvZGVyOwogCi0gICAgLy8gVGhpcyBpcyBjb25zaWRlcmluZyAzMiBpcyBs
YXJnZSBlbm91Z2ggZm9yIG11bHRpcGxlIGNoYW5uZWxzIGF1ZGlvLiAKLSAgICAvLyBJdCBpcyBz
b21ld2hhdCBhcmJpdHJhcnkgYW5kIGNvdWxkIGJlIGluY3JlYXNlZCBpZiBuZWNlc3NhcnkuCi0g
ICAgZW51bSB7IE1heE51bWJlck9mQ2hhbm5lbHMgPSAzMiB9OwotCi0gICAgLy8gTnVtYmVyIG9m
IEF1ZGlvQnVmZmVyU291cmNlTm9kZXMgdGhhdCBhcmUgYWN0aXZlIChwbGF5aW5nKS4KLSAgICBz
dGQ6OmF0b21pYzxpbnQ+IG1fYWN0aXZlU291cmNlQ291bnQgeyAwIH07Ci0KLSAgICBTdGF0ZSBt
X3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OwogICAgIFJlZlB0cjxQZW5kaW5nQWN0aXZpdHk8
QmFzZUF1ZGlvQ29udGV4dD4+IG1fcGVuZGluZ0FjdGl2aXR5OwogCiAgICAgQXVkaW9JT1Bvc2l0
aW9uIG1fb3V0cHV0UG9zaXRpb247CiAKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPEF1ZGlv
UGFyYW1EZXNjcmlwdG9yPj4gbV9wYXJhbWV0ZXJEZXNjcmlwdG9yTWFwOwotICAgIGJvb2wgbV9o
YXNGaW5pc2hlZEF1ZGlvU291cmNlTm9kZXMgeyBmYWxzZSB9OwogCiAgICAgLy8gVGhlc2UgYXJl
IGNhY2hlZCBwZXIgYXVkaW8gY29udGV4dCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhleSBj
YW5ub3QgYmUKICAgICAvLyBzdGF0aWMgYmVjYXVzZSB0aGV5IHJlbHkgb24gdGhlIHNhbXBsZSBy
YXRlLgpAQCAtNDIxLDYgKzM2OCwxOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxQZXJpb2RpY1dh
dmU+IG1fY2FjaGVkUGVyaW9kaWNXYXZlU3F1YXJlOwogICAgIFJlZlB0cjxQZXJpb2RpY1dhdmU+
IG1fY2FjaGVkUGVyaW9kaWNXYXZlU2F3dG9vdGg7CiAgICAgUmVmUHRyPFBlcmlvZGljV2F2ZT4g
bV9jYWNoZWRQZXJpb2RpY1dhdmVUcmlhbmdsZTsKKworICAgIC8vIE51bWJlciBvZiBBdWRpb0J1
ZmZlclNvdXJjZU5vZGVzIHRoYXQgYXJlIGFjdGl2ZSAocGxheWluZykuCisgICAgc3RkOjphdG9t
aWM8aW50PiBtX2FjdGl2ZVNvdXJjZUNvdW50OworCisgICAgdW5zaWduZWQgbV9jb25uZWN0aW9u
Q291bnQgeyAwIH07CisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKKyAg
ICBMb2NrIG1fY29udGV4dEdyYXBoTG9jazsKKyAgICBib29sIG1faXNEZWxldGlvblNjaGVkdWxl
ZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzU3RvcFNjaGVkdWxlZCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0F1ZGlvVGhyZWFk
RmluaXNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBk
YXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaW5pc2hlZEF1ZGlvU291cmNlTm9kZXMg
eyBmYWxzZSB9OwogfTsKIAogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxNZXJnZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQ2hhbm5lbE1lcmdlck5vZGUuY3BwCmluZGV4IDhiZWIyYWM2Nzc5
MjE2NmMyOTdhYjdiYjg4NWMwY2M0ZDU4NzBiM2QuLjA4MGFiNWFiNTJhNzUwZWJmOWYwZjM4NWU1
OTJiZjk4YjhlYmE3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQ2hhbm5lbE1lcmdlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQ2hhbm5lbE1lcmdlck5vZGUuY3BwCkBAIC00Myw3ICs0Myw3IEBAIFdURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChDaGFubmVsTWVyZ2VyTm9kZSk7CiAKIEV4Y2VwdGlvbk9yPFJlZjxD
aGFubmVsTWVyZ2VyTm9kZT4+IENoYW5uZWxNZXJnZXJOb2RlOjpjcmVhdGUoQmFzZUF1ZGlvQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgQ2hhbm5lbE1lcmdlck9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgaWYgKG9wdGlvbnMubnVtYmVyT2ZJbnB1dHMgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9m
Q2hhbm5lbHMoKSB8fCAhb3B0aW9ucy5udW1iZXJPZklucHV0cykKKyAgICBpZiAob3B0aW9ucy5u
dW1iZXJPZklucHV0cyA+IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscyB8fCAhb3B0
aW9ucy5udW1iZXJPZklucHV0cykKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6
ZUVycm9yLCAiTnVtYmVyIG9mIGlucHV0cyBpcyBub3QgaW4gdGhlIGFsbG93ZWQgcmFuZ2UuIl9z
IH07CiAgICAgCiAgICAgYXV0byBtZXJnZXIgPSBhZG9wdFJlZigqbmV3IENoYW5uZWxNZXJnZXJO
b2RlKGNvbnRleHQsIG9wdGlvbnMubnVtYmVyT2ZJbnB1dHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ2hhbm5lbFNwbGl0dGVyTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxTcGxpdHRlck5vZGUuY3BwCmluZGV4
IDhkYmRlMmY0OWI1OTk3YTY0YTQ0NzJhMzQ2N2ZjMzU4M2JmMGE1NjUuLjg1ZGUwNjQ2MWQyZDg5
ODczZTc4ZjZkYWYwYzQxYThiNzA5N2ZlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQ2hhbm5lbFNwbGl0dGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJOb2RlLmNwcApAQCAtMzksNyArMzks
NyBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQ2hhbm5lbFNwbGl0dGVyTm9kZSk7CiAK
IEV4Y2VwdGlvbk9yPFJlZjxDaGFubmVsU3BsaXR0ZXJOb2RlPj4gQ2hhbm5lbFNwbGl0dGVyTm9k
ZTo6Y3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IENoYW5uZWxTcGxpdHRl
ck9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMubnVtYmVyT2ZPdXRwdXRzID4g
QXVkaW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5uZWxzKCkgfHwgIW9wdGlvbnMubnVtYmVyT2ZP
dXRwdXRzKQorICAgIGlmIChvcHRpb25zLm51bWJlck9mT3V0cHV0cyA+IEF1ZGlvQ29udGV4dDo6
bWF4TnVtYmVyT2ZDaGFubmVscyB8fCAhb3B0aW9ucy5udW1iZXJPZk91dHB1dHMpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciwgIk51bWJlciBvZiBvdXRwdXRzIGlz
IG5vdCBpbiB0aGUgYWxsb3dlZCByYW5nZSJfcyB9OwogICAgIAogICAgIGF1dG8gc3BsaXR0ZXIg
PSBhZG9wdFJlZigqbmV3IENoYW5uZWxTcGxpdHRlck5vZGUoY29udGV4dCwgb3B0aW9ucy5udW1i
ZXJPZk91dHB1dHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA1ZWZiZmQw
YjQ1Zjc4MDBjYTFlYjBkYjQwNzAyNmZlMDM3NjMyZmZmLi4wOWZkMGMwOGFlYWY1MTQyZDhhMTAx
ZWVjMTdjMzNiMDg3ZDgyNjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC00
Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZSk7CiAKLURlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKEJhc2VBdWRpb0NvbnRleHQm
IGNvbnRleHQsIE9wdGlvbmFsPGZsb2F0PiBzYW1wbGVSYXRlKQorRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlOjpEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0JiBjb250
ZXh0LCBPcHRpb25hbDxmbG9hdD4gc2FtcGxlUmF0ZSkKICAgICA6IEF1ZGlvRGVzdGluYXRpb25O
b2RlKGNvbnRleHQsIHNhbXBsZVJhdGUudmFsdWVPcihBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2Fy
ZVNhbXBsZVJhdGUoKSkpCiB7CiAgICAgQVNTRVJUKEJhc2VBdWRpb0NvbnRleHQ6OmlzU3VwcG9y
dGVkU2FtcGxlUmF0ZShBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKSkpOwpA
QCAtNTgsNiArNTgsMTYgQEAgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+RGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlKCkKICAgICB1bmluaXRpYWxpemUoKTsKIH0KIAorQXVkaW9Db250
ZXh0JiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNvbnRleHQoKQoreworICAgIHJldHVy
biBkb3duY2FzdDxBdWRpb0NvbnRleHQ+KEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjb250ZXh0KCkp
OworfQorCitjb25zdCBBdWRpb0NvbnRleHQmIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvd25jYXN0PEF1ZGlvQ29udGV4dD4oQXVk
aW9EZXN0aW5hdGlvbk5vZGU6OmNvbnRleHQoKSk7Cit9CisKIHZvaWQgRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlOjppbml0aWFsaXplKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Rl
ZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCmluZGV4IDVhODcxNTc3MWUzZTBkZGI1YzE2NDAx
NWIyYWIwMjViZTRmOGVjNDAuLjk0Y2JhZjlhZGU4MDAzOWVjNmM5ODI4MzE1MjcyYjA3OTI5MjEy
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaApAQCAtMjgsMTIgKzI4LDE2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXVkaW9Db250ZXh0OwogY2xhc3MgQXVkaW9EZXN0
aW5hdGlvbjsKICAgICAKIGNsYXNzIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZSBmaW5hbCA6
IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUpOwogcHVibGljOgotICAgIGV4cGxpY2l0IERl
ZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZShCYXNlQXVkaW9Db250ZXh0JiwgT3B0aW9uYWw8Zmxv
YXQ+ID0gV1RGOjpudWxsb3B0KTsKKyAgICBleHBsaWNpdCBEZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGUoQXVkaW9Db250ZXh0JiwgT3B0aW9uYWw8ZmxvYXQ+ID0gV1RGOjpudWxsb3B0KTsKKwor
ICAgIEF1ZGlvQ29udGV4dCYgY29udGV4dCgpOworICAgIGNvbnN0IEF1ZGlvQ29udGV4dCYgY29u
dGV4dCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgfkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAKaW5kZXggM2ViYWYxMmZkYTk1
MjQ3MTk5YThjM2QzODVhNzFiOGI2NGY2N2E1My4uZmU0MGQ2NTA1ZGI1MGJlZWYxYzM4ZjMyNWZj
YWYxZGJmNzFlNDc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcApAQCAtODYsNyAr
ODYsNyBAQCB2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6c2V0Rm9ybWF0KHNpemVf
dCBudW1iZXJPZkNoYW5uZWxzLCBmbG9hdCBzb3VyYwogICAgIG1fbXV0ZWQgPSB3b3VsZFRhaW50
T3JpZ2luKCk7CiAKICAgICBpZiAobnVtYmVyT2ZDaGFubmVscyAhPSBtX3NvdXJjZU51bWJlck9m
Q2hhbm5lbHMgfHwgc291cmNlU2FtcGxlUmF0ZSAhPSBtX3NvdXJjZVNhbXBsZVJhdGUpIHsKLSAg
ICAgICAgaWYgKCFudW1iZXJPZkNoYW5uZWxzIHx8IG51bWJlck9mQ2hhbm5lbHMgPiBBdWRpb0Nv
bnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSB8fCBzb3VyY2VTYW1wbGVSYXRlIDwgbWluU2Ft
cGxlUmF0ZSB8fCBzb3VyY2VTYW1wbGVSYXRlID4gbWF4U2FtcGxlUmF0ZSkgeworICAgICAgICBp
ZiAoIW51bWJlck9mQ2hhbm5lbHMgfHwgbnVtYmVyT2ZDaGFubmVscyA+IEF1ZGlvQ29udGV4dDo6
bWF4TnVtYmVyT2ZDaGFubmVscyB8fCBzb3VyY2VTYW1wbGVSYXRlIDwgbWluU2FtcGxlUmF0ZSB8
fCBzb3VyY2VTYW1wbGVSYXRlID4gbWF4U2FtcGxlUmF0ZSkgewogICAgICAgICAgICAgLy8gcHJv
Y2VzcygpIHdpbGwgZ2VuZXJhdGUgc2lsZW5jZSBmb3IgdGhlc2UgdW5pbml0aWFsaXplZCB2YWx1
ZXMuCiAgICAgICAgICAgICBMT0coTWVkaWEsICJNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6
OnNldEZvcm1hdCgldSwgJWYpIC0gdW5oYW5kbGVkIGZvcm1hdCBjaGFuZ2UiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obnVtYmVyT2ZDaGFubmVscyksIHNvdXJjZVNhbXBsZVJhdGUpOwogICAgICAg
ICAgICAgbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5jcHAKaW5kZXggMGFmY2MxYjFhOGE5NDI1MDFjZDI3ZDc0ZmQ3YmUxZDFkOWU2NTU2My4uYjUz
ZTNjZjgyNTVkMmE3YTZkNTdiZDhhNTdlM2E1NjJkYmM3ODc5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291
cmNlTm9kZS5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBNZWRpYVN0cmVhbUF1ZGlvU291cmNl
Tm9kZTo6c2V0Rm9ybWF0KHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBmbG9hdCBzb3VyY2UKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIHNhbXBsZS1yYXRlIG11c3QgYmUgZXF1YWwgdG8g
dGhlIGNvbnRleHQncyBzYW1wbGUtcmF0ZS4KLSAgICBpZiAoIW51bWJlck9mQ2hhbm5lbHMgfHwg
bnVtYmVyT2ZDaGFubmVscyA+IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscygpKSB7
CisgICAgaWYgKCFudW1iZXJPZkNoYW5uZWxzIHx8IG51bWJlck9mQ2hhbm5lbHMgPiBBdWRpb0Nv
bnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMpIHsKICAgICAgICAgLy8gcHJvY2VzcygpIHdpbGwg
Z2VuZXJhdGUgc2lsZW5jZSBmb3IgdGhlc2UgdW5pbml0aWFsaXplZCB2YWx1ZXMuCiAgICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQoJXUsICVm
KSAtIHVuaGFuZGxlZCBmb3JtYXQgY2hhbmdlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bWJl
ck9mQ2hhbm5lbHMpLCBzb3VyY2VTYW1wbGVSYXRlKTsKICAgICAgICAgbV9zb3VyY2VOdW1iZXJP
ZkNoYW5uZWxzID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuY3BwCmluZGV4IDg0ZDE2YTE1NWY2OTI3NmRiZGQ0OGI3
NWViNzA5YWQ5NWU5MjFiNDAuLmE4MzljODNiNWM2YjczMDE1MjgwZjM1MGMxYzEyZGUyMmEwNmY4
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZs
aW5lQXVkaW9Db250ZXh0LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMSwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMyw3IEBACiAjaW5jbHVkZSAiQXVkaW9VdGls
aXRpZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTQXVkaW9CdWZmZXIu
aCIKKyNpbmNsdWRlICJPZmZsaW5lQXVkaW9Db250ZXh0T3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAKQEAgLTM5LDUz
ICs0MSw2MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChPZmZsaW5lQXVkaW9Db250ZXh0KTsKIAotaW5saW5lIE9mZmxpbmVBdWRpb0NvbnRleHQ6
Ok9mZmxpbmVBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCB1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzLCB1bnNpZ25lZCBsZW5ndGgsIGZsb2F0IHNhbXBsZVJhdGUsIFJlZlB0cjxBdWRp
b0J1ZmZlcj4mJiByZW5kZXJUYXJnZXQpCi0gICAgOiBCYXNlQXVkaW9Db250ZXh0KGRvY3VtZW50
LCBudW1iZXJPZkNoYW5uZWxzLCBzYW1wbGVSYXRlLCBXVEZNb3ZlKHJlbmRlclRhcmdldCkpCi0g
ICAgLCBtX2xlbmd0aChsZW5ndGgpCitPZmZsaW5lQXVkaW9Db250ZXh0OjpPZmZsaW5lQXVkaW9D
b250ZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgT2ZmbGluZUF1ZGlvQ29udGV4dE9wdGlv
bnMmIG9wdGlvbnMpCisgICAgOiBCYXNlQXVkaW9Db250ZXh0KGRvY3VtZW50KQorICAgICwgbV9k
ZXN0aW5hdGlvbk5vZGUobWFrZVVuaXF1ZVJlZjxPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU+
KCp0aGlzLCBvcHRpb25zLm51bWJlck9mQ2hhbm5lbHMsIG9wdGlvbnMuc2FtcGxlUmF0ZSwgQXVk
aW9CdWZmZXI6OmNyZWF0ZShvcHRpb25zLm51bWJlck9mQ2hhbm5lbHMsIG9wdGlvbnMubGVuZ3Ro
LCBvcHRpb25zLnNhbXBsZVJhdGUpKSkKKyAgICAsIG1fbGVuZ3RoKG9wdGlvbnMubGVuZ3RoKQog
eworICAgIGlmICghcmVuZGVyVGFyZ2V0KCkpCisgICAgICAgIGRvY3VtZW50LmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIG1ha2VTdHJp
bmcoIkZhaWxlZCB0byBjb25zdHJ1Y3QgaW50ZXJuYWwgQXVkaW9CdWZmZXIgd2l0aCAiLCBvcHRp
b25zLm51bWJlck9mQ2hhbm5lbHMsICIgY2hhbm5lbChzKSwgYSBzYW1wbGUgcmF0ZSBvZiAiLCBv
cHRpb25zLnNhbXBsZVJhdGUsICIgYW5kIGEgbGVuZ3RoIG9mICIsIG9wdGlvbnMubGVuZ3RoLCAi
LiIpKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPE9mZmxpbmVBdWRpb0NvbnRleHQ+PiBPZmZsaW5l
QXVkaW9Db250ZXh0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgdW5zaWduZWQgbGVuZ3RoLCBmbG9hdCBzYW1wbGVSYXRl
KQorRXhjZXB0aW9uT3I8UmVmPE9mZmxpbmVBdWRpb0NvbnRleHQ+PiBPZmZsaW5lQXVkaW9Db250
ZXh0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgT2ZmbGlu
ZUF1ZGlvQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgaWYgKCFpczxEb2N1bWVudD4o
Y29udGV4dCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciwg
Ik9mZmxpbmVBdWRpb0NvbnRleHQgaXMgb25seSBzdXBwb3J0ZWQgaW4gRG9jdW1lbnQgY29udGV4
dHMiX3MgfTsKLSAgICBpZiAoIW51bWJlck9mQ2hhbm5lbHMgfHwgbnVtYmVyT2ZDaGFubmVscyA+
IG1heE51bWJlck9mQ2hhbm5lbHMoKSkKKyAgICBpZiAoIW9wdGlvbnMubnVtYmVyT2ZDaGFubmVs
cyB8fCBvcHRpb25zLm51bWJlck9mQ2hhbm5lbHMgPiBtYXhOdW1iZXJPZkNoYW5uZWxzKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IsICJOdW1iZXIgb2YgY2hhbm5lbHMg
aXMgbm90IGluIHJhbmdlIl9zIH07Ci0gICAgaWYgKCFsZW5ndGgpCisgICAgaWYgKCFvcHRpb25z
Lmxlbmd0aCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAibGVuZ3Ro
IGNhbm5vdCBiZSAwIl9zIH07Ci0gICAgaWYgKCFpc1N1cHBvcnRlZFNhbXBsZVJhdGUoc2FtcGxl
UmF0ZSkpCisgICAgaWYgKCFpc1N1cHBvcnRlZFNhbXBsZVJhdGUob3B0aW9ucy5zYW1wbGVSYXRl
KSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAic2FtcGxlUmF0ZSBp
cyBub3QgaW4gcmFuZ2UiX3MgfTsKIAotICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0gQXVkaW9CdWZm
ZXI6OmNyZWF0ZShudW1iZXJPZkNoYW5uZWxzLCBsZW5ndGgsIHNhbXBsZVJhdGUpOwotICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQotICAgICAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIG1ha2VTdHJpbmcoIkZhaWxlZCB0
byBjb25zdHJ1Y3QgaW50ZXJuYWwgQXVkaW9CdWZmZXIgd2l0aCAiLCBudW1iZXJPZkNoYW5uZWxz
LCAiIGNoYW5uZWwocyksIGEgc2FtcGxlIHJhdGUgb2YgIiwgc2FtcGxlUmF0ZSwgIiBhbmQgYSBs
ZW5ndGggb2YgIiwgbGVuZ3RoLCAiLiIpKTsKLQotICAgIGF1dG8gYXVkaW9Db250ZXh0ID0gYWRv
cHRSZWYoKm5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0
KSwgbnVtYmVyT2ZDaGFubmVscywgbGVuZ3RoLCBzYW1wbGVSYXRlLCBXVEZNb3ZlKHJlbmRlclRh
cmdldCkpKTsKKyAgICBhdXRvIGF1ZGlvQ29udGV4dCA9IGFkb3B0UmVmKCpuZXcgT2ZmbGluZUF1
ZGlvQ29udGV4dChkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksIG9wdGlvbnMpKTsKICAgICBh
dWRpb0NvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiBhdWRpb0NvbnRleHQ7
CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxPZmZsaW5lQXVkaW9Db250ZXh0Pj4gT2ZmbGluZUF1ZGlv
Q29udGV4dDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE9m
ZmxpbmVBdWRpb0NvbnRleHRPcHRpb25zJiBjb250ZXh0T3B0aW9ucykKK0V4Y2VwdGlvbk9yPFJl
ZjxPZmZsaW5lQXVkaW9Db250ZXh0Pj4gT2ZmbGluZUF1ZGlvQ29udGV4dDo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHVu
c2lnbmVkIGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlKGNv
bnRleHQsIGNvbnRleHRPcHRpb25zLm51bWJlck9mQ2hhbm5lbHMsIGNvbnRleHRPcHRpb25zLmxl
bmd0aCwgY29udGV4dE9wdGlvbnMuc2FtcGxlUmF0ZSk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250
ZXh0LCB7IG51bWJlck9mQ2hhbm5lbHMsIGxlbmd0aCwgc2FtcGxlUmF0ZSB9KTsKIH0KIAogdm9p
ZCBPZmZsaW5lQXVkaW9Db250ZXh0Ojp1bmluaXRpYWxpemUoKQogeworICAgIGlmICghaXNJbml0
aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBCYXNlQXVkaW9Db250ZXh0Ojp1bmlu
aXRpYWxpemUoKTsKIAotICAgIGlmIChhdXRvIHByb21pc2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcGVu
ZGluZ09mZmxpbmVSZW5kZXJpbmdQcm9taXNlLCBudWxscHRyKSkKKyAgICBpZiAoYXV0byBwcm9t
aXNlID0gc3RkOjpleGNoYW5nZShtX3BlbmRpbmdSZW5kZXJpbmdQcm9taXNlLCBudWxscHRyKSkK
ICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAi
Q29udGV4dCBpcyBnb2luZyBhd2F5Il9zIH0pOwogfQogCi12b2lkIE9mZmxpbmVBdWRpb0NvbnRl
eHQ6OnN0YXJ0T2ZmbGluZVJlbmRlcmluZyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Up
Citjb25zdCBjaGFyKiBPZmZsaW5lQXVkaW9Db250ZXh0OjphY3RpdmVET01PYmplY3ROYW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIk9mZmxpbmVBdWRpb0NvbnRleHQiOworfQorCit2b2lkIE9m
ZmxpbmVBdWRpb0NvbnRleHQ6OnN0YXJ0UmVuZGVyaW5nKFJlZjxEZWZlcnJlZFByb21pc2U+JiYg
cHJvbWlzZSkKIHsKICAgICBpZiAoaXNTdG9wcGVkKCkpIHsKICAgICAgICAgcHJvbWlzZS0+cmVq
ZWN0KEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiQ29udGV4dCBpcyBzdG9wcGVkIl9z
IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fZGlkU3RhcnRPZmZsaW5l
UmVuZGVyaW5nKSB7CisgICAgaWYgKG1fZGlkU3RhcnRSZW5kZXJpbmcpIHsKICAgICAgICAgcHJv
bWlzZS0+cmVqZWN0KEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiUmVuZGVyaW5nIHdh
cyBhbHJlYWR5IHN0YXJ0ZWQiX3MgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDQs
MTMgKzExMywxMyBAQCB2b2lkIE9mZmxpbmVBdWRpb0NvbnRleHQ6OnN0YXJ0T2ZmbGluZVJlbmRl
cmluZyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiAgICAgICAgIH0KIAogICAgICAg
ICBzZXRQZW5kaW5nQWN0aXZpdHkoKTsKLSAgICAgICAgbV9wZW5kaW5nT2ZmbGluZVJlbmRlcmlu
Z1Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpOwotICAgICAgICBtX2RpZFN0YXJ0T2ZmbGluZVJl
bmRlcmluZyA9IHRydWU7CisgICAgICAgIG1fcGVuZGluZ1JlbmRlcmluZ1Byb21pc2UgPSBXVEZN
b3ZlKHByb21pc2UpOworICAgICAgICBtX2RpZFN0YXJ0UmVuZGVyaW5nID0gdHJ1ZTsKICAgICAg
ICAgc2V0U3RhdGUoU3RhdGU6OlJ1bm5pbmcpOwogICAgIH0pOwogfQogCi12b2lkIE9mZmxpbmVB
dWRpb0NvbnRleHQ6OnN1c3BlbmRPZmZsaW5lUmVuZGVyaW5nKGRvdWJsZSBzdXNwZW5kVGltZSwg
UmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQordm9pZCBPZmZsaW5lQXVkaW9Db250ZXh0
OjpzdXNwZW5kUmVuZGVyaW5nKGRvdWJsZSBzdXNwZW5kVGltZSwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJiBwcm9taXNlKQogewogICAgIGlmIChpc1N0b3BwZWQoKSkgewogICAgICAgICBwcm9taXNl
LT5yZWplY3QoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJDb250ZXh0IGlzIHN0b3Bw
ZWQiX3MgfSk7CkBAIC0xNDMsOSArMTUyLDkgQEAgdm9pZCBPZmZsaW5lQXVkaW9Db250ZXh0Ojpz
dXNwZW5kT2ZmbGluZVJlbmRlcmluZyhkb3VibGUgc3VzcGVuZFRpbWUsIFJlZjxEZWZlcnIKICAg
ICB9CiB9CiAKLXZvaWQgT2ZmbGluZUF1ZGlvQ29udGV4dDo6cmVzdW1lT2ZmbGluZVJlbmRlcmlu
ZyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit2b2lkIE9mZmxpbmVBdWRpb0NvbnRl
eHQ6OnJlc3VtZVJlbmRlcmluZyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7Ci0g
ICAgaWYgKCFtX2RpZFN0YXJ0T2ZmbGluZVJlbmRlcmluZykgeworICAgIGlmICghbV9kaWRTdGFy
dFJlbmRlcmluZykgewogICAgICAgICBwcm9taXNlLT5yZWplY3QoRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IsICJDYW5ub3QgcmVzdW1lIGFuIG9mZmxpbmUgYXVkaW8gY29udGV4dCB0aGF0
IGhhcyBub3Qgc3RhcnRlZCJfcyB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4Miw3
ICsxOTEsNyBAQCBib29sIE9mZmxpbmVBdWRpb0NvbnRleHQ6OnNob3VsZFN1c3BlbmQoKQogCiB2
b2lkIE9mZmxpbmVBdWRpb0NvbnRleHQ6OmRpZFN1c3BlbmRSZW5kZXJpbmcoc2l6ZV90IGZyYW1l
KQogewotICAgIEJhc2VBdWRpb0NvbnRleHQ6OmRpZFN1c3BlbmRSZW5kZXJpbmcoZnJhbWUpOwor
ICAgIHNldFN0YXRlKFN0YXRlOjpTdXNwZW5kZWQpOwogCiAgICAgY2xlYXJQZW5kaW5nQWN0aXZp
dHkoKTsKIApAQCAtMTk2LDE3ICsyMDUsMzggQEAgdm9pZCBPZmZsaW5lQXVkaW9Db250ZXh0Ojpk
aWRTdXNwZW5kUmVuZGVyaW5nKHNpemVfdCBmcmFtZSkKICAgICAgICAgcHJvbWlzZS0+cmVzb2x2
ZSgpOwogfQogCi12b2lkIE9mZmxpbmVBdWRpb0NvbnRleHQ6OmRpZEZpbmlzaE9mZmxpbmVSZW5k
ZXJpbmcoRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyPj4mJiByZXN1bHQpCit2b2lkIE9mZmxp
bmVBdWRpb0NvbnRleHQ6OmZpbmlzaGVkUmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5nKQogewot
ICAgIGF1dG8gZmluaXNoZWRSZW5kZXJpbmdTY29wZSA9IFdURjo6bWFrZVNjb3BlRXhpdChbdGhp
c10geworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQUxXQVlTX0xPRyhMT0dJREVO
VElGSUVSKTsKKworICAgIGF1dG8gdW5pbml0aWFsaXplT25FeGl0ID0gV1RGOjptYWtlU2NvcGVF
eGl0KFt0aGlzXSB7CiAgICAgICAgIHVuaW5pdGlhbGl6ZSgpOwogICAgICAgICBjbGVhcigpOwog
ICAgIH0pOwogCi0gICAgaWYgKCFtX3BlbmRpbmdPZmZsaW5lUmVuZGVyaW5nUHJvbWlzZSkKKyAg
ICBzZXRTdGF0ZShTdGF0ZTo6Q2xvc2VkKTsKKworICAgIC8vIEF2b2lkIGZpcmluZyB0aGUgZXZl
bnQgaWYgdGhlIGRvY3VtZW50IGhhcyBhbHJlYWR5IGdvbmUgYXdheS4KKyAgICBpZiAoaXNTdG9w
cGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gcmVuZGVy
ZWRCdWZmZXIgPSByZW5kZXJUYXJnZXQoKTsKKyAgICBBU1NFUlQocmVuZGVyZWRCdWZmZXIpOwor
CisgICAgaWYgKGRpZFJlbmRlcmluZykgeworICAgICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZl
bnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok1lZGlhRWxlbWVudCwgT2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50OjpjcmVhdGUoKnJlbmRlcmVkQnVmZmVyKSk7CisgICAgICAgIHNldHRsZVJlbmRlcmlu
Z1Byb21pc2UocmVuZGVyZWRCdWZmZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIHNldHRsZVJlbmRlcmluZ1Byb21pc2UoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IsICJPZmZsaW5lIHJlbmRlcmluZyBmYWlsZWQiX3MgfSk7Cit9CisKK3ZvaWQgT2ZmbGluZUF1
ZGlvQ29udGV4dDo6c2V0dGxlUmVuZGVyaW5nUHJvbWlzZShFeGNlcHRpb25PcjxSZWY8QXVkaW9C
dWZmZXI+PiYmIHJlc3VsdCkKK3sKKyAgICBhdXRvIHByb21pc2UgPSBzdGQ6OmV4Y2hhbmdlKG1f
cGVuZGluZ1JlbmRlcmluZ1Byb21pc2UsIG51bGxwdHIpOworICAgIGlmICghcHJvbWlzZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwcm9taXNlID0gc3RkOjpleGNoYW5nZShtX3BlbmRp
bmdPZmZsaW5lUmVuZGVyaW5nUHJvbWlzZSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgewogICAgICAgICBwcm9taXNlLT5yZWplY3QocmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIyMCw2ICsyNTAsMTMgQEAgdm9pZCBPZmZs
aW5lQXVkaW9Db250ZXh0OjpvZmZsaW5lTG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spCiAgICAg
bG9ja0ludGVybmFsKG11c3RSZWxlYXNlTG9jayk7CiB9CiAKK3ZvaWQgT2ZmbGluZUF1ZGlvQ29u
dGV4dDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCit7CisgICAgQmFzZUF1ZGlvQ29udGV4
dDo6ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkg
PT0gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50SW50ZXJmYWNlVHlwZSkKKyAgICAgICAgY2xl
YXJQZW5kaW5nQWN0aXZpdHkoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmgKaW5kZXggM2RmMDdjYjc1NmFjNzUxN2U4
MjdkNDdiYjQwNjNiZjNjMGIxYzczNi4uZDQxODY1MmE5MzA4ZDQ1ZjZkNmZiZGU1MTViNzZlMzNk
OGEyYTQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZs
aW5lQXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db250ZXh0LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjEsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjkgKzI3LDM1IEBACiAKICNpbmNsdWRlICJCYXNl
QXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKLSNpbmNs
dWRlICJPZmZsaW5lQXVkaW9Db250ZXh0T3B0aW9ucy5oIgogI2luY2x1ZGUgIk9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgT2ZmbGluZUF1ZGlv
Q29udGV4dE9wdGlvbnM7CisKIGNsYXNzIE9mZmxpbmVBdWRpb0NvbnRleHQgZmluYWwgOiBwdWJs
aWMgQmFzZUF1ZGlvQ29udGV4dCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChPZmZsaW5l
QXVkaW9Db250ZXh0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPE9mZmxp
bmVBdWRpb0NvbnRleHQ+PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIHVuc2lnbmVk
IG51bWJlck9mQ2hhbm5lbHMsIHVuc2lnbmVkIGxlbmd0aCwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0g
ICAgCiAgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxPZmZsaW5lQXVkaW9Db250ZXh0Pj4gY3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBPZmZsaW5lQXVkaW9Db250ZXh0T3B0
aW9ucyYpOwotCi0gICAgdm9pZCBzdGFydE9mZmxpbmVSZW5kZXJpbmcoUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7Ci0gICAgdm9pZCBzdXNwZW5kT2ZmbGluZVJlbmRlcmluZyhkb3VibGUgc3VzcGVu
ZFRpbWUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwotICAgIHZvaWQgcmVzdW1lT2ZmbGluZVJl
bmRlcmluZyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8
UmVmPE9mZmxpbmVBdWRpb0NvbnRleHQ+PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHVuc2lnbmVkIGxlbmd0aCwgZmxvYXQgc2FtcGxl
UmF0ZSk7CisgICAgdm9pZCBzdGFydFJlbmRlcmluZyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
KyAgICB2b2lkIHN1c3BlbmRSZW5kZXJpbmcoZG91YmxlIHN1c3BlbmRUaW1lLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmKTsKKyAgICB2b2lkIHJlc3VtZVJlbmRlcmluZyhSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmKTsKKyAgICB2b2lkIGZpbmlzaGVkUmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5nKTsK
KyAgICB2b2lkIGRpZFN1c3BlbmRSZW5kZXJpbmcoc2l6ZV90IGZyYW1lKTsKIAogICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgYm9vbCBzaG91bGRT
dXNwZW5kKCkgZmluYWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kKCk7CisKKyAgICBPZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUmIGRlc3RpbmF0aW9uKCkgZmluYWwgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbk5vZGUuZ2V0KCk7IH0KKyAgICBjb25zdCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUmIGRlc3RpbmF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUu
Z2V0KCk7IH0KIAotICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSYgZGVzdGluYXRpb24o
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUmPihCYXNl
QXVkaW9Db250ZXh0OjpkZXN0aW5hdGlvbigpKTsgfQotICAgIGNvbnN0IE9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZSYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUmPihCYXNlQXVkaW9Db250ZXh0OjpkZXN0
aW5hdGlvbigpKTsgfQorcHJpdmF0ZToKKyAgICBPZmZsaW5lQXVkaW9Db250ZXh0KERvY3VtZW50
JiwgY29uc3QgT2ZmbGluZUF1ZGlvQ29udGV4dE9wdGlvbnMmKTsKKworICAgIEF1ZGlvQnVmZmVy
KiByZW5kZXJUYXJnZXQoKSBjb25zdCB7IHJldHVybiBkZXN0aW5hdGlvbigpLnJlbmRlclRhcmdl
dCgpOyB9CiAKICAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRydWUgaWYgd2UgYWNx
dWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVyIG11c3QgdW5sb2Nr
KCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgogICAgIHZvaWQgb2ZmbGlu
ZUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKTsKQEAgLTcyLDE3ICs3OSwyNSBAQCBwdWJsaWM6
CiAgICAgICAgIGJvb2wgbV9tdXN0UmVsZWFzZUxvY2s7CiAgICAgfTsKIAotcHJpdmF0ZToKLSAg
ICBPZmZsaW5lQXVkaW9Db250ZXh0KERvY3VtZW50JiwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgdW5zaWduZWQgbGVuZ3RoLCBmbG9hdCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXI+
JiYgcmVuZGVyVGFyZ2V0KTsKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICBjb25zdCBjaGFy
KiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRpZEZpbmlz
aE9mZmxpbmVSZW5kZXJpbmcoRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyPj4mJikgZmluYWw7
Ci0gICAgdm9pZCBkaWRTdXNwZW5kUmVuZGVyaW5nKHNpemVfdCBmcmFtZSkgZmluYWw7CisgICAg
Ly8gRXZlbnRUYXJnZXQKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5hbDsKKwor
ICAgIHZvaWQgc2V0dGxlUmVuZGVyaW5nUHJvbWlzZShFeGNlcHRpb25PcjxSZWY8QXVkaW9CdWZm
ZXI+PiYmKTsKICAgICB2b2lkIHVuaW5pdGlhbGl6ZSgpIGZpbmFsOworICAgIGJvb2wgaXNPZmZs
aW5lQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFJlZlB0cjxE
ZWZlcnJlZFByb21pc2U+IG1fcGVuZGluZ09mZmxpbmVSZW5kZXJpbmdQcm9taXNlOworICAgIFVu
aXF1ZVJlZjxPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU+IG1fZGVzdGluYXRpb25Ob2RlOwor
ICAgIFJlZlB0cjxEZWZlcnJlZFByb21pc2U+IG1fcGVuZGluZ1JlbmRlcmluZ1Byb21pc2U7CiAg
ICAgSGFzaE1hcDx1bnNpZ25lZCAvKiBmcmFtZSAqLywgUmVmUHRyPERlZmVycmVkUHJvbWlzZT4s
IFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8dW5zaWduZWQ+PiBtX3N1c3BlbmRSZXF1ZXN0czsKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
LSAgICBib29sIG1fZGlkU3RhcnRPZmZsaW5lUmVuZGVyaW5nIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fZGlkU3RhcnRSZW5kZXJpbmcgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6Ok9mZmxpbmVBdWRp
b0NvbnRleHQpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkJhc2VBdWRp
b0NvbnRleHQmIGNvbnRleHQpIHsgcmV0dXJuIGNvbnRleHQuaXNPZmZsaW5lQ29udGV4dCgpOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmlkbAppbmRleCAyZTIyZGI1
ZGI5NTA0Yzk4ZDVkMzY2NWNkNjY3YjAxMDAwMjFhMzQ3Li5iNmIyZTRlOWEzOWQ5NzJhOTcyYzJm
YmQwNzc0OTg2YzBhY2MwYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC5pZGwKQEAgLTMxLDEwICszMSwxMCBAQAog
ICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBjb25zdHJ1Y3RvcihPZmZsaW5l
QXVkaW9Db250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9ucyk7CiAgICAgW0NhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRdIGNvbnN0cnVjdG9yKHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFu
bmVscywgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGZsb2F0IHNhbXBsZVJhdGUpOwogICAgIAotICAg
IFtJbXBsZW1lbnRlZEFzPXN0YXJ0T2ZmbGluZVJlbmRlcmluZ10gUHJvbWlzZTxBdWRpb0J1ZmZl
cj4gc3RhcnRSZW5kZXJpbmcoKTsKKyAgICBQcm9taXNlPEF1ZGlvQnVmZmVyPiBzdGFydFJlbmRl
cmluZygpOwogCi0gICAgW0ltcGxlbWVudGVkQXM9cmVzdW1lT2ZmbGluZVJlbmRlcmluZ10gUHJv
bWlzZTx1bmRlZmluZWQ+IHJlc3VtZSgpOwotICAgIFtJbXBsZW1lbnRlZEFzPXN1c3BlbmRPZmZs
aW5lUmVuZGVyaW5nXSBQcm9taXNlPHVuZGVmaW5lZD4gc3VzcGVuZChkb3VibGUgc3VzcGVuZFRp
bWUpOworICAgIFtJbXBsZW1lbnRlZEFzPXJlc3VtZVJlbmRlcmluZ10gUHJvbWlzZTx1bmRlZmlu
ZWQ+IHJlc3VtZSgpOworICAgIFtJbXBsZW1lbnRlZEFzPXN1c3BlbmRSZW5kZXJpbmddIFByb21p
c2U8dW5kZWZpbmVkPiBzdXNwZW5kKGRvdWJsZSBzdXNwZW5kVGltZSk7CiAKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcAppbmRleCA0ZDhkNWE4ZDlmNmY4MmM0NjNlNjgwMWQ2NzU4YzEyN2Y4Mzc1Y2FmLi41
ZWY4NmFmY2Q4MWRlNGZhODE4NWI0MzIwMGYxMTQ0MGYwY2NkMzRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQXVkaW9Xb3JrbGV0
LmgiCiAjaW5jbHVkZSAiQXVkaW9Xb3JrbGV0TWVzc2FnaW5nUHJveHkuaCIKICNpbmNsdWRlICJI
UlRGRGF0YWJhc2VMb2FkZXIuaCIKKyNpbmNsdWRlICJPZmZsaW5lQXVkaW9Db250ZXh0LmgiCiAj
aW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtNDQsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChPZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUpOwogCi1PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXI+JiYgcmVuZGVy
VGFyZ2V0KQorT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUoT2ZmbGluZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyPiYmIHJlbmRlclRh
cmdldCkKICAgICA6IEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCiAg
ICAgLCBtX251bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscykKICAgICAsIG1fcmVuZGVy
VGFyZ2V0KFdURk1vdmUocmVuZGVyVGFyZ2V0KSkKQEAgLTU5LDYgKzYwLDE2IEBAIE9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6fk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSgpCiAgICAg
dW5pbml0aWFsaXplKCk7CiB9CiAKK09mZmxpbmVBdWRpb0NvbnRleHQmIE9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZTo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIGRvd25jYXN0PE9mZmxpbmVB
dWRpb0NvbnRleHQ+KEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjb250ZXh0KCkpOworfQorCitjb25z
dCBPZmZsaW5lQXVkaW9Db250ZXh0JiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBkb3duY2FzdDxPZmZsaW5lQXVkaW9Db250ZXh0PihB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y29udGV4dCgpKTsKK30KKwogdW5zaWduZWQgT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlOjptYXhDaGFubmVsQ291bnQoKSBjb25zdAogewogICAgIHJldHVy
biBtX251bWJlck9mQ2hhbm5lbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRleCAzYjA0
MmNkMDZiMWJhMTc2ZWM3MDg5MjMyZmJhMmNhNDljM2ZmMGRkLi5iYmNhYmFhMGFhNWMwOWNjNzU4
ZmNiZjIyNmI5MmI3NzM4NjNlNmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAgLTMz
LDEzICszMywxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlvQnVzOwogY2xh
c3MgQXVkaW9Db250ZXh0OworY2xhc3MgT2ZmbGluZUF1ZGlvQ29udGV4dDsKICAgICAKIGNsYXNz
IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0
aW9uTm9kZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChPZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUpOwogcHVibGljOgotICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZShCYXNl
QXVkaW9Db250ZXh0JiwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0
ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyPiYmIHJlbmRlclRhcmdldCk7CisgICAgT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlKE9mZmxpbmVBdWRpb0NvbnRleHQmLCB1bnNpZ25lZCBudW1iZXJPZkNo
YW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXI+JiYgcmVuZGVyVGFy
Z2V0KTsKIAogICAgIHZpcnR1YWwgfk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSgpOworCisg
ICAgT2ZmbGluZUF1ZGlvQ29udGV4dCYgY29udGV4dCgpOworICAgIGNvbnN0IE9mZmxpbmVBdWRp
b0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKworICAgIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclRhcmdldC5nZXQoKTsgfQogICAgIAogICAgIC8v
IEF1ZGlvTm9kZSAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5j
cHAKaW5kZXggZjNlNDVlNzc4MDdlMGQ4YWQzY2ZlY2IxY2FmNGU4Y2I3OGU0ZmQzYS4uMjU2MWZm
YTg1NTE2YTM5ODYxZGUwZjI4ZDBjN2Y2ZjkwYTJjMDFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuY3BwCkBAIC02
Miw3ICs2Miw3IEBAIFNjcmlwdFByb2Nlc3Nvck5vZGU6OlNjcmlwdFByb2Nlc3Nvck5vZGUoQmFz
ZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgc2l6ZV90IGJ1ZmZlCiAgICAgaWYgKG1fYnVmZmVyU2l6
ZSA8IEF1ZGlvVXRpbGl0aWVzOjpyZW5kZXJRdWFudHVtU2l6ZSkKICAgICAgICAgbV9idWZmZXJT
aXplID0gQXVkaW9VdGlsaXRpZXM6OnJlbmRlclF1YW50dW1TaXplOwogCi0gICAgQVNTRVJUKG51
bWJlck9mSW5wdXRDaGFubmVscyA8PSBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMo
KSk7CisgICAgQVNTRVJUKG51bWJlck9mSW5wdXRDaGFubmVscyA8PSBBdWRpb0NvbnRleHQ6Om1h
eE51bWJlck9mQ2hhbm5lbHMpOwogCiAgICAgaW5pdGlhbGl6ZURlZmF1bHROb2RlT3B0aW9ucyhu
dW1iZXJPZklucHV0Q2hhbm5lbHMsIENoYW5uZWxDb3VudE1vZGU6OkV4cGxpY2l0LCBDaGFubmVs
SW50ZXJwcmV0YXRpb246OlNwZWFrZXJzKTsKICAgICBhZGRJbnB1dCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>