<?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>204041</bug_id>
          
          <creation_ts>2019-11-08 19:30:19 -0800</creation_ts>
          <short_desc>Move style adjustment code out of StyleResolver and into a class of its own</short_desc>
          <delta_ts>2019-11-11 17:02:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1588958</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-08 19:30:19 -0800</bug_when>
    <thetext>Introduce Style::Adjuster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588960</commentid>
    <comment_count>1</comment_count>
      <attachid>383199</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-08 19:31:19 -0800</bug_when>
    <thetext>Created attachment 383199
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588965</commentid>
    <comment_count>2</comment_count>
      <attachid>383200</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-08 20:10:29 -0800</bug_when>
    <thetext>Created attachment 383200
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589011</commentid>
    <comment_count>3</comment_count>
      <attachid>383217</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-09 07:43:16 -0800</bug_when>
    <thetext>Created attachment 383217
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589018</commentid>
    <comment_count>4</comment_count>
      <attachid>383217</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-09 09:09:10 -0800</bug_when>
    <thetext>Comment on attachment 383217
patch

Clearing flags on attachment: 383217

Committed r252308: &lt;https://trac.webkit.org/changeset/252308&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589019</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-09 09:09:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589389</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-11 17:02:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/57099478&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383199</attachid>
            <date>2019-11-08 19:31:19 -0800</date>
            <delta_ts>2019-11-08 20:10:29 -0800</delta_ts>
            <desc>wip</desc>
            <filename>style-adjuster-2.patch</filename>
            <type>text/plain</type>
            <size>108487</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggOWM2MzliYzU1YjQuLjI2ODEyYWU4OTk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dApAQCAtMjM0OSw2ICsyMzQ5LDcgQEAgc3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCiBz
dHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCiBzdHlsZS9NYXRjaGVkRGVjbGFyYXRpb25zQ2Fj
aGUuY3BwCiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCitzdHlsZS9TdHlsZUFkanVzdGVyLmNw
cAogc3R5bGUvU3R5bGVCdWlsZGVyLmNwcAogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCiBz
dHlsZS9TdHlsZUNoYW5nZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyY2U1YTk3M2Q3MC4uNmVhMzQ4MTIxNTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQ4MTYsNiArNDgxNiw3IEBACiAJCUU0NEZBMTg1MUJDQTZCNUEwMDkxQjZFRiAvKiBDb21wb3Nl
ZFRyZWVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ0RkExODQxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmgg
Ki87IH07CiAJCUU0NTMyMkFDMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzMjJBQTE0MENF
MjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oICovOyB9OwogCQlFNDVCQTZBQTIzNzQ5MjZD
MDA0REZDMDcgLyogTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDVCQTZBODIzNzQ5MjZCMDA0REZDMDcgLyog
TWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmggKi87IH07CisJCUU0NUJBNkI2MjM3NjIyQTMwMDRE
RkMwNyAvKiBTdHlsZUFkanVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDVCQTZCNTIzNzYyMjlGMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5o
ICovOyB9OwogCQlFNDYwNUZFQzIxNjY0ODA5MDBFNTMwNDYgLyogUHJld2FybUluZm9ybWF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYwNUZF
QTIxNjY0ODA4MDBFNTMwNDYgLyogUHJld2FybUluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ2MTgwMkQxQzhERDI5MDAwMjZD
MDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMu
aCAqLzsgfTsKIAkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjFENjVFMUJCMEM4
MEQwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1MTQxLDYgKzE1MTQyLDggQEAKIAkJRTQ1MzkwQUQwRUFG
RjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTeXN0ZW1NZW1vcnlJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDVCQTZBODIzNzQ5MjZCMDA0REZDMDcgLyogTWF0Y2hlZERlY2xhcmF0aW9u
c0NhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGNoZWREZWNsYXJh
dGlvbnNDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDVCQTZBQjIzNzQ5
MjdCMDA0REZDMDcgLyogTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUU0NUJBNkIyMjM3NjIyN0UwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlQWRqdXN0ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDVCQTZCNTIzNzYyMjlGMDA0REZDMDcgLyog
U3R5bGVBZGp1c3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUFk
anVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjA1RkVBMjE2NjQ4MDgw
MEU1MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJld2FybUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlv
bnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY5OTgsNiArMjcwMDEsOCBA
QAogCQkJCUU0NUJBNkE4MjM3NDkyNkIwMDRERkMwNyAvKiBNYXRjaGVkRGVjbGFyYXRpb25zQ2Fj
aGUuaCAqLywKIAkJCQlFNEFCQUJFNTIzNjFBMzQyMDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRl
LmNwcCAqLywKIAkJCQlFNEFCQUJFMjIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRl
LmggKi8sCisJCQkJRTQ1QkE2QjIyMzc2MjI3RTAwNERGQzA3IC8qIFN0eWxlQWRqdXN0ZXIuY3Bw
ICovLAorCQkJCUU0NUJBNkI1MjM3NjIyOUYwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmggKi8s
CiAJCQkJRTRBQkFDMDcyMzZCMDE4MTAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5jcHAgKi8sCiAJ
CQkJRTRBQkFDMDUyMzZCMDE2QzAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5oICovLAogCQkJCTgz
Qjk2ODc5MTlGOEFCODMwMDRFRjdBRiAvKiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCAqLywKQEAg
LTI5MjQyLDYgKzI5MjQ3LDcgQEAKIAkJCQk1NzIxQTk4QjFFQ0U1NzA0MDA4MTI5NUEgLyogQ3J5
cHRvQWxnb3JpdGhtUnNhUHNzUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJEMzMxQTE4
MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxMjVGODJDMTgyMkNGRUMwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1TSEExLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcgLyog
U3R5bGVBZGp1c3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5QUMzRUYxODI0REM3OTAwMzQ5
NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTIyNC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5QUMz
RjExODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTI1Ni5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTE5QUMzRjMxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTM4
NC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXgg
NmRjYTkwMjBiMjkuLmY0MTNmNzJhMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCkBAIC00NSwzNyArNDUsMjUgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxUYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUg
Ik1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJQYWdlUnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIlBhaXIuaCIKLSNpbmNsdWRl
ICJRdWlya3MuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJ1bGVTZXQuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdE
b2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNoYXJl
ZFN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJTdHlsZUFkanVzdGVyLmgiCiAjaW5jbHVkZSAiU3R5
bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIlN0eWxlUHJvcGVydGllcy5oIgpAQCAtODcsNyArNzUsNiBAQAogI2luY2x1ZGUgIlZpZXdw
b3J0U3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKLSNpbmNsdWRlIDxiaXRzZXQ+CiAjaW5jbHVk
ZSA8d3RmL1NlY29uZHMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjc1LDggKzI2Miw4IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVu
ZGVyCiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgp
LCBlbGVtZW50KTsKIAotICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5
IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJl
bmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqc3RhdGUucGFyZW50U3R5bGUoKSwgcGFyZW50Qm94
U3R5bGUsICZlbGVtZW50LCBzdGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoKSk7CisgICAg
U3R5bGU6OkFkanVzdGVyIGFkanVzdGVyKGRvY3VtZW50KCksICpzdGF0ZS5wYXJlbnRTdHlsZSgp
LCBwYXJlbnRCb3hTdHlsZSwgJmVsZW1lbnQpOworICAgIGFkanVzdGVyLmFkanVzdCgqc3RhdGUu
c3R5bGUoKSwgc3RhdGUudXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkpOwogCiAgICAgaWYgKHN0
YXRlLnN0eWxlKCktPmhhc1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgZG9jdW1lbnQoKS5zZXRI
YXNTdHlsZVdpdGhWaWV3cG9ydFVuaXRzKCk7CkBAIC0zMDQsNyArMjkxLDggQEAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0
IFJlbmRlclN0eWxlKgogICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIHJlc3VsdCwg
eyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IgfSk7CiAgICAgYnVpbGRlci5hcHBseUFsbFBy
b3BlcnRpZXMoKTsKIAotICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqc3Rh
dGUucGFyZW50U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0ciwgc3RhdGUudXNlckFnZW50QXBwZWFy
YW5jZVN0eWxlKCkpOworICAgIFN0eWxlOjpBZGp1c3RlciBhZGp1c3Rlcihkb2N1bWVudCgpLCAq
c3RhdGUucGFyZW50U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgYWRqdXN0ZXIuYWRq
dXN0KCpzdGF0ZS5zdHlsZSgpLCBzdGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoKSk7CiAK
ICAgICAvLyBBZGQgYWxsIHRoZSBhbmltYXRpbmcgcHJvcGVydGllcyB0byB0aGUga2V5ZnJhbWUu
CiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkucHJv
cGVydHlDb3VudCgpOwpAQCAtNDU5LDggKzQ0Nyw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQm
CiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpLCBl
bGVtZW50KTsKIAotICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFu
ZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRl
clN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqbV9zdGF0ZS5wYXJlbnRTdHlsZSgpLCBwYXJlbnRCb3hT
dHlsZSwgbnVsbHB0ciwgc3RhdGUudXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkpOworICAgIFN0
eWxlOjpBZGp1c3RlciBhZGp1c3Rlcihkb2N1bWVudCgpLCAqc3RhdGUucGFyZW50U3R5bGUoKSwg
cGFyZW50Qm94U3R5bGUsIG51bGxwdHIpOworICAgIGFkanVzdGVyLmFkanVzdCgqc3RhdGUuc3R5
bGUoKSwgc3RhdGUudXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkpOwogCiAgICAgaWYgKHN0YXRl
LnN0eWxlKCktPmhhc1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgZG9jdW1lbnQoKS5zZXRIYXNT
dHlsZVdpdGhWaWV3cG9ydFVuaXRzKCk7CkBAIC01MDMsNTQ4ICs0OTEsNiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQo
KQogICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRJ
bnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICAvLyBJbnRyaW5zaWMg
bWFyZ2luIHZhbHVlLgotICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJnaW4gPSBjbGFtcFRvSW50
ZWdlcigyICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKLQotICAgIC8vIEZJWE1FOiBVc2luZyB3
aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4
LXdpZHRoIGlzIGZsYXdlZC4KLSAgICAvLyBGSVhNRTogVXNpbmcgImhhc1F1aXJrIiB0byBkZWNp
ZGUgdGhlIG1hcmdpbiB3YXNuJ3Qgc2V0IGlzIGtpbmQgb2YgbGFtZS4KLSAgICBpZiAoc3R5bGUu
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5tYXJnaW5M
ZWZ0KCkuaGFzUXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLnNldE1hcmdpbkxlZnQoTGVuZ3Ro
KGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKLSAgICAgICAgaWYgKHN0eWxlLm1hcmdpblJpZ2h0
KCkuaGFzUXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLnNldE1hcmdpblJpZ2h0KExlbmd0aChp
bnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLmhlaWdodCgp
LmlzQXV0bygpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5tYXJnaW5Ub3AoKS5oYXNRdWlyaygpKQot
ICAgICAgICAgICAgc3R5bGUuc2V0TWFyZ2luVG9wKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZp
eGVkKSk7Ci0gICAgICAgIGlmIChzdHlsZS5tYXJnaW5Cb3R0b20oKS5oYXNRdWlyaygpKQotICAg
ICAgICAgICAgc3R5bGUuc2V0TWFyZ2luQm90dG9tKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZp
eGVkKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgRGlzcGxheVR5cGUgZXF1aXZhbGVudEJsb2NrRGlz
cGxheShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkK
LXsKLSAgICBzd2l0Y2ggKGF1dG8gZGlzcGxheSA9IHN0eWxlLmRpc3BsYXkoKSkgewotICAgIGNh
c2UgRGlzcGxheVR5cGU6OkJsb2NrOgotICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlOgotICAg
IGNhc2UgRGlzcGxheVR5cGU6OkJveDoKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpGbGV4OgotICAg
IGNhc2UgRGlzcGxheVR5cGU6OldlYktpdEZsZXg6Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6R3Jp
ZDoKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpGbG93Um9vdDoKLSAgICAgICAgcmV0dXJuIGRpc3Bs
YXk7Ci0KLSAgICBjYXNlIERpc3BsYXlUeXBlOjpMaXN0SXRlbToKLSAgICAgICAgLy8gSXQgaXMg
YSBXaW5JRSBidWcgdGhhdCBmbG9hdGVkIGxpc3QgaXRlbXMgbG9zZSB0aGVpciBidWxsZXRzLCBz
byB3ZSdsbCBlbXVsYXRlIHRoZSBxdWlyaywgYnV0IG9ubHkgaW4gcXVpcmtzIG1vZGUuCi0gICAg
ICAgIGlmIChkb2N1bWVudC5pblF1aXJrc01vZGUoKSAmJiBzdHlsZS5pc0Zsb2F0aW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm4gRGlzcGxheVR5cGU6OkJsb2NrOwotICAgICAgICByZXR1cm4gZGlz
cGxheTsKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZToKLSAgICAgICAgcmV0dXJu
IERpc3BsYXlUeXBlOjpUYWJsZTsKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpJbmxpbmVCb3g6Ci0g
ICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6Qm94OwotICAgIGNhc2UgRGlzcGxheVR5cGU6Oklu
bGluZUZsZXg6Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6V2ViS2l0SW5saW5lRmxleDoKLSAgICAg
ICAgcmV0dXJuIERpc3BsYXlUeXBlOjpGbGV4OwotICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGlu
ZUdyaWQ6Ci0gICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6R3JpZDsKLQotICAgIGNhc2UgRGlz
cGxheVR5cGU6OklubGluZToKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpDb21wYWN0OgotICAgIGNh
c2UgRGlzcGxheVR5cGU6OklubGluZUJsb2NrOgotICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxl
Um93R3JvdXA6Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cDoKLSAgICBj
YXNlIERpc3BsYXlUeXBlOjpUYWJsZUZvb3Rlckdyb3VwOgotICAgIGNhc2UgRGlzcGxheVR5cGU6
OlRhYmxlUm93OgotICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlQ29sdW1uR3JvdXA6Ci0gICAg
Y2FzZSBEaXNwbGF5VHlwZTo6VGFibGVDb2x1bW46Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFi
bGVDZWxsOgotICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlQ2FwdGlvbjoKLSAgICAgICAgcmV0
dXJuIERpc3BsYXlUeXBlOjpCbG9jazsKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpDb250ZW50czoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBEaXNwbGF5VHlw
ZTo6Q29udGVudHM7Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6Tm9uZToKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6Tm9uZTsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIERpc3BsYXlUeXBlOjpCbG9j
azsKLX0KLQotLy8gQ1NTIHJlcXVpcmVzIHRleHQtZGVjb3JhdGlvbiB0byBiZSByZXNldCBhdCBl
YWNoIERPTSBlbGVtZW50IGZvciB0YWJsZXMsIAotLy8gaW5saW5lIGJsb2NrcywgaW5saW5lIHRh
Ymxlcywgc2hhZG93IERPTSBjcm9zc2luZ3MsIGZsb2F0aW5nIGVsZW1lbnRzLAotLy8gYW5kIGFi
c29sdXRlIG9yIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cy4KLXN0YXRpYyBib29sIGRv
ZXNOb3RJbmhlcml0VGV4dERlY29yYXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIHJldHVybiBzdHlsZS5kaXNwbGF5KCkgPT0gRGlz
cGxheVR5cGU6OlRhYmxlIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5l
VGFibGUKLSAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVC
bG9jayB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJveCB8fCAoZWxl
bWVudCAmJiBpc0F0U2hhZG93Qm91bmRhcnkoKmVsZW1lbnQpKQotICAgICAgICB8fCBzdHlsZS5p
c0Zsb2F0aW5nKCkgfHwgc3R5bGUuaGFzT3V0T2ZGbG93UG9zaXRpb24oKTsKLX0KLQotI2lmIEVO
QUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpIHx8IEVOQUJMRShQT0lOVEVSX0VWRU5UUykK
LXN0YXRpYyBib29sIGlzU2Nyb2xsYWJsZU92ZXJmbG93KE92ZXJmbG93IG92ZXJmbG93KQotewot
ICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IG92ZXJmbG93ID09IE92
ZXJmbG93OjpBdXRvOwotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGhhc0VmZmVjdGl2ZURpc3Bs
YXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAg
Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1kaXNwbGF5LTMvI3VuYm94LWh0bWwKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gdGFnTmFtZXMgPSBb
XSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBIVE1MUXVhbGlmaWVkTmFtZSogY29uc3QgdGFnTGlz
dFtdID0gewotICAgICAgICAgICAgJmJyVGFnLmdldCgpLAotICAgICAgICAgICAgJndiclRhZy5n
ZXQoKSwKLSAgICAgICAgICAgICZtZXRlclRhZy5nZXQoKSwKLSAgICAgICAgICAgICZhcHBsZXRU
YWcuZ2V0KCksCi0gICAgICAgICAgICAmcHJvZ3Jlc3NUYWcuZ2V0KCksCi0gICAgICAgICAgICAm
Y2FudmFzVGFnLmdldCgpLAotICAgICAgICAgICAgJmVtYmVkVGFnLmdldCgpLAotICAgICAgICAg
ICAgJm9iamVjdFRhZy5nZXQoKSwKLSAgICAgICAgICAgICZhdWRpb1RhZy5nZXQoKSwKLSAgICAg
ICAgICAgICZpZnJhbWVUYWcuZ2V0KCksCi0gICAgICAgICAgICAmaW1nVGFnLmdldCgpLAotICAg
ICAgICAgICAgJnZpZGVvVGFnLmdldCgpLAotICAgICAgICAgICAgJmZyYW1lVGFnLmdldCgpLAot
ICAgICAgICAgICAgJmZyYW1lc2V0VGFnLmdldCgpLAotICAgICAgICAgICAgJmlucHV0VGFnLmdl
dCgpLAotICAgICAgICAgICAgJnRleHRhcmVhVGFnLmdldCgpLAotICAgICAgICAgICAgJnNlbGVj
dFRhZy5nZXQoKSwKLSAgICAgICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7
Ci0gICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHRhZ0xpc3QpCi0gICAgICAgICAgICBzZXQuYWRk
KG5hbWUtPmxvY2FsTmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9KCk7Ci0KLSAg
ICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtc3ZnCi0g
ICAgLy8gRklYTUU6IDxnPiwgPHVzZT4gYW5kIDx0c3Bhbj4gaGF2ZSBzcGVjaWFsICg/KSBiZWhh
dmlvciBmb3IgZGlzcGxheTpjb250ZW50cyBpbiB0aGUgY3VycmVudCBkcmFmdCBzcGVjLgotICAg
IGlmIChpczxTVkdFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jaWYg
RU5BQkxFKE1BVEhNTCkKLSAgICAvLyBOb3Qgc3VyZSBNYXRoTUwgY29kZSBjYW4gaGFuZGxlIGl0
LgotICAgIGlmIChpczxNYXRoTUxFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0jZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihl
bGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0YWdOYW1lcy5nZXQo
KS5jb250YWlucyhlbGVtZW50LmxvY2FsTmFtZSgpKTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0
RGlzcGxheUNvbnRlbnRzU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBl
bGVtZW50KQotewotICAgIGJvb2wgZGlzcGxheUNvbnRlbnRzRW5hYmxlZCA9IGlzPEhUTUxTbG90
RWxlbWVudD4oZWxlbWVudCkgfHwgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5kaXNwbGF5Q29udGVudHNFbmFibGVkKCk7Ci0gICAgaWYgKCFkaXNwbGF5Q29udGVudHNF
bmFibGVkKSB7Ci0gICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6OklubGluZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGlm
IChzdHlsZS5zdHlsZVR5cGUoKSAhPSBQc2V1ZG9JZDo6QmVmb3JlICYmIHN0eWxlLnN0eWxlVHlw
ZSgpICE9IFBzZXVkb0lkOjpBZnRlcikKLSAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlz
cGxheVR5cGU6Ok5vbmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChlbGVtZW50
LT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpID09IGVsZW1lbnQpIHsKLSAgICAgICAgc3R5
bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6QmxvY2spOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChoYXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cygqZWxl
bWVudCkpCi0gICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6Ok5vbmUpOwotfQot
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFNWR0VsZW1lbnRTdHlsZShjb25zdCBTVkdFbGVt
ZW50JiBzdmdFbGVtZW50LCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgLy8gT25seSB0aGUg
cm9vdCA8c3ZnPiBlbGVtZW50IGluIGFuIFNWRyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9y
cyBjc3MgcG9zaXRpb24KLSAgICBhdXRvIGlzUG9zaXRpb25pbmdBbGxvd2VkID0gc3ZnRWxlbWVu
dC5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpICYmIHN2Z0VsZW1lbnQucGFyZW50Tm9kZSgp
ICYmICFzdmdFbGVtZW50LnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXN2Z0VsZW1l
bnQuY29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKLSAgICBpZiAoIWlzUG9zaXRpb25pbmdBbGxvd2Vk
KQotICAgICAgICBzdHlsZS5zZXRQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0aW9u
KCkpOwotCi0gICAgLy8gUmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRoZSB3aG9s
ZSBTVkcgc3VidHJlZSwgc28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAotICAgIC8vIG5v
dCBiZSBzY2FsZWQgYWdhaW4uCi0gICAgaWYgKHN2Z0VsZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1l
czo6Zm9yZWlnbk9iamVjdFRhZykpCi0gICAgICAgIHN0eWxlLnNldEVmZmVjdGl2ZVpvb20oUmVu
ZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotCi0gICAgLy8gU1ZHIHRleHQgbGF5b3V0IGNvZGUg
ZXhwZWN0cyB1cyB0byBiZSBhIGJsb2NrLWxldmVsIHN0eWxlIGVsZW1lbnQuCi0gICAgaWYgKChz
dmdFbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcpIHx8IHN2Z0Vs
ZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFRhZykpICYmIHN0eWxlLmlzRGlzcGxheUlu
bGluZVR5cGUoKSkKLSAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6QmxvY2sp
OwotfQotCi0jaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQotc3RhdGljIE9wdGlvblNldDxUb3Vj
aEFjdGlvbj4gY29tcHV0ZUVmZmVjdGl2ZVRvdWNoQWN0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIE9wdGlvblNldDxUb3VjaEFjdGlvbj4gZWZmZWN0aXZlVG91Y2hBY3Rpb25zKQotewot
ICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9wb2ludGVyZXZlbnRzLyNkZXRlcm1pbmluZy1z
dXBwb3J0ZWQtdG91Y2gtYmVoYXZpb3IKLSAgICAvLyAiQSB0b3VjaCBiZWhhdmlvciBpcyBzdXBw
b3J0ZWQgaWYgaXQgY29uZm9ybXMgdG8gdGhlIHRvdWNoLWFjdGlvbiBwcm9wZXJ0eSBvZiBlYWNo
IGVsZW1lbnQgYmV0d2VlbgotICAgIC8vIHRoZSBoaXQgdGVzdGVkIGVsZW1lbnQgYW5kIGl0cyBu
ZWFyZXN0IGFuY2VzdG9yIHdpdGggdGhlIGRlZmF1bHQgdG91Y2ggYmVoYXZpb3IgKGluY2x1ZGlu
ZyBib3RoIHRoZQotICAgIC8vIGhpdCB0ZXN0ZWQgZWxlbWVudCBhbmQgdGhlIGVsZW1lbnQgd2l0
aCB0aGUgZGVmYXVsdCB0b3VjaCBiZWhhdmlvcikuIgotCi0gICAgYm9vbCBoYXNEZWZhdWx0VG91
Y2hCZWhhdmlvciA9IGlzU2Nyb2xsYWJsZU92ZXJmbG93KHN0eWxlLm92ZXJmbG93WCgpKSB8fCBp
c1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS5vdmVyZmxvd1koKSk7Ci0gICAgaWYgKGhhc0RlZmF1
bHRUb3VjaEJlaGF2aW9yKQotICAgICAgICBlZmZlY3RpdmVUb3VjaEFjdGlvbnMgPSBSZW5kZXJT
dHlsZTo6aW5pdGlhbFRvdWNoQWN0aW9ucygpOwotCi0gICAgYXV0byB0b3VjaEFjdGlvbnMgPSBz
dHlsZS50b3VjaEFjdGlvbnMoKTsKLSAgICBpZiAodG91Y2hBY3Rpb25zID09IFJlbmRlclN0eWxl
Ojppbml0aWFsVG91Y2hBY3Rpb25zKCkpCi0gICAgICAgIHJldHVybiBlZmZlY3RpdmVUb3VjaEFj
dGlvbnM7Ci0KLSAgICBpZiAoZWZmZWN0aXZlVG91Y2hBY3Rpb25zLmNvbnRhaW5zKFRvdWNoQWN0
aW9uOjpOb25lKSkKLSAgICAgICAgcmV0dXJuIHsgVG91Y2hBY3Rpb246Ok5vbmUgfTsKLQotICAg
IGlmIChlZmZlY3RpdmVUb3VjaEFjdGlvbnMuY29udGFpbnNBbnkoeyBUb3VjaEFjdGlvbjo6QXV0
bywgVG91Y2hBY3Rpb246Ok1hbmlwdWxhdGlvbiB9KSkKLSAgICAgICAgcmV0dXJuIHRvdWNoQWN0
aW9uczsKLQotICAgIGlmICh0b3VjaEFjdGlvbnMuY29udGFpbnNBbnkoeyBUb3VjaEFjdGlvbjo6
QXV0bywgVG91Y2hBY3Rpb246Ok1hbmlwdWxhdGlvbiB9KSkKLSAgICAgICAgcmV0dXJuIGVmZmVj
dGl2ZVRvdWNoQWN0aW9uczsKLQotICAgIGF1dG8gc2hhcmVkVG91Y2hBY3Rpb25zID0gZWZmZWN0
aXZlVG91Y2hBY3Rpb25zICYgdG91Y2hBY3Rpb25zOwotICAgIGlmIChzaGFyZWRUb3VjaEFjdGlv
bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4geyBUb3VjaEFjdGlvbjo6Tm9uZSB9OwotCi0g
ICAgcmV0dXJuIHNoYXJlZFRvdWNoQWN0aW9uczsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFRF
WFRfQVVUT1NJWklORykKLXN0YXRpYyBib29sIGhhc1RleHRDaGlsZChjb25zdCBFbGVtZW50JiBl
bGVtZW50KQotewotICAgIGZvciAoYXV0byogY2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFRl
eHQ+KGNoaWxkKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGVGb3JUZXh0
QXV0b3NpemluZyhSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17
Ci0gICAgaWYgKCFzZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nRW5hYmxlZCgpIHx8ICFzZXR0aW5n
cygpLnRleHRBdXRvc2l6aW5nVXNlc0lkZW1wb3RlbnRNb2RlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEF1dG9zaXplU3RhdHVzOjp1cGRhdGVTdGF0dXMoc3R5bGUpOwotICAgIGlm
IChzdHlsZS50ZXh0U2l6ZUFkanVzdCgpLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBmbG9hdCBpbml0aWFsU2NhbGUgPSBkb2N1bWVudCgpLnBhZ2UoKSA/IGRvY3VtZW50
KCkucGFnZSgpLT5pbml0aWFsU2NhbGUoKSA6IDE7Ci0gICAgYXV0byBhZGp1c3RMaW5lSGVpZ2h0
SWZOZWVkZWQgPSBbJl0oYXV0byBjb21wdXRlZEZvbnRTaXplKSB7Ci0gICAgICAgIGF1dG8gbGlu
ZUhlaWdodCA9IHN0eWxlLnNwZWNpZmllZExpbmVIZWlnaHQoKTsKLSAgICAgICAgY29uc3RleHBy
IHN0YXRpYyB1bnNpZ25lZCBlbGlnaWJsZUZvbnRTaXplID0gMTI7Ci0gICAgICAgIGlmIChjb21w
dXRlZEZvbnRTaXplICogaW5pdGlhbFNjYWxlID49IGVsaWdpYmxlRm9udFNpemUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgY29uc3RleHByIHN0YXRpYyBmbG9hdCBib29zdEZhY3Rv
ciA9IDEuMjU7Ci0gICAgICAgIGF1dG8gbWluaW11bUxpbmVIZWlnaHQgPSBib29zdEZhY3RvciAq
IGNvbXB1dGVkRm9udFNpemU7Ci0gICAgICAgIGlmICghbGluZUhlaWdodC5pc0ZpeGVkKCkgfHwg
bGluZUhlaWdodC52YWx1ZSgpID49IG1pbmltdW1MaW5lSGVpZ2h0KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmIChBdXRvc2l6ZVN0YXR1czo6cHJvYmFibHlDb250YWluc0FTbWFs
bEZpeGVkTnVtYmVyT2ZMaW5lcyhzdHlsZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgc3R5bGUuc2V0TGluZUhlaWdodCh7IG1pbmltdW1MaW5lSGVpZ2h0LCBGaXhlZCB9KTsKLSAg
ICB9OwotCi0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZS5mb250RGVzY3JpcHRpb24o
KTsKLSAgICBhdXRvIGluaXRpYWxDb21wdXRlZEZvbnRTaXplID0gZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkU2l6ZSgpOwotICAgIGF1dG8gc3BlY2lmaWVkRm9udFNpemUgPSBmb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpOwotICAgIGJvb2wgaXNDYW5kaWRhdGUgPSBzdHlsZS5pc0lkZW1w
b3RlbnRUZXh0QXV0b3NpemluZ0NhbmRpZGF0ZSgpOwotICAgIGlmICghaXNDYW5kaWRhdGUgJiYg
V1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGluaXRpYWxDb21wdXRlZEZvbnRTaXplLCBzcGVjaWZp
ZWRGb250U2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYWRqdXN0ZWRG
b250U2l6ZSA9IEF1dG9zaXplU3RhdHVzOjppZGVtcG90ZW50VGV4dFNpemUoZm9udERlc2NyaXB0
aW9uLnNwZWNpZmllZFNpemUoKSwgaW5pdGlhbFNjYWxlKTsKLSAgICBpZiAoaXNDYW5kaWRhdGUg
JiYgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGluaXRpYWxDb21wdXRlZEZvbnRTaXplLCBhZGp1
c3RlZEZvbnRTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFoYXNUZXh0
Q2hpbGQoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoaXNDYW5kaWRhdGUgPyBhZGp1c3RlZEZvbnRTaXplIDogc3Bl
Y2lmaWVkRm9udFNpemUpOwotICAgIHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwotICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVu
dCgpLmZvbnRTZWxlY3RvcigpKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVzdG9yZSBj
b21wdXRlZCBsaW5lIGhlaWdodCB0byBpdHMgb3JpZ2luYWwgdmFsdWUgaW4gdGhlIGNhc2Ugd2hl
cmUgdGhlIGVsZW1lbnQgaXMgbm90Ci0gICAgLy8gYW4gaWRlbXBvdGVudCB0ZXh0IGF1dG9zaXpp
bmcgY2FuZGlkYXRlOyBvdGhlcndpc2UsIGlmIGFuIGVsZW1lbnQgdGhhdCBpcyBhIHRleHQgYXV0
b3NpemluZyBjYW5kaWRhdGUgY29udGFpbnMKLSAgICAvLyBjaGlsZHJlbiB3aGljaCBhcmUgbm90
IGF1dG9zaXplZCwgdGhlIG5vbi1hdXRvc2l6ZWQgY29udGVudCB3aWxsIGVuZCB1cCB3aXRoIGEg
Ym9vc3RlZCBsaW5lIGhlaWdodC4KLSAgICBpZiAoaXNDYW5kaWRhdGUpCi0gICAgICAgIGFkanVz
dExpbmVIZWlnaHRJZk5lZWRlZChhZGp1c3RlZEZvbnRTaXplKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotI2VuZGlmCi0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRCb3hTdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSkKLXsKLSAgICAvLyBJZiB0aGUg
Y29tcG9zZWQgdHJlZSBwYXJlbnQgaGFzIGRpc3BsYXk6Y29udGVudHMsIHRoZSBwYXJlbnQgYm94
IHN0eWxlIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHBhcmVudCBzdHlsZS4KLSAgICAvLyBX
ZSBkb24ndCBoYXZlIGl0IHdoZW4gcmVzb2x2aW5nIGNvbXB1dGVkIHN0eWxlIGZvciBkaXNwbGF5
Om5vbmUgc3VidHJlZS4gVXNlIHBhcmVudCBzdHlsZSBmb3IgYWRqdXN0bWVudHMgaW4gdGhhdCBj
YXNlLgotICAgIGlmICghcGFyZW50Qm94U3R5bGUpCi0gICAgICAgIHBhcmVudEJveFN0eWxlID0g
JnBhcmVudFN0eWxlOwotCi0gICAgLy8gQ2FjaGUgb3VyIG9yaWdpbmFsIGRpc3BsYXkuCi0gICAg
c3R5bGUuc2V0T3JpZ2luYWxEaXNwbGF5KHN0eWxlLmRpc3BsYXkoKSk7Ci0KLSAgICBpZiAoc3R5
bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpDb250ZW50cykKLSAgICAgICAgYWRqdXN0RGlz
cGxheUNvbnRlbnRzU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwotCi0gICAgaWYgKHN0eWxlLmRpc3Bs
YXkoKSAhPSBEaXNwbGF5VHlwZTo6Tm9uZSAmJiBzdHlsZS5kaXNwbGF5KCkgIT0gRGlzcGxheVR5
cGU6OkNvbnRlbnRzKSB7Ci0gICAgICAgIGlmIChlbGVtZW50KSB7Ci0gICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgPHRkPiB0aGF0IHNwZWNpZmllcyBhIGZsb2F0IHByb3BlcnR5LCBpbiBxdWly
a3MgbW9kZSB3ZSBqdXN0IGRyb3AgdGhlIGZsb2F0Ci0gICAgICAgICAgICAvLyBwcm9wZXJ0eS4K
LSAgICAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Js
b2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKLSAgICAg
ICAgICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCi0gICAg
ICAgICAgICBpZiAoZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSkgewotICAgICAgICAgICAgICAg
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKSkgewotICAgICAgICAgICAgICAgICAgICBz
dHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpUYWJsZUNlbGwpOwotICAgICAgICAgICAgICAg
ICAgICBzdHlsZS5zZXRGbG9hdGluZyhGbG9hdDo6Tm8pOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKmVsZW1lbnQpKQotICAgICAgICAgICAgICAgICAg
ICBzdHlsZS5zZXREaXNwbGF5KHN0eWxlLmlzRGlzcGxheUlubGluZVR5cGUoKSA/IERpc3BsYXlU
eXBlOjpJbmxpbmVUYWJsZSA6IERpc3BsYXlUeXBlOjpUYWJsZSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKHRoVGFnKSkgewotICAgICAgICAgICAgICAgIGlmIChzdHlsZS53aGl0ZVNwYWNl
KCkgPT0gV2hpdGVTcGFjZTo6S0hUTUxOb1dyYXApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RmlndXJlIG91dCBpZiB3ZSBhcmUgcmVhbGx5IG5vd3JhcHBpbmcgb3IgaWYgd2Ugc2hvdWxkIGp1
c3QKLSAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG5vcm1hbCBpbnN0ZWFkLiBJZiB0aGUgd2lk
dGggb2YgdGhlIGNlbGwgaXMgZml4ZWQsIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgLy8gd2Ug
ZG9uJ3QgYWN0dWFsbHkgdXNlIFdoaXRlU3BhY2U6Ok5vV3JhcC4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0eWxlLndpZHRoKCkuaXNGaXhlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGUuc2V0V2hpdGVTcGFjZShXaGl0ZVNwYWNlOjpOb3JtYWwpOwotICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFdo
aXRlU3BhY2U6Ok5vV3JhcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBUYWJsZXMgbmV2ZXIgc3VwcG9ydCB0aGUgLXdlYmtpdC0qIHZhbHVlcyBm
b3IgdGV4dC1hbGlnbiBhbmQgd2lsbCByZXNldCBiYWNrIHRvIHRoZSBkZWZhdWx0LgotICAgICAg
ICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCplbGVtZW50KSAmJiAoc3R5bGUudGV4dEFs
aWduKCkgPT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdCB8fCBzdHlsZS50ZXh0QWxpZ24oKSA9
PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXIgfHwgc3R5bGUudGV4dEFsaWduKCkgPT0gVGV4
dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQpKQotICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRB
bGlnbihUZXh0QWxpZ25Nb2RlOjpTdGFydCk7Ci0KLSAgICAgICAgICAgIC8vIEZyYW1lcyBhbmQg
ZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29s
dXRlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0bwotICAgICAgICAgICAgLy8gZml4IGEgY3Jhc2ggd2hl
cmUgYSBzaXRlIHRyaWVzIHRvIHBvc2l0aW9uIHRoZXNlIG9iamVjdHMuIFRoZXkgYWxzbyBuZXZl
ciBob25vciBkaXNwbGF5LgotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJh
bWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKSB7Ci0gICAgICAgICAg
ICAgICAgc3R5bGUuc2V0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpTdGF0aWMpOwotICAgICAgICAg
ICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6OkJsb2NrKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gUnVieSB0ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXQgb3Ig
cG9zaXRpb24uIFRoaXMgbWlnaHQgY2hhbmdlIHdpdGggZXZvbHV0aW9uIG9mIHRoZSBzcGVjaWZp
Y2F0aW9uLgotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUocnRUYWcpKSB7Ci0g
ICAgICAgICAgICAgICAgc3R5bGUuc2V0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpTdGF0aWMpOwot
ICAgICAgICAgICAgICAgIHN0eWxlLnNldEZsb2F0aW5nKEZsb2F0OjpObyk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFVzZXIgYWdlbnRzIGFyZSBleHBlY3RlZCB0byBoYXZlIGEg
cnVsZSBpbiB0aGVpciB1c2VyIGFnZW50IHN0eWxlc2hlZXQgdGhhdCBtYXRjaGVzIHRoIGVsZW1l
bnRzIHRoYXQgaGF2ZSBhIHBhcmVudAotICAgICAgICAgICAgLy8gbm9kZSB3aG9zZSBjb21wdXRl
ZCB2YWx1ZSBmb3IgdGhlICd0ZXh0LWFsaWduJyBwcm9wZXJ0eSBpcyBpdHMgaW5pdGlhbCB2YWx1
ZSwgd2hvc2UgZGVjbGFyYXRpb24gYmxvY2sgY29uc2lzdHMgb2YKLSAgICAgICAgICAgIC8vIGp1
c3QgYSBzaW5nbGUgZGVjbGFyYXRpb24gdGhhdCBzZXRzIHRoZSAndGV4dC1hbGlnbicgcHJvcGVy
dHkgdG8gdGhlIHZhbHVlICdjZW50ZXInLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNw
ZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcmVuZGVyaW5nLmh0bWwjcmVuZGVyaW5nCi0gICAgICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykgJiYgIXN0eWxlLmhhc0V4cGxpY2l0
bHlTZXRUZXh0QWxpZ24oKSAmJiBwYXJlbnRTdHlsZS50ZXh0QWxpZ24oKSA9PSBSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRBbGlnbigpKQotICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRBbGln
bihUZXh0QWxpZ25Nb2RlOjpDZW50ZXIpOwotCi0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShsZWdlbmRUYWcpKQotICAgICAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlz
cGxheVR5cGU6OkJsb2NrKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFic29sdXRlL2ZpeGVk
IHBvc2l0aW9uZWQgZWxlbWVudHMsIGZsb2F0aW5nIGVsZW1lbnRzIGFuZCB0aGUgZG9jdW1lbnQg
ZWxlbWVudCBuZWVkIGJsb2NrLWxpa2Ugb3V0c2lkZSBkaXNwbGF5LgotICAgICAgICBpZiAoc3R5
bGUuaGFzT3V0T2ZGbG93UG9zaXRpb24oKSB8fCBzdHlsZS5pc0Zsb2F0aW5nKCkgfHwgKGVsZW1l
bnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSA9PSBlbGVtZW50KSkK
LSAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHls
ZSwgZG9jdW1lbnQoKSkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMg
bXV0YXRpb24gZm9yIHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGlu
ZSwgc2luY2UgaXQncyBub3QgY29tcGxldGVseQotICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBz
aG91bGQgd29yay4KLSAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6
SW5saW5lICYmIHN0eWxlLnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpOb25lICYmIHN0eWxlLndy
aXRpbmdNb2RlKCkgIT0gcGFyZW50U3R5bGUud3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHN0
eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6OklubGluZUJsb2NrKTsKLQotICAgICAgICAvLyBB
ZnRlciBwZXJmb3JtaW5nIHRoZSBkaXNwbGF5IG11dGF0aW9uLCBjaGVjayB0YWJsZSByb3dzLiBX
ZSBkbyBub3QgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRpb246c3RpY2t5IG9uCi0g
ICAgICAgIC8vIHRhYmxlIHJvd3Mgb3IgY2VsbHMuIFRoaXMgaGFzIGJlZW4gZXN0YWJsaXNoZWQg
Zm9yIHBvc2l0aW9uOnJlbGF0aXZlIGluIENTUzIuMSAoYW5kIGNhdXNlZCBhIGNyYXNoIGluIGNv
bnRhaW5pbmdCbG9jaygpCi0gICAgICAgIC8vIG9uIHNvbWUgc2l0ZXMpLgotICAgICAgICBpZiAo
KHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cCB8fCBzdHls
ZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlUm93R3JvdXAKLSAgICAgICAgICAgIHx8
IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVGb290ZXJHcm91cCB8fCBzdHls
ZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlUm93KQotICAgICAgICAgICAgJiYgc3R5
bGUucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlJlbGF0aXZlKQotICAgICAgICAgICAgc3R5
bGUuc2V0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpTdGF0aWMpOwotCi0gICAgICAgIC8vIHdyaXRp
bmctbW9kZSBkb2VzIG5vdCBhcHBseSB0byB0YWJsZSByb3cgZ3JvdXBzLCB0YWJsZSBjb2x1bW4g
Z3JvdXBzLCB0YWJsZSByb3dzLCBhbmQgdGFibGUgY29sdW1ucy4KLSAgICAgICAgLy8gRklYTUU6
IFRhYmxlIGNlbGxzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGJlIHBlcnBlbmRpY3VsYXIgb3IgZmxp
cHBlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRhYmxlLCB0aG91Z2guCi0gICAgICAgIGlmIChzdHls
ZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlQ29sdW1uIHx8IHN0eWxlLmRpc3BsYXko
KSA9PSBEaXNwbGF5VHlwZTo6VGFibGVDb2x1bW5Hcm91cCB8fCBzdHlsZS5kaXNwbGF5KCkgPT0g
RGlzcGxheVR5cGU6OlRhYmxlRm9vdGVyR3JvdXAKLSAgICAgICAgICAgIHx8IHN0eWxlLmRpc3Bs
YXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cCB8fCBzdHlsZS5kaXNwbGF5KCkg
PT0gRGlzcGxheVR5cGU6OlRhYmxlUm93IHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlw
ZTo6VGFibGVSb3dHcm91cAotICAgICAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3Bs
YXlUeXBlOjpUYWJsZUNlbGwpCi0gICAgICAgICAgICBzdHlsZS5zZXRXcml0aW5nTW9kZShwYXJl
bnRTdHlsZS53cml0aW5nTW9kZSgpKTsKLQotICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2UgZG9u
J3Qgc3VwcG9ydCBibG9jay1mbG93IG9uIGZsZXhpYmxlIGJveGVzIHlldCwgZGlzYWxsb3cgc2V0
dGluZwotICAgICAgICAvLyBvZiBibG9jay1mbG93IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gVG9w
VG9Cb3R0b21Xcml0aW5nTW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ2NDE4IC0gRmxleGlibGUgYm94IHN1cHBvcnQuCi0gICAgICAgIGlm
IChzdHlsZS53cml0aW5nTW9kZSgpICE9IFRvcFRvQm90dG9tV3JpdGluZ01vZGUgJiYgKHN0eWxl
LmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Qm94IHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNw
bGF5VHlwZTo6SW5saW5lQm94KSkKLSAgICAgICAgICAgIHN0eWxlLnNldFdyaXRpbmdNb2RlKFRv
cFRvQm90dG9tV3JpdGluZ01vZGUpOwotCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9jc3MtZGlzcGxheS8jdHJhbnNmb3JtYXRpb25zCi0gICAgICAgIC8vICJBIHBhcmVudCB3aXRo
IGEgZ3JpZCBvciBmbGV4IGRpc3BsYXkgdmFsdWUgYmxvY2tpZmllcyB0aGUgYm944oCZcyBkaXNw
bGF5IHR5cGUuIgotICAgICAgICBpZiAocGFyZW50Qm94U3R5bGUtPmlzRGlzcGxheUZsZXhpYmxl
T3JHcmlkQm94KCkpIHsKLSAgICAgICAgICAgIHN0eWxlLnNldEZsb2F0aW5nKEZsb2F0OjpObyk7
Ci0gICAgICAgICAgICBzdHlsZS5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5
bGUsIGRvY3VtZW50KCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSBv
dXIgei1pbmRleCB2YWx1ZSBpcyBvbmx5IGFwcGxpZWQgaWYgdGhlIG9iamVjdCBpcyBwb3NpdGlv
bmVkLgotICAgIGlmIChzdHlsZS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljICYm
ICFwYXJlbnRCb3hTdHlsZS0+aXNEaXNwbGF5RmxleGlibGVPckdyaWRCb3goKSkKLSAgICAgICAg
c3R5bGUuc2V0SGFzQXV0b1pJbmRleCgpOwotCi0gICAgLy8gQXV0byB6LWluZGV4IGJlY29tZXMg
MCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4gVGhpcyBwcmV2
ZW50cwotICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBh
cyBhIHNpbmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50Ci0gICAgLy8gb2Jq
ZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0uIEF1dG8gei1pbmRleCBhbHNvIGJlY29tZXMgMCBm
b3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jtcy9tYXNrcy9yZWZsZWN0aW9ucy4KLSAg
ICBpZiAoc3R5bGUuaGFzQXV0b1pJbmRleCgpKSB7Ci0gICAgICAgIGlmICgoZWxlbWVudCAmJiBl
bGVtZW50LT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpID09IGVsZW1lbnQpCi0gICAgICAg
ICAgICB8fCBzdHlsZS5vcGFjaXR5KCkgPCAxLjBmCi0gICAgICAgICAgICB8fCBzdHlsZS5oYXNU
cmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQotICAgICAgICAgICAgfHwgc3R5bGUuaGFzTWFzaygp
Ci0gICAgICAgICAgICB8fCBzdHlsZS5jbGlwUGF0aCgpCi0gICAgICAgICAgICB8fCBzdHlsZS5i
b3hSZWZsZWN0KCkKLSAgICAgICAgICAgIHx8IHN0eWxlLmhhc0ZpbHRlcigpCi0jaWYgRU5BQkxF
KEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgIHx8IHN0eWxlLmhhc0JhY2tkcm9wRmlsdGVy
KCkKLSNlbmRpZgotICAgICAgICAgICAgfHwgc3R5bGUuaGFzQmxlbmRNb2RlKCkKLSAgICAgICAg
ICAgIHx8IHN0eWxlLmhhc0lzb2xhdGlvbigpCi0gICAgICAgICAgICB8fCBzdHlsZS5wb3NpdGlv
bigpID09IFBvc2l0aW9uVHlwZTo6U3RpY2t5Ci0gICAgICAgICAgICB8fCBzdHlsZS5wb3NpdGlv
bigpID09IFBvc2l0aW9uVHlwZTo6Rml4ZWQKLSAgICAgICAgICAgIHx8IHN0eWxlLndpbGxDaGFu
Z2VDcmVhdGVzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICBzdHlsZS5zZXRaSW5kZXgo
MCk7Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICAgLy8gVGV4dGFyZWEgY29u
c2lkZXJzIG92ZXJmbG93IHZpc2libGUgYXMgYXV0by4KLSAgICAgICAgaWYgKGlzPEhUTUxUZXh0
QXJlYUVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dY
KHN0eWxlLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpWaXNpYmxlID8gT3ZlcmZsb3c6OkF1dG8g
OiBzdHlsZS5vdmVyZmxvd1goKSk7Ci0gICAgICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1koc3R5
bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlZpc2libGUgPyBPdmVyZmxvdzo6QXV0byA6IHN0
eWxlLm92ZXJmbG93WSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERpc2FsbG93IC13ZWJr
aXQtdXNlci1tb2RpZnkgb24gOnBzZXVkbyBhbmQgOjpwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAg
IGlmICghZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKS5pc051bGwoKSkKLSAgICAgICAgICAgIHN0
eWxlLnNldFVzZXJNb2RpZnkoVXNlck1vZGlmeTo6UmVhZE9ubHkpOwotCi0gICAgICAgIGlmIChp
czxIVE1MTWFycXVlZUVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gRm9yIG5v
dywgPG1hcnF1ZWU+IHJlcXVpcmVzIGFuIG92ZXJmbG93IGNsaXAgdG8gd29yayBwcm9wZXJseS4K
LSAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WChPdmVyZmxvdzo6SGlkZGVuKTsKLSAgICAg
ICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6SGlkZGVuKTsKLQotICAgICAgICAg
ICAgYm9vbCBpc1ZlcnRpY2FsID0gc3R5bGUubWFycXVlZURpcmVjdGlvbigpID09IE1hcnF1ZWVE
aXJlY3Rpb246OlVwIHx8IHN0eWxlLm1hcnF1ZWVEaXJlY3Rpb24oKSA9PSBNYXJxdWVlRGlyZWN0
aW9uOjpEb3duOwotICAgICAgICAgICAgLy8gTWFrZSBob3Jpem9udGFsIG1hcnF1ZWVzIG5vdCB3
cmFwLgotICAgICAgICAgICAgaWYgKCFpc1ZlcnRpY2FsKSB7Ci0gICAgICAgICAgICAgICAgc3R5
bGUuc2V0V2hpdGVTcGFjZShXaGl0ZVNwYWNlOjpOb1dyYXApOwotICAgICAgICAgICAgICAgIHN0
eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2RlOjpTdGFydCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyBBcHBhcmVudGx5IHRoaXMgaXMgdGhlIGV4cGVjdGVkIGxlZ2FjeSBiZWhh
dmlvci4KLSAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsICYmIHN0eWxlLmhlaWdodCgpLmlzQXV0
bygpKQotICAgICAgICAgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoMjAwLCBGaXhlZCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRvZXNOb3RJbmhlcml0VGV4dERlY29yYXRp
b24oc3R5bGUsIGVsZW1lbnQpKQotICAgICAgICBzdHlsZS5zZXRUZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdChzdHlsZS50ZXh0RGVjb3JhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0eWxlLmFk
ZFRvVGV4dERlY29yYXRpb25zSW5FZmZlY3Qoc3R5bGUudGV4dERlY29yYXRpb24oKSk7Ci0KLSAg
ICAvLyBJZiBlaXRoZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90IHZpc2libGUsIGNoYW5nZSB0byBh
dXRvLgotICAgIGlmIChzdHlsZS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6VmlzaWJsZSAmJiBz
dHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6VmlzaWJsZSkgewotICAgICAgICAvLyBGSVhN
RTogT25jZSB3ZSBpbXBsZW1lbnQgcGFnaW5hdGlvbiBjb250cm9scywgb3ZlcmZsb3cteCBzaG91
bGQgZGVmYXVsdCB0byBoaWRkZW4KLSAgICAgICAgLy8gaWYgb3ZlcmZsb3cteSBpcyBzZXQgdG8g
LXdlYmtpdC1wYWdlZC14IG9yIC13ZWJraXQtcGFnZS15LiBGb3Igbm93LCB3ZSdsbCBsZXQgaXQK
LSAgICAgICAgLy8gZGVmYXVsdCB0byBhdXRvIHNvIHdlIGNhbiBhdCBsZWFzdCBzY3JvbGwgdGhy
b3VnaCB0aGUgcGFnZXMuCi0gICAgICAgIHN0eWxlLnNldE92ZXJmbG93WChPdmVyZmxvdzo6QXV0
byk7Ci0gICAgfSBlbHNlIGlmIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6VmlzaWJs
ZSAmJiBzdHlsZS5vdmVyZmxvd1goKSAhPSBPdmVyZmxvdzo6VmlzaWJsZSkKLSAgICAgICAgc3R5
bGUuc2V0T3ZlcmZsb3dZKE92ZXJmbG93OjpBdXRvKTsKLQotICAgIC8vIENhbGwgc2V0U3R5bGVz
Rm9yUGFnaW5hdGlvbk1vZGUoKSBpZiBhIHBhZ2luYXRpb24gbW9kZSBpcyBzZXQgZm9yIGFueSBu
b24tcm9vdCBlbGVtZW50cy4gSWYgdGhlc2UKLSAgICAvLyBzdHlsZXMgYXJlIHNwZWNpZmllZCBv
biBhIHJvb3QgZWxlbWVudCwgdGhlbiB0aGV5IHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGluCi0gICAg
Ly8gU3R5bGU6OmNyZWF0ZUZvckRvY3VtZW50KCkuCi0gICAgaWYgKChzdHlsZS5vdmVyZmxvd1ko
KSA9PSBPdmVyZmxvdzo6UGFnZWRYIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpQ
YWdlZFkpICYmICEoZWxlbWVudCAmJiAoZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBl
bGVtZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkpCi0gICAgICAgIHN0eWxlLnNldENvbHVtblN0
eWxlc0Zyb21QYWdpbmF0aW9uTW9kZShXZWJDb3JlOjpwYWdpbmF0aW9uTW9kZUZvclJlbmRlclN0
eWxlKHN0eWxlKSk7Ci0KLSAgICAvLyBUYWJsZSByb3dzLCBzZWN0aW9ucyBhbmQgdGhlIHRhYmxl
IGl0c2VsZiB3aWxsIHN1cHBvcnQgb3ZlcmZsb3c6aGlkZGVuIGFuZCB3aWxsIGlnbm9yZSBzY3Jv
bGwvYXV0by4KLSAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZSBzZWN0aW9ucyB3aWxsIHN1
cHBvcnQgYXV0byBhbmQgc2Nyb2xsLgotICAgIGlmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxh
eVR5cGU6OlRhYmxlIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lVGFi
bGUKLSAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZVJvd0dy
b3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3cpIHsKLSAgICAg
ICAgaWYgKHN0eWxlLm92ZXJmbG93WCgpICE9IE92ZXJmbG93OjpWaXNpYmxlICYmIHN0eWxlLm92
ZXJmbG93WCgpICE9IE92ZXJmbG93OjpIaWRkZW4pCi0gICAgICAgICAgICBzdHlsZS5zZXRPdmVy
Zmxvd1goT3ZlcmZsb3c6OlZpc2libGUpOwotICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkg
IT0gT3ZlcmZsb3c6OlZpc2libGUgJiYgc3R5bGUub3ZlcmZsb3dZKCkgIT0gT3ZlcmZsb3c6Okhp
ZGRlbikKLSAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6VmlzaWJsZSk7
Ci0gICAgfQotCi0gICAgLy8gTWVudWxpc3RzIHNob3VsZCBoYXZlIHZpc2libGUgb3ZlcmZsb3cK
LSAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkgewotICAgICAgICBz
dHlsZS5zZXRPdmVyZmxvd1goT3ZlcmZsb3c6OlZpc2libGUpOwotICAgICAgICBzdHlsZS5zZXRP
dmVyZmxvd1koT3ZlcmZsb3c6OlZpc2libGUpOwotICAgIH0KLQotI2lmIEVOQUJMRShPVkVSRkxP
V19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgLy8gVG91Y2ggb3ZlcmZsb3cgc2Nyb2xsaW5nIGNyZWF0
ZXMgYSBzdGFja2luZyBjb250ZXh0LgotICAgIGlmIChzdHlsZS5oYXNBdXRvWkluZGV4KCkgJiYg
c3R5bGUudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpICYmIChpc1Njcm9sbGFibGVPdmVyZmxv
dyhzdHlsZS5vdmVyZmxvd1goKSkgfHwgaXNTY3JvbGxhYmxlT3ZlcmZsb3coc3R5bGUub3ZlcmZs
b3dZKCkpKSkKLSAgICAgICAgc3R5bGUuc2V0WkluZGV4KDApOwotI2VuZGlmCi0KLSAgICAvLyBD
dWxsIG91dCBhbnkgdXNlbGVzcyBsYXllcnMgYW5kIGFsc28gcmVwZWF0IHBhdHRlcm5zIGludG8g
YWRkaXRpb25hbCBsYXllcnMuCi0gICAgc3R5bGUuYWRqdXN0QmFja2dyb3VuZExheWVycygpOwot
ICAgIHN0eWxlLmFkanVzdE1hc2tMYXllcnMoKTsKLQotICAgIC8vIERvIHRoZSBzYW1lIGZvciBh
bmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KLSAgICBzdHlsZS5hZGp1c3RBbmltYXRpb25zKCk7
Ci0gICAgc3R5bGUuYWRqdXN0VHJhbnNpdGlvbnMoKTsKLQotICAgIC8vIEltcG9ydGFudDogSW50
cmluc2ljIG1hcmdpbnMgZ2V0IGFkZGVkIHRvIGNvbnRyb2xzIGJlZm9yZSB0aGUgdGhlbWUgaGFz
IGFkanVzdGVkIHRoZSBzdHlsZSwgc2luY2UgdGhlIHRoZW1lIHdpbGwKLSAgICAvLyBhbHRlciBm
b250cyBhbmQgaGVpZ2h0cy93aWR0aHMuCi0gICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KGVsZW1lbnQpICYmIHN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpID49IDExKSB7Ci0g
ICAgICAgIC8vIERvbid0IGFwcGx5IGludHJpbnNpYyBtYXJnaW5zIHRvIGltYWdlIGJ1dHRvbnMu
IFRoZSBkZXNpZ25lciBrbm93cyBob3cgYmlnIHRoZSBpbWFnZXMgYXJlLAotICAgICAgICAvLyBz
byB3ZSBoYXZlIHRvIHRyZWF0IGFsbCBpbWFnZSBidXR0b25zIGFzIHRob3VnaCB0aGV5IHdlcmUg
ZXhwbGljaXRseSBzaXplZC4KLSAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxl
bWVudCkgfHwgIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5pc0ltYWdlQnV0
dG9uKCkpCi0gICAgICAgICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKLSAgICB9Ci0K
LSAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUg
c3R5bGUuCi0gICAgaWYgKHN0eWxlLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhl
bWU6OnNpbmdsZXRvbigpLmFkanVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZWxlbWVudCwgdXNlckFn
ZW50QXBwZWFyYW5jZVN0eWxlKTsKLQotICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBz
ZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCi0gICAgaWYgKHN0eWxlLmhhc1Bz
ZXVkb1N0eWxlKFBzZXVkb0lkOjpGaXJzdExldHRlcikpCi0gICAgICAgIHN0eWxlLnNldFVuaXF1
ZSgpOwotCi0gICAgLy8gRklYTUU6IHdoZW4gZHJvcHBpbmcgdGhlIC13ZWJraXQgcHJlZml4IG9u
IHRyYW5zZm9ybS1zdHlsZSwgd2Ugc2hvdWxkIGFsc28gaGF2ZSBvcGFjaXR5IDwgMSBjYXVzZSBm
bGF0dGVuaW5nLgotICAgIGlmIChzdHlsZS5wcmVzZXJ2ZXMzRCgpICYmIChzdHlsZS5vdmVyZmxv
d1goKSAhPSBPdmVyZmxvdzo6VmlzaWJsZQotICAgICAgICB8fCBzdHlsZS5vdmVyZmxvd1koKSAh
PSBPdmVyZmxvdzo6VmlzaWJsZQotICAgICAgICB8fCBzdHlsZS5oYXNDbGlwKCkKLSAgICAgICAg
fHwgc3R5bGUuY2xpcFBhdGgoKQotICAgICAgICB8fCBzdHlsZS5oYXNGaWx0ZXIoKQotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgIHx8IHN0eWxlLmhhc0JhY2tkcm9wRmlsdGVy
KCkKLSNlbmRpZgotICAgICAgICB8fCBzdHlsZS5oYXNCbGVuZE1vZGUoKSkpCi0gICAgICAgIHN0
eWxlLnNldFRyYW5zZm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzRDo6RmxhdCk7Ci0KLSAgICBp
ZiAoaXM8U1ZHRWxlbWVudD4oZWxlbWVudCkpCi0gICAgICAgIGFkanVzdFNWR0VsZW1lbnRTdHls
ZShkb3duY2FzdDxTVkdFbGVtZW50PigqZWxlbWVudCksIHN0eWxlKTsKLQotICAgIC8vIElmIHRo
ZSBpbmhlcml0ZWQgdmFsdWUgb2YganVzdGlmeS1pdGVtcyBpbmNsdWRlcyB0aGUgJ2xlZ2FjeScg
a2V5d29yZCAocGx1cyAnbGVmdCcsICdyaWdodCcgb3IKLSAgICAvLyAnY2VudGVyJyksICdsZWdh
Y3knIGNvbXB1dGVzIHRvIHRoZSB0aGUgaW5oZXJpdGVkIHZhbHVlLiBPdGhlcndpc2UsICdhdXRv
JyBjb21wdXRlcyB0byAnbm9ybWFsJy4KLSAgICBpZiAocGFyZW50Qm94U3R5bGUtPmp1c3RpZnlJ
dGVtcygpLnBvc2l0aW9uVHlwZSgpID09IEl0ZW1Qb3NpdGlvblR5cGU6OkxlZ2FjeSAmJiBzdHls
ZS5qdXN0aWZ5SXRlbXMoKS5wb3NpdGlvbigpID09IEl0ZW1Qb3NpdGlvbjo6TGVnYWN5KQotICAg
ICAgICBzdHlsZS5zZXRKdXN0aWZ5SXRlbXMocGFyZW50Qm94U3R5bGUtPmp1c3RpZnlJdGVtcygp
KTsKLQotI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKLSAgICBzdHlsZS5zZXRFZmZlY3RpdmVU
b3VjaEFjdGlvbnMoY29tcHV0ZUVmZmVjdGl2ZVRvdWNoQWN0aW9ucyhzdHlsZSwgcGFyZW50U3R5
bGUuZWZmZWN0aXZlVG91Y2hBY3Rpb25zKCkpKTsKLSNlbmRpZgotCi0gICAgaWYgKGVsZW1lbnQp
IHsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgICAgICBhZGp1c3RSZW5kZXJTdHls
ZUZvclRleHRBdXRvc2l6aW5nKHN0eWxlLCAqZWxlbWVudCk7Ci0jZW5kaWYKLSAgICAgICAgYWRq
dXN0UmVuZGVyU3R5bGVGb3JTaXRlU3BlY2lmaWNRdWlya3Moc3R5bGUsICplbGVtZW50KTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGVGb3JTaXRlU3Bl
Y2lmaWNRdWlya3MoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQot
ewotICAgIGlmIChkb2N1bWVudCgpLnF1aXJrcygpLm5lZWRzR01haWxPdmVyZmxvd1Njcm9sbFF1
aXJrKCkpIHsKLSAgICAgICAgLy8gVGhpcyB0dXJucyBzaWRlYmFyIHNjcm9sbGFibGUgd2l0aG91
dCBtb3VzZSBtb3ZlIGV2ZW50LgotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0
cmluZz4gcm9sZVZhbHVlKCJuYXZpZ2F0aW9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkhpZGRl
biAmJiBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocm9sZUF0dHIpID09
IHJvbGVWYWx1ZSkKLSAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6QXV0
byk7Ci0gICAgfQotICAgIGlmIChkb2N1bWVudCgpLnF1aXJrcygpLm5lZWRzWW91VHViZU92ZXJm
bG93U2Nyb2xsUXVpcmsoKSkgewotICAgICAgICAvLyBUaGlzIHR1cm5zIHNpZGViYXIgc2Nyb2xs
YWJsZSB3aXRob3V0IGhvdmVyLgotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0
cmluZz4gaWRWYWx1ZSgiZ3VpZGUtaW5uZXItY29udGVudCIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgaWYgKHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93
OjpIaWRkZW4gJiYgZWxlbWVudC5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IGlkVmFsdWUpCi0g
ICAgICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1koT3ZlcmZsb3c6OkF1dG8pOwotICAgIH0KLX0K
LQotCiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNG
b3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRl
KQogewogICAgIHJldHVybiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBQc2V1
ZG9JZDo6Tm9uZSwgcnVsZXNUb0luY2x1ZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
aW5kZXggODQ5ZDU2OTg5NzEuLjkzZTVjNDM1OGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmgKQEAgLTEzMyw3ICsxMzMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPdmVycmlkZURv
Y3VtZW50RWxlbWVudFN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyBtX292ZXJyaWRlRG9jdW1l
bnRFbGVtZW50U3R5bGUgPSBzdHlsZTsgfQogCiAgICAgdm9pZCBhZGRDdXJyZW50U1ZHRm9udEZh
Y2VSdWxlcygpOwotICAgIHN0YXRpYyB2b2lkIGFkanVzdFNWR0VsZW1lbnRTdHlsZShjb25zdCBT
VkdFbGVtZW50JiwgUmVuZGVyU3R5bGUmKTsKIAogICAgIHZvaWQgc2V0TmV3U3RhdGVXaXRoRWxl
bWVudChjb25zdCBFbGVtZW50Jik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBz
dHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVSdWxlS2V5ZnJh
bWUqLCBLZXlmcmFtZVZhbHVlJik7CkBAIC0xODMsOSArMTgyLDYgQEAgcHVibGljOgogICAgIHZv
aWQgY2xlYXJDYWNoZWREZWNsYXJhdGlvbnNBZmZlY3RlZEJ5Vmlld3BvcnRVbml0cygpOwogCiBw
cml2YXRlOgotICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBS
ZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRCb3hTdHls
ZSwgY29uc3QgRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRTdHlsZSk7Ci0g
ICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZUZvclNpdGVTcGVjaWZpY1F1aXJrcyhSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQmKTsKLQogICAgIGVudW0gY2xhc3MgVXNlTWF0Y2hlZERlY2xhcmF0
aW9uc0NhY2hlIHsgWWVzLCBObyB9OwogICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQmLCBVc2VNYXRjaGVkRGVjbGFyYXRpb25z
Q2FjaGUgPSBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGU6Olllcyk7CiAKQEAgLTE5NSw4ICsx
OTEsNiBAQCBwcml2YXRlOgogICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFw
OwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxD
U1NWYWx1ZT4+IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOwotCiAgICAgY2xhc3MgU3RhdGUgewog
ICAgIHB1YmxpYzoKICAgICAgICAgU3RhdGUoKSB7IH0KQEAgLTIzNyw4ICsyMzEsNiBAQCBwdWJs
aWM6CiAKICAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJz
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9CiAKLSAgICBib29sIGFkanVz
dFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXppbmcoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
Jik7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKaW5kZXggYjE0NmNhY2UxNTQuLmNmMzc4YjBiMjRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKQEAgLTExMyw2ICsxMTMsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlci5oIgorI2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN1YmZyYW1lTG9h
ZGVyLmgiCkBAIC0zMDYxLDEzICszMDYyLDEyIEBAIHZvaWQgUGFnZTo6cmVjb21wdXRlVGV4dEF1
dG9TaXppbmdJbkFsbEZyYW1lcygpCiAgICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSAqZnJhbWUtPmRv
Y3VtZW50KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQucmVuZGVyVmlldygpIHx8ICFkb2N1bWVu
dC5zdHlsZVNjb3BlKCkucmVzb2x2ZXJJZkV4aXN0cygpKQorICAgICAgICBpZiAoIWRvY3VtZW50
LnJlbmRlclZpZXcoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8mIHN0
eWxlUmVzb2x2ZXIgPSBkb2N1bWVudC5zdHlsZVNjb3BlKCkucmVzb2x2ZXIoKTsKICAgICAgICAg
Zm9yIChhdXRvJiByZW5kZXJlciA6IGRlc2NlbmRhbnRzT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCpk
b2N1bWVudC5yZW5kZXJWaWV3KCkpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9
IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gbmVlZHNMYXlvdXQg
PSBzdHlsZVJlc29sdmVyLmFkanVzdFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXppbmcocmVuZGVy
ZXIubXV0YWJsZVN0eWxlKCksICplbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhdXRvIG5lZWRz
TGF5b3V0ID0gU3R5bGU6OkFkanVzdGVyOjphZGp1c3RGb3JUZXh0QXV0b3NpemluZyhyZW5kZXJl
ci5tdXRhYmxlU3R5bGUoKSwgKmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChuZWVkc0xh
eW91dCkKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4
IDliMmRmZWNjNTg2Li43YjgzYTE4ZThlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCkBAIC03OCw3ICs3OCw3IEBAIFJlbmRlclRoZW1lOjpSZW5kZXJUaGVtZSgp
CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgUmVuZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSkKK3ZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSkKIHsKICAg
ICAvLyBGb3JjZSBpbmxpbmUgYW5kIHRhYmxlIGRpc3BsYXkgc3R5bGVzIHRvIGJlIGlubGluZS1i
bG9jayAoZXhjZXB0IGZvciB0YWJsZS0gd2hpY2ggaXMgYmxvY2spCiAgICAgQ29udHJvbFBhcnQg
cGFydCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLAogICAgICAgICAgICAgcGFydCA9IE1lbnVsaXN0QnV0dG9uUGFydDsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgICAgICAgICBh
ZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAg
ICAgICAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgICAgICAg
ICBGQUxMVEhST1VHSDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHN0eWxlLnNldEFw
cGVhcmFuY2UoTm9Db250cm9sUGFydCk7CkBAIC0yMDAsOSArMjAwLDkgQEAgdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLAogICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7CiAjaWYgIVVTRShO
RVdfVEhFTUUpCiAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RD
aGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0
dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgUmFkaW9Q
YXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9TdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RSYWRpb1N0eWxlKHN0eWxlLCBlbGVt
ZW50KTsKICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFy
dDoKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKQEAgLTIxMCwxOCArMjEwLDE4IEBAIHZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwKICNlbmRpZgogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6
CiAgICAgY2FzZSBCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0QnV0
dG9uU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoK
LSAgICAgICAgcmV0dXJuIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdElubmVyU3BpbkJ1dHRvblN0
eWxlKHN0eWxlLCBlbGVtZW50KTsKICNlbmRpZgogICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAg
ICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
bGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlLCBlbGVt
ZW50KTsKICAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFRleHRB
cmVhU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4g
YWRqdXN0VGV4dEFyZWFTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBNZW51bGlzdFBh
cnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGUs
IGVsZW1lbnQpOwogICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4g
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7
CisgICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50
KTsKICAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBNZWRpYUN1cnJlbnRU
aW1lUGFydDoKICAgICBjYXNlIE1lZGlhVGltZVJlbWFpbmluZ1BhcnQ6CkBAIC0yMjksNTQgKzIy
OSw1NCBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsCiAgICAgY2FzZSBNZWRpYUV4aXRGdWxsc2Ny
ZWVuQnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBN
ZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lclBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZWRp
YUNvbnRyb2xTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJl
dHVybiBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBN
ZWRpYVNsaWRlclBhcnQ6CiAgICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ6CiAgICAgY2Fz
ZSBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJQYXJ0OgogICAgIGNhc2UgU2xpZGVySG9yaXpv
bnRhbFBhcnQ6CiAgICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAgICAgIHJldHVybiBh
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAg
ICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAg
IGNhc2UgU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICAg
ICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVs
ZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZSwgZWxl
bWVudCk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJl
dHVybiBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgU2VhcmNoRmllbGREZWNvcmF0aW9u
UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2Ug
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxl
LCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0U3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAg
ICBjYXNlIFByb2dyZXNzQmFyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFByb2dyZXNzQmFy
U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRq
dXN0UHJvZ3Jlc3NCYXJTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCiAgICAgY2FzZSBNZXRlclBhcnQ6CiAgICAgY2FzZSBSZWxldmFuY3lMZXZlbEluZGlj
YXRvclBhcnQ6CiAgICAgY2FzZSBDb250aW51b3VzQ2FwYWNpdHlMZXZlbEluZGljYXRvclBhcnQ6
CiAgICAgY2FzZSBEaXNjcmV0ZUNhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQYXJ0OgogICAgIGNhc2Ug
UmF0aW5nTGV2ZWxJbmRpY2F0b3JQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0TWV0ZXJTdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RN
ZXRlclN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICNlbmRpZgogI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQogICAgIGNhc2UgSW1hZ2VDb250cm9sc0J1dHRvblBhcnQ6CiAgICAgICAgIGJyZWFr
OwogI2VuZGlmCiAgICAgY2FzZSBDYXBzTG9ja0luZGljYXRvclBhcnQ6Ci0gICAgICAgIHJldHVy
biBhZGp1c3RDYXBzTG9ja0luZGljYXRvclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVt
ZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdENhcHNMb2NrSW5kaWNhdG9yU3R5bGUoc3R5bGUs
IGVsZW1lbnQpOwogI2lmIEVOQUJMRShBUFBMRV9QQVkpCiAgICAgY2FzZSBBcHBsZVBheUJ1dHRv
blBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RBcHBsZVBheUJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdEFwcGxlUGF5QnV0
dG9uU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRf
RUxFTUVOVCkKICAgICBjYXNlIEF0dGFjaG1lbnRQYXJ0OgogICAgIGNhc2UgQm9yZGVybGVzc0F0
dGFjaG1lbnRQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0QXR0YWNobWVudFN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdEF0dGFjaG1l
bnRTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxF
TUVOVCkKICAgICBjYXNlIExpc3RCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0TGlz
dEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0
dXJuIGFkanVzdExpc3RCdXR0b25TdHlsZShzdHlsZSwgZWxlbWVudCk7CiAjZW5kaWYKICAgICBk
ZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTkyNiw3ICs5MjYsNyBAQCBib29sIFJlbmRlclRo
ZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogCiAjaWYgIVVTRShO
RVdfVEhFTUUpCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3Ig
Y2hlY2tib3ggZGVzaWduZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0g
aG9ub3JlZCAoV2luSUUgYWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0
aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTk0Myw3ICs5
NDMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0CiAgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51
bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdAogewogICAgIC8vIEEgc3VtbWFyeSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNr
Ym94IGRlc2lnbmVkIHRvIG1hdGNoIFdpbklFOgogICAgIC8vIHdpZHRoL2hlaWdodCAtIGhvbm9y
ZWQgKFdpbklFIGFjdHVhbGx5IHNjYWxlcyBpdHMgY29udHJvbCBmb3Igc21hbGwgd2lkdGhzLCBi
dXQgbGV0cyBpdCBvdmVyZmxvdyBmb3Igc21hbGwgaGVpZ2h0cy4pCkBAIC05NjAsNyArOTYwLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGUKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVt
ZW50KikgY29uc3QKIHsKICAgICAvLyBNb3N0IHBsYXRmb3JtcyB3aWxsIGNvbXBsZXRlbHkgaG9u
b3IgYWxsIENTUywgYW5kIHNvIHdlIGhhdmUgbm8gbmVlZCB0bwogICAgIC8vIGFkanVzdCB0aGUg
c3R5bGUgYXQgYWxsIGJ5IGRlZmF1bHQuIFdlIHdpbGwgc3RpbGwgYWxsb3cgdGhlIHRoZW1lIGEg
Y3JhY2sKQEAgLTk2OCwyNiArOTY4LDI2IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsCiAgICAg
c2V0QnV0dG9uU2l6ZShzdHlsZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdElubmVy
U3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
UmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KICNlbmRpZgogCi12b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRl
eHRGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RUZXh0QXJlYVN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7
CiB9CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUoUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS5zZXRCb3hT
aGFkb3cobnVsbHB0cik7CiB9CkBAIC0xMDA5LDcgKzEwMDksNyBAQCBib29sIFJlbmRlclRoZW1l
OjpwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlYwogCiAjZW5kaWYgLy8gTUVURVJfRUxFTUVOVAogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RDYXBzTG9ja0luZGljYXRvclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2Fwc0xvY2tJ
bmRpY2F0b3JTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQog
CkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludENhcHNMb2NrSW5k
aWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsCiAKICNpZiBFTkFC
TEUoQVRUQUNITUVOVF9FTEVNRU5UKQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RBdHRhY2ht
ZW50U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RBdHRhY2htZW50U3R5bGUoUmVuZGVyU3R5bGUm
LCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIApAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgU3Ry
aW5nIFJlbmRlclRoZW1lOjpkYXRhTGlzdFN0eWxlU2hlZXQoKSBjb25zdAogICAgIHJldHVybiAi
ZGF0YWxpc3QgeyBkaXNwbGF5OiBub25lOyB9Il9zOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUo
UmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIApAQCAtMTE1MCw3ICsx
MTUwLDcgQEAgU2Vjb25kcyBSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiAgICAgcmV0dXJuIDBfczsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFBy
b2dyZXNzQmFyU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0K
IApAQCAtMTE2OSwxOSArMTE2OSwxOSBAQCBib29sIFJlbmRlclRoZW1lOjpzaG91bGRIYXZlQ2Fw
c0xvY2tJbmRpY2F0b3IoY29uc3QgSFRNTElucHV0RWxlbWVudCYpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNv
bnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZWRp
YUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIGFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwg
ZWxlbWVudCk7CiB9CkBAIC0xMTkwLDIzICsxMTkwLDIzIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAog
ewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCi12b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCmluZGV4IDE5YWNmMGJiM2UyLi43
N2E4YzM5MjM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKQEAgLTY1
LDcgKzY1LDcgQEAgcHVibGljOgogICAgIC8vIG1ldHJpY3MgYW5kIGRlZmF1bHRzIGdpdmVuIHRo
ZSBjb250ZW50cyBvZiB0aGUgc3R5bGUuICBUaGlzIGluY2x1ZGVzIHNvcGhpc3RpY2F0ZWQgb3Bl
cmF0aW9ucyBsaWtlCiAgICAgLy8gc2VsZWN0aW9uIG9mIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYg
dGhlIGZvbnQsIHRoZSBkaXNhYmxpbmcgb2YgYXBwZWFyYW5jZSB3aGVuIGNlcnRhaW4gb3RoZXIg
cHJvcGVydGllcyBsaWtlCiAgICAgLy8gImJvcmRlciIgYXJlIHNldCwgb3IgaWYgdGhlIGFwcGVh
cmFuY2UgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdGhlbWUuCi0gICAgdm9pZCBhZGp1c3RTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KiwgY29uc3QgUmVu
ZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSk7CisgICAgdm9pZCBhZGp1c3RTdHls
ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogdXNlckFn
ZW50QXBwZWFyYW5jZVN0eWxlKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBw
YWludCB0aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2JqZWN0LiAgQSB3
aWRnZXQncyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9mIGEgYnV0dG9uLCBp
cyBhbHdheXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUgYm9vbGVhbiByZXR1
cm4gdmFsdWUgaW5kaWNhdGVzCkBAIC0yODUsMTkgKzI4NSwxOSBAQCBwcm90ZWN0ZWQ6CiAKICNp
ZiAhVVNFKE5FV19USEVNRSkKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFs
dWUuCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RDaGVja2JveFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
Y29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxl
KFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShS
ZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogI2VuZGlmCiAKQEAgLTMwNSw3MyArMzA1LDczIEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJl
YVN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShS
ZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBG
bG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxp
c3REZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1l
bnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCBib29sIHBhaW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAog
I2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RDYXBzTG9ja0luZGljYXRvclN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0Q2Fwc0xvY2tJbmRpY2F0b3JTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBF
TkFCTEUoQVBQTEVfUEFZKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RBcHBsZVBheUJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QXBwbGVQYXlCdXR0b25TdHlsZShSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRBcHBs
ZVBheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVRUQUNITUVO
VF9FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RBdHRhY2htZW50U3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RBdHRhY2htZW50U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QXR0YWNobWVudChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUm
LCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShS
ZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVy
VGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVy
VGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYkRl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25z
dCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyQm94
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFJlbmRlclN0eWxlJiwg
Y29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29u
c3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhT3ZlcmxheVBsYXlCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
b2NvYS5oCmluZGV4IGYxODg3NDI0ZjYzLi4zYjJiNTBkZGQ1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCkBAIC0zOSw3ICszOSw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgSFRNTElucHV0RWxl
bWVudCYpIGNvbnN0IGZpbmFsOwogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKLSAgICB2b2lkIGFk
anVzdEFwcGxlUGF5QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0QXBwbGVQYXlCdXR0
b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAg
ICBib29sIHBhaW50QXBwbGVQYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EubW0KaW5kZXggY2I2MTA4MjkyYTQuLjM2
MTk4ZjBjZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2Nv
YS5tbQpAQCAtNTQsNyArNTQsNyBAQCBzdGF0aWMgY29uc3QgYXV0byBhcHBsZVBheUJ1dHRvbk1p
bmltdW1XaWR0aCA9IDE0MDsKIHN0YXRpYyBjb25zdCBhdXRvIGFwcGxlUGF5QnV0dG9uUGxhaW5N
aW5pbXVtV2lkdGggPSAxMDA7CiBzdGF0aWMgY29uc3QgYXV0byBhcHBsZVBheUJ1dHRvbk1pbmlt
dW1IZWlnaHQgPSAzMDsKIAotdm9pZCBSZW5kZXJUaGVtZUNvY29hOjphZGp1c3RBcHBsZVBheUJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNvY29hOjphZGp1c3RBcHBsZVBheUJ1dHRvblN0
eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgaWYg
KHN0eWxlLmFwcGxlUGF5QnV0dG9uVHlwZSgpID09IEFwcGxlUGF5QnV0dG9uVHlwZTo6UGxhaW4p
CiAgICAgICAgIHN0eWxlLnNldE1pbldpZHRoKExlbmd0aChhcHBsZVBheUJ1dHRvblBsYWluTWlu
aW11bVdpZHRoLCBGaXhlZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MuaAppbmRleCA3ZTM5ZWM2OTk5NC4uOTM2MmNiODk3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCkBAIC02OSwxMyArNjksMTMgQEAgcHJvdGVjdGVkOgog
ICAgIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVy
U3R5bGUmIHVzZXJBZ2VudFN0eWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIE1ldGhvZHMg
Zm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRq
dXN0UmFkaW9TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKICAgICBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRCdXR0
b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3Zl
cnJpZGU7CkBAIC04NSwxMCArODUsMTAgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgcGFpbnRUZXh0
RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICBib29sIHBhaW50VGV4dEFyZWFEZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRl
Y29yYXRpb25zKGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
IAogICAgIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHByb3RlY3RlZDoKICAg
ICBpbnQgc2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwog
I2VuZGlmCiAKLSAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKICAgICBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKICAgICBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qg
ZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXgg
MTBhZjA0MDY1OWEuLjdmMTAyZjVkZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tCkBAIC0zNDQsNyArMzQ0LDcgQEAgRmxvYXRSZWN0IFJlbmRlclRoZW1l
SU9TOjphZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgR3JhcGhp
Y3MKICAgICByZXR1cm4gYm9yZGVyLnJlY3QoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6
YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdENoZWNrYm94
U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBp
ZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCku
aXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1OSw3ICs0NTksNyBAQCBib29sIFJlbmRl
clRoZW1lSU9TOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZQogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0
eWxlLCB1c2VyQWdlbnRTdHlsZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZS53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAg
ICAgICByZXR1cm47CkBAIC02MjAsNyArNjIwLDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0SW5wdXRF
bGVtZW50QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBIVE1MSW5wdXRFbGUK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxl
bWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewog
ICAgIC8vIFNldCB0aGUgbWluLWhlaWdodCB0byBiZSBhdCBsZWFzdCBNZW51TGlzdE1pbkhlaWdo
dC4KICAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCkBAIC03NjUsOSArNzY1LDkgQEAg
Y29uc3QgQ0dGbG9hdCBrVHJhY2tUaGlja25lc3MgPSA0LjA7CiBjb25zdCBDR0Zsb2F0IGtUcmFj
a1JhZGl1cyA9IGtUcmFja1RoaWNrbmVzcyAvIDIuMDsKIGNvbnN0IGludCBrRGVmYXVsdFNsaWRl
clRodW1iU2l6ZSA9IDE2OwogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFj
a1N0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKIHsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShzZWxlY3Rv
ciwgc3R5bGUsIGVsZW1lbnQpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0
eWxlKHN0eWxlLCBlbGVtZW50KTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIHJl
bHlpbmcgb24gYm9yZGVyIHJhZGl1cyBmb3IgdGhlIGFwcGVhcmFuY2Ugb2Ygb3VyIGNvbnRyb2xz
IDxyZGFyOi8vcHJvYmxlbS83Njc1NDkzPi4KICAgICBpbnQgcmFkaXVzID0gc3RhdGljX2Nhc3Q8
aW50PihrVHJhY2tSYWRpdXMpOwpAQCAtOTg5LDkgKzk4OSw5IEBAIGludCBSZW5kZXJUaGVtZUlP
Uzo6c2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0CiB9CiAjZW5kaWYKIAot
dm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVy
JiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgUmVuZGVy
VGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsK
KyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZSwgZWxlbWVudCk7
CiAKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMTEsOSArMTAxMSw5
IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGREZWNv
cmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6
OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9T
OjphZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CiB7Ci0gICAgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKHNlbGVj
dG9yLCBzdHlsZSwgZWxlbWVudCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxl
KHN0eWxlLCBlbGVtZW50KTsKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQogICAgIGlm
IChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gQ29sb3JXZWxsUGFydCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKaW5kZXggMWI5ZjQ2MGM0MzMuLjA3ZjI2ZTUxMTNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaApAQCAtMTE4LDQ0ICsx
MTgsNDQgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgYm9vbCBwYWludFRleHRGaWVsZChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkanVzdFRleHRG
aWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOwogCiAg
ICAgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAg
IHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxl
KFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBw
YWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGp1c3RNZW51TGlz
dEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGFkanVzdFBy
b2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShSZW5kZXJT
dHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKICAgICBib29sIHBhaW50UHJvZ3Jl
c3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIGZpbmFsOwogCiAgICAgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFk
anVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShS
ZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKIAogICAgIGJvb2wgcGFp
bnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3QgZmluYWw7CiAKICAgICBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOwotICAgIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOwogCi0gICAgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3QgZmluYWw7CiAgICAgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0
IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKIAot
ICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKICAgICBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0
aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCop
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKICAg
ICBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVy
Qm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOwogCi0gICAgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdCBmaW5hbDsKICAgICBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNv
bnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsK
IAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIHZvaWQgcGFpbnRMaXN0QnV0dG9u
Rm9ySW5wdXQoY29uc3QgUmVuZGVyT2JqZWN0JiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0Jik7Ci0gICAgdm9pZCBhZGp1c3RMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRq
dXN0TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZp
bmFsOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0xODUsNyArMTg1LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IEludFNp
emUqIHNpemVzKSBjb25zdDsKICAgICBJbnRTaXplIHNpemVGb3JGb250KGNvbnN0IFJlbmRlclN0
eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwogICAgIEludFNpemUgc2l6ZUZvclN5
c3RlbUZvbnQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7
Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIE5TQ29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9udEZyb21Db250cm9s
U2l6ZShSZW5kZXJTdHlsZSYsIE5TQ29udHJvbFNpemUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRh
dGVDaGVja2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCB1
cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggYWE1OTkxY2U2N2QuLjA4
N2E3NGU3NDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CkBAIC02Myw3ICs2Myw2IEBACiAjaW1wb3J0ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAj
aW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIlN0cmluZ1RydW5jYXRvci5oIgotI2lt
cG9ydCAiU3R5bGVSZXNvbHZlci5oIgogI2ltcG9ydCAiVGhlbWVNYWMuaCIKICNpbXBvcnQgIlRp
bWVSYW5nZXMuaCIKICNpbXBvcnQgIlVUSVV0aWxpdGllcy5oIgpAQCAtMTA3NCw3ICsxMDczLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGMKICAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRG
b250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5T
Q29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRG
b250RnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSkgY29uc3QKIHsKICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC0x
MTQxLDcgKzExNDAsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludExpc3RCdXR0b25Gb3JJ
bnB1dChjb25zdCBSZW5kZXJPYmplY3QmIG8sIEdyYXBoaWNzQ29udAogICAgIGNvbnRleHQuZHJh
d0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TGlzdEJ1dHRv
blN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
Ly8gQWRkIGEgbWFyZ2luIHRvIHBsYWNlIHRoZSBidXR0b24gYXQgZW5kIG9mIHRoZSBpbnB1dCBm
aWVsZC4KICAgICBpZiAoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQpAQCAtMTE5MCw3
ICsxMTg5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW4KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3QKIHsKIH0KIApAQCAtMTIwMSw3ICsxMjAwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRl
eHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKQEAgLTE0MjksNyArMTQyOCw3IEBA
IFNlY29uZHMgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1l
UmF0ZSAqIHByb2dyZXNzQW5pbWF0aW9uTnVtRnJhbWVzOwogfQogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCkBA
IC0xNjc0LDcgKzE2NzMsNyBAQCBzdGF0aWMgY29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0b25T
aXplcygpCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlKSBj
b25zdAogewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpOwogCkBAIC0xNzAxLDcgKzE3MDAsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0
eQogICAgIC8vIE91ciBmb250IGlzIGxvY2tlZCB0byB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZv
bnQgc2l6ZSBmb3IgdGhlIGNvbnRyb2wuICBUbyBjbGFyaWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENT
Uy1zcGVjaWZpZWQgZm9udCB0byBmaWd1cmUgb3V0CiAgICAgLy8gYSByZWFzb25hYmxlIGNvbnRy
b2wgc2l6ZSwgYnV0IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhy
b3cgdGhhdCBmb250IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKICAgICAvLyBzeXN0ZW0g
Zm9udCBmb3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgotICAgIHNldEZvbnRGcm9tQ29udHJv
bFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKKyAgICBzZXRGb250RnJv
bUNvbnRyb2xTaXplKHN0eWxlLCBjb250cm9sU2l6ZSk7CiAKICAgICBzdHlsZS5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CiB9CkBAIC0xNzQ3LDcgKzE3NDYsNyBAQCBQb3B1cE1lbnVTdHlsZTo6UG9w
dXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHls
ZSYgcwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUo
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSAvIGJhc2VGb250U2l6ZTsK
IApAQCAtMTc5OSw3ICsxNzk4LDcgQEAgaW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxp
c3RTaXplKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIGNvbnN0IGludCB0cmFja1dp
ZHRoID0gNTsKIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAKLXZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RT
bGlkZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0
CiB7CiAgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQpAQCAtMTg0NSw5ICsxODQ0
LDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgUmVu
ZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVs
ZW1lbnQpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlLCBl
bGVtZW50KTsKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKQEAgLTE5ODQs
NyArMTk4Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5k
ZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiAgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBzZWFyY2hG
aWVsZFNpemVzKCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAg
ICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgogICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CkBAIC0yMDEw
LDcgKzIwMDksNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlcgogICAgIHN0eWxlLnNldFBhZGRp
bmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CiAKICAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKLSAgICBzZXRGb250RnJvbUNv
bnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CisgICAgc2V0Rm9u
dEZyb21Db250cm9sU2l6ZShzdHlsZSwgY29udHJvbFNpemUpOwogCiAgICAgc3R5bGUuc2V0Qm94
U2hhZG93KG51bGxwdHIpOwogfQpAQCAtMjA3NSw3ICsyMDc0LDcgQEAgY29uc3QgSW50U2l6ZSog
UmVuZGVyVGhlbWVNYWM6OmNhbmNlbEJ1dHRvblNpemVzKCkgY29uc3QKICAgICByZXR1cm4gc2l6
ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAg
ICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIGNhbmNlbEJ1dHRvblNp
emVzKCkpOwogICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7
CkBAIC0yMDkxLDcgKzIwOTAsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6cmVz
dWx0c0J1dHRvblNpemVzKCkgY29uc3QKIH0KIAogY29uc3QgaW50IGVtcHR5UmVzdWx0c09mZnNl
dCA9IDk7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25Q
YXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsK
ICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRv
blNpemVzKCkpOwogICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgLSBlbXB0
eVJlc3VsdHNPZmZzZXQsIEZpeGVkKSk7CkBAIC0yMTA0LDcgKzIxMDMsNyBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUo
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBJbnRTaXpl
IHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwog
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CkBAIC0yMTQw
LDcgKzIxMzksNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlckJveCYgYm94LAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogICAg
IEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6
ZXMoKSk7CiAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJlc3VsdHNB
cnJvd1dpZHRoLCBGaXhlZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmRkNDdmMzMzYTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApAQCAt
MCwwICsxLDYxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuIChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hv
bGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1
cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTdHlsZUFkanVzdGVyLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkhUTUxTbG90RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgIlF1aXJrcy5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisj
aW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU3R5bGUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitBZGp1c3Rlcjo6QWRqdXN0ZXIoY29uc3QgRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRCb3hTdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKKyAgICA6
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxlKQor
ICAgICwgbV9wYXJlbnRCb3hTdHlsZShwYXJlbnRCb3hTdHlsZSA/ICpwYXJlbnRCb3hTdHlsZSA6
IG1fcGFyZW50U3R5bGUpCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKK3sKK30KKworc3RhdGlj
IHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgLy8g
SW50cmluc2ljIG1hcmdpbiB2YWx1ZS4KKyAgICBjb25zdCBpbnQgaW50cmluc2ljTWFyZ2luID0g
Y2xhbXBUb0ludGVnZXIoMiAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisKKyAgICAvLyBGSVhN
RTogVXNpbmcgd2lkdGgvaGVpZ2h0IGFsb25lIGFuZCBub3QgYWxzbyBkZWFsaW5nIHdpdGggbWlu
LXdpZHRoL21heC13aWR0aCBpcyBmbGF3ZWQuCisgICAgLy8gRklYTUU6IFVzaW5nICJoYXNRdWly
ayIgdG8gZGVjaWRlIHRoZSBtYXJnaW4gd2Fzbid0IHNldCBpcyBraW5kIG9mIGxhbWUuCisgICAg
aWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkgeworICAgICAgICBpZiAoc3R5
bGUubWFyZ2luTGVmdCgpLmhhc1F1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS5zZXRNYXJnaW5M
ZWZ0KExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgICAgIGlmIChzdHlsZS5t
YXJnaW5SaWdodCgpLmhhc1F1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS5zZXRNYXJnaW5SaWdo
dChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgIH0KKworICAgIGlmIChzdHls
ZS5oZWlnaHQoKS5pc0F1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUubWFyZ2luVG9wKCkuaGFz
UXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLnNldE1hcmdpblRvcChMZW5ndGgoaW50cmluc2lj
TWFyZ2luLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUubWFyZ2luQm90dG9tKCkuaGFzUXVp
cmsoKSkKKyAgICAgICAgICAgIHN0eWxlLnNldE1hcmdpbkJvdHRvbShMZW5ndGgoaW50cmluc2lj
TWFyZ2luLCBGaXhlZCkpOworICAgIH0KK30KKworc3RhdGljIERpc3BsYXlUeXBlIGVxdWl2YWxl
bnRCbG9ja0Rpc3BsYXkoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBEb2N1bWVudCYg
ZG9jdW1lbnQpCit7CisgICAgc3dpdGNoIChhdXRvIGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5KCkp
IHsKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpCbG9jazoKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpU
YWJsZToKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpCb3g6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6
RmxleDoKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpXZWJLaXRGbGV4OgorICAgIGNhc2UgRGlzcGxh
eVR5cGU6OkdyaWQ6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6Rmxvd1Jvb3Q6CisgICAgICAgIHJl
dHVybiBkaXNwbGF5OworCisgICAgY2FzZSBEaXNwbGF5VHlwZTo6TGlzdEl0ZW06CisgICAgICAg
IC8vIEl0IGlzIGEgV2luSUUgYnVnIHRoYXQgZmxvYXRlZCBsaXN0IGl0ZW1zIGxvc2UgdGhlaXIg
YnVsbGV0cywgc28gd2UnbGwgZW11bGF0ZSB0aGUgcXVpcmssIGJ1dCBvbmx5IGluIHF1aXJrcyBt
b2RlLgorICAgICAgICBpZiAoZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkgJiYgc3R5bGUuaXNGbG9h
dGluZygpKQorICAgICAgICAgICAgcmV0dXJuIERpc3BsYXlUeXBlOjpCbG9jazsKKyAgICAgICAg
cmV0dXJuIGRpc3BsYXk7CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6SW5saW5lVGFibGU6CisgICAg
ICAgIHJldHVybiBEaXNwbGF5VHlwZTo6VGFibGU7CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6SW5s
aW5lQm94OgorICAgICAgICByZXR1cm4gRGlzcGxheVR5cGU6OkJveDsKKyAgICBjYXNlIERpc3Bs
YXlUeXBlOjpJbmxpbmVGbGV4OgorICAgIGNhc2UgRGlzcGxheVR5cGU6OldlYktpdElubGluZUZs
ZXg6CisgICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6RmxleDsKKyAgICBjYXNlIERpc3BsYXlU
eXBlOjpJbmxpbmVHcmlkOgorICAgICAgICByZXR1cm4gRGlzcGxheVR5cGU6OkdyaWQ7CisKKyAg
ICBjYXNlIERpc3BsYXlUeXBlOjpJbmxpbmU6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6Q29tcGFj
dDoKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jazoKKyAgICBjYXNlIERpc3BsYXlU
eXBlOjpUYWJsZVJvd0dyb3VwOgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlSGVhZGVyR3Jv
dXA6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVGb290ZXJHcm91cDoKKyAgICBjYXNlIERp
c3BsYXlUeXBlOjpUYWJsZVJvdzoKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpUYWJsZUNvbHVtbkdy
b3VwOgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlQ29sdW1uOgorICAgIGNhc2UgRGlzcGxh
eVR5cGU6OlRhYmxlQ2VsbDoKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpUYWJsZUNhcHRpb246Cisg
ICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6QmxvY2s7CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6
Q29udGVudHM6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
RGlzcGxheVR5cGU6OkNvbnRlbnRzOworICAgIGNhc2UgRGlzcGxheVR5cGU6Ok5vbmU6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gRGlzcGxheVR5cGU6Ok5v
bmU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBEaXNwbGF5
VHlwZTo6QmxvY2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnko
Y29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBhdXRvKiBwYXJlbnROb2RlID0gZWxlbWVu
dC5wYXJlbnROb2RlKCk7CisgICAgcmV0dXJuIHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+aXNT
aGFkb3dSb290KCk7Cit9CisKKy8vIENTUyByZXF1aXJlcyB0ZXh0LWRlY29yYXRpb24gdG8gYmUg
cmVzZXQgYXQgZWFjaCBET00gZWxlbWVudCBmb3IgdGFibGVzLAorLy8gaW5saW5lIGJsb2Nrcywg
aW5saW5lIHRhYmxlcywgc2hhZG93IERPTSBjcm9zc2luZ3MsIGZsb2F0aW5nIGVsZW1lbnRzLAor
Ly8gYW5kIGFic29sdXRlIG9yIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cy4KK3N0YXRp
YyBib29sIGRvZXNOb3RJbmhlcml0VGV4dERlY29yYXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIHJldHVybiBzdHlsZS5kaXNwbGF5
KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlw
ZTo6SW5saW5lVGFibGUKKyAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBl
OjpJbmxpbmVCbG9jayB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJv
eCB8fCAoZWxlbWVudCAmJiBpc0F0U2hhZG93Qm91bmRhcnkoKmVsZW1lbnQpKQorICAgICAgICB8
fCBzdHlsZS5pc0Zsb2F0aW5nKCkgfHwgc3R5bGUuaGFzT3V0T2ZGbG93UG9zaXRpb24oKTsKK30K
KworI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpIHx8IEVOQUJMRShQT0lOVEVS
X0VWRU5UUykKK3N0YXRpYyBib29sIGlzU2Nyb2xsYWJsZU92ZXJmbG93KE92ZXJmbG93IG92ZXJm
bG93KQoreworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IG92ZXJm
bG93ID09IE92ZXJmbG93OjpBdXRvOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoUE9JTlRFUl9F
VkVOVFMpCitzdGF0aWMgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBjb21wdXRlRWZmZWN0aXZlVG91
Y2hBY3Rpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgT3B0aW9uU2V0PFRvdWNoQWN0aW9u
PiBlZmZlY3RpdmVUb3VjaEFjdGlvbnMpCit7CisgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlv
L3BvaW50ZXJldmVudHMvI2RldGVybWluaW5nLXN1cHBvcnRlZC10b3VjaC1iZWhhdmlvcgorICAg
IC8vICJBIHRvdWNoIGJlaGF2aW9yIGlzIHN1cHBvcnRlZCBpZiBpdCBjb25mb3JtcyB0byB0aGUg
dG91Y2gtYWN0aW9uIHByb3BlcnR5IG9mIGVhY2ggZWxlbWVudCBiZXR3ZWVuCisgICAgLy8gdGhl
IGhpdCB0ZXN0ZWQgZWxlbWVudCBhbmQgaXRzIG5lYXJlc3QgYW5jZXN0b3Igd2l0aCB0aGUgZGVm
YXVsdCB0b3VjaCBiZWhhdmlvciAoaW5jbHVkaW5nIGJvdGggdGhlCisgICAgLy8gaGl0IHRlc3Rl
ZCBlbGVtZW50IGFuZCB0aGUgZWxlbWVudCB3aXRoIHRoZSBkZWZhdWx0IHRvdWNoIGJlaGF2aW9y
KS4iCisKKyAgICBib29sIGhhc0RlZmF1bHRUb3VjaEJlaGF2aW9yID0gaXNTY3JvbGxhYmxlT3Zl
cmZsb3coc3R5bGUub3ZlcmZsb3dYKCkpIHx8IGlzU2Nyb2xsYWJsZU92ZXJmbG93KHN0eWxlLm92
ZXJmbG93WSgpKTsKKyAgICBpZiAoaGFzRGVmYXVsdFRvdWNoQmVoYXZpb3IpCisgICAgICAgIGVm
ZmVjdGl2ZVRvdWNoQWN0aW9ucyA9IFJlbmRlclN0eWxlOjppbml0aWFsVG91Y2hBY3Rpb25zKCk7
CisKKyAgICBhdXRvIHRvdWNoQWN0aW9ucyA9IHN0eWxlLnRvdWNoQWN0aW9ucygpOworICAgIGlm
ICh0b3VjaEFjdGlvbnMgPT0gUmVuZGVyU3R5bGU6OmluaXRpYWxUb3VjaEFjdGlvbnMoKSkKKyAg
ICAgICAgcmV0dXJuIGVmZmVjdGl2ZVRvdWNoQWN0aW9uczsKKworICAgIGlmIChlZmZlY3RpdmVU
b3VjaEFjdGlvbnMuY29udGFpbnMoVG91Y2hBY3Rpb246Ok5vbmUpKQorICAgICAgICByZXR1cm4g
eyBUb3VjaEFjdGlvbjo6Tm9uZSB9OworCisgICAgaWYgKGVmZmVjdGl2ZVRvdWNoQWN0aW9ucy5j
b250YWluc0FueSh7IFRvdWNoQWN0aW9uOjpBdXRvLCBUb3VjaEFjdGlvbjo6TWFuaXB1bGF0aW9u
IH0pKQorICAgICAgICByZXR1cm4gdG91Y2hBY3Rpb25zOworCisgICAgaWYgKHRvdWNoQWN0aW9u
cy5jb250YWluc0FueSh7IFRvdWNoQWN0aW9uOjpBdXRvLCBUb3VjaEFjdGlvbjo6TWFuaXB1bGF0
aW9uIH0pKQorICAgICAgICByZXR1cm4gZWZmZWN0aXZlVG91Y2hBY3Rpb25zOworCisgICAgYXV0
byBzaGFyZWRUb3VjaEFjdGlvbnMgPSBlZmZlY3RpdmVUb3VjaEFjdGlvbnMgJiB0b3VjaEFjdGlv
bnM7CisgICAgaWYgKHNoYXJlZFRvdWNoQWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB7IFRvdWNoQWN0aW9uOjpOb25lIH07CisKKyAgICByZXR1cm4gc2hhcmVkVG91Y2hBY3Rpb25z
OworfQorI2VuZGlmCisKK3ZvaWQgQWRqdXN0ZXI6OmFkanVzdChSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUpIGNvbnN0Cit7Cisg
ICAgLy8gQ2FjaGUgb3VyIG9yaWdpbmFsIGRpc3BsYXkuCisgICAgc3R5bGUuc2V0T3JpZ2luYWxE
aXNwbGF5KHN0eWxlLmRpc3BsYXkoKSk7CisKKyAgICBpZiAoc3R5bGUuZGlzcGxheSgpID09IERp
c3BsYXlUeXBlOjpDb250ZW50cykKKyAgICAgICAgYWRqdXN0RGlzcGxheUNvbnRlbnRzU3R5bGUo
c3R5bGUpOworCisgICAgaWYgKHN0eWxlLmRpc3BsYXkoKSAhPSBEaXNwbGF5VHlwZTo6Tm9uZSAm
JiBzdHlsZS5kaXNwbGF5KCkgIT0gRGlzcGxheVR5cGU6OkNvbnRlbnRzKSB7CisgICAgICAgIGlm
IChtX2VsZW1lbnQpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSA8dGQ+IHRoYXQgc3Bl
Y2lmaWVzIGEgZmxvYXQgcHJvcGVydHksIGluIHF1aXJrcyBtb2RlIHdlIGp1c3QgZHJvcCB0aGUg
ZmxvYXQKKyAgICAgICAgICAgIC8vIHByb3BlcnR5LgorICAgICAgICAgICAgLy8gU2l0ZXMgYWxz
byBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24gPHRkPnMgYW5kIDx0YWJsZT5z
LiBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQorICAgICAgICAgICAgLy8gdGhlc2UgdGFncyB0byBy
ZXRhaW4gdGhlaXIgZGlzcGxheSB0eXBlcy4KKyAgICAgICAgICAgIGlmIChtX2RvY3VtZW50Lmlu
UXVpcmtzTW9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFt
ZSh0ZFRhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5
VHlwZTo6VGFibGVDZWxsKTsKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUuc2V0RmxvYXRpbmco
RmxvYXQ6Ok5vKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPEhUTUxUYWJsZUVsZW1l
bnQ+KCptX2VsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXREaXNwbGF5KHN0
eWxlLmlzRGlzcGxheUlubGluZVR5cGUoKSA/IERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZSA6IERp
c3BsYXlUeXBlOjpUYWJsZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX2Vs
ZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUud2hpdGVTcGFjZSgpID09IFdoaXRlU3BhY2U6
OktIVE1MTm9XcmFwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2Ug
YXJlIHJlYWxseSBub3dyYXBwaW5nIG9yIGlmIHdlIHNob3VsZCBqdXN0CisgICAgICAgICAgICAg
ICAgICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gSWYgdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGlz
IGZpeGVkLCB0aGVuCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IHVz
ZSBXaGl0ZVNwYWNlOjpOb1dyYXAuCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZS53aWR0
aCgpLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnNldFdoaXRlU3Bh
Y2UoV2hpdGVTcGFjZTo6Tm9ybWFsKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShXaGl0ZVNwYWNlOjpOb1dyYXAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGFi
bGVzIG5ldmVyIHN1cHBvcnQgdGhlIC13ZWJraXQtKiB2YWx1ZXMgZm9yIHRleHQtYWxpZ24gYW5k
IHdpbGwgcmVzZXQgYmFjayB0byB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgIGlmIChpczxIVE1M
VGFibGVFbGVtZW50PigqbV9lbGVtZW50KSAmJiAoc3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFs
aWduTW9kZTo6V2ViS2l0TGVmdCB8fCBzdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2Rl
OjpXZWJLaXRDZW50ZXIgfHwgc3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6V2Vi
S2l0UmlnaHQpKQorICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25N
b2RlOjpTdGFydCk7CisKKyAgICAgICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5ldmVy
IGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiBUaGlzIGlzIG5l
Y2Vzc2FyeSB0bworICAgICAgICAgICAgLy8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVz
IHRvIHBvc2l0aW9uIHRoZXNlIG9iamVjdHMuIFRoZXkgYWxzbyBuZXZlciBob25vciBkaXNwbGF5
LgorICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgbV9l
bGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkgeworICAgICAgICAgICAgICAgIHN0eWxl
LnNldFBvc2l0aW9uKFBvc2l0aW9uVHlwZTo6U3RhdGljKTsKKyAgICAgICAgICAgICAgICBzdHls
ZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpCbG9jayk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFJ1YnkgdGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0IG9yIHBvc2l0aW9uLiBU
aGlzIG1pZ2h0IGNoYW5nZSB3aXRoIGV2b2x1dGlvbiBvZiB0aGUgc3BlY2lmaWNhdGlvbi4KKyAg
ICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUocnRUYWcpKSB7CisgICAgICAgICAg
ICAgICAgc3R5bGUuc2V0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpTdGF0aWMpOworICAgICAgICAg
ICAgICAgIHN0eWxlLnNldEZsb2F0aW5nKEZsb2F0OjpObyk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFVzZXIgYWdlbnRzIGFyZSBleHBlY3RlZCB0byBoYXZlIGEgcnVsZSBpbiB0
aGVpciB1c2VyIGFnZW50IHN0eWxlc2hlZXQgdGhhdCBtYXRjaGVzIHRoIGVsZW1lbnRzIHRoYXQg
aGF2ZSBhIHBhcmVudAorICAgICAgICAgICAgLy8gbm9kZSB3aG9zZSBjb21wdXRlZCB2YWx1ZSBm
b3IgdGhlICd0ZXh0LWFsaWduJyBwcm9wZXJ0eSBpcyBpdHMgaW5pdGlhbCB2YWx1ZSwgd2hvc2Ug
ZGVjbGFyYXRpb24gYmxvY2sgY29uc2lzdHMgb2YKKyAgICAgICAgICAgIC8vIGp1c3QgYSBzaW5n
bGUgZGVjbGFyYXRpb24gdGhhdCBzZXRzIHRoZSAndGV4dC1hbGlnbicgcHJvcGVydHkgdG8gdGhl
IHZhbHVlICdjZW50ZXInLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy9tdWx0aXBhZ2UvcmVuZGVyaW5nLmh0bWwjcmVuZGVyaW5nCisgICAgICAgICAgICBpZiAo
bV9lbGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKSAmJiAhc3R5bGUuaGFzRXhwbGljaXRseVNldFRl
eHRBbGlnbigpICYmIG1fcGFyZW50U3R5bGUudGV4dEFsaWduKCkgPT0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0QWxpZ24oKSkKKyAgICAgICAgICAgICAgICBzdHlsZS5zZXRUZXh0QWxpZ24oVGV4
dEFsaWduTW9kZTo6Q2VudGVyKTsKKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFn
TmFtZShsZWdlbmRUYWcpKQorICAgICAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxh
eVR5cGU6OkJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFic29sdXRlL2ZpeGVkIHBv
c2l0aW9uZWQgZWxlbWVudHMsIGZsb2F0aW5nIGVsZW1lbnRzIGFuZCB0aGUgZG9jdW1lbnQgZWxl
bWVudCBuZWVkIGJsb2NrLWxpa2Ugb3V0c2lkZSBkaXNwbGF5LgorICAgICAgICBpZiAoc3R5bGUu
aGFzT3V0T2ZGbG93UG9zaXRpb24oKSB8fCBzdHlsZS5pc0Zsb2F0aW5nKCkgfHwgKG1fZWxlbWVu
dCAmJiBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpID09IG1fZWxlbWVudCkpCisgICAgICAg
ICAgICBzdHlsZS5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUsIG1fZG9j
dW1lbnQpKTsKKworICAgICAgICAvLyBGSVhNRTogRG9uJ3Qgc3VwcG9ydCB0aGlzIG11dGF0aW9u
IGZvciBwc2V1ZG8gc3R5bGVzIGxpa2UgZmlyc3QtbGV0dGVyIG9yIGZpcnN0LWxpbmUsIHNpbmNl
IGl0J3Mgbm90IGNvbXBsZXRlbHkKKyAgICAgICAgLy8gY2xlYXIgaG93IHRoYXQgc2hvdWxkIHdv
cmsuCisgICAgICAgIGlmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZSAm
JiBzdHlsZS5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSAmJiBzdHlsZS53cml0aW5nTW9k
ZSgpICE9IG1fcGFyZW50U3R5bGUud3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHN0eWxlLnNl
dERpc3BsYXkoRGlzcGxheVR5cGU6OklubGluZUJsb2NrKTsKKworICAgICAgICAvLyBBZnRlciBw
ZXJmb3JtaW5nIHRoZSBkaXNwbGF5IG11dGF0aW9uLCBjaGVjayB0YWJsZSByb3dzLiBXZSBkbyBu
b3QgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRpb246c3RpY2t5IG9uCisgICAgICAg
IC8vIHRhYmxlIHJvd3Mgb3IgY2VsbHMuIFRoaXMgaGFzIGJlZW4gZXN0YWJsaXNoZWQgZm9yIHBv
c2l0aW9uOnJlbGF0aXZlIGluIENTUzIuMSAoYW5kIGNhdXNlZCBhIGNyYXNoIGluIGNvbnRhaW5p
bmdCbG9jaygpCisgICAgICAgIC8vIG9uIHNvbWUgc2l0ZXMpLgorICAgICAgICBpZiAoKHN0eWxl
LmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cCB8fCBzdHlsZS5kaXNw
bGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlUm93R3JvdXAKKyAgICAgICAgICAgIHx8IHN0eWxl
LmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVGb290ZXJHcm91cCB8fCBzdHlsZS5kaXNw
bGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlUm93KQorICAgICAgICAgICAgJiYgc3R5bGUucG9z
aXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlJlbGF0aXZlKQorICAgICAgICAgICAgc3R5bGUuc2V0
UG9zaXRpb24oUG9zaXRpb25UeXBlOjpTdGF0aWMpOworCisgICAgICAgIC8vIHdyaXRpbmctbW9k
ZSBkb2VzIG5vdCBhcHBseSB0byB0YWJsZSByb3cgZ3JvdXBzLCB0YWJsZSBjb2x1bW4gZ3JvdXBz
LCB0YWJsZSByb3dzLCBhbmQgdGFibGUgY29sdW1ucy4KKyAgICAgICAgLy8gRklYTUU6IFRhYmxl
IGNlbGxzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGJlIHBlcnBlbmRpY3VsYXIgb3IgZmxpcHBlZCB3
aXRoIHJlc3BlY3QgdG8gdGhlIHRhYmxlLCB0aG91Z2guCisgICAgICAgIGlmIChzdHlsZS5kaXNw
bGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlQ29sdW1uIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBE
aXNwbGF5VHlwZTo6VGFibGVDb2x1bW5Hcm91cCB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxh
eVR5cGU6OlRhYmxlRm9vdGVyR3JvdXAKKyAgICAgICAgICAgIHx8IHN0eWxlLmRpc3BsYXkoKSA9
PSBEaXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cCB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlz
cGxheVR5cGU6OlRhYmxlUm93IHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFi
bGVSb3dHcm91cAorICAgICAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBl
OjpUYWJsZUNlbGwpCisgICAgICAgICAgICBzdHlsZS5zZXRXcml0aW5nTW9kZShtX3BhcmVudFN0
eWxlLndyaXRpbmdNb2RlKCkpOworCisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkb24ndCBz
dXBwb3J0IGJsb2NrLWZsb3cgb24gZmxleGlibGUgYm94ZXMgeWV0LCBkaXNhbGxvdyBzZXR0aW5n
CisgICAgICAgIC8vIG9mIGJsb2NrLWZsb3cgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBUb3BUb0Jv
dHRvbVdyaXRpbmdNb2RlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDY0MTggLSBGbGV4aWJsZSBib3ggc3VwcG9ydC4KKyAgICAgICAgaWYgKHN0
eWxlLndyaXRpbmdNb2RlKCkgIT0gVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSAmJiAoc3R5bGUuZGlz
cGxheSgpID09IERpc3BsYXlUeXBlOjpCb3ggfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlU
eXBlOjpJbmxpbmVCb3gpKQorICAgICAgICAgICAgc3R5bGUuc2V0V3JpdGluZ01vZGUoVG9wVG9C
b3R0b21Xcml0aW5nTW9kZSk7CisKKyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nz
cy1kaXNwbGF5LyN0cmFuc2Zvcm1hdGlvbnMKKyAgICAgICAgLy8gIkEgcGFyZW50IHdpdGggYSBn
cmlkIG9yIGZsZXggZGlzcGxheSB2YWx1ZSBibG9ja2lmaWVzIHRoZSBib3jigJlzIGRpc3BsYXkg
dHlwZS4iCisgICAgICAgIGlmIChtX3BhcmVudEJveFN0eWxlLmlzRGlzcGxheUZsZXhpYmxlT3JH
cmlkQm94KCkpIHsKKyAgICAgICAgICAgIHN0eWxlLnNldEZsb2F0aW5nKEZsb2F0OjpObyk7Cisg
ICAgICAgICAgICBzdHlsZS5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUs
IG1fZG9jdW1lbnQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSBvdXIg
ei1pbmRleCB2YWx1ZSBpcyBvbmx5IGFwcGxpZWQgaWYgdGhlIG9iamVjdCBpcyBwb3NpdGlvbmVk
LgorICAgIGlmIChzdHlsZS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljICYmICFt
X3BhcmVudEJveFN0eWxlLmlzRGlzcGxheUZsZXhpYmxlT3JHcmlkQm94KCkpCisgICAgICAgIHN0
eWxlLnNldEhhc0F1dG9aSW5kZXgoKTsKKworICAgIC8vIEF1dG8gei1pbmRleCBiZWNvbWVzIDAg
Zm9yIHRoZSByb290IGVsZW1lbnQgYW5kIHRyYW5zcGFyZW50IG9iamVjdHMuIFRoaXMgcHJldmVu
dHMKKyAgICAvLyBjYXNlcyB3aGVyZSBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGJsZW5kZWQgYXMg
YSBzaW5nbGUgdW5pdCBlbmQgdXAgd2l0aCBhIG5vbi10cmFuc3BhcmVudAorICAgIC8vIG9iamVj
dCB3ZWRnZWQgaW4gYmV0d2VlbiB0aGVtLiBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9y
IG9iamVjdHMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCisgICAg
aWYgKHN0eWxlLmhhc0F1dG9aSW5kZXgoKSkgeworICAgICAgICBpZiAoKG1fZWxlbWVudCAmJiBt
X2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpID09IG1fZWxlbWVudCkKKyAgICAgICAgICAgIHx8
IHN0eWxlLm9wYWNpdHkoKSA8IDEuMGYKKyAgICAgICAgICAgIHx8IHN0eWxlLmhhc1RyYW5zZm9y
bVJlbGF0ZWRQcm9wZXJ0eSgpCisgICAgICAgICAgICB8fCBzdHlsZS5oYXNNYXNrKCkKKyAgICAg
ICAgICAgIHx8IHN0eWxlLmNsaXBQYXRoKCkKKyAgICAgICAgICAgIHx8IHN0eWxlLmJveFJlZmxl
Y3QoKQorICAgICAgICAgICAgfHwgc3R5bGUuaGFzRmlsdGVyKCkKKyNpZiBFTkFCTEUoRklMVEVS
U19MRVZFTF8yKQorICAgICAgICAgICAgfHwgc3R5bGUuaGFzQmFja2Ryb3BGaWx0ZXIoKQorI2Vu
ZGlmCisgICAgICAgICAgICB8fCBzdHlsZS5oYXNCbGVuZE1vZGUoKQorICAgICAgICAgICAgfHwg
c3R5bGUuaGFzSXNvbGF0aW9uKCkKKyAgICAgICAgICAgIHx8IHN0eWxlLnBvc2l0aW9uKCkgPT0g
UG9zaXRpb25UeXBlOjpTdGlja3kKKyAgICAgICAgICAgIHx8IHN0eWxlLnBvc2l0aW9uKCkgPT0g
UG9zaXRpb25UeXBlOjpGaXhlZAorICAgICAgICAgICAgfHwgc3R5bGUud2lsbENoYW5nZUNyZWF0
ZXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIHN0eWxlLnNldFpJbmRleCgwKTsKKyAg
ICB9CisKKyAgICBpZiAobV9lbGVtZW50KSB7CisgICAgICAgIC8vIFRleHRhcmVhIGNvbnNpZGVy
cyBvdmVyZmxvdyB2aXNpYmxlIGFzIGF1dG8uCisgICAgICAgIGlmIChpczxIVE1MVGV4dEFyZWFF
bGVtZW50PigqbV9lbGVtZW50KSkgeworICAgICAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dYKHN0
eWxlLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpWaXNpYmxlID8gT3ZlcmZsb3c6OkF1dG8gOiBz
dHlsZS5vdmVyZmxvd1goKSk7CisgICAgICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1koc3R5bGUu
b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlZpc2libGUgPyBPdmVyZmxvdzo6QXV0byA6IHN0eWxl
Lm92ZXJmbG93WSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERpc2FsbG93IC13ZWJraXQt
dXNlci1tb2RpZnkgb24gOnBzZXVkbyBhbmQgOjpwc2V1ZG8gZWxlbWVudHMuCisgICAgICAgIGlm
ICghbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpLmlzTnVsbCgpKQorICAgICAgICAgICAgc3R5
bGUuc2V0VXNlck1vZGlmeShVc2VyTW9kaWZ5OjpSZWFkT25seSk7CisKKyAgICAgICAgaWYgKGlz
PEhUTUxNYXJxdWVlRWxlbWVudD4oKm1fZWxlbWVudCkpIHsKKyAgICAgICAgICAgIC8vIEZvciBu
b3csIDxtYXJxdWVlPiByZXF1aXJlcyBhbiBvdmVyZmxvdyBjbGlwIHRvIHdvcmsgcHJvcGVybHku
CisgICAgICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1goT3ZlcmZsb3c6OkhpZGRlbik7CisgICAg
ICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1koT3ZlcmZsb3c6OkhpZGRlbik7CisKKyAgICAgICAg
ICAgIGJvb2wgaXNWZXJ0aWNhbCA9IHN0eWxlLm1hcnF1ZWVEaXJlY3Rpb24oKSA9PSBNYXJxdWVl
RGlyZWN0aW9uOjpVcCB8fCBzdHlsZS5tYXJxdWVlRGlyZWN0aW9uKCkgPT0gTWFycXVlZURpcmVj
dGlvbjo6RG93bjsKKyAgICAgICAgICAgIC8vIE1ha2UgaG9yaXpvbnRhbCBtYXJxdWVlcyBub3Qg
d3JhcC4KKyAgICAgICAgICAgIGlmICghaXNWZXJ0aWNhbCkgeworICAgICAgICAgICAgICAgIHN0
eWxlLnNldFdoaXRlU3BhY2UoV2hpdGVTcGFjZTo6Tm9XcmFwKTsKKyAgICAgICAgICAgICAgICBz
dHlsZS5zZXRUZXh0QWxpZ24oVGV4dEFsaWduTW9kZTo6U3RhcnQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIHRoZSBleHBlY3RlZCBsZWdhY3kgYmVo
YXZpb3IuCisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCAmJiBzdHlsZS5oZWlnaHQoKS5pc0F1
dG8oKSkKKyAgICAgICAgICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKDIwMCwgRml4ZWQp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkb2VzTm90SW5oZXJpdFRleHREZWNvcmF0
aW9uKHN0eWxlLCBtX2VsZW1lbnQpKQorICAgICAgICBzdHlsZS5zZXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdChzdHlsZS50ZXh0RGVjb3JhdGlvbigpKTsKKyAgICBlbHNlCisgICAgICAgIHN0eWxl
LmFkZFRvVGV4dERlY29yYXRpb25zSW5FZmZlY3Qoc3R5bGUudGV4dERlY29yYXRpb24oKSk7CisK
KyAgICAvLyBJZiBlaXRoZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90IHZpc2libGUsIGNoYW5nZSB0
byBhdXRvLgorICAgIGlmIChzdHlsZS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6VmlzaWJsZSAm
JiBzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6VmlzaWJsZSkgeworICAgICAgICAvLyBG
SVhNRTogT25jZSB3ZSBpbXBsZW1lbnQgcGFnaW5hdGlvbiBjb250cm9scywgb3ZlcmZsb3cteCBz
aG91bGQgZGVmYXVsdCB0byBoaWRkZW4KKyAgICAgICAgLy8gaWYgb3ZlcmZsb3cteSBpcyBzZXQg
dG8gLXdlYmtpdC1wYWdlZC14IG9yIC13ZWJraXQtcGFnZS15LiBGb3Igbm93LCB3ZSdsbCBsZXQg
aXQKKyAgICAgICAgLy8gZGVmYXVsdCB0byBhdXRvIHNvIHdlIGNhbiBhdCBsZWFzdCBzY3JvbGwg
dGhyb3VnaCB0aGUgcGFnZXMuCisgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WChPdmVyZmxvdzo6
QXV0byk7CisgICAgfSBlbHNlIGlmIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6Vmlz
aWJsZSAmJiBzdHlsZS5vdmVyZmxvd1goKSAhPSBPdmVyZmxvdzo6VmlzaWJsZSkKKyAgICAgICAg
c3R5bGUuc2V0T3ZlcmZsb3dZKE92ZXJmbG93OjpBdXRvKTsKKworICAgIC8vIENhbGwgc2V0U3R5
bGVzRm9yUGFnaW5hdGlvbk1vZGUoKSBpZiBhIHBhZ2luYXRpb24gbW9kZSBpcyBzZXQgZm9yIGFu
eSBub24tcm9vdCBlbGVtZW50cy4gSWYgdGhlc2UKKyAgICAvLyBzdHlsZXMgYXJlIHNwZWNpZmll
ZCBvbiBhIHJvb3QgZWxlbWVudCwgdGhlbiB0aGV5IHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGluCisg
ICAgLy8gU3R5bGU6OmNyZWF0ZUZvcm1fZG9jdW1lbnQuCisgICAgaWYgKChzdHlsZS5vdmVyZmxv
d1koKSA9PSBPdmVyZmxvdzo6UGFnZWRYIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93
OjpQYWdlZFkpICYmICEobV9lbGVtZW50ICYmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoaHRtbFRh
ZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkpCisgICAgICAgIHN0eWxlLnNl
dENvbHVtblN0eWxlc0Zyb21QYWdpbmF0aW9uTW9kZShXZWJDb3JlOjpwYWdpbmF0aW9uTW9kZUZv
clJlbmRlclN0eWxlKHN0eWxlKSk7CisKKyAgICAvLyBUYWJsZSByb3dzLCBzZWN0aW9ucyBhbmQg
dGhlIHRhYmxlIGl0c2VsZiB3aWxsIHN1cHBvcnQgb3ZlcmZsb3c6aGlkZGVuIGFuZCB3aWxsIGln
bm9yZSBzY3JvbGwvYXV0by4KKyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZSBzZWN0aW9u
cyB3aWxsIHN1cHBvcnQgYXV0byBhbmQgc2Nyb2xsLgorICAgIGlmIChzdHlsZS5kaXNwbGF5KCkg
PT0gRGlzcGxheVR5cGU6OlRhYmxlIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6
SW5saW5lVGFibGUKKyAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpU
YWJsZVJvd0dyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3cp
IHsKKyAgICAgICAgaWYgKHN0eWxlLm92ZXJmbG93WCgpICE9IE92ZXJmbG93OjpWaXNpYmxlICYm
IHN0eWxlLm92ZXJmbG93WCgpICE9IE92ZXJmbG93OjpIaWRkZW4pCisgICAgICAgICAgICBzdHls
ZS5zZXRPdmVyZmxvd1goT3ZlcmZsb3c6OlZpc2libGUpOworICAgICAgICBpZiAoc3R5bGUub3Zl
cmZsb3dZKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUgJiYgc3R5bGUub3ZlcmZsb3dZKCkgIT0gT3Zl
cmZsb3c6OkhpZGRlbikKKyAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6
VmlzaWJsZSk7CisgICAgfQorCisgICAgLy8gTWVudWxpc3RzIHNob3VsZCBoYXZlIHZpc2libGUg
b3ZlcmZsb3cKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkgewor
ICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1goT3ZlcmZsb3c6OlZpc2libGUpOworICAgICAgICBz
dHlsZS5zZXRPdmVyZmxvd1koT3ZlcmZsb3c6OlZpc2libGUpOworICAgIH0KKworI2lmIEVOQUJM
RShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgLy8gVG91Y2ggb3ZlcmZsb3cgc2Nyb2xs
aW5nIGNyZWF0ZXMgYSBzdGFja2luZyBjb250ZXh0LgorICAgIGlmIChzdHlsZS5oYXNBdXRvWklu
ZGV4KCkgJiYgc3R5bGUudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpICYmIChpc1Njcm9sbGFi
bGVPdmVyZmxvdyhzdHlsZS5vdmVyZmxvd1goKSkgfHwgaXNTY3JvbGxhYmxlT3ZlcmZsb3coc3R5
bGUub3ZlcmZsb3dZKCkpKSkKKyAgICAgICAgc3R5bGUuc2V0WkluZGV4KDApOworI2VuZGlmCisK
KyAgICAvLyBDdWxsIG91dCBhbnkgdXNlbGVzcyBsYXllcnMgYW5kIGFsc28gcmVwZWF0IHBhdHRl
cm5zIGludG8gYWRkaXRpb25hbCBsYXllcnMuCisgICAgc3R5bGUuYWRqdXN0QmFja2dyb3VuZExh
eWVycygpOworICAgIHN0eWxlLmFkanVzdE1hc2tMYXllcnMoKTsKKworICAgIC8vIERvIHRoZSBz
YW1lIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KKyAgICBzdHlsZS5hZGp1c3RBbmlt
YXRpb25zKCk7CisgICAgc3R5bGUuYWRqdXN0VHJhbnNpdGlvbnMoKTsKKworICAgIC8vIEltcG9y
dGFudDogSW50cmluc2ljIG1hcmdpbnMgZ2V0IGFkZGVkIHRvIGNvbnRyb2xzIGJlZm9yZSB0aGUg
dGhlbWUgaGFzIGFkanVzdGVkIHRoZSBzdHlsZSwgc2luY2UgdGhlIHRoZW1lIHdpbGwKKyAgICAv
LyBhbHRlciBmb250cyBhbmQgaGVpZ2h0cy93aWR0aHMuCisgICAgaWYgKGlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYgc3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXplKCkg
Pj0gMTEpIHsKKyAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1h
Z2UgYnV0dG9ucy4gVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCisg
ICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdo
IHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgorICAgICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KCptX2VsZW1lbnQpIHx8ICFkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9lbGVt
ZW50KS5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0
eWxlKTsKKyAgICB9CisKKyAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNrIGF0
IGFkanVzdGluZyB0aGUgc3R5bGUuCisgICAgaWYgKHN0eWxlLmhhc0FwcGVhcmFuY2UoKSkKKyAg
ICAgICAgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmFkanVzdFN0eWxlKHN0eWxlLCBtX2VsZW1l
bnQsIHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0
LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgorICAgIGlmIChz
dHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXIpKQorICAgICAgICBzdHls
ZS5zZXRVbmlxdWUoKTsKKworICAgIC8vIEZJWE1FOiB3aGVuIGRyb3BwaW5nIHRoZSAtd2Via2l0
IHByZWZpeCBvbiB0cmFuc2Zvcm0tc3R5bGUsIHdlIHNob3VsZCBhbHNvIGhhdmUgb3BhY2l0eSA8
IDEgY2F1c2UgZmxhdHRlbmluZy4KKyAgICBpZiAoc3R5bGUucHJlc2VydmVzM0QoKSAmJiAoc3R5
bGUub3ZlcmZsb3dYKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUKKyAgICAgICAgfHwgc3R5bGUub3Zl
cmZsb3dZKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUKKyAgICAgICAgfHwgc3R5bGUuaGFzQ2xpcCgp
CisgICAgICAgIHx8IHN0eWxlLmNsaXBQYXRoKCkKKyAgICAgICAgfHwgc3R5bGUuaGFzRmlsdGVy
KCkKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICB8fCBzdHlsZS5oYXNCYWNr
ZHJvcEZpbHRlcigpCisjZW5kaWYKKyAgICAgICAgfHwgc3R5bGUuaGFzQmxlbmRNb2RlKCkpKQor
ICAgICAgICBzdHlsZS5zZXRUcmFuc2Zvcm1TdHlsZTNEKFRyYW5zZm9ybVN0eWxlM0Q6OkZsYXQp
OworCisgICAgaWYgKGlzPFNWR0VsZW1lbnQ+KG1fZWxlbWVudCkpCisgICAgICAgIGFkanVzdFNW
R0VsZW1lbnRTdHlsZShzdHlsZSwgZG93bmNhc3Q8U1ZHRWxlbWVudD4oKm1fZWxlbWVudCkpOwor
CisgICAgLy8gSWYgdGhlIGluaGVyaXRlZCB2YWx1ZSBvZiBqdXN0aWZ5LWl0ZW1zIGluY2x1ZGVz
IHRoZSAnbGVnYWN5JyBrZXl3b3JkIChwbHVzICdsZWZ0JywgJ3JpZ2h0JyBvcgorICAgIC8vICdj
ZW50ZXInKSwgJ2xlZ2FjeScgY29tcHV0ZXMgdG8gdGhlIHRoZSBpbmhlcml0ZWQgdmFsdWUuIE90
aGVyd2lzZSwgJ2F1dG8nIGNvbXB1dGVzIHRvICdub3JtYWwnLgorICAgIGlmIChtX3BhcmVudEJv
eFN0eWxlLmp1c3RpZnlJdGVtcygpLnBvc2l0aW9uVHlwZSgpID09IEl0ZW1Qb3NpdGlvblR5cGU6
OkxlZ2FjeSAmJiBzdHlsZS5qdXN0aWZ5SXRlbXMoKS5wb3NpdGlvbigpID09IEl0ZW1Qb3NpdGlv
bjo6TGVnYWN5KQorICAgICAgICBzdHlsZS5zZXRKdXN0aWZ5SXRlbXMobV9wYXJlbnRCb3hTdHls
ZS5qdXN0aWZ5SXRlbXMoKSk7CisKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisgICAgc3R5
bGUuc2V0RWZmZWN0aXZlVG91Y2hBY3Rpb25zKGNvbXB1dGVFZmZlY3RpdmVUb3VjaEFjdGlvbnMo
c3R5bGUsIG1fcGFyZW50U3R5bGUuZWZmZWN0aXZlVG91Y2hBY3Rpb25zKCkpKTsKKyNlbmRpZgor
CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICBpZiAobV9lbGVtZW50KQorICAgICAg
ICBhZGp1c3RGb3JUZXh0QXV0b3NpemluZyhzdHlsZSwgKm1fZWxlbWVudCk7CisjZW5kaWYKKwor
ICAgIGFkanVzdEZvclNpdGVTcGVjaWZpY1F1aXJrcyhzdHlsZSk7Cit9CisKK3N0YXRpYyBib29s
IGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCit7CisgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1kaXNwbGF5
LTMvI3VuYm94LWh0bWwKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3Ry
aW5nPj4gdGFnTmFtZXMgPSBbXSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBIVE1MUXVhbGlmaWVk
TmFtZSogY29uc3QgdGFnTGlzdFtdID0geworICAgICAgICAgICAgJmJyVGFnLmdldCgpLAorICAg
ICAgICAgICAgJndiclRhZy5nZXQoKSwKKyAgICAgICAgICAgICZtZXRlclRhZy5nZXQoKSwKKyAg
ICAgICAgICAgICZhcHBsZXRUYWcuZ2V0KCksCisgICAgICAgICAgICAmcHJvZ3Jlc3NUYWcuZ2V0
KCksCisgICAgICAgICAgICAmY2FudmFzVGFnLmdldCgpLAorICAgICAgICAgICAgJmVtYmVkVGFn
LmdldCgpLAorICAgICAgICAgICAgJm9iamVjdFRhZy5nZXQoKSwKKyAgICAgICAgICAgICZhdWRp
b1RhZy5nZXQoKSwKKyAgICAgICAgICAgICZpZnJhbWVUYWcuZ2V0KCksCisgICAgICAgICAgICAm
aW1nVGFnLmdldCgpLAorICAgICAgICAgICAgJnZpZGVvVGFnLmdldCgpLAorICAgICAgICAgICAg
JmZyYW1lVGFnLmdldCgpLAorICAgICAgICAgICAgJmZyYW1lc2V0VGFnLmdldCgpLAorICAgICAg
ICAgICAgJmlucHV0VGFnLmdldCgpLAorICAgICAgICAgICAgJnRleHRhcmVhVGFnLmdldCgpLAor
ICAgICAgICAgICAgJnNlbGVjdFRhZy5nZXQoKSwKKyAgICAgICAgfTsKKyAgICAgICAgSGFzaFNl
dDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHRhZ0xpc3QpCisg
ICAgICAgICAgICBzZXQuYWRkKG5hbWUtPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIHNl
dDsKKyAgICB9KCk7CisKKyAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3Bs
YXktMy8jdW5ib3gtc3ZnCisgICAgLy8gRklYTUU6IDxnPiwgPHVzZT4gYW5kIDx0c3Bhbj4gaGF2
ZSBzcGVjaWFsICg/KSBiZWhhdmlvciBmb3IgZGlzcGxheTpjb250ZW50cyBpbiB0aGUgY3VycmVu
dCBkcmFmdCBzcGVjLgorICAgIGlmIChpczxTVkdFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisjaWYgRU5BQkxFKE1BVEhNTCkKKyAgICAvLyBOb3Qgc3VyZSBNYXRoTUwg
Y29kZSBjYW4gaGFuZGxlIGl0LgorICAgIGlmIChpczxNYXRoTUxFbGVtZW50PihlbGVtZW50KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKKyAgICBpZiAo
IWlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0YWdOYW1lcy5nZXQoKS5jb250YWlucyhlbGVtZW50LmxvY2FsTmFtZSgpKTsKK30KKwor
dm9pZCBBZGp1c3Rlcjo6YWRqdXN0RGlzcGxheUNvbnRlbnRzU3R5bGUoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAoreworICAgIGJvb2wgZGlzcGxheUNvbnRlbnRzRW5hYmxlZCA9IGlzPEhUTUxT
bG90RWxlbWVudD4obV9lbGVtZW50KSB8fCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmRpc3BsYXlDb250ZW50c0VuYWJsZWQoKTsKKyAgICBpZiAoIWRpc3BsYXlDb250
ZW50c0VuYWJsZWQpIHsKKyAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6SW5s
aW5lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9lbGVtZW50KSB7Cisg
ICAgICAgIGlmIChzdHlsZS5zdHlsZVR5cGUoKSAhPSBQc2V1ZG9JZDo6QmVmb3JlICYmIHN0eWxl
LnN0eWxlVHlwZSgpICE9IFBzZXVkb0lkOjpBZnRlcikKKyAgICAgICAgICAgIHN0eWxlLnNldERp
c3BsYXkoRGlzcGxheVR5cGU6Ok5vbmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkgPT0gbV9lbGVtZW50KSB7CisgICAgICAg
IHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6OkJsb2NrKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChoYXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50
cygqbV9lbGVtZW50KSkKKyAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6Tm9u
ZSk7Cit9CisKK3ZvaWQgQWRqdXN0ZXI6OmFkanVzdFNWR0VsZW1lbnRTdHlsZShSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFNWR0VsZW1lbnQmIHN2Z0VsZW1lbnQpCit7CisgICAgLy8gT25seSB0
aGUgcm9vdCA8c3ZnPiBlbGVtZW50IGluIGFuIFNWRyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhv
bm9ycyBjc3MgcG9zaXRpb24KKyAgICBhdXRvIGlzUG9zaXRpb25pbmdBbGxvd2VkID0gc3ZnRWxl
bWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpICYmIHN2Z0VsZW1lbnQucGFyZW50Tm9k
ZSgpICYmICFzdmdFbGVtZW50LnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXN2Z0Vs
ZW1lbnQuY29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKKyAgICBpZiAoIWlzUG9zaXRpb25pbmdBbGxv
d2VkKQorICAgICAgICBzdHlsZS5zZXRQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0
aW9uKCkpOworCisgICAgLy8gUmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRoZSB3
aG9sZSBTVkcgc3VidHJlZSwgc28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAorICAgIC8v
IG5vdCBiZSBzY2FsZWQgYWdhaW4uCisgICAgaWYgKHN2Z0VsZW1lbnQuaGFzVGFnTmFtZShTVkdO
YW1lczo6Zm9yZWlnbk9iamVjdFRhZykpCisgICAgICAgIHN0eWxlLnNldEVmZmVjdGl2ZVpvb20o
UmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworCisgICAgLy8gU1ZHIHRleHQgbGF5b3V0IGNv
ZGUgZXhwZWN0cyB1cyB0byBiZSBhIGJsb2NrLWxldmVsIHN0eWxlIGVsZW1lbnQuCisgICAgaWYg
KChzdmdFbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcpIHx8IHN2
Z0VsZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFRhZykpICYmIHN0eWxlLmlzRGlzcGxh
eUlubGluZVR5cGUoKSkKKyAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6Qmxv
Y2spOworfQorCit2b2lkIEFkanVzdGVyOjphZGp1c3RGb3JTaXRlU3BlY2lmaWNRdWlya3MoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAoreworICAgIGlmIChtX2RvY3VtZW50LnF1aXJrcygpLm5l
ZWRzR01haWxPdmVyZmxvd1Njcm9sbFF1aXJrKCkgJiYgbV9lbGVtZW50KSB7CisgICAgICAgIC8v
IFRoaXMgdHVybnMgc2lkZWJhciBzY3JvbGxhYmxlIHdpdGhvdXQgbW91c2UgbW92ZSBldmVudC4K
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21TdHJpbmc+IHJvbGVWYWx1ZSgibmF2
aWdhdGlvbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYg
KHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpIaWRkZW4gJiYgbV9lbGVtZW50LT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHJvbGVBdHRyKSA9PSByb2xlVmFsdWUpCisgICAg
ICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1koT3ZlcmZsb3c6OkF1dG8pOworICAgIH0KKyAgICBp
ZiAobV9kb2N1bWVudC5xdWlya3MoKS5uZWVkc1lvdVR1YmVPdmVyZmxvd1Njcm9sbFF1aXJrKCkg
JiYgbV9lbGVtZW50KSB7CisgICAgICAgIC8vIFRoaXMgdHVybnMgc2lkZWJhciBzY3JvbGxhYmxl
IHdpdGhvdXQgaG92ZXIuCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5n
PiBpZFZhbHVlKCJndWlkZS1pbm5lci1jb250ZW50IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6Okhp
ZGRlbiAmJiBtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gaWRWYWx1ZSkKKyAg
ICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6QXV0byk7CisgICAgfQorfQor
CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKK3N0YXRpYyBib29sIGhhc1RleHRDaGlsZChj
b25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGZvciAoYXV0byogY2hpbGQgPSBlbGVtZW50
LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgaWYgKGlzPFRleHQ+KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWRqdXN0ZXI6OmFkanVzdEZvclRleHRB
dXRvc2l6aW5nKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3sK
KyAgICBhdXRvJiBkb2N1bWVudCA9IGVsZW1lbnQuZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3Vt
ZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCkgfHwgIWRvY3VtZW50LnNldHRp
bmdzKCkudGV4dEF1dG9zaXppbmdVc2VzSWRlbXBvdGVudE1vZGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgQXV0b3NpemVTdGF0dXM6OnVwZGF0ZVN0YXR1cyhzdHlsZSk7CisgICAg
aWYgKHN0eWxlLnRleHRTaXplQWRqdXN0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGZsb2F0IGluaXRpYWxTY2FsZSA9IGRvY3VtZW50LnBhZ2UoKSA/IGRvY3VtZW50
LnBhZ2UoKS0+aW5pdGlhbFNjYWxlKCkgOiAxOworICAgIGF1dG8gYWRqdXN0TGluZUhlaWdodElm
TmVlZGVkID0gWyZdKGF1dG8gY29tcHV0ZWRGb250U2l6ZSkgeworICAgICAgICBhdXRvIGxpbmVI
ZWlnaHQgPSBzdHlsZS5zcGVjaWZpZWRMaW5lSGVpZ2h0KCk7CisgICAgICAgIGNvbnN0ZXhwciBz
dGF0aWMgdW5zaWduZWQgZWxpZ2libGVGb250U2l6ZSA9IDEyOworICAgICAgICBpZiAoY29tcHV0
ZWRGb250U2l6ZSAqIGluaXRpYWxTY2FsZSA+PSBlbGlnaWJsZUZvbnRTaXplKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0ZXhwciBzdGF0aWMgZmxvYXQgYm9vc3RGYWN0b3Ig
PSAxLjI1OworICAgICAgICBhdXRvIG1pbmltdW1MaW5lSGVpZ2h0ID0gYm9vc3RGYWN0b3IgKiBj
b21wdXRlZEZvbnRTaXplOworICAgICAgICBpZiAoIWxpbmVIZWlnaHQuaXNGaXhlZCgpIHx8IGxp
bmVIZWlnaHQudmFsdWUoKSA+PSBtaW5pbXVtTGluZUhlaWdodCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAoQXV0b3NpemVTdGF0dXM6OnByb2JhYmx5Q29udGFpbnNBU21hbGxG
aXhlZE51bWJlck9mTGluZXMoc3R5bGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHN0eWxlLnNldExpbmVIZWlnaHQoeyBtaW5pbXVtTGluZUhlaWdodCwgRml4ZWQgfSk7CisgICAg
fTsKKworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBpbml0aWFsQ29tcHV0ZWRGb250U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFNpemUoKTsKKyAgICBhdXRvIHNwZWNpZmllZEZvbnRTaXplID0gZm9udERlc2NyaXB0aW9u
LnNwZWNpZmllZFNpemUoKTsKKyAgICBib29sIGlzQ2FuZGlkYXRlID0gc3R5bGUuaXNJZGVtcG90
ZW50VGV4dEF1dG9zaXppbmdDYW5kaWRhdGUoKTsKKyAgICBpZiAoIWlzQ2FuZGlkYXRlICYmIFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChpbml0aWFsQ29tcHV0ZWRGb250U2l6ZSwgc3BlY2lmaWVk
Rm9udFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGFkanVzdGVkRm9u
dFNpemUgPSBBdXRvc2l6ZVN0YXR1czo6aWRlbXBvdGVudFRleHRTaXplKGZvbnREZXNjcmlwdGlv
bi5zcGVjaWZpZWRTaXplKCksIGluaXRpYWxTY2FsZSk7CisgICAgaWYgKGlzQ2FuZGlkYXRlICYm
IFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChpbml0aWFsQ29tcHV0ZWRGb250U2l6ZSwgYWRqdXN0
ZWRGb250U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaGFzVGV4dENo
aWxkKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKGlzQ2FuZGlkYXRlID8gYWRqdXN0ZWRGb250U2l6ZSA6IHNwZWNp
ZmllZEZvbnRTaXplKTsKKyAgICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250
RGVzY3JpcHRpb24pKTsKKyAgICBzdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQu
Zm9udFNlbGVjdG9yKCkpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXN0b3JlIGNvbXB1
dGVkIGxpbmUgaGVpZ2h0IHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSBpbiB0aGUgY2FzZSB3aGVyZSB0
aGUgZWxlbWVudCBpcyBub3QKKyAgICAvLyBhbiBpZGVtcG90ZW50IHRleHQgYXV0b3NpemluZyBj
YW5kaWRhdGU7IG90aGVyd2lzZSwgaWYgYW4gZWxlbWVudCB0aGF0IGlzIGEgdGV4dCBhdXRvc2l6
aW5nIGNhbmRpZGF0ZSBjb250YWlucworICAgIC8vIGNoaWxkcmVuIHdoaWNoIGFyZSBub3QgYXV0
b3NpemVkLCB0aGUgbm9uLWF1dG9zaXplZCBjb250ZW50IHdpbGwgZW5kIHVwIHdpdGggYSBib29z
dGVkIGxpbmUgaGVpZ2h0LgorICAgIGlmIChpc0NhbmRpZGF0ZSkKKyAgICAgICAgYWRqdXN0TGlu
ZUhlaWdodElmTmVlZGVkKGFkanVzdGVkRm9udFNpemUpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisjZW5kaWYKKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVB
ZGp1c3Rlci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MDViMDVkNmViZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuaApAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRWxlbWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgU1ZHRWxlbWVudDsKK2Ns
YXNzIFNldHRpbmdzOworCituYW1lc3BhY2UgU3R5bGUgeworCitjbGFzcyBBZGp1c3RlciB7Citw
dWJsaWM6CisgICAgQWRqdXN0ZXIoY29uc3QgRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRCb3hTdHlsZSwgY29uc3QgRWxl
bWVudCopOworCisgICAgdm9pZCBhZGp1c3QoUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHls
ZSogdXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGFk
anVzdFNWR0VsZW1lbnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IFNWR0VsZW1lbnQmKTsKKyNp
ZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgIHN0YXRpYyBib29sIGFkanVzdEZvclRleHRB
dXRvc2l6aW5nKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCYpOworI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgdm9pZCBhZGp1c3REaXNwbGF5Q29udGVudHNTdHlsZShSZW5kZXJTdHlsZSYpIGNv
bnN0OworICAgIHZvaWQgYWRqdXN0Rm9yU2l0ZVNwZWNpZmljUXVpcmtzKFJlbmRlclN0eWxlJikg
Y29uc3Q7CisKKyAgICBjb25zdCBEb2N1bWVudCYgbV9kb2N1bWVudDsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgbV9wYXJlbnRTdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9wYXJlbnRC
b3hTdHlsZTsKKyAgICBjb25zdCBFbGVtZW50KiBtX2VsZW1lbnQ7Cit9OworCit9Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggMTFlYmUyNWQwMTMuLjJiOWZmODQ5OWE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiU1ZH
VGl0bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNo
YWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHlsZUFkanVzdGVyLmgiCiAjaW5jbHVkZSAiWE1MTmFt
ZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CkBAIC01OTcsNyArNTk4LDcgQEAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTVkdFbGVtZW50
OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFMKICAgICAvLyBJ
ZiB0aGUgZWxlbWVudCBpcyBpbiBhIDx1c2U+IHRyZWUgd2UgZ2V0IHRoZSBzdHlsZSBmcm9tIHRo
ZSBkZWZpbml0aW9uIHRyZWUuCiAgICAgaWYgKGF1dG8gc3R5bGVFbGVtZW50ID0gbWFrZVJlZlB0
cih0aGlzLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKSkgewogICAgICAgICBPcHRpb25hbDxFbGVt
ZW50U3R5bGU+IHN0eWxlID0gc3R5bGVFbGVtZW50LT5yZXNvbHZlU3R5bGUoJnBhcmVudFN0eWxl
KTsKLSAgICAgICAgU3R5bGVSZXNvbHZlcjo6YWRqdXN0U1ZHRWxlbWVudFN0eWxlKCp0aGlzLCAq
c3R5bGUtPnJlbmRlclN0eWxlKTsKKyAgICAgICAgU3R5bGU6OkFkanVzdGVyOjphZGp1c3RTVkdF
bGVtZW50U3R5bGUoKnN0eWxlLT5yZW5kZXJTdHlsZSwgKnRoaXMpOwogICAgICAgICByZXR1cm4g
c3R5bGU7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383200</attachid>
            <date>2019-11-08 20:10:29 -0800</date>
            <delta_ts>2019-11-09 07:43:16 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-adjuster-3.patch</filename>
            <type>text/plain</type>
            <size>126354</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYTQyNTJmY2NlOS4uMjg3NzFlNzgzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjIgQEAKKzIwMTktMTEtMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgc3R5bGUgYWRqdXN0bWVudCBjb2RlIG91dCBvZiBTdHlsZVJlc29s
dmVyIGFuZCBpbnRvIGEgY2xhc3Mgb2YgaXRzIG93bgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIFN0eWxlOjpBZGp1c3Rlci4KKworICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SW50cmluc2ljTWFyZ2lucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplcXVpdmFsZW50
QmxvY2tEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvZXNOb3RJbmhlcml0
VGV4dERlY29yYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxhYmxl
T3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aGFzRWZmZWN0aXZlRGlzcGxh
eU5vbmVGb3JEaXNwbGF5Q29udGVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YWRq
dXN0RGlzcGxheUNvbnRlbnRzU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YWRqdXN0U1ZHRWxlbWVudFN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVFZmZlY3RpdmVUb3VjaEFjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6aGFzVGV4dENoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXppbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGVG
b3JTaXRlU3BlY2lmaWNRdWlya3MpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnJlY29tcHV0ZVRleHRBdXRvU2l6aW5nSW5BbGxGcmFtZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0
U3R5bGUpOgorCisgICAgICAgIE5vbmUgb2YgdGhpcyBjb2RlIHVzZXMgdGhlIFN0eWxlUmVzb2x2
ZXIgYXJndW1lbnQgc28gcmVtb3ZlIGl0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0Q2hlY2tib3hTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6YWRqdXN0UmFkaW9TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RUZXh0RmllbGRTdHlsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEFyZWFTdHlsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0Q2Fwc0xvY2tJbmRpY2F0b3JTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0QXR0YWNobWVudFN0
eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RMaXN0QnV0
dG9uU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFBy
b2dyZXNzQmFyU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RBcHBsZVBheUJ1dHRv
blN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDb2NvYTo6YWRqdXN0QXBwbGVQYXlCdXR0b25TdHlsZSBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0VGV4dEZpZWxkU3R5
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1
dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1
c3RQcm9ncmVzc0JhclN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0QnV0
dG9uU3R5bGUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0
eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RQcm9n
cmVzc0JhclN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjph
ZGp1c3RNZW51TGlzdFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZUFkanVzdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QWRqdXN0ZXI6OkFkanVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjphZGRJbnRy
aW5zaWNNYXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjplcXVpdmFsZW50QmxvY2tE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjppc0F0U2hhZG93Qm91bmRhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmRvZXNOb3RJbmhlcml0VGV4dERlY29yYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmlzU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpjb21wdXRlRWZmZWN0aXZlVG91Y2hBY3Rpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpBZGp1c3Rlcjo6YWRqdXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpoYXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdERpc3BsYXlDb250ZW50c1N0
eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpBZGp1c3Rlcjo6YWRqdXN0U1ZH
RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpBZGp1c3Rlcjo6YWRqdXN0
Rm9yU2l0ZVNwZWNpZmljUXVpcmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpo
YXNUZXh0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkFkanVzdGVyOjphZGp1c3RG
b3JUZXh0QXV0b3NpemluZyk6CisgICAgICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorCiAyMDE5LTExLTA4ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBEZWZlcnJlZFByb21pc2UgYmVoYXZl
IG5pY2VseSB3aXRoIHJlZ2FyZHMgdG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAppbmRleCA5YzYzOWJjNTViNC4uMjY4MTJhZTg5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMzQ5
LDYgKzIzNDksNyBAQCBzdHlsZS9JZENoYW5nZUludmFsaWRhdGlvbi5jcHAKIHN0eWxlL0lubGlu
ZVRleHRCb3hTdHlsZS5jcHAKIHN0eWxlL01hdGNoZWREZWNsYXJhdGlvbnNDYWNoZS5jcHAKIHN0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAKK3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCiBzdHlsZS9T
dHlsZUJ1aWxkZXIuY3BwCiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKIHN0eWxlL1N0eWxl
Q2hhbmdlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDJjZTVhOTczZDcwLi42ZWEzNDgxMjE1MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDgxNiw2ICs0
ODE2LDcgQEAKIAkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDRG
QTE4NDFCQ0E2QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCAqLzsgfTsKIAkJ
RTQ1MzIyQUMxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTMyMkFBMTQwQ0UyNjcwMDVBMEY5
MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi87IH07CiAJCUU0NUJBNkFBMjM3NDkyNkMwMDRERkMwNyAv
KiBNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NUJBNkE4MjM3NDkyNkIwMDRERkMwNyAvKiBNYXRjaGVkRGVj
bGFyYXRpb25zQ2FjaGUuaCAqLzsgfTsKKwkJRTQ1QkE2QjYyMzc2MjJBMzAwNERGQzA3IC8qIFN0
eWxlQWRqdXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NUJBNkI1MjM3NjIyOUYwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmggKi87IH07CiAJ
CUU0NjA1RkVDMjE2NjQ4MDkwMEU1MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjA1RkVBMjE2NjQ4MDgw
MEU1MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5
bGVSZWxhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovOyB9Owog
CQlFNDYxRDY1RjFCQjBDODBEMDBDQjU2NDUgLyogU3R5bGVTY29wZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2MUQ2NUUxQkIwQzgwRDAwQ0I1NjQ1
IC8qIFN0eWxlU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTUxNDEsNiArMTUxNDIsOCBAQAogCQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1
QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN5c3RlbU1lbW9yeUlPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0NUJBNkE4MjM3NDkyNkIwMDRERkMwNyAvKiBNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NUJBNkFCMjM3NDkyN0IwMDRERkMw
NyAvKiBNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0
Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTQ1QkE2QjIyMzc2MjI3RTAwNERGQzA3IC8qIFN0eWxlQWRqdXN0ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVBZGp1c3Rlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0NUJBNkI1MjM3NjIyOUYwMDRERkMwNyAvKiBTdHlsZUFkanVz
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlQWRqdXN0ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2MDVGRUEyMTY2NDgwODAwRTUzMDQ2IC8q
IFByZXdhcm1JbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
cmV3YXJtSW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2MTgw
MkMxQzhERDI5MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVsYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0NjE4MDJFMUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjk5OCw2ICsyNzAwMSw4IEBACiAJCQkJRTQ1
QkE2QTgyMzc0OTI2QjAwNERGQzA3IC8qIE1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZS5oICovLAog
CQkJCUU0QUJBQkU1MjM2MUEzNDIwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuY3BwICovLAog
CQkJCUU0QUJBQkUyMjM2MUEzMjkwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuaCAqLywKKwkJ
CQlFNDVCQTZCMjIzNzYyMjdFMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5jcHAgKi8sCisJCQkJ
RTQ1QkE2QjUyMzc2MjI5RjAwNERGQzA3IC8qIFN0eWxlQWRqdXN0ZXIuaCAqLywKIAkJCQlFNEFC
QUMwNzIzNkIwMTgxMDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyLmNwcCAqLywKIAkJCQlFNEFCQUMw
NTIzNkIwMTZDMDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyLmggKi8sCiAJCQkJODNCOTY4NzkxOUY4
QUI4MzAwNEVGN0FGIC8qIFN0eWxlQnVpbGRlckNvbnZlcnRlci5oICovLApAQCAtMjkyNDIsNiAr
MjkyNDcsNyBAQAogCQkJCTU3MjFBOThCMUVDRTU3MDQwMDgxMjk1QSAvKiBDcnlwdG9BbGdvcml0
aG1Sc2FQc3NQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkQzMzFBMTgyRDhEREQwMEMw
NUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTEyNUY4MkMxODIyQ0ZFQzAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0NUJBNkI2MjM3NjIyQTMwMDRERkMwNyAvKiBTdHlsZUFkanVz
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlBQzNFRjE4MjREQzc5MDAzNDk0MjYgLyogQ3J5
cHRvQWxnb3JpdGhtU0hBMjI0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlBQzNGMTE4MjREQzc5
MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMjU2LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTlBQzNGMzE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMzg0LmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2ZGNhOTAyMGIy
OS4uZjQxM2Y3MmEzMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ1
LDM3ICs0NSwyNSBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTE1hcnF1ZWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIk1h
dGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVy
eUV2YWx1YXRvci5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBh
Z2VSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiUGFpci5oIgotI2luY2x1ZGUgIlF1aXJrcy5o
IgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29u
c3RhbnRzLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiUnVsZVNldC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKLSNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0
ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFz
aC5oIgorI2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIu
aCIKICNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCkBAIC04Nyw3ICs3NSw2IEBACiAjaW5jbHVkZSAiVmlld3BvcnRTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdGF0ZS5oIgogI2luY2x1ZGUgIldlYktp
dEZvbnRGYW1pbHlOYW1lcy5oIgotI2luY2x1ZGUgPGJpdHNldD4KICNpbmNsdWRlIDx3dGYvU2Vj
b25kcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC0yNzUsOCArMjYyLDggQEAgRWxlbWVudFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0
eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXIKIAogICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNoUmVzdWx0KCksIGVsZW1lbnQp
OwogCi0gICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQg
ZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUo
KnN0YXRlLnN0eWxlKCksICpzdGF0ZS5wYXJlbnRTdHlsZSgpLCBwYXJlbnRCb3hTdHlsZSwgJmVs
ZW1lbnQsIHN0YXRlLnVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSgpKTsKKyAgICBTdHlsZTo6QWRq
dXN0ZXIgYWRqdXN0ZXIoZG9jdW1lbnQoKSwgKnN0YXRlLnBhcmVudFN0eWxlKCksIHBhcmVudEJv
eFN0eWxlLCAmZWxlbWVudCk7CisgICAgYWRqdXN0ZXIuYWRqdXN0KCpzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoKSk7CiAKICAgICBpZiAoc3RhdGUuc3R5bGUo
KS0+aGFzVmlld3BvcnRVbml0cygpKQogICAgICAgICBkb2N1bWVudCgpLnNldEhhc1N0eWxlV2l0
aFZpZXdwb3J0VW5pdHMoKTsKQEAgLTMwNCw3ICsyOTEsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5
bGUqCiAgICAgU3R5bGU6OkJ1aWxkZXIgYnVpbGRlcigqdGhpcywgcmVzdWx0LCB7IFN0eWxlOjpD
YXNjYWRlTGV2ZWw6OkF1dGhvciB9KTsKICAgICBidWlsZGVyLmFwcGx5QWxsUHJvcGVydGllcygp
OwogCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoKnN0YXRlLnN0eWxlKCksICpzdGF0ZS5wYXJlbnRT
dHlsZSgpLCBudWxscHRyLCBudWxscHRyLCBzdGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUo
KSk7CisgICAgU3R5bGU6OkFkanVzdGVyIGFkanVzdGVyKGRvY3VtZW50KCksICpzdGF0ZS5wYXJl
bnRTdHlsZSgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBhZGp1c3Rlci5hZGp1c3QoKnN0YXRl
LnN0eWxlKCksIHN0YXRlLnVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSgpKTsKIAogICAgIC8vIEFk
ZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBrZXlmcmFtZS4KICAgICB1bnNp
Z25lZCBwcm9wZXJ0eUNvdW50ID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKS5wcm9wZXJ0eUNvdW50
KCk7CkBAIC00NTksOCArNDQ3LDggQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYKIAogICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNoUmVzdWx0KCksIGVsZW1lbnQpOwog
Ci0gICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVj
b3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoKnN0
YXRlLnN0eWxlKCksICptX3N0YXRlLnBhcmVudFN0eWxlKCksIHBhcmVudEJveFN0eWxlLCBudWxs
cHRyLCBzdGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoKSk7CisgICAgU3R5bGU6OkFkanVz
dGVyIGFkanVzdGVyKGRvY3VtZW50KCksICpzdGF0ZS5wYXJlbnRTdHlsZSgpLCBwYXJlbnRCb3hT
dHlsZSwgbnVsbHB0cik7CisgICAgYWRqdXN0ZXIuYWRqdXN0KCpzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoKSk7CiAKICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+
aGFzVmlld3BvcnRVbml0cygpKQogICAgICAgICBkb2N1bWVudCgpLnNldEhhc1N0eWxlV2l0aFZp
ZXdwb3J0VW5pdHMoKTsKQEAgLTUwMyw1NDggKzQ5MSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCiAgICAgcmV0
dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEludHJpbnNpY01h
cmdpbnMoUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIC8vIEludHJpbnNpYyBtYXJnaW4gdmFs
dWUuCi0gICAgY29uc3QgaW50IGludHJpbnNpY01hcmdpbiA9IGNsYW1wVG9JbnRlZ2VyKDIgKiBz
dHlsZS5lZmZlY3RpdmVab29tKCkpOwotCi0gICAgLy8gRklYTUU6IFVzaW5nIHdpZHRoL2hlaWdo
dCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGluZyB3aXRoIG1pbi13aWR0aC9tYXgtd2lkdGggaXMg
Zmxhd2VkLgotICAgIC8vIEZJWE1FOiBVc2luZyAiaGFzUXVpcmsiIHRvIGRlY2lkZSB0aGUgbWFy
Z2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBsYW1lLgotICAgIGlmIChzdHlsZS53aWR0aCgpLmlz
SW50cmluc2ljT3JBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLm1hcmdpbkxlZnQoKS5oYXNR
dWlyaygpKQotICAgICAgICAgICAgc3R5bGUuc2V0TWFyZ2luTGVmdChMZW5ndGgoaW50cmluc2lj
TWFyZ2luLCBGaXhlZCkpOwotICAgICAgICBpZiAoc3R5bGUubWFyZ2luUmlnaHQoKS5oYXNRdWly
aygpKQotICAgICAgICAgICAgc3R5bGUuc2V0TWFyZ2luUmlnaHQoTGVuZ3RoKGludHJpbnNpY01h
cmdpbiwgRml4ZWQpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkp
IHsKLSAgICAgICAgaWYgKHN0eWxlLm1hcmdpblRvcCgpLmhhc1F1aXJrKCkpCi0gICAgICAgICAg
ICBzdHlsZS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKLSAg
ICAgICAgaWYgKHN0eWxlLm1hcmdpbkJvdHRvbSgpLmhhc1F1aXJrKCkpCi0gICAgICAgICAgICBz
dHlsZS5zZXRNYXJnaW5Cb3R0b20oTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBEaXNwbGF5VHlwZSBlcXVpdmFsZW50QmxvY2tEaXNwbGF5KGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIHN3
aXRjaCAoYXV0byBkaXNwbGF5ID0gc3R5bGUuZGlzcGxheSgpKSB7Ci0gICAgY2FzZSBEaXNwbGF5
VHlwZTo6QmxvY2s6Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGU6Ci0gICAgY2FzZSBEaXNw
bGF5VHlwZTo6Qm94OgotICAgIGNhc2UgRGlzcGxheVR5cGU6OkZsZXg6Ci0gICAgY2FzZSBEaXNw
bGF5VHlwZTo6V2ViS2l0RmxleDoKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpHcmlkOgotICAgIGNh
c2UgRGlzcGxheVR5cGU6OkZsb3dSb290OgotICAgICAgICByZXR1cm4gZGlzcGxheTsKLQotICAg
IGNhc2UgRGlzcGxheVR5cGU6Okxpc3RJdGVtOgotICAgICAgICAvLyBJdCBpcyBhIFdpbklFIGJ1
ZyB0aGF0IGZsb2F0ZWQgbGlzdCBpdGVtcyBsb3NlIHRoZWlyIGJ1bGxldHMsIHNvIHdlJ2xsIGVt
dWxhdGUgdGhlIHF1aXJrLCBidXQgb25seSBpbiBxdWlya3MgbW9kZS4KLSAgICAgICAgaWYgKGRv
Y3VtZW50LmluUXVpcmtzTW9kZSgpICYmIHN0eWxlLmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAg
IHJldHVybiBEaXNwbGF5VHlwZTo6QmxvY2s7Ci0gICAgICAgIHJldHVybiBkaXNwbGF5OwotICAg
IGNhc2UgRGlzcGxheVR5cGU6OklubGluZVRhYmxlOgotICAgICAgICByZXR1cm4gRGlzcGxheVR5
cGU6OlRhYmxlOwotICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGluZUJveDoKLSAgICAgICAgcmV0
dXJuIERpc3BsYXlUeXBlOjpCb3g7Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6SW5saW5lRmxleDoK
LSAgICBjYXNlIERpc3BsYXlUeXBlOjpXZWJLaXRJbmxpbmVGbGV4OgotICAgICAgICByZXR1cm4g
RGlzcGxheVR5cGU6OkZsZXg7Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6SW5saW5lR3JpZDoKLSAg
ICAgICAgcmV0dXJuIERpc3BsYXlUeXBlOjpHcmlkOwotCi0gICAgY2FzZSBEaXNwbGF5VHlwZTo6
SW5saW5lOgotICAgIGNhc2UgRGlzcGxheVR5cGU6OkNvbXBhY3Q6Ci0gICAgY2FzZSBEaXNwbGF5
VHlwZTo6SW5saW5lQmxvY2s6Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVSb3dHcm91cDoK
LSAgICBjYXNlIERpc3BsYXlUeXBlOjpUYWJsZUhlYWRlckdyb3VwOgotICAgIGNhc2UgRGlzcGxh
eVR5cGU6OlRhYmxlRm9vdGVyR3JvdXA6Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVSb3c6
Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVDb2x1bW5Hcm91cDoKLSAgICBjYXNlIERpc3Bs
YXlUeXBlOjpUYWJsZUNvbHVtbjoKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpUYWJsZUNlbGw6Ci0g
ICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVDYXB0aW9uOgotICAgICAgICByZXR1cm4gRGlzcGxh
eVR5cGU6OkJsb2NrOwotICAgIGNhc2UgRGlzcGxheVR5cGU6OkNvbnRlbnRzOgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIERpc3BsYXlUeXBlOjpDb250ZW50
czsKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpOb25lOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIERpc3BsYXlUeXBlOjpOb25lOwotICAgIH0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRGlzcGxheVR5cGU6OkJsb2NrOwotfQotCi0v
LyBDU1MgcmVxdWlyZXMgdGV4dC1kZWNvcmF0aW9uIHRvIGJlIHJlc2V0IGF0IGVhY2ggRE9NIGVs
ZW1lbnQgZm9yIHRhYmxlcywgCi0vLyBpbmxpbmUgYmxvY2tzLCBpbmxpbmUgdGFibGVzLCBzaGFk
b3cgRE9NIGNyb3NzaW5ncywgZmxvYXRpbmcgZWxlbWVudHMsCi0vLyBhbmQgYWJzb2x1dGUgb3Ig
cmVsYXRpdmVseSBwb3NpdGlvbmVkIGVsZW1lbnRzLgotc3RhdGljIGJvb2wgZG9lc05vdEluaGVy
aXRUZXh0RGVjb3JhdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCi17Ci0gICAgcmV0dXJuIHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6
VGFibGUgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZQotICAg
ICAgICB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJsb2NrIHx8IHN0
eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQm94IHx8IChlbGVtZW50ICYmIGlz
QXRTaGFkb3dCb3VuZGFyeSgqZWxlbWVudCkpCi0gICAgICAgIHx8IHN0eWxlLmlzRmxvYXRpbmco
KSB8fCBzdHlsZS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpOwotfQotCi0jaWYgRU5BQkxFKE9WRVJG
TE9XX1NDUk9MTElOR19UT1VDSCkgfHwgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQotc3RhdGljIGJv
b2wgaXNTY3JvbGxhYmxlT3ZlcmZsb3coT3ZlcmZsb3cgb3ZlcmZsb3cpCi17Ci0gICAgcmV0dXJu
IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgfHwgb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1
dG87Ci19Ci0jZW5kaWYKLQotc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JE
aXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICAvLyBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtaHRtbAotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7Ci0g
ICAgICAgICAgICAmYnJUYWcuZ2V0KCksCi0gICAgICAgICAgICAmd2JyVGFnLmdldCgpLAotICAg
ICAgICAgICAgJm1ldGVyVGFnLmdldCgpLAotICAgICAgICAgICAgJmFwcGxldFRhZy5nZXQoKSwK
LSAgICAgICAgICAgICZwcm9ncmVzc1RhZy5nZXQoKSwKLSAgICAgICAgICAgICZjYW52YXNUYWcu
Z2V0KCksCi0gICAgICAgICAgICAmZW1iZWRUYWcuZ2V0KCksCi0gICAgICAgICAgICAmb2JqZWN0
VGFnLmdldCgpLAotICAgICAgICAgICAgJmF1ZGlvVGFnLmdldCgpLAotICAgICAgICAgICAgJmlm
cmFtZVRhZy5nZXQoKSwKLSAgICAgICAgICAgICZpbWdUYWcuZ2V0KCksCi0gICAgICAgICAgICAm
dmlkZW9UYWcuZ2V0KCksCi0gICAgICAgICAgICAmZnJhbWVUYWcuZ2V0KCksCi0gICAgICAgICAg
ICAmZnJhbWVzZXRUYWcuZ2V0KCksCi0gICAgICAgICAgICAmaW5wdXRUYWcuZ2V0KCksCi0gICAg
ICAgICAgICAmdGV4dGFyZWFUYWcuZ2V0KCksCi0gICAgICAgICAgICAmc2VsZWN0VGFnLmdldCgp
LAotICAgICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKLSAgICAgICAg
Zm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkKLSAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9j
YWxOYW1lKCkpOwotICAgICAgICByZXR1cm4gc2V0OwotICAgIH0oKTsKLQotICAgIC8vIGh0dHBz
Oi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxheS0zLyN1bmJveC1zdmcKLSAgICAvLyBGSVhN
RTogPGc+LCA8dXNlPiBhbmQgPHRzcGFuPiBoYXZlIHNwZWNpYWwgKD8pIGJlaGF2aW9yIGZvciBk
aXNwbGF5OmNvbnRlbnRzIGluIHRoZSBjdXJyZW50IGRyYWZ0IHNwZWMuCi0gICAgaWYgKGlzPFNW
R0VsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNpZiBFTkFCTEUoTUFU
SE1MKQotICAgIC8vIE5vdCBzdXJlIE1hdGhNTCBjb2RlIGNhbiBoYW5kbGUgaXQuCi0gICAgaWYg
KGlzPE1hdGhNTEVsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRp
ZiAvLyBFTkFCTEUoTUFUSE1MKQotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRhZ05hbWVzLmdldCgpLmNvbnRhaW5z
KGVsZW1lbnQubG9jYWxOYW1lKCkpOwotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3REaXNwbGF5Q29u
dGVudHNTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17
Ci0gICAgYm9vbCBkaXNwbGF5Q29udGVudHNFbmFibGVkID0gaXM8SFRNTFNsb3RFbGVtZW50Pihl
bGVtZW50KSB8fCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmRpc3Bs
YXlDb250ZW50c0VuYWJsZWQoKTsKLSAgICBpZiAoIWRpc3BsYXlDb250ZW50c0VuYWJsZWQpIHsK
LSAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6SW5saW5lKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgaWYgKHN0eWxlLnN0
eWxlVHlwZSgpICE9IFBzZXVkb0lkOjpCZWZvcmUgJiYgc3R5bGUuc3R5bGVUeXBlKCkgIT0gUHNl
dWRvSWQ6OkFmdGVyKQotICAgICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6
Tm9uZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGVsZW1lbnQtPmRvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KCkgPT0gZWxlbWVudCkgewotICAgICAgICBzdHlsZS5zZXREaXNw
bGF5KERpc3BsYXlUeXBlOjpCbG9jayk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKCplbGVtZW50KSkKLSAg
ICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6Tm9uZSk7Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6YWRqdXN0U1ZHRWxlbWVudFN0eWxlKGNvbnN0IFNWR0VsZW1lbnQmIHN2Z0Vs
ZW1lbnQsIFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICAvLyBPbmx5IHRoZSByb290IDxzdmc+
IGVsZW1lbnQgaW4gYW4gU1ZHIGRvY3VtZW50IGZyYWdtZW50IHRyZWUgaG9ub3JzIGNzcyBwb3Np
dGlvbgotICAgIGF1dG8gaXNQb3NpdGlvbmluZ0FsbG93ZWQgPSBzdmdFbGVtZW50Lmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnN2Z1RhZykgJiYgc3ZnRWxlbWVudC5wYXJlbnROb2RlKCkgJiYgIXN2Z0Vs
ZW1lbnQucGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhc3ZnRWxlbWVudC5jb3JyZXNw
b25kaW5nRWxlbWVudCgpOwotICAgIGlmICghaXNQb3NpdGlvbmluZ0FsbG93ZWQpCi0gICAgICAg
IHN0eWxlLnNldFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7Ci0KLSAg
ICAvLyBSZW5kZXJTVkdSb290IGhhbmRsZXMgem9vbWluZyBmb3IgdGhlIHdob2xlIFNWRyBzdWJ0
cmVlLCBzbyBmb3JlaWduT2JqZWN0IGNvbnRlbnQgc2hvdWxkCi0gICAgLy8gbm90IGJlIHNjYWxl
ZCBhZ2Fpbi4KLSAgICBpZiAoc3ZnRWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWdu
T2JqZWN0VGFnKSkKLSAgICAgICAgc3R5bGUuc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6
aW5pdGlhbFpvb20oKSk7Ci0KLSAgICAvLyBTVkcgdGV4dCBsYXlvdXQgY29kZSBleHBlY3RzIHVz
IHRvIGJlIGEgYmxvY2stbGV2ZWwgc3R5bGUgZWxlbWVudC4KLSAgICBpZiAoKHN2Z0VsZW1lbnQu
aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykgfHwgc3ZnRWxlbWVudC5oYXNU
YWdOYW1lKFNWR05hbWVzOjp0ZXh0VGFnKSkgJiYgc3R5bGUuaXNEaXNwbGF5SW5saW5lVHlwZSgp
KQotICAgICAgICBzdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpCbG9jayk7Ci19Ci0KLSNp
ZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCi1zdGF0aWMgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBj
b21wdXRlRWZmZWN0aXZlVG91Y2hBY3Rpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgT3B0
aW9uU2V0PFRvdWNoQWN0aW9uPiBlZmZlY3RpdmVUb3VjaEFjdGlvbnMpCi17Ci0gICAgLy8gaHR0
cHM6Ly93M2MuZ2l0aHViLmlvL3BvaW50ZXJldmVudHMvI2RldGVybWluaW5nLXN1cHBvcnRlZC10
b3VjaC1iZWhhdmlvcgotICAgIC8vICJBIHRvdWNoIGJlaGF2aW9yIGlzIHN1cHBvcnRlZCBpZiBp
dCBjb25mb3JtcyB0byB0aGUgdG91Y2gtYWN0aW9uIHByb3BlcnR5IG9mIGVhY2ggZWxlbWVudCBi
ZXR3ZWVuCi0gICAgLy8gdGhlIGhpdCB0ZXN0ZWQgZWxlbWVudCBhbmQgaXRzIG5lYXJlc3QgYW5j
ZXN0b3Igd2l0aCB0aGUgZGVmYXVsdCB0b3VjaCBiZWhhdmlvciAoaW5jbHVkaW5nIGJvdGggdGhl
Ci0gICAgLy8gaGl0IHRlc3RlZCBlbGVtZW50IGFuZCB0aGUgZWxlbWVudCB3aXRoIHRoZSBkZWZh
dWx0IHRvdWNoIGJlaGF2aW9yKS4iCi0KLSAgICBib29sIGhhc0RlZmF1bHRUb3VjaEJlaGF2aW9y
ID0gaXNTY3JvbGxhYmxlT3ZlcmZsb3coc3R5bGUub3ZlcmZsb3dYKCkpIHx8IGlzU2Nyb2xsYWJs
ZU92ZXJmbG93KHN0eWxlLm92ZXJmbG93WSgpKTsKLSAgICBpZiAoaGFzRGVmYXVsdFRvdWNoQmVo
YXZpb3IpCi0gICAgICAgIGVmZmVjdGl2ZVRvdWNoQWN0aW9ucyA9IFJlbmRlclN0eWxlOjppbml0
aWFsVG91Y2hBY3Rpb25zKCk7Ci0KLSAgICBhdXRvIHRvdWNoQWN0aW9ucyA9IHN0eWxlLnRvdWNo
QWN0aW9ucygpOwotICAgIGlmICh0b3VjaEFjdGlvbnMgPT0gUmVuZGVyU3R5bGU6OmluaXRpYWxU
b3VjaEFjdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuIGVmZmVjdGl2ZVRvdWNoQWN0aW9uczsKLQot
ICAgIGlmIChlZmZlY3RpdmVUb3VjaEFjdGlvbnMuY29udGFpbnMoVG91Y2hBY3Rpb246Ok5vbmUp
KQotICAgICAgICByZXR1cm4geyBUb3VjaEFjdGlvbjo6Tm9uZSB9OwotCi0gICAgaWYgKGVmZmVj
dGl2ZVRvdWNoQWN0aW9ucy5jb250YWluc0FueSh7IFRvdWNoQWN0aW9uOjpBdXRvLCBUb3VjaEFj
dGlvbjo6TWFuaXB1bGF0aW9uIH0pKQotICAgICAgICByZXR1cm4gdG91Y2hBY3Rpb25zOwotCi0g
ICAgaWYgKHRvdWNoQWN0aW9ucy5jb250YWluc0FueSh7IFRvdWNoQWN0aW9uOjpBdXRvLCBUb3Vj
aEFjdGlvbjo6TWFuaXB1bGF0aW9uIH0pKQotICAgICAgICByZXR1cm4gZWZmZWN0aXZlVG91Y2hB
Y3Rpb25zOwotCi0gICAgYXV0byBzaGFyZWRUb3VjaEFjdGlvbnMgPSBlZmZlY3RpdmVUb3VjaEFj
dGlvbnMgJiB0b3VjaEFjdGlvbnM7Ci0gICAgaWYgKHNoYXJlZFRvdWNoQWN0aW9ucy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiB7IFRvdWNoQWN0aW9uOjpOb25lIH07Ci0KLSAgICByZXR1cm4g
c2hhcmVkVG91Y2hBY3Rpb25zOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0la
SU5HKQotc3RhdGljIGJvb2wgaGFzVGV4dENoaWxkKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17
Ci0gICAgZm9yIChhdXRvKiBjaGlsZCA9IGVsZW1lbnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXM8VGV4dD4oY2hpbGQp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZUZvclRleHRBdXRvc2l6aW5n
KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBpZiAo
IXNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCkgfHwgIXNldHRpbmdzKCkudGV4dEF1
dG9zaXppbmdVc2VzSWRlbXBvdGVudE1vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgQXV0b3NpemVTdGF0dXM6OnVwZGF0ZVN0YXR1cyhzdHlsZSk7Ci0gICAgaWYgKHN0eWxlLnRl
eHRTaXplQWRqdXN0KCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZs
b2F0IGluaXRpYWxTY2FsZSA9IGRvY3VtZW50KCkucGFnZSgpID8gZG9jdW1lbnQoKS5wYWdlKCkt
PmluaXRpYWxTY2FsZSgpIDogMTsKLSAgICBhdXRvIGFkanVzdExpbmVIZWlnaHRJZk5lZWRlZCA9
IFsmXShhdXRvIGNvbXB1dGVkRm9udFNpemUpIHsKLSAgICAgICAgYXV0byBsaW5lSGVpZ2h0ID0g
c3R5bGUuc3BlY2lmaWVkTGluZUhlaWdodCgpOwotICAgICAgICBjb25zdGV4cHIgc3RhdGljIHVu
c2lnbmVkIGVsaWdpYmxlRm9udFNpemUgPSAxMjsKLSAgICAgICAgaWYgKGNvbXB1dGVkRm9udFNp
emUgKiBpbml0aWFsU2NhbGUgPj0gZWxpZ2libGVGb250U2l6ZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjb25zdGV4cHIgc3RhdGljIGZsb2F0IGJvb3N0RmFjdG9yID0gMS4yNTsK
LSAgICAgICAgYXV0byBtaW5pbXVtTGluZUhlaWdodCA9IGJvb3N0RmFjdG9yICogY29tcHV0ZWRG
b250U2l6ZTsKLSAgICAgICAgaWYgKCFsaW5lSGVpZ2h0LmlzRml4ZWQoKSB8fCBsaW5lSGVpZ2h0
LnZhbHVlKCkgPj0gbWluaW11bUxpbmVIZWlnaHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgaWYgKEF1dG9zaXplU3RhdHVzOjpwcm9iYWJseUNvbnRhaW5zQVNtYWxsRml4ZWROdW1i
ZXJPZkxpbmVzKHN0eWxlKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBzdHlsZS5z
ZXRMaW5lSGVpZ2h0KHsgbWluaW11bUxpbmVIZWlnaHQsIEZpeGVkIH0pOwotICAgIH07Ci0KLSAg
ICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGF1
dG8gaW5pdGlhbENvbXB1dGVkRm9udFNpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXpl
KCk7Ci0gICAgYXV0byBzcGVjaWZpZWRGb250U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5zcGVjaWZp
ZWRTaXplKCk7Ci0gICAgYm9vbCBpc0NhbmRpZGF0ZSA9IHN0eWxlLmlzSWRlbXBvdGVudFRleHRB
dXRvc2l6aW5nQ2FuZGlkYXRlKCk7Ci0gICAgaWYgKCFpc0NhbmRpZGF0ZSAmJiBXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoaW5pdGlhbENvbXB1dGVkRm9udFNpemUsIHNwZWNpZmllZEZvbnRTaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhZGp1c3RlZEZvbnRTaXplID0g
QXV0b3NpemVTdGF0dXM6OmlkZW1wb3RlbnRUZXh0U2l6ZShmb250RGVzY3JpcHRpb24uc3BlY2lm
aWVkU2l6ZSgpLCBpbml0aWFsU2NhbGUpOwotICAgIGlmIChpc0NhbmRpZGF0ZSAmJiBXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwoaW5pdGlhbENvbXB1dGVkRm9udFNpemUsIGFkanVzdGVkRm9udFNp
emUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWhhc1RleHRDaGlsZChlbGVt
ZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9udERlc2NyaXB0aW9uLnNldENv
bXB1dGVkU2l6ZShpc0NhbmRpZGF0ZSA/IGFkanVzdGVkRm9udFNpemUgOiBzcGVjaWZpZWRGb250
U2l6ZSk7Ci0gICAgc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0
aW9uKSk7Ci0gICAgc3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNl
bGVjdG9yKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXN0b3JlIGNvbXB1dGVkIGxp
bmUgaGVpZ2h0IHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZWxl
bWVudCBpcyBub3QKLSAgICAvLyBhbiBpZGVtcG90ZW50IHRleHQgYXV0b3NpemluZyBjYW5kaWRh
dGU7IG90aGVyd2lzZSwgaWYgYW4gZWxlbWVudCB0aGF0IGlzIGEgdGV4dCBhdXRvc2l6aW5nIGNh
bmRpZGF0ZSBjb250YWlucwotICAgIC8vIGNoaWxkcmVuIHdoaWNoIGFyZSBub3QgYXV0b3NpemVk
LCB0aGUgbm9uLWF1dG9zaXplZCBjb250ZW50IHdpbGwgZW5kIHVwIHdpdGggYSBib29zdGVkIGxp
bmUgaGVpZ2h0LgotICAgIGlmIChpc0NhbmRpZGF0ZSkKLSAgICAgICAgYWRqdXN0TGluZUhlaWdo
dElmTmVlZGVkKGFkanVzdGVkRm9udFNpemUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5k
aWYKLQotdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHBhcmVudEJveFN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHls
ZSogdXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKQotewotICAgIC8vIElmIHRoZSBjb21wb3NlZCB0
cmVlIHBhcmVudCBoYXMgZGlzcGxheTpjb250ZW50cywgdGhlIHBhcmVudCBib3ggc3R5bGUgd2ls
bCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcGFyZW50IHN0eWxlLgotICAgIC8vIFdlIGRvbid0IGhh
dmUgaXQgd2hlbiByZXNvbHZpbmcgY29tcHV0ZWQgc3R5bGUgZm9yIGRpc3BsYXk6bm9uZSBzdWJ0
cmVlLiBVc2UgcGFyZW50IHN0eWxlIGZvciBhZGp1c3RtZW50cyBpbiB0aGF0IGNhc2UuCi0gICAg
aWYgKCFwYXJlbnRCb3hTdHlsZSkKLSAgICAgICAgcGFyZW50Qm94U3R5bGUgPSAmcGFyZW50U3R5
bGU7Ci0KLSAgICAvLyBDYWNoZSBvdXIgb3JpZ2luYWwgZGlzcGxheS4KLSAgICBzdHlsZS5zZXRP
cmlnaW5hbERpc3BsYXkoc3R5bGUuZGlzcGxheSgpKTsKLQotICAgIGlmIChzdHlsZS5kaXNwbGF5
KCkgPT0gRGlzcGxheVR5cGU6OkNvbnRlbnRzKQotICAgICAgICBhZGp1c3REaXNwbGF5Q29udGVu
dHNTdHlsZShzdHlsZSwgZWxlbWVudCk7Ci0KLSAgICBpZiAoc3R5bGUuZGlzcGxheSgpICE9IERp
c3BsYXlUeXBlOjpOb25lICYmIHN0eWxlLmRpc3BsYXkoKSAhPSBEaXNwbGF5VHlwZTo6Q29udGVu
dHMpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGhhdmUg
YSA8dGQ+IHRoYXQgc3BlY2lmaWVzIGEgZmxvYXQgcHJvcGVydHksIGluIHF1aXJrcyBtb2RlIHdl
IGp1c3QgZHJvcCB0aGUgZmxvYXQKLSAgICAgICAgICAgIC8vIHByb3BlcnR5LgotICAgICAgICAg
ICAgLy8gU2l0ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24gPHRk
PnMgYW5kIDx0YWJsZT5zLiBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQotICAgICAgICAgICAgLy8g
dGhlc2UgdGFncyB0byByZXRhaW4gdGhlaXIgZGlzcGxheSB0eXBlcy4KLSAgICAgICAgICAgIGlm
IChkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUodGRUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlLnNldERp
c3BsYXkoRGlzcGxheVR5cGU6OlRhYmxlQ2VsbCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxl
LnNldEZsb2F0aW5nKEZsb2F0OjpObyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczxI
VE1MVGFibGVFbGVtZW50PigqZWxlbWVudCkpCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlLnNl
dERpc3BsYXkoc3R5bGUuaXNEaXNwbGF5SW5saW5lVHlwZSgpID8gRGlzcGxheVR5cGU6OklubGlu
ZVRhYmxlIDogRGlzcGxheVR5cGU6OlRhYmxlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
dGhUYWcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0eWxlLndoaXRlU3BhY2UoKSA9PSBXaGl0
ZVNwYWNlOjpLSFRNTE5vV3JhcCkgewotICAgICAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0
IGlmIHdlIGFyZSByZWFsbHkgbm93cmFwcGluZyBvciBpZiB3ZSBzaG91bGQganVzdAotICAgICAg
ICAgICAgICAgICAgICAvLyB1c2Ugbm9ybWFsIGluc3RlYWQuIElmIHRoZSB3aWR0aCBvZiB0aGUg
Y2VsbCBpcyBmaXhlZCwgdGhlbgotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBhY3R1
YWxseSB1c2UgV2hpdGVTcGFjZTo6Tm9XcmFwLgotICAgICAgICAgICAgICAgICAgICBpZiAoc3R5
bGUud2lkdGgoKS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRX
aGl0ZVNwYWNlKFdoaXRlU3BhY2U6Ok5vcm1hbCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoV2hpdGVTcGFjZTo6
Tm9XcmFwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFRhYmxlcyBuZXZlciBzdXBwb3J0IHRoZSAtd2Via2l0LSogdmFsdWVzIGZvciB0ZXh0LWFs
aWduIGFuZCB3aWxsIHJlc2V0IGJhY2sgdG8gdGhlIGRlZmF1bHQuCi0gICAgICAgICAgICBpZiAo
aXM8SFRNTFRhYmxlRWxlbWVudD4oKmVsZW1lbnQpICYmIChzdHlsZS50ZXh0QWxpZ24oKSA9PSBU
ZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0IHx8IHN0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGln
bk1vZGU6OldlYktpdENlbnRlciB8fCBzdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2Rl
OjpXZWJLaXRSaWdodCkpCi0gICAgICAgICAgICAgICAgc3R5bGUuc2V0VGV4dEFsaWduKFRleHRB
bGlnbk1vZGU6OlN0YXJ0KTsKLQotICAgICAgICAgICAgLy8gRnJhbWVzIGFuZCBmcmFtZXNldHMg
bmV2ZXIgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRpb246YWJzb2x1dGUuIFRoaXMg
aXMgbmVjZXNzYXJ5IHRvCi0gICAgICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBhIHNpdGUg
dHJpZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRp
c3BsYXkuCi0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwg
ZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZXNldFRhZykpIHsKLSAgICAgICAgICAgICAgICBzdHls
ZS5zZXRQb3NpdGlvbihQb3NpdGlvblR5cGU6OlN0YXRpYyk7Ci0gICAgICAgICAgICAgICAgc3R5
bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6QmxvY2spOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBSdWJ5IHRleHQgZG9lcyBub3Qgc3VwcG9ydCBmbG9hdCBvciBwb3NpdGlvbi4g
VGhpcyBtaWdodCBjaGFuZ2Ugd2l0aCBldm9sdXRpb24gb2YgdGhlIHNwZWNpZmljYXRpb24uCi0g
ICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShydFRhZykpIHsKLSAgICAgICAgICAg
ICAgICBzdHlsZS5zZXRQb3NpdGlvbihQb3NpdGlvblR5cGU6OlN0YXRpYyk7Ci0gICAgICAgICAg
ICAgICAgc3R5bGUuc2V0RmxvYXRpbmcoRmxvYXQ6Ok5vKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gVXNlciBhZ2VudHMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgYSBydWxlIGluIHRo
ZWlyIHVzZXIgYWdlbnQgc3R5bGVzaGVldCB0aGF0IG1hdGNoZXMgdGggZWxlbWVudHMgdGhhdCBo
YXZlIGEgcGFyZW50Ci0gICAgICAgICAgICAvLyBub2RlIHdob3NlIGNvbXB1dGVkIHZhbHVlIGZv
ciB0aGUgJ3RleHQtYWxpZ24nIHByb3BlcnR5IGlzIGl0cyBpbml0aWFsIHZhbHVlLCB3aG9zZSBk
ZWNsYXJhdGlvbiBibG9jayBjb25zaXN0cyBvZgotICAgICAgICAgICAgLy8ganVzdCBhIHNpbmds
ZSBkZWNsYXJhdGlvbiB0aGF0IHNldHMgdGhlICd0ZXh0LWFsaWduJyBwcm9wZXJ0eSB0byB0aGUg
dmFsdWUgJ2NlbnRlcicuCi0gICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cu
b3JnL211bHRpcGFnZS9yZW5kZXJpbmcuaHRtbCNyZW5kZXJpbmcKLSAgICAgICAgICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKSAmJiAhc3R5bGUuaGFzRXhwbGljaXRseVNldFRleHRB
bGlnbigpICYmIHBhcmVudFN0eWxlLnRleHRBbGlnbigpID09IFJlbmRlclN0eWxlOjppbml0aWFs
VGV4dEFsaWduKCkpCi0gICAgICAgICAgICAgICAgc3R5bGUuc2V0VGV4dEFsaWduKFRleHRBbGln
bk1vZGU6OkNlbnRlcik7Ci0KLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGxl
Z2VuZFRhZykpCi0gICAgICAgICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6
QmxvY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWJzb2x1dGUvZml4ZWQgcG9zaXRpb25l
ZCBlbGVtZW50cywgZmxvYXRpbmcgZWxlbWVudHMgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50IG5l
ZWQgYmxvY2stbGlrZSBvdXRzaWRlIGRpc3BsYXkuCi0gICAgICAgIGlmIChzdHlsZS5oYXNPdXRP
ZkZsb3dQb3NpdGlvbigpIHx8IHN0eWxlLmlzRmxvYXRpbmcoKSB8fCAoZWxlbWVudCAmJiBlbGVt
ZW50LT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpID09IGVsZW1lbnQpKQotICAgICAgICAg
ICAgc3R5bGUuc2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLCBkb2N1bWVu
dCgpKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IERvbid0IHN1cHBvcnQgdGhpcyBtdXRhdGlvbiBm
b3IgcHNldWRvIHN0eWxlcyBsaWtlIGZpcnN0LWxldHRlciBvciBmaXJzdC1saW5lLCBzaW5jZSBp
dCdzIG5vdCBjb21wbGV0ZWx5Ci0gICAgICAgIC8vIGNsZWFyIGhvdyB0aGF0IHNob3VsZCB3b3Jr
LgotICAgICAgICBpZiAoc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmUgJiYg
c3R5bGUuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUgJiYgc3R5bGUud3JpdGluZ01vZGUo
KSAhPSBwYXJlbnRTdHlsZS53cml0aW5nTW9kZSgpKQotICAgICAgICAgICAgc3R5bGUuc2V0RGlz
cGxheShEaXNwbGF5VHlwZTo6SW5saW5lQmxvY2spOwotCi0gICAgICAgIC8vIEFmdGVyIHBlcmZv
cm1pbmcgdGhlIGRpc3BsYXkgbXV0YXRpb24sIGNoZWNrIHRhYmxlIHJvd3MuIFdlIGRvIG5vdCBo
b25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjpzdGlja3kgb24KLSAgICAgICAgLy8g
dGFibGUgcm93cyBvciBjZWxscy4gVGhpcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBmb3IgcG9zaXRp
b246cmVsYXRpdmUgaW4gQ1NTMi4xIChhbmQgY2F1c2VkIGEgY3Jhc2ggaW4gY29udGFpbmluZ0Js
b2NrKCkKLSAgICAgICAgLy8gb24gc29tZSBzaXRlcykuCi0gICAgICAgIGlmICgoc3R5bGUuZGlz
cGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZUhlYWRlckdyb3VwIHx8IHN0eWxlLmRpc3BsYXko
KSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3dHcm91cAotICAgICAgICAgICAgfHwgc3R5bGUuZGlz
cGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZUZvb3Rlckdyb3VwIHx8IHN0eWxlLmRpc3BsYXko
KSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3cpCi0gICAgICAgICAgICAmJiBzdHlsZS5wb3NpdGlv
bigpID09IFBvc2l0aW9uVHlwZTo6UmVsYXRpdmUpCi0gICAgICAgICAgICBzdHlsZS5zZXRQb3Np
dGlvbihQb3NpdGlvblR5cGU6OlN0YXRpYyk7Ci0KLSAgICAgICAgLy8gd3JpdGluZy1tb2RlIGRv
ZXMgbm90IGFwcGx5IHRvIHRhYmxlIHJvdyBncm91cHMsIHRhYmxlIGNvbHVtbiBncm91cHMsIHRh
YmxlIHJvd3MsIGFuZCB0YWJsZSBjb2x1bW5zLgotICAgICAgICAvLyBGSVhNRTogVGFibGUgY2Vs
bHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgcGVycGVuZGljdWxhciBvciBmbGlwcGVkIHdpdGgg
cmVzcGVjdCB0byB0aGUgdGFibGUsIHRob3VnaC4KLSAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXko
KSA9PSBEaXNwbGF5VHlwZTo6VGFibGVDb2x1bW4gfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3Bs
YXlUeXBlOjpUYWJsZUNvbHVtbkdyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlw
ZTo6VGFibGVGb290ZXJHcm91cAotICAgICAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERp
c3BsYXlUeXBlOjpUYWJsZUhlYWRlckdyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5
VHlwZTo6VGFibGVSb3cgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZVJv
d0dyb3VwCi0gICAgICAgICAgICB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRh
YmxlQ2VsbCkKLSAgICAgICAgICAgIHN0eWxlLnNldFdyaXRpbmdNb2RlKHBhcmVudFN0eWxlLndy
aXRpbmdNb2RlKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0
IGJsb2NrLWZsb3cgb24gZmxleGlibGUgYm94ZXMgeWV0LCBkaXNhbGxvdyBzZXR0aW5nCi0gICAg
ICAgIC8vIG9mIGJsb2NrLWZsb3cgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBUb3BUb0JvdHRvbVdy
aXRpbmdNb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDY0MTggLSBGbGV4aWJsZSBib3ggc3VwcG9ydC4KLSAgICAgICAgaWYgKHN0eWxlLndy
aXRpbmdNb2RlKCkgIT0gVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSAmJiAoc3R5bGUuZGlzcGxheSgp
ID09IERpc3BsYXlUeXBlOjpCb3ggfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJ
bmxpbmVCb3gpKQotICAgICAgICAgICAgc3R5bGUuc2V0V3JpdGluZ01vZGUoVG9wVG9Cb3R0b21X
cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1kaXNw
bGF5LyN0cmFuc2Zvcm1hdGlvbnMKLSAgICAgICAgLy8gIkEgcGFyZW50IHdpdGggYSBncmlkIG9y
IGZsZXggZGlzcGxheSB2YWx1ZSBibG9ja2lmaWVzIHRoZSBib3jigJlzIGRpc3BsYXkgdHlwZS4i
Ci0gICAgICAgIGlmIChwYXJlbnRCb3hTdHlsZS0+aXNEaXNwbGF5RmxleGlibGVPckdyaWRCb3go
KSkgewotICAgICAgICAgICAgc3R5bGUuc2V0RmxvYXRpbmcoRmxvYXQ6Ok5vKTsKLSAgICAgICAg
ICAgIHN0eWxlLnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZSwgZG9jdW1l
bnQoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIG91ciB6LWluZGV4
IHZhbHVlIGlzIG9ubHkgYXBwbGllZCBpZiB0aGUgb2JqZWN0IGlzIHBvc2l0aW9uZWQuCi0gICAg
aWYgKHN0eWxlLnBvc2l0aW9uKCkgPT0gUG9zaXRpb25UeXBlOjpTdGF0aWMgJiYgIXBhcmVudEJv
eFN0eWxlLT5pc0Rpc3BsYXlGbGV4aWJsZU9yR3JpZEJveCgpKQotICAgICAgICBzdHlsZS5zZXRI
YXNBdXRvWkluZGV4KCk7Ci0KLSAgICAvLyBBdXRvIHotaW5kZXggYmVjb21lcyAwIGZvciB0aGUg
cm9vdCBlbGVtZW50IGFuZCB0cmFuc3BhcmVudCBvYmplY3RzLiBUaGlzIHByZXZlbnRzCi0gICAg
Ly8gY2FzZXMgd2hlcmUgb2JqZWN0cyB0aGF0IHNob3VsZCBiZSBibGVuZGVkIGFzIGEgc2luZ2xl
IHVuaXQgZW5kIHVwIHdpdGggYSBub24tdHJhbnNwYXJlbnQKLSAgICAvLyBvYmplY3Qgd2VkZ2Vk
IGluIGJldHdlZW4gdGhlbS4gQXV0byB6LWluZGV4IGFsc28gYmVjb21lcyAwIGZvciBvYmplY3Rz
IHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21hc2tzL3JlZmxlY3Rpb25zLgotICAgIGlmIChzdHls
ZS5oYXNBdXRvWkluZGV4KCkpIHsKLSAgICAgICAgaWYgKChlbGVtZW50ICYmIGVsZW1lbnQtPmRv
Y3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkgPT0gZWxlbWVudCkKLSAgICAgICAgICAgIHx8IHN0
eWxlLm9wYWNpdHkoKSA8IDEuMGYKLSAgICAgICAgICAgIHx8IHN0eWxlLmhhc1RyYW5zZm9ybVJl
bGF0ZWRQcm9wZXJ0eSgpCi0gICAgICAgICAgICB8fCBzdHlsZS5oYXNNYXNrKCkKLSAgICAgICAg
ICAgIHx8IHN0eWxlLmNsaXBQYXRoKCkKLSAgICAgICAgICAgIHx8IHN0eWxlLmJveFJlZmxlY3Qo
KQotICAgICAgICAgICAgfHwgc3R5bGUuaGFzRmlsdGVyKCkKLSNpZiBFTkFCTEUoRklMVEVSU19M
RVZFTF8yKQotICAgICAgICAgICAgfHwgc3R5bGUuaGFzQmFja2Ryb3BGaWx0ZXIoKQotI2VuZGlm
Ci0gICAgICAgICAgICB8fCBzdHlsZS5oYXNCbGVuZE1vZGUoKQotICAgICAgICAgICAgfHwgc3R5
bGUuaGFzSXNvbGF0aW9uKCkKLSAgICAgICAgICAgIHx8IHN0eWxlLnBvc2l0aW9uKCkgPT0gUG9z
aXRpb25UeXBlOjpTdGlja3kKLSAgICAgICAgICAgIHx8IHN0eWxlLnBvc2l0aW9uKCkgPT0gUG9z
aXRpb25UeXBlOjpGaXhlZAotICAgICAgICAgICAgfHwgc3R5bGUud2lsbENoYW5nZUNyZWF0ZXNT
dGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgICAgIHN0eWxlLnNldFpJbmRleCgwKTsKLSAgICB9
Ci0KLSAgICBpZiAoZWxlbWVudCkgewotICAgICAgICAvLyBUZXh0YXJlYSBjb25zaWRlcnMgb3Zl
cmZsb3cgdmlzaWJsZSBhcyBhdXRvLgotICAgICAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVu
dD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1goc3R5bGUub3Zl
cmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlZpc2libGUgPyBPdmVyZmxvdzo6QXV0byA6IHN0eWxlLm92
ZXJmbG93WCgpKTsKLSAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShzdHlsZS5vdmVyZmxv
d1koKSA9PSBPdmVyZmxvdzo6VmlzaWJsZSA/IE92ZXJmbG93OjpBdXRvIDogc3R5bGUub3ZlcmZs
b3dZKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGlzYWxsb3cgLXdlYmtpdC11c2VyLW1v
ZGlmeSBvbiA6cHNldWRvIGFuZCA6OnBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgaWYgKCFlbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpLmlzTnVsbCgpKQotICAgICAgICAgICAgc3R5bGUuc2V0VXNl
ck1vZGlmeShVc2VyTW9kaWZ5OjpSZWFkT25seSk7Ci0KLSAgICAgICAgaWYgKGlzPEhUTUxNYXJx
dWVlRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBGb3Igbm93LCA8bWFycXVl
ZT4gcmVxdWlyZXMgYW4gb3ZlcmZsb3cgY2xpcCB0byB3b3JrIHByb3Blcmx5LgotICAgICAgICAg
ICAgc3R5bGUuc2V0T3ZlcmZsb3dYKE92ZXJmbG93OjpIaWRkZW4pOwotICAgICAgICAgICAgc3R5
bGUuc2V0T3ZlcmZsb3dZKE92ZXJmbG93OjpIaWRkZW4pOwotCi0gICAgICAgICAgICBib29sIGlz
VmVydGljYWwgPSBzdHlsZS5tYXJxdWVlRGlyZWN0aW9uKCkgPT0gTWFycXVlZURpcmVjdGlvbjo6
VXAgfHwgc3R5bGUubWFycXVlZURpcmVjdGlvbigpID09IE1hcnF1ZWVEaXJlY3Rpb246OkRvd247
Ci0gICAgICAgICAgICAvLyBNYWtlIGhvcml6b250YWwgbWFycXVlZXMgbm90IHdyYXAuCi0gICAg
ICAgICAgICBpZiAoIWlzVmVydGljYWwpIHsKLSAgICAgICAgICAgICAgICBzdHlsZS5zZXRXaGl0
ZVNwYWNlKFdoaXRlU3BhY2U6Ok5vV3JhcCk7Ci0gICAgICAgICAgICAgICAgc3R5bGUuc2V0VGV4
dEFsaWduKFRleHRBbGlnbk1vZGU6OlN0YXJ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IC8vIEFwcGFyZW50bHkgdGhpcyBpcyB0aGUgZXhwZWN0ZWQgbGVnYWN5IGJlaGF2aW9yLgotICAg
ICAgICAgICAgaWYgKGlzVmVydGljYWwgJiYgc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAg
ICAgICAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aCgyMDAsIEZpeGVkKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoZG9lc05vdEluaGVyaXRUZXh0RGVjb3JhdGlvbihzdHlsZSwg
ZWxlbWVudCkpCi0gICAgICAgIHN0eWxlLnNldFRleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxl
LnRleHREZWNvcmF0aW9uKCkpOwotICAgIGVsc2UKLSAgICAgICAgc3R5bGUuYWRkVG9UZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdChzdHlsZS50ZXh0RGVjb3JhdGlvbigpKTsKLQotICAgIC8vIElmIGVp
dGhlciBvdmVyZmxvdyB2YWx1ZSBpcyBub3QgdmlzaWJsZSwgY2hhbmdlIHRvIGF1dG8uCi0gICAg
aWYgKHN0eWxlLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpWaXNpYmxlICYmIHN0eWxlLm92ZXJm
bG93WSgpICE9IE92ZXJmbG93OjpWaXNpYmxlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBPbmNlIHdl
IGltcGxlbWVudCBwYWdpbmF0aW9uIGNvbnRyb2xzLCBvdmVyZmxvdy14IHNob3VsZCBkZWZhdWx0
IHRvIGhpZGRlbgotICAgICAgICAvLyBpZiBvdmVyZmxvdy15IGlzIHNldCB0byAtd2Via2l0LXBh
Z2VkLXggb3IgLXdlYmtpdC1wYWdlLXkuIEZvciBub3csIHdlJ2xsIGxldCBpdAotICAgICAgICAv
LyBkZWZhdWx0IHRvIGF1dG8gc28gd2UgY2FuIGF0IGxlYXN0IHNjcm9sbCB0aHJvdWdoIHRoZSBw
YWdlcy4KLSAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dYKE92ZXJmbG93OjpBdXRvKTsKLSAgICB9
IGVsc2UgaWYgKHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpWaXNpYmxlICYmIHN0eWxl
Lm92ZXJmbG93WCgpICE9IE92ZXJmbG93OjpWaXNpYmxlKQotICAgICAgICBzdHlsZS5zZXRPdmVy
Zmxvd1koT3ZlcmZsb3c6OkF1dG8pOwotCi0gICAgLy8gQ2FsbCBzZXRTdHlsZXNGb3JQYWdpbmF0
aW9uTW9kZSgpIGlmIGEgcGFnaW5hdGlvbiBtb2RlIGlzIHNldCBmb3IgYW55IG5vbi1yb290IGVs
ZW1lbnRzLiBJZiB0aGVzZQotICAgIC8vIHN0eWxlcyBhcmUgc3BlY2lmaWVkIG9uIGEgcm9vdCBl
bGVtZW50LCB0aGVuIHRoZXkgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW4KLSAgICAvLyBTdHlsZTo6
Y3JlYXRlRm9yRG9jdW1lbnQoKS4KLSAgICBpZiAoKHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJm
bG93OjpQYWdlZFggfHwgc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlBhZ2VkWSkgJiYg
IShlbGVtZW50ICYmIChlbGVtZW50LT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoYm9keVRhZykpKSkKLSAgICAgICAgc3R5bGUuc2V0Q29sdW1uU3R5bGVzRnJvbVBh
Z2luYXRpb25Nb2RlKFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUoc3R5bGUp
KTsKLQotICAgIC8vIFRhYmxlIHJvd3MsIHNlY3Rpb25zIGFuZCB0aGUgdGFibGUgaXRzZWxmIHdp
bGwgc3VwcG9ydCBvdmVyZmxvdzpoaWRkZW4gYW5kIHdpbGwgaWdub3JlIHNjcm9sbC9hdXRvLgot
ICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25zIHdpbGwgc3VwcG9ydCBhdXRv
IGFuZCBzY3JvbGwuCi0gICAgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFi
bGUgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZQotICAgICAg
ICB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlUm93R3JvdXAgfHwgc3R5
bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZVJvdykgewotICAgICAgICBpZiAoc3R5
bGUub3ZlcmZsb3dYKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUgJiYgc3R5bGUub3ZlcmZsb3dYKCkg
IT0gT3ZlcmZsb3c6OkhpZGRlbikKLSAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WChPdmVy
Zmxvdzo6VmlzaWJsZSk7Ci0gICAgICAgIGlmIChzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxv
dzo6VmlzaWJsZSAmJiBzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6SGlkZGVuKQotICAg
ICAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dZKE92ZXJmbG93OjpWaXNpYmxlKTsKLSAgICB9Ci0K
LSAgICAvLyBNZW51bGlzdHMgc2hvdWxkIGhhdmUgdmlzaWJsZSBvdmVyZmxvdwotICAgIGlmIChz
dHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLnNldE92
ZXJmbG93WChPdmVyZmxvdzo6VmlzaWJsZSk7Ci0gICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShP
dmVyZmxvdzo6VmlzaWJsZSk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElO
R19UT1VDSCkKLSAgICAvLyBUb3VjaCBvdmVyZmxvdyBzY3JvbGxpbmcgY3JlYXRlcyBhIHN0YWNr
aW5nIGNvbnRleHQuCi0gICAgaWYgKHN0eWxlLmhhc0F1dG9aSW5kZXgoKSAmJiBzdHlsZS51c2VU
b3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgJiYgKGlzU2Nyb2xsYWJsZU92ZXJmbG93KHN0eWxlLm92
ZXJmbG93WCgpKSB8fCBpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS5vdmVyZmxvd1koKSkpKQot
ICAgICAgICBzdHlsZS5zZXRaSW5kZXgoMCk7Ci0jZW5kaWYKLQotICAgIC8vIEN1bGwgb3V0IGFu
eSB1c2VsZXNzIGxheWVycyBhbmQgYWxzbyByZXBlYXQgcGF0dGVybnMgaW50byBhZGRpdGlvbmFs
IGxheWVycy4KLSAgICBzdHlsZS5hZGp1c3RCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgc3R5bGUu
YWRqdXN0TWFza0xheWVycygpOwotCi0gICAgLy8gRG8gdGhlIHNhbWUgZm9yIGFuaW1hdGlvbnMg
YW5kIHRyYW5zaXRpb25zLgotICAgIHN0eWxlLmFkanVzdEFuaW1hdGlvbnMoKTsKLSAgICBzdHls
ZS5hZGp1c3RUcmFuc2l0aW9ucygpOwotCi0gICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFy
Z2lucyBnZXQgYWRkZWQgdG8gY29udHJvbHMgYmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQg
dGhlIHN0eWxlLCBzaW5jZSB0aGUgdGhlbWUgd2lsbAotICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBo
ZWlnaHRzL3dpZHRocy4KLSAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVu
dCkgJiYgc3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXplKCkgPj0gMTEpIHsKLSAgICAgICAgLy8g
RG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2ln
bmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdlcyBhcmUsCi0gICAgICAgIC8vIHNvIHdlIGhhdmUg
dG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5
IHNpemVkLgotICAgICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSB8fCAh
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLmlzSW1hZ2VCdXR0b24oKSkKLSAg
ICAgICAgICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIExl
dCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KLSAg
ICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkuYWRqdXN0U3R5bGUoKnRoaXMsIHN0eWxlLCBlbGVtZW50LCB1c2VyQWdlbnRBcHBlYXJh
bmNlU3R5bGUpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxl
LCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KLSAgICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUo
UHNldWRvSWQ6OkZpcnN0TGV0dGVyKSkKLSAgICAgICAgc3R5bGUuc2V0VW5pcXVlKCk7Ci0KLSAg
ICAvLyBGSVhNRTogd2hlbiBkcm9wcGluZyB0aGUgLXdlYmtpdCBwcmVmaXggb24gdHJhbnNmb3Jt
LXN0eWxlLCB3ZSBzaG91bGQgYWxzbyBoYXZlIG9wYWNpdHkgPCAxIGNhdXNlIGZsYXR0ZW5pbmcu
Ci0gICAgaWYgKHN0eWxlLnByZXNlcnZlczNEKCkgJiYgKHN0eWxlLm92ZXJmbG93WCgpICE9IE92
ZXJmbG93OjpWaXNpYmxlCi0gICAgICAgIHx8IHN0eWxlLm92ZXJmbG93WSgpICE9IE92ZXJmbG93
OjpWaXNpYmxlCi0gICAgICAgIHx8IHN0eWxlLmhhc0NsaXAoKQotICAgICAgICB8fCBzdHlsZS5j
bGlwUGF0aCgpCi0gICAgICAgIHx8IHN0eWxlLmhhc0ZpbHRlcigpCi0jaWYgRU5BQkxFKEZJTFRF
UlNfTEVWRUxfMikKLSAgICAgICAgfHwgc3R5bGUuaGFzQmFja2Ryb3BGaWx0ZXIoKQotI2VuZGlm
Ci0gICAgICAgIHx8IHN0eWxlLmhhc0JsZW5kTW9kZSgpKSkKLSAgICAgICAgc3R5bGUuc2V0VHJh
bnNmb3JtU3R5bGUzRChUcmFuc2Zvcm1TdHlsZTNEOjpGbGF0KTsKLQotICAgIGlmIChpczxTVkdF
bGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgYWRqdXN0U1ZHRWxlbWVudFN0eWxlKGRvd25jYXN0
PFNWR0VsZW1lbnQ+KCplbGVtZW50KSwgc3R5bGUpOwotCi0gICAgLy8gSWYgdGhlIGluaGVyaXRl
ZCB2YWx1ZSBvZiBqdXN0aWZ5LWl0ZW1zIGluY2x1ZGVzIHRoZSAnbGVnYWN5JyBrZXl3b3JkIChw
bHVzICdsZWZ0JywgJ3JpZ2h0JyBvcgotICAgIC8vICdjZW50ZXInKSwgJ2xlZ2FjeScgY29tcHV0
ZXMgdG8gdGhlIHRoZSBpbmhlcml0ZWQgdmFsdWUuIE90aGVyd2lzZSwgJ2F1dG8nIGNvbXB1dGVz
IHRvICdub3JtYWwnLgotICAgIGlmIChwYXJlbnRCb3hTdHlsZS0+anVzdGlmeUl0ZW1zKCkucG9z
aXRpb25UeXBlKCkgPT0gSXRlbVBvc2l0aW9uVHlwZTo6TGVnYWN5ICYmIHN0eWxlLmp1c3RpZnlJ
dGVtcygpLnBvc2l0aW9uKCkgPT0gSXRlbVBvc2l0aW9uOjpMZWdhY3kpCi0gICAgICAgIHN0eWxl
LnNldEp1c3RpZnlJdGVtcyhwYXJlbnRCb3hTdHlsZS0+anVzdGlmeUl0ZW1zKCkpOwotCi0jaWYg
RU5BQkxFKFBPSU5URVJfRVZFTlRTKQotICAgIHN0eWxlLnNldEVmZmVjdGl2ZVRvdWNoQWN0aW9u
cyhjb21wdXRlRWZmZWN0aXZlVG91Y2hBY3Rpb25zKHN0eWxlLCBwYXJlbnRTdHlsZS5lZmZlY3Rp
dmVUb3VjaEFjdGlvbnMoKSkpOwotI2VuZGlmCi0KLSAgICBpZiAoZWxlbWVudCkgewotI2lmIEVO
QUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgICAgIGFkanVzdFJlbmRlclN0eWxlRm9yVGV4dEF1
dG9zaXppbmcoc3R5bGUsICplbGVtZW50KTsKLSNlbmRpZgotICAgICAgICBhZGp1c3RSZW5kZXJT
dHlsZUZvclNpdGVTcGVjaWZpY1F1aXJrcyhzdHlsZSwgKmVsZW1lbnQpOwotICAgIH0KLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZUZvclNpdGVTcGVjaWZpY1F1aXJr
cyhSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgaWYg
KGRvY3VtZW50KCkucXVpcmtzKCkubmVlZHNHTWFpbE92ZXJmbG93U2Nyb2xsUXVpcmsoKSkgewot
ICAgICAgICAvLyBUaGlzIHR1cm5zIHNpZGViYXIgc2Nyb2xsYWJsZSB3aXRob3V0IG1vdXNlIG1v
dmUgZXZlbnQuCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiByb2xl
VmFsdWUoIm5hdmlnYXRpb24iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgICAgIGlmIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6SGlkZGVuICYmIGVsZW1l
bnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihyb2xlQXR0cikgPT0gcm9sZVZhbHVl
KQotICAgICAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dZKE92ZXJmbG93OjpBdXRvKTsKLSAgICB9
Ci0gICAgaWYgKGRvY3VtZW50KCkucXVpcmtzKCkubmVlZHNZb3VUdWJlT3ZlcmZsb3dTY3JvbGxR
dWlyaygpKSB7Ci0gICAgICAgIC8vIFRoaXMgdHVybnMgc2lkZWJhciBzY3JvbGxhYmxlIHdpdGhv
dXQgaG92ZXIuCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBpZFZh
bHVlKCJndWlkZS1pbm5lci1jb250ZW50IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkhpZGRlbiAm
JiBlbGVtZW50LmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gaWRWYWx1ZSkKLSAgICAgICAgICAg
IHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6QXV0byk7Ci0gICAgfQotfQotCi0KIFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlPj4gU3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQo
Y29uc3QgRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCiB7CiAgICAg
cmV0dXJuIHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIFBzZXVkb0lkOjpOb25l
LCBydWxlc1RvSW5jbHVkZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA4NDlk
NTY5ODk3MS4uOTNlNWM0MzU4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAt
MTMzLDcgKzEzMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE92ZXJyaWRlRG9jdW1lbnRFbGVt
ZW50U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IG1fb3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRT
dHlsZSA9IHN0eWxlOyB9CiAKICAgICB2b2lkIGFkZEN1cnJlbnRTVkdGb250RmFjZVJ1bGVzKCk7
Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0U1ZHRWxlbWVudFN0eWxlKGNvbnN0IFNWR0VsZW1lbnQm
LCBSZW5kZXJTdHlsZSYpOwogCiAgICAgdm9pZCBzZXROZXdTdGF0ZVdpdGhFbGVtZW50KGNvbnN0
IEVsZW1lbnQmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZSosIEtleWZy
YW1lVmFsdWUmKTsKQEAgLTE4Myw5ICsxODIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckNh
Y2hlZERlY2xhcmF0aW9uc0FmZmVjdGVkQnlWaWV3cG9ydFVuaXRzKCk7CiAKIHByaXZhdGU6Ci0g
ICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudEJveFN0eWxlLCBjb25zdCBF
bGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIHVzZXJBZ2VudFN0eWxlKTsKLSAgICB2b2lkIGFk
anVzdFJlbmRlclN0eWxlRm9yU2l0ZVNwZWNpZmljUXVpcmtzKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCYpOwotCiAgICAgZW51bSBjbGFzcyBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUg
eyBZZXMsIE5vIH07CiAgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNo
UmVzdWx0JiwgY29uc3QgRWxlbWVudCYsIFVzZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSA9IFVz
ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZTo6WWVzKTsKIApAQCAtMTk1LDggKzE5MSw2IEBAIHBy
aXZhdGU6CiAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7CiAKIHB1Ymxp
YzoKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPj4g
UGVuZGluZ0ltYWdlUHJvcGVydHlNYXA7Ci0KICAgICBjbGFzcyBTdGF0ZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBTdGF0ZSgpIHsgfQpAQCAtMjM3LDggKzIzMSw2IEBAIHB1YmxpYzoKIAogICAg
IEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVy
biBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KIAotICAgIGJvb2wgYWRqdXN0UmVuZGVyU3R5
bGVGb3JUZXh0QXV0b3NpemluZyhSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQmKTsKLQogcHJp
dmF0ZToKICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAppbmRleCBiMTQ2Y2FjZTE1NC4uY2YzNzhiMGIyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApA
QCAtMTEzLDYgKzExMyw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJT
dG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgi
CisjaW5jbHVkZSAiU3R5bGVBZGp1c3Rlci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3ViZnJhbWVMb2FkZXIuaCIKQEAg
LTMwNjEsMTMgKzMwNjIsMTIgQEAgdm9pZCBQYWdlOjpyZWNvbXB1dGVUZXh0QXV0b1NpemluZ0lu
QWxsRnJhbWVzKCkKICAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBhdXRvJiBkb2N1bWVudCA9ICpmcmFtZS0+ZG9jdW1lbnQoKTsK
LSAgICAgICAgaWYgKCFkb2N1bWVudC5yZW5kZXJWaWV3KCkgfHwgIWRvY3VtZW50LnN0eWxlU2Nv
cGUoKS5yZXNvbHZlcklmRXhpc3RzKCkpCisgICAgICAgIGlmICghZG9jdW1lbnQucmVuZGVyVmll
dygpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byYgc3R5bGVSZXNvbHZl
ciA9IGRvY3VtZW50LnN0eWxlU2NvcGUoKS5yZXNvbHZlcigpOwogICAgICAgICBmb3IgKGF1dG8m
IHJlbmRlcmVyIDogZGVzY2VuZGFudHNPZlR5cGU8UmVuZGVyRWxlbWVudD4oKmRvY3VtZW50LnJl
bmRlclZpZXcoKSkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIu
ZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBuZWVkc0xheW91dCA9IHN0eWxlUmVz
b2x2ZXIuYWRqdXN0UmVuZGVyU3R5bGVGb3JUZXh0QXV0b3NpemluZyhyZW5kZXJlci5tdXRhYmxl
U3R5bGUoKSwgKmVsZW1lbnQpOworICAgICAgICAgICAgICAgIGF1dG8gbmVlZHNMYXlvdXQgPSBT
dHlsZTo6QWRqdXN0ZXI6OmFkanVzdEZvclRleHRBdXRvc2l6aW5nKHJlbmRlcmVyLm11dGFibGVT
dHlsZSgpLCAqZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzTGF5b3V0KQogICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dCgpOwogICAgICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggOWIyZGZlY2M1
ODYuLjdiODNhMThlOGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHAKQEAgLTc4LDcgKzc4LDcgQEAgUmVuZGVyVGhlbWU6OlJlbmRlclRoZW1lKCkKIHsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBSZW5k
ZXJTdHlsZSogdXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKQordm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBSZW5kZXJTdHlsZSogdXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKQogewogICAgIC8vIEZvcmNl
IGlubGluZSBhbmQgdGFibGUgZGlzcGxheSBzdHlsZXMgdG8gYmUgaW5saW5lLWJsb2NrIChleGNl
cHQgZm9yIHRhYmxlLSB3aGljaCBpcyBibG9jaykKICAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5
bGUuYXBwZWFyYW5jZSgpOwpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
CiAgICAgICAgICAgICBwYXJ0ID0gTWVudWxpc3RCdXR0b25QYXJ0OwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICAgICAgICAgIGFkanVzdFRleHRG
aWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgICAgIGFk
anVzdFRleHRGaWVsZFN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgICAgIEZBTExUSFJP
VUdIOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgc3R5bGUuc2V0QXBwZWFyYW5jZShO
b0NvbnRyb2xQYXJ0KTsKQEAgLTIwMCw5ICsyMDAsOSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
CiAgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKICNpZiAhVVNFKE5FV19USEVNRSkK
ICAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdENoZWNrYm94U3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0
Q2hlY2tib3hTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAg
ICAgIHJldHVybiBhZGp1c3RSYWRpb1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFJhZGlvU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAg
IGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgogI2lmIEVO
QUJMRShJTlBVVF9UWVBFX0NPTE9SKQpAQCAtMjEwLDE4ICsyMTAsMTggQEAgdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLAogI2VuZGlmCiAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKICAgICBjYXNl
IEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RCdXR0b25TdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RCdXR0b25TdHlsZShz
dHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgotICAgICAgICBy
ZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVs
ZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoc3R5bGUs
IGVsZW1lbnQpOwogI2VuZGlmCiAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgotICAgICAgICByZXR1
cm4gYWRqdXN0VGV4dEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwor
ICAgICAgICByZXR1cm4gYWRqdXN0VGV4dEZpZWxkU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAg
IGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0VGV4dEFyZWFTdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RUZXh0
QXJlYVN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAg
ICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1l
bnQpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZSwgZWxlbWVudCk7
CiAgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAg
cmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNh
c2UgTWVkaWFQbGF5QnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVQYXJ0Ogog
ICAgIGNhc2UgTWVkaWFUaW1lUmVtYWluaW5nUGFydDoKQEAgLTIyOSw1NCArMjI5LDU0IEBAIHZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwKICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25Q
YXJ0OgogICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhVm9sdW1l
U2xpZGVyQ29udGFpbmVyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lZGlhQ29udHJvbFN0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVz
dE1lZGlhQ29udHJvbFN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICBjYXNlIE1lZGlhU2xpZGVy
UGFydDoKICAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIE1lZGlhRnVs
bFNjcmVlblZvbHVtZVNsaWRlclBhcnQ6CiAgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoK
ICAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRl
clRyYWNrU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1
cm4gYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBTbGlk
ZXJUaHVtYkhvcml6b250YWxQYXJ0OgogICAgIGNhc2UgU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQ6
Ci0gICAgICAgIHJldHVybiBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5
bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAgICAgICByZXR1cm4g
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7Cisg
ICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAg
ICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1l
bnQpOworICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShz
dHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0OgotICAg
ICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQp
OworICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRT
dHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25Q
YXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgUHJv
Z3Jlc3NCYXJQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShzdHls
ZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RQcm9ncmVz
c0JhclN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKICAg
ICBjYXNlIE1ldGVyUGFydDoKICAgICBjYXNlIFJlbGV2YW5jeUxldmVsSW5kaWNhdG9yUGFydDoK
ICAgICBjYXNlIENvbnRpbnVvdXNDYXBhY2l0eUxldmVsSW5kaWNhdG9yUGFydDoKICAgICBjYXNl
IERpc2NyZXRlQ2FwYWNpdHlMZXZlbEluZGljYXRvclBhcnQ6CiAgICAgY2FzZSBSYXRpbmdMZXZl
bEluZGljYXRvclBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1ldGVyU3R5bGUo
c3R5bGUsIGVsZW1lbnQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAg
ICAgY2FzZSBJbWFnZUNvbnRyb2xzQnV0dG9uUGFydDoKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICBjYXNlIENhcHNMb2NrSW5kaWNhdG9yUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdENh
cHNMb2NrSW5kaWNhdG9yU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAg
ICAgICByZXR1cm4gYWRqdXN0Q2Fwc0xvY2tJbmRpY2F0b3JTdHlsZShzdHlsZSwgZWxlbWVudCk7
CiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKICAgICBjYXNlIEFwcGxlUGF5QnV0dG9uUGFydDoKLSAg
ICAgICAgcmV0dXJuIGFkanVzdEFwcGxlUGF5QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0QXBwbGVQYXlCdXR0b25TdHlsZShz
dHlsZSwgZWxlbWVudCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQog
ICAgIGNhc2UgQXR0YWNobWVudFBhcnQ6CiAgICAgY2FzZSBCb3JkZXJsZXNzQXR0YWNobWVudFBh
cnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RBdHRhY2htZW50U3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0QXR0YWNobWVudFN0eWxlKHN0
eWxlLCBlbGVtZW50KTsKICNlbmRpZgogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAg
IGNhc2UgTGlzdEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RMaXN0QnV0dG9uU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0
TGlzdEJ1dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICNlbmRpZgogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwpAQCAtOTI2LDcgKzkyNiw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzRGVm
YXVsdChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiAKICNpZiAhVVNFKE5FV19USEVNRSkK
IAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdENoZWNrYm94U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50
KikgY29uc3QKIHsKICAgICAvLyBBIHN1bW1hcnkgb2YgdGhlIHJ1bGVzIGZvciBjaGVja2JveCBk
ZXNpZ25lZCB0byBtYXRjaCBXaW5JRToKICAgICAvLyB3aWR0aC9oZWlnaHQgLSBob25vcmVkIChX
aW5JRSBhY3R1YWxseSBzY2FsZXMgaXRzIGNvbnRyb2wgZm9yIHNtYWxsIHdpZHRocywgYnV0IGxl
dHMgaXQgb3ZlcmZsb3cgZm9yIHNtYWxsIGhlaWdodHMuKQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RSYWRpb1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNv
bnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWdu
ZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUg
YWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0
IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTk2MCw3ICs5NjAsNyBAQCB2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEVsZQogICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dAogewogICAgIC8vIE1vc3QgcGxhdGZvcm1zIHdpbGwgY29tcGxldGVseSBob25vciBhbGwgQ1NT
LCBhbmQgc28gd2UgaGF2ZSBubyBuZWVkIHRvCiAgICAgLy8gYWRqdXN0IHRoZSBzdHlsZSBhdCBh
bGwgYnkgZGVmYXVsdC4gV2Ugd2lsbCBzdGlsbCBhbGxvdyB0aGUgdGhlbWUgYSBjcmFjawpAQCAt
OTY4LDI2ICs5NjgsMjYgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWwKICAgICBzZXRCdXR0b25T
aXplKHN0eWxlKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNv
bnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5
bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVh
U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVM
aXN0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAogI2lm
IEVOQUJMRShNRVRFUl9FTEVNRU5UKQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZXRlclN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZShSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxs
cHRyKTsKIH0KQEAgLTEwMDksNyArMTAwOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50TWV0
ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjCiAK
ICNlbmRpZiAvLyBNRVRFUl9FTEVNRU5UCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENhcHNM
b2NrSW5kaWNhdG9yU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDYXBzTG9ja0luZGljYXRvclN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKQEAgLTEwMjAs
NyArMTAyMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwKIAogI2lmIEVOQUJMRShBVFRBQ0hN
RU5UX0VMRU1FTlQpCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEF0dGFjaG1lbnRTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdEF0dGFjaG1lbnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdAogewogfQogCkBAIC0xMDQ5LDcgKzEwNDksNyBAQCBTdHJpbmcgUmVuZGVy
VGhlbWU6OmRhdGFMaXN0U3R5bGVTaGVldCgpIGNvbnN0CiAgICAgcmV0dXJuICJkYXRhbGlzdCB7
IGRpc3BsYXk6IG5vbmU7IH0iX3M7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdExpc3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCkBAIC0xMTUwLDcgKzExNTAsNyBAQCBT
ZWNvbmRzIFJlbmRlclRoZW1lOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzJikgY29uc3QKICAgICByZXR1cm4gMF9zOwogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNv
bnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJT
dHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCkBAIC0xMTY5
LDE5ICsxMTY5LDE5IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnNob3VsZEhhdmVDYXBzTG9ja0luZGlj
YXRvcihjb25zdCBIVE1MSW5wdXRFbGVtZW50JikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVkaWFDb250cm9sU3R5bGUoUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CiB7CiAgICAgYWRqdXN0U2xpZGVyVGh1bWJTaXplKHN0eWxlLCBlbGVtZW50KTsK
IH0KQEAgLTExOTAsMjMgKzExOTAsMjMgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNv
bnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggMTlhY2YwYmIzZTIuLjc3YThjMzkyMzVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaApAQCAtNjUsNyArNjUsNyBA
QCBwdWJsaWM6CiAgICAgLy8gbWV0cmljcyBhbmQgZGVmYXVsdHMgZ2l2ZW4gdGhlIGNvbnRlbnRz
IG9mIHRoZSBzdHlsZS4gIFRoaXMgaW5jbHVkZXMgc29waGlzdGljYXRlZCBvcGVyYXRpb25zIGxp
a2UKICAgICAvLyBzZWxlY3Rpb24gb2YgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udCwg
dGhlIGRpc2FibGluZyBvZiBhcHBlYXJhbmNlIHdoZW4gY2VydGFpbiBvdGhlciBwcm9wZXJ0aWVz
IGxpa2UKICAgICAvLyAiYm9yZGVyIiBhcmUgc2V0LCBvciBpZiB0aGUgYXBwZWFyYW5jZSBpcyBu
b3Qgc3VwcG9ydGVkIGJ5IHRoZSB0aGVtZS4KLSAgICB2b2lkIGFkanVzdFN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSog
dXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKTsKKyAgICB2b2lkIGFkanVzdFN0eWxlKFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJh
bmNlU3R5bGUpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHBhaW50IHRoZSB3
aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmplY3QuICBBIHdpZGdldCdzIGZv
cmVncm91bmQsIGUuZy4sIHRoZQogICAgIC8vIHRleHQgb2YgYSBidXR0b24sIGlzIGFsd2F5cyBy
ZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0c2VsZi4gIFRoZSBib29sZWFuIHJldHVybiB2YWx1ZSBp
bmRpY2F0ZXMKQEAgLTI4NSwxOSArMjg1LDE5IEBAIHByb3RlY3RlZDoKIAogI2lmICFVU0UoTkVX
X1RIRU1FKQogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNr
Ym94U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxl
JikgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAjZW5kaWYKIApAQCAtMzA1LDczICszMDUsNzMgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNv
bnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5
bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoUmVu
ZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50
VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxv
YXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVh
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
RmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1l
bnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdERlY29yYXRp
b25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxp
c3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTcXVhcmVCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxF
KE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdENhcHNMb2NrSW5kaWNhdG9yU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDYXBz
TG9ja0luZGljYXRvclN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogI2lmIEVOQUJMRShBUFBM
RV9QQVkpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEFwcGxlUGF5QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IHsgfQorICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RBcHBsZVBheUJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IHsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludEFwcGxlUGF5QnV0dG9u
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQp
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdEF0dGFjaG1lbnRTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdEF0dGFjaG1lbnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRBdHRhY2htZW50KGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERB
VEFMSVNUX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdExpc3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdDsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNz
QmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNz
QmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2so
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVt
ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnQoY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25z
dCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJC
b3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVkaWFDb250cm9sU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFPdmVybGF5UGxheUJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLmgKaW5k
ZXggZjE4ODc0MjRmNjMuLjNiMmI1MGRkZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNvY29hLmgKQEAgLTM5LDcgKzM5LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IHNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvcihjb25zdCBIVE1MSW5wdXRFbGVtZW50JikgY29u
c3QgZmluYWw7CiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQotICAgIHZvaWQgYWRqdXN0QXBwbGVQ
YXlCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RBcHBsZVBheUJ1dHRvblN0eWxlKFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFp
bnRBcHBsZVBheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbQppbmRleCBjYjYxMDgyOTJhNC4uMzYxOThmMGNmNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1tCkBAIC01
NCw3ICs1NCw3IEBAIHN0YXRpYyBjb25zdCBhdXRvIGFwcGxlUGF5QnV0dG9uTWluaW11bVdpZHRo
ID0gMTQwOwogc3RhdGljIGNvbnN0IGF1dG8gYXBwbGVQYXlCdXR0b25QbGFpbk1pbmltdW1XaWR0
aCA9IDEwMDsKIHN0YXRpYyBjb25zdCBhdXRvIGFwcGxlUGF5QnV0dG9uTWluaW11bUhlaWdodCA9
IDMwOwogCi12b2lkIFJlbmRlclRoZW1lQ29jb2E6OmFkanVzdEFwcGxlUGF5QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lQ29jb2E6OmFkanVzdEFwcGxlUGF5QnV0dG9uU3R5bGUoUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBpZiAoc3R5bGUuYXBw
bGVQYXlCdXR0b25UeXBlKCkgPT0gQXBwbGVQYXlCdXR0b25UeXBlOjpQbGFpbikKICAgICAgICAg
c3R5bGUuc2V0TWluV2lkdGgoTGVuZ3RoKGFwcGxlUGF5QnV0dG9uUGxhaW5NaW5pbXVtV2lkdGgs
IEZpeGVkKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcApp
bmRleCAwZTFmNWM5YjljZC4uMDdlN2EzMjM3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMjkwLDcgKzI5MCw3IEBAIHN0YXRpYyBHdGtTdGF0
ZUZsYWdzIHRoZW1lUGFydFN0YXRlRmxhZ3MoY29uc3QgUmVuZGVyVGhlbWVHdGsmIHRoZW1lLCBS
ZW5kZXJUaGVtCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KHN0YXRlRmxh
Z3MpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gU29tZSBsYXlvdXQgdGVzdHMgY2hlY2sgZXhw
bGljaXRseSB0aGF0IGJ1dHRvbnMgaWdub3JlIGxpbmUtaGVpZ2h0LgogICAgIGlmIChzdHlsZS5h
cHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpCkBAIC0zOTYsNyArMzk2LDcgQEAgc3RhdGlj
IENvbG9yIG1lbnVMaXN0Q29sb3IoY29uc3QgRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4g
Y29tYm9XaWRnZXQuYnV0dG9uKCkuY29sb3IoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgLy8gVGhlIHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBzZWxlY3Qg
bWVudSBidXR0b25zIGlnbm9yZSBsaW5lIGhlaWdodC4KICAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0
KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKQEAgLTQwOCw5ICs0MDgsOSBAQCB2
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbgogICAgICAgICBzdHlsZS5zZXRDb2xvcihtZW51TGlzdENv
bG9yKGVsZW1lbnQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZSkg
Y29uc3QKIHsKLSAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
KTsKKyAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlLCBlKTsKIH0KIAogLyoKQEAgLTQ5MSw3
ICs0OTEsNyBAQCBzdGF0aWMgSW50U2l6ZSBzcGluQnV0dG9uU2l6ZSgpCiB9CiAKIAotdm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdFRleHRGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+
KGVsZW1lbnQpIHx8ICFzaG91bGRIYXZlU3BpbkJ1dHRvbihkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PigqZWxlbWVudCkpKQogICAgICAgICByZXR1cm47CkBAIC01NTgsOSArNTU4LDkgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY28KICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVu
dCogZSkgY29uc3QKIHsKLSAgICBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKKyAgICBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKHN0eWxlLCBlKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyQm94JiBvLCBjb25zdCBQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC01NjgsMTIgKzU2OCwxMiBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJCb3gmIG8s
IGNvbnN0IFBhaQogICAgIHJldHVybiBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0KG8sIGksIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogICAgIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0
eWxlKEVudHJ5SWNvbkxlZnQsIHN0eWxlKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBFbGVtZW50KikgY29uc3QKIHsKICAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShFbnRy
eUljb25SaWdodCwgc3R5bGUpOwogfQpAQCAtNjA2LDcgKzYwNiw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyQm94JiByZW5k
ZXJPYmplY3QsCiB9CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLXZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdExpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdAogewogICAgIC8vIEFkZCBhIG1hcmdpbiB0byBwbGFjZSB0aGUgYnV0dG9uIGF0IGVuZCBv
ZiB0aGUgaW5wdXQgZmllbGQuCiAgICAgaWYgKHN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSkKQEAgLTYzMyw3ICs2MzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjpwYWludExpc3RCdXR0
b25Gb3JJbnB1dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgYwogfQogI2VuZGlm
CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIg
cmVuZGVyaW5nIHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCiAg
ICAgc3R5bGUucmVzZXRCb3JkZXJSYWRpdXMoKTsKQEAgLTY1MCwxNCArNjUwLDE0IEBAIGJvb2wg
UmVuZGVyVGhlbWVHdGs6OnNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvcihjb25zdCBIVE1MSW5w
dXRFbGVtZW50JiBlbGVtZW50CiAgICAgcmV0dXJuIGVsZW1lbnQuaXNQYXNzd29yZEZpZWxkKCk7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxw
dHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogewotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwog
fQogCkBAIC04MTcsNyArODE3LDcgQEAgUmVuZGVyVGhlbWU6OklubmVyU3BpbkJ1dHRvbkxheW91
dCBSZW5kZXJUaGVtZUd0azo6aW5uZXJTcGluQnV0dG9uTGF5b3V0KGNvbnN0IFIKICAgICByZXR1
cm4gcmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRM
ID8gSW5uZXJTcGluQnV0dG9uTGF5b3V0OjpIb3Jpem9udGFsVXBMZWZ0IDogSW5uZXJTcGluQnV0
dG9uTGF5b3V0OjpIb3Jpem9udGFsVXBSaWdodDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJ
bm5lclNwaW5CdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdAogewogICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzcGluQnV0dG9uU2l6ZSgpLndpZHRo
KCksIEZpeGVkKSk7CiAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzcGluQnV0dG9uU2l6ZSgp
LmhlaWdodCgpLCBGaXhlZCkpOwpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYKIH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVz
c0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLnNl
dEJveFNoYWRvdyhudWxscHRyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lR3RrLmgKaW5kZXggZDZhYTA1ZGUwYzIuLjlmNWJmMjQ2ZmUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuaApAQCAtMTEzLDEwICsxMTMsMTAgQEAgcHJpdmF0
ZToKICAgICBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFkanVzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RUZXh0Rmll
bGRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAg
ICBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRUZXh0QXJlYShj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKIApAQCAtMTI2LDMzICsxMjYsMzMgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgZm9y
bWVyIGlzIHVzZWQgd2hlbiBhIG1lbnUgbGlzdCBidXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlz
IGlzIHVzZWQgdG8gZW5zdXJlCiAgICAgLy8gQXF1YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIg
cG9zc2libGUuIFdlIGFsd2F5cyB3YW50IHRvIHVzZSBHVEsrIHRoZW1pbmcsIHNvCiAgICAgLy8g
d2UgZG9uJ3QgbWFpbnRhaW4gdGhpcyBkaWZmZXJlbnRpYXRpb24uCi0gICAgdm9pZCBhZGp1c3RN
ZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUo
UmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBw
YWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29y
YXRpb25zKGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0
IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
IAotICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOwogICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29u
c3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwogCi0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIHZv
aWQgcGFpbnRMaXN0QnV0dG9uRm9ySW5wdXQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBhZGp1c3RMaXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBib29sIHBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0U2xp
ZGVyVGh1bWJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xNzUsMTIgKzE3NSwxMiBAQCBwcml2YXRl
OgogCiAgICAgU2Vjb25kcyBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgU2Vjb25kcyBhbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdFByb2dyZXNz
QmFyU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICBJbm5lclNwaW5CdXR0b25MYXlvdXQgaW5uZXJTcGluQnV0dG9uTGF5
b3V0KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYWRqdXN0
SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9u
U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBTdHJpbmcgZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250Q2FzY2FkZSYsIGludCB3aWR0
aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCmluZGV4IDdlMzllYzY5OTk0Li45MzYyY2I4
OTcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKQEAgLTY5
LDEzICs2OSwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYgdXNlckFnZW50U3R5bGUpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgotICAg
IHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RDaGVja2JveFN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJv
b2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgYWRqdXN0UmFk
aW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRp
b25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAotICAgIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
YWRqdXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICAgICBib29s
IHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEJ1dHRvblNp
emUoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKQEAgLTg1LDEwICs4NSwxMCBAQCBwcm90
ZWN0ZWQ6CiAgICAgYm9vbCBwYWludFRleHRGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAg
IGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFk
anVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHls
ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29s
IHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMDYs
NyArMTA2LDcgQEAgcHJvdGVjdGVkOgogICAgIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNr
Q2VudGVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc3VwcG9ydHNGb2N1c1Jpbmco
Y29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCAxMGFmMDQwNjU5YS4uN2YxMDJmNWRmZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTM0NCw3ICszNDQs
NyBAQCBGbG9hdFJlY3QgUmVuZGVyVGhlbWVJT1M6OmFkZFJvdW5kZWRCb3JkZXJDbGlwKGNvbnN0
IFJlbmRlck9iamVjdCYgYm94LCBHcmFwaGljcwogICAgIHJldHVybiBib3JkZXIucmVjdCgpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdAogewogICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDU5LDcgKzQ1OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OmlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlCiAgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIHVzZXJBZ2VudFN0eWxlKTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6
OmFkanVzdFJhZGlvU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29u
c3QKIHsKICAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5
bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYyMCw3ICs2MjAsNyBA
QCBzdGF0aWMgdm9pZCBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEhUTUxJbnB1dEVsZQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgLy8gU2V0IHRoZSBtaW4taGVpZ2h0IHRvIGJl
IGF0IGxlYXN0IE1lbnVMaXN0TWluSGVpZ2h0LgogICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1
dG8oKSkKQEAgLTc2NSw5ICs3NjUsOSBAQCBjb25zdCBDR0Zsb2F0IGtUcmFja1RoaWNrbmVzcyA9
IDQuMDsKIGNvbnN0IENHRmxvYXQga1RyYWNrUmFkaXVzID0ga1RyYWNrVGhpY2tuZXNzIC8gMi4w
OwogY29uc3QgaW50IGtEZWZhdWx0U2xpZGVyVGh1bWJTaXplID0gMTY7CiAKLXZvaWQgUmVuZGVy
VGhlbWVJT1M6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYgc2VsZWN0b3Is
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIFJlbmRlclRoZW1lOjphZGp1
c3RTbGlkZXJUcmFja1N0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CisgICAgUmVuZGVy
VGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogCiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBub3QgYmUgcmVseWluZyBvbiBib3JkZXIgcmFkaXVzIGZvciB0aGUg
YXBwZWFyYW5jZSBvZiBvdXIgY29udHJvbHMgPHJkYXI6Ly9wcm9ibGVtLzc2NzU0OTM+LgogICAg
IGludCByYWRpdXMgPSBzdGF0aWNfY2FzdDxpbnQ+KGtUcmFja1JhZGl1cyk7CkBAIC05ODksOSAr
OTg5LDkgQEAgaW50IFJlbmRlclRoZW1lSU9TOjpzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2Vu
dGVyKCkgY29uc3QKIH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxl
bWVudCkgY29uc3QKIHsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShz
ZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKHN0eWxlLCBlbGVtZW50KTsKIAogICAgIGlmICghZWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTAxMSw5ICsxMDExLDkgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRT
ZWFyY2hGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25zdAogICAg
IHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRpb25zKGJveCwgcGFpbnRJbmZvLCByZWN0KTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYgc2VsZWN0b3IsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKLSAgICBSZW5kZXJUaGVt
ZTo6YWRqdXN0QnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBSZW5k
ZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogCiAjaWYgRU5BQkxF
KElOUFVUX1RZUEVfQ09MT1IpCiAgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBDb2xvcldl
bGxQYXJ0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAppbmRleCAx
YjlmNDYwYzQzMy4uMDdmMjZlNTExM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5oCkBAIC0xMTgsNDQgKzExOCw0NCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAg
ICBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3QgZmluYWw7CiAKICAgICBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkanVzdFRleHRBcmVhU3R5
bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CiAKICAgICBib29s
IHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3QgZmluYWw7CiAKICAgICBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBm
aW5hbDsKIAotICAgIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGp1
c3RQcm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZp
bmFsOwogICAgIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CiAKICAgICBib29sIHBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0IGZpbmFsOwogCiAgICAgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShS
ZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKIAogICAgIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShSZW5k
ZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKICAgICBib29sIHBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29y
YXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFy
dFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOwogICAgIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dCBmaW5hbDsKKyAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQp
CiAgICAgdm9pZCBwYWludExpc3RCdXR0b25Gb3JJbnB1dChjb25zdCBSZW5kZXJPYmplY3QmLCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGFkanVzdExpc3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBhZGp1c3RMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUm
LCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURF
TykKQEAgLTE4NSw3ICsxODUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250
KFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwogICAgIEludFNpemUg
c2l6ZUZvckZvbnQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29u
c3Q7CiAgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChjb25zdCBSZW5kZXJTdHlsZSYsIGNv
bnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJvbFNp
emUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6
ZSkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBS
ZW5kZXJPYmplY3QmKTsKICAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25z
dCBSZW5kZXJPYmplY3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQppbmRleCBhYTU5OTFjZTY3ZC4uMDg3YTc0ZTc0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTYzLDcgKzYzLDYgQEAKICNpbXBvcnQgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9y
dCAiU3RyaW5nVHJ1bmNhdG9yLmgiCi0jaW1wb3J0ICJTdHlsZVJlc29sdmVyLmgiCiAjaW1wb3J0
ICJUaGVtZU1hYy5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgogI2ltcG9ydCAiVVRJVXRpbGl0
aWVzLmgiCkBAIC0xMDc0LDcgKzEwNzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXpl
RnJvbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgYwogICAg
ICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoUmVuZGVyU3R5bGUm
IHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAogewogICAgIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJ
c0Fic29sdXRlU2l6ZSh0cnVlKTsKQEAgLTExNDEsNyArMTE0MCw3IEBAIHZvaWQgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TGlzdEJ1dHRvbkZvcklucHV0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgR3Jh
cGhpY3NDb250CiAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBpbWFnZVJlY3QpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBBZGQgYSBtYXJnaW4gdG8gcGxhY2UgdGhlIGJ1
dHRvbiBhdCBlbmQgb2YgdGhlIGlucHV0IGZpZWxkLgogICAgIGlmIChzdHlsZS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCkBAIC0xMTkwLDcgKzExODksNyBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZShSZW5k
ZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCkBAIC0xMjAxLDcgKzEyMDAs
NyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFRleHRBcmVhU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsK
IH0KIApAQCAtMTQyOSw3ICsxNDI4LDcgQEAgU2Vjb25kcyBSZW5kZXJUaGVtZU1hYzo6YW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiAgICAgcmV0
dXJuIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlICogcHJvZ3Jlc3NBbmltYXRpb25OdW1GcmFt
ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0CiB7CiB9CiAKQEAgLTE2NzQsNyArMTY3Myw3IEBAIHN0YXRpYyBjb25z
dCBJbnRTaXplKiBtZW51TGlzdEJ1dHRvblNpemVzKCkKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKQEAgLTE3MDEsNyArMTcwMCw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5CiAgICAgLy8gT3VyIGZvbnQgaXMgbG9ja2VkIHRv
IHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0gZm9udCBzaXplIGZvciB0aGUgY29udHJvbC4gIFRvIGNs
YXJpZnksIHdlIGZpcnN0IHVzZSB0aGUgQ1NTLXNwZWNpZmllZCBmb250IHRvIGZpZ3VyZSBvdXQK
ICAgICAvLyBhIHJlYXNvbmFibGUgY29udHJvbCBzaXplLCBidXQgb25jZSB0aGF0IGNvbnRyb2wg
c2l6ZSBpcyBkZXRlcm1pbmVkLCB3ZSB0aHJvdyB0aGF0IGZvbnQgYXdheSBhbmQgdXNlIHRoZSBh
cHByb3ByaWF0ZQogICAgIC8vIHN5c3RlbSBmb250IGZvciB0aGUgY29udHJvbCBzaXplIGluc3Rl
YWQuCi0gICAgc2V0Rm9udEZyb21Db250cm9sU2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29u
dHJvbFNpemUpOworICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGUsIGNvbnRyb2xTaXpl
KTsKIAogICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KQEAgLTE3NDcsNyArMTc0
Niw3IEBAIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplIFJlbmRlclRoZW1lTWFjOjpwb3B1
cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlJiBzCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdAogewogICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmNvbXB1dGVkRm9udFBp
eGVsU2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogCkBAIC0xNzk5LDcgKzE3OTgsNyBAQCBpbnQgUmVu
ZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogY29uc3QgaW50IHRyYWNrV2lkdGggPSA1OwogY29uc3QgaW50IHRyYWNrUmFkaXVz
ID0gMjsKIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVs
bHB0cik7CiB9CkBAIC0xODQ1LDkgKzE4NDQsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVy
VGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKIHsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIHN0eWxlLnNldEJveFNoYWRv
dyhudWxscHRyKTsKIH0KIApAQCAtMTk4NCw3ICsxOTgzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKICAgICBzZXRT
aXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBPdmVycmlkZSBib3JkZXIuCiAgICAgc3R5
bGUucmVzZXRCb3JkZXIoKTsKQEAgLTIwMTAsNyArMjAwOSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
UmVuZGVyCiAgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKIAogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQo
c3R5bGUpOwotICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGNvbnRyb2xTaXplKTsKKyAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlLCBjb250cm9s
U2l6ZSk7CiAKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CkBAIC0yMDc1LDcg
KzIwNzQsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6Y2FuY2VsQnV0dG9uU2l6
ZXMoKSBjb25zdAogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVt
Rm9udChzdHlsZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUuc2V0V2lkdGgoTGVu
Z3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKQEAgLTIwOTEsNyArMjA5MCw3IEBAIGNvbnN0IElu
dFNpemUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdAogfQogCiBj
b25zdCBpbnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0gOTsKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0
ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUuc2V0V2lkdGgo
TGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKQEAgLTIx
MDQsNyArMjEwMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxl
LCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKQEAgLTIxNDAsNyArMjEzOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyQm94
JiBib3gsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZv
bnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS5zZXRXaWR0aChMZW5n
dGgoc2l6ZS53aWR0aCgpICsgcmVzdWx0c0Fycm93V2lkdGgsIEZpeGVkKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5mZGQ0N2YzMzNhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC0wLDAgKzEsNjEyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5j
b20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKKworI2luY2x1
ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1hcnF1ZWVFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiUXVpcmtzLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgorI2luY2x1
ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1VS
SVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK25hbWVzcGFjZSBTdHlsZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0Fk
anVzdGVyOjpBZGp1c3Rlcihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudEJveFN0eWxlLCBjb25z
dCBFbGVtZW50KiBlbGVtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1f
cGFyZW50U3R5bGUocGFyZW50U3R5bGUpCisgICAgLCBtX3BhcmVudEJveFN0eWxlKHBhcmVudEJv
eFN0eWxlID8gKnBhcmVudEJveFN0eWxlIDogbV9wYXJlbnRTdHlsZSkKKyAgICAsIG1fZWxlbWVu
dChlbGVtZW50KQoreworfQorCitzdGF0aWMgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRl
clN0eWxlJiBzdHlsZSkKK3sKKyAgICAvLyBJbnRyaW5zaWMgbWFyZ2luIHZhbHVlLgorICAgIGNv
bnN0IGludCBpbnRyaW5zaWNNYXJnaW4gPSBjbGFtcFRvSW50ZWdlcigyICogc3R5bGUuZWZmZWN0
aXZlWm9vbSgpKTsKKworICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5k
IG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KKyAg
ICAvLyBGSVhNRTogVXNpbmcgImhhc1F1aXJrIiB0byBkZWNpZGUgdGhlIG1hcmdpbiB3YXNuJ3Qg
c2V0IGlzIGtpbmQgb2YgbGFtZS4KKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpKSB7CisgICAgICAgIGlmIChzdHlsZS5tYXJnaW5MZWZ0KCkuaGFzUXVpcmsoKSkKKyAg
ICAgICAgICAgIHN0eWxlLnNldE1hcmdpbkxlZnQoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4
ZWQpKTsKKyAgICAgICAgaWYgKHN0eWxlLm1hcmdpblJpZ2h0KCkuaGFzUXVpcmsoKSkKKyAgICAg
ICAgICAgIHN0eWxlLnNldE1hcmdpblJpZ2h0KExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVk
KSk7CisgICAgfQorCisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgICAg
IGlmIChzdHlsZS5tYXJnaW5Ub3AoKS5oYXNRdWlyaygpKQorICAgICAgICAgICAgc3R5bGUuc2V0
TWFyZ2luVG9wKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgICAgIGlmIChz
dHlsZS5tYXJnaW5Cb3R0b20oKS5oYXNRdWlyaygpKQorICAgICAgICAgICAgc3R5bGUuc2V0TWFy
Z2luQm90dG9tKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgfQorfQorCitz
dGF0aWMgRGlzcGxheVR5cGUgZXF1aXZhbGVudEJsb2NrRGlzcGxheShjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBzd2l0Y2ggKGF1dG8g
ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXkoKSkgeworICAgIGNhc2UgRGlzcGxheVR5cGU6OkJsb2Nr
OgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlOgorICAgIGNhc2UgRGlzcGxheVR5cGU6OkJv
eDoKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpGbGV4OgorICAgIGNhc2UgRGlzcGxheVR5cGU6Oldl
YktpdEZsZXg6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6R3JpZDoKKyAgICBjYXNlIERpc3BsYXlU
eXBlOjpGbG93Um9vdDoKKyAgICAgICAgcmV0dXJuIGRpc3BsYXk7CisKKyAgICBjYXNlIERpc3Bs
YXlUeXBlOjpMaXN0SXRlbToKKyAgICAgICAgLy8gSXQgaXMgYSBXaW5JRSBidWcgdGhhdCBmbG9h
dGVkIGxpc3QgaXRlbXMgbG9zZSB0aGVpciBidWxsZXRzLCBzbyB3ZSdsbCBlbXVsYXRlIHRoZSBx
dWlyaywgYnV0IG9ubHkgaW4gcXVpcmtzIG1vZGUuCisgICAgICAgIGlmIChkb2N1bWVudC5pblF1
aXJrc01vZGUoKSAmJiBzdHlsZS5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAgICByZXR1cm4gRGlz
cGxheVR5cGU6OkJsb2NrOworICAgICAgICByZXR1cm4gZGlzcGxheTsKKyAgICBjYXNlIERpc3Bs
YXlUeXBlOjpJbmxpbmVUYWJsZToKKyAgICAgICAgcmV0dXJuIERpc3BsYXlUeXBlOjpUYWJsZTsK
KyAgICBjYXNlIERpc3BsYXlUeXBlOjpJbmxpbmVCb3g6CisgICAgICAgIHJldHVybiBEaXNwbGF5
VHlwZTo6Qm94OworICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGluZUZsZXg6CisgICAgY2FzZSBE
aXNwbGF5VHlwZTo6V2ViS2l0SW5saW5lRmxleDoKKyAgICAgICAgcmV0dXJuIERpc3BsYXlUeXBl
OjpGbGV4OworICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGluZUdyaWQ6CisgICAgICAgIHJldHVy
biBEaXNwbGF5VHlwZTo6R3JpZDsKKworICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGluZToKKyAg
ICBjYXNlIERpc3BsYXlUeXBlOjpDb21wYWN0OgorICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGlu
ZUJsb2NrOgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlUm93R3JvdXA6CisgICAgY2FzZSBE
aXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cDoKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpUYWJs
ZUZvb3Rlckdyb3VwOgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlUm93OgorICAgIGNhc2Ug
RGlzcGxheVR5cGU6OlRhYmxlQ29sdW1uR3JvdXA6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFi
bGVDb2x1bW46CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVDZWxsOgorICAgIGNhc2UgRGlz
cGxheVR5cGU6OlRhYmxlQ2FwdGlvbjoKKyAgICAgICAgcmV0dXJuIERpc3BsYXlUeXBlOjpCbG9j
azsKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpDb250ZW50czoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6Q29udGVudHM7CisgICAgY2Fz
ZSBEaXNwbGF5VHlwZTo6Tm9uZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBEaXNwbGF5VHlwZTo6Tm9uZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIERpc3BsYXlUeXBlOjpCbG9jazsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjb25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAg
IGF1dG8qIHBhcmVudE5vZGUgPSBlbGVtZW50LnBhcmVudE5vZGUoKTsKKyAgICByZXR1cm4gcGFy
ZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKK30KKworLy8gQ1NTIHJlcXVp
cmVzIHRleHQtZGVjb3JhdGlvbiB0byBiZSByZXNldCBhdCBlYWNoIERPTSBlbGVtZW50IGZvciB0
YWJsZXMsCisvLyBpbmxpbmUgYmxvY2tzLCBpbmxpbmUgdGFibGVzLCBzaGFkb3cgRE9NIGNyb3Nz
aW5ncywgZmxvYXRpbmcgZWxlbWVudHMsCisvLyBhbmQgYWJzb2x1dGUgb3IgcmVsYXRpdmVseSBw
b3NpdGlvbmVkIGVsZW1lbnRzLgorc3RhdGljIGJvb2wgZG9lc05vdEluaGVyaXRUZXh0RGVjb3Jh
dGlvbihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit7
CisgICAgcmV0dXJuIHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGUgfHwgc3R5
bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZQorICAgICAgICB8fCBzdHls
ZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJsb2NrIHx8IHN0eWxlLmRpc3BsYXko
KSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQm94IHx8IChlbGVtZW50ICYmIGlzQXRTaGFkb3dCb3Vu
ZGFyeSgqZWxlbWVudCkpCisgICAgICAgIHx8IHN0eWxlLmlzRmxvYXRpbmcoKSB8fCBzdHlsZS5o
YXNPdXRPZkZsb3dQb3NpdGlvbigpOworfQorCisjaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElO
R19UT1VDSCkgfHwgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorc3RhdGljIGJvb2wgaXNTY3JvbGxh
YmxlT3ZlcmZsb3coT3ZlcmZsb3cgb3ZlcmZsb3cpCit7CisgICAgcmV0dXJuIG92ZXJmbG93ID09
IE92ZXJmbG93OjpTY3JvbGwgfHwgb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG87Cit9CisjZW5k
aWYKKworI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKK3N0YXRpYyBPcHRpb25TZXQ8VG91Y2hB
Y3Rpb24+IGNvbXB1dGVFZmZlY3RpdmVUb3VjaEFjdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+IGVmZmVjdGl2ZVRvdWNoQWN0aW9ucykKK3sKKyAg
ICAvLyBodHRwczovL3czYy5naXRodWIuaW8vcG9pbnRlcmV2ZW50cy8jZGV0ZXJtaW5pbmctc3Vw
cG9ydGVkLXRvdWNoLWJlaGF2aW9yCisgICAgLy8gIkEgdG91Y2ggYmVoYXZpb3IgaXMgc3VwcG9y
dGVkIGlmIGl0IGNvbmZvcm1zIHRvIHRoZSB0b3VjaC1hY3Rpb24gcHJvcGVydHkgb2YgZWFjaCBl
bGVtZW50IGJldHdlZW4KKyAgICAvLyB0aGUgaGl0IHRlc3RlZCBlbGVtZW50IGFuZCBpdHMgbmVh
cmVzdCBhbmNlc3RvciB3aXRoIHRoZSBkZWZhdWx0IHRvdWNoIGJlaGF2aW9yIChpbmNsdWRpbmcg
Ym90aCB0aGUKKyAgICAvLyBoaXQgdGVzdGVkIGVsZW1lbnQgYW5kIHRoZSBlbGVtZW50IHdpdGgg
dGhlIGRlZmF1bHQgdG91Y2ggYmVoYXZpb3IpLiIKKworICAgIGJvb2wgaGFzRGVmYXVsdFRvdWNo
QmVoYXZpb3IgPSBpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS5vdmVyZmxvd1goKSkgfHwgaXNT
Y3JvbGxhYmxlT3ZlcmZsb3coc3R5bGUub3ZlcmZsb3dZKCkpOworICAgIGlmIChoYXNEZWZhdWx0
VG91Y2hCZWhhdmlvcikKKyAgICAgICAgZWZmZWN0aXZlVG91Y2hBY3Rpb25zID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxUb3VjaEFjdGlvbnMoKTsKKworICAgIGF1dG8gdG91Y2hBY3Rpb25zID0gc3R5
bGUudG91Y2hBY3Rpb25zKCk7CisgICAgaWYgKHRvdWNoQWN0aW9ucyA9PSBSZW5kZXJTdHlsZTo6
aW5pdGlhbFRvdWNoQWN0aW9ucygpKQorICAgICAgICByZXR1cm4gZWZmZWN0aXZlVG91Y2hBY3Rp
b25zOworCisgICAgaWYgKGVmZmVjdGl2ZVRvdWNoQWN0aW9ucy5jb250YWlucyhUb3VjaEFjdGlv
bjo6Tm9uZSkpCisgICAgICAgIHJldHVybiB7IFRvdWNoQWN0aW9uOjpOb25lIH07CisKKyAgICBp
ZiAoZWZmZWN0aXZlVG91Y2hBY3Rpb25zLmNvbnRhaW5zQW55KHsgVG91Y2hBY3Rpb246OkF1dG8s
IFRvdWNoQWN0aW9uOjpNYW5pcHVsYXRpb24gfSkpCisgICAgICAgIHJldHVybiB0b3VjaEFjdGlv
bnM7CisKKyAgICBpZiAodG91Y2hBY3Rpb25zLmNvbnRhaW5zQW55KHsgVG91Y2hBY3Rpb246OkF1
dG8sIFRvdWNoQWN0aW9uOjpNYW5pcHVsYXRpb24gfSkpCisgICAgICAgIHJldHVybiBlZmZlY3Rp
dmVUb3VjaEFjdGlvbnM7CisKKyAgICBhdXRvIHNoYXJlZFRvdWNoQWN0aW9ucyA9IGVmZmVjdGl2
ZVRvdWNoQWN0aW9ucyAmIHRvdWNoQWN0aW9uczsKKyAgICBpZiAoc2hhcmVkVG91Y2hBY3Rpb25z
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgVG91Y2hBY3Rpb246Ok5vbmUgfTsKKworICAg
IHJldHVybiBzaGFyZWRUb3VjaEFjdGlvbnM7Cit9CisjZW5kaWYKKwordm9pZCBBZGp1c3Rlcjo6
YWRqdXN0KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHVzZXJBZ2VudEFw
cGVhcmFuY2VTdHlsZSkgY29uc3QKK3sKKyAgICAvLyBDYWNoZSBvdXIgb3JpZ2luYWwgZGlzcGxh
eS4KKyAgICBzdHlsZS5zZXRPcmlnaW5hbERpc3BsYXkoc3R5bGUuZGlzcGxheSgpKTsKKworICAg
IGlmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkNvbnRlbnRzKQorICAgICAgICBh
ZGp1c3REaXNwbGF5Q29udGVudHNTdHlsZShzdHlsZSk7CisKKyAgICBpZiAoc3R5bGUuZGlzcGxh
eSgpICE9IERpc3BsYXlUeXBlOjpOb25lICYmIHN0eWxlLmRpc3BsYXkoKSAhPSBEaXNwbGF5VHlw
ZTo6Q29udGVudHMpIHsKKyAgICAgICAgaWYgKG1fZWxlbWVudCkgeworICAgICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIDx0ZD4gdGhhdCBzcGVjaWZpZXMgYSBmbG9hdCBwcm9wZXJ0eSwgaW4gcXVp
cmtzIG1vZGUgd2UganVzdCBkcm9wIHRoZSBmbG9hdAorICAgICAgICAgICAgLy8gcHJvcGVydHku
CisgICAgICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBkaXNwbGF5OmlubGluZS9i
bG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCisgICAg
ICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5IHR5cGVzLgorICAg
ICAgICAgICAgaWYgKG1fZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKSkgeworICAgICAgICAgICAgICAgICAg
ICBzdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpUYWJsZUNlbGwpOworICAgICAgICAgICAg
ICAgICAgICBzdHlsZS5zZXRGbG9hdGluZyhGbG9hdDo6Tm8pOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKm1fZWxlbWVudCkpCisgICAgICAgICAgICAg
ICAgICAgIHN0eWxlLnNldERpc3BsYXkoc3R5bGUuaXNEaXNwbGF5SW5saW5lVHlwZSgpID8gRGlz
cGxheVR5cGU6OklubGluZVRhYmxlIDogRGlzcGxheVR5cGU6OlRhYmxlKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgbV9l
bGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHlsZS53
aGl0ZVNwYWNlKCkgPT0gV2hpdGVTcGFjZTo6S0hUTUxOb1dyYXApIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBhcmUgcmVhbGx5IG5vd3JhcHBpbmcgb3IgaWYgd2Ug
c2hvdWxkIGp1c3QKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG5vcm1hbCBpbnN0ZWFkLiBJ
ZiB0aGUgd2lkdGggb2YgdGhlIGNlbGwgaXMgZml4ZWQsIHRoZW4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIFdoaXRlU3BhY2U6Ok5vV3JhcC4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNGaXhlZCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShXaGl0ZVNwYWNlOjpOb3JtYWwpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRXaGl0
ZVNwYWNlKFdoaXRlU3BhY2U6Ok5vV3JhcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBUYWJsZXMgbmV2ZXIgc3VwcG9ydCB0aGUgLXdlYmtpdC0q
IHZhbHVlcyBmb3IgdGV4dC1hbGlnbiBhbmQgd2lsbCByZXNldCBiYWNrIHRvIHRoZSBkZWZhdWx0
LgorICAgICAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCptX2VsZW1lbnQpICYmIChz
dHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0IHx8IHN0eWxlLnRl
eHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlciB8fCBzdHlsZS50ZXh0QWxp
Z24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodCkpCisgICAgICAgICAgICAgICAgc3R5
bGUuc2V0VGV4dEFsaWduKFRleHRBbGlnbk1vZGU6OlN0YXJ0KTsKKworICAgICAgICAgICAgLy8g
RnJhbWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9z
aXRpb246YWJzb2x1dGUuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAgICAgICAvLyBmaXgg
YSBjcmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gVGhl
eSBhbHNvIG5ldmVyIGhvbm9yIGRpc3BsYXkuCisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5o
YXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcp
KSB7CisgICAgICAgICAgICAgICAgc3R5bGUuc2V0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpTdGF0
aWMpOworICAgICAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6OkJsb2Nr
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUnVieSB0ZXh0IGRvZXMgbm90IHN1
cHBvcnQgZmxvYXQgb3IgcG9zaXRpb24uIFRoaXMgbWlnaHQgY2hhbmdlIHdpdGggZXZvbHV0aW9u
IG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFn
TmFtZShydFRhZykpIHsKKyAgICAgICAgICAgICAgICBzdHlsZS5zZXRQb3NpdGlvbihQb3NpdGlv
blR5cGU6OlN0YXRpYyk7CisgICAgICAgICAgICAgICAgc3R5bGUuc2V0RmxvYXRpbmcoRmxvYXQ6
Ok5vKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVXNlciBhZ2VudHMgYXJlIGV4
cGVjdGVkIHRvIGhhdmUgYSBydWxlIGluIHRoZWlyIHVzZXIgYWdlbnQgc3R5bGVzaGVldCB0aGF0
IG1hdGNoZXMgdGggZWxlbWVudHMgdGhhdCBoYXZlIGEgcGFyZW50CisgICAgICAgICAgICAvLyBu
b2RlIHdob3NlIGNvbXB1dGVkIHZhbHVlIGZvciB0aGUgJ3RleHQtYWxpZ24nIHByb3BlcnR5IGlz
IGl0cyBpbml0aWFsIHZhbHVlLCB3aG9zZSBkZWNsYXJhdGlvbiBibG9jayBjb25zaXN0cyBvZgor
ICAgICAgICAgICAgLy8ganVzdCBhIHNpbmdsZSBkZWNsYXJhdGlvbiB0aGF0IHNldHMgdGhlICd0
ZXh0LWFsaWduJyBwcm9wZXJ0eSB0byB0aGUgdmFsdWUgJ2NlbnRlcicuCisgICAgICAgICAgICAv
LyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9yZW5kZXJpbmcuaHRtbCNy
ZW5kZXJpbmcKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUodGhUYWcpICYm
ICFzdHlsZS5oYXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKCkgJiYgbV9wYXJlbnRTdHlsZS50ZXh0
QWxpZ24oKSA9PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbigpKQorICAgICAgICAgICAg
ICAgIHN0eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2RlOjpDZW50ZXIpOworCisgICAgICAg
ICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykpCisgICAgICAgICAgICAg
ICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6QmxvY2spOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQWJzb2x1dGUvZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cywgZmxvYXRpbmcgZWxl
bWVudHMgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50IG5lZWQgYmxvY2stbGlrZSBvdXRzaWRlIGRp
c3BsYXkuCisgICAgICAgIGlmIChzdHlsZS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpIHx8IHN0eWxl
LmlzRmxvYXRpbmcoKSB8fCAobV9lbGVtZW50ICYmIG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KCkgPT0gbV9lbGVtZW50KSkKKyAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoZXF1aXZhbGVu
dEJsb2NrRGlzcGxheShzdHlsZSwgbV9kb2N1bWVudCkpOworCisgICAgICAgIC8vIEZJWE1FOiBE
b24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1s
ZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQncyBub3QgY29tcGxldGVseQorICAgICAgICAv
LyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4KKyAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXko
KSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lICYmIHN0eWxlLnN0eWxlVHlwZSgpID09IFBzZXVkb0lk
OjpOb25lICYmIHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gbV9wYXJlbnRTdHlsZS53cml0aW5nTW9k
ZSgpKQorICAgICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6SW5saW5lQmxv
Y2spOworCisgICAgICAgIC8vIEFmdGVyIHBlcmZvcm1pbmcgdGhlIGRpc3BsYXkgbXV0YXRpb24s
IGNoZWNrIHRhYmxlIHJvd3MuIFdlIGRvIG5vdCBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBw
b3NpdGlvbjpzdGlja3kgb24KKyAgICAgICAgLy8gdGFibGUgcm93cyBvciBjZWxscy4gVGhpcyBo
YXMgYmVlbiBlc3RhYmxpc2hlZCBmb3IgcG9zaXRpb246cmVsYXRpdmUgaW4gQ1NTMi4xIChhbmQg
Y2F1c2VkIGEgY3Jhc2ggaW4gY29udGFpbmluZ0Jsb2NrKCkKKyAgICAgICAgLy8gb24gc29tZSBz
aXRlcykuCisgICAgICAgIGlmICgoc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJs
ZUhlYWRlckdyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3dH
cm91cAorICAgICAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJs
ZUZvb3Rlckdyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3cp
CisgICAgICAgICAgICAmJiBzdHlsZS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6UmVsYXRp
dmUpCisgICAgICAgICAgICBzdHlsZS5zZXRQb3NpdGlvbihQb3NpdGlvblR5cGU6OlN0YXRpYyk7
CisKKyAgICAgICAgLy8gd3JpdGluZy1tb2RlIGRvZXMgbm90IGFwcGx5IHRvIHRhYmxlIHJvdyBn
cm91cHMsIHRhYmxlIGNvbHVtbiBncm91cHMsIHRhYmxlIHJvd3MsIGFuZCB0YWJsZSBjb2x1bW5z
LgorICAgICAgICAvLyBGSVhNRTogVGFibGUgY2VsbHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUg
cGVycGVuZGljdWxhciBvciBmbGlwcGVkIHdpdGggcmVzcGVjdCB0byB0aGUgdGFibGUsIHRob3Vn
aC4KKyAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVDb2x1
bW4gfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZUNvbHVtbkdyb3VwIHx8
IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVGb290ZXJHcm91cAorICAgICAg
ICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZUhlYWRlckdyb3Vw
IHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3cgfHwgc3R5bGUuZGlz
cGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZVJvd0dyb3VwCisgICAgICAgICAgICB8fCBzdHls
ZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlQ2VsbCkKKyAgICAgICAgICAgIHN0eWxl
LnNldFdyaXRpbmdNb2RlKG1fcGFyZW50U3R5bGUud3JpdGluZ01vZGUoKSk7CisKKyAgICAgICAg
Ly8gRklYTUU6IFNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYmxvY2stZmxvdyBvbiBmbGV4aWJsZSBi
b3hlcyB5ZXQsIGRpc2FsbG93IHNldHRpbmcKKyAgICAgICAgLy8gb2YgYmxvY2stZmxvdyB0byBh
bnl0aGluZyBvdGhlciB0aGFuIFRvcFRvQm90dG9tV3JpdGluZ01vZGUuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQxOCAtIEZsZXhpYmxlIGJv
eCBzdXBwb3J0LgorICAgICAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBUb3BUb0JvdHRv
bVdyaXRpbmdNb2RlICYmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkJveCB8fCBz
dHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJveCkpCisgICAgICAgICAgICBz
dHlsZS5zZXRXcml0aW5nTW9kZShUb3BUb0JvdHRvbVdyaXRpbmdNb2RlKTsKKworICAgICAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWRpc3BsYXkvI3RyYW5zZm9ybWF0aW9ucworICAg
ICAgICAvLyAiQSBwYXJlbnQgd2l0aCBhIGdyaWQgb3IgZmxleCBkaXNwbGF5IHZhbHVlIGJsb2Nr
aWZpZXMgdGhlIGJveOKAmXMgZGlzcGxheSB0eXBlLiIKKyAgICAgICAgaWYgKG1fcGFyZW50Qm94
U3R5bGUuaXNEaXNwbGF5RmxleGlibGVPckdyaWRCb3goKSkgeworICAgICAgICAgICAgc3R5bGUu
c2V0RmxvYXRpbmcoRmxvYXQ6Ok5vKTsKKyAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoZXF1
aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZSwgbV9kb2N1bWVudCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gTWFrZSBzdXJlIG91ciB6LWluZGV4IHZhbHVlIGlzIG9ubHkgYXBwbGllZCBp
ZiB0aGUgb2JqZWN0IGlzIHBvc2l0aW9uZWQuCisgICAgaWYgKHN0eWxlLnBvc2l0aW9uKCkgPT0g
UG9zaXRpb25UeXBlOjpTdGF0aWMgJiYgIW1fcGFyZW50Qm94U3R5bGUuaXNEaXNwbGF5RmxleGli
bGVPckdyaWRCb3goKSkKKyAgICAgICAgc3R5bGUuc2V0SGFzQXV0b1pJbmRleCgpOworCisgICAg
Ly8gQXV0byB6LWluZGV4IGJlY29tZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNw
YXJlbnQgb2JqZWN0cy4gVGhpcyBwcmV2ZW50cworICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMg
dGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNpbmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9u
LXRyYW5zcGFyZW50CisgICAgLy8gb2JqZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0uIEF1dG8g
ei1pbmRleCBhbHNvIGJlY29tZXMgMCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jt
cy9tYXNrcy9yZWZsZWN0aW9ucy4KKyAgICBpZiAoc3R5bGUuaGFzQXV0b1pJbmRleCgpKSB7Cisg
ICAgICAgIGlmICgobV9lbGVtZW50ICYmIG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkgPT0g
bV9lbGVtZW50KQorICAgICAgICAgICAgfHwgc3R5bGUub3BhY2l0eSgpIDwgMS4wZgorICAgICAg
ICAgICAgfHwgc3R5bGUuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkKKyAgICAgICAgICAg
IHx8IHN0eWxlLmhhc01hc2soKQorICAgICAgICAgICAgfHwgc3R5bGUuY2xpcFBhdGgoKQorICAg
ICAgICAgICAgfHwgc3R5bGUuYm94UmVmbGVjdCgpCisgICAgICAgICAgICB8fCBzdHlsZS5oYXNG
aWx0ZXIoKQorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCisgICAgICAgICAgICB8fCBzdHls
ZS5oYXNCYWNrZHJvcEZpbHRlcigpCisjZW5kaWYKKyAgICAgICAgICAgIHx8IHN0eWxlLmhhc0Js
ZW5kTW9kZSgpCisgICAgICAgICAgICB8fCBzdHlsZS5oYXNJc29sYXRpb24oKQorICAgICAgICAg
ICAgfHwgc3R5bGUucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlN0aWNreQorICAgICAgICAg
ICAgfHwgc3R5bGUucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OkZpeGVkCisgICAgICAgICAg
ICB8fCBzdHlsZS53aWxsQ2hhbmdlQ3JlYXRlc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAg
ICAgc3R5bGUuc2V0WkluZGV4KDApOworICAgIH0KKworICAgIGlmIChtX2VsZW1lbnQpIHsKKyAg
ICAgICAgLy8gVGV4dGFyZWEgY29uc2lkZXJzIG92ZXJmbG93IHZpc2libGUgYXMgYXV0by4KKyAg
ICAgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2VsZW1lbnQpKSB7CisgICAgICAg
ICAgICBzdHlsZS5zZXRPdmVyZmxvd1goc3R5bGUub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlZp
c2libGUgPyBPdmVyZmxvdzo6QXV0byA6IHN0eWxlLm92ZXJmbG93WCgpKTsKKyAgICAgICAgICAg
IHN0eWxlLnNldE92ZXJmbG93WShzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6VmlzaWJs
ZSA/IE92ZXJmbG93OjpBdXRvIDogc3R5bGUub3ZlcmZsb3dZKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRGlzYWxsb3cgLXdlYmtpdC11c2VyLW1vZGlmeSBvbiA6cHNldWRvIGFuZCA6OnBz
ZXVkbyBlbGVtZW50cy4KKyAgICAgICAgaWYgKCFtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCku
aXNOdWxsKCkpCisgICAgICAgICAgICBzdHlsZS5zZXRVc2VyTW9kaWZ5KFVzZXJNb2RpZnk6OlJl
YWRPbmx5KTsKKworICAgICAgICBpZiAoaXM8SFRNTE1hcnF1ZWVFbGVtZW50PigqbV9lbGVtZW50
KSkgeworICAgICAgICAgICAgLy8gRm9yIG5vdywgPG1hcnF1ZWU+IHJlcXVpcmVzIGFuIG92ZXJm
bG93IGNsaXAgdG8gd29yayBwcm9wZXJseS4KKyAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93
WChPdmVyZmxvdzo6SGlkZGVuKTsKKyAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVy
Zmxvdzo6SGlkZGVuKTsKKworICAgICAgICAgICAgYm9vbCBpc1ZlcnRpY2FsID0gc3R5bGUubWFy
cXVlZURpcmVjdGlvbigpID09IE1hcnF1ZWVEaXJlY3Rpb246OlVwIHx8IHN0eWxlLm1hcnF1ZWVE
aXJlY3Rpb24oKSA9PSBNYXJxdWVlRGlyZWN0aW9uOjpEb3duOworICAgICAgICAgICAgLy8gTWFr
ZSBob3Jpem9udGFsIG1hcnF1ZWVzIG5vdCB3cmFwLgorICAgICAgICAgICAgaWYgKCFpc1ZlcnRp
Y2FsKSB7CisgICAgICAgICAgICAgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShXaGl0ZVNwYWNlOjpO
b1dyYXApOworICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2Rl
OjpTdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBcHBhcmVudGx5IHRoaXMg
aXMgdGhlIGV4cGVjdGVkIGxlZ2FjeSBiZWhhdmlvci4KKyAgICAgICAgICAgIGlmIChpc1ZlcnRp
Y2FsICYmIHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICAgICAgICAgIHN0eWxlLnNl
dEhlaWdodChMZW5ndGgoMjAwLCBGaXhlZCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGRvZXNOb3RJbmhlcml0VGV4dERlY29yYXRpb24oc3R5bGUsIG1fZWxlbWVudCkpCisgICAgICAg
IHN0eWxlLnNldFRleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLnRleHREZWNvcmF0aW9uKCkp
OworICAgIGVsc2UKKyAgICAgICAgc3R5bGUuYWRkVG9UZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChz
dHlsZS50ZXh0RGVjb3JhdGlvbigpKTsKKworICAgIC8vIElmIGVpdGhlciBvdmVyZmxvdyB2YWx1
ZSBpcyBub3QgdmlzaWJsZSwgY2hhbmdlIHRvIGF1dG8uCisgICAgaWYgKHN0eWxlLm92ZXJmbG93
WCgpID09IE92ZXJmbG93OjpWaXNpYmxlICYmIHN0eWxlLm92ZXJmbG93WSgpICE9IE92ZXJmbG93
OjpWaXNpYmxlKSB7CisgICAgICAgIC8vIEZJWE1FOiBPbmNlIHdlIGltcGxlbWVudCBwYWdpbmF0
aW9uIGNvbnRyb2xzLCBvdmVyZmxvdy14IHNob3VsZCBkZWZhdWx0IHRvIGhpZGRlbgorICAgICAg
ICAvLyBpZiBvdmVyZmxvdy15IGlzIHNldCB0byAtd2Via2l0LXBhZ2VkLXggb3IgLXdlYmtpdC1w
YWdlLXkuIEZvciBub3csIHdlJ2xsIGxldCBpdAorICAgICAgICAvLyBkZWZhdWx0IHRvIGF1dG8g
c28gd2UgY2FuIGF0IGxlYXN0IHNjcm9sbCB0aHJvdWdoIHRoZSBwYWdlcy4KKyAgICAgICAgc3R5
bGUuc2V0T3ZlcmZsb3dYKE92ZXJmbG93OjpBdXRvKTsKKyAgICB9IGVsc2UgaWYgKHN0eWxlLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpWaXNpYmxlICYmIHN0eWxlLm92ZXJmbG93WCgpICE9IE92
ZXJmbG93OjpWaXNpYmxlKQorICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1koT3ZlcmZsb3c6OkF1
dG8pOworCisgICAgLy8gQ2FsbCBzZXRTdHlsZXNGb3JQYWdpbmF0aW9uTW9kZSgpIGlmIGEgcGFn
aW5hdGlvbiBtb2RlIGlzIHNldCBmb3IgYW55IG5vbi1yb290IGVsZW1lbnRzLiBJZiB0aGVzZQor
ICAgIC8vIHN0eWxlcyBhcmUgc3BlY2lmaWVkIG9uIGEgcm9vdCBlbGVtZW50LCB0aGVuIHRoZXkg
d2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW4KKyAgICAvLyBTdHlsZTo6Y3JlYXRlRm9ybV9kb2N1bWVu
dC4KKyAgICBpZiAoKHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpQYWdlZFggfHwgc3R5
bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlBhZ2VkWSkgJiYgIShtX2VsZW1lbnQgJiYgKG1f
ZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYm9k
eVRhZykpKSkKKyAgICAgICAgc3R5bGUuc2V0Q29sdW1uU3R5bGVzRnJvbVBhZ2luYXRpb25Nb2Rl
KFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUoc3R5bGUpKTsKKworICAgIC8v
IFRhYmxlIHJvd3MsIHNlY3Rpb25zIGFuZCB0aGUgdGFibGUgaXRzZWxmIHdpbGwgc3VwcG9ydCBv
dmVyZmxvdzpoaWRkZW4gYW5kIHdpbGwgaWdub3JlIHNjcm9sbC9hdXRvLgorICAgIC8vIEZJWE1F
OiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25zIHdpbGwgc3VwcG9ydCBhdXRvIGFuZCBzY3JvbGwu
CisgICAgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGUgfHwgc3R5bGUu
ZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZQorICAgICAgICB8fCBzdHlsZS5k
aXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlUm93R3JvdXAgfHwgc3R5bGUuZGlzcGxheSgp
ID09IERpc3BsYXlUeXBlOjpUYWJsZVJvdykgeworICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dY
KCkgIT0gT3ZlcmZsb3c6OlZpc2libGUgJiYgc3R5bGUub3ZlcmZsb3dYKCkgIT0gT3ZlcmZsb3c6
OkhpZGRlbikKKyAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WChPdmVyZmxvdzo6VmlzaWJs
ZSk7CisgICAgICAgIGlmIChzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6VmlzaWJsZSAm
JiBzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6SGlkZGVuKQorICAgICAgICAgICAgc3R5
bGUuc2V0T3ZlcmZsb3dZKE92ZXJmbG93OjpWaXNpYmxlKTsKKyAgICB9CisKKyAgICAvLyBNZW51
bGlzdHMgc2hvdWxkIGhhdmUgdmlzaWJsZSBvdmVyZmxvdworICAgIGlmIChzdHlsZS5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7CisgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WChPdmVy
Zmxvdzo6VmlzaWJsZSk7CisgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6Vmlz
aWJsZSk7CisgICAgfQorCisjaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKKyAg
ICAvLyBUb3VjaCBvdmVyZmxvdyBzY3JvbGxpbmcgY3JlYXRlcyBhIHN0YWNraW5nIGNvbnRleHQu
CisgICAgaWYgKHN0eWxlLmhhc0F1dG9aSW5kZXgoKSAmJiBzdHlsZS51c2VUb3VjaE92ZXJmbG93
U2Nyb2xsaW5nKCkgJiYgKGlzU2Nyb2xsYWJsZU92ZXJmbG93KHN0eWxlLm92ZXJmbG93WCgpKSB8
fCBpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS5vdmVyZmxvd1koKSkpKQorICAgICAgICBzdHls
ZS5zZXRaSW5kZXgoMCk7CisjZW5kaWYKKworICAgIC8vIEN1bGwgb3V0IGFueSB1c2VsZXNzIGxh
eWVycyBhbmQgYWxzbyByZXBlYXQgcGF0dGVybnMgaW50byBhZGRpdGlvbmFsIGxheWVycy4KKyAg
ICBzdHlsZS5hZGp1c3RCYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgc3R5bGUuYWRqdXN0TWFza0xh
eWVycygpOworCisgICAgLy8gRG8gdGhlIHNhbWUgZm9yIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRp
b25zLgorICAgIHN0eWxlLmFkanVzdEFuaW1hdGlvbnMoKTsKKyAgICBzdHlsZS5hZGp1c3RUcmFu
c2l0aW9ucygpOworCisgICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBnZXQgYWRk
ZWQgdG8gY29udHJvbHMgYmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0eWxlLCBz
aW5jZSB0aGUgdGhlbWUgd2lsbAorICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBoZWlnaHRzL3dpZHRo
cy4KKyAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obV9lbGVtZW50KSAmJiBzdHls
ZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSA+PSAxMSkgeworICAgICAgICAvLyBEb24ndCBhcHBs
eSBpbnRyaW5zaWMgbWFyZ2lucyB0byBpbWFnZSBidXR0b25zLiBUaGUgZGVzaWduZXIga25vd3Mg
aG93IGJpZyB0aGUgaW1hZ2VzIGFyZSwKKyAgICAgICAgLy8gc28gd2UgaGF2ZSB0byB0cmVhdCBh
bGwgaW1hZ2UgYnV0dG9ucyBhcyB0aG91Z2ggdGhleSB3ZXJlIGV4cGxpY2l0bHkgc2l6ZWQuCisg
ICAgICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVudCkgfHwgIWRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpLmlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAg
ICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOworICAgIH0KKworICAgIC8vIExldCB0aGUg
dGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KKyAgICBpZiAo
c3R5bGUuaGFzQXBwZWFyYW5jZSgpKQorICAgICAgICBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCku
YWRqdXN0U3R5bGUoc3R5bGUsIG1fZWxlbWVudCwgdXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKTsK
KworICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVkbyBzdHlsZSwgZG8gbm90IHNo
YXJlIHRoaXMgc3R5bGUuCisgICAgaWYgKHN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpG
aXJzdExldHRlcikpCisgICAgICAgIHN0eWxlLnNldFVuaXF1ZSgpOworCisgICAgLy8gRklYTUU6
IHdoZW4gZHJvcHBpbmcgdGhlIC13ZWJraXQgcHJlZml4IG9uIHRyYW5zZm9ybS1zdHlsZSwgd2Ug
c2hvdWxkIGFsc28gaGF2ZSBvcGFjaXR5IDwgMSBjYXVzZSBmbGF0dGVuaW5nLgorICAgIGlmIChz
dHlsZS5wcmVzZXJ2ZXMzRCgpICYmIChzdHlsZS5vdmVyZmxvd1goKSAhPSBPdmVyZmxvdzo6Vmlz
aWJsZQorICAgICAgICB8fCBzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6VmlzaWJsZQor
ICAgICAgICB8fCBzdHlsZS5oYXNDbGlwKCkKKyAgICAgICAgfHwgc3R5bGUuY2xpcFBhdGgoKQor
ICAgICAgICB8fCBzdHlsZS5oYXNGaWx0ZXIoKQorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIp
CisgICAgICAgIHx8IHN0eWxlLmhhc0JhY2tkcm9wRmlsdGVyKCkKKyNlbmRpZgorICAgICAgICB8
fCBzdHlsZS5oYXNCbGVuZE1vZGUoKSkpCisgICAgICAgIHN0eWxlLnNldFRyYW5zZm9ybVN0eWxl
M0QoVHJhbnNmb3JtU3R5bGUzRDo6RmxhdCk7CisKKyAgICBpZiAoaXM8U1ZHRWxlbWVudD4obV9l
bGVtZW50KSkKKyAgICAgICAgYWRqdXN0U1ZHRWxlbWVudFN0eWxlKHN0eWxlLCBkb3duY2FzdDxT
VkdFbGVtZW50PigqbV9lbGVtZW50KSk7CisKKyAgICAvLyBJZiB0aGUgaW5oZXJpdGVkIHZhbHVl
IG9mIGp1c3RpZnktaXRlbXMgaW5jbHVkZXMgdGhlICdsZWdhY3knIGtleXdvcmQgKHBsdXMgJ2xl
ZnQnLCAncmlnaHQnIG9yCisgICAgLy8gJ2NlbnRlcicpLCAnbGVnYWN5JyBjb21wdXRlcyB0byB0
aGUgdGhlIGluaGVyaXRlZCB2YWx1ZS4gT3RoZXJ3aXNlLCAnYXV0bycgY29tcHV0ZXMgdG8gJ25v
cm1hbCcuCisgICAgaWYgKG1fcGFyZW50Qm94U3R5bGUuanVzdGlmeUl0ZW1zKCkucG9zaXRpb25U
eXBlKCkgPT0gSXRlbVBvc2l0aW9uVHlwZTo6TGVnYWN5ICYmIHN0eWxlLmp1c3RpZnlJdGVtcygp
LnBvc2l0aW9uKCkgPT0gSXRlbVBvc2l0aW9uOjpMZWdhY3kpCisgICAgICAgIHN0eWxlLnNldEp1
c3RpZnlJdGVtcyhtX3BhcmVudEJveFN0eWxlLmp1c3RpZnlJdGVtcygpKTsKKworI2lmIEVOQUJM
RShQT0lOVEVSX0VWRU5UUykKKyAgICBzdHlsZS5zZXRFZmZlY3RpdmVUb3VjaEFjdGlvbnMoY29t
cHV0ZUVmZmVjdGl2ZVRvdWNoQWN0aW9ucyhzdHlsZSwgbV9wYXJlbnRTdHlsZS5lZmZlY3RpdmVU
b3VjaEFjdGlvbnMoKSkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQor
ICAgIGlmIChtX2VsZW1lbnQpCisgICAgICAgIGFkanVzdEZvclRleHRBdXRvc2l6aW5nKHN0eWxl
LCAqbV9lbGVtZW50KTsKKyNlbmRpZgorCisgICAgYWRqdXN0Rm9yU2l0ZVNwZWNpZmljUXVpcmtz
KHN0eWxlKTsKK30KKworc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JEaXNw
bGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICAvLyBodHRwczovL2Ry
YWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtaHRtbAorICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7CisgICAg
ICAgICAgICAmYnJUYWcuZ2V0KCksCisgICAgICAgICAgICAmd2JyVGFnLmdldCgpLAorICAgICAg
ICAgICAgJm1ldGVyVGFnLmdldCgpLAorICAgICAgICAgICAgJmFwcGxldFRhZy5nZXQoKSwKKyAg
ICAgICAgICAgICZwcm9ncmVzc1RhZy5nZXQoKSwKKyAgICAgICAgICAgICZjYW52YXNUYWcuZ2V0
KCksCisgICAgICAgICAgICAmZW1iZWRUYWcuZ2V0KCksCisgICAgICAgICAgICAmb2JqZWN0VGFn
LmdldCgpLAorICAgICAgICAgICAgJmF1ZGlvVGFnLmdldCgpLAorICAgICAgICAgICAgJmlmcmFt
ZVRhZy5nZXQoKSwKKyAgICAgICAgICAgICZpbWdUYWcuZ2V0KCksCisgICAgICAgICAgICAmdmlk
ZW9UYWcuZ2V0KCksCisgICAgICAgICAgICAmZnJhbWVUYWcuZ2V0KCksCisgICAgICAgICAgICAm
ZnJhbWVzZXRUYWcuZ2V0KCksCisgICAgICAgICAgICAmaW5wdXRUYWcuZ2V0KCksCisgICAgICAg
ICAgICAmdGV4dGFyZWFUYWcuZ2V0KCksCisgICAgICAgICAgICAmc2VsZWN0VGFnLmdldCgpLAor
ICAgICAgICB9OworICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgZm9y
IChhdXRvJiBuYW1lIDogdGFnTGlzdCkKKyAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxO
YW1lKCkpOworICAgICAgICByZXR1cm4gc2V0OworICAgIH0oKTsKKworICAgIC8vIGh0dHBzOi8v
ZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxheS0zLyN1bmJveC1zdmcKKyAgICAvLyBGSVhNRTog
PGc+LCA8dXNlPiBhbmQgPHRzcGFuPiBoYXZlIHNwZWNpYWwgKD8pIGJlaGF2aW9yIGZvciBkaXNw
bGF5OmNvbnRlbnRzIGluIHRoZSBjdXJyZW50IGRyYWZ0IHNwZWMuCisgICAgaWYgKGlzPFNWR0Vs
ZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNpZiBFTkFCTEUoTUFUSE1M
KQorICAgIC8vIE5vdCBzdXJlIE1hdGhNTCBjb2RlIGNhbiBoYW5kbGUgaXQuCisgICAgaWYgKGlz
PE1hdGhNTEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZiAv
LyBFTkFCTEUoTUFUSE1MKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRhZ05hbWVzLmdldCgpLmNvbnRhaW5zKGVs
ZW1lbnQubG9jYWxOYW1lKCkpOworfQorCit2b2lkIEFkanVzdGVyOjphZGp1c3REaXNwbGF5Q29u
dGVudHNTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Cit7CisgICAgYm9vbCBkaXNwbGF5
Q29udGVudHNFbmFibGVkID0gaXM8SFRNTFNsb3RFbGVtZW50PihtX2VsZW1lbnQpIHx8IFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZGlzcGxheUNvbnRlbnRzRW5hYmxl
ZCgpOworICAgIGlmICghZGlzcGxheUNvbnRlbnRzRW5hYmxlZCkgeworICAgICAgICBzdHlsZS5z
ZXREaXNwbGF5KERpc3BsYXlUeXBlOjpJbmxpbmUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFtX2VsZW1lbnQpIHsKKyAgICAgICAgaWYgKHN0eWxlLnN0eWxlVHlwZSgpICE9
IFBzZXVkb0lkOjpCZWZvcmUgJiYgc3R5bGUuc3R5bGVUeXBlKCkgIT0gUHNldWRvSWQ6OkFmdGVy
KQorICAgICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6Tm9uZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQo
KSA9PSBtX2VsZW1lbnQpIHsKKyAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6
QmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGhhc0VmZmVjdGl2ZURp
c3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKCptX2VsZW1lbnQpKQorICAgICAgICBzdHlsZS5z
ZXREaXNwbGF5KERpc3BsYXlUeXBlOjpOb25lKTsKK30KKwordm9pZCBBZGp1c3Rlcjo6YWRqdXN0
U1ZHRWxlbWVudFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU1ZHRWxlbWVudCYgc3Zn
RWxlbWVudCkKK3sKKyAgICAvLyBPbmx5IHRoZSByb290IDxzdmc+IGVsZW1lbnQgaW4gYW4gU1ZH
IGRvY3VtZW50IGZyYWdtZW50IHRyZWUgaG9ub3JzIGNzcyBwb3NpdGlvbgorICAgIGF1dG8gaXNQ
b3NpdGlvbmluZ0FsbG93ZWQgPSBzdmdFbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1Rh
ZykgJiYgc3ZnRWxlbWVudC5wYXJlbnROb2RlKCkgJiYgIXN2Z0VsZW1lbnQucGFyZW50Tm9kZSgp
LT5pc1NWR0VsZW1lbnQoKSAmJiAhc3ZnRWxlbWVudC5jb3JyZXNwb25kaW5nRWxlbWVudCgpOwor
ICAgIGlmICghaXNQb3NpdGlvbmluZ0FsbG93ZWQpCisgICAgICAgIHN0eWxlLnNldFBvc2l0aW9u
KFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7CisKKyAgICAvLyBSZW5kZXJTVkdSb290
IGhhbmRsZXMgem9vbWluZyBmb3IgdGhlIHdob2xlIFNWRyBzdWJ0cmVlLCBzbyBmb3JlaWduT2Jq
ZWN0IGNvbnRlbnQgc2hvdWxkCisgICAgLy8gbm90IGJlIHNjYWxlZCBhZ2Fpbi4KKyAgICBpZiAo
c3ZnRWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2JqZWN0VGFnKSkKKyAgICAg
ICAgc3R5bGUuc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisK
KyAgICAvLyBTVkcgdGV4dCBsYXlvdXQgY29kZSBleHBlY3RzIHVzIHRvIGJlIGEgYmxvY2stbGV2
ZWwgc3R5bGUgZWxlbWVudC4KKyAgICBpZiAoKHN2Z0VsZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1l
czo6Zm9yZWlnbk9iamVjdFRhZykgfHwgc3ZnRWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjp0
ZXh0VGFnKSkgJiYgc3R5bGUuaXNEaXNwbGF5SW5saW5lVHlwZSgpKQorICAgICAgICBzdHlsZS5z
ZXREaXNwbGF5KERpc3BsYXlUeXBlOjpCbG9jayk7Cit9CisKK3ZvaWQgQWRqdXN0ZXI6OmFkanVz
dEZvclNpdGVTcGVjaWZpY1F1aXJrcyhSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Cit7CisgICAg
aWYgKG1fZG9jdW1lbnQucXVpcmtzKCkubmVlZHNHTWFpbE92ZXJmbG93U2Nyb2xsUXVpcmsoKSAm
JiBtX2VsZW1lbnQpIHsKKyAgICAgICAgLy8gVGhpcyB0dXJucyBzaWRlYmFyIHNjcm9sbGFibGUg
d2l0aG91dCBtb3VzZSBtb3ZlIGV2ZW50LgorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbVN0cmluZz4gcm9sZVZhbHVlKCJuYXZpZ2F0aW9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6
OkhpZGRlbiAmJiBtX2VsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocm9s
ZUF0dHIpID09IHJvbGVWYWx1ZSkKKyAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVy
Zmxvdzo6QXV0byk7CisgICAgfQorICAgIGlmIChtX2RvY3VtZW50LnF1aXJrcygpLm5lZWRzWW91
VHViZU92ZXJmbG93U2Nyb2xsUXVpcmsoKSAmJiBtX2VsZW1lbnQpIHsKKyAgICAgICAgLy8gVGhp
cyB0dXJucyBzaWRlYmFyIHNjcm9sbGFibGUgd2l0aG91dCBob3Zlci4KKyAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21TdHJpbmc+IGlkVmFsdWUoImd1aWRlLWlubmVyLWNvbnRlbnQi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIGlmIChzdHlsZS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6SGlkZGVuICYmIG1fZWxlbWVudC0+aWRGb3JTdHlsZVJl
c29sdXRpb24oKSA9PSBpZFZhbHVlKQorICAgICAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dZKE92
ZXJmbG93OjpBdXRvKTsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQor
c3RhdGljIGJvb2wgaGFzVGV4dENoaWxkKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAg
Zm9yIChhdXRvKiBjaGlsZCA9IGVsZW1lbnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoaXM8VGV4dD4oY2hpbGQpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBBZGp1c3Rlcjo6YWRqdXN0Rm9yVGV4dEF1dG9zaXppbmcoUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGF1dG8mIGRvY3VtZW50ID0gZWxlbWVudC5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQuc2V0dGluZ3MoKS50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQoKSB8fCAhZG9jdW1lbnQuc2V0dGluZ3MoKS50ZXh0QXV0b3NpemluZ1VzZXNJZGVtcG90
ZW50TW9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBdXRvc2l6ZVN0YXR1czo6
dXBkYXRlU3RhdHVzKHN0eWxlKTsKKyAgICBpZiAoc3R5bGUudGV4dFNpemVBZGp1c3QoKS5pc05v
bmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgaW5pdGlhbFNjYWxlID0g
ZG9jdW1lbnQucGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT5pbml0aWFsU2NhbGUoKSA6IDE7Cisg
ICAgYXV0byBhZGp1c3RMaW5lSGVpZ2h0SWZOZWVkZWQgPSBbJl0oYXV0byBjb21wdXRlZEZvbnRT
aXplKSB7CisgICAgICAgIGF1dG8gbGluZUhlaWdodCA9IHN0eWxlLnNwZWNpZmllZExpbmVIZWln
aHQoKTsKKyAgICAgICAgY29uc3RleHByIHN0YXRpYyB1bnNpZ25lZCBlbGlnaWJsZUZvbnRTaXpl
ID0gMTI7CisgICAgICAgIGlmIChjb21wdXRlZEZvbnRTaXplICogaW5pdGlhbFNjYWxlID49IGVs
aWdpYmxlRm9udFNpemUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3RleHBy
IHN0YXRpYyBmbG9hdCBib29zdEZhY3RvciA9IDEuMjU7CisgICAgICAgIGF1dG8gbWluaW11bUxp
bmVIZWlnaHQgPSBib29zdEZhY3RvciAqIGNvbXB1dGVkRm9udFNpemU7CisgICAgICAgIGlmICgh
bGluZUhlaWdodC5pc0ZpeGVkKCkgfHwgbGluZUhlaWdodC52YWx1ZSgpID49IG1pbmltdW1MaW5l
SGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChBdXRvc2l6ZVN0YXR1
czo6cHJvYmFibHlDb250YWluc0FTbWFsbEZpeGVkTnVtYmVyT2ZMaW5lcyhzdHlsZSkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3R5bGUuc2V0TGluZUhlaWdodCh7IG1pbmltdW1M
aW5lSGVpZ2h0LCBGaXhlZCB9KTsKKyAgICB9OworCisgICAgYXV0byBmb250RGVzY3JpcHRpb24g
PSBzdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGluaXRpYWxDb21wdXRlZEZvbnRT
aXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpOworICAgIGF1dG8gc3BlY2lmaWVk
Rm9udFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOworICAgIGJvb2wgaXND
YW5kaWRhdGUgPSBzdHlsZS5pc0lkZW1wb3RlbnRUZXh0QXV0b3NpemluZ0NhbmRpZGF0ZSgpOwor
ICAgIGlmICghaXNDYW5kaWRhdGUgJiYgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGluaXRpYWxD
b21wdXRlZEZvbnRTaXplLCBzcGVjaWZpZWRGb250U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gYWRqdXN0ZWRGb250U2l6ZSA9IEF1dG9zaXplU3RhdHVzOjppZGVtcG90
ZW50VGV4dFNpemUoZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgaW5pdGlhbFNjYWxl
KTsKKyAgICBpZiAoaXNDYW5kaWRhdGUgJiYgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGluaXRp
YWxDb21wdXRlZEZvbnRTaXplLCBhZGp1c3RlZEZvbnRTaXplKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFoYXNUZXh0Q2hpbGQoZWxlbWVudCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoaXNDYW5kaWRhdGUg
PyBhZGp1c3RlZEZvbnRTaXplIDogc3BlY2lmaWVkRm9udFNpemUpOworICAgIHN0eWxlLnNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIHN0eWxlLmZvbnRD
YXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHJlc3RvcmUgY29tcHV0ZWQgbGluZSBoZWlnaHQgdG8gaXRzIG9yaWdpbmFs
IHZhbHVlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGlzIG5vdAorICAgIC8vIGFuIGlk
ZW1wb3RlbnQgdGV4dCBhdXRvc2l6aW5nIGNhbmRpZGF0ZTsgb3RoZXJ3aXNlLCBpZiBhbiBlbGVt
ZW50IHRoYXQgaXMgYSB0ZXh0IGF1dG9zaXppbmcgY2FuZGlkYXRlIGNvbnRhaW5zCisgICAgLy8g
Y2hpbGRyZW4gd2hpY2ggYXJlIG5vdCBhdXRvc2l6ZWQsIHRoZSBub24tYXV0b3NpemVkIGNvbnRl
bnQgd2lsbCBlbmQgdXAgd2l0aCBhIGJvb3N0ZWQgbGluZSBoZWlnaHQuCisgICAgaWYgKGlzQ2Fu
ZGlkYXRlKQorICAgICAgICBhZGp1c3RMaW5lSGVpZ2h0SWZOZWVkZWQoYWRqdXN0ZWRGb250U2l6
ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUFkanVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjgwNWIwNWQ2ZWJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVBZGp1c3Rlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFbGVtZW50OworY2xhc3MgUmVuZGVyU3R5
bGU7CitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU2V0dGluZ3M7CisKK25hbWVzcGFjZSBTdHls
ZSB7CisKK2NsYXNzIEFkanVzdGVyIHsKK3B1YmxpYzoKKyAgICBBZGp1c3Rlcihjb25zdCBEb2N1
bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHBhcmVudEJveFN0eWxlLCBjb25zdCBFbGVtZW50Kik7CisKKyAgICB2b2lkIGFkanVzdChSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUpIGNv
bnN0OworCisgICAgc3RhdGljIHZvaWQgYWRqdXN0U1ZHRWxlbWVudFN0eWxlKFJlbmRlclN0eWxl
JiwgY29uc3QgU1ZHRWxlbWVudCYpOworI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCisgICAg
c3RhdGljIGJvb2wgYWRqdXN0Rm9yVGV4dEF1dG9zaXppbmcoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50Jik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkanVzdERpc3BsYXlDb250
ZW50c1N0eWxlKFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RGb3JTaXRlU3Bl
Y2lmaWNRdWlya3MoUmVuZGVyU3R5bGUmKSBjb25zdDsKKworICAgIGNvbnN0IERvY3VtZW50JiBt
X2RvY3VtZW50OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVudFN0eWxlOworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBtX3BhcmVudEJveFN0eWxlOworICAgIGNvbnN0IEVsZW1lbnQqIG1f
ZWxlbWVudDsKK307CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCAxMWVi
ZTI1ZDAxMy4uMmI5ZmY4NDk5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTUx
LDYgKzUxLDcgQEAKICNpbmNsdWRlICJTVkdUaXRsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdV
c2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlQWRq
dXN0ZXIuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU5Nyw3ICs1OTgsNyBAQCBPcHRpb25h
bDxFbGVtZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSYgcGFyZW50UwogICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGluIGEgPHVzZT4gdHJl
ZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmluaXRpb24gdHJlZS4KICAgICBpZiAoYXV0
byBzdHlsZUVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkp
KSB7CiAgICAgICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gc3R5bGUgPSBzdHlsZUVsZW1lbnQt
PnJlc29sdmVTdHlsZSgmcGFyZW50U3R5bGUpOwotICAgICAgICBTdHlsZVJlc29sdmVyOjphZGp1
c3RTVkdFbGVtZW50U3R5bGUoKnRoaXMsICpzdHlsZS0+cmVuZGVyU3R5bGUpOworICAgICAgICBT
dHlsZTo6QWRqdXN0ZXI6OmFkanVzdFNWR0VsZW1lbnRTdHlsZSgqc3R5bGUtPnJlbmRlclN0eWxl
LCAqdGhpcyk7CiAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICB9CiAK
</data>
<flag name="review"
          id="398955"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383217</attachid>
            <date>2019-11-09 07:43:16 -0800</date>
            <delta_ts>2019-11-09 09:09:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-adjuster-4.patch</filename>
            <type>text/plain</type>
            <size>134691</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYTQyNTJmY2NlOS4uMTdiMzY3NDU4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjIgQEAKKzIwMTktMTEtMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgc3R5bGUgYWRqdXN0bWVudCBjb2RlIG91dCBvZiBTdHlsZVJlc29s
dmVyIGFuZCBpbnRvIGEgY2xhc3Mgb2YgaXRzIG93bgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWmFs
YW4gQnVqdGFzLgorCisgICAgICAgIEludHJvZHVjZSBTdHlsZTo6QWRqdXN0ZXIuCisKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZElu
dHJpbnNpY01hcmdpbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZXF1aXZhbGVudEJs
b2NrRGlzcGxheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkb2VzTm90SW5oZXJpdFRl
eHREZWNvcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYWJsZU92
ZXJmbG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omhhc0VmZmVjdGl2ZURpc3BsYXlO
b25lRm9yRGlzcGxheUNvbnRlbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFkanVz
dERpc3BsYXlDb250ZW50c1N0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmFkanVzdFNWR0VsZW1lbnRTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlRWZmZWN0aXZlVG91Y2hBY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omhhc1RleHRDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZUZvclRleHRBdXRvc2l6aW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlRm9y
U2l0ZVNwZWNpZmljUXVpcmtzKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZl
ci5oOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpy
ZWNvbXB1dGVUZXh0QXV0b1NpemluZ0luQWxsRnJhbWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFN0
eWxlKToKKworICAgICAgICBOb25lIG9mIHRoaXMgY29kZSB1c2VzIHRoZSBTdHlsZVJlc29sdmVy
IGFyZ3VtZW50IHNvIHJlbW92ZSBpdC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OmFkanVzdENoZWNrYm94U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OmFkanVzdFJhZGlvU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OmFkanVzdEJ1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdENhcHNMb2NrSW5kaWNhdG9yU3R5bGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdEF0dGFjaG1lbnRTdHls
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TGlzdEJ1dHRv
blN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RQcm9n
cmVzc0JhclN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjphZGp1c3RNZWRpYUNvbnRyb2xTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0QXBwbGVQYXlCdXR0b25T
dHlsZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ29jb2E6OmFkanVzdEFwcGxlUGF5QnV0dG9uU3R5bGUgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFRleHRGaWVsZFN0eWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6YWRqdXN0TGlzdEJ1dHRvblN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0
b25TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0
UHJvZ3Jlc3NCYXJTdHlsZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
R3RrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVJT1M6OmFkanVzdFJhZGlvU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVzdFNlYXJjaEZpZWxkU3R5
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRv
blN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TGlzdEJ1dHRvblN0eWxlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFTdHls
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0TWVudUxpc3RTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmll
bGRDYW5jZWxCdXR0b25TdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSBjb25zdCk6CisgICAgICAgICog
c3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkFkanVzdGVyOjpBZGp1c3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YWRkSW50cmlu
c2ljTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZXF1aXZhbGVudEJsb2NrRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6aXNBdFNoYWRvd0JvdW5kYXJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpkb2VzTm90SW5oZXJpdFRleHREZWNvcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjppc1Njcm9sbGFibGVPdmVyZmxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6Y29tcHV0ZUVmZmVjdGl2ZVRvdWNoQWN0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6aGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JEaXNwbGF5Q29udGVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OkFkanVzdGVyOjphZGp1c3REaXNwbGF5Q29udGVudHNTdHls
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdFNWR0Vs
ZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdEZv
clNpdGVTcGVjaWZpY1F1aXJrcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6aGFz
VGV4dENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpBZGp1c3Rlcjo6YWRqdXN0Rm9y
VGV4dEF1dG9zaXppbmcpOgorICAgICAgICAqIHN0eWxlL1N0eWxlQWRqdXN0ZXIuaDogQWRkZWQu
CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxl
bWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKwogMjAxOS0xMS0wOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRGVmZXJyZWRQcm9taXNlIGJlaGF2ZSBu
aWNlbHkgd2l0aCByZWdhcmRzIHRvIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
aW5kZXggOWM2MzliYzU1YjQuLjI2ODEyYWU4OTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjM0OSw2
ICsyMzQ5LDcgQEAgc3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCiBzdHlsZS9JbmxpbmVU
ZXh0Qm94U3R5bGUuY3BwCiBzdHlsZS9NYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUuY3BwCiBzdHls
ZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCitzdHlsZS9TdHlsZUFkanVzdGVyLmNwcAogc3R5bGUvU3R5
bGVCdWlsZGVyLmNwcAogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCiBzdHlsZS9TdHlsZUNo
YW5nZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAyY2U1YTk3M2Q3MC4uNmVhMzQ4MTIxNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4MTYsNiArNDgx
Niw3IEBACiAJCUU0NEZBMTg1MUJDQTZCNUEwMDkxQjZFRiAvKiBDb21wb3NlZFRyZWVJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0RkEx
ODQxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggKi87IH07CiAJCUU0
NTMyMkFDMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzMjJBQTE0MENFMjY3MDA1QTBGOTIg
LyogU2VsZWN0b3JRdWVyeS5oICovOyB9OwogCQlFNDVCQTZBQTIzNzQ5MjZDMDA0REZDMDcgLyog
TWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDVCQTZBODIzNzQ5MjZCMDA0REZDMDcgLyogTWF0Y2hlZERlY2xh
cmF0aW9uc0NhY2hlLmggKi87IH07CisJCUU0NUJBNkI2MjM3NjIyQTMwMDRERkMwNyAvKiBTdHls
ZUFkanVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDVCQTZCNTIzNzYyMjlGMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5oICovOyB9OwogCQlF
NDYwNUZFQzIxNjY0ODA5MDBFNTMwNDYgLyogUHJld2FybUluZm9ybWF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYwNUZFQTIxNjY0ODA4MDBF
NTMwNDYgLyogUHJld2FybUluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ2MTgwMkQxQzhERDI5MDAwMjZDMDJDIC8qIFN0eWxl
UmVsYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuaCAqLzsgfTsKIAkJ
RTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0NSAv
KiBTdHlsZVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTE1MTQxLDYgKzE1MTQyLDggQEAKIAkJRTQ1MzkwQUQwRUFGRjRCNTAwMzY5NUM4
IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTeXN0ZW1NZW1vcnlJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDVCQTZBODIzNzQ5MjZCMDA0REZDMDcgLyogTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDVCQTZBQjIzNzQ5MjdCMDA0REZDMDcg
LyogTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGNo
ZWREZWNsYXJhdGlvbnNDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0
NUJBNkIyMjM3NjIyN0UwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlQWRqdXN0ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFNDVCQTZCNTIzNzYyMjlGMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUFkanVzdGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQ
cmV3YXJtSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
d2FybUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjE4MDJD
MUM4REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY5OTgsNiArMjcwMDEsOCBAQAogCQkJCUU0NUJB
NkE4MjM3NDkyNkIwMDRERkMwNyAvKiBNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUuaCAqLywKIAkJ
CQlFNEFCQUJFNTIzNjFBMzQyMDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmNwcCAqLywKIAkJ
CQlFNEFCQUJFMjIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggKi8sCisJCQkJ
RTQ1QkE2QjIyMzc2MjI3RTAwNERGQzA3IC8qIFN0eWxlQWRqdXN0ZXIuY3BwICovLAorCQkJCUU0
NUJBNkI1MjM3NjIyOUYwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmggKi8sCiAJCQkJRTRBQkFD
MDcyMzZCMDE4MTAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5jcHAgKi8sCiAJCQkJRTRBQkFDMDUy
MzZCMDE2QzAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5oICovLAogCQkJCTgzQjk2ODc5MTlGOEFC
ODMwMDRFRjdBRiAvKiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCAqLywKQEAgLTI5MjQyLDYgKzI5
MjQ3LDcgQEAKIAkJCQk1NzIxQTk4QjFFQ0U1NzA0MDA4MTI5NUEgLyogQ3J5cHRvQWxnb3JpdGht
UnNhUHNzUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJEMzMxQTE4MkQ4REREMDBDMDVE
OUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxMjVGODJDMTgyMkNGRUMwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExLmggaW4g
SGVhZGVycyAqLywKKwkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5QUMzRUYxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0
b0FsZ29yaXRobVNIQTIyNC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5QUMzRjExODI0REM3OTAw
MzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTI1Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5
QUMzRjMxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTM4NC5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggNmRjYTkwMjBiMjku
LmY0MTNmNzJhMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00NSwz
NyArNDUsMjUgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJNYXRo
TUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlF
dmFsdWF0b3IuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdl
UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIlBhaXIuaCIKLSNpbmNsdWRlICJRdWlya3MuaCIK
ICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0
YW50cy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlJ1bGVTZXQuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVu
c2lvbnMuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdO
YW1lcy5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlICJTdHlsZUFkanVzdGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUHJv
cGVydGllcy5oIgpAQCAtODcsNyArNzUsNiBAQAogI2luY2x1ZGUgIlZpZXdwb3J0U3R5bGVSZXNv
bHZlci5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRG
b250RmFtaWx5TmFtZXMuaCIKLSNpbmNsdWRlIDxiaXRzZXQ+CiAjaW5jbHVkZSA8d3RmL1NlY29u
ZHMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtMjc1LDggKzI2Miw4IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAKICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpLCBlbGVtZW50KTsK
IAotICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRl
Y29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKCpz
dGF0ZS5zdHlsZSgpLCAqc3RhdGUucGFyZW50U3R5bGUoKSwgcGFyZW50Qm94U3R5bGUsICZlbGVt
ZW50LCBzdGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoKSk7CisgICAgU3R5bGU6OkFkanVz
dGVyIGFkanVzdGVyKGRvY3VtZW50KCksICpzdGF0ZS5wYXJlbnRTdHlsZSgpLCBwYXJlbnRCb3hT
dHlsZSwgJmVsZW1lbnQpOworICAgIGFkanVzdGVyLmFkanVzdCgqc3RhdGUuc3R5bGUoKSwgc3Rh
dGUudXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkpOwogCiAgICAgaWYgKHN0YXRlLnN0eWxlKCkt
Pmhhc1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgZG9jdW1lbnQoKS5zZXRIYXNTdHlsZVdpdGhW
aWV3cG9ydFVuaXRzKCk7CkBAIC0zMDQsNyArMjkxLDggQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KgogICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIHJlc3VsdCwgeyBTdHlsZTo6Q2Fz
Y2FkZUxldmVsOjpBdXRob3IgfSk7CiAgICAgYnVpbGRlci5hcHBseUFsbFByb3BlcnRpZXMoKTsK
IAotICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqc3RhdGUucGFyZW50U3R5
bGUoKSwgbnVsbHB0ciwgbnVsbHB0ciwgc3RhdGUudXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkp
OworICAgIFN0eWxlOjpBZGp1c3RlciBhZGp1c3Rlcihkb2N1bWVudCgpLCAqc3RhdGUucGFyZW50
U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgYWRqdXN0ZXIuYWRqdXN0KCpzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS51c2VyQWdlbnRBcHBlYXJhbmNlU3R5bGUoKSk7CiAKICAgICAvLyBBZGQg
YWxsIHRoZSBhbmltYXRpbmcgcHJvcGVydGllcyB0byB0aGUga2V5ZnJhbWUuCiAgICAgdW5zaWdu
ZWQgcHJvcGVydHlDb3VudCA9IGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkucHJvcGVydHlDb3VudCgp
OwpAQCAtNDU5LDggKzQ0Nyw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmCiAKICAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpLCBlbGVtZW50KTsKIAot
ICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29y
YXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0
ZS5zdHlsZSgpLCAqbV9zdGF0ZS5wYXJlbnRTdHlsZSgpLCBwYXJlbnRCb3hTdHlsZSwgbnVsbHB0
ciwgc3RhdGUudXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkpOworICAgIFN0eWxlOjpBZGp1c3Rl
ciBhZGp1c3Rlcihkb2N1bWVudCgpLCAqc3RhdGUucGFyZW50U3R5bGUoKSwgcGFyZW50Qm94U3R5
bGUsIG51bGxwdHIpOworICAgIGFkanVzdGVyLmFkanVzdCgqc3RhdGUuc3R5bGUoKSwgc3RhdGUu
dXNlckFnZW50QXBwZWFyYW5jZVN0eWxlKCkpOwogCiAgICAgaWYgKHN0YXRlLnN0eWxlKCktPmhh
c1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgZG9jdW1lbnQoKS5zZXRIYXNTdHlsZVdpdGhWaWV3
cG9ydFVuaXRzKCk7CkBAIC01MDMsNTQ4ICs0OTEsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKQogICAgIHJldHVy
biBtX3N0YXRlLnRha2VTdHlsZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRJbnRyaW5zaWNNYXJn
aW5zKFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICAvLyBJbnRyaW5zaWMgbWFyZ2luIHZhbHVl
LgotICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJnaW4gPSBjbGFtcFRvSW50ZWdlcigyICogc3R5
bGUuZWZmZWN0aXZlWm9vbSgpKTsKLQotICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9oZWlnaHQg
YWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRoIGlzIGZs
YXdlZC4KLSAgICAvLyBGSVhNRTogVXNpbmcgImhhc1F1aXJrIiB0byBkZWNpZGUgdGhlIG1hcmdp
biB3YXNuJ3Qgc2V0IGlzIGtpbmQgb2YgbGFtZS4KLSAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5tYXJnaW5MZWZ0KCkuaGFzUXVp
cmsoKSkKLSAgICAgICAgICAgIHN0eWxlLnNldE1hcmdpbkxlZnQoTGVuZ3RoKGludHJpbnNpY01h
cmdpbiwgRml4ZWQpKTsKLSAgICAgICAgaWYgKHN0eWxlLm1hcmdpblJpZ2h0KCkuaGFzUXVpcmso
KSkKLSAgICAgICAgICAgIHN0eWxlLnNldE1hcmdpblJpZ2h0KExlbmd0aChpbnRyaW5zaWNNYXJn
aW4sIEZpeGVkKSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKSB7
Ci0gICAgICAgIGlmIChzdHlsZS5tYXJnaW5Ub3AoKS5oYXNRdWlyaygpKQotICAgICAgICAgICAg
c3R5bGUuc2V0TWFyZ2luVG9wKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7Ci0gICAg
ICAgIGlmIChzdHlsZS5tYXJnaW5Cb3R0b20oKS5oYXNRdWlyaygpKQotICAgICAgICAgICAgc3R5
bGUuc2V0TWFyZ2luQm90dG9tKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7Ci0gICAg
fQotfQotCi1zdGF0aWMgRGlzcGxheVR5cGUgZXF1aXZhbGVudEJsb2NrRGlzcGxheShjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBzd2l0
Y2ggKGF1dG8gZGlzcGxheSA9IHN0eWxlLmRpc3BsYXkoKSkgewotICAgIGNhc2UgRGlzcGxheVR5
cGU6OkJsb2NrOgotICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlOgotICAgIGNhc2UgRGlzcGxh
eVR5cGU6OkJveDoKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpGbGV4OgotICAgIGNhc2UgRGlzcGxh
eVR5cGU6OldlYktpdEZsZXg6Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6R3JpZDoKLSAgICBjYXNl
IERpc3BsYXlUeXBlOjpGbG93Um9vdDoKLSAgICAgICAgcmV0dXJuIGRpc3BsYXk7Ci0KLSAgICBj
YXNlIERpc3BsYXlUeXBlOjpMaXN0SXRlbToKLSAgICAgICAgLy8gSXQgaXMgYSBXaW5JRSBidWcg
dGhhdCBmbG9hdGVkIGxpc3QgaXRlbXMgbG9zZSB0aGVpciBidWxsZXRzLCBzbyB3ZSdsbCBlbXVs
YXRlIHRoZSBxdWlyaywgYnV0IG9ubHkgaW4gcXVpcmtzIG1vZGUuCi0gICAgICAgIGlmIChkb2N1
bWVudC5pblF1aXJrc01vZGUoKSAmJiBzdHlsZS5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gRGlzcGxheVR5cGU6OkJsb2NrOwotICAgICAgICByZXR1cm4gZGlzcGxheTsKLSAgICBj
YXNlIERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZToKLSAgICAgICAgcmV0dXJuIERpc3BsYXlUeXBl
OjpUYWJsZTsKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpJbmxpbmVCb3g6Ci0gICAgICAgIHJldHVy
biBEaXNwbGF5VHlwZTo6Qm94OwotICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGluZUZsZXg6Ci0g
ICAgY2FzZSBEaXNwbGF5VHlwZTo6V2ViS2l0SW5saW5lRmxleDoKLSAgICAgICAgcmV0dXJuIERp
c3BsYXlUeXBlOjpGbGV4OwotICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGluZUdyaWQ6Ci0gICAg
ICAgIHJldHVybiBEaXNwbGF5VHlwZTo6R3JpZDsKLQotICAgIGNhc2UgRGlzcGxheVR5cGU6Oklu
bGluZToKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpDb21wYWN0OgotICAgIGNhc2UgRGlzcGxheVR5
cGU6OklubGluZUJsb2NrOgotICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlUm93R3JvdXA6Ci0g
ICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cDoKLSAgICBjYXNlIERpc3BsYXlU
eXBlOjpUYWJsZUZvb3Rlckdyb3VwOgotICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlUm93Ogot
ICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlQ29sdW1uR3JvdXA6Ci0gICAgY2FzZSBEaXNwbGF5
VHlwZTo6VGFibGVDb2x1bW46Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVDZWxsOgotICAg
IGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlQ2FwdGlvbjoKLSAgICAgICAgcmV0dXJuIERpc3BsYXlU
eXBlOjpCbG9jazsKLSAgICBjYXNlIERpc3BsYXlUeXBlOjpDb250ZW50czoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6Q29udGVudHM7
Ci0gICAgY2FzZSBEaXNwbGF5VHlwZTo6Tm9uZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6Tm9uZTsKLSAgICB9Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIERpc3BsYXlUeXBlOjpCbG9jazsKLX0KLQotLy8g
Q1NTIHJlcXVpcmVzIHRleHQtZGVjb3JhdGlvbiB0byBiZSByZXNldCBhdCBlYWNoIERPTSBlbGVt
ZW50IGZvciB0YWJsZXMsIAotLy8gaW5saW5lIGJsb2NrcywgaW5saW5lIHRhYmxlcywgc2hhZG93
IERPTSBjcm9zc2luZ3MsIGZsb2F0aW5nIGVsZW1lbnRzLAotLy8gYW5kIGFic29sdXRlIG9yIHJl
bGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cy4KLXN0YXRpYyBib29sIGRvZXNOb3RJbmhlcml0
VGV4dERlY29yYXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBl
bGVtZW50KQotewotICAgIHJldHVybiBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRh
YmxlIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lVGFibGUKLSAgICAg
ICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jayB8fCBzdHls
ZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJveCB8fCAoZWxlbWVudCAmJiBpc0F0
U2hhZG93Qm91bmRhcnkoKmVsZW1lbnQpKQotICAgICAgICB8fCBzdHlsZS5pc0Zsb2F0aW5nKCkg
fHwgc3R5bGUuaGFzT3V0T2ZGbG93UG9zaXRpb24oKTsKLX0KLQotI2lmIEVOQUJMRShPVkVSRkxP
V19TQ1JPTExJTkdfVE9VQ0gpIHx8IEVOQUJMRShQT0lOVEVSX0VWRU5UUykKLXN0YXRpYyBib29s
IGlzU2Nyb2xsYWJsZU92ZXJmbG93KE92ZXJmbG93IG92ZXJmbG93KQotewotICAgIHJldHVybiBv
dmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRv
OwotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlz
cGxheUNvbnRlbnRzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy1kaXNwbGF5LTMvI3VuYm94LWh0bWwKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gdGFnTmFtZXMgPSBbXSB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBIVE1MUXVhbGlmaWVkTmFtZSogY29uc3QgdGFnTGlzdFtdID0gewotICAg
ICAgICAgICAgJmJyVGFnLmdldCgpLAotICAgICAgICAgICAgJndiclRhZy5nZXQoKSwKLSAgICAg
ICAgICAgICZtZXRlclRhZy5nZXQoKSwKLSAgICAgICAgICAgICZhcHBsZXRUYWcuZ2V0KCksCi0g
ICAgICAgICAgICAmcHJvZ3Jlc3NUYWcuZ2V0KCksCi0gICAgICAgICAgICAmY2FudmFzVGFnLmdl
dCgpLAotICAgICAgICAgICAgJmVtYmVkVGFnLmdldCgpLAotICAgICAgICAgICAgJm9iamVjdFRh
Zy5nZXQoKSwKLSAgICAgICAgICAgICZhdWRpb1RhZy5nZXQoKSwKLSAgICAgICAgICAgICZpZnJh
bWVUYWcuZ2V0KCksCi0gICAgICAgICAgICAmaW1nVGFnLmdldCgpLAotICAgICAgICAgICAgJnZp
ZGVvVGFnLmdldCgpLAotICAgICAgICAgICAgJmZyYW1lVGFnLmdldCgpLAotICAgICAgICAgICAg
JmZyYW1lc2V0VGFnLmdldCgpLAotICAgICAgICAgICAgJmlucHV0VGFnLmdldCgpLAotICAgICAg
ICAgICAgJnRleHRhcmVhVGFnLmdldCgpLAotICAgICAgICAgICAgJnNlbGVjdFRhZy5nZXQoKSwK
LSAgICAgICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7Ci0gICAgICAgIGZv
ciAoYXV0byYgbmFtZSA6IHRhZ0xpc3QpCi0gICAgICAgICAgICBzZXQuYWRkKG5hbWUtPmxvY2Fs
TmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9KCk7Ci0KLSAgICAvLyBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtc3ZnCi0gICAgLy8gRklYTUU6
IDxnPiwgPHVzZT4gYW5kIDx0c3Bhbj4gaGF2ZSBzcGVjaWFsICg/KSBiZWhhdmlvciBmb3IgZGlz
cGxheTpjb250ZW50cyBpbiB0aGUgY3VycmVudCBkcmFmdCBzcGVjLgotICAgIGlmIChpczxTVkdF
bGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jaWYgRU5BQkxFKE1BVEhN
TCkKLSAgICAvLyBOb3Qgc3VyZSBNYXRoTUwgY29kZSBjYW4gaGFuZGxlIGl0LgotICAgIGlmIChp
czxNYXRoTUxFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYg
Ly8gRU5BQkxFKE1BVEhNTCkKLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0YWdOYW1lcy5nZXQoKS5jb250YWlucyhl
bGVtZW50LmxvY2FsTmFtZSgpKTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0RGlzcGxheUNvbnRl
bnRzU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIGJvb2wgZGlzcGxheUNvbnRlbnRzRW5hYmxlZCA9IGlzPEhUTUxTbG90RWxlbWVudD4oZWxl
bWVudCkgfHwgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5kaXNwbGF5
Q29udGVudHNFbmFibGVkKCk7Ci0gICAgaWYgKCFkaXNwbGF5Q29udGVudHNFbmFibGVkKSB7Ci0g
ICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6OklubGluZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGlmIChzdHlsZS5zdHls
ZVR5cGUoKSAhPSBQc2V1ZG9JZDo6QmVmb3JlICYmIHN0eWxlLnN0eWxlVHlwZSgpICE9IFBzZXVk
b0lkOjpBZnRlcikKLSAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6Ok5v
bmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChlbGVtZW50LT5kb2N1bWVudCgp
LmRvY3VtZW50RWxlbWVudCgpID09IGVsZW1lbnQpIHsKLSAgICAgICAgc3R5bGUuc2V0RGlzcGxh
eShEaXNwbGF5VHlwZTo6QmxvY2spOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICho
YXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cygqZWxlbWVudCkpCi0gICAg
ICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6Ok5vbmUpOwotfQotCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmFkanVzdFNWR0VsZW1lbnRTdHlsZShjb25zdCBTVkdFbGVtZW50JiBzdmdFbGVt
ZW50LCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgLy8gT25seSB0aGUgcm9vdCA8c3ZnPiBl
bGVtZW50IGluIGFuIFNWRyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9ycyBjc3MgcG9zaXRp
b24KLSAgICBhdXRvIGlzUG9zaXRpb25pbmdBbGxvd2VkID0gc3ZnRWxlbWVudC5oYXNUYWdOYW1l
KFNWR05hbWVzOjpzdmdUYWcpICYmIHN2Z0VsZW1lbnQucGFyZW50Tm9kZSgpICYmICFzdmdFbGVt
ZW50LnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXN2Z0VsZW1lbnQuY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKTsKLSAgICBpZiAoIWlzUG9zaXRpb25pbmdBbGxvd2VkKQotICAgICAgICBz
dHlsZS5zZXRQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0aW9uKCkpOwotCi0gICAg
Ly8gUmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRoZSB3aG9sZSBTVkcgc3VidHJl
ZSwgc28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAotICAgIC8vIG5vdCBiZSBzY2FsZWQg
YWdhaW4uCi0gICAgaWYgKHN2Z0VsZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9i
amVjdFRhZykpCi0gICAgICAgIHN0eWxlLnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6Omlu
aXRpYWxab29tKCkpOwotCi0gICAgLy8gU1ZHIHRleHQgbGF5b3V0IGNvZGUgZXhwZWN0cyB1cyB0
byBiZSBhIGJsb2NrLWxldmVsIHN0eWxlIGVsZW1lbnQuCi0gICAgaWYgKChzdmdFbGVtZW50Lmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcpIHx8IHN2Z0VsZW1lbnQuaGFzVGFn
TmFtZShTVkdOYW1lczo6dGV4dFRhZykpICYmIHN0eWxlLmlzRGlzcGxheUlubGluZVR5cGUoKSkK
LSAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6QmxvY2spOwotfQotCi0jaWYg
RU5BQkxFKFBPSU5URVJfRVZFTlRTKQotc3RhdGljIE9wdGlvblNldDxUb3VjaEFjdGlvbj4gY29t
cHV0ZUVmZmVjdGl2ZVRvdWNoQWN0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE9wdGlv
blNldDxUb3VjaEFjdGlvbj4gZWZmZWN0aXZlVG91Y2hBY3Rpb25zKQotewotICAgIC8vIGh0dHBz
Oi8vdzNjLmdpdGh1Yi5pby9wb2ludGVyZXZlbnRzLyNkZXRlcm1pbmluZy1zdXBwb3J0ZWQtdG91
Y2gtYmVoYXZpb3IKLSAgICAvLyAiQSB0b3VjaCBiZWhhdmlvciBpcyBzdXBwb3J0ZWQgaWYgaXQg
Y29uZm9ybXMgdG8gdGhlIHRvdWNoLWFjdGlvbiBwcm9wZXJ0eSBvZiBlYWNoIGVsZW1lbnQgYmV0
d2VlbgotICAgIC8vIHRoZSBoaXQgdGVzdGVkIGVsZW1lbnQgYW5kIGl0cyBuZWFyZXN0IGFuY2Vz
dG9yIHdpdGggdGhlIGRlZmF1bHQgdG91Y2ggYmVoYXZpb3IgKGluY2x1ZGluZyBib3RoIHRoZQot
ICAgIC8vIGhpdCB0ZXN0ZWQgZWxlbWVudCBhbmQgdGhlIGVsZW1lbnQgd2l0aCB0aGUgZGVmYXVs
dCB0b3VjaCBiZWhhdmlvcikuIgotCi0gICAgYm9vbCBoYXNEZWZhdWx0VG91Y2hCZWhhdmlvciA9
IGlzU2Nyb2xsYWJsZU92ZXJmbG93KHN0eWxlLm92ZXJmbG93WCgpKSB8fCBpc1Njcm9sbGFibGVP
dmVyZmxvdyhzdHlsZS5vdmVyZmxvd1koKSk7Ci0gICAgaWYgKGhhc0RlZmF1bHRUb3VjaEJlaGF2
aW9yKQotICAgICAgICBlZmZlY3RpdmVUb3VjaEFjdGlvbnMgPSBSZW5kZXJTdHlsZTo6aW5pdGlh
bFRvdWNoQWN0aW9ucygpOwotCi0gICAgYXV0byB0b3VjaEFjdGlvbnMgPSBzdHlsZS50b3VjaEFj
dGlvbnMoKTsKLSAgICBpZiAodG91Y2hBY3Rpb25zID09IFJlbmRlclN0eWxlOjppbml0aWFsVG91
Y2hBY3Rpb25zKCkpCi0gICAgICAgIHJldHVybiBlZmZlY3RpdmVUb3VjaEFjdGlvbnM7Ci0KLSAg
ICBpZiAoZWZmZWN0aXZlVG91Y2hBY3Rpb25zLmNvbnRhaW5zKFRvdWNoQWN0aW9uOjpOb25lKSkK
LSAgICAgICAgcmV0dXJuIHsgVG91Y2hBY3Rpb246Ok5vbmUgfTsKLQotICAgIGlmIChlZmZlY3Rp
dmVUb3VjaEFjdGlvbnMuY29udGFpbnNBbnkoeyBUb3VjaEFjdGlvbjo6QXV0bywgVG91Y2hBY3Rp
b246Ok1hbmlwdWxhdGlvbiB9KSkKLSAgICAgICAgcmV0dXJuIHRvdWNoQWN0aW9uczsKLQotICAg
IGlmICh0b3VjaEFjdGlvbnMuY29udGFpbnNBbnkoeyBUb3VjaEFjdGlvbjo6QXV0bywgVG91Y2hB
Y3Rpb246Ok1hbmlwdWxhdGlvbiB9KSkKLSAgICAgICAgcmV0dXJuIGVmZmVjdGl2ZVRvdWNoQWN0
aW9uczsKLQotICAgIGF1dG8gc2hhcmVkVG91Y2hBY3Rpb25zID0gZWZmZWN0aXZlVG91Y2hBY3Rp
b25zICYgdG91Y2hBY3Rpb25zOwotICAgIGlmIChzaGFyZWRUb3VjaEFjdGlvbnMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4geyBUb3VjaEFjdGlvbjo6Tm9uZSB9OwotCi0gICAgcmV0dXJuIHNo
YXJlZFRvdWNoQWN0aW9uczsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklO
RykKLXN0YXRpYyBib29sIGhhc1RleHRDaGlsZChjb25zdCBFbGVtZW50JiBlbGVtZW50KQotewot
ICAgIGZvciAoYXV0byogY2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFRleHQ+KGNoaWxkKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGVGb3JUZXh0QXV0b3NpemluZyhS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFz
ZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nRW5hYmxlZCgpIHx8ICFzZXR0aW5ncygpLnRleHRBdXRv
c2l6aW5nVXNlc0lkZW1wb3RlbnRNb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEF1dG9zaXplU3RhdHVzOjp1cGRhdGVTdGF0dXMoc3R5bGUpOwotICAgIGlmIChzdHlsZS50ZXh0
U2l6ZUFkanVzdCgpLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9h
dCBpbml0aWFsU2NhbGUgPSBkb2N1bWVudCgpLnBhZ2UoKSA/IGRvY3VtZW50KCkucGFnZSgpLT5p
bml0aWFsU2NhbGUoKSA6IDE7Ci0gICAgYXV0byBhZGp1c3RMaW5lSGVpZ2h0SWZOZWVkZWQgPSBb
Jl0oYXV0byBjb21wdXRlZEZvbnRTaXplKSB7Ci0gICAgICAgIGF1dG8gbGluZUhlaWdodCA9IHN0
eWxlLnNwZWNpZmllZExpbmVIZWlnaHQoKTsKLSAgICAgICAgY29uc3RleHByIHN0YXRpYyB1bnNp
Z25lZCBlbGlnaWJsZUZvbnRTaXplID0gMTI7Ci0gICAgICAgIGlmIChjb21wdXRlZEZvbnRTaXpl
ICogaW5pdGlhbFNjYWxlID49IGVsaWdpYmxlRm9udFNpemUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgY29uc3RleHByIHN0YXRpYyBmbG9hdCBib29zdEZhY3RvciA9IDEuMjU7Ci0g
ICAgICAgIGF1dG8gbWluaW11bUxpbmVIZWlnaHQgPSBib29zdEZhY3RvciAqIGNvbXB1dGVkRm9u
dFNpemU7Ci0gICAgICAgIGlmICghbGluZUhlaWdodC5pc0ZpeGVkKCkgfHwgbGluZUhlaWdodC52
YWx1ZSgpID49IG1pbmltdW1MaW5lSGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGlmIChBdXRvc2l6ZVN0YXR1czo6cHJvYmFibHlDb250YWluc0FTbWFsbEZpeGVkTnVtYmVy
T2ZMaW5lcyhzdHlsZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3R5bGUuc2V0
TGluZUhlaWdodCh7IG1pbmltdW1MaW5lSGVpZ2h0LCBGaXhlZCB9KTsKLSAgICB9OwotCi0gICAg
YXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZS5mb250RGVzY3JpcHRpb24oKTsKLSAgICBhdXRv
IGluaXRpYWxDb21wdXRlZEZvbnRTaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
OwotICAgIGF1dG8gc3BlY2lmaWVkRm9udFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVk
U2l6ZSgpOwotICAgIGJvb2wgaXNDYW5kaWRhdGUgPSBzdHlsZS5pc0lkZW1wb3RlbnRUZXh0QXV0
b3NpemluZ0NhbmRpZGF0ZSgpOwotICAgIGlmICghaXNDYW5kaWRhdGUgJiYgV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKGluaXRpYWxDb21wdXRlZEZvbnRTaXplLCBzcGVjaWZpZWRGb250U2l6ZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYWRqdXN0ZWRGb250U2l6ZSA9IEF1
dG9zaXplU3RhdHVzOjppZGVtcG90ZW50VGV4dFNpemUoZm9udERlc2NyaXB0aW9uLnNwZWNpZmll
ZFNpemUoKSwgaW5pdGlhbFNjYWxlKTsKLSAgICBpZiAoaXNDYW5kaWRhdGUgJiYgV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGluaXRpYWxDb21wdXRlZEZvbnRTaXplLCBhZGp1c3RlZEZvbnRTaXpl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFoYXNUZXh0Q2hpbGQoZWxlbWVu
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUoaXNDYW5kaWRhdGUgPyBhZGp1c3RlZEZvbnRTaXplIDogc3BlY2lmaWVkRm9udFNp
emUpOwotICAgIHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlv
bikpOwotICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxl
Y3RvcigpKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVzdG9yZSBjb21wdXRlZCBsaW5l
IGhlaWdodCB0byBpdHMgb3JpZ2luYWwgdmFsdWUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGVsZW1l
bnQgaXMgbm90Ci0gICAgLy8gYW4gaWRlbXBvdGVudCB0ZXh0IGF1dG9zaXppbmcgY2FuZGlkYXRl
OyBvdGhlcndpc2UsIGlmIGFuIGVsZW1lbnQgdGhhdCBpcyBhIHRleHQgYXV0b3NpemluZyBjYW5k
aWRhdGUgY29udGFpbnMKLSAgICAvLyBjaGlsZHJlbiB3aGljaCBhcmUgbm90IGF1dG9zaXplZCwg
dGhlIG5vbi1hdXRvc2l6ZWQgY29udGVudCB3aWxsIGVuZCB1cCB3aXRoIGEgYm9vc3RlZCBsaW5l
IGhlaWdodC4KLSAgICBpZiAoaXNDYW5kaWRhdGUpCi0gICAgICAgIGFkanVzdExpbmVIZWlnaHRJ
Zk5lZWRlZChhZGp1c3RlZEZvbnRTaXplKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlm
Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBw
YXJlbnRCb3hTdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUq
IHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSkKLXsKLSAgICAvLyBJZiB0aGUgY29tcG9zZWQgdHJl
ZSBwYXJlbnQgaGFzIGRpc3BsYXk6Y29udGVudHMsIHRoZSBwYXJlbnQgYm94IHN0eWxlIHdpbGwg
YmUgZGlmZmVyZW50IGZyb20gdGhlIHBhcmVudCBzdHlsZS4KLSAgICAvLyBXZSBkb24ndCBoYXZl
IGl0IHdoZW4gcmVzb2x2aW5nIGNvbXB1dGVkIHN0eWxlIGZvciBkaXNwbGF5Om5vbmUgc3VidHJl
ZS4gVXNlIHBhcmVudCBzdHlsZSBmb3IgYWRqdXN0bWVudHMgaW4gdGhhdCBjYXNlLgotICAgIGlm
ICghcGFyZW50Qm94U3R5bGUpCi0gICAgICAgIHBhcmVudEJveFN0eWxlID0gJnBhcmVudFN0eWxl
OwotCi0gICAgLy8gQ2FjaGUgb3VyIG9yaWdpbmFsIGRpc3BsYXkuCi0gICAgc3R5bGUuc2V0T3Jp
Z2luYWxEaXNwbGF5KHN0eWxlLmRpc3BsYXkoKSk7Ci0KLSAgICBpZiAoc3R5bGUuZGlzcGxheSgp
ID09IERpc3BsYXlUeXBlOjpDb250ZW50cykKLSAgICAgICAgYWRqdXN0RGlzcGxheUNvbnRlbnRz
U3R5bGUoc3R5bGUsIGVsZW1lbnQpOwotCi0gICAgaWYgKHN0eWxlLmRpc3BsYXkoKSAhPSBEaXNw
bGF5VHlwZTo6Tm9uZSAmJiBzdHlsZS5kaXNwbGF5KCkgIT0gRGlzcGxheVR5cGU6OkNvbnRlbnRz
KSB7Ci0gICAgICAgIGlmIChlbGVtZW50KSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
PHRkPiB0aGF0IHNwZWNpZmllcyBhIGZsb2F0IHByb3BlcnR5LCBpbiBxdWlya3MgbW9kZSB3ZSBq
dXN0IGRyb3AgdGhlIGZsb2F0Ci0gICAgICAgICAgICAvLyBwcm9wZXJ0eS4KLSAgICAgICAgICAg
IC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5z
IGFuZCA8dGFibGU+cy4gSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKLSAgICAgICAgICAgIC8vIHRo
ZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCi0gICAgICAgICAgICBpZiAo
ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSkgewotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKHRkVGFnKSkgewotICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXREaXNw
bGF5KERpc3BsYXlUeXBlOjpUYWJsZUNlbGwpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZS5z
ZXRGbG9hdGluZyhGbG9hdDo6Tm8pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8SFRN
TFRhYmxlRWxlbWVudD4oKmVsZW1lbnQpKQotICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRE
aXNwbGF5KHN0eWxlLmlzRGlzcGxheUlubGluZVR5cGUoKSA/IERpc3BsYXlUeXBlOjpJbmxpbmVU
YWJsZSA6IERpc3BsYXlUeXBlOjpUYWJsZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHRo
VGFnKSkgewotICAgICAgICAgICAgICAgIGlmIChzdHlsZS53aGl0ZVNwYWNlKCkgPT0gV2hpdGVT
cGFjZTo6S0hUTUxOb1dyYXApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCBp
ZiB3ZSBhcmUgcmVhbGx5IG5vd3JhcHBpbmcgb3IgaWYgd2Ugc2hvdWxkIGp1c3QKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdXNlIG5vcm1hbCBpbnN0ZWFkLiBJZiB0aGUgd2lkdGggb2YgdGhlIGNl
bGwgaXMgZml4ZWQsIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFs
bHkgdXNlIFdoaXRlU3BhY2U6Ok5vV3JhcC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxl
LndpZHRoKCkuaXNGaXhlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuc2V0V2hp
dGVTcGFjZShXaGl0ZVNwYWNlOjpOb3JtYWwpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFdoaXRlU3BhY2U6Ok5v
V3JhcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBUYWJsZXMgbmV2ZXIgc3VwcG9ydCB0aGUgLXdlYmtpdC0qIHZhbHVlcyBmb3IgdGV4dC1hbGln
biBhbmQgd2lsbCByZXNldCBiYWNrIHRvIHRoZSBkZWZhdWx0LgotICAgICAgICAgICAgaWYgKGlz
PEhUTUxUYWJsZUVsZW1lbnQ+KCplbGVtZW50KSAmJiAoc3R5bGUudGV4dEFsaWduKCkgPT0gVGV4
dEFsaWduTW9kZTo6V2ViS2l0TGVmdCB8fCBzdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25N
b2RlOjpXZWJLaXRDZW50ZXIgfHwgc3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6
V2ViS2l0UmlnaHQpKQotICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRBbGlnbihUZXh0QWxp
Z25Nb2RlOjpTdGFydCk7Ci0KLSAgICAgICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5l
dmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiBUaGlzIGlz
IG5lY2Vzc2FyeSB0bwotICAgICAgICAgICAgLy8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRy
aWVzIHRvIHBvc2l0aW9uIHRoZXNlIG9iamVjdHMuIFRoZXkgYWxzbyBuZXZlciBob25vciBkaXNw
bGF5LgotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKSB7Ci0gICAgICAgICAgICAgICAgc3R5bGUu
c2V0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpTdGF0aWMpOwotICAgICAgICAgICAgICAgIHN0eWxl
LnNldERpc3BsYXkoRGlzcGxheVR5cGU6OkJsb2NrKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gUnVieSB0ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXQgb3IgcG9zaXRpb24uIFRo
aXMgbWlnaHQgY2hhbmdlIHdpdGggZXZvbHV0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgotICAg
ICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUocnRUYWcpKSB7Ci0gICAgICAgICAgICAg
ICAgc3R5bGUuc2V0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpTdGF0aWMpOwotICAgICAgICAgICAg
ICAgIHN0eWxlLnNldEZsb2F0aW5nKEZsb2F0OjpObyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFVzZXIgYWdlbnRzIGFyZSBleHBlY3RlZCB0byBoYXZlIGEgcnVsZSBpbiB0aGVp
ciB1c2VyIGFnZW50IHN0eWxlc2hlZXQgdGhhdCBtYXRjaGVzIHRoIGVsZW1lbnRzIHRoYXQgaGF2
ZSBhIHBhcmVudAotICAgICAgICAgICAgLy8gbm9kZSB3aG9zZSBjb21wdXRlZCB2YWx1ZSBmb3Ig
dGhlICd0ZXh0LWFsaWduJyBwcm9wZXJ0eSBpcyBpdHMgaW5pdGlhbCB2YWx1ZSwgd2hvc2UgZGVj
bGFyYXRpb24gYmxvY2sgY29uc2lzdHMgb2YKLSAgICAgICAgICAgIC8vIGp1c3QgYSBzaW5nbGUg
ZGVjbGFyYXRpb24gdGhhdCBzZXRzIHRoZSAndGV4dC1hbGlnbicgcHJvcGVydHkgdG8gdGhlIHZh
bHVlICdjZW50ZXInLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9y
Zy9tdWx0aXBhZ2UvcmVuZGVyaW5nLmh0bWwjcmVuZGVyaW5nCi0gICAgICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZSh0aFRhZykgJiYgIXN0eWxlLmhhc0V4cGxpY2l0bHlTZXRUZXh0QWxp
Z24oKSAmJiBwYXJlbnRTdHlsZS50ZXh0QWxpZ24oKSA9PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRl
eHRBbGlnbigpKQotICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25N
b2RlOjpDZW50ZXIpOwotCi0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShsZWdl
bmRUYWcpKQotICAgICAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5cGU6OkJs
b2NrKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFic29sdXRlL2ZpeGVkIHBvc2l0aW9uZWQg
ZWxlbWVudHMsIGZsb2F0aW5nIGVsZW1lbnRzIGFuZCB0aGUgZG9jdW1lbnQgZWxlbWVudCBuZWVk
IGJsb2NrLWxpa2Ugb3V0c2lkZSBkaXNwbGF5LgotICAgICAgICBpZiAoc3R5bGUuaGFzT3V0T2ZG
bG93UG9zaXRpb24oKSB8fCBzdHlsZS5pc0Zsb2F0aW5nKCkgfHwgKGVsZW1lbnQgJiYgZWxlbWVu
dC0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSA9PSBlbGVtZW50KSkKLSAgICAgICAgICAg
IHN0eWxlLnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZSwgZG9jdW1lbnQo
KSkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9y
IHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQn
cyBub3QgY29tcGxldGVseQotICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4K
LSAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lICYmIHN0
eWxlLnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpOb25lICYmIHN0eWxlLndyaXRpbmdNb2RlKCkg
IT0gcGFyZW50U3R5bGUud3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHN0eWxlLnNldERpc3Bs
YXkoRGlzcGxheVR5cGU6OklubGluZUJsb2NrKTsKLQotICAgICAgICAvLyBBZnRlciBwZXJmb3Jt
aW5nIHRoZSBkaXNwbGF5IG11dGF0aW9uLCBjaGVjayB0YWJsZSByb3dzLiBXZSBkbyBub3QgaG9u
b3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRpb246c3RpY2t5IG9uCi0gICAgICAgIC8vIHRh
YmxlIHJvd3Mgb3IgY2VsbHMuIFRoaXMgaGFzIGJlZW4gZXN0YWJsaXNoZWQgZm9yIHBvc2l0aW9u
OnJlbGF0aXZlIGluIENTUzIuMSAoYW5kIGNhdXNlZCBhIGNyYXNoIGluIGNvbnRhaW5pbmdCbG9j
aygpCi0gICAgICAgIC8vIG9uIHNvbWUgc2l0ZXMpLgotICAgICAgICBpZiAoKHN0eWxlLmRpc3Bs
YXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cCB8fCBzdHlsZS5kaXNwbGF5KCkg
PT0gRGlzcGxheVR5cGU6OlRhYmxlUm93R3JvdXAKLSAgICAgICAgICAgIHx8IHN0eWxlLmRpc3Bs
YXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVGb290ZXJHcm91cCB8fCBzdHlsZS5kaXNwbGF5KCkg
PT0gRGlzcGxheVR5cGU6OlRhYmxlUm93KQotICAgICAgICAgICAgJiYgc3R5bGUucG9zaXRpb24o
KSA9PSBQb3NpdGlvblR5cGU6OlJlbGF0aXZlKQotICAgICAgICAgICAgc3R5bGUuc2V0UG9zaXRp
b24oUG9zaXRpb25UeXBlOjpTdGF0aWMpOwotCi0gICAgICAgIC8vIHdyaXRpbmctbW9kZSBkb2Vz
IG5vdCBhcHBseSB0byB0YWJsZSByb3cgZ3JvdXBzLCB0YWJsZSBjb2x1bW4gZ3JvdXBzLCB0YWJs
ZSByb3dzLCBhbmQgdGFibGUgY29sdW1ucy4KLSAgICAgICAgLy8gRklYTUU6IFRhYmxlIGNlbGxz
IHNob3VsZCBiZSBhbGxvd2VkIHRvIGJlIHBlcnBlbmRpY3VsYXIgb3IgZmxpcHBlZCB3aXRoIHJl
c3BlY3QgdG8gdGhlIHRhYmxlLCB0aG91Z2guCi0gICAgICAgIGlmIChzdHlsZS5kaXNwbGF5KCkg
PT0gRGlzcGxheVR5cGU6OlRhYmxlQ29sdW1uIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5
VHlwZTo6VGFibGVDb2x1bW5Hcm91cCB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6
OlRhYmxlRm9vdGVyR3JvdXAKLSAgICAgICAgICAgIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNw
bGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cCB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5
cGU6OlRhYmxlUm93IHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3dH
cm91cAotICAgICAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJs
ZUNlbGwpCi0gICAgICAgICAgICBzdHlsZS5zZXRXcml0aW5nTW9kZShwYXJlbnRTdHlsZS53cml0
aW5nTW9kZSgpKTsKLQotICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBi
bG9jay1mbG93IG9uIGZsZXhpYmxlIGJveGVzIHlldCwgZGlzYWxsb3cgc2V0dGluZwotICAgICAg
ICAvLyBvZiBibG9jay1mbG93IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gVG9wVG9Cb3R0b21Xcml0
aW5nTW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ2NDE4IC0gRmxleGlibGUgYm94IHN1cHBvcnQuCi0gICAgICAgIGlmIChzdHlsZS53cml0
aW5nTW9kZSgpICE9IFRvcFRvQm90dG9tV3JpdGluZ01vZGUgJiYgKHN0eWxlLmRpc3BsYXkoKSA9
PSBEaXNwbGF5VHlwZTo6Qm94IHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5s
aW5lQm94KSkKLSAgICAgICAgICAgIHN0eWxlLnNldFdyaXRpbmdNb2RlKFRvcFRvQm90dG9tV3Jp
dGluZ01vZGUpOwotCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtZGlzcGxh
eS8jdHJhbnNmb3JtYXRpb25zCi0gICAgICAgIC8vICJBIHBhcmVudCB3aXRoIGEgZ3JpZCBvciBm
bGV4IGRpc3BsYXkgdmFsdWUgYmxvY2tpZmllcyB0aGUgYm944oCZcyBkaXNwbGF5IHR5cGUuIgot
ICAgICAgICBpZiAocGFyZW50Qm94U3R5bGUtPmlzRGlzcGxheUZsZXhpYmxlT3JHcmlkQm94KCkp
IHsKLSAgICAgICAgICAgIHN0eWxlLnNldEZsb2F0aW5nKEZsb2F0OjpObyk7Ci0gICAgICAgICAg
ICBzdHlsZS5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUsIGRvY3VtZW50
KCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSBvdXIgei1pbmRleCB2
YWx1ZSBpcyBvbmx5IGFwcGxpZWQgaWYgdGhlIG9iamVjdCBpcyBwb3NpdGlvbmVkLgotICAgIGlm
IChzdHlsZS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljICYmICFwYXJlbnRCb3hT
dHlsZS0+aXNEaXNwbGF5RmxleGlibGVPckdyaWRCb3goKSkKLSAgICAgICAgc3R5bGUuc2V0SGFz
QXV0b1pJbmRleCgpOwotCi0gICAgLy8gQXV0byB6LWluZGV4IGJlY29tZXMgMCBmb3IgdGhlIHJv
b3QgZWxlbWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4gVGhpcyBwcmV2ZW50cwotICAgIC8v
IGNhc2VzIHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNpbmdsZSB1
bml0IGVuZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50Ci0gICAgLy8gb2JqZWN0IHdlZGdlZCBp
biBiZXR3ZWVuIHRoZW0uIEF1dG8gei1pbmRleCBhbHNvIGJlY29tZXMgMCBmb3Igb2JqZWN0cyB0
aGF0IHNwZWNpZnkgdHJhbnNmb3Jtcy9tYXNrcy9yZWZsZWN0aW9ucy4KLSAgICBpZiAoc3R5bGUu
aGFzQXV0b1pJbmRleCgpKSB7Ci0gICAgICAgIGlmICgoZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1
bWVudCgpLmRvY3VtZW50RWxlbWVudCgpID09IGVsZW1lbnQpCi0gICAgICAgICAgICB8fCBzdHls
ZS5vcGFjaXR5KCkgPCAxLjBmCi0gICAgICAgICAgICB8fCBzdHlsZS5oYXNUcmFuc2Zvcm1SZWxh
dGVkUHJvcGVydHkoKQotICAgICAgICAgICAgfHwgc3R5bGUuaGFzTWFzaygpCi0gICAgICAgICAg
ICB8fCBzdHlsZS5jbGlwUGF0aCgpCi0gICAgICAgICAgICB8fCBzdHlsZS5ib3hSZWZsZWN0KCkK
LSAgICAgICAgICAgIHx8IHN0eWxlLmhhc0ZpbHRlcigpCi0jaWYgRU5BQkxFKEZJTFRFUlNfTEVW
RUxfMikKLSAgICAgICAgICAgIHx8IHN0eWxlLmhhc0JhY2tkcm9wRmlsdGVyKCkKLSNlbmRpZgot
ICAgICAgICAgICAgfHwgc3R5bGUuaGFzQmxlbmRNb2RlKCkKLSAgICAgICAgICAgIHx8IHN0eWxl
Lmhhc0lzb2xhdGlvbigpCi0gICAgICAgICAgICB8fCBzdHlsZS5wb3NpdGlvbigpID09IFBvc2l0
aW9uVHlwZTo6U3RpY2t5Ci0gICAgICAgICAgICB8fCBzdHlsZS5wb3NpdGlvbigpID09IFBvc2l0
aW9uVHlwZTo6Rml4ZWQKLSAgICAgICAgICAgIHx8IHN0eWxlLndpbGxDaGFuZ2VDcmVhdGVzU3Rh
Y2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICBzdHlsZS5zZXRaSW5kZXgoMCk7Ci0gICAgfQot
Ci0gICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICAgLy8gVGV4dGFyZWEgY29uc2lkZXJzIG92ZXJm
bG93IHZpc2libGUgYXMgYXV0by4KLSAgICAgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+
KCplbGVtZW50KSkgewotICAgICAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dYKHN0eWxlLm92ZXJm
bG93WCgpID09IE92ZXJmbG93OjpWaXNpYmxlID8gT3ZlcmZsb3c6OkF1dG8gOiBzdHlsZS5vdmVy
Zmxvd1goKSk7Ci0gICAgICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1koc3R5bGUub3ZlcmZsb3dZ
KCkgPT0gT3ZlcmZsb3c6OlZpc2libGUgPyBPdmVyZmxvdzo6QXV0byA6IHN0eWxlLm92ZXJmbG93
WSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERpc2FsbG93IC13ZWJraXQtdXNlci1tb2Rp
Znkgb24gOnBzZXVkbyBhbmQgOjpwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIGlmICghZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKS5pc051bGwoKSkKLSAgICAgICAgICAgIHN0eWxlLnNldFVzZXJN
b2RpZnkoVXNlck1vZGlmeTo6UmVhZE9ubHkpOwotCi0gICAgICAgIGlmIChpczxIVE1MTWFycXVl
ZUVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gRm9yIG5vdywgPG1hcnF1ZWU+
IHJlcXVpcmVzIGFuIG92ZXJmbG93IGNsaXAgdG8gd29yayBwcm9wZXJseS4KLSAgICAgICAgICAg
IHN0eWxlLnNldE92ZXJmbG93WChPdmVyZmxvdzo6SGlkZGVuKTsKLSAgICAgICAgICAgIHN0eWxl
LnNldE92ZXJmbG93WShPdmVyZmxvdzo6SGlkZGVuKTsKLQotICAgICAgICAgICAgYm9vbCBpc1Zl
cnRpY2FsID0gc3R5bGUubWFycXVlZURpcmVjdGlvbigpID09IE1hcnF1ZWVEaXJlY3Rpb246OlVw
IHx8IHN0eWxlLm1hcnF1ZWVEaXJlY3Rpb24oKSA9PSBNYXJxdWVlRGlyZWN0aW9uOjpEb3duOwot
ICAgICAgICAgICAgLy8gTWFrZSBob3Jpem9udGFsIG1hcnF1ZWVzIG5vdCB3cmFwLgotICAgICAg
ICAgICAgaWYgKCFpc1ZlcnRpY2FsKSB7Ci0gICAgICAgICAgICAgICAgc3R5bGUuc2V0V2hpdGVT
cGFjZShXaGl0ZVNwYWNlOjpOb1dyYXApOwotICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRB
bGlnbihUZXh0QWxpZ25Nb2RlOjpTdGFydCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAv
LyBBcHBhcmVudGx5IHRoaXMgaXMgdGhlIGV4cGVjdGVkIGxlZ2FjeSBiZWhhdmlvci4KLSAgICAg
ICAgICAgIGlmIChpc1ZlcnRpY2FsICYmIHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQotICAgICAg
ICAgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoMjAwLCBGaXhlZCkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKGRvZXNOb3RJbmhlcml0VGV4dERlY29yYXRpb24oc3R5bGUsIGVs
ZW1lbnQpKQotICAgICAgICBzdHlsZS5zZXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChzdHlsZS50
ZXh0RGVjb3JhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0eWxlLmFkZFRvVGV4dERlY29y
YXRpb25zSW5FZmZlY3Qoc3R5bGUudGV4dERlY29yYXRpb24oKSk7Ci0KLSAgICAvLyBJZiBlaXRo
ZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90IHZpc2libGUsIGNoYW5nZSB0byBhdXRvLgotICAgIGlm
IChzdHlsZS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6VmlzaWJsZSAmJiBzdHlsZS5vdmVyZmxv
d1koKSAhPSBPdmVyZmxvdzo6VmlzaWJsZSkgewotICAgICAgICAvLyBGSVhNRTogT25jZSB3ZSBp
bXBsZW1lbnQgcGFnaW5hdGlvbiBjb250cm9scywgb3ZlcmZsb3cteCBzaG91bGQgZGVmYXVsdCB0
byBoaWRkZW4KLSAgICAgICAgLy8gaWYgb3ZlcmZsb3cteSBpcyBzZXQgdG8gLXdlYmtpdC1wYWdl
ZC14IG9yIC13ZWJraXQtcGFnZS15LiBGb3Igbm93LCB3ZSdsbCBsZXQgaXQKLSAgICAgICAgLy8g
ZGVmYXVsdCB0byBhdXRvIHNvIHdlIGNhbiBhdCBsZWFzdCBzY3JvbGwgdGhyb3VnaCB0aGUgcGFn
ZXMuCi0gICAgICAgIHN0eWxlLnNldE92ZXJmbG93WChPdmVyZmxvdzo6QXV0byk7Ci0gICAgfSBl
bHNlIGlmIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6VmlzaWJsZSAmJiBzdHlsZS5v
dmVyZmxvd1goKSAhPSBPdmVyZmxvdzo6VmlzaWJsZSkKLSAgICAgICAgc3R5bGUuc2V0T3ZlcmZs
b3dZKE92ZXJmbG93OjpBdXRvKTsKLQotICAgIC8vIENhbGwgc2V0U3R5bGVzRm9yUGFnaW5hdGlv
bk1vZGUoKSBpZiBhIHBhZ2luYXRpb24gbW9kZSBpcyBzZXQgZm9yIGFueSBub24tcm9vdCBlbGVt
ZW50cy4gSWYgdGhlc2UKLSAgICAvLyBzdHlsZXMgYXJlIHNwZWNpZmllZCBvbiBhIHJvb3QgZWxl
bWVudCwgdGhlbiB0aGV5IHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGluCi0gICAgLy8gU3R5bGU6OmNy
ZWF0ZUZvckRvY3VtZW50KCkuCi0gICAgaWYgKChzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxv
dzo6UGFnZWRYIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpQYWdlZFkpICYmICEo
ZWxlbWVudCAmJiAoZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKGJvZHlUYWcpKSkpCi0gICAgICAgIHN0eWxlLnNldENvbHVtblN0eWxlc0Zyb21QYWdp
bmF0aW9uTW9kZShXZWJDb3JlOjpwYWdpbmF0aW9uTW9kZUZvclJlbmRlclN0eWxlKHN0eWxlKSk7
Ci0KLSAgICAvLyBUYWJsZSByb3dzLCBzZWN0aW9ucyBhbmQgdGhlIHRhYmxlIGl0c2VsZiB3aWxs
IHN1cHBvcnQgb3ZlcmZsb3c6aGlkZGVuIGFuZCB3aWxsIGlnbm9yZSBzY3JvbGwvYXV0by4KLSAg
ICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZSBzZWN0aW9ucyB3aWxsIHN1cHBvcnQgYXV0byBh
bmQgc2Nyb2xsLgotICAgIGlmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxl
IHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lVGFibGUKLSAgICAgICAg
fHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZVJvd0dyb3VwIHx8IHN0eWxl
LmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVSb3cpIHsKLSAgICAgICAgaWYgKHN0eWxl
Lm92ZXJmbG93WCgpICE9IE92ZXJmbG93OjpWaXNpYmxlICYmIHN0eWxlLm92ZXJmbG93WCgpICE9
IE92ZXJmbG93OjpIaWRkZW4pCi0gICAgICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1goT3ZlcmZs
b3c6OlZpc2libGUpOwotICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgIT0gT3ZlcmZsb3c6
OlZpc2libGUgJiYgc3R5bGUub3ZlcmZsb3dZKCkgIT0gT3ZlcmZsb3c6OkhpZGRlbikKLSAgICAg
ICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6VmlzaWJsZSk7Ci0gICAgfQotCi0g
ICAgLy8gTWVudWxpc3RzIHNob3VsZCBoYXZlIHZpc2libGUgb3ZlcmZsb3cKLSAgICBpZiAoc3R5
bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkgewotICAgICAgICBzdHlsZS5zZXRPdmVy
Zmxvd1goT3ZlcmZsb3c6OlZpc2libGUpOwotICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1koT3Zl
cmZsb3c6OlZpc2libGUpOwotICAgIH0KLQotI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdf
VE9VQ0gpCi0gICAgLy8gVG91Y2ggb3ZlcmZsb3cgc2Nyb2xsaW5nIGNyZWF0ZXMgYSBzdGFja2lu
ZyBjb250ZXh0LgotICAgIGlmIChzdHlsZS5oYXNBdXRvWkluZGV4KCkgJiYgc3R5bGUudXNlVG91
Y2hPdmVyZmxvd1Njcm9sbGluZygpICYmIChpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS5vdmVy
Zmxvd1goKSkgfHwgaXNTY3JvbGxhYmxlT3ZlcmZsb3coc3R5bGUub3ZlcmZsb3dZKCkpKSkKLSAg
ICAgICAgc3R5bGUuc2V0WkluZGV4KDApOwotI2VuZGlmCi0KLSAgICAvLyBDdWxsIG91dCBhbnkg
dXNlbGVzcyBsYXllcnMgYW5kIGFsc28gcmVwZWF0IHBhdHRlcm5zIGludG8gYWRkaXRpb25hbCBs
YXllcnMuCi0gICAgc3R5bGUuYWRqdXN0QmFja2dyb3VuZExheWVycygpOwotICAgIHN0eWxlLmFk
anVzdE1hc2tMYXllcnMoKTsKLQotICAgIC8vIERvIHRoZSBzYW1lIGZvciBhbmltYXRpb25zIGFu
ZCB0cmFuc2l0aW9ucy4KLSAgICBzdHlsZS5hZGp1c3RBbmltYXRpb25zKCk7Ci0gICAgc3R5bGUu
YWRqdXN0VHJhbnNpdGlvbnMoKTsKLQotICAgIC8vIEltcG9ydGFudDogSW50cmluc2ljIG1hcmdp
bnMgZ2V0IGFkZGVkIHRvIGNvbnRyb2xzIGJlZm9yZSB0aGUgdGhlbWUgaGFzIGFkanVzdGVkIHRo
ZSBzdHlsZSwgc2luY2UgdGhlIHRoZW1lIHdpbGwKLSAgICAvLyBhbHRlciBmb250cyBhbmQgaGVp
Z2h0cy93aWR0aHMuCi0gICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQp
ICYmIHN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpID49IDExKSB7Ci0gICAgICAgIC8vIERv
bid0IGFwcGx5IGludHJpbnNpYyBtYXJnaW5zIHRvIGltYWdlIGJ1dHRvbnMuIFRoZSBkZXNpZ25l
ciBrbm93cyBob3cgYmlnIHRoZSBpbWFnZXMgYXJlLAotICAgICAgICAvLyBzbyB3ZSBoYXZlIHRv
IHRyZWF0IGFsbCBpbWFnZSBidXR0b25zIGFzIHRob3VnaCB0aGV5IHdlcmUgZXhwbGljaXRseSBz
aXplZC4KLSAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkgfHwgIWRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5pc0ltYWdlQnV0dG9uKCkpCi0gICAg
ICAgICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKLSAgICB9Ci0KLSAgICAvLyBMZXQg
dGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCi0gICAg
aWYgKHN0eWxlLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OnNpbmdsZXRv
bigpLmFkanVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZWxlbWVudCwgdXNlckFnZW50QXBwZWFyYW5j
ZVN0eWxlKTsKLQotICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVkbyBzdHlsZSwg
ZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCi0gICAgaWYgKHN0eWxlLmhhc1BzZXVkb1N0eWxlKFBz
ZXVkb0lkOjpGaXJzdExldHRlcikpCi0gICAgICAgIHN0eWxlLnNldFVuaXF1ZSgpOwotCi0gICAg
Ly8gRklYTUU6IHdoZW4gZHJvcHBpbmcgdGhlIC13ZWJraXQgcHJlZml4IG9uIHRyYW5zZm9ybS1z
dHlsZSwgd2Ugc2hvdWxkIGFsc28gaGF2ZSBvcGFjaXR5IDwgMSBjYXVzZSBmbGF0dGVuaW5nLgot
ICAgIGlmIChzdHlsZS5wcmVzZXJ2ZXMzRCgpICYmIChzdHlsZS5vdmVyZmxvd1goKSAhPSBPdmVy
Zmxvdzo6VmlzaWJsZQotICAgICAgICB8fCBzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6
VmlzaWJsZQotICAgICAgICB8fCBzdHlsZS5oYXNDbGlwKCkKLSAgICAgICAgfHwgc3R5bGUuY2xp
cFBhdGgoKQotICAgICAgICB8fCBzdHlsZS5oYXNGaWx0ZXIoKQotI2lmIEVOQUJMRShGSUxURVJT
X0xFVkVMXzIpCi0gICAgICAgIHx8IHN0eWxlLmhhc0JhY2tkcm9wRmlsdGVyKCkKLSNlbmRpZgot
ICAgICAgICB8fCBzdHlsZS5oYXNCbGVuZE1vZGUoKSkpCi0gICAgICAgIHN0eWxlLnNldFRyYW5z
Zm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzRDo6RmxhdCk7Ci0KLSAgICBpZiAoaXM8U1ZHRWxl
bWVudD4oZWxlbWVudCkpCi0gICAgICAgIGFkanVzdFNWR0VsZW1lbnRTdHlsZShkb3duY2FzdDxT
VkdFbGVtZW50PigqZWxlbWVudCksIHN0eWxlKTsKLQotICAgIC8vIElmIHRoZSBpbmhlcml0ZWQg
dmFsdWUgb2YganVzdGlmeS1pdGVtcyBpbmNsdWRlcyB0aGUgJ2xlZ2FjeScga2V5d29yZCAocGx1
cyAnbGVmdCcsICdyaWdodCcgb3IKLSAgICAvLyAnY2VudGVyJyksICdsZWdhY3knIGNvbXB1dGVz
IHRvIHRoZSB0aGUgaW5oZXJpdGVkIHZhbHVlLiBPdGhlcndpc2UsICdhdXRvJyBjb21wdXRlcyB0
byAnbm9ybWFsJy4KLSAgICBpZiAocGFyZW50Qm94U3R5bGUtPmp1c3RpZnlJdGVtcygpLnBvc2l0
aW9uVHlwZSgpID09IEl0ZW1Qb3NpdGlvblR5cGU6OkxlZ2FjeSAmJiBzdHlsZS5qdXN0aWZ5SXRl
bXMoKS5wb3NpdGlvbigpID09IEl0ZW1Qb3NpdGlvbjo6TGVnYWN5KQotICAgICAgICBzdHlsZS5z
ZXRKdXN0aWZ5SXRlbXMocGFyZW50Qm94U3R5bGUtPmp1c3RpZnlJdGVtcygpKTsKLQotI2lmIEVO
QUJMRShQT0lOVEVSX0VWRU5UUykKLSAgICBzdHlsZS5zZXRFZmZlY3RpdmVUb3VjaEFjdGlvbnMo
Y29tcHV0ZUVmZmVjdGl2ZVRvdWNoQWN0aW9ucyhzdHlsZSwgcGFyZW50U3R5bGUuZWZmZWN0aXZl
VG91Y2hBY3Rpb25zKCkpKTsKLSNlbmRpZgotCi0gICAgaWYgKGVsZW1lbnQpIHsKLSNpZiBFTkFC
TEUoVEVYVF9BVVRPU0laSU5HKQotICAgICAgICBhZGp1c3RSZW5kZXJTdHlsZUZvclRleHRBdXRv
c2l6aW5nKHN0eWxlLCAqZWxlbWVudCk7Ci0jZW5kaWYKLSAgICAgICAgYWRqdXN0UmVuZGVyU3R5
bGVGb3JTaXRlU3BlY2lmaWNRdWlya3Moc3R5bGUsICplbGVtZW50KTsKLSAgICB9Ci19Ci0KLXZv
aWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGVGb3JTaXRlU3BlY2lmaWNRdWlya3Mo
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQotewotICAgIGlmIChk
b2N1bWVudCgpLnF1aXJrcygpLm5lZWRzR01haWxPdmVyZmxvd1Njcm9sbFF1aXJrKCkpIHsKLSAg
ICAgICAgLy8gVGhpcyB0dXJucyBzaWRlYmFyIHNjcm9sbGFibGUgd2l0aG91dCBtb3VzZSBtb3Zl
IGV2ZW50LgotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gcm9sZVZh
bHVlKCJuYXZpZ2F0aW9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAg
ICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkhpZGRlbiAmJiBlbGVtZW50
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocm9sZUF0dHIpID09IHJvbGVWYWx1ZSkK
LSAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6QXV0byk7Ci0gICAgfQot
ICAgIGlmIChkb2N1bWVudCgpLnF1aXJrcygpLm5lZWRzWW91VHViZU92ZXJmbG93U2Nyb2xsUXVp
cmsoKSkgewotICAgICAgICAvLyBUaGlzIHR1cm5zIHNpZGViYXIgc2Nyb2xsYWJsZSB3aXRob3V0
IGhvdmVyLgotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gaWRWYWx1
ZSgiZ3VpZGUtaW5uZXItY29udGVudCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgaWYgKHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpIaWRkZW4gJiYg
ZWxlbWVudC5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IGlkVmFsdWUpCi0gICAgICAgICAgICBz
dHlsZS5zZXRPdmVyZmxvd1koT3ZlcmZsb3c6OkF1dG8pOwotICAgIH0KLX0KLQotCiBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQogewogICAgIHJl
dHVybiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBQc2V1ZG9JZDo6Tm9uZSwg
cnVsZXNUb0luY2x1ZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggODQ5ZDU2
OTg5NzEuLjkzZTVjNDM1OGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTEz
Myw3ICsxMzMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPdmVycmlkZURvY3VtZW50RWxlbWVu
dFN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyBtX292ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5
bGUgPSBzdHlsZTsgfQogCiAgICAgdm9pZCBhZGRDdXJyZW50U1ZHRm9udEZhY2VSdWxlcygpOwot
ICAgIHN0YXRpYyB2b2lkIGFkanVzdFNWR0VsZW1lbnRTdHlsZShjb25zdCBTVkdFbGVtZW50Jiwg
UmVuZGVyU3R5bGUmKTsKIAogICAgIHZvaWQgc2V0TmV3U3RhdGVXaXRoRWxlbWVudChjb25zdCBF
bGVtZW50Jik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktleWZy
YW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWUqLCBLZXlmcmFt
ZVZhbHVlJik7CkBAIC0xODMsOSArMTgyLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDYWNo
ZWREZWNsYXJhdGlvbnNBZmZlY3RlZEJ5Vmlld3BvcnRVbml0cygpOwogCiBwcml2YXRlOgotICAg
IHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRCb3hTdHlsZSwgY29uc3QgRWxl
bWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRTdHlsZSk7Ci0gICAgdm9pZCBhZGp1
c3RSZW5kZXJTdHlsZUZvclNpdGVTcGVjaWZpY1F1aXJrcyhSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQmKTsKLQogICAgIGVudW0gY2xhc3MgVXNlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlIHsg
WWVzLCBObyB9OwogICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJl
c3VsdCYsIGNvbnN0IEVsZW1lbnQmLCBVc2VNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUgPSBVc2VN
YXRjaGVkRGVjbGFyYXRpb25zQ2FjaGU6Olllcyk7CiAKQEAgLTE5NSw4ICsxOTEsNiBAQCBwcml2
YXRlOgogICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFwOwogCiBwdWJsaWM6
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4+IFBl
bmRpbmdJbWFnZVByb3BlcnR5TWFwOwotCiAgICAgY2xhc3MgU3RhdGUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgU3RhdGUoKSB7IH0KQEAgLTIzNyw4ICsyMzEsNiBAQCBwdWJsaWM6CiAKICAgICBJ
bnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4g
bV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9CiAKLSAgICBib29sIGFkanVzdFJlbmRlclN0eWxl
Rm9yVGV4dEF1dG9zaXppbmcoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Jik7Ci0KIHByaXZh
dGU6CiAgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKaW5kZXggYjE0NmNhY2UxNTQuLmNmMzc4YjBiMjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAg
LTExMyw2ICsxMTMsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIgor
I2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCkBAIC0z
MDYxLDEzICszMDYyLDEyIEBAIHZvaWQgUGFnZTo6cmVjb21wdXRlVGV4dEF1dG9TaXppbmdJbkFs
bEZyYW1lcygpCiAgICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSAqZnJhbWUtPmRvY3VtZW50KCk7Ci0g
ICAgICAgIGlmICghZG9jdW1lbnQucmVuZGVyVmlldygpIHx8ICFkb2N1bWVudC5zdHlsZVNjb3Bl
KCkucmVzb2x2ZXJJZkV4aXN0cygpKQorICAgICAgICBpZiAoIWRvY3VtZW50LnJlbmRlclZpZXco
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8mIHN0eWxlUmVzb2x2ZXIg
PSBkb2N1bWVudC5zdHlsZVNjb3BlKCkucmVzb2x2ZXIoKTsKICAgICAgICAgZm9yIChhdXRvJiBy
ZW5kZXJlciA6IGRlc2NlbmRhbnRzT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCpkb2N1bWVudC5yZW5k
ZXJWaWV3KCkpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVs
ZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gbmVlZHNMYXlvdXQgPSBzdHlsZVJlc29s
dmVyLmFkanVzdFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXppbmcocmVuZGVyZXIubXV0YWJsZVN0
eWxlKCksICplbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhdXRvIG5lZWRzTGF5b3V0ID0gU3R5
bGU6OkFkanVzdGVyOjphZGp1c3RGb3JUZXh0QXV0b3NpemluZyhyZW5kZXJlci5tdXRhYmxlU3R5
bGUoKSwgKmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChuZWVkc0xheW91dCkKICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4IDliMmRmZWNjNTg2
Li43YjgzYTE4ZThlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CkBAIC03OCw3ICs3OCw3IEBAIFJlbmRlclRoZW1lOjpSZW5kZXJUaGVtZSgpCiB7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUmVuZGVy
U3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSkKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSkKIHsKICAgICAvLyBGb3JjZSBp
bmxpbmUgYW5kIHRhYmxlIGRpc3BsYXkgc3R5bGVzIHRvIGJlIGlubGluZS1ibG9jayAoZXhjZXB0
IGZvciB0YWJsZS0gd2hpY2ggaXMgYmxvY2spCiAgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxl
LmFwcGVhcmFuY2UoKTsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLAog
ICAgICAgICAgICAgcGFydCA9IE1lbnVsaXN0QnV0dG9uUGFydDsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgICAgICAgICBhZGp1c3RUZXh0Rmll
bGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgICAgICBhZGp1
c3RUZXh0RmllbGRTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgICAgICAgICBGQUxMVEhST1VH
SDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHN0eWxlLnNldEFwcGVhcmFuY2UoTm9D
b250cm9sUGFydCk7CkBAIC0yMDAsOSArMjAwLDkgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLAog
ICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7CiAjaWYgIVVTRShORVdfVEhFTUUpCiAg
ICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RDaGVja2JveFN0eWxl
KHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdENo
ZWNrYm94U3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAg
ICByZXR1cm4gYWRqdXN0UmFkaW9TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7
CisgICAgICAgIHJldHVybiBhZGp1c3RSYWRpb1N0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICBj
YXNlIFB1c2hCdXR0b25QYXJ0OgogICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKICNpZiBFTkFC
TEUoSU5QVVRfVFlQRV9DT0xPUikKQEAgLTIxMCwxOCArMjEwLDE4IEBAIHZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
JiBzdHlsZSwKICNlbmRpZgogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBC
dXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZl
ciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoc3R5
bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKLSAgICAgICAgcmV0
dXJuIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVt
ZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKHN0eWxlLCBl
bGVtZW50KTsKICNlbmRpZgogICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICAgICAgcmV0dXJu
IGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAg
ICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICBj
YXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFRleHRBcmVhU3R5bGUoc3R5
bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0VGV4dEFy
ZWFTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBNZW51bGlzdFBhcnQ6Ci0gICAgICAg
IHJldHVybiBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGUsIGVsZW1lbnQpOwog
ICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJl
dHVybiBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICBjYXNl
IE1lZGlhUGxheUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1lUGFydDoKICAg
ICBjYXNlIE1lZGlhVGltZVJlbWFpbmluZ1BhcnQ6CkBAIC0yMjksNTQgKzIyOSw1NCBAQCB2b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsCiAgICAgY2FzZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uUGFy
dDoKICAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBNZWRpYVZvbHVtZVNs
aWRlckNvbnRhaW5lclBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZWRpYUNvbnRyb2xTdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RN
ZWRpYUNvbnRyb2xTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAgY2FzZSBNZWRpYVNsaWRlclBh
cnQ6CiAgICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ6CiAgICAgY2FzZSBNZWRpYUZ1bGxT
Y3JlZW5Wb2x1bWVTbGlkZXJQYXJ0OgogICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6CiAg
ICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RTbGlkZXJU
cmFja1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFNsaWRlclRyYWNrU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgU2xpZGVy
VGh1bWJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNsaWRlclRodW1iVmVydGljYWxQYXJ0Ogot
ICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxl
LCBlbGVtZW50KTsKICAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICAgICAgcmV0dXJuIGFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAg
ICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAgICAg
Y2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoc3R5
bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgU2VhcmNoRmllbGREZWNvcmF0aW9uUGFydDoKLSAgICAg
ICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25QYXJ0U3R5bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgU2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsK
KyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFy
dDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICBjYXNlIFByb2dy
ZXNzQmFyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gYWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAgICAg
Y2FzZSBNZXRlclBhcnQ6CiAgICAgY2FzZSBSZWxldmFuY3lMZXZlbEluZGljYXRvclBhcnQ6CiAg
ICAgY2FzZSBDb250aW51b3VzQ2FwYWNpdHlMZXZlbEluZGljYXRvclBhcnQ6CiAgICAgY2FzZSBE
aXNjcmV0ZUNhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQYXJ0OgogICAgIGNhc2UgUmF0aW5nTGV2ZWxJ
bmRpY2F0b3JQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0TWV0ZXJTdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxlKHN0
eWxlLCBlbGVtZW50KTsKICNlbmRpZgogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogICAg
IGNhc2UgSW1hZ2VDb250cm9sc0J1dHRvblBhcnQ6CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAg
ICAgY2FzZSBDYXBzTG9ja0luZGljYXRvclBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RDYXBz
TG9ja0luZGljYXRvclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAg
ICAgcmV0dXJuIGFkanVzdENhcHNMb2NrSW5kaWNhdG9yU3R5bGUoc3R5bGUsIGVsZW1lbnQpOwog
I2lmIEVOQUJMRShBUFBMRV9QQVkpCiAgICAgY2FzZSBBcHBsZVBheUJ1dHRvblBhcnQ6Ci0gICAg
ICAgIHJldHVybiBhZGp1c3RBcHBsZVBheUJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxl
LCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdEFwcGxlUGF5QnV0dG9uU3R5bGUoc3R5
bGUsIGVsZW1lbnQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAg
ICBjYXNlIEF0dGFjaG1lbnRQYXJ0OgogICAgIGNhc2UgQm9yZGVybGVzc0F0dGFjaG1lbnRQYXJ0
OgotICAgICAgICByZXR1cm4gYWRqdXN0QXR0YWNobWVudFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdEF0dGFjaG1lbnRTdHlsZShzdHls
ZSwgZWxlbWVudCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBj
YXNlIExpc3RCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0TGlzdEJ1dHRvblN0eWxl
KHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdExp
c3RCdXR0b25TdHlsZShzdHlsZSwgZWxlbWVudCk7CiAjZW5kaWYKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKQEAgLTkyNiw3ICs5MjYsNyBAQCBib29sIFJlbmRlclRoZW1lOjppc0RlZmF1
bHQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogCiAjaWYgIVVTRShORVdfVEhFTUUpCiAK
LXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RDaGVja2JveFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCop
IGNvbnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVz
aWduZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2lu
SUUgYWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRz
IGl0IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTk0Myw3ICs5NDMsNyBAQCB2b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0CiAgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0UmFkaW9TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dAogewogICAgIC8vIEEgc3VtbWFyeSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVk
IHRvIG1hdGNoIFdpbklFOgogICAgIC8vIHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFj
dHVhbGx5IHNjYWxlcyBpdHMgY29udHJvbCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBv
dmVyZmxvdyBmb3Igc21hbGwgaGVpZ2h0cy4pCkBAIC05NjAsNyArOTYwLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBFbGUKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QK
IHsKICAgICAvLyBNb3N0IHBsYXRmb3JtcyB3aWxsIGNvbXBsZXRlbHkgaG9ub3IgYWxsIENTUywg
YW5kIHNvIHdlIGhhdmUgbm8gbmVlZCB0bwogICAgIC8vIGFkanVzdCB0aGUgc3R5bGUgYXQgYWxs
IGJ5IGRlZmF1bHQuIFdlIHdpbGwgc3RpbGwgYWxsb3cgdGhlIHRoZW1lIGEgY3JhY2sKQEAgLTk2
OCwyNiArOTY4LDI2IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsCiAgICAgc2V0QnV0dG9uU2l6
ZShzdHlsZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUm
LCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25z
dCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxl
KFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
Y29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlz
dFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKICNpZiBF
TkFCTEUoTUVURVJfRUxFTUVOVCkKIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CiB9CkBAIC0xMDA5LDcgKzEwMDksNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludE1ldGVy
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlYwogCiAj
ZW5kaWYgLy8gTUVURVJfRUxFTUVOVAogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDYXBzTG9j
a0luZGljYXRvclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2Fwc0xvY2tJbmRpY2F0b3JTdHls
ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCkBAIC0xMDIwLDcg
KzEwMjAsNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsCiAKICNpZiBFTkFCTEUoQVRUQUNITUVO
VF9FTEVNRU5UKQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RBdHRhY2htZW50U3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RBdHRhY2htZW50U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVt
ZW50KikgY29uc3QKIHsKIH0KIApAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgU3RyaW5nIFJlbmRlclRo
ZW1lOjpkYXRhTGlzdFN0eWxlU2hlZXQoKSBjb25zdAogICAgIHJldHVybiAiZGF0YWxpc3QgeyBk
aXNwbGF5OiBub25lOyB9Il9zOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUm
LCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIApAQCAtMTE1MCw3ICsxMTUwLDcgQEAgU2Vj
b25kcyBSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQ
cm9ncmVzcyYpIGNvbnN0CiAgICAgcmV0dXJuIDBfczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25z
dCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFByb2dyZXNzQmFyU3R5
bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIApAQCAtMTE2OSwx
OSArMTE2OSwxOSBAQCBib29sIFJlbmRlclRoZW1lOjpzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0
b3IoY29uc3QgSFRNTElucHV0RWxlbWVudCYpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZWRpYUNvbnRyb2xTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogewogICAgIGFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwgZWxlbWVudCk7CiB9
CkBAIC0xMTkwLDIzICsxMTkwLDIzIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCi12b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewog
fQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShSZW5kZXJT
dHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25z
dCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29u
c3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHls
ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCmluZGV4IDE5YWNmMGJiM2UyLi43N2E4YzM5MjM1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKQEAgLTY1LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIC8vIG1ldHJpY3MgYW5kIGRlZmF1bHRzIGdpdmVuIHRoZSBjb250ZW50cyBv
ZiB0aGUgc3R5bGUuICBUaGlzIGluY2x1ZGVzIHNvcGhpc3RpY2F0ZWQgb3BlcmF0aW9ucyBsaWtl
CiAgICAgLy8gc2VsZWN0aW9uIG9mIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQsIHRo
ZSBkaXNhYmxpbmcgb2YgYXBwZWFyYW5jZSB3aGVuIGNlcnRhaW4gb3RoZXIgcHJvcGVydGllcyBs
aWtlCiAgICAgLy8gImJvcmRlciIgYXJlIHNldCwgb3IgaWYgdGhlIGFwcGVhcmFuY2UgaXMgbm90
IHN1cHBvcnRlZCBieSB0aGUgdGhlbWUuCi0gICAgdm9pZCBhZGp1c3RTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIHVz
ZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSk7CisgICAgdm9pZCBhZGp1c3RTdHlsZShSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogdXNlckFnZW50QXBwZWFyYW5j
ZVN0eWxlKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwYWludCB0aGUgd2lk
Z2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2JqZWN0LiAgQSB3aWRnZXQncyBmb3Jl
Z3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9mIGEgYnV0dG9uLCBpcyBhbHdheXMgcmVu
ZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgaW5k
aWNhdGVzCkBAIC0yODUsMTkgKzI4NSwxOSBAQCBwcm90ZWN0ZWQ6CiAKICNpZiAhVVNFKE5FV19U
SEVNRSkKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFsdWUuCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2Jv
eFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENo
ZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYp
IGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQog
I2VuZGlmCiAKQEAgLTMwNSw3MyArMzA1LDczIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25z
dCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxl
KFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4
dEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZs
b2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51
TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZSYs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3REZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBib29sIHBhaW50
UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBh
aW50U3F1YXJlQnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShN
RVRFUl9FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RDYXBzTG9ja0luZGljYXRvclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2Fwc0xv
Y2tJbmRpY2F0b3JTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoQVBQTEVf
UEFZKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RBcHBsZVBheUJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QXBwbGVQYXlCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRBcHBsZVBheUJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RBdHRhY2htZW50U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RBdHRhY2htZW50U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50QXR0YWNobWVudChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRB
TElTVF9FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RMaXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVt
ZW50KikgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShSZW5kZXJTdHlsZSYs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0
aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0KGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyQm94
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lZGlhQ29udHJvbFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhT3ZlcmxheVBsYXlCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNv
Y29hLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5oCmluZGV4
IGYxODg3NDI0ZjYzLi4zYjJiNTBkZGQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDb2NvYS5oCkBAIC0zOSw3ICszOSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBz
aG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgSFRNTElucHV0RWxlbWVudCYpIGNvbnN0
IGZpbmFsOwogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKLSAgICB2b2lkIGFkanVzdEFwcGxlUGF5
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0QXBwbGVQYXlCdXR0b25TdHlsZShSZW5k
ZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHBhaW50
QXBwbGVQYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ29jb2EubW0KaW5kZXggY2I2MTA4MjkyYTQuLjM2MTk4ZjBjZjc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDb2NvYS5tbQpAQCAtNTQs
NyArNTQsNyBAQCBzdGF0aWMgY29uc3QgYXV0byBhcHBsZVBheUJ1dHRvbk1pbmltdW1XaWR0aCA9
IDE0MDsKIHN0YXRpYyBjb25zdCBhdXRvIGFwcGxlUGF5QnV0dG9uUGxhaW5NaW5pbXVtV2lkdGgg
PSAxMDA7CiBzdGF0aWMgY29uc3QgYXV0byBhcHBsZVBheUJ1dHRvbk1pbmltdW1IZWlnaHQgPSAz
MDsKIAotdm9pZCBSZW5kZXJUaGVtZUNvY29hOjphZGp1c3RBcHBsZVBheUJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUNvY29hOjphZGp1c3RBcHBsZVBheUJ1dHRvblN0eWxlKFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlLmFwcGxl
UGF5QnV0dG9uVHlwZSgpID09IEFwcGxlUGF5QnV0dG9uVHlwZTo6UGxhaW4pCiAgICAgICAgIHN0
eWxlLnNldE1pbldpZHRoKExlbmd0aChhcHBsZVBheUJ1dHRvblBsYWluTWluaW11bVdpZHRoLCBG
aXhlZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5k
ZXggMGUxZjVjOWI5Y2QuLjA3ZTdhMzIzN2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTI5MCw3ICsyOTAsNyBAQCBzdGF0aWMgR3RrU3RhdGVG
bGFncyB0aGVtZVBhcnRTdGF0ZUZsYWdzKGNvbnN0IFJlbmRlclRoZW1lR3RrJiB0aGVtZSwgUmVu
ZGVyVGhlbQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihzdGF0ZUZsYWdz
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIGNoZWNrIGV4cGxp
Y2l0bHkgdGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KICAgICBpZiAoc3R5bGUuYXBw
ZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KQpAQCAtMzk2LDcgKzM5Niw3IEBAIHN0YXRpYyBD
b2xvciBtZW51TGlzdENvbG9yKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGNv
bWJvV2lkZ2V0LmJ1dHRvbigpLmNvbG9yKCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1l
bnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBj
b25zdAogewogICAgIC8vIFRoZSB0ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgc2VsZWN0IG1l
bnUgYnV0dG9ucyBpZ25vcmUgbGluZSBoZWlnaHQuCiAgICAgc3R5bGUuc2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CkBAIC00MDgsOSArNDA4LDkgQEAgdm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb24KICAgICAgICAgc3R5bGUuc2V0Q29sb3IobWVudUxpc3RDb2xv
cihlbGVtZW50KSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGUpIGNv
bnN0CiB7Ci0gICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7
CisgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZSwgZSk7CiB9CiAKIC8qCkBAIC00OTEsNyAr
NDkxLDcgQEAgc3RhdGljIEludFNpemUgc3BpbkJ1dHRvblNpemUoKQogfQogCiAKLXZvaWQgUmVu
ZGVyVGhlbWVHdGs6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RUZXh0RmllbGRTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihl
bGVtZW50KSB8fCAhc2hvdWxkSGF2ZVNwaW5CdXR0b24oZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKmVsZW1lbnQpKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTU4LDkgKzU1OCw5IEBAIGJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25z
dCBQYWludEluZm8mIGksIGNvCiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQq
IGUpIGNvbnN0CiB7Ci0gICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShzdHls
ZVJlc29sdmVyLCBzdHlsZSwgZSk7CisgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShzdHlsZSwgZSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNTY4LDEyICs1NjgsMTIgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyQm94JiBvLCBj
b25zdCBQYWkKICAgICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dChvLCBpLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHls
ZShFbnRyeUljb25MZWZ0LCBzdHlsZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
RWxlbWVudCopIGNvbnN0CiB7CiAgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoRW50cnlJ
Y29uUmlnaHQsIHN0eWxlKTsKIH0KQEAgLTYwNiw3ICs2MDYsNyBAQCBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlckJveCYgcmVuZGVy
T2JqZWN0LAogfQogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi12b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1
c3RMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29u
c3QKIHsKICAgICAvLyBBZGQgYSBtYXJnaW4gdG8gcGxhY2UgdGhlIGJ1dHRvbiBhdCBlbmQgb2Yg
dGhlIGlucHV0IGZpZWxkLgogICAgIGlmIChzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkp
CkBAIC02MzMsNyArNjMzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6cGFpbnRMaXN0QnV0dG9u
Rm9ySW5wdXQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGMKIH0KICNlbmRpZgog
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFdlIGNhbm5vdCBnaXZlIGEgcHJvcGVyIHJl
bmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZvcnR1bmF0ZWx5LgogICAg
IHN0eWxlLnJlc2V0Qm9yZGVyUmFkaXVzKCk7CkBAIC02NTAsMTQgKzY1MCwxNCBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudAogICAgIHJldHVybiBlbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRy
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
IHsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVy
LCBzdHlsZSwgZWxlbWVudCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoc3R5bGUsIGVsZW1lbnQpOwogICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0K
IApAQCAtODE3LDcgKzgxNyw3IEBAIFJlbmRlclRoZW1lOjpJbm5lclNwaW5CdXR0b25MYXlvdXQg
UmVuZGVyVGhlbWVHdGs6OmlubmVyU3BpbkJ1dHRvbkxheW91dChjb25zdCBSCiAgICAgcmV0dXJu
IHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCA/
IElubmVyU3BpbkJ1dHRvbkxheW91dDo6SG9yaXpvbnRhbFVwTGVmdCA6IElubmVyU3BpbkJ1dHRv
bkxheW91dDo6SG9yaXpvbnRhbFVwUmlnaHQ7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5u
ZXJTcGluQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29u
c3QKIHsKICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc3BpbkJ1dHRvblNpemUoKS53aWR0aCgp
LCBGaXhlZCkpOwogICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc3BpbkJ1dHRvblNpemUoKS5o
ZWlnaHQoKSwgRml4ZWQpKTsKQEAgLTExNDAsNyArMTE0MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50TWVkaWFDdXJyZW50VGltZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUd0ay5oCmluZGV4IGQ2YWEwNWRlMGMyLi45ZjViZjI0NmZlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmgKQEAgLTExMywxMCArMTEzLDEwIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFJhZGlvU2l6ZShSZW5k
ZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAg
IHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
Y29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0VGV4dEZpZWxk
U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICBib29sIHBhaW50VGV4dEFyZWEoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CiAKQEAgLTEyNiwzMyArMTI2LDMzIEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGZvcm1l
ciBpcyB1c2VkIHdoZW4gYSBtZW51IGxpc3QgYnV0dG9uIGhhcyBiZWVuIHN0eWxlZC4gVGhpcyBp
cyB1c2VkIHRvIGVuc3VyZQogICAgIC8vIEFxdWEgdGhlbWVkIGNvbnRyb2xzIHdoZW5ldmVyIHBv
c3NpYmxlLiBXZSBhbHdheXMgd2FudCB0byB1c2UgR1RLKyB0aGVtaW5nLCBzbwogICAgIC8vIHdl
IGRvbid0IG1haW50YWluIHRoaXMgZGlmZmVyZW50aWF0aW9uLgotICAgIHZvaWQgYWRqdXN0TWVu
dUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFp
bnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKIAotICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OwogICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBS
ZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKICAgICBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKICAgICBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0
IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
IAotICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbihjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICB2b2lk
IHBhaW50TGlzdEJ1dHRvbkZvcklucHV0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgYWRqdXN0TGlzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGFkanVzdExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgYm9vbCBwYWludFNsaWRl
clRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdFNsaWRl
clRodW1iU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTc1LDEyICsxNzUsMTIgQEAgcHJpdmF0ZToK
IAogICAgIFNlY29uZHMgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5k
ZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFNlY29uZHMgYW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZv
aWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAg
IEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHBhaW50UHJvZ3Jlc3NCYXIo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCiAgICAgSW5uZXJTcGluQnV0dG9uTGF5b3V0IGlubmVyU3BpbkJ1dHRvbkxheW91
dChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGFkanVzdElu
bmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJv
b2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgU3RyaW5nIGZpbGVMaXN0TmFt
ZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udENhc2NhZGUmLCBpbnQgd2lkdGgs
IGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAppbmRleCA3ZTM5ZWM2OTk5NC4uOTM2MmNiODk3
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCkBAIC02OSwx
MyArNjksMTMgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmIHVzZXJBZ2VudFN0eWxlKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2
b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHls
ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29s
IHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFkanVzdFJhZGlv
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOwogICAgIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBw
YWludFB1c2hCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRCdXR0b25TaXpl
KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC04NSwxMCArODUsMTAgQEAgcHJvdGVj
dGVkOgogICAgIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICBi
b29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJv
b2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlckJveCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGp1
c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUo
UmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBw
YWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXpl
KFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA2LDcg
KzEwNiw3IEBAIHByb3RlY3RlZDoKICAgICBpbnQgc2xpZGVyVGlja09mZnNldEZyb21UcmFja0Nl
bnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNv
bnN0IFJlbmRlclN0eWxlJikgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMTBhZjA0MDY1OWEuLjdmMTAyZjVkZmUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC0zNDQsNyArMzQ0LDcg
QEAgRmxvYXRSZWN0IFJlbmRlclRoZW1lSU9TOjphZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25zdCBS
ZW5kZXJPYmplY3QmIGJveCwgR3JhcGhpY3MKICAgICByZXR1cm4gYm9yZGVyLnJlY3QoKTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBF
bGVtZW50KikgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1
OSw3ICs0NTksNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjppc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZQogICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCB1c2VyQWdlbnRTdHlsZSk7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVJT1M6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjph
ZGp1c3RSYWRpb1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0
CiB7CiAgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxl
LmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CkBAIC02MjAsNyArNjIwLDcgQEAg
c3RhdGljIHZvaWQgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBIVE1MSW5wdXRFbGUKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIC8vIFNldCB0aGUgbWluLWhlaWdodCB0byBiZSBh
dCBsZWFzdCBNZW51TGlzdE1pbkhlaWdodC4KICAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRv
KCkpCkBAIC03NjUsOSArNzY1LDkgQEAgY29uc3QgQ0dGbG9hdCBrVHJhY2tUaGlja25lc3MgPSA0
LjA7CiBjb25zdCBDR0Zsb2F0IGtUcmFja1JhZGl1cyA9IGtUcmFja1RoaWNrbmVzcyAvIDIuMDsK
IGNvbnN0IGludCBrRGVmYXVsdFNsaWRlclRodW1iU2l6ZSA9IDE2OwogCi12b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0
U2xpZGVyVHJhY2tTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworICAgIFJlbmRlclRo
ZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKHN0eWxlLCBlbGVtZW50KTsKIAogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbm90IGJlIHJlbHlpbmcgb24gYm9yZGVyIHJhZGl1cyBmb3IgdGhlIGFw
cGVhcmFuY2Ugb2Ygb3VyIGNvbnRyb2xzIDxyZGFyOi8vcHJvYmxlbS83Njc1NDkzPi4KICAgICBp
bnQgcmFkaXVzID0gc3RhdGljX2Nhc3Q8aW50PihrVHJhY2tSYWRpdXMpOwpAQCAtOTg5LDkgKzk4
OSw5IEBAIGludCBSZW5kZXJUaGVtZUlPUzo6c2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRl
cigpIGNvbnN0CiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0
U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CiB7Ci0gICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc2Vs
ZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmll
bGRTdHlsZShzdHlsZSwgZWxlbWVudCk7CiAKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwMTEsOSArMTAxMSw5IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2Vh
cmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QKICAgICBy
ZXR1cm4gcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgUmVuZGVyVGhlbWU6
OmFkanVzdEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CisgICAgUmVuZGVy
VGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50KTsKIAogI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX0NPTE9SKQogICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gQ29sb3JXZWxs
UGFydCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKaW5kZXggMWI5
ZjQ2MGM0MzMuLjA3ZjI2ZTUxMTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMuaApAQCAtMTE4LDQ0ICsxMTgsNDQgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAg
Ym9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAg
IHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBj
b25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxl
KFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBw
YWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAg
dm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0IGZpbmFsOwogCiAgICAgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
Ci0gICAgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkanVzdE1l
bnVMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmlu
YWw7CiAKLSAgICB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0
UHJvZ3Jlc3NCYXJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5h
bDsKICAgICBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOwogCiAgICAgYm9vbCBwYWludFNsaWRl
clRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQg
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dCBmaW5hbDsKIAogICAgIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoUmVu
ZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CiAKICAgICBib29sIHBhaW50
U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCop
IGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QgZmluYWw7CiAgICAgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0
aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRT
dHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKICAgICBib29s
IHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdCBmaW5hbDsKICAgICBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnQoY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5k
ZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKICAgICBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBmaW5hbDsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQog
ICAgIHZvaWQgcGFpbnRMaXN0QnV0dG9uRm9ySW5wdXQoY29uc3QgUmVuZGVyT2JqZWN0JiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBhZGp1c3RMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgYWRqdXN0TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwg
Y29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8p
CkBAIC0xODUsNyArMTg1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNpemVGcm9tRm9udChS
ZW5kZXJTdHlsZSYsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICBJbnRTaXplIHNp
emVGb3JGb250KGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0
OwogICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXpl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIE5TQ29udHJvbFNpemUpIGNvbnN0OworICAg
IHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6ZShSZW5kZXJTdHlsZSYsIE5TQ29udHJvbFNpemUp
IGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVu
ZGVyT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiwgY29uc3Qg
UmVuZGVyT2JqZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0KaW5kZXggYWE1OTkxY2U2N2QuLjA4N2E3NGU3NDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC02Myw3ICs2Myw2IEBACiAjaW1wb3J0ICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQg
IlN0cmluZ1RydW5jYXRvci5oIgotI2ltcG9ydCAiU3R5bGVSZXNvbHZlci5oIgogI2ltcG9ydCAi
VGhlbWVNYWMuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKICNpbXBvcnQgIlVUSVV0aWxpdGll
cy5oIgpAQCAtMTA3NCw3ICsxMDczLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZy
b21Gb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGMKICAgICAg
ICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlJiBz
dHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKIHsKICAgICBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNB
YnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC0xMTQxLDcgKzExNDAsNyBAQCB2b2lkIFJlbmRlclRoZW1l
TWFjOjpwYWludExpc3RCdXR0b25Gb3JJbnB1dChjb25zdCBSZW5kZXJPYmplY3QmIG8sIEdyYXBo
aWNzQ29udAogICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
RWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gQWRkIGEgbWFyZ2luIHRvIHBsYWNlIHRoZSBidXR0
b24gYXQgZW5kIG9mIHRoZSBpbnB1dCBmaWVsZC4KICAgICBpZiAoc3R5bGUuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQpAQCAtMTE5MCw3ICsxMTg5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRl
eHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKIH0KIApAQCAtMTIwMSw3ICsxMjAwLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RUZXh0QXJlYVN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiB9
CiAKQEAgLTE0MjksNyArMTQyOCw3IEBAIFNlY29uZHMgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlv
bkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogICAgIHJldHVy
biBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lUmF0ZSAqIHByb2dyZXNzQW5pbWF0aW9uTnVtRnJhbWVz
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQqKSBjb25zdAogewogfQogCkBAIC0xNjc0LDcgKzE2NzMsNyBAQCBzdGF0aWMgY29uc3Qg
SW50U2l6ZSogbWVudUxpc3RCdXR0b25TaXplcygpCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIE5TQ29udHJvbFNpemUgY29udHJv
bFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwogCkBAIC0xNzAxLDcgKzE3MDAsNyBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eQogICAgIC8vIE91ciBmb250IGlzIGxvY2tlZCB0byB0
aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZvbnQgc2l6ZSBmb3IgdGhlIGNvbnRyb2wuICBUbyBjbGFy
aWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENTUy1zcGVjaWZpZWQgZm9udCB0byBmaWd1cmUgb3V0CiAg
ICAgLy8gYSByZWFzb25hYmxlIGNvbnRyb2wgc2l6ZSwgYnV0IG9uY2UgdGhhdCBjb250cm9sIHNp
emUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhyb3cgdGhhdCBmb250IGF3YXkgYW5kIHVzZSB0aGUgYXBw
cm9wcmlhdGUKICAgICAvLyBzeXN0ZW0gZm9udCBmb3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFk
LgotICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRy
b2xTaXplKTsKKyAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlLCBjb250cm9sU2l6ZSk7
CiAKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CkBAIC0xNzQ3LDcgKzE3NDYs
NyBAQCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBN
ZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSYgcwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50
KikgY29uc3QKIHsKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5jb21wdXRlZEZvbnRQaXhl
bFNpemUoKSAvIGJhc2VGb250U2l6ZTsKIApAQCAtMTc5OSw3ICsxNzk4LDcgQEAgaW50IFJlbmRl
clRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkg
Y29uc3QKIGNvbnN0IGludCB0cmFja1dpZHRoID0gNTsKIGNvbnN0IGludCB0cmFja1JhZGl1cyA9
IDI7CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxw
dHIpOwogfQpAQCAtMTg0NSw5ICsxODQ0LDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGEKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CiB7Ci0gICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKHN0eWxlLCBlbGVtZW50KTsKICAgICBzdHlsZS5zZXRCb3hTaGFkb3co
bnVsbHB0cik7CiB9CiAKQEAgLTE5ODQsNyArMTk4Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiAgICAgc2V0U2l6
ZUZyb21Gb250KHN0eWxlLCBzZWFyY2hGaWVsZFNpemVzKCkpOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgogICAgIHN0eWxl
LnJlc2V0Qm9yZGVyKCk7CkBAIC0yMDEwLDcgKzIwMDksNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlcgogICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
CiAKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0
eWxlKTsKLSAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBj
b250cm9sU2l6ZSk7CisgICAgc2V0Rm9udEZyb21Db250cm9sU2l6ZShzdHlsZSwgY29udHJvbFNp
emUpOwogCiAgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQpAQCAtMjA3NSw3ICsy
MDc0LDcgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OmNhbmNlbEJ1dHRvblNpemVz
KCkgY29uc3QKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZv
bnQoc3R5bGUsIGNhbmNlbEJ1dHRvblNpemVzKCkpOwogICAgIHN0eWxlLnNldFdpZHRoKExlbmd0
aChzaXplLndpZHRoKCksIEZpeGVkKSk7CkBAIC0yMDkxLDcgKzIwOTAsNyBAQCBjb25zdCBJbnRT
aXplKiBSZW5kZXJUaGVtZU1hYzo6cmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3QKIH0KIAogY29u
c3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVt
Rm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwogICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aChzaXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQsIEZpeGVkKSk7CkBAIC0yMTA0
LDcgKzIxMDMsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50
KikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwg
cmVzdWx0c0J1dHRvblNpemVzKCkpOwogICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndp
ZHRoKCksIEZpeGVkKSk7CkBAIC0yMTQwLDcgKzIxMzksNyBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlckJveCYg
Ym94LAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250
KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3Ro
KHNpemUud2lkdGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKaW5kZXggZGUwNGU1ZmRmNTUuLmNmZDlm
MjVjMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAK
QEAgLTY4Miw3ICs2ODIsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29ucwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdElubmVyU3BpbkJ1
dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAg
ICAgaW50IHdpZHRoID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7CiAgICAgaWYg
KHdpZHRoIDw9IDApCkBAIC03NDYsMTMgKzc0NiwxMyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpw
YWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SW5m
bwogICAgIHJldHVybiBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlciksIHBhaW50SW5mbywgRmxvYXRSZWN0KHJlY3QpKTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBzdHlsZS5yZXNldEJvcmRlcigpOwot
ICAgIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwor
ICAgIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGUsIGUpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lV2luOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gVGhlc2UgYXJlIHRoZSBwYWRk
aW5ncyBuZWVkZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGluIHRoZSA8c2VsZWN0PiBi
b3gKICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAgID0gMjsKQEAgLTg1Niw3
ICs4NTYsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLAogICAgIHJldHVybiBwYWludFRleHRG
aWVsZChvLCBpLCByKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmll
bGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZSkgY29uc3QK
IHsKICAgICAvLyBPdmVycmlkZSBwYWRkaW5nU2l6ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBwb3Np
dGlvbmluZy4KICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDE7CkBAIC04OTEsNyArODkxLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBS
ZW5kZXJCb3gmIG8sIGNvbnN0IFBhaW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1
dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAgICBmbG9hdCBmb250U2NhbGUgPSBz
dHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6
ZTsKQEAgLTkwMCwxNCArOTAwLDE0IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0CiAgICAgc3R5
bGUuc2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUo
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBJbnRTaXpl
IGVtcHR5U2l6ZSgxLCAxMSk7CiAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53
aWR0aCgpLCBGaXhlZCkpOwogICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhl
aWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBkZWNvcmF0aW9u
IHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQogICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxl
LmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwpA
QCAtOTM5LDcgKzkzOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyQm94JiBvLCBjCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0CiB7
CiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAg
ICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSAvIGRlZmF1
bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKQEAgLTExMDQsNyArMTEwNCw3IEBAIFN0cmluZyBSZW5k
ZXJUaGVtZVdpbjo6bWVkaWFDb250cm9sc1NjcmlwdCgpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
RVRFUl9FTEVNRU5UKQotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWV0ZXJTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdE1ldGVyU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCmluZGV4IDgyODBm
OTFiMDA0Li41ZWVlOGU2OWE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lV2luLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBwYWludEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKQEAgLTgwLDkgKzgwLDkg
QEAgcHVibGljOgogICAgIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgRmxvYXRSZWN0JiByKSBvdmVycmlkZQogICAgIHsg
cmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CiAKLSAgICB2b2lkIGFkanVzdE1lbnVM
aXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZSYs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHBhaW50TWVudUxpc3Qo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKIApAQCAtOTIsMjYgKzkyLDI2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcG9w
dXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBv
dmVycmlkZTsKICAgICBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFJlbmRlclN0eWxl
JiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOwogICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVy
Qm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAg
dm9pZCB0aGVtZUNoYW5nZWQoKSBvdmVycmlkZTsKIAotICAgIHZvaWQgYWRqdXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlIHsgfQotICAgIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
IHsgfQotICAgIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9p
ZCBhZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQg
YWRqdXN0VGV4dEFyZWFTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZSB7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldFdlYktpdElzQmVpbmdVbmxv
YWRlZCgpOwogCkBAIC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShNRVRFUl9F
TEVNRU5UKQogICAgIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVy
JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc3VwcG9ydHNNZXRl
cihDb250cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGp1c3RNZXRlclN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGFkanVzdE1ldGVyU3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZGQ0N2YzMzNhNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC0wLDAgKzEsNjEyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29s
Zi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJr
aXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3Nr
dXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlQWRqdXN0
ZXIuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1hcnF1ZWVF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNsb3RFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUZXh0
QXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiUXVp
cmtzLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTVkdEb2N1
bWVudC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgor
I2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBTdHlsZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK0FkanVzdGVyOjpBZGp1c3Rlcihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVu
dEJveFN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1
bWVudCkKKyAgICAsIG1fcGFyZW50U3R5bGUocGFyZW50U3R5bGUpCisgICAgLCBtX3BhcmVudEJv
eFN0eWxlKHBhcmVudEJveFN0eWxlID8gKnBhcmVudEJveFN0eWxlIDogbV9wYXJlbnRTdHlsZSkK
KyAgICAsIG1fZWxlbWVudChlbGVtZW50KQoreworfQorCitzdGF0aWMgdm9pZCBhZGRJbnRyaW5z
aWNNYXJnaW5zKFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICAvLyBJbnRyaW5zaWMgbWFyZ2lu
IHZhbHVlLgorICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJnaW4gPSBjbGFtcFRvSW50ZWdlcigy
ICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKworICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9o
ZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRo
IGlzIGZsYXdlZC4KKyAgICAvLyBGSVhNRTogVXNpbmcgImhhc1F1aXJrIiB0byBkZWNpZGUgdGhl
IG1hcmdpbiB3YXNuJ3Qgc2V0IGlzIGtpbmQgb2YgbGFtZS4KKyAgICBpZiAoc3R5bGUud2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpKSB7CisgICAgICAgIGlmIChzdHlsZS5tYXJnaW5MZWZ0KCku
aGFzUXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLnNldE1hcmdpbkxlZnQoTGVuZ3RoKGludHJp
bnNpY01hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgaWYgKHN0eWxlLm1hcmdpblJpZ2h0KCkuaGFz
UXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLnNldE1hcmdpblJpZ2h0KExlbmd0aChpbnRyaW5z
aWNNYXJnaW4sIEZpeGVkKSk7CisgICAgfQorCisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0
bygpKSB7CisgICAgICAgIGlmIChzdHlsZS5tYXJnaW5Ub3AoKS5oYXNRdWlyaygpKQorICAgICAg
ICAgICAgc3R5bGUuc2V0TWFyZ2luVG9wKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7
CisgICAgICAgIGlmIChzdHlsZS5tYXJnaW5Cb3R0b20oKS5oYXNRdWlyaygpKQorICAgICAgICAg
ICAgc3R5bGUuc2V0TWFyZ2luQm90dG9tKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7
CisgICAgfQorfQorCitzdGF0aWMgRGlzcGxheVR5cGUgZXF1aXZhbGVudEJsb2NrRGlzcGxheShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAg
ICBzd2l0Y2ggKGF1dG8gZGlzcGxheSA9IHN0eWxlLmRpc3BsYXkoKSkgeworICAgIGNhc2UgRGlz
cGxheVR5cGU6OkJsb2NrOgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlOgorICAgIGNhc2Ug
RGlzcGxheVR5cGU6OkJveDoKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpGbGV4OgorICAgIGNhc2Ug
RGlzcGxheVR5cGU6OldlYktpdEZsZXg6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6R3JpZDoKKyAg
ICBjYXNlIERpc3BsYXlUeXBlOjpGbG93Um9vdDoKKyAgICAgICAgcmV0dXJuIGRpc3BsYXk7CisK
KyAgICBjYXNlIERpc3BsYXlUeXBlOjpMaXN0SXRlbToKKyAgICAgICAgLy8gSXQgaXMgYSBXaW5J
RSBidWcgdGhhdCBmbG9hdGVkIGxpc3QgaXRlbXMgbG9zZSB0aGVpciBidWxsZXRzLCBzbyB3ZSds
bCBlbXVsYXRlIHRoZSBxdWlyaywgYnV0IG9ubHkgaW4gcXVpcmtzIG1vZGUuCisgICAgICAgIGlm
IChkb2N1bWVudC5pblF1aXJrc01vZGUoKSAmJiBzdHlsZS5pc0Zsb2F0aW5nKCkpCisgICAgICAg
ICAgICByZXR1cm4gRGlzcGxheVR5cGU6OkJsb2NrOworICAgICAgICByZXR1cm4gZGlzcGxheTsK
KyAgICBjYXNlIERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZToKKyAgICAgICAgcmV0dXJuIERpc3Bs
YXlUeXBlOjpUYWJsZTsKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpJbmxpbmVCb3g6CisgICAgICAg
IHJldHVybiBEaXNwbGF5VHlwZTo6Qm94OworICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGluZUZs
ZXg6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6V2ViS2l0SW5saW5lRmxleDoKKyAgICAgICAgcmV0
dXJuIERpc3BsYXlUeXBlOjpGbGV4OworICAgIGNhc2UgRGlzcGxheVR5cGU6OklubGluZUdyaWQ6
CisgICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6R3JpZDsKKworICAgIGNhc2UgRGlzcGxheVR5
cGU6OklubGluZToKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpDb21wYWN0OgorICAgIGNhc2UgRGlz
cGxheVR5cGU6OklubGluZUJsb2NrOgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlUm93R3Jv
dXA6CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVIZWFkZXJHcm91cDoKKyAgICBjYXNlIERp
c3BsYXlUeXBlOjpUYWJsZUZvb3Rlckdyb3VwOgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxl
Um93OgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlQ29sdW1uR3JvdXA6CisgICAgY2FzZSBE
aXNwbGF5VHlwZTo6VGFibGVDb2x1bW46CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6VGFibGVDZWxs
OgorICAgIGNhc2UgRGlzcGxheVR5cGU6OlRhYmxlQ2FwdGlvbjoKKyAgICAgICAgcmV0dXJuIERp
c3BsYXlUeXBlOjpCbG9jazsKKyAgICBjYXNlIERpc3BsYXlUeXBlOjpDb250ZW50czoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6Q29u
dGVudHM7CisgICAgY2FzZSBEaXNwbGF5VHlwZTo6Tm9uZToKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBEaXNwbGF5VHlwZTo6Tm9uZTsKKyAgICB9CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIERpc3BsYXlUeXBlOjpCbG9jazsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjb25zdCBFbGVtZW50JiBl
bGVtZW50KQoreworICAgIGF1dG8qIHBhcmVudE5vZGUgPSBlbGVtZW50LnBhcmVudE5vZGUoKTsK
KyAgICByZXR1cm4gcGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKK30K
KworLy8gQ1NTIHJlcXVpcmVzIHRleHQtZGVjb3JhdGlvbiB0byBiZSByZXNldCBhdCBlYWNoIERP
TSBlbGVtZW50IGZvciB0YWJsZXMsCisvLyBpbmxpbmUgYmxvY2tzLCBpbmxpbmUgdGFibGVzLCBz
aGFkb3cgRE9NIGNyb3NzaW5ncywgZmxvYXRpbmcgZWxlbWVudHMsCisvLyBhbmQgYWJzb2x1dGUg
b3IgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGVsZW1lbnRzLgorc3RhdGljIGJvb2wgZG9lc05vdElu
aGVyaXRUZXh0RGVjb3JhdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlw
ZTo6VGFibGUgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZQor
ICAgICAgICB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJsb2NrIHx8
IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQm94IHx8IChlbGVtZW50ICYm
IGlzQXRTaGFkb3dCb3VuZGFyeSgqZWxlbWVudCkpCisgICAgICAgIHx8IHN0eWxlLmlzRmxvYXRp
bmcoKSB8fCBzdHlsZS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpOworfQorCisjaWYgRU5BQkxFKE9W
RVJGTE9XX1NDUk9MTElOR19UT1VDSCkgfHwgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorc3RhdGlj
IGJvb2wgaXNTY3JvbGxhYmxlT3ZlcmZsb3coT3ZlcmZsb3cgb3ZlcmZsb3cpCit7CisgICAgcmV0
dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgfHwgb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6
OkF1dG87Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKK3N0YXRpYyBP
cHRpb25TZXQ8VG91Y2hBY3Rpb24+IGNvbXB1dGVFZmZlY3RpdmVUb3VjaEFjdGlvbnMoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+IGVmZmVjdGl2ZVRvdWNo
QWN0aW9ucykKK3sKKyAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vcG9pbnRlcmV2ZW50cy8j
ZGV0ZXJtaW5pbmctc3VwcG9ydGVkLXRvdWNoLWJlaGF2aW9yCisgICAgLy8gIkEgdG91Y2ggYmVo
YXZpb3IgaXMgc3VwcG9ydGVkIGlmIGl0IGNvbmZvcm1zIHRvIHRoZSB0b3VjaC1hY3Rpb24gcHJv
cGVydHkgb2YgZWFjaCBlbGVtZW50IGJldHdlZW4KKyAgICAvLyB0aGUgaGl0IHRlc3RlZCBlbGVt
ZW50IGFuZCBpdHMgbmVhcmVzdCBhbmNlc3RvciB3aXRoIHRoZSBkZWZhdWx0IHRvdWNoIGJlaGF2
aW9yIChpbmNsdWRpbmcgYm90aCB0aGUKKyAgICAvLyBoaXQgdGVzdGVkIGVsZW1lbnQgYW5kIHRo
ZSBlbGVtZW50IHdpdGggdGhlIGRlZmF1bHQgdG91Y2ggYmVoYXZpb3IpLiIKKworICAgIGJvb2wg
aGFzRGVmYXVsdFRvdWNoQmVoYXZpb3IgPSBpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS5vdmVy
Zmxvd1goKSkgfHwgaXNTY3JvbGxhYmxlT3ZlcmZsb3coc3R5bGUub3ZlcmZsb3dZKCkpOworICAg
IGlmIChoYXNEZWZhdWx0VG91Y2hCZWhhdmlvcikKKyAgICAgICAgZWZmZWN0aXZlVG91Y2hBY3Rp
b25zID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUb3VjaEFjdGlvbnMoKTsKKworICAgIGF1dG8gdG91
Y2hBY3Rpb25zID0gc3R5bGUudG91Y2hBY3Rpb25zKCk7CisgICAgaWYgKHRvdWNoQWN0aW9ucyA9
PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRvdWNoQWN0aW9ucygpKQorICAgICAgICByZXR1cm4gZWZm
ZWN0aXZlVG91Y2hBY3Rpb25zOworCisgICAgaWYgKGVmZmVjdGl2ZVRvdWNoQWN0aW9ucy5jb250
YWlucyhUb3VjaEFjdGlvbjo6Tm9uZSkpCisgICAgICAgIHJldHVybiB7IFRvdWNoQWN0aW9uOjpO
b25lIH07CisKKyAgICBpZiAoZWZmZWN0aXZlVG91Y2hBY3Rpb25zLmNvbnRhaW5zQW55KHsgVG91
Y2hBY3Rpb246OkF1dG8sIFRvdWNoQWN0aW9uOjpNYW5pcHVsYXRpb24gfSkpCisgICAgICAgIHJl
dHVybiB0b3VjaEFjdGlvbnM7CisKKyAgICBpZiAodG91Y2hBY3Rpb25zLmNvbnRhaW5zQW55KHsg
VG91Y2hBY3Rpb246OkF1dG8sIFRvdWNoQWN0aW9uOjpNYW5pcHVsYXRpb24gfSkpCisgICAgICAg
IHJldHVybiBlZmZlY3RpdmVUb3VjaEFjdGlvbnM7CisKKyAgICBhdXRvIHNoYXJlZFRvdWNoQWN0
aW9ucyA9IGVmZmVjdGl2ZVRvdWNoQWN0aW9ucyAmIHRvdWNoQWN0aW9uczsKKyAgICBpZiAoc2hh
cmVkVG91Y2hBY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgVG91Y2hBY3Rpb246
Ok5vbmUgfTsKKworICAgIHJldHVybiBzaGFyZWRUb3VjaEFjdGlvbnM7Cit9CisjZW5kaWYKKwor
dm9pZCBBZGp1c3Rlcjo6YWRqdXN0KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2VTdHlsZSkgY29uc3QKK3sKKyAgICAvLyBDYWNoZSBvdXIg
b3JpZ2luYWwgZGlzcGxheS4KKyAgICBzdHlsZS5zZXRPcmlnaW5hbERpc3BsYXkoc3R5bGUuZGlz
cGxheSgpKTsKKworICAgIGlmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkNvbnRl
bnRzKQorICAgICAgICBhZGp1c3REaXNwbGF5Q29udGVudHNTdHlsZShzdHlsZSk7CisKKyAgICBp
ZiAoc3R5bGUuZGlzcGxheSgpICE9IERpc3BsYXlUeXBlOjpOb25lICYmIHN0eWxlLmRpc3BsYXko
KSAhPSBEaXNwbGF5VHlwZTo6Q29udGVudHMpIHsKKyAgICAgICAgaWYgKG1fZWxlbWVudCkgewor
ICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIDx0ZD4gdGhhdCBzcGVjaWZpZXMgYSBmbG9hdCBw
cm9wZXJ0eSwgaW4gcXVpcmtzIG1vZGUgd2UganVzdCBkcm9wIHRoZSBmbG9hdAorICAgICAgICAg
ICAgLy8gcHJvcGVydHkuCisgICAgICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBk
aXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuIEluIHF1aXJrcyBtb2Rl
IHdlIGZvcmNlCisgICAgICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNw
bGF5IHR5cGVzLgorICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKHRkVGFnKSkgeworICAg
ICAgICAgICAgICAgICAgICBzdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpUYWJsZUNlbGwp
OworICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRGbG9hdGluZyhGbG9hdDo6Tm8pOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4oKm1fZWxlbWVudCkp
CisgICAgICAgICAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoc3R5bGUuaXNEaXNwbGF5SW5s
aW5lVHlwZSgpID8gRGlzcGxheVR5cGU6OklubGluZVRhYmxlIDogRGlzcGxheVR5cGU6OlRhYmxl
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFt
ZSh0ZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKSkgeworICAgICAgICAgICAg
ICAgIGlmIChzdHlsZS53aGl0ZVNwYWNlKCkgPT0gV2hpdGVTcGFjZTo6S0hUTUxOb1dyYXApIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBhcmUgcmVhbGx5IG5vd3Jh
cHBpbmcgb3IgaWYgd2Ugc2hvdWxkIGp1c3QKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG5v
cm1hbCBpbnN0ZWFkLiBJZiB0aGUgd2lkdGggb2YgdGhlIGNlbGwgaXMgZml4ZWQsIHRoZW4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIFdoaXRlU3BhY2U6Ok5v
V3JhcC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNGaXhlZCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShXaGl0ZVNwYWNlOjpO
b3JtYWwpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFdoaXRlU3BhY2U6Ok5vV3JhcCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUYWJsZXMgbmV2ZXIgc3VwcG9y
dCB0aGUgLXdlYmtpdC0qIHZhbHVlcyBmb3IgdGV4dC1hbGlnbiBhbmQgd2lsbCByZXNldCBiYWNr
IHRvIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpt
X2VsZW1lbnQpICYmIChzdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRM
ZWZ0IHx8IHN0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlciB8
fCBzdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodCkpCisgICAg
ICAgICAgICAgICAgc3R5bGUuc2V0VGV4dEFsaWduKFRleHRBbGlnbk1vZGU6OlN0YXJ0KTsKKwor
ICAgICAgICAgICAgLy8gRnJhbWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRpb246
cmVsYXRpdmUgb3IgcG9zaXRpb246YWJzb2x1dGUuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCisgICAg
ICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9zaXRpb24gdGhl
c2Ugb2JqZWN0cy4gVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3BsYXkuCisgICAgICAgICAgICBp
ZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05h
bWUoZnJhbWVzZXRUYWcpKSB7CisgICAgICAgICAgICAgICAgc3R5bGUuc2V0UG9zaXRpb24oUG9z
aXRpb25UeXBlOjpTdGF0aWMpOworICAgICAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlz
cGxheVR5cGU6OkJsb2NrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUnVieSB0
ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXQgb3IgcG9zaXRpb24uIFRoaXMgbWlnaHQgY2hhbmdl
IHdpdGggZXZvbHV0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorICAgICAgICAgICAgaWYgKG1f
ZWxlbWVudC0+aGFzVGFnTmFtZShydFRhZykpIHsKKyAgICAgICAgICAgICAgICBzdHlsZS5zZXRQ
b3NpdGlvbihQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisgICAgICAgICAgICAgICAgc3R5bGUuc2V0
RmxvYXRpbmcoRmxvYXQ6Ok5vKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVXNl
ciBhZ2VudHMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgYSBydWxlIGluIHRoZWlyIHVzZXIgYWdlbnQg
c3R5bGVzaGVldCB0aGF0IG1hdGNoZXMgdGggZWxlbWVudHMgdGhhdCBoYXZlIGEgcGFyZW50Cisg
ICAgICAgICAgICAvLyBub2RlIHdob3NlIGNvbXB1dGVkIHZhbHVlIGZvciB0aGUgJ3RleHQtYWxp
Z24nIHByb3BlcnR5IGlzIGl0cyBpbml0aWFsIHZhbHVlLCB3aG9zZSBkZWNsYXJhdGlvbiBibG9j
ayBjb25zaXN0cyBvZgorICAgICAgICAgICAgLy8ganVzdCBhIHNpbmdsZSBkZWNsYXJhdGlvbiB0
aGF0IHNldHMgdGhlICd0ZXh0LWFsaWduJyBwcm9wZXJ0eSB0byB0aGUgdmFsdWUgJ2NlbnRlcicu
CisgICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9y
ZW5kZXJpbmcuaHRtbCNyZW5kZXJpbmcKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUodGhUYWcpICYmICFzdHlsZS5oYXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKCkgJiYgbV9w
YXJlbnRTdHlsZS50ZXh0QWxpZ24oKSA9PSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbigp
KQorICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2RlOjpDZW50
ZXIpOworCisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykp
CisgICAgICAgICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6QmxvY2spOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQWJzb2x1dGUvZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50
cywgZmxvYXRpbmcgZWxlbWVudHMgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50IG5lZWQgYmxvY2st
bGlrZSBvdXRzaWRlIGRpc3BsYXkuCisgICAgICAgIGlmIChzdHlsZS5oYXNPdXRPZkZsb3dQb3Np
dGlvbigpIHx8IHN0eWxlLmlzRmxvYXRpbmcoKSB8fCAobV9lbGVtZW50ICYmIG1fZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50KCkgPT0gbV9lbGVtZW50KSkKKyAgICAgICAgICAgIHN0eWxlLnNldERp
c3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZSwgbV9kb2N1bWVudCkpOworCisgICAg
ICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVkbyBzdHls
ZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQncyBub3QgY29tcGxl
dGVseQorICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4KKyAgICAgICAgaWYg
KHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lICYmIHN0eWxlLnN0eWxlVHlw
ZSgpID09IFBzZXVkb0lkOjpOb25lICYmIHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gbV9wYXJlbnRT
dHlsZS53cml0aW5nTW9kZSgpKQorICAgICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5
VHlwZTo6SW5saW5lQmxvY2spOworCisgICAgICAgIC8vIEFmdGVyIHBlcmZvcm1pbmcgdGhlIGRp
c3BsYXkgbXV0YXRpb24sIGNoZWNrIHRhYmxlIHJvd3MuIFdlIGRvIG5vdCBob25vciBwb3NpdGlv
bjpyZWxhdGl2ZSBvciBwb3NpdGlvbjpzdGlja3kgb24KKyAgICAgICAgLy8gdGFibGUgcm93cyBv
ciBjZWxscy4gVGhpcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBmb3IgcG9zaXRpb246cmVsYXRpdmUg
aW4gQ1NTMi4xIChhbmQgY2F1c2VkIGEgY3Jhc2ggaW4gY29udGFpbmluZ0Jsb2NrKCkKKyAgICAg
ICAgLy8gb24gc29tZSBzaXRlcykuCisgICAgICAgIGlmICgoc3R5bGUuZGlzcGxheSgpID09IERp
c3BsYXlUeXBlOjpUYWJsZUhlYWRlckdyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5
VHlwZTo6VGFibGVSb3dHcm91cAorICAgICAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERp
c3BsYXlUeXBlOjpUYWJsZUZvb3Rlckdyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5
VHlwZTo6VGFibGVSb3cpCisgICAgICAgICAgICAmJiBzdHlsZS5wb3NpdGlvbigpID09IFBvc2l0
aW9uVHlwZTo6UmVsYXRpdmUpCisgICAgICAgICAgICBzdHlsZS5zZXRQb3NpdGlvbihQb3NpdGlv
blR5cGU6OlN0YXRpYyk7CisKKyAgICAgICAgLy8gd3JpdGluZy1tb2RlIGRvZXMgbm90IGFwcGx5
IHRvIHRhYmxlIHJvdyBncm91cHMsIHRhYmxlIGNvbHVtbiBncm91cHMsIHRhYmxlIHJvd3MsIGFu
ZCB0YWJsZSBjb2x1bW5zLgorICAgICAgICAvLyBGSVhNRTogVGFibGUgY2VsbHMgc2hvdWxkIGJl
IGFsbG93ZWQgdG8gYmUgcGVycGVuZGljdWxhciBvciBmbGlwcGVkIHdpdGggcmVzcGVjdCB0byB0
aGUgdGFibGUsIHRob3VnaC4KKyAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5
VHlwZTo6VGFibGVDb2x1bW4gfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJs
ZUNvbHVtbkdyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVGb290
ZXJHcm91cAorICAgICAgICAgICAgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpU
YWJsZUhlYWRlckdyb3VwIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGVS
b3cgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZVJvd0dyb3VwCisgICAg
ICAgICAgICB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlQ2VsbCkKKyAg
ICAgICAgICAgIHN0eWxlLnNldFdyaXRpbmdNb2RlKG1fcGFyZW50U3R5bGUud3JpdGluZ01vZGUo
KSk7CisKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYmxvY2stZmxv
dyBvbiBmbGV4aWJsZSBib3hlcyB5ZXQsIGRpc2FsbG93IHNldHRpbmcKKyAgICAgICAgLy8gb2Yg
YmxvY2stZmxvdyB0byBhbnl0aGluZyBvdGhlciB0aGFuIFRvcFRvQm90dG9tV3JpdGluZ01vZGUu
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQx
OCAtIEZsZXhpYmxlIGJveCBzdXBwb3J0LgorICAgICAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUo
KSAhPSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlICYmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxh
eVR5cGU6OkJveCB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJveCkp
CisgICAgICAgICAgICBzdHlsZS5zZXRXcml0aW5nTW9kZShUb3BUb0JvdHRvbVdyaXRpbmdNb2Rl
KTsKKworICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWRpc3BsYXkvI3RyYW5z
Zm9ybWF0aW9ucworICAgICAgICAvLyAiQSBwYXJlbnQgd2l0aCBhIGdyaWQgb3IgZmxleCBkaXNw
bGF5IHZhbHVlIGJsb2NraWZpZXMgdGhlIGJveOKAmXMgZGlzcGxheSB0eXBlLiIKKyAgICAgICAg
aWYgKG1fcGFyZW50Qm94U3R5bGUuaXNEaXNwbGF5RmxleGlibGVPckdyaWRCb3goKSkgeworICAg
ICAgICAgICAgc3R5bGUuc2V0RmxvYXRpbmcoRmxvYXQ6Ok5vKTsKKyAgICAgICAgICAgIHN0eWxl
LnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZSwgbV9kb2N1bWVudCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIG91ciB6LWluZGV4IHZhbHVlIGlz
IG9ubHkgYXBwbGllZCBpZiB0aGUgb2JqZWN0IGlzIHBvc2l0aW9uZWQuCisgICAgaWYgKHN0eWxl
LnBvc2l0aW9uKCkgPT0gUG9zaXRpb25UeXBlOjpTdGF0aWMgJiYgIW1fcGFyZW50Qm94U3R5bGUu
aXNEaXNwbGF5RmxleGlibGVPckdyaWRCb3goKSkKKyAgICAgICAgc3R5bGUuc2V0SGFzQXV0b1pJ
bmRleCgpOworCisgICAgLy8gQXV0byB6LWluZGV4IGJlY29tZXMgMCBmb3IgdGhlIHJvb3QgZWxl
bWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4gVGhpcyBwcmV2ZW50cworICAgIC8vIGNhc2Vz
IHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBhIHNpbmdsZSB1bml0IGVu
ZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50CisgICAgLy8gb2JqZWN0IHdlZGdlZCBpbiBiZXR3
ZWVuIHRoZW0uIEF1dG8gei1pbmRleCBhbHNvIGJlY29tZXMgMCBmb3Igb2JqZWN0cyB0aGF0IHNw
ZWNpZnkgdHJhbnNmb3Jtcy9tYXNrcy9yZWZsZWN0aW9ucy4KKyAgICBpZiAoc3R5bGUuaGFzQXV0
b1pJbmRleCgpKSB7CisgICAgICAgIGlmICgobV9lbGVtZW50ICYmIG1fZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50KCkgPT0gbV9lbGVtZW50KQorICAgICAgICAgICAgfHwgc3R5bGUub3BhY2l0eSgp
IDwgMS4wZgorICAgICAgICAgICAgfHwgc3R5bGUuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5
KCkKKyAgICAgICAgICAgIHx8IHN0eWxlLmhhc01hc2soKQorICAgICAgICAgICAgfHwgc3R5bGUu
Y2xpcFBhdGgoKQorICAgICAgICAgICAgfHwgc3R5bGUuYm94UmVmbGVjdCgpCisgICAgICAgICAg
ICB8fCBzdHlsZS5oYXNGaWx0ZXIoKQorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCisgICAg
ICAgICAgICB8fCBzdHlsZS5oYXNCYWNrZHJvcEZpbHRlcigpCisjZW5kaWYKKyAgICAgICAgICAg
IHx8IHN0eWxlLmhhc0JsZW5kTW9kZSgpCisgICAgICAgICAgICB8fCBzdHlsZS5oYXNJc29sYXRp
b24oKQorICAgICAgICAgICAgfHwgc3R5bGUucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlN0
aWNreQorICAgICAgICAgICAgfHwgc3R5bGUucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OkZp
eGVkCisgICAgICAgICAgICB8fCBzdHlsZS53aWxsQ2hhbmdlQ3JlYXRlc1N0YWNraW5nQ29udGV4
dCgpKQorICAgICAgICAgICAgc3R5bGUuc2V0WkluZGV4KDApOworICAgIH0KKworICAgIGlmICht
X2VsZW1lbnQpIHsKKyAgICAgICAgLy8gVGV4dGFyZWEgY29uc2lkZXJzIG92ZXJmbG93IHZpc2li
bGUgYXMgYXV0by4KKyAgICAgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2VsZW1l
bnQpKSB7CisgICAgICAgICAgICBzdHlsZS5zZXRPdmVyZmxvd1goc3R5bGUub3ZlcmZsb3dYKCkg
PT0gT3ZlcmZsb3c6OlZpc2libGUgPyBPdmVyZmxvdzo6QXV0byA6IHN0eWxlLm92ZXJmbG93WCgp
KTsKKyAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShzdHlsZS5vdmVyZmxvd1koKSA9PSBP
dmVyZmxvdzo6VmlzaWJsZSA/IE92ZXJmbG93OjpBdXRvIDogc3R5bGUub3ZlcmZsb3dZKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gRGlzYWxsb3cgLXdlYmtpdC11c2VyLW1vZGlmeSBvbiA6
cHNldWRvIGFuZCA6OnBzZXVkbyBlbGVtZW50cy4KKyAgICAgICAgaWYgKCFtX2VsZW1lbnQtPnNo
YWRvd1BzZXVkb0lkKCkuaXNOdWxsKCkpCisgICAgICAgICAgICBzdHlsZS5zZXRVc2VyTW9kaWZ5
KFVzZXJNb2RpZnk6OlJlYWRPbmx5KTsKKworICAgICAgICBpZiAoaXM8SFRNTE1hcnF1ZWVFbGVt
ZW50PigqbV9lbGVtZW50KSkgeworICAgICAgICAgICAgLy8gRm9yIG5vdywgPG1hcnF1ZWU+IHJl
cXVpcmVzIGFuIG92ZXJmbG93IGNsaXAgdG8gd29yayBwcm9wZXJseS4KKyAgICAgICAgICAgIHN0
eWxlLnNldE92ZXJmbG93WChPdmVyZmxvdzo6SGlkZGVuKTsKKyAgICAgICAgICAgIHN0eWxlLnNl
dE92ZXJmbG93WShPdmVyZmxvdzo6SGlkZGVuKTsKKworICAgICAgICAgICAgYm9vbCBpc1ZlcnRp
Y2FsID0gc3R5bGUubWFycXVlZURpcmVjdGlvbigpID09IE1hcnF1ZWVEaXJlY3Rpb246OlVwIHx8
IHN0eWxlLm1hcnF1ZWVEaXJlY3Rpb24oKSA9PSBNYXJxdWVlRGlyZWN0aW9uOjpEb3duOworICAg
ICAgICAgICAgLy8gTWFrZSBob3Jpem9udGFsIG1hcnF1ZWVzIG5vdCB3cmFwLgorICAgICAgICAg
ICAgaWYgKCFpc1ZlcnRpY2FsKSB7CisgICAgICAgICAgICAgICAgc3R5bGUuc2V0V2hpdGVTcGFj
ZShXaGl0ZVNwYWNlOjpOb1dyYXApOworICAgICAgICAgICAgICAgIHN0eWxlLnNldFRleHRBbGln
bihUZXh0QWxpZ25Nb2RlOjpTdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBB
cHBhcmVudGx5IHRoaXMgaXMgdGhlIGV4cGVjdGVkIGxlZ2FjeSBiZWhhdmlvci4KKyAgICAgICAg
ICAgIGlmIChpc1ZlcnRpY2FsICYmIHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICAg
ICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoMjAwLCBGaXhlZCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGRvZXNOb3RJbmhlcml0VGV4dERlY29yYXRpb24oc3R5bGUsIG1fZWxl
bWVudCkpCisgICAgICAgIHN0eWxlLnNldFRleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLnRl
eHREZWNvcmF0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc3R5bGUuYWRkVG9UZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdChzdHlsZS50ZXh0RGVjb3JhdGlvbigpKTsKKworICAgIC8vIElmIGVpdGhl
ciBvdmVyZmxvdyB2YWx1ZSBpcyBub3QgdmlzaWJsZSwgY2hhbmdlIHRvIGF1dG8uCisgICAgaWYg
KHN0eWxlLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpWaXNpYmxlICYmIHN0eWxlLm92ZXJmbG93
WSgpICE9IE92ZXJmbG93OjpWaXNpYmxlKSB7CisgICAgICAgIC8vIEZJWE1FOiBPbmNlIHdlIGlt
cGxlbWVudCBwYWdpbmF0aW9uIGNvbnRyb2xzLCBvdmVyZmxvdy14IHNob3VsZCBkZWZhdWx0IHRv
IGhpZGRlbgorICAgICAgICAvLyBpZiBvdmVyZmxvdy15IGlzIHNldCB0byAtd2Via2l0LXBhZ2Vk
LXggb3IgLXdlYmtpdC1wYWdlLXkuIEZvciBub3csIHdlJ2xsIGxldCBpdAorICAgICAgICAvLyBk
ZWZhdWx0IHRvIGF1dG8gc28gd2UgY2FuIGF0IGxlYXN0IHNjcm9sbCB0aHJvdWdoIHRoZSBwYWdl
cy4KKyAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dYKE92ZXJmbG93OjpBdXRvKTsKKyAgICB9IGVs
c2UgaWYgKHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpWaXNpYmxlICYmIHN0eWxlLm92
ZXJmbG93WCgpICE9IE92ZXJmbG93OjpWaXNpYmxlKQorICAgICAgICBzdHlsZS5zZXRPdmVyZmxv
d1koT3ZlcmZsb3c6OkF1dG8pOworCisgICAgLy8gQ2FsbCBzZXRTdHlsZXNGb3JQYWdpbmF0aW9u
TW9kZSgpIGlmIGEgcGFnaW5hdGlvbiBtb2RlIGlzIHNldCBmb3IgYW55IG5vbi1yb290IGVsZW1l
bnRzLiBJZiB0aGVzZQorICAgIC8vIHN0eWxlcyBhcmUgc3BlY2lmaWVkIG9uIGEgcm9vdCBlbGVt
ZW50LCB0aGVuIHRoZXkgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW4KKyAgICAvLyBTdHlsZTo6Y3Jl
YXRlRm9ybV9kb2N1bWVudC4KKyAgICBpZiAoKHN0eWxlLm92ZXJmbG93WSgpID09IE92ZXJmbG93
OjpQYWdlZFggfHwgc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlBhZ2VkWSkgJiYgISht
X2VsZW1lbnQgJiYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBtX2VsZW1lbnQt
Pmhhc1RhZ05hbWUoYm9keVRhZykpKSkKKyAgICAgICAgc3R5bGUuc2V0Q29sdW1uU3R5bGVzRnJv
bVBhZ2luYXRpb25Nb2RlKFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUoc3R5
bGUpKTsKKworICAgIC8vIFRhYmxlIHJvd3MsIHNlY3Rpb25zIGFuZCB0aGUgdGFibGUgaXRzZWxm
IHdpbGwgc3VwcG9ydCBvdmVyZmxvdzpoaWRkZW4gYW5kIHdpbGwgaWdub3JlIHNjcm9sbC9hdXRv
LgorICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25zIHdpbGwgc3VwcG9ydCBh
dXRvIGFuZCBzY3JvbGwuCisgICAgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6
VGFibGUgfHwgc3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZQorICAg
ICAgICB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlUm93R3JvdXAgfHwg
c3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpUYWJsZVJvdykgeworICAgICAgICBpZiAo
c3R5bGUub3ZlcmZsb3dYKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUgJiYgc3R5bGUub3ZlcmZsb3dY
KCkgIT0gT3ZlcmZsb3c6OkhpZGRlbikKKyAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WChP
dmVyZmxvdzo6VmlzaWJsZSk7CisgICAgICAgIGlmIChzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVy
Zmxvdzo6VmlzaWJsZSAmJiBzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVyZmxvdzo6SGlkZGVuKQor
ICAgICAgICAgICAgc3R5bGUuc2V0T3ZlcmZsb3dZKE92ZXJmbG93OjpWaXNpYmxlKTsKKyAgICB9
CisKKyAgICAvLyBNZW51bGlzdHMgc2hvdWxkIGhhdmUgdmlzaWJsZSBvdmVyZmxvdworICAgIGlm
IChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7CisgICAgICAgIHN0eWxlLnNl
dE92ZXJmbG93WChPdmVyZmxvdzo6VmlzaWJsZSk7CisgICAgICAgIHN0eWxlLnNldE92ZXJmbG93
WShPdmVyZmxvdzo6VmlzaWJsZSk7CisgICAgfQorCisjaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9M
TElOR19UT1VDSCkKKyAgICAvLyBUb3VjaCBvdmVyZmxvdyBzY3JvbGxpbmcgY3JlYXRlcyBhIHN0
YWNraW5nIGNvbnRleHQuCisgICAgaWYgKHN0eWxlLmhhc0F1dG9aSW5kZXgoKSAmJiBzdHlsZS51
c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgJiYgKGlzU2Nyb2xsYWJsZU92ZXJmbG93KHN0eWxl
Lm92ZXJmbG93WCgpKSB8fCBpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS5vdmVyZmxvd1koKSkp
KQorICAgICAgICBzdHlsZS5zZXRaSW5kZXgoMCk7CisjZW5kaWYKKworICAgIC8vIEN1bGwgb3V0
IGFueSB1c2VsZXNzIGxheWVycyBhbmQgYWxzbyByZXBlYXQgcGF0dGVybnMgaW50byBhZGRpdGlv
bmFsIGxheWVycy4KKyAgICBzdHlsZS5hZGp1c3RCYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgc3R5
bGUuYWRqdXN0TWFza0xheWVycygpOworCisgICAgLy8gRG8gdGhlIHNhbWUgZm9yIGFuaW1hdGlv
bnMgYW5kIHRyYW5zaXRpb25zLgorICAgIHN0eWxlLmFkanVzdEFuaW1hdGlvbnMoKTsKKyAgICBz
dHlsZS5hZGp1c3RUcmFuc2l0aW9ucygpOworCisgICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMg
bWFyZ2lucyBnZXQgYWRkZWQgdG8gY29udHJvbHMgYmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0
ZWQgdGhlIHN0eWxlLCBzaW5jZSB0aGUgdGhlbWUgd2lsbAorICAgIC8vIGFsdGVyIGZvbnRzIGFu
ZCBoZWlnaHRzL3dpZHRocy4KKyAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obV9l
bGVtZW50KSAmJiBzdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSA+PSAxMSkgeworICAgICAg
ICAvLyBEb24ndCBhcHBseSBpbnRyaW5zaWMgbWFyZ2lucyB0byBpbWFnZSBidXR0b25zLiBUaGUg
ZGVzaWduZXIga25vd3MgaG93IGJpZyB0aGUgaW1hZ2VzIGFyZSwKKyAgICAgICAgLy8gc28gd2Ug
aGF2ZSB0byB0cmVhdCBhbGwgaW1hZ2UgYnV0dG9ucyBhcyB0aG91Z2ggdGhleSB3ZXJlIGV4cGxp
Y2l0bHkgc2l6ZWQuCisgICAgICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKm1fZWxlbWVu
dCkgfHwgIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2VsZW1lbnQpLmlzSW1hZ2VCdXR0
b24oKSkKKyAgICAgICAgICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOworICAgIH0KKwor
ICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBz
dHlsZS4KKyAgICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgpKQorICAgICAgICBSZW5kZXJUaGVt
ZTo6c2luZ2xldG9uKCkuYWRqdXN0U3R5bGUoc3R5bGUsIG1fZWxlbWVudCwgdXNlckFnZW50QXBw
ZWFyYW5jZVN0eWxlKTsKKworICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVkbyBz
dHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCisgICAgaWYgKHN0eWxlLmhhc1BzZXVkb1N0
eWxlKFBzZXVkb0lkOjpGaXJzdExldHRlcikpCisgICAgICAgIHN0eWxlLnNldFVuaXF1ZSgpOwor
CisgICAgLy8gRklYTUU6IHdoZW4gZHJvcHBpbmcgdGhlIC13ZWJraXQgcHJlZml4IG9uIHRyYW5z
Zm9ybS1zdHlsZSwgd2Ugc2hvdWxkIGFsc28gaGF2ZSBvcGFjaXR5IDwgMSBjYXVzZSBmbGF0dGVu
aW5nLgorICAgIGlmIChzdHlsZS5wcmVzZXJ2ZXMzRCgpICYmIChzdHlsZS5vdmVyZmxvd1goKSAh
PSBPdmVyZmxvdzo6VmlzaWJsZQorICAgICAgICB8fCBzdHlsZS5vdmVyZmxvd1koKSAhPSBPdmVy
Zmxvdzo6VmlzaWJsZQorICAgICAgICB8fCBzdHlsZS5oYXNDbGlwKCkKKyAgICAgICAgfHwgc3R5
bGUuY2xpcFBhdGgoKQorICAgICAgICB8fCBzdHlsZS5oYXNGaWx0ZXIoKQorI2lmIEVOQUJMRShG
SUxURVJTX0xFVkVMXzIpCisgICAgICAgIHx8IHN0eWxlLmhhc0JhY2tkcm9wRmlsdGVyKCkKKyNl
bmRpZgorICAgICAgICB8fCBzdHlsZS5oYXNCbGVuZE1vZGUoKSkpCisgICAgICAgIHN0eWxlLnNl
dFRyYW5zZm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzRDo6RmxhdCk7CisKKyAgICBpZiAoaXM8
U1ZHRWxlbWVudD4obV9lbGVtZW50KSkKKyAgICAgICAgYWRqdXN0U1ZHRWxlbWVudFN0eWxlKHN0
eWxlLCBkb3duY2FzdDxTVkdFbGVtZW50PigqbV9lbGVtZW50KSk7CisKKyAgICAvLyBJZiB0aGUg
aW5oZXJpdGVkIHZhbHVlIG9mIGp1c3RpZnktaXRlbXMgaW5jbHVkZXMgdGhlICdsZWdhY3knIGtl
eXdvcmQgKHBsdXMgJ2xlZnQnLCAncmlnaHQnIG9yCisgICAgLy8gJ2NlbnRlcicpLCAnbGVnYWN5
JyBjb21wdXRlcyB0byB0aGUgdGhlIGluaGVyaXRlZCB2YWx1ZS4gT3RoZXJ3aXNlLCAnYXV0bycg
Y29tcHV0ZXMgdG8gJ25vcm1hbCcuCisgICAgaWYgKG1fcGFyZW50Qm94U3R5bGUuanVzdGlmeUl0
ZW1zKCkucG9zaXRpb25UeXBlKCkgPT0gSXRlbVBvc2l0aW9uVHlwZTo6TGVnYWN5ICYmIHN0eWxl
Lmp1c3RpZnlJdGVtcygpLnBvc2l0aW9uKCkgPT0gSXRlbVBvc2l0aW9uOjpMZWdhY3kpCisgICAg
ICAgIHN0eWxlLnNldEp1c3RpZnlJdGVtcyhtX3BhcmVudEJveFN0eWxlLmp1c3RpZnlJdGVtcygp
KTsKKworI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKyAgICBzdHlsZS5zZXRFZmZlY3RpdmVU
b3VjaEFjdGlvbnMoY29tcHV0ZUVmZmVjdGl2ZVRvdWNoQWN0aW9ucyhzdHlsZSwgbV9wYXJlbnRT
dHlsZS5lZmZlY3RpdmVUb3VjaEFjdGlvbnMoKSkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVEVY
VF9BVVRPU0laSU5HKQorICAgIGlmIChtX2VsZW1lbnQpCisgICAgICAgIGFkanVzdEZvclRleHRB
dXRvc2l6aW5nKHN0eWxlLCAqbV9lbGVtZW50KTsKKyNlbmRpZgorCisgICAgYWRqdXN0Rm9yU2l0
ZVNwZWNpZmljUXVpcmtzKHN0eWxlKTsKK30KKworc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlz
cGxheU5vbmVGb3JEaXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAg
ICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtaHRtbAor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9
IFtdIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdM
aXN0W10gPSB7CisgICAgICAgICAgICAmYnJUYWcuZ2V0KCksCisgICAgICAgICAgICAmd2JyVGFn
LmdldCgpLAorICAgICAgICAgICAgJm1ldGVyVGFnLmdldCgpLAorICAgICAgICAgICAgJmFwcGxl
dFRhZy5nZXQoKSwKKyAgICAgICAgICAgICZwcm9ncmVzc1RhZy5nZXQoKSwKKyAgICAgICAgICAg
ICZjYW52YXNUYWcuZ2V0KCksCisgICAgICAgICAgICAmZW1iZWRUYWcuZ2V0KCksCisgICAgICAg
ICAgICAmb2JqZWN0VGFnLmdldCgpLAorICAgICAgICAgICAgJmF1ZGlvVGFnLmdldCgpLAorICAg
ICAgICAgICAgJmlmcmFtZVRhZy5nZXQoKSwKKyAgICAgICAgICAgICZpbWdUYWcuZ2V0KCksCisg
ICAgICAgICAgICAmdmlkZW9UYWcuZ2V0KCksCisgICAgICAgICAgICAmZnJhbWVUYWcuZ2V0KCks
CisgICAgICAgICAgICAmZnJhbWVzZXRUYWcuZ2V0KCksCisgICAgICAgICAgICAmaW5wdXRUYWcu
Z2V0KCksCisgICAgICAgICAgICAmdGV4dGFyZWFUYWcuZ2V0KCksCisgICAgICAgICAgICAmc2Vs
ZWN0VGFnLmdldCgpLAorICAgICAgICB9OworICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNl
dDsKKyAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkKKyAgICAgICAgICAgIHNldC5h
ZGQobmFtZS0+bG9jYWxOYW1lKCkpOworICAgICAgICByZXR1cm4gc2V0OworICAgIH0oKTsKKwor
ICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxheS0zLyN1bmJveC1zdmcK
KyAgICAvLyBGSVhNRTogPGc+LCA8dXNlPiBhbmQgPHRzcGFuPiBoYXZlIHNwZWNpYWwgKD8pIGJl
aGF2aW9yIGZvciBkaXNwbGF5OmNvbnRlbnRzIGluIHRoZSBjdXJyZW50IGRyYWZ0IHNwZWMuCisg
ICAgaWYgKGlzPFNWR0VsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNp
ZiBFTkFCTEUoTUFUSE1MKQorICAgIC8vIE5vdCBzdXJlIE1hdGhNTCBjb2RlIGNhbiBoYW5kbGUg
aXQuCisgICAgaWYgKGlzPE1hdGhNTEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+
KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRhZ05hbWVzLmdl
dCgpLmNvbnRhaW5zKGVsZW1lbnQubG9jYWxOYW1lKCkpOworfQorCit2b2lkIEFkanVzdGVyOjph
ZGp1c3REaXNwbGF5Q29udGVudHNTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Cit7Cisg
ICAgYm9vbCBkaXNwbGF5Q29udGVudHNFbmFibGVkID0gaXM8SFRNTFNsb3RFbGVtZW50PihtX2Vs
ZW1lbnQpIHx8IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZGlzcGxh
eUNvbnRlbnRzRW5hYmxlZCgpOworICAgIGlmICghZGlzcGxheUNvbnRlbnRzRW5hYmxlZCkgewor
ICAgICAgICBzdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpJbmxpbmUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2VsZW1lbnQpIHsKKyAgICAgICAgaWYgKHN0eWxl
LnN0eWxlVHlwZSgpICE9IFBzZXVkb0lkOjpCZWZvcmUgJiYgc3R5bGUuc3R5bGVUeXBlKCkgIT0g
UHNldWRvSWQ6OkFmdGVyKQorICAgICAgICAgICAgc3R5bGUuc2V0RGlzcGxheShEaXNwbGF5VHlw
ZTo6Tm9uZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9kb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQoKSA9PSBtX2VsZW1lbnQpIHsKKyAgICAgICAgc3R5bGUuc2V0RGlzcGxh
eShEaXNwbGF5VHlwZTo6QmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKCptX2VsZW1lbnQpKQor
ICAgICAgICBzdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpOb25lKTsKK30KKwordm9pZCBB
ZGp1c3Rlcjo6YWRqdXN0U1ZHRWxlbWVudFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
U1ZHRWxlbWVudCYgc3ZnRWxlbWVudCkKK3sKKyAgICAvLyBPbmx5IHRoZSByb290IDxzdmc+IGVs
ZW1lbnQgaW4gYW4gU1ZHIGRvY3VtZW50IGZyYWdtZW50IHRyZWUgaG9ub3JzIGNzcyBwb3NpdGlv
bgorICAgIGF1dG8gaXNQb3NpdGlvbmluZ0FsbG93ZWQgPSBzdmdFbGVtZW50Lmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnN2Z1RhZykgJiYgc3ZnRWxlbWVudC5wYXJlbnROb2RlKCkgJiYgIXN2Z0VsZW1l
bnQucGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhc3ZnRWxlbWVudC5jb3JyZXNwb25k
aW5nRWxlbWVudCgpOworICAgIGlmICghaXNQb3NpdGlvbmluZ0FsbG93ZWQpCisgICAgICAgIHN0
eWxlLnNldFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7CisKKyAgICAv
LyBSZW5kZXJTVkdSb290IGhhbmRsZXMgem9vbWluZyBmb3IgdGhlIHdob2xlIFNWRyBzdWJ0cmVl
LCBzbyBmb3JlaWduT2JqZWN0IGNvbnRlbnQgc2hvdWxkCisgICAgLy8gbm90IGJlIHNjYWxlZCBh
Z2Fpbi4KKyAgICBpZiAoc3ZnRWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb3JlaWduT2Jq
ZWN0VGFnKSkKKyAgICAgICAgc3R5bGUuc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKSk7CisKKyAgICAvLyBTVkcgdGV4dCBsYXlvdXQgY29kZSBleHBlY3RzIHVzIHRv
IGJlIGEgYmxvY2stbGV2ZWwgc3R5bGUgZWxlbWVudC4KKyAgICBpZiAoKHN2Z0VsZW1lbnQuaGFz
VGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykgfHwgc3ZnRWxlbWVudC5oYXNUYWdO
YW1lKFNWR05hbWVzOjp0ZXh0VGFnKSkgJiYgc3R5bGUuaXNEaXNwbGF5SW5saW5lVHlwZSgpKQor
ICAgICAgICBzdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpCbG9jayk7Cit9CisKK3ZvaWQg
QWRqdXN0ZXI6OmFkanVzdEZvclNpdGVTcGVjaWZpY1F1aXJrcyhSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0Cit7CisgICAgaWYgKG1fZG9jdW1lbnQucXVpcmtzKCkubmVlZHNHTWFpbE92ZXJmbG93
U2Nyb2xsUXVpcmsoKSAmJiBtX2VsZW1lbnQpIHsKKyAgICAgICAgLy8gVGhpcyB0dXJucyBzaWRl
YmFyIHNjcm9sbGFibGUgd2l0aG91dCBtb3VzZSBtb3ZlIGV2ZW50LgorICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gcm9sZVZhbHVlKCJuYXZpZ2F0aW9uIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZ
KCkgPT0gT3ZlcmZsb3c6OkhpZGRlbiAmJiBtX2VsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24ocm9sZUF0dHIpID09IHJvbGVWYWx1ZSkKKyAgICAgICAgICAgIHN0eWxlLnNl
dE92ZXJmbG93WShPdmVyZmxvdzo6QXV0byk7CisgICAgfQorICAgIGlmIChtX2RvY3VtZW50LnF1
aXJrcygpLm5lZWRzWW91VHViZU92ZXJmbG93U2Nyb2xsUXVpcmsoKSAmJiBtX2VsZW1lbnQpIHsK
KyAgICAgICAgLy8gVGhpcyB0dXJucyBzaWRlYmFyIHNjcm9sbGFibGUgd2l0aG91dCBob3Zlci4K
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21TdHJpbmc+IGlkVmFsdWUoImd1aWRl
LWlubmVyLWNvbnRlbnQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
ICAgIGlmIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6SGlkZGVuICYmIG1fZWxlbWVu
dC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBpZFZhbHVlKQorICAgICAgICAgICAgc3R5bGUu
c2V0T3ZlcmZsb3dZKE92ZXJmbG93OjpBdXRvKTsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoVEVY
VF9BVVRPU0laSU5HKQorc3RhdGljIGJvb2wgaGFzVGV4dENoaWxkKGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpCit7CisgICAgZm9yIChhdXRvKiBjaGlsZCA9IGVsZW1lbnQuZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoaXM8VGV4
dD4oY2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBBZGp1c3Rlcjo6YWRqdXN0Rm9yVGV4dEF1dG9zaXppbmcoUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZWxlbWVudC5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQuc2V0dGluZ3MoKS50
ZXh0QXV0b3NpemluZ0VuYWJsZWQoKSB8fCAhZG9jdW1lbnQuc2V0dGluZ3MoKS50ZXh0QXV0b3Np
emluZ1VzZXNJZGVtcG90ZW50TW9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBB
dXRvc2l6ZVN0YXR1czo6dXBkYXRlU3RhdHVzKHN0eWxlKTsKKyAgICBpZiAoc3R5bGUudGV4dFNp
emVBZGp1c3QoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQg
aW5pdGlhbFNjYWxlID0gZG9jdW1lbnQucGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT5pbml0aWFs
U2NhbGUoKSA6IDE7CisgICAgYXV0byBhZGp1c3RMaW5lSGVpZ2h0SWZOZWVkZWQgPSBbJl0oYXV0
byBjb21wdXRlZEZvbnRTaXplKSB7CisgICAgICAgIGF1dG8gbGluZUhlaWdodCA9IHN0eWxlLnNw
ZWNpZmllZExpbmVIZWlnaHQoKTsKKyAgICAgICAgY29uc3RleHByIHN0YXRpYyB1bnNpZ25lZCBl
bGlnaWJsZUZvbnRTaXplID0gMTI7CisgICAgICAgIGlmIChjb21wdXRlZEZvbnRTaXplICogaW5p
dGlhbFNjYWxlID49IGVsaWdpYmxlRm9udFNpemUpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY29uc3RleHByIHN0YXRpYyBmbG9hdCBib29zdEZhY3RvciA9IDEuMjU7CisgICAgICAg
IGF1dG8gbWluaW11bUxpbmVIZWlnaHQgPSBib29zdEZhY3RvciAqIGNvbXB1dGVkRm9udFNpemU7
CisgICAgICAgIGlmICghbGluZUhlaWdodC5pc0ZpeGVkKCkgfHwgbGluZUhlaWdodC52YWx1ZSgp
ID49IG1pbmltdW1MaW5lSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChBdXRvc2l6ZVN0YXR1czo6cHJvYmFibHlDb250YWluc0FTbWFsbEZpeGVkTnVtYmVyT2ZMaW5l
cyhzdHlsZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3R5bGUuc2V0TGluZUhl
aWdodCh7IG1pbmltdW1MaW5lSGVpZ2h0LCBGaXhlZCB9KTsKKyAgICB9OworCisgICAgYXV0byBm
b250RGVzY3JpcHRpb24gPSBzdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGluaXRp
YWxDb21wdXRlZEZvbnRTaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpOworICAg
IGF1dG8gc3BlY2lmaWVkRm9udFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgp
OworICAgIGJvb2wgaXNDYW5kaWRhdGUgPSBzdHlsZS5pc0lkZW1wb3RlbnRUZXh0QXV0b3Npemlu
Z0NhbmRpZGF0ZSgpOworICAgIGlmICghaXNDYW5kaWRhdGUgJiYgV1RGOjphcmVFc3NlbnRpYWxs
eUVxdWFsKGluaXRpYWxDb21wdXRlZEZvbnRTaXplLCBzcGVjaWZpZWRGb250U2l6ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYWRqdXN0ZWRGb250U2l6ZSA9IEF1dG9zaXpl
U3RhdHVzOjppZGVtcG90ZW50VGV4dFNpemUoZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUo
KSwgaW5pdGlhbFNjYWxlKTsKKyAgICBpZiAoaXNDYW5kaWRhdGUgJiYgV1RGOjphcmVFc3NlbnRp
YWxseUVxdWFsKGluaXRpYWxDb21wdXRlZEZvbnRTaXplLCBhZGp1c3RlZEZvbnRTaXplKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFoYXNUZXh0Q2hpbGQoZWxlbWVudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoaXNDYW5kaWRhdGUgPyBhZGp1c3RlZEZvbnRTaXplIDogc3BlY2lmaWVkRm9udFNpemUpOwor
ICAgIHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwor
ICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUgY29tcHV0ZWQgbGluZSBoZWlnaHQg
dG8gaXRzIG9yaWdpbmFsIHZhbHVlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGlzIG5v
dAorICAgIC8vIGFuIGlkZW1wb3RlbnQgdGV4dCBhdXRvc2l6aW5nIGNhbmRpZGF0ZTsgb3RoZXJ3
aXNlLCBpZiBhbiBlbGVtZW50IHRoYXQgaXMgYSB0ZXh0IGF1dG9zaXppbmcgY2FuZGlkYXRlIGNv
bnRhaW5zCisgICAgLy8gY2hpbGRyZW4gd2hpY2ggYXJlIG5vdCBhdXRvc2l6ZWQsIHRoZSBub24t
YXV0b3NpemVkIGNvbnRlbnQgd2lsbCBlbmQgdXAgd2l0aCBhIGJvb3N0ZWQgbGluZSBoZWlnaHQu
CisgICAgaWYgKGlzQ2FuZGlkYXRlKQorICAgICAgICBhZGp1c3RMaW5lSGVpZ2h0SWZOZWVkZWQo
YWRqdXN0ZWRGb250U2l6ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjgwNWIwNWQ2ZWJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFbGVtZW50Owor
Y2xhc3MgUmVuZGVyU3R5bGU7CitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU2V0dGluZ3M7CisK
K25hbWVzcGFjZSBTdHlsZSB7CisKK2NsYXNzIEFkanVzdGVyIHsKK3B1YmxpYzoKKyAgICBBZGp1
c3Rlcihjb25zdCBEb2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudEJveFN0eWxlLCBjb25zdCBFbGVtZW50Kik7CisKKyAgICB2
b2lkIGFkanVzdChSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBl
YXJhbmNlU3R5bGUpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgYWRqdXN0U1ZHRWxlbWVudFN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgU1ZHRWxlbWVudCYpOworI2lmIEVOQUJMRShURVhUX0FV
VE9TSVpJTkcpCisgICAgc3RhdGljIGJvb2wgYWRqdXN0Rm9yVGV4dEF1dG9zaXppbmcoUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50Jik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFk
anVzdERpc3BsYXlDb250ZW50c1N0eWxlKFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdm9pZCBh
ZGp1c3RGb3JTaXRlU3BlY2lmaWNRdWlya3MoUmVuZGVyU3R5bGUmKSBjb25zdDsKKworICAgIGNv
bnN0IERvY3VtZW50JiBtX2RvY3VtZW50OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVu
dFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVudEJveFN0eWxlOworICAgIGNv
bnN0IEVsZW1lbnQqIG1fZWxlbWVudDsKK307CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcAppbmRleCAxMWViZTI1ZDAxMy4uMmI5ZmY4NDk5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJTVkdUaXRsZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2lu
Y2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU5Nyw3ICs1
OTgsNyBAQCBPcHRpb25hbDxFbGVtZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50UwogICAgIC8vIElmIHRoZSBlbGVtZW50IGlz
IGluIGEgPHVzZT4gdHJlZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmluaXRpb24gdHJl
ZS4KICAgICBpZiAoYXV0byBzdHlsZUVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmNvcnJlc3Bv
bmRpbmdFbGVtZW50KCkpKSB7CiAgICAgICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gc3R5bGUg
PSBzdHlsZUVsZW1lbnQtPnJlc29sdmVTdHlsZSgmcGFyZW50U3R5bGUpOwotICAgICAgICBTdHls
ZVJlc29sdmVyOjphZGp1c3RTVkdFbGVtZW50U3R5bGUoKnRoaXMsICpzdHlsZS0+cmVuZGVyU3R5
bGUpOworICAgICAgICBTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdFNWR0VsZW1lbnRTdHlsZSgqc3R5
bGUtPnJlbmRlclN0eWxlLCAqdGhpcyk7CiAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>