<?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>221462</bug_id>
          
          <creation_ts>2021-02-05 05:58:59 -0800</creation_ts>
          <short_desc>Pull Mac-only code out of ScrollController</short_desc>
          <delta_ts>2021-02-15 13:48:19 -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>Scrolling</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>
          
          <blocked>221461</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>annulen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1726031</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-02-05 05:58:59 -0800</bug_when>
    <thetext>ScrollController will soon be shared between platforms, so it makes sense to pull out Mac-specific code into its own source file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728544</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-12 05:59:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/74273853&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729119</commentid>
    <comment_count>2</comment_count>
      <attachid>420302</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-02-15 04:30:51 -0800</bug_when>
    <thetext>Created attachment 420302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729121</commentid>
    <comment_count>3</comment_count>
      <attachid>420303</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-02-15 04:32:38 -0800</bug_when>
    <thetext>Created attachment 420303
Diff handling file move

I have also uploaded the git diff which handles file moves and making an easier to read diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729134</commentid>
    <comment_count>4</comment_count>
      <attachid>420309</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-02-15 05:21:49 -0800</bug_when>
    <thetext>Created attachment 420309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729351</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-15 13:48:14 -0800</bug_when>
    <thetext>Committed r272878: &lt;https://commits.webkit.org/r272878&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 420309.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420302</attachid>
            <date>2021-02-15 04:30:51 -0800</date>
            <delta_ts>2021-02-15 05:32:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221462-20210215133048.patch</filename>
            <type>text/plain</type>
            <size>131176</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRlNWY3YmZjZGMwNzky
NWQyZjJkZDA3ZTJlODM0MjQ0NmUyNjk4Mi4uY2JlNWNjMGFhNDRlYTk0YmUwNTIyNGVhODA0MjBi
NjllZmY2YzU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIxLTAyLTE1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBQdWxsIE1hYy1v
bmx5IGNvZGUgb3V0IG9mIFNjcm9sbENvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTQ2MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NzQyNzM4NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAg
ICAgIFNwbGl0IG91dCBNYWMtc3BlY2lmaWMgY29kZSBmcm9tIFNjcm9sbENvbnRyb2xsZXIgYW5k
IHByZXBhcmUgaXQgZm9yIHVzZSBvbgorICAgICAgICBub24tQ29jb2EgcGxhdGZvcm1zLiBUaGlz
IGNvZGUgbXVzdCBiZSBwdWxsZWQgb3V0IHByaW1hcmlseSBiZWNhdXNlIGl0IGlzCisgICAgICAg
IE9iamVjdGl2ZS1DKysgY29kZSBhbmQgc2hvdWxkIG1haW50YWluIHRoZSAubW0gZXh0ZW5zaW9u
LiBUaGUgaWRlYSBoZXJlIGlzIHRvCisgICAgICAgIGlzb2xhdGUgdGhlIGJhc2ljIHBsYXRmb3Jt
LWluZGVwZW5kZW50IHNjcm9sbCBzbmFwcGluZyBjb2RlIGFuZCBncmFkdWFsbHkgbWFrZQorICAg
ICAgICB0aGUgcmVzdCAocmVsYXRlZCB0byBoYW5kbGluZyB3aGVlbCBldmVudHMpIG1vcmUtYW5k
LW1vcmUgcGxhdGZvcm0taW5kZXBlbmRlbnQuCisKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFr
ZTogVXBkYXRlIHNvdXJjZSBsaXN0LgorICAgICAgICAqIFNvdXJjZXMudHh0OiBEaXR0by4KKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbENv
bnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhl
IHBsYXRmb3JtLWluZGVwZW5kZW50IHNjcm9sbCBzbmFwcGluZyBjb2RlIHRoYXQgd2lsbCBiZQor
ICAgICAgICB1c2VkIHRvIGFkZCBpbml0aWFsIHNjcm9sbCBzbmFwIHN1cHBvcnQgdG8gb3RoZXIg
cG9ydHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oLgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1t
LgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cu
Y3BwOiBGaXggdW5pZmllZCBzb3VyY2UgYnVpbGQgaXNzdWUgZXhwb3NlZCBieSB0aGlzCisgICAg
ICAgIGNoYW5nZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbTog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xs
ZXIubW0uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1h
Yy5tbTogRml4IHVuaWZpZWQgc291cmNlIGJ1aWxkIGlzc3VlLgorCiAyMDIxLTAyLTEyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gVXBkYXRlIHRoZSBi
bG9jayBib3gvY29udGFpbmVyIGxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggMjJk
MDQ2NmVlOWY4YjQ1ZjBjZDcyNzRhZmRjYWI4MzQ0ZWI4MzA3MC4uNzZkMGM5MzgwMjUxMzFmNzQ5
ZmE4MWUwOTMxNWU1YjM1NDdjMTc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTM2
OCw2ICszNjgsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9t
YWMvUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1NTTEtleUdl
bmVyYXRvck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQorICAg
IHBsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tCiAgICAgcGxhdGZvcm0vbWFjL1Njcm9s
bFZpZXdNYWMubW0KICAgICBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KICAgICBw
bGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5tbQpAQCAtNTEwLDggKzUx
MSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IHBsYXRmb3JtL2NvY29hL1BsYXRmb3JtVmlldy5oCiAgICAgcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaAogICAgIHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50LmgKLSAgICBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgKLSAg
ICBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCiAgICAgcGxhdGZvcm0v
Y29jb2EvU2VhcmNoUG9wdXBNZW51Q29jb2EuaAogICAgIHBsYXRmb3JtL2NvY29hL1N5c3RlbUJh
dHRlcnkuaAogICAgIHBsYXRmb3JtL2NvY29hL1N5c3RlbVZlcnNpb24uaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCAwNDVjZjI3MDZjMDM2N2U0Y2Y5MGIzMmRkZDc5MTQ2ZDVmYTExZGZmLi42N2ExNGFmZTgz
ZTA0MDg3ZGVmMjU5NmZjMGFkNWM5NmE3NGJlMTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTc3MSw2
ICsxNzcxLDcgQEAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcAogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGlu
YXRvci5jcHAKK3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5jcHAK
IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlLmNwcAogcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVGcmFtZUhvc3RpbmdOb2RlLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCkBAIC0xODM5LDYgKzE4NDAsOCBAQCBw
bGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwCiBwbGF0Zm9ybS9TU0xLZXlHZW5l
cmF0b3IuY3BwCiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25TbW9vdGguY3BwCiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAKK3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCitwbGF0Zm9y
bS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmNwcAog
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNzk3ZjUzMWM4NWY2NjI3ZTQzNTVjNTRkYjViOWNjN2Y1
ODNjMTllYy4uMmYwZmRlZmU5M2FlYzZlZWZjZmU4NzFjZWZlZWM5ZmU0NTgyODc2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0xOTAsNyArMTkwLDYgQEAgcGFnZS9tYWMvUGFnZU1hYy5t
bQogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQogcGFnZS9tYWMvVGV4dElu
ZGljYXRvcldpbmRvdy5tbQogcGFnZS9tYWMvV2hlZWxFdmVudERlbHRhRmlsdGVyTWFjLm1tCi1w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3IuY3BwCiBwYWdlL3Njcm9s
bGluZy9jb2NvYS9TY3JvbGxpbmdTdGF0ZU5vZGUubW0KIHBhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Nj
cm9sbGluZ1RyZWVGaXhlZE5vZGUubW0KIHBhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbFByb3h5Tm9kZS5tbQpAQCAtMjQ5LDggKzI0OCw2IEBAIHBsYXRmb3Jt
L2NvY29hL1BsYXRmb3JtUGFzdGVib2FyZENvY29hLm1tCiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQogcGxhdGZvcm0vY29jb2EvUG93ZXJTb3VyY2VO
b3RpZmllci5tbQogcGxhdGZvcm0vY29jb2EvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2Eu
bW0KLXBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KLXBsYXRmb3JtL2NvY29hL1Nj
cm9sbFNuYXBBbmltYXRvclN0YXRlLm1tCiBwbGF0Zm9ybS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVD
b2NvYS5tbQogcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KIHBsYXRmb3JtL2Nv
Y29hL1N5c3RlbVZlcnNpb24ubW0KQEAgLTUwMiw2ICs0OTksNyBAQCBwbGF0Zm9ybS9tYWMvUHVi
bGljU3VmZml4TWFjLm1tCiBwbGF0Zm9ybS9tYWMvUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLm1t
CiBwbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCiBwbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0gQG5vLXVuaWZ5CitwbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5t
bQogcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJU
aGVtZU1hYy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21hYy9TZXJpYWxpemVkUGxhdGZvcm1EYXRh
Q3VlTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggOGMxNWViNjQ4MDM3MzA1ODA3YjcwM2QwYmRiYWIzZjNiZmE1NzE1Yi4u
MjllMTlhOTE3YjViZTA0YzNjZGYxYmUzYWFlMGZiNGI3ZWRkYWNiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTI2LDcgKzUy
Niw2IEBACiAJCTFBOTI3RkQyMTQxNkExNUIwMDNBODNDOCAvKiBucGFwaS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGQ0YxNDE2QTE1QjAwM0E4
M0M4IC8qIG5wYXBpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMUE5MjdGRDMxNDE2QTE1QjAwM0E4M0M4IC8qIG5wcnVudGltZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGRDAxNDE2QTE1QjAw
M0E4M0M4IC8qIG5wcnVudGltZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTFBOTI3RkQ0MTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyN0ZEMTE0MTZB
MTVCMDAzQTgzQzggLyogbnB0eXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTFBQTg0RjA1MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUE4NEYwMzE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBQUFEREE0MTREQjQwOUYw
MEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERBMjE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJl
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFB
QUFEREU0MTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQURERTIxNERDOEM4RjAwQUY2
NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFCMzNEQTUxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBQjMzREE0MTI1NTFFMzIwMDI0NDU3QSAvKiBJT0tpdC5mcmFtZXdvcmsgKi87IH07CkBAIC0x
OTQxLDYgKzE5NDAsOCBAQAogCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVv
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0
RjIzMTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oICovOyB9OwogCQk1QTU3NEYyOTEz
MURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUE1NzRGMjcxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0Rh
dGEuaCAqLzsgfTsKIAkJNUIzMDY5NUUxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCMzA2
OTVCMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmggKi87IH07CisJCTVCNDY2
NTYzMjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjQ2NjU1RjI1RDE0QzA5MDAwQ0ZFMTQg
LyogU2Nyb2xsQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTVCNDY2NTY0MjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUI0NjY1NjAyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUMyQjFB
RUMyMjM5N0VCQzAwQjkxQ0Y3IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExRjc4RDBCMUMyNTQyMkMwMDI0
NTQ0NiAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gKi87IH07CiAJCTVDNDMwNEIxMTkxQUM5
MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRBRTE5MUFDOTA4MDAwRTJCQzAgLyogRVhU
U2hhZGVyVGV4dHVyZUxPRC5oICovOyB9OwogCQk1QzQzMDRCNjE5MUFFRjQ2MDAwRTJCQzAgLyog
SlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzQzMDRCNDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0
dXJlTE9ELmggKi87IH07CkBAIC01Mjc1LDcgKzUyNzYsNiBAQAogCQlGNDU3NzVDRTI0MTQzN0Q1
MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTc3NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRo
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUY0NjcyOTI4MUUwREU2ODUwMEFDQzNEOCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NjcyOTI1MUUwREU1
QUIwMEFDQzNEOCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDZDNDQ3RTIzNDY1NDU0MDAzOUE3OUQg
LyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2QzQ0N0MyMzQ2NTQ1NDAwMzlBNzlEIC8qIENs
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuaCAqLzsgfTsKLQkJRjQ3ODc1NTQxOTk4M0FG
RjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDc4NzU1MjE5OTgzQUZGMDAyNEEyODcgLyog
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGNDdBMDlEMTIwQTkzQTk3MDAyNDBGQUUgLyogRGlzYWJsZWRB
ZGFwdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ3QTA5Q0YyMEE5MzlGNjAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDdBNUUzRTE5
NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAg
LyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTYzM0QxRkY2RkQ1MDAwODFCM0NDIC8qIFByb21pc2Vk
QXR0YWNobWVudEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0N0E2MzNDMUZGNkZENTAwMDgxQjNDQyAvKiBQcm9taXNlZEF0dGFjaG1lbnRJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY1
OTcsOCArNjU5Nyw2IEBACiAJCTFBOTI3RkNGMTQxNkExNUIwMDNBODNDOCAvKiBucGFwaS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBucGFwaS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQTkyN0ZEMDE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG5wcnVudGltZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQTkyN0ZEMTE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBucHR5cGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBQTg0RjAyMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9s
bGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsQ29u
dHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBODRGMDMxNDNCQTdC
RDAwNTFEMTUzIC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQUFBRERBMTE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGlu
Z1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERFMTE0REM4QzhGMDBBRjY0QjMg
LyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2Nyb2xsaW5nVHJlZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTQ3OSw5ICs5NDc3LDE0IEBACiAJCTVBNTc0RjI2MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90
ZXNEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1b3Rlc0Rh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QTU3NEYyNzEzMURCOTZEMDA0
NzFCODggLyogUXVvdGVzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBR
dW90ZXNEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVBOTE0NjlFOEU5Rjg0
ODVDMzdBMjg3NiAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdHcmFwaGljc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QjFFMEU0MzI1RDE2MjlCMDAyNzIyODEgLyogU2Nyb2xsQ29u
dHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbENvbnRyb2xsZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCMzA2OTVBMThCM0QzNDUwMDk5RDVFOCAvKiBX
ZWJHTERyYXdCdWZmZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkdMRHJhd0J1ZmZlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjMw
Njk1QjE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVCMzA2OTVDMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJz
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0NjY1NUQyNUQxNEMwOTAwMENGRTE0IC8qIFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUI0NjY1NUUyNUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQ29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDY2NTVGMjVEMTRDMDkwMDBDRkUxNCAv
KiBTY3JvbGxDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0NjY1NjAy
NUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCN0FCOUY2MjU2N0RCN0UwMDY1OTJEMCAvKiBTY3JvbGxT
bmFwT2Zmc2V0c0luZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUMwMDE1MjEyNTAwMTEwMDAwOTRBQTkzIC8qIFRleHRDb2RlY1NpbmdsZUJ5dGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDAxNTIzMjUwMDExMDEwMDk0QUE5MyAv
KiBUZXh0Q29kZWNTaW5nbGVCeXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRDb2RlY1NpbmdsZUJ5dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2
NjEzLDggKzE2NjE2LDYgQEAKIAkJRjQ2QzQ0N0QyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBib2Fy
ZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0NkM0NDgwMjM0NjU0N0EwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtUGFzdGVib2FyZERhdGFT
b3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NkM0NDgxMjM0NjU0N0EwMDM5QTc5
RCAvKiBDbGlwYm9hcmRJdGVtUGFzdGVib2FyZERhdGFTb3VyY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBB
bmltYXRvclN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbFNu
YXBBbmltYXRvclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY0Nzg3NTUz
MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlDRjIwQTkzOUY2MDAyNDBGQUUg
LyogRGlzYWJsZWRBZGFwdGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNhYmxlZEFkYXB0YXRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0EwOUQ0MjBBOUREMDQwMDI0
MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc2Fi
bGVkQWRhcHRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBNUUz
QjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjE5NDcsNiArMjE5NDgsNyBAQAogCQkJCUJDNTExNTZEMTJC
MTc0OUMwMEM5Njc1NCAvKiBTY3JvbGxBbmltYXRvck1hYy5tbSAqLywKIAkJCQlCQzhCODUzQzBF
N0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLywKIAkJCQlCQ0VGODY5RTBF
ODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gKi8sCisJCQkJNUIxRTBFNDMy
NUQxNjI5QjAwMjcyMjgxIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTM1MzY3NkEw
OUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gKi8sCiAJCQkJMDc3QUYxNDExOEY0
QjFCQjAwMDFFRDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMuaCAqLywKIAkJCQkw
NzdBRjE0MjE4RjRCMUJCMDAwMUVENjEgLyogU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5t
bSAqLywKQEAgLTI0NjI5LDEwICsyNDYzMSw2IEBACiAJCQkJQ0RDNzQ3MDAyNEJFMjY3OTAwQzE4
NjhCIC8qIFBvd2VyU291cmNlTm90aWZpZXIuaCAqLywKIAkJCQlDREM3NDcwMTI0QkUyNjc5MDBD
MTg2OEIgLyogUG93ZXJTb3VyY2VOb3RpZmllci5tbSAqLywKIAkJCQk0NjVBOEU3ODFDOEEyNENF
MDBFN0QzRTQgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EubW0gKi8sCi0JCQkJMUFB
ODRGMDMxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLywKLQkJCQkxQUE4
NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5tbSAqLywKLQkJCQlGNDc4
NzU1MjE5OTgzQUZGMDAyNEEyODcgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCAqLywKLQkJ
CQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0g
Ki8sCiAJCQkJMEU3MDU4RjMxQkM1Q0NENzAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29h
LmggKi8sCiAJCQkJMEU3MDU4RUQxQkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNv
Y29hLm1tICovLAogCQkJCTFBNEE5NTUxMEI0RURDRkYwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXJD
b2NvYS5tbSAqLywKQEAgLTI3NzA2LDYgKzI3NzA0LDEwIEBACiAJCQkJQkM4Qjg1NEEwRTdDN0Y1
NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJCQkJQkMxNDAyODgwRTgzNjgwODAw
MzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlCQzE0MDI4OTBF
ODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywKKwkJCQk1QjQ2
NjU1RTI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5jcHAgKi8sCisJCQkJNUI0
NjY1NUYyNUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLywKKwkJCQk1QjQ2
NjU1RDI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwICovLAor
CQkJCTVCNDY2NTYwMjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5o
ICovLAogCQkJCTBGNENERUFBMjNEOTFBOEEwMDI1MUIwMiAvKiBTY3JvbGxUeXBlcy5jcHAgKi8s
CiAJCQkJOTNDMDlDODUwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggKi8sCiAJCQkJ
QkMyNDQxQzMwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZpZXcuY3BwICovLApAQCAtMzQ1NTcs
NyArMzQ1NTksNyBAQAogCQkJCUJDOEI4NTNFMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJU
aGVtZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzE0MDYxNDIxNzBCODAwREIzM0JBIC8q
IFNjcm9sbGJhclRoZW1lTW9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDNTc5NUQxREE1QzMw
MTAwNkZBQzg2IC8qIFNjcm9sbEJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQUE4NEYw
NTE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNUI0NjY1NjMyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNjA1QUVEMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJh
aW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGNjJFRTgxNERBMjJBNzAwNDE1NTZDIC8qIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzkxQTk5MTE2Mjc0NkNC
MDAyOTczMzAgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCBpbiBIZWFkZXJzICovLApAQCAt
MzQ1OTUsNyArMzQ1OTcsNyBAQAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGOUM5NyAvKiBTY3Jv
bGxJbnRvVmlld09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzU3OTVEMURBNUMzMDEw
MDZGOUM4NiAvKiBTY3JvbGxMb2dpY2FsUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
QzU3OTVEMURBNUMzMDEwMDZGQUM5NyAvKiBTY3JvbGxPcHRpb25zLmggaW4gSGVhZGVycyAqLywK
LQkJCQlGNDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVCNDY2NTY0MjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ2NzI5MjgxRTBERTY4NTAw
QUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODND
NTc5NUQxREE1QzMwMTAwNkZBQ0E4IC8qIFNjcm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzNlYzZjNDQxZDMxMmY1ODUyYmJkNmYyYjQ5MGUyN2NiNWUzMTNhZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3Bw
CkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIK
KyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIKKworI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisjaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKKyNpbmNsdWRl
ICJTY3JvbGxhYmxlQXJlYS5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
IHx8IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Ny
b2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50JiBj
bGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQ29udHJv
bGxlcjo6dXNlc1Njcm9sbFNuYXAoKSBjb25zdAoreworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCisgICAgcmV0dXJuICEhbV9zY3JvbGxTbmFwU3RhdGU7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKwordm9pZCBT
Y3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFy
ZWEmIHNjcm9sbGFibGVBcmVhKQoreworICAgIGNvbnN0IGF1dG8qIHNuYXBPZmZzZXRJbmZvID0g
c2Nyb2xsYWJsZUFyZWEuc25hcE9mZnNldEluZm8oKTsKKyAgICBpZiAoIXNuYXBPZmZzZXRJbmZv
KSB7CisgICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoKnNuYXBPZmZzZXRJbmZvKTsK
K30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0
IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgc25hcE9mZnNldEluZm8pCit7Cisg
ICAgaWYgKHNuYXBPZmZzZXRJbmZvLmlzRW1wdHkoKSkgeworICAgICAgICBtX3Njcm9sbFNuYXBT
dGF0ZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIHNob3Vs
ZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMgPSAhbV9zY3JvbGxTbmFwU3RhdGU7CisgICAgaWYg
KCFtX3Njcm9sbFNuYXBTdGF0ZSkKKyAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBtYWtlVW5p
cXVlPFNjcm9sbFNuYXBBbmltYXRvclN0YXRlPigpOworCisgICAgbV9zY3JvbGxTbmFwU3RhdGUt
PnNldFNuYXBPZmZzZXRJbmZvKHNuYXBPZmZzZXRJbmZvKTsKKworICAgIGlmIChzaG91bGRDb21w
dXRlQ3VycmVudFNuYXBJbmRpY2VzKQorICAgICAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNl
c0Zvck9mZnNldChyb3VuZGVkSW50UG9pbnQobV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpKTsKKwor
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xs
ZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0YXRlIG5ldyBzdGF0ZTogIiA8PCBW
YWx1ZU9yTnVsbChtX3Njcm9sbFNuYXBTdGF0ZS5nZXQoKSkpOworfQorCit1bnNpZ25lZCBTY3Jv
bGxDb250cm9sbGVyOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhp
cyBheGlzKSBjb25zdAoreworICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZv
ckF4aXMoYXhpcyk7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgdW5zaWduZWQgaW5kZXgpCit7
CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nj
cm9sbFNuYXBTdGF0ZS0+c2V0QWN0aXZlU25hcEluZGV4Rm9yQXhpcyhheGlzLCBpbmRleCk7Cit9
CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4
aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGludCBvZmZzZXQpCit7CisgICAgaWYg
KCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOworICAgIFNjcm9sbFNuYXBBbmltYXRv
clN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3RhdGU7CisKKyAgICBhdXRvIHNuYXBP
ZmZzZXRzID0gc25hcFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhheGlzKTsKKyAgICBpZiAoIXNu
YXBPZmZzZXRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0VW5pdCBjbGFt
cGVkT2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0VW5pdChvZmZzZXQgLyBzY2FsZUZh
Y3RvciksIHNuYXBPZmZzZXRzLmZpcnN0KCkub2Zmc2V0KSwgc25hcE9mZnNldHMubGFzdCgpLm9m
ZnNldCk7CisKKyAgICB1bnNpZ25lZCBhY3RpdmVJbmRleCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0
SW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIGNsYW1wZWRPZmZzZXQsIDApLnNlY29uZDsK
KyAgICBpZiAoYWN0aXZlSW5kZXggPT0gYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhheGlz
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFu
Z2UgPSB0cnVlOworICAgIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywgYWN0
aXZlSW5kZXgpOworfQorCitmbG9hdCBTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0
aW5hdGlvbihTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVzdGluYXRpb25PZmZzZXQsIGZs
b2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpCit7CisgICAgaWYg
KCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm4gZGVzdGluYXRpb25PZmZzZXQ7CisK
KyAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0
YXRlOworICAgIGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlz
KGF4aXMpOworICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZGVz
dGluYXRpb25PZmZzZXQ7CisKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbE9mZnNl
dEluTGF5b3V0VW5pdHM7CisgICAgaWYgKG9yaWdpbmFsT2Zmc2V0Lmhhc1ZhbHVlKCkpCisgICAg
ICAgIG9yaWdpbmFsT2Zmc2V0SW5MYXlvdXRVbml0cyA9IExheW91dFVuaXQoKm9yaWdpbmFsT2Zm
c2V0IC8gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCkpOworICAgIExheW91dFVuaXQgb2Zmc2V0
ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgTGF5
b3V0VW5pdChkZXN0aW5hdGlvbk9mZnNldCAvIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpKSwg
dmVsb2NpdHksIG9yaWdpbmFsT2Zmc2V0SW5MYXlvdXRVbml0cykuZmlyc3Q7CisgICAgcmV0dXJu
IG9mZnNldCAqIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOworfQorCisKK3ZvaWQgU2Nyb2xs
Q29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoU2Nyb2xsT2Zm
c2V0IG9mZnNldCkKK3sKKyAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgb2Zmc2V0LngoKSk7CisgICAgc2V0TmVhcmVzdFNjcm9s
bFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zm
c2V0LnkoKSk7Cit9CisjZW5kaWYKKworLy8gQ3VycmVudGx5LCBvbmx5IE1hYyBzdXBwb3J0cyBt
b21lbnR1bSBzcm9sbGluZy1iYXNlZCBzY3JvbGxzbmFwcGluZyBhbmQgcnViYmVyIGJhbmRpbmcK
Ky8vIHNvIGFsbCBvZiB0aGVzZSBtZXRob2RzIGFyZSBhIG5vb3Agb24gbm9uLU1hYyBwbGF0Zm9y
bXMuCisjaWYgIVBMQVRGT1JNKE1BQykKK1Njcm9sbENvbnRyb2xsZXI6On5TY3JvbGxDb250cm9s
bGVyKCkKK3sKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wQWxsVGltZXJzKCkKK3sK
K30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQorewor
fQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDkyNWZkNDU1ODRjMDExMWM5ZWYwYzI4OTFmN2M3NTE2NjEwZWI3YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaApAQCAtMCww
ICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNC0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKKyNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVj
dEVkZ2VzLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50
VGVzdE1vbml0b3IuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbmNsdWRlICJT
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbFNuYXBPZmZzZXRzSW5m
by5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5b3V0U2l6ZTsK
K2NsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXI7CitjbGFz
cyBTY3JvbGxhYmxlQXJlYTsKK2NsYXNzIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjsKKworY2xhc3Mg
U2Nyb2xsQ29udHJvbGxlclRpbWVyIDogcHVibGljIFJ1bkxvb3A6OlRpbWVyQmFzZSB7CitwdWJs
aWM6CisgICAgU2Nyb2xsQ29udHJvbGxlclRpbWVyKFJ1bkxvb3AmIHJ1bkxvb3AsIEZ1bmN0aW9u
PHZvaWQoKT4mJiBjYWxsYmFjaykKKyAgICAgICAgOiBSdW5Mb29wOjpUaW1lckJhc2UocnVuTG9v
cCkKKyAgICAgICAgLCBtX2NhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGZpcmVkKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fY2FsbGJhY2soKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX2NhbGxiYWNrOworfTsK
KworY2xhc3MgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB+U2Nyb2xsQ29udHJvbGxlckNsaWVudCgpID0gZGVmYXVsdDsKKworcHVibGljOgorICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbENvbnRyb2xsZXJUaW1lcj4gY3JlYXRlVGltZXIo
RnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzVmVydGljYWxT
dHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIEludFNpemUgc3RyZXRjaEFtb3VudCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9v
bCBpc1Bpbm5lZEZvclNjcm9sbERlbHRhKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgUmVjdEVkZ2VzPGJvb2w+IGVkZ2VQaW5uZWRTdGF0ZSgpIGNvbnN0ID0gMDsK
KworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVj
dGlvbikgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IHVzZSBTY3JvbGxDbGFtcGluZyB0byBj
b2xsYXBzZSB0aGVzZSB0byBvbmUuCisgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5
KGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xs
QnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0UnViYmVyQmFuZFNuYXBBbmltYXRpb24oKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcFJ1YmJlcmJhbmRTbmFwQW5pbWF0aW9uKCkgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcnViYmVyQmFuZGluZ1N0YXRlQ2hhbmdlZChib29sKSB7IH0KKwor
ICAgIC8vIElmIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBpcyB3aXRoaW4gdGhlIG92ZXJo
YW5nIGFyZWEsIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZQorICAgIC8vIHRoZSBwYWdlIHRvIHNj
cm9sbCB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4KKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOworI2VuZGlmCisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVmZXJXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25Gb3JSZWFzb24oV2hl
ZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRU
ZXN0TW9uaXRvcjo6RGVmZXJSZWFzb24pIGNvbnN0IHsgLyogRG8gbm90aGluZyAqLyB9CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVdoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkRlZmVycmFsRm9yUmVh
c29uKFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVl
bEV2ZW50VGVzdE1vbml0b3I6OkRlZmVyUmVhc29uKSBjb25zdCB7IC8qIERvIG5vdGhpbmcgKi8g
fQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQg
c2Nyb2xsT2Zmc2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3Jv
bGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZFN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IHBh
Z2VTY2FsZUZhY3RvcigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYWN0aXZl
U2Nyb2xsT2Zmc2V0SW5kZXgoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgdmlydHVhbCBMYXlvdXRTaXplIHNjcm9sbEV4dGVudCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCA9
IDA7CisjZW5kaWYKK307CisKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNjcm9sbENvbnRyb2xsZXIpOworCitwdWJsaWM6CisgICAgZXhwbGljaXQg
U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50Jik7CisgICAgflNjcm9sbENv
bnRyb2xsZXIoKTsKKworICAgIGJvb2wgdXNlc1Njcm9sbFNuYXAoKSBjb25zdDsKKyAgICB2b2lk
IHN0b3BBbGxUaW1lcnMoKTsKKyAgICB2b2lkIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOworCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBQb2lu
dHMoY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+Jik7CisgICAgdm9pZCBz
ZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcywgdW5zaWduZWQp
OworICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoU2Nyb2xsT2Zm
c2V0KTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9CisgICAgdm9pZCBzZXRT
Y3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0ZSkgeyBtX2FjdGl2ZVNjcm9sbFNuYXBJ
bmRleERpZENoYW5nZSA9IHN0YXRlOyB9CisgICAgdW5zaWduZWQgYWN0aXZlU2Nyb2xsU25hcElu
ZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU2Nyb2xs
U25hcFN0YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7CisgICAgdm9pZCB1cGRhdGVHZXN0dXJl
SW5Qcm9ncmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIGZsb2F0IGFk
anVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVzdGluYXRpb25P
ZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGhhbmRs
ZWQuCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
OworCisgICAgZW51bSBjbGFzcyBXaGVlbEF4aXNCaWFzIHsgTm9uZSwgVmVydGljYWwgfTsKKyAg
ICBzdGF0aWMgT3B0aW9uYWw8U2Nyb2xsRGlyZWN0aW9uPiBkaXJlY3Rpb25Gcm9tRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgT3B0aW9uYWw8U2Nyb2xsRXZlbnRBeGlzPiwgV2hlZWxB
eGlzQmlhcyA9IFdoZWVsQXhpc0JpYXM6Ok5vbmUpOworICAgIHN0YXRpYyBGbG9hdFNpemUgd2hl
ZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7
CisKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdDsKKyAgICBib29sIGlz
VXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdDsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGhhbmRsZWQuCisgICAgYm9vbCBwcm9jZXNzV2hl
ZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisjZW5kaWYK
KworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICB2b2lkIHN0b3BSdWJiZXJiYW5kaW5n
KCk7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Q7CisgICAgUmVjdEVk
Z2VzPGJvb2w+IHJ1YmJlckJhbmRpbmdFZGdlcygpIGNvbnN0IHsgcmV0dXJuIG1fcnViYmVyQmFu
ZGluZ0VkZ2VzOyB9CisjZW5kaWYKKyNlbmRpZgorCitwcml2YXRlOgorI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCisgICAgdm9pZCBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0Fu
ZE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGludCk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1B
QykKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZvaWQgc2Nyb2xsU25hcFRpbWVy
RmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKCk7CisgICAgdm9pZCBzdG9w
U2Nyb2xsU25hcFRpbWVyKCk7CisgICAgYm9vbCBzaG91bGRPdmVycmlkZU1vbWVudHVtU2Nyb2xs
aW5nKCkgY29uc3Q7CisgICAgdm9pZCBzdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyRmlyZWQo
KTsKKyAgICB2b2lkIHNjaGVkdWxlU3RhdGVsZXNzU2Nyb2xsU25hcCgpOworICAgIHZvaWQgc3Rh
cnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCk7
CisgICAgdm9pZCBzdG9wRGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3Jv
bGxTbmFwcGluZygpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAg
dm9pZCBzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKKyAgICB2b2lkIHN0b3BTbmFwUnViYmVy
YmFuZFRpbWVyKCk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFuZCgpOworICAgIHZvaWQgc25hcFJ1
YmJlckJhbmRUaW1lckZpcmVkKCk7CisgICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9u
dGFsRGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OworICAgIGJvb2wg
c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgY29uc3Q7CisgICAg
Ym9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOworICAgIHZvaWQgdXBkYXRlUnViYmVyQmFuZGluZ0Vk
Z2VzKEludFNpemUgY2xpZW50U3RyZXRjaCk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgU2Nyb2xs
Q29udHJvbGxlckNsaWVudCYgbV9jbGllbnQ7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+IG1fc2Nyb2xsU25h
cFN0YXRlOworICAgIGJvb2wgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgeyBmYWxz
ZSB9OworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgV2FsbFRpbWUgbV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YTsKKyAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7CisgICAgRmxvYXRTaXplIG1f
bW9tZW50dW1WZWxvY2l0eTsKKworICAgIGJvb2wgbV9pblNjcm9sbEdlc3R1cmUgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1J1YmJl
ckJhbmRpbmcgeyBmYWxzZSB9OworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBG
bG9hdFNpemUgbV9kcmFnRW5kZWRTY3JvbGxpbmdWZWxvY2l0eTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbENvbnRyb2xsZXJUaW1lcj4gbV9zY3JvbGxTbmFw
VGltZXI7CisjZW5kaWYKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAvLyBSdWJi
ZXIgYmFuZCBzdGF0ZS4KKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOworICAgIEZsb2F0
U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKKyAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7CisgICAg
UmVjdEVkZ2VzPGJvb2w+IG1fcnViYmVyQmFuZGluZ0VkZ2VzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IG1fc25hcFJ1YmJlcmJhbmRUaW1lcjsKKyNlbmRpZgor
CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIG1fdGltZXJzV2VyZVN0b3BwZWQgeyBmYWxz
ZSB9OworI2VuZGlmCisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShSVUJCRVJfQkFORElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDY4ZDUwZGRl
NzZlODkwOTZjZDNlNThmM2ZjMzkxZmZjNjcxNzdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwCkBAIC0wLDAgKzEs
MTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNjcm9sbFNuYXBBbmltYXRv
clN0YXRlOjp0cmFuc2l0aW9uVG9TbmFwQW5pbWF0aW9uU3RhdGUoY29uc3QgRmxvYXRTaXplJiBj
b250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2Fs
ZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCkKK3sKKyAgICBzZXR1cEFuaW1hdGlv
bkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcsIGNvbnRlbnRTaXplLCB2aWV3cG9y
dFNpemUsIHBhZ2VTY2FsZSwgaW5pdGlhbE9mZnNldCwgeyB9LCB7IH0pOworfQorCit2b2lkIFNj
cm9sbFNuYXBBbmltYXRvclN0YXRlOjp0cmFuc2l0aW9uVG9HbGlkZUFuaW1hdGlvblN0YXRlKGNv
bnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXpl
LCBmbG9hdCBwYWdlU2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxPZmZzZXQsIGNvbnN0
IEZsb2F0U2l6ZSYgaW5pdGlhbFZlbG9jaXR5LCBjb25zdCBGbG9hdFNpemUmIGluaXRpYWxEZWx0
YSkKK3sKKyAgICBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGlu
ZywgY29udGVudFNpemUsIHZpZXdwb3J0U2l6ZSwgcGFnZVNjYWxlLCBpbml0aWFsT2Zmc2V0LCBp
bml0aWFsVmVsb2NpdHksIGluaXRpYWxEZWx0YSk7Cit9CisKK3ZvaWQgU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGU6OnNldHVwQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlIHN0YXRlLCBj
b25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6
ZSwgZmxvYXQgcGFnZVNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsT2Zmc2V0LCBjb25z
dCBGbG9hdFNpemUmIGluaXRpYWxWZWxvY2l0eSwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsRGVs
dGEpCit7CisgICAgQVNTRVJUKHN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcgfHwg
c3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKTsKKyAgICBpZiAobV9jdXJyZW50U3Rh
dGUgPT0gc3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9tZW50dW1DYWxjdWxhdG9y
ID0gU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yOjpjcmVhdGUodmlld3BvcnRTaXplLCBjb250
ZW50U2l6ZSwgaW5pdGlhbE9mZnNldCwgaW5pdGlhbERlbHRhLCBpbml0aWFsVmVsb2NpdHkpOwor
ICAgIGF1dG8gcHJlZGljdGVkU2Nyb2xsVGFyZ2V0ID0gbV9tb21lbnR1bUNhbGN1bGF0b3ItPnBy
ZWRpY3RlZERlc3RpbmF0aW9uT2Zmc2V0KCk7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WCA9IHRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY29u
dGVudFNpemUud2lkdGgoKSAtIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCBpbml0aWFsT2Zmc2V0Lngo
KSwgcHJlZGljdGVkU2Nyb2xsVGFyZ2V0LndpZHRoKCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRh
LndpZHRoKCksIG1fYWN0aXZlU25hcEluZGV4WCk7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WSA9
IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNv
bnRlbnRTaXplLmhlaWdodCgpIC0gdmlld3BvcnRTaXplLmhlaWdodCgpLCBpbml0aWFsT2Zmc2V0
LnkoKSwgcHJlZGljdGVkU2Nyb2xsVGFyZ2V0LmhlaWdodCgpLCBwYWdlU2NhbGUsIGluaXRpYWxE
ZWx0YS5oZWlnaHQoKSwgbV9hY3RpdmVTbmFwSW5kZXhZKTsKKyAgICBtX21vbWVudHVtQ2FsY3Vs
YXRvci0+c2V0UmV0YXJnZXRlZFNjcm9sbE9mZnNldCh7IHRhcmdldE9mZnNldFgsIHRhcmdldE9m
ZnNldFkgfSk7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBt
X2N1cnJlbnRTdGF0ZSA9IHN0YXRlOworfQorCit2b2lkIFNjcm9sbFNuYXBBbmltYXRvclN0YXRl
Ojp0cmFuc2l0aW9uVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZSgpCit7CisgICAgdGVhcmRvd25Bbmlt
YXRpb25Gb3JTdGF0ZShTY3JvbGxTbmFwU3RhdGU6OlVzZXJJbnRlcmFjdGlvbik7Cit9CisKK3Zv
aWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRyYW5zaXRpb25Ub0Rlc3RpbmF0aW9uUmVhY2hl
ZFN0YXRlKCkKK3sKKyAgICB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0
ZTo6RGVzdGluYXRpb25SZWFjaGVkKTsKK30KKwordm9pZCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZTo6dGVhcmRvd25BbmltYXRpb25Gb3JTdGF0ZShTY3JvbGxTbmFwU3RhdGUgc3RhdGUpCit7Cisg
ICAgQVNTRVJUKHN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9uIHx8IHN0
YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRpb25SZWFjaGVkKTsKKyAgICBpZiAobV9j
dXJyZW50U3RhdGUgPT0gc3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW9tZW50dW1D
YWxjdWxhdG9yID0gbnVsbHB0cjsKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWUoKTsK
KyAgICBtX2N1cnJlbnRTdGF0ZSA9IHN0YXRlOworfQorCitGbG9hdFBvaW50IFNjcm9sbFNuYXBB
bmltYXRvclN0YXRlOjpjdXJyZW50QW5pbWF0ZWRTY3JvbGxPZmZzZXQoYm9vbCYgaXNBbmltYXRp
b25Db21wbGV0ZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fbW9tZW50dW1DYWxjdWxhdG9yKSB7Cisg
ICAgICAgIGlzQW5pbWF0aW9uQ29tcGxldGUgPSB0cnVlOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIFNlY29uZHMgZWxhcHNlZFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKSAt
IG1fc3RhcnRUaW1lOworICAgIGlzQW5pbWF0aW9uQ29tcGxldGUgPSBlbGFwc2VkVGltZSA+PSBt
X21vbWVudHVtQ2FsY3VsYXRvci0+YW5pbWF0aW9uRHVyYXRpb24oKTsKKyAgICByZXR1cm4gbV9t
b21lbnR1bUNhbGN1bGF0b3ItPnNjcm9sbE9mZnNldEFmdGVyRWxhcHNlZFRpbWUoZWxhcHNlZFRp
bWUpOworfQorCitmbG9hdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6dGFyZ2V0T2Zmc2V0Rm9y
U3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IG1heFNjcm9sbE9mZnNldCwg
ZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRpY3RlZE9mZnNldCwgZmxvYXQgcGFnZVNjYWxl
LCBmbG9hdCBpbml0aWFsRGVsdGEsIHVuc2lnbmVkJiBvdXRBY3RpdmVTbmFwSW5kZXgpIGNvbnN0
Cit7CisgICAgTGF5b3V0VW5pdCBwcm9wb3NlZE9mZnNldDsKKyAgICBzdGQ6OnRpZShwcm9wb3Nl
ZE9mZnNldCwgb3V0QWN0aXZlU25hcEluZGV4KSA9IG1fc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RT
bmFwT2Zmc2V0KGF4aXMsIExheW91dFVuaXQocHJlZGljdGVkT2Zmc2V0IC8gcGFnZVNjYWxlKSwg
aW5pdGlhbERlbHRhKTsKKyAgICBpZiAob3V0QWN0aXZlU25hcEluZGV4ICE9IGludmFsaWRTbmFw
T2Zmc2V0SW5kZXgpCisgICAgICAgIHJldHVybiBwYWdlU2NhbGUgKiBwcm9wb3NlZE9mZnNldDsK
KyAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RhcnRPZmZzZXQsIDAsIG1heFNjcm9sbE9mZnNl
dCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNj
cm9sbFNuYXBBbmltYXRvclN0YXRlJiBzdGF0ZSkKK3sKKyAgICB0cyA8PCAiU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUiOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHgiLCBzdGF0
ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMgeSIsIHN0YXRlLnNuYXBPZmZzZXRzRm9yQXhp
cyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisgICAgaWYgKCFzdGF0ZS5zbmFwT2Zmc2V0
UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpLmlzRW1wdHkoKSkKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMgcmFuZ2VzIHgiLCBzdGF0ZS5zbmFw
T2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKKyAgICBp
ZiAoIXN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwpLmlzRW1wdHkoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMgcmFu
Z2VzIHkiLCBzdGF0ZS5zbmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZl
cnRpY2FsKSk7CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImFjdGl2ZSBzbmFwIGluZGV4IHgiLCBz
dGF0ZS5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWN0aXZlIHNuYXAgaW5kZXggeSIsIHN0YXRlLmFjdGl2
ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOworCisgICAgcmV0
dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDU1NfU0NS
T0xMX1NOQVAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBB
bmltYXRvclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZWIxYWMzYjU5YWFlZTQ0YzYzOWI0YWZmMGMyNDI2OTU4
MjE0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKKyNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiTGF5b3V0UG9p
bnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxT
bmFwT2Zmc2V0c0luZm8uaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIlNj
cm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1l
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFNjcm9sbFNuYXBTdGF0ZSB7CisgICAgU25hcHBpbmcs
CisgICAgR2xpZGluZywKKyAgICBEZXN0aW5hdGlvblJlYWNoZWQsCisgICAgVXNlckludGVyYWN0
aW9uCit9OworCitjbGFzcyBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgY29uc3QgVmVjdG9yPFNuYXBPZmZzZXQ8TGF5
b3V0VW5pdD4+JiBzbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwgPyBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMgOiBtX3NuYXBPZmZz
ZXRzSW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxT
Y3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNj
cm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF4aXMgPT0g
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMgOiBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRS
YW5nZXM7CisgICAgfQorCisgICAgY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVu
aXQ+JiBzbmFwT2Zmc2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvOyB9
CisgICAgdm9pZCBzZXRTbmFwT2Zmc2V0SW5mbyhjb25zdCBTY3JvbGxTbmFwT2Zmc2V0c0luZm88
TGF5b3V0VW5pdD4mIG5ld0luZm8pIHsgbV9zbmFwT2Zmc2V0c0luZm8gPSBuZXdJbmZvOyB9CisK
KyAgICB2b2lkIHNldFNuYXBPZmZzZXRzQW5kUG9zaXRpb25SYW5nZXNGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRVbml0Pj4mIHNuYXBP
ZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFw
T2Zmc2V0UmFuZ2VzKQorICAgIHsKKyAgICAgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsKSB7CisgICAgICAgICAgICBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFs
U25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKKyAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZv
Lmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzID0gc25hcE9mZnNldFJhbmdlczsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNl
dHMgPSBzbmFwT2Zmc2V0czsKKyAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2Fs
U25hcE9mZnNldFJhbmdlcyA9IHNuYXBPZmZzZXRSYW5nZXM7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBTY3JvbGxTbmFwU3RhdGUgY3VycmVudFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50U3RhdGU7IH0KKworICAgIHVuc2lnbmVkIGFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xs
RXZlbnRBeGlzIGF4aXMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX2FjdGl2ZVNuYXBJbmRleFggOiBtX2FjdGl2ZVNu
YXBJbmRleFk7CisgICAgfQorCisgICAgdm9pZCBzZXRBY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNj
cm9sbEV2ZW50QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChh
eGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKKyAgICAgICAgICAgIG1fYWN0aXZl
U25hcEluZGV4WCA9IGluZGV4OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2FjdGl2ZVNu
YXBJbmRleFkgPSBpbmRleDsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IGN1cnJlbnRBbmltYXRl
ZFNjcm9sbE9mZnNldChib29sJiBpc0FuaW1hdGlvbkNvbXBsZXRlKSBjb25zdDsKKworICAgIC8v
IFN0YXRlIHRyYW5zaXRpb24gaGVscGVycy4KKyAgICB2b2lkIHRyYW5zaXRpb25Ub1NuYXBBbmlt
YXRpb25TdGF0ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplLCBjb25zdCBGbG9hdFNpemUm
IHZpZXdwb3J0U2l6ZSwgZmxvYXQgcGFnZVNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBpbml0aWFs
T2Zmc2V0KTsKKyAgICB2b2lkIHRyYW5zaXRpb25Ub0dsaWRlQW5pbWF0aW9uU3RhdGUoY29uc3Qg
RmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZs
b2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxv
YXRTaXplJiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsK
KyAgICB2b2lkIHRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlvblN0YXRlKCk7CisgICAgdm9pZCB0
cmFuc2l0aW9uVG9EZXN0aW5hdGlvblJlYWNoZWRTdGF0ZSgpOworCitwcml2YXRlOgorICAgIGZs
b2F0IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgbWF4
U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBm
bG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNu
YXBJbmRleCkgY29uc3Q7CisgICAgdm9pZCB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9s
bFNuYXBTdGF0ZSk7CisgICAgdm9pZCBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBT
dGF0ZSwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3
cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNl
dCwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5p
dGlhbERlbHRhKTsKKworICAgIFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJlbnRTdGF0ZSB7IFNjcm9s
bFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9uIH07CisKKyAgICBTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm88TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0c0luZm87CisKKyAgICB1bnNpZ25lZCBtX2FjdGl2
ZVNuYXBJbmRleFggeyAwIH07CisgICAgdW5zaWduZWQgbV9hY3RpdmVTbmFwSW5kZXhZIHsgMCB9
OworCisgICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yPiBtX21vbWVudHVtQ2FsY3VsYXRvcjsKK307CisK
K1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5NDRiOTgwNmQ0Njg2MjQwM2IxOTA0N2Y2ZmZkN2RhOGE0MDhlODdjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykgfHwgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLQotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJSZWN0RWRnZXMuaCIK
LSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0TW9uaXRv
ci5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2luY2x1ZGUgIlNjcm9sbFNuYXBB
bmltYXRvclN0YXRlLmgiCi0jaW5jbHVkZSAiU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgiCi0jZW5k
aWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMYXlvdXRTaXplOwotY2xhc3MgUGxh
dGZvcm1XaGVlbEV2ZW50OwotY2xhc3MgU2Nyb2xsQ29udHJvbGxlcjsKLWNsYXNzIFNjcm9sbGFi
bGVBcmVhOwotY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9yOwotCi1jbGFzcyBTY3JvbGxDb250
cm9sbGVyVGltZXIgOiBwdWJsaWMgUnVuTG9vcDo6VGltZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBT
Y3JvbGxDb250cm9sbGVyVGltZXIoUnVuTG9vcCYgcnVuTG9vcCwgRnVuY3Rpb248dm9pZCgpPiYm
IGNhbGxiYWNrKQotICAgICAgICA6IFJ1bkxvb3A6OlRpbWVyQmFzZShydW5Mb29wKQotICAgICAg
ICAsIG1fY2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpCi0gICAgewotICAgIH0KLQotICAgIHZv
aWQgZmlyZWQoKSBmaW5hbAotICAgIHsKLSAgICAgICAgbV9jYWxsYmFjaygpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fY2FsbGJhY2s7Ci19OwotCi1jbGFzcyBT
Y3JvbGxDb250cm9sbGVyQ2xpZW50IHsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5TY3JvbGxD
b250cm9sbGVyQ2xpZW50KCkgPSBkZWZhdWx0OwotCi1wdWJsaWM6Ci0gICAgdmlydHVhbCBzdGQ6
OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBjcmVhdGVUaW1lcihGdW5jdGlvbjx2
b2lkKCk+JiYpID0gMDsKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmco
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW50U2l6
ZSBzdHJldGNoQW1vdW50KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzUGlubmVk
Rm9yU2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJikgY29uc3QgPSAwOwotCi0gICAgdmlydHVh
bCBSZWN0RWRnZXM8Ym9vbD4gZWRnZVBpbm5lZFN0YXRlKCkgY29uc3QgPSAwOwotCi0gICAgdmly
dHVhbCBib29sIGFsbG93c0hvcml6b250YWxTY3JvbGxpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBjb25z
dCA9IDA7Ci0KLSAgICAvLyBGSVhNRTogdXNlIFNjcm9sbENsYW1waW5nIHRvIGNvbGxhcHNlIHRo
ZXNlIHRvIG9uZS4KLSAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxv
YXRTaXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRD
b250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0UnViYmVyQmFuZFNuYXBBbmltYXRpb24oKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkU3RvcFJ1YmJlcmJhbmRTbmFwQW5pbWF0aW9uKCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcnViYmVyQmFuZGluZ1N0YXRlQ2hhbmdlZChib29sKSB7IH0KLQotICAgIC8v
IElmIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBpcyB3aXRoaW4gdGhlIG92ZXJoYW5nIGFy
ZWEsIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZQotICAgIC8vIHRoZSBwYWdlIHRvIHNjcm9sbCB0
byB0aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Ny
b2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0
dWFsIHZvaWQgZGVmZXJXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25Gb3JSZWFzb24oV2hlZWxFdmVu
dFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0TW9u
aXRvcjo6RGVmZXJSZWFzb24pIGNvbnN0IHsgLyogRG8gbm90aGluZyAqLyB9Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZVdoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkRlZmVycmFsRm9yUmVhc29uKFdo
ZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50
VGVzdE1vbml0b3I6OkRlZmVyUmVhc29uKSBjb25zdCB7IC8qIERvIG5vdGhpbmcgKi8gfQotCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgc2Nyb2xs
T2Zmc2V0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxPbkF4
aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB3
aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFN0
b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvcigpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgYWN0aXZlU2Nyb2xs
T2Zmc2V0SW5kZXgoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgdmlydHVhbCBMYXlvdXRTaXplIHNjcm9sbEV4dGVudCgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCA9IDA7Ci0j
ZW5kaWYKLX07Ci0KLWVudW0gY2xhc3MgV2hlZWxFdmVudFN0YXR1cyB7Ci0gICAgVXNlclNjcm9s
bEJlZ2luLAotICAgIFVzZXJTY3JvbGxpbmcsCi0gICAgVXNlclNjcm9sbEVuZCwKLSAgICBNb21l
bnR1bVNjcm9sbEJlZ2luLAotICAgIE1vbWVudHVtU2Nyb2xsaW5nLAotICAgIE1vbWVudHVtU2Ny
b2xsRW5kLAotICAgIFN0YXRlbGVzc1Njcm9sbEV2ZW50LAotICAgIFVua25vd24KLX07Ci0KLWNs
YXNzIFNjcm9sbENvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbENv
bnRyb2xsZXIpOwotCi1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU2Nyb2xsQ29udHJvbGxlcihTY3Jv
bGxDb250cm9sbGVyQ2xpZW50Jik7Ci0gICAgflNjcm9sbENvbnRyb2xsZXIoKTsKLQotI2lmIFBM
QVRGT1JNKE1BQykKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZC4KLSAgICBib29sIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0jZW5kaWYKLQotICAg
IHZvaWQgc3RvcFJ1YmJlcmJhbmRpbmcoKTsKLQotICAgIGJvb2wgdXNlc1Njcm9sbFNuYXAoKSBj
b25zdDsKLQotICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0OwotICAgIGJv
b2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0OwotICAgIGJvb2wgaXNTY3JvbGxTbmFw
SW5Qcm9ncmVzcygpIGNvbnN0OwotICAgIAotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICBSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGluZ0VkZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9y
dWJiZXJCYW5kaW5nRWRnZXM7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNo
YW5nZWQoKTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCB1cGRhdGVT
Y3JvbGxTbmFwUG9pbnRzKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYp
OwotICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4
aXMsIHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzRm9yT2Zm
c2V0KFNjcm9sbE9mZnNldCk7Ci0gICAgYm9vbCBhY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFu
Z2UoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZTsgfQot
ICAgIHZvaWQgc2V0U2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKGJvb2wgc3RhdGUpIHsgbV9hY3Rp
dmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSBzdGF0ZTsgfQotICAgIHVuc2lnbmVkIGFjdGl2
ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKLSAgICB2b2lk
IHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZShjb25zdCBTY3JvbGxhYmxlQXJlYSYpOwotICAgIHZvaWQg
dXBkYXRlR2VzdHVyZUluUHJvZ3Jlc3NTdGF0ZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsK
LSAgICBmbG9hdCBhZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXMsIGZsb2F0
IGRlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8ZmxvYXQ+IG9yaWdp
bmFsT2Zmc2V0KTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGhh
bmRsZWQuCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50Jik7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgc3RhdGljIEZsb2F0U2l6
ZSB3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNWZXJ0aWNhbChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmKTsKLQotICAgIGVudW0gY2xhc3MgV2hlZWxBeGlzQmlhcyB7IE5vbmUsIFZlcnRpY2FsIH07
Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNjcm9sbERpcmVjdGlvbj4gZGlyZWN0aW9uRnJvbUV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIE9wdGlvbmFsPFNjcm9sbEV2ZW50QXhpcz4sIFdo
ZWVsQXhpc0JpYXMgPSBXaGVlbEF4aXNCaWFzOjpOb25lKTsKLQotICAgIHZvaWQgc3RvcEFsbFRp
bWVycygpOwotCi1wcml2YXRlOgotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB2b2lk
IHN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcigpOwotICAgIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5k
VGltZXIoKTsKLSAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgdm9pZCBzbmFwUnViYmVy
QmFuZFRpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRh
bERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKLSAgICBib29sIHNo
b3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNvbnN0OwotCi0gICAg
Ym9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSBjb25zdDsKLSAgICB2b2lkIHVw
ZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotICAgIHZvaWQgdXBkYXRlUnViYmVyQmFuZGluZ0Vk
Z2VzKEludFNpemUgY2xpZW50U3RyZXRjaCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi0gICAgdm9pZCBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9m
ZnNldChTY3JvbGxFdmVudEF4aXMsIGludCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQg
c2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKCk7
Ci0gICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7Ci0KLSAgICBib29sIHNob3VsZE92ZXJy
aWRlTW9tZW50dW1TY3JvbGxpbmcoKSBjb25zdDsKLSAgICB2b2lkIHN0YXRlbGVzc1NuYXBUcmFu
c2l0aW9uVGltZXJGaXJlZCgpOwotICAgIHZvaWQgc2NoZWR1bGVTdGF0ZWxlc3NTY3JvbGxTbmFw
KCk7Ci0KLSAgICB2b2lkIHN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVl
VG9TY3JvbGxTbmFwcGluZygpOwotICAgIHZvaWQgc3RvcERlZmVycmluZ1doZWVsRXZlbnRUZXN0
Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBT
Y3JvbGxDb250cm9sbGVyQ2xpZW50JiBtX2NsaWVudDsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBXYWxsVGltZSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKLSNlbmRpZgotICAgIEZs
b2F0U2l6ZSBtX292ZXJmbG93U2Nyb2xsRGVsdGE7Ci0gICAgRmxvYXRTaXplIG1fc3RyZXRjaFNj
cm9sbEZvcmNlOwotICAgIEZsb2F0U2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7Ci0KLSNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgLy8gUnViYmVyIGJhbmQgc3RhdGUuCi0gICAgTW9ub3Rv
bmljVGltZSBtX3N0YXJ0VGltZTsKLSAgICBGbG9hdFNpemUgbV9zdGFydFN0cmV0Y2g7Ci0gICAg
RmxvYXRTaXplIG1fb3JpZ1ZlbG9jaXR5OwotICAgIFJlY3RFZGdlczxib29sPiBtX3J1YmJlckJh
bmRpbmdFZGdlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBt
X3NuYXBSdWJiZXJiYW5kVGltZXI7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbFNuYXBBbmltYXRvclN0YXRlPiBtX3Njcm9s
bFNuYXBTdGF0ZTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgRmxvYXRTaXplIG1fZHJhZ0VuZGVk
U2Nyb2xsaW5nVmVsb2NpdHk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbENvbnRyb2xsZXJU
aW1lcj4gbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IG1fc2Nyb2xsU25hcFRpbWVyOwotI2VuZGlmCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBib29sIG1faW5TY3JvbGxHZXN0dXJlIHsgZmFs
c2UgfTsKLSAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1faWdub3JlTW9tZW50dW1TY3JvbGxzIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNS
dWJiZXJCYW5kaW5nIHsgZmFsc2UgfTsKLSNlbmRpZgotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBib29sIG1fdGltZXJzV2VyZVN0b3BwZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0KLSAgICBib29s
IG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlIHsgZmFsc2UgfTsKLX07Ci0gICAgCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9s
bGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3ZjUzYWVkNjMzMTZhNjEzMTE3YjZk
YTEzYWZiZWU5MWIyM2Y0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1t
CisrKyAvZGV2L251bGwKQEAgLTEsOTI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2Nyb2xsQ29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJM
YXlvdXRTaXplLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKLSNpbXBvcnQgIldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgotI2ltcG9ydCA8c3lz
L3N5c2N0bC5oPgotI2ltcG9ydCA8c3lzL3RpbWUuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1wb3J0ICJTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZS5oIgotI2ltcG9ydCAiU2Nyb2xsYWJsZUFyZWEuaCIKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oTUFDKQotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNTY3JvbGxWaWV3U1BJ
Lmg+Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykgfHwgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91
dCA9IDEwMF9tczsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0
cmV0Y2hSYXRpbyA9IDE7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1pbmltdW1SZXF1
aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMp
Ci1zdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRpYWxQb3Np
dGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaXR5LCBTZWNvbmRzIGVsYXBzZWRUaW1lKQotewotICAg
IHJldHVybiBfTlNFbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoaW5pdGlhbFBvc2l0aW9uLCBpbml0
aWFsVmVsb2NpdHksIGVsYXBzZWRUaW1lLnNlY29uZHMoKSk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBl
bGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0gICAgcmV0dXJuIF9O
U0VsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShkZWx0YSk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBy
ZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0gICAgcmV0dXJuIF9O
U1JlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShkZWx0YSk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBz
Y3JvbGxXaGVlbE11bHRpcGxpZXIoKQotewotICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0g
LTE7Ci0gICAgaWYgKG11bHRpcGxpZXIgPCAwKSB7Ci0gICAgICAgIG11bHRpcGxpZXIgPSBbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xs
V2hlZWxNdWx0aXBsaWVyIl07Ci0gICAgICAgIGlmIChtdWx0aXBsaWVyIDw9IDApCi0gICAgICAg
ICAgICBtdWx0aXBsaWVyID0gMTsKLSAgICB9Ci0gICAgcmV0dXJuIG11bHRpcGxpZXI7Ci19Ci0j
ZW5kaWYKLQotU2Nyb2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9s
bGVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi17Ci19Ci0KLVNjcm9s
bENvbnRyb2xsZXI6On5TY3JvbGxDb250cm9sbGVyKCkKLXsKLSAgICBBU1NFUlQobV90aW1lcnNX
ZXJlU3RvcHBlZCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcEFsbFRpbWVycygp
Ci17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmIChtX3NuYXBSdWJiZXJiYW5k
VGltZXIpCi0gICAgICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lci0+c3RvcCgpOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1f
c3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcikKLSAgICAgICAgbV9zdGF0ZWxlc3NTbmFwVHJh
bnNpdGlvblRpbWVyLT5zdG9wKCk7Ci0KLSAgICBpZiAobV9zY3JvbGxTbmFwVGltZXIpCi0gICAg
ICAgIG1fc2Nyb2xsU25hcFRpbWVyLT5zdG9wKCk7Ci0jZW5kaWYKLQotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgbV90aW1lcnNXZXJlU3RvcHBlZCA9IHRydWU7Ci0jZW5kaWYKLX0KLQotI2lmIFBM
QVRGT1JNKE1BQykKLWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0jaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLSAgICBpZiAocHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZl
bnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIGlmICh3aGVlbEV2ZW50LnBo
YXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok1heUJlZ2luIHx8IHdoZWVsRXZlbnQu
cGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2FuY2VsbGVkKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlOjpCZWdhbikgewotICAgICAgICAvLyBGSVhNRTogVHJ5aW5nIHRvIGRlY2lk
ZSBpZiBhIGdlc3R1cmUgaXMgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBhdCB0aGUgImJlZ2FuIiBw
aGFzZSBpcyB2ZXJ5IGVycm9yLXByb25lLgotICAgICAgICBhdXRvIGRpcmVjdGlvbiA9IGRpcmVj
dGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwot
ICAgICAgICBpZiAoZGlyZWN0aW9uICYmIG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEo
RmxvYXRTaXplKC13aGVlbEV2ZW50LmRlbHRhWCgpLCAwKSkgJiYgIXNob3VsZFJ1YmJlckJhbmRJ
bkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwotICAgICAgICBpZiAoZGlyZWN0aW9uICYmIG1fY2xp
ZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKDAsIC13aGVlbEV2ZW50LmRlbHRh
WSgpKSkgJiYgIXNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9tb21lbnR1bVNjcm9sbElu
UHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxz
ZTsKLSAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB7IH07Ci0gICAgICAg
IG1fbW9tZW50dW1WZWxvY2l0eSA9IHsgfTsKLQotICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91
bnQgPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAgICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50Lndp
ZHRoKCkpKTsKLSAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmRE
ZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LmhlaWdodCgpKSk7Ci0gICAgICAgIG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgICAgIHN0b3BTbmFwUnVi
YmVyYmFuZFRpbWVyKCk7Ci0gICAgICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgewotICAgICAgICBzbmFwUnViYmVyQmFu
ZCgpOwotICAgICAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBpc01vbWVudHVtU2Nyb2xsRXZlbnQgPSAod2hlZWxF
dmVudC5tb21lbnR1bVBoYXNlKCkgIT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmUpOwot
ICAgIGlmIChtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyAmJiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50
IHx8IG1fc25hcFJ1YmJlcmJhbmRUaW1lcikpIHsKLSAgICAgICAgaWYgKHdoZWVsRXZlbnQubW9t
ZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgewotICAgICAg
ICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzTW9tZW50dW1TY3JvbGxFdmVudCAm
JiBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmbG9hdCBkZWx0YVggPSBtX292ZXJm
bG93U2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAgICBmbG9hdCBkZWx0YVkgPSBtX292ZXJmbG93U2Ny
b2xsRGVsdGEuaGVpZ2h0KCk7Ci0KLSAgICAvLyBSZXNldCBvdmVyZmxvdyB2YWx1ZXMgYmVjYXVz
ZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92ZSBkZWx0YSBhdCB2YXJpb3VzIHBvaW50cyBhbmQgcHV0
IGl0IGludG8gb3ZlcmZsb3cuCi0gICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxvYXRTaXpl
KCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC5zdHJldGNoQW1vdW50
KCk7Ci0gICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50LmhlaWdo
dCgpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50Lndp
ZHRoKCk7Ci0KLSAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWDsKLSAgICBmbG9hdCBldmVu
dENvYWxlc2NlZERlbHRhWTsKLQotICAgIGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNI
b3Jpem9udGFsbHlTdHJldGNoZWQpIHsKLSAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAt
d2hlZWxFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFYKCk7Ci0gICAgICAgIGV2ZW50
Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRh
WSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVs
RXZlbnQuZGVsdGFYKCk7Ci0gICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZl
bnQuZGVsdGFZKCk7Ci0gICAgfQotCi0gICAgZGVsdGFYICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFY
OwotICAgIGRlbHRhWSArPSBldmVudENvYWxlc2NlZERlbHRhWTsKLQotICAgIC8vIFNsaWdodGx5
IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBieSBhcHBseWluZyB0aGUgPSBjYXNlIHRvIGRl
bHRhWQotICAgIC8vIEZJWE1FOiBVc2Ugd2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwo
KS4KLSAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKQotICAgICAgICBkZWx0
YVggPSAwOwotICAgIGVsc2UKLSAgICAgICAgZGVsdGFZID0gMDsKLQotICAgIGJvb2wgc2hvdWxk
U3RyZXRjaCA9IGZhbHNlOwotCi0gICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1Q
aGFzZSA9IHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpOwotCi0gICAgLy8gSWYgd2UgYXJlIHN0
YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0aGVuIGRvIHNvbWUgc2V0dXAuCi0gICAgaWYgKCFt
X21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAobW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZTo6QmVnYW4gfHwgbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZTo6Q2hhbmdlZCkpCi0gICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0g
dHJ1ZTsKLQotICAgIGF1dG8gdGltZURlbHRhID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKSAtIG1f
bGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8
fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgewotICAgICAgICBpZiAobV9sYXN0TW9tZW50
dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID4gMF9zICYmIHRpbWVEZWx0YSA8IHNjcm9s
bFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpIHsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0
eS5zZXRXaWR0aChldmVudENvYWxlc2NlZERlbHRhWCAvIHRpbWVEZWx0YS5zZWNvbmRzKCkpOwot
ICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxlc2NlZERl
bHRhWSAvIHRpbWVEZWx0YS5zZWNvbmRzKCkpOwotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50
LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXpl
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVkKSB7Ci0g
ICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmIG1fY2xpZW50LmlzUGlu
bmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRlbHRhWCwgMCkpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNhbC4KLSAgICAgICAgICAgICAgICBp
ZiAoZGVsdGFZICYmIChmYWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlv
bkxvY2tTdHJldGNoUmF0aW8pKQotICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJl
cXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRl
bHRhWCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0
aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKLSAgICAgICAg
ICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KLSAgICAgICAgICAgIGlm
IChtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKSkg
ewotICAgICAgICAgICAgICAgIGlmIChkZWx0YVggJiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRhWCkg
PCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAgICAgICAgICAg
ICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFZKSA8
IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Ny
b2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwotICAgICAgICAgICAgICAgICAgICBkZWx0YVkg
PSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX292ZXJm
bG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSAr
IGRlbHRhWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBOb3Qgc3RyZXRjaGluZyBhdCBhbGwgeWV0LgotICAgICAgICAgICAgaWYgKG1fY2xpZW50Lmlz
UGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJl
ZERlbHRhQmVmb3JlU3RyZXRjaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVs
dGFYKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c0hv
cml6b250YWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKQotICAgICAgICAgICAgICAgICAgICBkZWx0
YVggPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxvd3NWZXJ0aWNhbFN0
cmV0Y2hpbmcod2hlZWxFdmVudCkpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0K
LSAgICAgICAgICAgICAgICBzaG91bGRTdHJldGNoID0gZGVsdGFYIHx8IGRlbHRhWTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcs
IHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudCgpIC0gZGVsdGFY
ICIgPDwgZGVsdGFYIDw8ICIgZGVsdGFZICIgPDwgZGVsdGFZIDw8ICIgcGlubmVkICIgPDwgbV9j
bGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoZGVsdGFYLCBkZWx0YVkpKSA8
PCAiIHNob3VsZFN0cmV0Y2ggIiA8PCBzaG91bGRTdHJldGNoKTsKLSAgICB9Ci0KLSAgICBib29s
IGhhbmRsZWQgPSB0cnVlOwotCi0gICAgaWYgKGRlbHRhWCB8fCBkZWx0YVkpIHsKLSAgICAgICAg
aWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9u
dGFsbHlTdHJldGNoZWQpKSB7Ci0gICAgICAgICAgICBpZiAoZGVsdGFZKSB7Ci0gICAgICAgICAg
ICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotICAgICAgICAgICAgICAg
IG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkZWx0YVgpIHsKLSAgICAgICAgICAgICAgICBkZWx0
YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQu
aW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRTaXplKGRlbHRhWCwgMCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGRlbHRhWCkgewotICAgICAgICAgICAg
ICAgIGlmICghbV9jbGllbnQuYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
ZXZlbnRDb2FsZXNjZWREZWx0YVggPSAwOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNIb3Jpem9udGFsbHlTdHJldGNo
ZWQgJiYgIW1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRlbHRhWCwg
MCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxp
ZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdp
dGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShkZWx0YVgsIDApKTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChkZWx0YVkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50LmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkgewotICAgICAgICAg
ICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgICAgICBldmVudENvYWxlc2Nl
ZERlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1ZlcnRpY2FsbHlTdHJldGNoZWQgJiYgIW1fY2xpZW50
LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKDAsIGRlbHRhWSkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLQotICAgICAg
ICAgICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsdGFZID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKTsKLQot
ICAgICAgICAgICAgaWYgKG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKChtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShldmVu
dENvYWxlc2NlZERlbHRhWCwgZXZlbnRDb2FsZXNjZWREZWx0YVkpKSB8fCAoZmFic2YoZXZlbnRD
b2FsZXNjZWREZWx0YVgpICsgZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVkpIDw9IDApKSAmJiBt
X2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCkgewotICAgICAgICAgICAgICAgICAgICBtX2ln
bm9yZU1vbWVudHVtU2Nyb2xscyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHNuYXBSdWJi
ZXJCYW5kKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0
aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdo
dChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0KLSAgICAgICAgICAg
IEZsb2F0U2l6ZSBkYW1wZWREZWx0YShjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEo
bV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJv
dW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkpKSk7Ci0KLSAgICAgICAgICAg
IG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMo
ZGFtcGVkRGVsdGEgLSBzdHJldGNoQW1vdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiBtb21lbnR1bVBoYXNlID09IFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgewotICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9n
cmVzcyA9IGZhbHNlOwotICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwot
ICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IHsgfTsKLSAgICB9Ci0KLSAg
ICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLQotICAgIHJldHVybiBoYW5kbGVkOwotfQot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotRmxvYXRTaXplIFNjcm9sbENvbnRyb2xsZXI6Ondo
ZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCkKLXsKLSAgICBhdXRvIGRlbHRhWCA9IHdoZWVsRXZlbnQuZGVsdGFYKCk7Ci0g
ICAgYXV0byBkZWx0YVkgPSB3aGVlbEV2ZW50LmRlbHRhWSgpOwotCi0gICAgaWYgKGZhYnNmKGRl
bHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKLSAgICAgICAgZGVsdGFYID0gMDsKLSAgICBlbHNlCi0g
ICAgICAgIGRlbHRhWSA9IDA7Ci0KLSAgICByZXR1cm4geyBkZWx0YVgsIGRlbHRhWSB9OwotfQot
Ci1PcHRpb25hbDxTY3JvbGxEaXJlY3Rpb24+IFNjcm9sbENvbnRyb2xsZXI6OmRpcmVjdGlvbkZy
b21FdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvbmFsPFNj
cm9sbEV2ZW50QXhpcz4gYXhpcywgV2hlZWxBeGlzQmlhcyBiaWFzKQotewotICAgIC8vIEZJWE1F
OiBJdCdzIGltcG9zc2libGUgdG8gaW5mZXIgZGlyZWN0aW9uIGZyb20gYSBzaW5nbGUgZXZlbnQs
IHNpbmNlIHRoZSBzdGFydCBvZiBhIGdlc3R1cmUgaXMgZWl0aGVyIHplcm8gb3IKLSAgICAvLyBo
YXMgc21hbGwgZGVsdGFzIG9uIGJvdGggYXhlcy4KLQotICAgIGF1dG8gd2hlZWxEZWx0YSA9IEZs
b2F0U2l6ZSB7IHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkgfTsKLSAg
ICBpZiAoYmlhcyA9PSBXaGVlbEF4aXNCaWFzOjpWZXJ0aWNhbCkKLSAgICAgICAgd2hlZWxEZWx0
YSA9IHdoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKHdoZWVsRXZlbnQpOwotCi0gICAg
aWYgKGF4aXMpIHsKLSAgICAgICAgc3dpdGNoIChheGlzLnZhbHVlKCkpIHsKLSAgICAgICAgY2Fz
ZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOgotICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEu
aGVpZ2h0KCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxEb3duOwotCi0gICAg
ICAgICAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFNjcm9sbFVwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTY3JvbGxF
dmVudEF4aXM6Okhvcml6b250YWw6Ci0gICAgICAgICAgICBpZiAod2hlZWxEZWx0YS53aWR0aCgp
ID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsTGVmdDsKLQotICAgICAgICAgICAg
aWYgKHdoZWVsRGVsdGEud2lkdGgoKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9s
bFJpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9
Ci0KLSAgICAvLyBDaGVjayBZIGZpcnN0IGJlY2F1c2UgdmVydGljYWwgc2Nyb2xsaW5nIGRvbWlu
YXRlcy4KLSAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA8IDApCi0gICAgICAgIHJldHVybiBT
Y3JvbGxEb3duOwotCi0gICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPiAwKQotICAgICAgICBy
ZXR1cm4gU2Nyb2xsVXA7Ci0KLSAgICBpZiAod2hlZWxEZWx0YS53aWR0aCgpID4gMCkKLSAgICAg
ICAgcmV0dXJuIFNjcm9sbExlZnQ7Ci0KLSAgICBpZiAod2hlZWxEZWx0YS53aWR0aCgpIDwgMCkK
LSAgICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLXN0YXRpYyBpbmxpbmUgZmxvYXQgcm91
bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKLXsKLSAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51
bSAtIDAuNWYpIDogZmxvb3JmKG51bSArIDAuNWYpOwotfQotCi1zdGF0aWMgaW5saW5lIGZsb2F0
IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZmxvYXQgbnVtKQotewotICAgIGZsb2F0IHJv
dW5kZWROdW0gPSByb3VuZGYobnVtKTsKLSAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8
IDAuMTI1KQotICAgICAgICBudW0gPSByb3VuZGVkTnVtOwotCi0gICAgcmV0dXJuIHJvdW5kVG93
YXJkWmVybyhudW0pOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5k
VGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8
PCAiU2Nyb2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKCkgLSBtYWluIHRo
cmVhZCAiIDw8IGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV9tb21lbnR1bVNjcm9sbElu
UHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMpIHsKLSAgICAgICAgYXV0byB0aW1l
RGVsdGEgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fc3RhcnRUaW1lOwotCi0gICAgICAgIGlm
IChtX3N0YXJ0U3RyZXRjaC5pc1plcm8oKSkgewotICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2gg
PSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAgICAgICAgICBpZiAobV9zdGFydFN0cmV0
Y2ggPT0gRmxvYXRTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzdG9wUnViYmVyYmFuZGluZygp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7Ci0KLSAgICAgICAgICAgIC8vIEp1
c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwgcnViYmVyYmFuZGluZwot
ICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzZiht
X29yaWdWZWxvY2l0eS53aWR0aCgpKSkKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5z
ZXRXaWR0aCgwKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQgaG9yaXpvbnRh
bGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkKLSAgICAgICAg
ICAgIGlmICghbV9jbGllbnQuYWxsb3dzSG9yaXpvbnRhbFNjcm9sbGluZygpKQotICAgICAgICAg
ICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwotCi0gICAgICAgICAgICAvLyBEb24n
dCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCB2
ZXJ0aWNhbGx5Ci0gICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c1ZlcnRpY2FsU2Nyb2xs
aW5nKCkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0SGVpZ2h0KDApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgRmxvYXRQb2ludCBkZWx0YShyb3VuZFRvRGV2aWNlUGl4ZWxUb3dh
cmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC53aWR0aCgpLCAt
bV9vcmlnVmVsb2NpdHkud2lkdGgoKSwgdGltZURlbHRhKSksCi0gICAgICAgICAgICByb3VuZFRv
RGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3Ry
ZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCB0aW1lRGVsdGEpKSk7Ci0K
LSAgICAgICAgaWYgKGZhYnMoZGVsdGEueCgpKSA+PSAxIHx8IGZhYnMoZGVsdGEueSgpKSA+PSAx
KSB7Ci0gICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50
RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShkZWx0YS54KCksIGRlbHRhLnkoKSkgLSBtX2NsaWVu
dC5zdHJldGNoQW1vdW50KCkpOwotCi0gICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9
IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKTsKLQotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xs
Rm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lk
dGgoKSkpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91
bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBtX2NsaWVudC5hZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRz
SWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIHN0b3BSdWJiZXJiYW5kaW5nKCk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpOwotICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IHsgfTsKLSAgICAgICAgaWYgKCFpc1J1YmJl
ckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSkKLSAgICAgICAgICAgIHN0b3BTbmFwUnViYmVyYmFu
ZFRpbWVyKCk7Ci0gICAgfQotCi0gICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQot
ewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3Rh
dGUoKTsKLSNlbmRpZgotfQotCi1ib29sIFNjcm9sbENvbnRyb2xsZXI6OnVzZXNTY3JvbGxTbmFw
KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHJldHVybiAhIW1f
c2Nyb2xsU25hcFN0YXRlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQot
Ym9vbCBTY3JvbGxDb250cm9sbGVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKLXsK
LSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIG1faW5TY3JvbGxHZXN0dXJlOwotI2Vsc2UK
LSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVyOjpp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpICYmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gbV9pc1J1YmJlckJhbmRpbmc7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFNjcm9sbENvbnRyb2xsZXI6
OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIGlmICghdXNlc1Njcm9sbFNu
YXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkgJiYgUExBVEZPUk0oTUFDKQotICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVu
dHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX3Njcm9sbFNuYXBUaW1lcikKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJv
bGxlcjo6c3RvcFJ1YmJlcmJhbmRpbmcoKQotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
LSAgICBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpOwotICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNl
ID0geyB9OwotICAgIG1fc3RhcnRUaW1lID0geyB9OwotICAgIG1fc3RhcnRTdHJldGNoID0geyB9
OwotICAgIG1fb3JpZ1ZlbG9jaXR5ID0geyB9OwotICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0
ZSgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi12b2lkIFNjcm9s
bENvbnRyb2xsZXI6OnN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcigpCi17Ci0gICAgbV9jbGllbnQu
d2lsbFN0YXJ0UnViYmVyQmFuZFNuYXBBbmltYXRpb24oKTsKLQotICAgIC8vIE1ha2UgYSBuZXcg
b25lIGVhY2ggdGltZSB0byBlbnN1cmUgaXQgZmlyZXMgb24gdGhlIGN1cnJlbnQgUnVuTG9vcC4K
LSAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXIgPSBtX2NsaWVudC5jcmVhdGVUaW1lcihbdGhpc10g
ewotICAgICAgICBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKLSAgICB9KTsKLSAgICBtX3Nu
YXBSdWJiZXJiYW5kVGltZXItPnN0YXJ0UmVwZWF0aW5nKDFfcyAvIDYwLik7Ci0KLSAgICBtX2Ns
aWVudC5kZWZlcldoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkZvclJlYXNvbihyZWludGVycHJldF9j
YXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlz
KSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpSdWJiZXJiYW5kSW5Qcm9ncmVzcyk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQotewotICAgIG1f
Y2xpZW50LmRpZFN0b3BSdWJiZXJiYW5kU25hcEFuaW1hdGlvbigpOwotCi0gICAgaWYgKG1fc25h
cFJ1YmJlcmJhbmRUaW1lcikgewotICAgICAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXItPnN0b3Ao
KTsKLSAgICAgICAgbV9zbmFwUnViYmVyYmFuZFRpbWVyID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBtX2NsaWVudC5yZW1vdmVXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EZWZlcnJhbEZvclJlYXNv
bihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpSdWJiZXJiYW5kSW5Qcm9n
cmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmQoKQotewot
ICAgIGF1dG8gdGltZURlbHRhID0gV2FsbFRpbWU6Om5vdygpIC0gbV9sYXN0TW9tZW50dW1TY3Jv
bGxUaW1lc3RhbXA7Ci0gICAgaWYgKG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRp
bWVEZWx0YSA+PSBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KQotICAgICAgICBtX21vbWVu
dHVtVmVsb2NpdHkgPSB7IH07Ci0KLSAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwot
ICAgIG1fc3RhcnRTdHJldGNoID0geyB9OwotICAgIG1fb3JpZ1ZlbG9jaXR5ID0geyB9OwotCi0g
ICAgc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci19Ci0KLWJvb2wgU2Nyb2xsQ29udHJvbGxl
cjo6c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpIGNvbnN0Ci17Ci0gICAgYXV0byBkaXJlY3Rpb24gPSBkaXJl
Y3Rpb25Gcm9tRXZlbnQod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsK
LSAgICBpZiAoZGlyZWN0aW9uKQotICAgICAgICByZXR1cm4gc2hvdWxkUnViYmVyQmFuZEluRGly
ZWN0aW9uKGRpcmVjdGlvbi52YWx1ZSgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFNjcm9sbENvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uKSBjb25zdAotewotICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRSdWJi
ZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uKTsKLX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVy
Ojppc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSBjb25zdAotewotICAgIGlmICghbV9p
blNjcm9sbEdlc3R1cmUgJiYgIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmICFtX3NuYXBS
dWJiZXJiYW5kVGltZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhbV9j
bGllbnQuc3RyZXRjaEFtb3VudCgpLmlzWmVybygpOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xs
ZXI6OnVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpCi17Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRp
bmcgPSBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKTsKLSAgICBpZiAoaXNSdWJiZXJC
YW5kaW5nID09IG1faXNSdWJiZXJCYW5kaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lz
UnViYmVyQmFuZGluZyA9IGlzUnViYmVyQmFuZGluZzsKLSAgICBpZiAobV9pc1J1YmJlckJhbmRp
bmcpCi0gICAgICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhtX2NsaWVudC5zdHJldGNoQW1v
dW50KCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMgPSB7IH07Ci0K
LSAgICBtX2NsaWVudC5ydWJiZXJCYW5kaW5nU3RhdGVDaGFuZ2VkKG1faXNSdWJiZXJCYW5kaW5n
KTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kaW5nRWRnZXMo
SW50U2l6ZSBjbGllbnRTdHJldGNoKQotewotICAgIG1fcnViYmVyQmFuZGluZ0VkZ2VzLnNldExl
ZnQoY2xpZW50U3RyZXRjaC53aWR0aCgpIDwgMCk7Ci0gICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMu
c2V0UmlnaHQoY2xpZW50U3RyZXRjaC53aWR0aCgpID4gMCk7Ci0KLSAgICBtX3J1YmJlckJhbmRp
bmdFZGdlcy5zZXRUb3AoY2xpZW50U3RyZXRjaC5oZWlnaHQoKSA8IDApOwotICAgIG1fcnViYmVy
QmFuZGluZ0VkZ2VzLnNldEJvdHRvbShjbGllbnRTdHJldGNoLmhlaWdodCgpID4gMCk7Ci19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotCi0jaWYgUExBVEZPUk0oTUFDKQotc3RhdGljIGlubGluZSBXaGVlbEV2ZW50U3Rh
dHVzIHRvV2hlZWxFdmVudFN0YXR1cyhQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSkKLXsKLSAgICBpZiAocGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmUpIHsKLSAgICAgICAgc3dpdGNoIChtb21lbnR1
bVBoYXNlKSB7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuOgot
ICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsQmVnaW47
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6
OkNoYW5nZWQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1T
Y3JvbGxpbmc7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2U6OkVuZGVkOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6Ok1v
bWVudHVtU2Nyb2xsRW5kOwotCi0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6
Ok5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6U3RhdGVsZXNzU2Ny
b2xsRXZlbnQ7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2
ZW50U3RhdHVzOjpVbmtub3duOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtb21lbnR1bVBo
YXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpOb25lKSB7Ci0gICAgICAgIHN3aXRjaCAo
cGhhc2UpIHsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW46Ci0g
ICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok1heUJlZ2luOgotICAgICAgICAg
ICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZDoKLSAg
ICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZDoK
LSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2FuY2VsbGVkOgotICAgICAg
ICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0
YXR1czo6VW5rbm93bjsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gV2hlZWxFdmVudFN0
YXR1czo6VW5rbm93bjsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBXaGVlbEV2ZW50U3RhdHVzIHN0YXR1cykKLXsK
LSAgICBzd2l0Y2ggKHN0YXR1cykgewotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNj
cm9sbEJlZ2luOiB0cyA8PCAiVXNlclNjcm9sbEJlZ2luIjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVl
bEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOiB0cyA8PCAiVXNlclNjcm9sbGluZyI7IGJyZWFr
OwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDogdHMgPDwgIlVzZXJT
Y3JvbGxFbmQiOyBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Ny
b2xsQmVnaW46IHRzIDw8ICJNb21lbnR1bVNjcm9sbEJlZ2luIjsgYnJlYWs7Ci0gICAgY2FzZSBX
aGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbGluZzogdHMgPDwgIk1vbWVudHVtU2Nyb2xs
aW5nIjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEVu
ZDogdHMgPDwgIk1vbWVudHVtU2Nyb2xsRW5kIjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50
U3RhdHVzOjpTdGF0ZWxlc3NTY3JvbGxFdmVudDogdHMgPDwgIlN0YXRlbGVzc1Njcm9sbEV2ZW50
IjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOiB0cyA8PCAiVW5r
bm93biI7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0jZW5kaWYKLQotYm9vbCBT
Y3JvbGxDb250cm9sbGVyOjpzaG91bGRPdmVycmlkZU1vbWVudHVtU2Nyb2xsaW5nKCkgY29uc3QK
LXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFNjcm9sbFNuYXBTdGF0ZSBzY3JvbGxTbmFwU3RhdGUgPSBtX3Njcm9sbFNuYXBTdGF0ZS0+
Y3VycmVudFN0YXRlKCk7Ci0gICAgcmV0dXJuIHNjcm9sbFNuYXBTdGF0ZSA9PSBTY3JvbGxTbmFw
U3RhdGU6OkdsaWRpbmcgfHwgc2Nyb2xsU25hcFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6RGVz
dGluYXRpb25SZWFjaGVkOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNjaGVkdWxlU3Rh
dGVsZXNzU2Nyb2xsU25hcCgpCi17Ci0gICAgc3RvcFNjcm9sbFNuYXBUaW1lcigpOwotICAgIGlm
IChtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXIpIHsKLSAgICAgICAgbV9zdGF0ZWxlc3NT
bmFwVHJhbnNpdGlvblRpbWVyLT5zdG9wKCk7Ci0gICAgICAgIG1fc3RhdGVsZXNzU25hcFRyYW5z
aXRpb25UaW1lciA9IG51bGxwdHI7Ci0gICAgfQotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljIGNvbnN0IFNlY29uZHMgc3RhdGVsZXNzU2Ny
b2xsU25hcERlbGF5ID0gNzUwX21zOwotICAgIG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1l
ciA9IG1fY2xpZW50LmNyZWF0ZVRpbWVyKFt0aGlzXSB7Ci0gICAgICAgIHN0YXRlbGVzc1NuYXBU
cmFuc2l0aW9uVGltZXJGaXJlZCgpOwotICAgIH0pOwotICAgIG1fc3RhdGVsZXNzU25hcFRyYW5z
aXRpb25UaW1lci0+c3RhcnRPbmVTaG90KHN0YXRlbGVzc1Njcm9sbFNuYXBEZWxheSk7Ci0gICAg
c3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5n
KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhdGVsZXNzU25hcFRyYW5zaXRpb25U
aW1lckZpcmVkKCkKLXsKLSAgICBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXIgPSBudWxs
cHRyOwotCi0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvU25hcEFuaW1hdGlvblN0YXRlKG1fY2xp
ZW50LnNjcm9sbEV4dGVudCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKSwgbV9jbGllbnQucGFn
ZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKTsKLSAgICBzdGFydFNjcm9s
bFNuYXBUaW1lcigpOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0RGVmZXJyaW5n
V2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpCi17Ci0gICAgbV9j
bGllbnQuZGVmZXJXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25Gb3JSZWFzb24ocmVpbnRlcnByZXRf
Y2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhp
cyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsU25hcEluUHJvZ3Jlc3MpOwotfQotCi12
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRp
b25EdWVUb1Njcm9sbFNuYXBwaW5nKCkKLXsKLSAgICBtX2NsaWVudC5yZW1vdmVXaGVlbEV2ZW50
VGVzdENvbXBsZXRpb25EZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZl
bnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVu
dFRlc3RNb25pdG9yOjpTY3JvbGxTbmFwSW5Qcm9ncmVzcyk7Ci19Ci0KLWJvb2wgU2Nyb2xsQ29u
dHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3Njcm9sbFNuYXBTdGF0ZS0+c25hcE9mZnNl
dHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkuaXNFbXB0eSgpICYmIG1fc2Ny
b2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHN0YXR1cyA9
IHRvV2hlZWxFdmVudFN0YXR1cyh3aGVlbEV2ZW50LnBoYXNlKCksIHdoZWVsRXZlbnQubW9tZW50
dW1QaGFzZSgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwg
IlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3Jv
bGxTbmFwOiBzdGF0dXMgIiA8PCBzdGF0dXMpOwotCi0gICAgYm9vbCBpc01vbWVudHVtU2Nyb2xs
aW5nID0gZmFsc2U7Ci0gICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFdoZWVsRXZlbnRT
dGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJT
Y3JvbGxpbmc6Ci0gICAgICAgIHN0b3BTY3JvbGxTbmFwVGltZXIoKTsKLSAgICAgICAgbV9zY3Jv
bGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlvblN0YXRlKCk7Ci0gICAgICAg
IG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHkgPSAtd2hlZWxFdmVudC5zY3JvbGxpbmdWZWxv
Y2l0eSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJT
Y3JvbGxFbmQ6Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9TbmFwQW5p
bWF0aW9uU3RhdGUobV9jbGllbnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZpZXdwb3J0U2l6
ZSgpLCBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkp
OwotICAgICAgICBzdGFydFNjcm9sbFNuYXBUaW1lcigpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsQmVnaW46Ci0gICAgICAgIG1fc2Ny
b2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9HbGlkZUFuaW1hdGlvblN0YXRlKG1fY2xpZW50LnNj
cm9sbEV4dGVudCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKSwgbV9jbGllbnQucGFnZVNjYWxl
RmFjdG9yKCksIG1fY2xpZW50LnNjcm9sbE9mZnNldCgpLCBtX2RyYWdFbmRlZFNjcm9sbGluZ1Zl
bG9jaXR5LCBGbG9hdFNpemUoLXdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVlbEV2ZW50LmRlbHRh
WSgpKSk7Ci0gICAgICAgIG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHkgPSB7IH07Ci0gICAg
ICAgIGlzTW9tZW50dW1TY3JvbGxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsaW5nOgotICAgIGNhc2UgV2hlZWxFdmVu
dFN0YXR1czo6TW9tZW50dW1TY3JvbGxFbmQ6Ci0gICAgICAgIGlzTW9tZW50dW1TY3JvbGxpbmcg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlN0YXRl
bGVzc1Njcm9sbEV2ZW50OgotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRv
VXNlckludGVyYWN0aW9uU3RhdGUoKTsKLSAgICAgICAgc2NoZWR1bGVTdGF0ZWxlc3NTY3JvbGxT
bmFwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VW5rbm93
bjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiBpc01vbWVudHVtU2Nyb2xsaW5nICYmIHNob3VsZE92ZXJyaWRlTW9tZW50
dW1TY3JvbGxpbmcoKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVHZXN0dXJl
SW5Qcm9ncmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsK
LSAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpIHx8IHdoZWVsRXZlbnQuaXNUcmFu
c2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKQotICAgICAgICBtX2luU2Nyb2xsR2VzdHVyZSA9
IHRydWU7Ci0gICAgZWxzZSBpZiAod2hlZWxFdmVudC5pc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwo
KSB8fCB3aGVlbEV2ZW50LmlzR2VzdHVyZUNhbmNlbCgpIHx8IHdoZWVsRXZlbnQuaXNFbmRPZk1v
bWVudHVtU2Nyb2xsKCkpCi0gICAgICAgIG1faW5TY3JvbGxHZXN0dXJlID0gZmFsc2U7Ci0KLSAg
ICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVy
OjpzdGFydFNjcm9sbFNuYXBUaW1lcigpCi17Ci0gICAgaWYgKG1fc2Nyb2xsU25hcFRpbWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFt
IDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHN0YXJ0U2Nyb2xsU25hcFRpbWVy
IChtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8ICIpIik7Ci0KLSAgICBzdGFydERl
ZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLSAg
ICBtX2NsaWVudC53aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7Ci0gICAgbV9zY3JvbGxT
bmFwVGltZXIgPSBtX2NsaWVudC5jcmVhdGVUaW1lcihbdGhpc10gewotICAgICAgICBzY3JvbGxT
bmFwVGltZXJGaXJlZCgpOwotICAgIH0pOwotICAgIG1fc2Nyb2xsU25hcFRpbWVyLT5zdGFydFJl
cGVhdGluZygxX3MgLyA2MC4pOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BTY3Jv
bGxTbmFwVGltZXIoKQotewotICAgIGlmICghbV9zY3JvbGxTbmFwVGltZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9s
bENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgc3RvcFNjcm9sbFNuYXBUaW1lciAobWFpbiB0aHJl
YWQgIiA8PCBpc01haW5UaHJlYWQoKSA8PCAiKSIpOwotCi0gICAgc3RvcERlZmVycmluZ1doZWVs
RXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLSAgICBtX2NsaWVudC5k
aWRTdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpOwotCi0gICAgbV9zY3JvbGxTbmFwVGltZXItPnN0
b3AoKTsKLSAgICBtX3Njcm9sbFNuYXBUaW1lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgU2Nyb2xs
Q29udHJvbGxlcjo6c2Nyb2xsU25hcFRpbWVyRmlyZWQoKQotewotICAgIGlmICghdXNlc1Njcm9s
bFNuYXAoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGJvb2wgaXNBbmltYXRpb25Db21wbGV0ZTsKLSAgICBhdXRvIGFuaW1h
dGlvbk9mZnNldCA9IG1fc2Nyb2xsU25hcFN0YXRlLT5jdXJyZW50QW5pbWF0ZWRTY3JvbGxPZmZz
ZXQoaXNBbmltYXRpb25Db21wbGV0ZSk7Ci0gICAgYXV0byBjdXJyZW50T2Zmc2V0ID0gbV9jbGll
bnQuc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3Ry
ZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHNjcm9sbFNuYXBUaW1lckZp
cmVkIC0gaXNBbmltYXRpb25Db21wbGV0ZSAiIDw8IGlzQW5pbWF0aW9uQ29tcGxldGUgPDwgIiBj
dXJyZW50T2Zmc2V0ICIgPDwgY3VycmVudE9mZnNldCA8PCAiIChtYWluIHRocmVhZCAiIDw8IGlz
TWFpblRocmVhZCgpIDw8ICIpIik7Ci0KLSAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdp
dGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShhbmltYXRpb25PZmZzZXQueCgp
IC0gY3VycmVudE9mZnNldC54KCksIGFuaW1hdGlvbk9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0
LnkoKSkpOwotICAgIGlmIChpc0FuaW1hdGlvbkNvbXBsZXRlKSB7Ci0gICAgICAgIG1fc2Nyb2xs
U25hcFN0YXRlLT50cmFuc2l0aW9uVG9EZXN0aW5hdGlvblJlYWNoZWRTdGF0ZSgpOwotICAgICAg
ICBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7Ci0gICAgfQotfQotI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoY29uc3Qg
U2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQotewotICAgIGNvbnN0IGF1dG8qIHNuYXBP
ZmZzZXRJbmZvID0gc2Nyb2xsYWJsZUFyZWEuc25hcE9mZnNldEluZm8oKTsKLSAgICBpZiAoIXNu
YXBPZmZzZXRJbmZvKSB7Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoKnNuYXBP
ZmZzZXRJbmZvKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFw
UG9pbnRzKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgc25hcE9mZnNl
dEluZm8pCi17Ci0gICAgaWYgKHNuYXBPZmZzZXRJbmZvLmlzRW1wdHkoKSkgewotICAgICAgICBt
X3Njcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBib29sIHNob3VsZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMgPSAhbV9zY3JvbGxTbmFwU3Rh
dGU7Ci0gICAgaWYgKCFtX3Njcm9sbFNuYXBTdGF0ZSkKLSAgICAgICAgbV9zY3JvbGxTbmFwU3Rh
dGUgPSBtYWtlVW5pcXVlPFNjcm9sbFNuYXBBbmltYXRvclN0YXRlPigpOwotCi0gICAgbV9zY3Jv
bGxTbmFwU3RhdGUtPnNldFNuYXBPZmZzZXRJbmZvKHNuYXBPZmZzZXRJbmZvKTsKLQotICAgIGlm
IChzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzKQotICAgICAgICBzZXRBY3RpdmVTY3Jv
bGxTbmFwSW5kaWNlc0Zvck9mZnNldChyb3VuZGVkSW50UG9pbnQobV9jbGllbnQuc2Nyb2xsT2Zm
c2V0KCkpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNj
cm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0YXRlIG5ldyBz
dGF0ZTogIiA8PCBWYWx1ZU9yTnVsbChtX3Njcm9sbFNuYXBTdGF0ZS5nZXQoKSkpOwotfQotCi11
bnNpZ25lZCBTY3JvbGxDb250cm9sbGVyOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNj
cm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAotewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2
ZVNuYXBJbmRleEZvckF4aXMoYXhpcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0
QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgdW5zaWdu
ZWQgaW5kZXgpCi17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+c2V0QWN0aXZlU25hcEluZGV4Rm9yQXhpcyhheGlz
LCBpbmRleCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNu
YXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGludCBvZmZzZXQp
Ci17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOwotICAgIFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3RhdGU7Ci0KLSAg
ICBhdXRvIHNuYXBPZmZzZXRzID0gc25hcFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhheGlzKTsK
LSAgICBpZiAoIXNuYXBPZmZzZXRzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5
b3V0VW5pdCBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0VW5pdChvZmZz
ZXQgLyBzY2FsZUZhY3RvciksIHNuYXBPZmZzZXRzLmZpcnN0KCkub2Zmc2V0KSwgc25hcE9mZnNl
dHMubGFzdCgpLm9mZnNldCk7Ci0KLSAgICB1bnNpZ25lZCBhY3RpdmVJbmRleCA9IHNuYXBTdGF0
ZS5zbmFwT2Zmc2V0SW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIGNsYW1wZWRPZmZzZXQs
IDApLnNlY29uZDsKLSAgICBpZiAoYWN0aXZlSW5kZXggPT0gYWN0aXZlU2Nyb2xsU25hcEluZGV4
Rm9yQXhpcyhheGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hY3RpdmVTY3JvbGxTbmFw
SW5kZXhEaWRDaGFuZ2UgPSB0cnVlOwotICAgIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoYXhpcywgYWN0aXZlSW5kZXgpOwotfQotCi1mbG9hdCBTY3JvbGxDb250cm9sbGVyOjphZGp1
c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVzdGluYXRp
b25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQp
Ci17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm4gZGVzdGluYXRp
b25PZmZzZXQ7Ci0KLSAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1f
c2Nyb2xsU25hcFN0YXRlOwotICAgIGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUuc25hcE9m
ZnNldHNGb3JBeGlzKGF4aXMpOwotICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gZGVzdGluYXRpb25PZmZzZXQ7Ci0KLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBv
cmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHM7Ci0gICAgaWYgKG9yaWdpbmFsT2Zmc2V0Lmhhc1Zh
bHVlKCkpCi0gICAgICAgIG9yaWdpbmFsT2Zmc2V0SW5MYXlvdXRVbml0cyA9IExheW91dFVuaXQo
Km9yaWdpbmFsT2Zmc2V0IC8gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCkpOwotICAgIExheW91
dFVuaXQgb2Zmc2V0ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZz
ZXQoYXhpcywgTGF5b3V0VW5pdChkZXN0aW5hdGlvbk9mZnNldCAvIG1fY2xpZW50LnBhZ2VTY2Fs
ZUZhY3RvcigpKSwgdmVsb2NpdHksIG9yaWdpbmFsT2Zmc2V0SW5MYXlvdXRVbml0cykuZmlyc3Q7
Ci0gICAgcmV0dXJuIG9mZnNldCAqIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOwotfQotCi0K
LXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZz
ZXQoU2Nyb2xsT2Zmc2V0IG9mZnNldCkKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5k
T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgb2Zmc2V0LngoKSk7Ci0gICAgc2V0
TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCwgb2Zmc2V0LnkoKSk7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZWIxYWMzYjU5YWFlZTQ0YzYzOWI0YWZmMGMyNDI2
OTU4MjE0OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0KLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxTbmFwT2Zm
c2V0c0luZm8uaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUgIlNjcm9sbGlu
Z01vbWVudHVtQ2FsY3VsYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0K
LW5hbWVzcGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1lbnVtIGNsYXNzIFNjcm9sbFNuYXBTdGF0ZSB7Ci0gICAgU25hcHBpbmcsCi0gICAg
R2xpZGluZywKLSAgICBEZXN0aW5hdGlvblJlYWNoZWQsCi0gICAgVXNlckludGVyYWN0aW9uCi19
OwotCi1jbGFzcyBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgY29uc3QgVmVjdG9yPFNuYXBPZmZzZXQ8TGF5b3V0VW5p
dD4+JiBzbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBt
X3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMgOiBtX3NuYXBPZmZzZXRzSW5m
by52ZXJ0aWNhbFNuYXBPZmZzZXRzOwotICAgIH0KLQotICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxP
ZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRhbFNuYXBP
ZmZzZXRSYW5nZXMgOiBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7
Ci0gICAgfQotCi0gICAgY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+JiBz
bmFwT2Zmc2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvOyB9Ci0gICAg
dm9pZCBzZXRTbmFwT2Zmc2V0SW5mbyhjb25zdCBTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0
VW5pdD4mIG5ld0luZm8pIHsgbV9zbmFwT2Zmc2V0c0luZm8gPSBuZXdJbmZvOyB9Ci0KLSAgICB2
b2lkIHNldFNuYXBPZmZzZXRzQW5kUG9zaXRpb25SYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhp
cyBheGlzLCBjb25zdCBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRz
LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0
UmFuZ2VzKQotICAgIHsKLSAgICAgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsKSB7Ci0gICAgICAgICAgICBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9m
ZnNldHMgPSBzbmFwT2Zmc2V0czsKLSAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLmhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzID0gc25hcE9mZnNldFJhbmdlczsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldHMgPSBz
bmFwT2Zmc2V0czsKLSAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9m
ZnNldFJhbmdlcyA9IHNuYXBPZmZzZXRSYW5nZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBT
Y3JvbGxTbmFwU3RhdGUgY3VycmVudFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50U3Rh
dGU7IH0KLQotICAgIHVuc2lnbmVkIGFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwgPyBtX2FjdGl2ZVNuYXBJbmRleFggOiBtX2FjdGl2ZVNuYXBJbmRl
eFk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChheGlzID09
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKLSAgICAgICAgICAgIG1fYWN0aXZlU25hcElu
ZGV4WCA9IGluZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2FjdGl2ZVNuYXBJbmRl
eFkgPSBpbmRleDsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IGN1cnJlbnRBbmltYXRlZFNjcm9s
bE9mZnNldChib29sJiBpc0FuaW1hdGlvbkNvbXBsZXRlKSBjb25zdDsKLQotICAgIC8vIFN0YXRl
IHRyYW5zaXRpb24gaGVscGVycy4KLSAgICB2b2lkIHRyYW5zaXRpb25Ub1NuYXBBbmltYXRpb25T
dGF0ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplLCBjb25zdCBGbG9hdFNpemUmIHZpZXdw
b3J0U2l6ZSwgZmxvYXQgcGFnZVNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsT2Zmc2V0
KTsKLSAgICB2b2lkIHRyYW5zaXRpb25Ub0dsaWRlQW5pbWF0aW9uU3RhdGUoY29uc3QgRmxvYXRT
aXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBh
Z2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXpl
JiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsKLSAgICB2
b2lkIHRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlvblN0YXRlKCk7Ci0gICAgdm9pZCB0cmFuc2l0
aW9uVG9EZXN0aW5hdGlvblJlYWNoZWRTdGF0ZSgpOwotCi1wcml2YXRlOgotICAgIGZsb2F0IHRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgbWF4U2Nyb2xs
T2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRl
eCkgY29uc3Q7Ci0gICAgdm9pZCB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBT
dGF0ZSk7Ci0gICAgdm9pZCBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSwg
Y29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNp
emUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29u
c3QgRmxvYXRTaXplJiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERl
bHRhKTsKLQotICAgIFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJlbnRTdGF0ZSB7IFNjcm9sbFNuYXBT
dGF0ZTo6VXNlckludGVyYWN0aW9uIH07Ci0KLSAgICBTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5
b3V0VW5pdD4gbV9zbmFwT2Zmc2V0c0luZm87Ci0KLSAgICB1bnNpZ25lZCBtX2FjdGl2ZVNuYXBJ
bmRleFggeyAwIH07Ci0gICAgdW5zaWduZWQgbV9hY3RpdmVTbmFwSW5kZXhZIHsgMCB9OwotCi0g
ICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xs
aW5nTW9tZW50dW1DYWxjdWxhdG9yPiBtX21vbWVudHVtQ2FsY3VsYXRvcjsKLX07Ci0KLVdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZSYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzNjM2UwNjZmYWQyM2Q2MTdkODU3MjI1NTRlMzgxOGIxNzhjNmU5NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQotCi0jaW1wb3J0IDx3dGYvTWF0aEV4dHJhcy5oPgotI2ltcG9ydCA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgU2Nyb2xsU25h
cEFuaW1hdG9yU3RhdGU6OnRyYW5zaXRpb25Ub1NuYXBBbmltYXRpb25TdGF0ZShjb25zdCBGbG9h
dFNpemUmIGNvbnRlbnRTaXplLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQg
cGFnZVNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsT2Zmc2V0KQotewotICAgIHNldHVw
QW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZywgY29udGVudFNpemUs
IHZpZXdwb3J0U2l6ZSwgcGFnZVNjYWxlLCBpbml0aWFsT2Zmc2V0LCB7IH0sIHsgfSk7Ci19Ci0K
LXZvaWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRyYW5zaXRpb25Ub0dsaWRlQW5pbWF0aW9u
U3RhdGUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3
cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNl
dCwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5p
dGlhbERlbHRhKQotewotICAgIHNldHVwQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRl
OjpHbGlkaW5nLCBjb250ZW50U2l6ZSwgdmlld3BvcnRTaXplLCBwYWdlU2NhbGUsIGluaXRpYWxP
ZmZzZXQsIGluaXRpYWxWZWxvY2l0eSwgaW5pdGlhbERlbHRhKTsKLX0KLQotdm9pZCBTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZTo6c2V0dXBBbmltYXRpb25Gb3JTdGF0ZShTY3JvbGxTbmFwU3RhdGUg
c3RhdGUsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgdmll
d3BvcnRTaXplLCBmbG9hdCBwYWdlU2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxPZmZz
ZXQsIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbFZlbG9jaXR5LCBjb25zdCBGbG9hdFNpemUmIGlu
aXRpYWxEZWx0YSkKLXsKLSAgICBBU1NFUlQoc3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFw
cGluZyB8fCBzdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpOwotICAgIGlmIChtX2N1
cnJlbnRTdGF0ZSA9PSBzdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tb21lbnR1bUNh
bGN1bGF0b3IgPSBTY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3I6OmNyZWF0ZSh2aWV3cG9ydFNp
emUsIGNvbnRlbnRTaXplLCBpbml0aWFsT2Zmc2V0LCBpbml0aWFsRGVsdGEsIGluaXRpYWxWZWxv
Y2l0eSk7Ci0gICAgYXV0byBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQgPSBtX21vbWVudHVtQ2FsY3Vs
YXRvci0+cHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQoKTsKLSAgICBmbG9hdCB0YXJnZXRPZmZz
ZXRYID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlld3BvcnRTaXplLndpZHRoKCksIGluaXRpYWxP
ZmZzZXQueCgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQud2lkdGgoKSwgcGFnZVNjYWxlLCBpbml0
aWFsRGVsdGEud2lkdGgoKSwgbV9hY3RpdmVTbmFwSW5kZXhYKTsKLSAgICBmbG9hdCB0YXJnZXRP
ZmZzZXRZID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0
aWNhbCwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNpemUuaGVpZ2h0KCksIGluaXRp
YWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQuaGVpZ2h0KCksIHBhZ2VTY2FsZSwg
aW5pdGlhbERlbHRhLmhlaWdodCgpLCBtX2FjdGl2ZVNuYXBJbmRleFkpOwotICAgIG1fbW9tZW50
dW1DYWxjdWxhdG9yLT5zZXRSZXRhcmdldGVkU2Nyb2xsT2Zmc2V0KHsgdGFyZ2V0T2Zmc2V0WCwg
dGFyZ2V0T2Zmc2V0WSB9KTsKLSAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygp
OwotICAgIG1fY3VycmVudFN0YXRlID0gc3RhdGU7Ci19Ci0KLXZvaWQgU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGU6OnRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlvblN0YXRlKCkKLXsKLSAgICB0ZWFy
ZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9uKTsK
LX0KLQotdm9pZCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6dHJhbnNpdGlvblRvRGVzdGluYXRp
b25SZWFjaGVkU3RhdGUoKQotewotICAgIHRlYXJkb3duQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xs
U25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQpOwotfQotCi12b2lkIFNjcm9sbFNuYXBBbmlt
YXRvclN0YXRlOjp0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSBzdGF0
ZSkKLXsKLSAgICBBU1NFUlQoc3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpVc2VySW50ZXJhY3Rp
b24gfHwgc3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQpOwotICAg
IGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBzdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9t
b21lbnR1bUNhbGN1bGF0b3IgPSBudWxscHRyOwotICAgIG1fc3RhcnRUaW1lID0gTW9ub3Rvbmlj
VGltZSgpOwotICAgIG1fY3VycmVudFN0YXRlID0gc3RhdGU7Ci19Ci0KLUZsb2F0UG9pbnQgU2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGU6OmN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChib29sJiBp
c0FuaW1hdGlvbkNvbXBsZXRlKSBjb25zdAotewotICAgIGlmICghbV9tb21lbnR1bUNhbGN1bGF0
b3IpIHsKLSAgICAgICAgaXNBbmltYXRpb25Db21wbGV0ZSA9IHRydWU7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotCi0gICAgU2Vjb25kcyBlbGFwc2VkVGltZSA9IE1vbm90b25pY1RpbWU6
Om5vdygpIC0gbV9zdGFydFRpbWU7Ci0gICAgaXNBbmltYXRpb25Db21wbGV0ZSA9IGVsYXBzZWRU
aW1lID49IG1fbW9tZW50dW1DYWxjdWxhdG9yLT5hbmltYXRpb25EdXJhdGlvbigpOwotICAgIHJl
dHVybiBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2Nyb2xsT2Zmc2V0QWZ0ZXJFbGFwc2VkVGltZShl
bGFwc2VkVGltZSk7Ci19Ci0KLWZsb2F0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0YXJnZXRP
ZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgbWF4U2Nyb2xs
T2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRl
eCkgY29uc3QKLXsKLSAgICBMYXlvdXRVbml0IHByb3Bvc2VkT2Zmc2V0OwotICAgIHN0ZDo6dGll
KHByb3Bvc2VkT2Zmc2V0LCBvdXRBY3RpdmVTbmFwSW5kZXgpID0gbV9zbmFwT2Zmc2V0c0luZm8u
Y2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgTGF5b3V0VW5pdChwcmVkaWN0ZWRPZmZzZXQgLyBwYWdl
U2NhbGUpLCBpbml0aWFsRGVsdGEpOwotICAgIGlmIChvdXRBY3RpdmVTbmFwSW5kZXggIT0gaW52
YWxpZFNuYXBPZmZzZXRJbmRleCkKLSAgICAgICAgcmV0dXJuIHBhZ2VTY2FsZSAqIHByb3Bvc2Vk
T2Zmc2V0OwotICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihzdGFydE9mZnNldCwgMCwgbWF4U2Ny
b2xsT2Zmc2V0KTsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHN0YXRlKQotewotICAgIHRzIDw8ICJTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZSI7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMg
eCIsIHN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyB5Iiwgc3RhdGUuc25hcE9mZnNl
dHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKLSAgICBpZiAoIXN0YXRlLnNu
YXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkuaXNFbXB0
eSgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyByYW5nZXMgeCIsIHN0
YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkp
OwotICAgIGlmICghc3RhdGUuc25hcE9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpWZXJ0aWNhbCkuaXNFbXB0eSgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zm
c2V0cyByYW5nZXMgeSIsIHN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwpKTsKLQotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWN0aXZlIHNuYXAgaW5k
ZXggeCIsIHN0YXRlLmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhY3RpdmUgc25hcCBpbmRleCB5Iiwgc3Rh
dGUuYWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7Ci0K
LSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IENTU19TQ1JPTExfU05BUApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAppbmRleCBlMmU1MWZkMGEwNjBk
YWQyMWIyZDIxYTUyODVkNDBkNDczYmM1MjZhLi41ZGVkM2EwODdkYTMyYzg1MDMwZDhkYjg1MjI5
NTc5YTQ5OWQyODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xORU9OLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxD
b250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkZTgxZTA2ZjYzOGU5Yzc3MGQ4NzQ4NjUzYjBjNWZl
NjExYzRlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQ29udHJvbGxlci5tbQpAQCAtMCwwICsxLDgwOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTY3JvbGxDb250cm9sbGVyLmgiCisKKyNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2ltcG9ydCAi
V2hlZWxFdmVudFRlc3RNb25pdG9yLmgiCisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU1Njcm9sbFZp
ZXdTUEkuaD4KKyNpbXBvcnQgPHN5cy9zeXNjdGwuaD4KKyNpbXBvcnQgPHN5cy90aW1lLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKKyNpZiBQTEFURk9STShNQUMpICYmIChF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1NfU0NST0xMX1NOQVApKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCitzdGF0aWMgY29u
c3QgU2Vjb25kcyBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0ID0gMTAwX21zOworc3RhdGlj
IGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvID0gMTsKK3N0
YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJl
dGNoID0gMTA7CisjZW5kaWYKKworc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0
YShmbG9hdCBpbml0aWFsUG9zaXRpb24sIGZsb2F0IGluaXRpYWxWZWxvY2l0eSwgU2Vjb25kcyBl
bGFwc2VkVGltZSkKK3sKKyAgICByZXR1cm4gX05TRWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGlu
aXRpYWxQb3NpdGlvbiwgaW5pdGlhbFZlbG9jaXR5LCBlbGFwc2VkVGltZS5zZWNvbmRzKCkpOwor
fQorCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGZsb2F0IGRlbHRh
KQoreworICAgIHJldHVybiBfTlNFbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZGVsdGEpOwor
fQorCitzdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRh
KQoreworICAgIHJldHVybiBfTlNSZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZGVsdGEpOwor
fQorCitzdGF0aWMgZmxvYXQgc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCkKK3sKKyAgICBzdGF0aWMg
ZmxvYXQgbXVsdGlwbGllciA9IC0xOworICAgIGlmIChtdWx0aXBsaWVyIDwgMCkgeworICAgICAg
ICBtdWx0aXBsaWVyID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZmxv
YXRGb3JLZXk6QCJOU1Njcm9sbFdoZWVsTXVsdGlwbGllciJdOworICAgICAgICBpZiAobXVsdGlw
bGllciA8PSAwKQorICAgICAgICAgICAgbXVsdGlwbGllciA9IDE7CisgICAgfQorICAgIHJldHVy
biBtdWx0aXBsaWVyOworfQorCitTY3JvbGxDb250cm9sbGVyOjp+U2Nyb2xsQ29udHJvbGxlcigp
Cit7CisgICAgQVNTRVJUKG1fdGltZXJzV2VyZVN0b3BwZWQpOworfQorCit2b2lkIFNjcm9sbENv
bnRyb2xsZXI6OnN0b3BBbGxUaW1lcnMoKQoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
KyAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKQorICAgICAgICBtX3NuYXBSdWJiZXJiYW5k
VGltZXItPnN0b3AoKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAg
ICBpZiAobV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyKQorICAgICAgICBtX3N0YXRlbGVz
c1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3AoKTsKKworICAgIGlmIChtX3Njcm9sbFNuYXBUaW1l
cikKKyAgICAgICAgbV9zY3JvbGxTbmFwVGltZXItPnN0b3AoKTsKKyNlbmRpZgorCisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICBtX3RpbWVyc1dlcmVTdG9wcGVkID0gdHJ1ZTsKKyNlbmRpZgorfQor
Citib29sIFNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisg
ICAgaWYgKHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3aGVlbEV2ZW50KSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlOjpNYXlCZWdpbiB8fCB3aGVlbEV2ZW50LnBoYXNlKCkgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZTo6QmVnYW4pIHsKKyAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBkZWNpZGUgaWYgYSBnZXN0
dXJlIGlzIGhvcml6b250YWwgb3IgdmVydGljYWwgYXQgdGhlICJiZWdhbiIgcGhhc2UgaXMgdmVy
eSBlcnJvci1wcm9uZS4KKyAgICAgICAgYXV0byBkaXJlY3Rpb24gPSBkaXJlY3Rpb25Gcm9tRXZl
bnQod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICAgICAgaWYg
KGRpcmVjdGlvbiAmJiBtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZSgt
d2hlZWxFdmVudC5kZWx0YVgoKSwgMCkpICYmICFzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24o
ZGlyZWN0aW9uLnZhbHVlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGRpcmVjdGlvbiA9IGRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsKTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiAmJiBtX2NsaWVudC5pc1Bpbm5l
ZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZSgwLCAtd2hlZWxFdmVudC5kZWx0YVkoKSkpICYmICFz
aG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0g
ZmFsc2U7CisgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgICAg
IG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0geyB9OworICAgICAgICBtX21vbWVudHVt
VmVsb2NpdHkgPSB7IH07CisKKyAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGll
bnQuc3RyZXRjaEFtb3VudCgpOworICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0
aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC53aWR0aCgpKSk7Cisg
ICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFz
dGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWlnaHQoKSkpOworICAgICAgICBtX292ZXJmbG93U2Ny
b2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKworICAgICAgICBzdG9wU25hcFJ1YmJlcmJhbmRUaW1l
cigpOworICAgICAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZTo6RW5kZWQpIHsKKyAgICAgICAgc25hcFJ1YmJlckJhbmQoKTsKKyAgICAg
ICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGJvb2wgaXNNb21lbnR1bVNjcm9sbEV2ZW50ID0gKHdoZWVsRXZlbnQubW9tZW50
dW1QaGFzZSgpICE9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpOb25lKTsKKyAgICBpZiAobV9p
Z25vcmVNb21lbnR1bVNjcm9sbHMgJiYgKGlzTW9tZW50dW1TY3JvbGxFdmVudCB8fCBtX3NuYXBS
dWJiZXJiYW5kVGltZXIpKSB7CisgICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2Uo
KSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQpIHsKKyAgICAgICAgICAgIG1faWdu
b3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChpc01vbWVudHVtU2Nyb2xsRXZlbnQgJiYgbV9pZ25vcmVN
b21lbnR1bVNjcm9sbHMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgZmxvYXQgZGVsdGFYID0gbV9vdmVyZmxvd1Njcm9sbERl
bHRhLndpZHRoKCk7CisgICAgZmxvYXQgZGVsdGFZID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLmhl
aWdodCgpOworCisgICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVzIGJlY2F1c2Ugd2UgbWF5IGRl
Y2lkZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMgYW5kIHB1dCBpdCBpbnRvIG92
ZXJmbG93LgorICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworCisgICAg
SW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpOworICAgIGJv
b2wgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkID0gc3RyZXRjaEFtb3VudC5oZWlnaHQoKTsKKyAgICBi
b29sIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gc3RyZXRjaEFtb3VudC53aWR0aCgpOworCisg
ICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVg7CisgICAgZmxvYXQgZXZlbnRDb2FsZXNjZWRE
ZWx0YVk7CisKKyAgICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVkIHx8IGlzSG9yaXpvbnRhbGx5
U3RyZXRjaGVkKSB7CisgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQu
dW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCgpOworICAgICAgICBldmVudENvYWxlc2NlZERl
bHRhWSA9IC13aGVlbEV2ZW50LnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRh
WCgpOworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgp
OworICAgIH0KKworICAgIGRlbHRhWCArPSBldmVudENvYWxlc2NlZERlbHRhWDsKKyAgICBkZWx0
YVkgKz0gZXZlbnRDb2FsZXNjZWREZWx0YVk7CisKKyAgICAvLyBTbGlnaHRseSBwcmVmZXIgc2Ny
b2xsaW5nIHZlcnRpY2FsbHkgYnkgYXBwbHlpbmcgdGhlID0gY2FzZSB0byBkZWx0YVkKKyAgICAv
LyBGSVhNRTogVXNlIHdoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKCkuCisgICAgaWYg
KGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAg
ICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICBib29sIHNob3VsZFN0cmV0Y2ggPSBm
YWxzZTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UgPSB3aGVl
bEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsKKworICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBtb21l
bnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBzb21lIHNldHVwLgorICAgIGlmICghbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgJiYgKG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2U6OkJlZ2FuIHx8IG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNo
YW5nZWQpKQorICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IHRydWU7CisKKyAg
ICBhdXRvIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCkgLSBtX2xhc3RNb21lbnR1
bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9sbEdlc3R1cmUgfHwgbV9tb21lbnR1
bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1fbGFzdE1vbWVudHVtU2Nyb2xsVGlt
ZXN0YW1wICYmIHRpbWVEZWx0YSA+IDBfcyAmJiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxvY2l0eVpl
cm9pbmdUaW1lb3V0KSB7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0V2lkdGgo
ZXZlbnRDb2FsZXNjZWREZWx0YVggLyB0aW1lRGVsdGEuc2Vjb25kcygpKTsKKyAgICAgICAgICAg
IG1fbW9tZW50dW1WZWxvY2l0eS5zZXRIZWlnaHQoZXZlbnRDb2FsZXNjZWREZWx0YVkgLyB0aW1l
RGVsdGEuc2Vjb25kcygpKTsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0
YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAo
KTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkgeworICAgICAgICAgICAg
aWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9s
bERlbHRhKEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgeworICAgICAgICAgICAgICAgIC8vIFN0cmV0
Y2hpbmcgb25seSBpbiB0aGUgdmVydGljYWwuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAm
JiAoZmFic2YoZGVsdGFYIC8gZGVsdGFZKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRj
aFJhdGlvKSkKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRh
QmVmb3JlU3RyZXRjaCkgeworICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVs
dGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOworICAg
ICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxv
d1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7CisgICAgICAgICAgICAvLyBTdHJl
dGNoaW5nIG9ubHkgaW4gdGhlIGhvcml6b250YWwuCisgICAgICAgICAgICBpZiAobV9jbGllbnQu
aXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoMCwgZGVsdGFZKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZGVsdGFYICYmIChmYWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFu
ZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkg
PSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5k
TWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhl
aWdodCgpICsgZGVsdGFZKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm90IHN0cmV0
Y2hpbmcgYXQgYWxsIHlldC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudC5pc1Bpbm5lZEZvclNj
cm9sbERlbHRhKEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9y
ZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0
aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxvd3NIb3Jpem9udGFsU3Ry
ZXRjaGluZyh3aGVlbEV2ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKwor
ICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKHdo
ZWVsRXZlbnQpKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworCisgICAgICAgICAg
ICAgICAgc2hvdWxkU3RyZXRjaCA9IGRlbHRhWCB8fCBkZWx0YVk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwg
IlNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQoKSAtIGRlbHRhWCAiIDw8IGRlbHRh
WCA8PCAiIGRlbHRhWSAiIDw8IGRlbHRhWSA8PCAiIHBpbm5lZCAiIDw8IG1fY2xpZW50LmlzUGlu
bmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSkgPDwgIiBzaG91bGRT
dHJldGNoICIgPDwgc2hvdWxkU3RyZXRjaCk7CisgICAgfQorCisgICAgYm9vbCBoYW5kbGVkID0g
dHJ1ZTsKKworICAgIGlmIChkZWx0YVggfHwgZGVsdGFZKSB7CisgICAgICAgIGlmICghKHNob3Vs
ZFN0cmV0Y2ggfHwgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkIHx8IGlzSG9yaXpvbnRhbGx5U3RyZXRj
aGVkKSkgeworICAgICAgICAgICAgaWYgKGRlbHRhWSkgeworICAgICAgICAgICAgICAgIGRlbHRh
WSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC5p
bW1lZGlhdGVTY3JvbGxCeShGbG9hdFNpemUoMCwgZGVsdGFZKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZGVsdGFYKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9s
bFdoZWVsTXVsdGlwbGllcigpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNj
cm9sbEJ5KEZsb2F0U2l6ZShkZWx0YVgsIDApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChkZWx0YVgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50LmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVz
Y2VkRGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmICFtX2Ns
aWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgeworICAg
ICAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVu
dEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoZGVsdGFYLCAwKSk7CisgICAgICAgICAgICAgICAg
ICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZGVsdGFZKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxv
d3NWZXJ0aWNhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAw
OworICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICghaXNWZXJ0aWNhbGx5U3RyZXRjaGVkICYmICFtX2NsaWVudC5pc1Bpbm5lZEZv
clNjcm9sbERlbHRhKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKSkgeworICAgICAgICAgICAgICAgICAg
ICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50
cyhGbG9hdFNpemUoMCwgZGVsdGFZKSk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJbnRTaXpl
IHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7CisKKyAgICAgICAgICAg
IGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgeworICAgICAgICAgICAgICAgIGlmICgo
bV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoZXZlbnRDb2FsZXNjZWRE
ZWx0YVgsIGV2ZW50Q29hbGVzY2VkRGVsdGFZKSkgfHwgKGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVs
dGFYKSArIGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9tZW50
dW1TY3JvbGxUaW1lc3RhbXApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1
bVNjcm9sbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9zdHJldGNo
U2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRh
WCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNo
U2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0YVkpOworCisgICAgICAgICAgICBGbG9hdFNpemUg
ZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNj
cm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1f
c3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOworCisgICAgICAgICAgICBtX2NsaWVudC5p
bW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGRhbXBlZERlbHRh
IC0gc3RyZXRjaEFtb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9tb21lbnR1
bVNjcm9sbEluUHJvZ3Jlc3MgJiYgbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZTo6RW5kZWQpIHsKKyAgICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxz
ZTsKKyAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKKyAgICAgICAgbV9s
YXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB7IH07CisgICAgfQorCisgICAgdXBkYXRlUnVi
YmVyQmFuZGluZ1N0YXRlKCk7CisKKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKworRmxvYXRTaXpl
IFNjcm9sbENvbnRyb2xsZXI6OndoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBhdXRvIGRlbHRhWCA9IHdo
ZWVsRXZlbnQuZGVsdGFYKCk7CisgICAgYXV0byBkZWx0YVkgPSB3aGVlbEV2ZW50LmRlbHRhWSgp
OworCisgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVs
dGFYID0gMDsKKyAgICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICByZXR1cm4geyBk
ZWx0YVgsIGRlbHRhWSB9OworfQorCitPcHRpb25hbDxTY3JvbGxEaXJlY3Rpb24+IFNjcm9sbENv
bnRyb2xsZXI6OmRpcmVjdGlvbkZyb21FdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQsIE9wdGlvbmFsPFNjcm9sbEV2ZW50QXhpcz4gYXhpcywgV2hlZWxBeGlzQmlhcyBi
aWFzKQoreworICAgIC8vIEZJWE1FOiBJdCdzIGltcG9zc2libGUgdG8gaW5mZXIgZGlyZWN0aW9u
IGZyb20gYSBzaW5nbGUgZXZlbnQsIHNpbmNlIHRoZSBzdGFydCBvZiBhIGdlc3R1cmUgaXMgZWl0
aGVyIHplcm8gb3IKKyAgICAvLyBoYXMgc21hbGwgZGVsdGFzIG9uIGJvdGggYXhlcy4KKworICAg
IGF1dG8gd2hlZWxEZWx0YSA9IEZsb2F0U2l6ZSB7IHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVs
RXZlbnQuZGVsdGFZKCkgfTsKKyAgICBpZiAoYmlhcyA9PSBXaGVlbEF4aXNCaWFzOjpWZXJ0aWNh
bCkKKyAgICAgICAgd2hlZWxEZWx0YSA9IHdoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2Fs
KHdoZWVsRXZlbnQpOworCisgICAgaWYgKGF4aXMpIHsKKyAgICAgICAgc3dpdGNoIChheGlzLnZh
bHVlKCkpIHsKKyAgICAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOgorICAgICAg
ICAgICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVy
biBTY3JvbGxEb3duOworCisgICAgICAgICAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA+IDAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbFVwOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6CisgICAgICAgICAgICBp
ZiAod2hlZWxEZWx0YS53aWR0aCgpID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xs
TGVmdDsKKworICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEud2lkdGgoKSA8IDApCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBDaGVjayBZIGZpcnN0IGJlY2F1c2UgdmVy
dGljYWwgc2Nyb2xsaW5nIGRvbWluYXRlcy4KKyAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA8
IDApCisgICAgICAgIHJldHVybiBTY3JvbGxEb3duOworCisgICAgaWYgKHdoZWVsRGVsdGEuaGVp
Z2h0KCkgPiAwKQorICAgICAgICByZXR1cm4gU2Nyb2xsVXA7CisKKyAgICBpZiAod2hlZWxEZWx0
YS53aWR0aCgpID4gMCkKKyAgICAgICAgcmV0dXJuIFNjcm9sbExlZnQ7CisKKyAgICBpZiAod2hl
ZWxEZWx0YS53aWR0aCgpIDwgMCkKKyAgICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OworCisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKK3N0
YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKK3sKKyAgICByZXR1
cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSArIDAuNWYpOworfQor
CitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZmxvYXQg
bnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsKKyAgICBpZiAoZmFi
cyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAgICBudW0gPSByb3VuZGVkTnVtOwor
CisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOworfQorCit2b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpCit7CisgICAgaWYgKGlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRU
aW1lckZpcmVkKCkgLSBtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpKTsKKworICAgIGlm
ICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMp
IHsKKyAgICAgICAgYXV0byB0aW1lRGVsdGEgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fc3Rh
cnRUaW1lOworCisgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaC5pc1plcm8oKSkgeworICAgICAg
ICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7CisgICAgICAg
ICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICBzdG9wUnViYmVyYmFuZGluZygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7
CisKKyAgICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVy
dGljYWwgcnViYmVyYmFuZGluZworICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5
LmhlaWdodCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKKyAgICAgICAgICAg
ICAgICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKKworICAgICAgICAgICAgLy8gRG9uJ3Qg
cnViYmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBo
b3Jpem9udGFsbHkKKyAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzSG9yaXpvbnRhbFNj
cm9sbGluZygpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwor
CisgICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90
IHBvc3NpYmxlIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50
LmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICAgICAgbV9vcmlnVmVsb2Np
dHkuc2V0SGVpZ2h0KDApOworICAgICAgICB9CisKKyAgICAgICAgRmxvYXRQb2ludCBkZWx0YShy
b3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0
YXJ0U3RyZXRjaC53aWR0aCgpLCAtbV9vcmlnVmVsb2NpdHkud2lkdGgoKSwgdGltZURlbHRhKSks
CisgICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZv
clRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdo
dCgpLCB0aW1lRGVsdGEpKSk7CisKKyAgICAgICAgaWYgKGZhYnMoZGVsdGEueCgpKSA+PSAxIHx8
IGZhYnMoZGVsdGEueSgpKSA+PSAxKSB7CisgICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVT
Y3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShkZWx0YS54KCks
IGRlbHRhLnkoKSkgLSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCkpOworCisgICAgICAgICAgICBG
bG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKTsKKworICAgICAg
ICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3Rp
Y0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xs
Rm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLmhl
aWdodCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2NsaWVudC5hZGp1c3RT
Y3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIHN0b3BSdWJi
ZXJiYW5kaW5nKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX3N0YXJ0VGlt
ZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IHsgfTsK
KyAgICAgICAgaWYgKCFpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSkKKyAgICAgICAg
ICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7CisgICAgfQorCisgICAgdXBkYXRlUnViYmVy
QmFuZGluZ1N0YXRlKCk7Cit9CisjZW5kaWYKKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY3Jv
bGxQb3NpdGlvbkNoYW5nZWQoKQoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICB1
cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKKyNlbmRpZgorfQorCitib29sIFNjcm9sbENvbnRy
b2xsZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIHJldHVybiBtX2lu
U2Nyb2xsR2VzdHVyZTsKK30KKworYm9vbCBTY3JvbGxDb250cm9sbGVyOjppc1J1YmJlckJhbmRJ
blByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgcmV0
dXJuIG1faXNSdWJiZXJCYW5kaW5nOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
K30KKworYm9vbCBTY3JvbGxDb250cm9sbGVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29u
c3QKK3sKKyAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKG1faW5TY3JvbGxHZXN0dXJl
IHx8IG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8IG1fc2Nyb2xsU25hcFRpbWVyKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBT
Y3JvbGxDb250cm9sbGVyOjpzdG9wUnViYmVyYmFuZGluZygpCit7CisjaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQorICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7CisgICAgbV9zdHJldGNo
U2Nyb2xsRm9yY2UgPSB7IH07CisgICAgbV9zdGFydFRpbWUgPSB7IH07CisgICAgbV9zdGFydFN0
cmV0Y2ggPSB7IH07CisgICAgbV9vcmlnVmVsb2NpdHkgPSB7IH07CisgICAgdXBkYXRlUnViYmVy
QmFuZGluZ1N0YXRlKCk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
K3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCkKK3sKKyAg
ICBtX2NsaWVudC53aWxsU3RhcnRSdWJiZXJCYW5kU25hcEFuaW1hdGlvbigpOworCisgICAgLy8g
TWFrZSBhIG5ldyBvbmUgZWFjaCB0aW1lIHRvIGVuc3VyZSBpdCBmaXJlcyBvbiB0aGUgY3VycmVu
dCBSdW5Mb29wLgorICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lciA9IG1fY2xpZW50LmNyZWF0ZVRp
bWVyKFt0aGlzXSB7CisgICAgICAgIHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpOworICAgIH0p
OworICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lci0+c3RhcnRSZXBlYXRpbmcoMV9zIC8gNjAuKTsK
KworICAgIG1fY2xpZW50LmRlZmVyV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRm9yUmVhc29uKHJl
aW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50
aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlJ1YmJlcmJhbmRJblByb2dyZXNz
KTsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigp
Cit7CisgICAgbV9jbGllbnQuZGlkU3RvcFJ1YmJlcmJhbmRTbmFwQW5pbWF0aW9uKCk7CisKKyAg
ICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKSB7CisgICAgICAgIG1fc25hcFJ1YmJlcmJhbmRU
aW1lci0+c3RvcCgpOworICAgICAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXIgPSBudWxscHRyOwor
ICAgIH0KKworICAgIG1fY2xpZW50LnJlbW92ZVdoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkRlZmVy
cmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3Jv
bGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlJ1YmJl
cmJhbmRJblByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVy
QmFuZCgpCit7CisgICAgYXV0byB0aW1lRGVsdGEgPSBXYWxsVGltZTo6bm93KCkgLSBtX2xhc3RN
b21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1l
c3RhbXAgJiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCisgICAg
ICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IHsgfTsKKworICAgIGlmIChtX3NuYXBSdWJiZXJiYW5k
VGltZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CisgICAgbV9zdGFydFN0cmV0Y2ggPSB7IH07CisgICAgbV9vcmlnVmVsb2NpdHkg
PSB7IH07CisKKyAgICBzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKK30KKworYm9vbCBTY3Jv
bGxDb250cm9sbGVyOjpzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkgY29uc3QKK3sKKyAgICBhdXRvIGRpcmVj
dGlvbiA9IGRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwpOworICAgIGlmIChkaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBzaG91bGRSdWJi
ZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgU2Nyb2xsQ29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9u
KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xpZW50
LnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24pOworfQorCitib29sIFNjcm9s
bENvbnRyb2xsZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3NJbnRlcm5hbCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2luU2Nyb2xsR2VzdHVyZSAmJiAhbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3Mg
JiYgIW1fc25hcFJ1YmJlcmJhbmRUaW1lcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuICFtX2NsaWVudC5zdHJldGNoQW1vdW50KCkuaXNaZXJvKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCkKK3sKKyAgICBib29sIGlz
UnViYmVyQmFuZGluZyA9IGlzUnViYmVyQmFuZEluUHJvZ3Jlc3NJbnRlcm5hbCgpOworICAgIGlm
IChpc1J1YmJlckJhbmRpbmcgPT0gbV9pc1J1YmJlckJhbmRpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faXNSdWJiZXJCYW5kaW5nID0gaXNSdWJiZXJCYW5kaW5nOworICAgIGlmIChtX2lz
UnViYmVyQmFuZGluZykKKyAgICAgICAgdXBkYXRlUnViYmVyQmFuZGluZ0VkZ2VzKG1fY2xpZW50
LnN0cmV0Y2hBbW91bnQoKSk7CisgICAgZWxzZQorICAgICAgICBtX3J1YmJlckJhbmRpbmdFZGdl
cyA9IHsgfTsKKworICAgIG1fY2xpZW50LnJ1YmJlckJhbmRpbmdTdGF0ZUNoYW5nZWQobV9pc1J1
YmJlckJhbmRpbmcpOworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJh
bmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0cmV0Y2gpCit7CisgICAgbV9ydWJiZXJCYW5kaW5n
RWRnZXMuc2V0TGVmdChjbGllbnRTdHJldGNoLndpZHRoKCkgPCAwKTsKKyAgICBtX3J1YmJlckJh
bmRpbmdFZGdlcy5zZXRSaWdodChjbGllbnRTdHJldGNoLndpZHRoKCkgPiAwKTsKKworICAgIG1f
cnViYmVyQmFuZGluZ0VkZ2VzLnNldFRvcChjbGllbnRTdHJldGNoLmhlaWdodCgpIDwgMCk7Cisg
ICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMuc2V0Qm90dG9tKGNsaWVudFN0cmV0Y2guaGVpZ2h0KCkg
PiAwKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShSVUJCRVJfQkFORElORykKKworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCitlbnVtIGNsYXNzIFdoZWVsRXZlbnRTdGF0dXMgeworICAgIFVz
ZXJTY3JvbGxCZWdpbiwKKyAgICBVc2VyU2Nyb2xsaW5nLAorICAgIFVzZXJTY3JvbGxFbmQsCisg
ICAgTW9tZW50dW1TY3JvbGxCZWdpbiwKKyAgICBNb21lbnR1bVNjcm9sbGluZywKKyAgICBNb21l
bnR1bVNjcm9sbEVuZCwKKyAgICBTdGF0ZWxlc3NTY3JvbGxFdmVudCwKKyAgICBVbmtub3duCit9
OworCitzdGF0aWMgaW5saW5lIFdoZWVsRXZlbnRTdGF0dXMgdG9XaGVlbEV2ZW50U3RhdHVzKFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlLCBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtb21l
bnR1bVBoYXNlKQoreworICAgIGlmIChwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6
Tm9uZSkgeworICAgICAgICBzd2l0Y2ggKG1vbWVudHVtUGhhc2UpIHsKKyAgICAgICAgY2FzZSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxF
dmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZDoKKyAgICAgICAgICAgIHJl
dHVybiBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbGluZzsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQ6CisgICAgICAg
ICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxFbmQ7CisKKyAgICAg
ICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9uZToKKyAgICAgICAgICAgIHJldHVy
biBXaGVlbEV2ZW50U3RhdHVzOjpTdGF0ZWxlc3NTY3JvbGxFdmVudDsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd247CisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2U6Ok5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChwaGFzZSkgeworICAgICAgICBjYXNlIFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlOjpCZWdhbjoKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZTo6TWF5QmVnaW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1
czo6VXNlclNjcm9sbEJlZ2luOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlOjpDaGFuZ2VkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgorICAgICAgICBjYXNlIFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlOjpDYW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0
YXR1czo6VXNlclNjcm9sbEVuZDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworfQorCisjaWYg
IUxPR19ESVNBQkxFRAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIFdoZWVsRXZlbnRTdGF0dXMgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3RhdHVzKSB7Cisg
ICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW46IHRzIDw8ICJVc2VyU2Ny
b2xsQmVnaW4iOyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxp
bmc6IHRzIDw8ICJVc2VyU2Nyb2xsaW5nIjsgYnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3Rh
dHVzOjpVc2VyU2Nyb2xsRW5kOiB0cyA8PCAiVXNlclNjcm9sbEVuZCI7IGJyZWFrOworICAgIGNh
c2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjogdHMgPDwgIk1vbWVudHVt
U2Nyb2xsQmVnaW4iOyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVt
U2Nyb2xsaW5nOiB0cyA8PCAiTW9tZW50dW1TY3JvbGxpbmciOyBicmVhazsKKyAgICBjYXNlIFdo
ZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsRW5kOiB0cyA8PCAiTW9tZW50dW1TY3JvbGxF
bmQiOyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlN0YXRlbGVzc1Njcm9sbEV2
ZW50OiB0cyA8PCAiU3RhdGVsZXNzU2Nyb2xsRXZlbnQiOyBicmVhazsKKyAgICBjYXNlIFdoZWVs
RXZlbnRTdGF0dXM6OlVua25vd246IHRzIDw8ICJVbmtub3duIjsgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiB0czsKK30KKyNlbmRpZgorCitib29sIFNjcm9sbENvbnRyb2xsZXI6OnNob3VsZE92
ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmICghdXNlc1Njcm9sbFNu
YXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2Nyb2xsU25hcFN0YXRlIHNjcm9s
bFNuYXBTdGF0ZSA9IG1fc2Nyb2xsU25hcFN0YXRlLT5jdXJyZW50U3RhdGUoKTsKKyAgICByZXR1
cm4gc2Nyb2xsU25hcFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8fCBzY3JvbGxT
bmFwU3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQ7Cit9CisKK3Zv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6c2NoZWR1bGVTdGF0ZWxlc3NTY3JvbGxTbmFwKCkKK3sKKyAg
ICBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7CisgICAgaWYgKG1fc3RhdGVsZXNzU25hcFRyYW5zaXRp
b25UaW1lcikgeworICAgICAgICBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3Ao
KTsKKyAgICAgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyID0gbnVsbHB0cjsKKyAg
ICB9CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBz
dGF0aWMgY29uc3QgU2Vjb25kcyBzdGF0ZWxlc3NTY3JvbGxTbmFwRGVsYXkgPSA3NTBfbXM7Cisg
ICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyID0gbV9jbGllbnQuY3JlYXRlVGltZXIo
W3RoaXNdIHsKKyAgICAgICAgc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lckZpcmVkKCk7Cisg
ICAgfSk7CisgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyLT5zdGFydE9uZVNob3Qo
c3RhdGVsZXNzU2Nyb2xsU25hcERlbGF5KTsKKyAgICBzdGFydERlZmVycmluZ1doZWVsRXZlbnRU
ZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKK30KKwordm9pZCBTY3JvbGxDb250
cm9sbGVyOjpzdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyRmlyZWQoKQoreworICAgIG1fc3Rh
dGVsZXNzU25hcFRyYW5zaXRpb25UaW1lciA9IG51bGxwdHI7CisKKyAgICBpZiAoIXVzZXNTY3Jv
bGxTbmFwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFu
c2l0aW9uVG9TbmFwQW5pbWF0aW9uU3RhdGUobV9jbGllbnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xp
ZW50LnZpZXdwb3J0U2l6ZSgpLCBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSwgbV9jbGllbnQu
c2Nyb2xsT2Zmc2V0KCkpOworICAgIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6c3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25E
dWVUb1Njcm9sbFNuYXBwaW5nKCkKK3sKKyAgICBtX2NsaWVudC5kZWZlcldoZWVsRXZlbnRUZXN0
Q29tcGxldGlvbkZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRv
cjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9y
OjpTY3JvbGxTbmFwSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3Rv
cERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKQor
eworICAgIG1fY2xpZW50LnJlbW92ZVdoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkRlZmVycmFsRm9y
UmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxl
QXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbFNuYXBJ
blByb2dyZXNzKTsKK30KKworYm9vbCBTY3JvbGxDb250cm9sbGVyOjpwcm9jZXNzV2hlZWxFdmVu
dEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQorewor
ICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsKS5pc0VtcHR5KCkgJiYgbV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBPZmZzZXRz
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gc3RhdHVzID0gdG9XaGVlbEV2ZW50U3RhdHVzKHdoZWVs
RXZlbnQucGhhc2UoKSwgd2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkpOworCisgICAgTE9HX1dJ
VEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8IHRo
aXMgPDwgIiBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXA6IHN0YXR1cyAiIDw8IHN0YXR1
cyk7CisKKyAgICBib29sIGlzTW9tZW50dW1TY3JvbGxpbmcgPSBmYWxzZTsKKyAgICBzd2l0Y2gg
KHN0YXR1cykgeworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOgor
ICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzoKKyAgICAgICAgc3RvcFNj
cm9sbFNuYXBUaW1lcigpOworICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRv
VXNlckludGVyYWN0aW9uU3RhdGUoKTsKKyAgICAgICAgbV9kcmFnRW5kZWRTY3JvbGxpbmdWZWxv
Y2l0eSA9IC13aGVlbEV2ZW50LnNjcm9sbGluZ1ZlbG9jaXR5KCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDoKKyAgICAgICAgbV9zY3Jv
bGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub1NuYXBBbmltYXRpb25TdGF0ZShtX2NsaWVudC5zY3Jv
bGxFeHRlbnQoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCksIG1fY2xpZW50LnBhZ2VTY2FsZUZh
Y3RvcigpLCBtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSk7CisgICAgICAgIHN0YXJ0U2Nyb2xsU25h
cFRpbWVyKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9t
ZW50dW1TY3JvbGxCZWdpbjoKKyAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25U
b0dsaWRlQW5pbWF0aW9uU3RhdGUobV9jbGllbnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZp
ZXdwb3J0U2l6ZSgpLCBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xs
T2Zmc2V0KCksIG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHksIEZsb2F0U2l6ZSgtd2hlZWxF
dmVudC5kZWx0YVgoKSwgLXdoZWVsRXZlbnQuZGVsdGFZKCkpKTsKKyAgICAgICAgbV9kcmFnRW5k
ZWRTY3JvbGxpbmdWZWxvY2l0eSA9IHsgfTsKKyAgICAgICAgaXNNb21lbnR1bVNjcm9sbGluZyA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50
dW1TY3JvbGxpbmc6CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEVu
ZDoKKyAgICAgICAgaXNNb21lbnR1bVNjcm9sbGluZyA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6U3RhdGVsZXNzU2Nyb2xsRXZlbnQ6CisgICAgICAg
IG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZSgpOwor
ICAgICAgICBzY2hlZHVsZVN0YXRlbGVzc1Njcm9sbFNuYXAoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGlzTW9tZW50dW1T
Y3JvbGxpbmcgJiYgc2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZygpOworfQorCit2b2lk
IFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUdlc3R1cmVJblByb2dyZXNzU3RhdGUoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmICh3aGVlbEV2ZW50LmlzR2Vz
dHVyZVN0YXJ0KCkgfHwgd2hlZWxFdmVudC5pc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xs
KCkpCisgICAgICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKKyAgICBlbHNlIGlmICh3aGVl
bEV2ZW50LmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIHx8IHdoZWVsRXZlbnQuaXNHZXN0dXJl
Q2FuY2VsKCkgfHwgd2hlZWxFdmVudC5pc0VuZE9mTW9tZW50dW1TY3JvbGwoKSkKKyAgICAgICAg
bV9pblNjcm9sbEdlc3R1cmUgPSBmYWxzZTsKKworICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0
ZSgpOworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKCkK
K3sKKyAgICBpZiAobV9zY3JvbGxTbmFwVGltZXIpCisgICAgICAgIHJldHVybjsKKworICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8
PCB0aGlzIDw8ICIgc3RhcnRTY3JvbGxTbmFwVGltZXIgKG1haW4gdGhyZWFkICIgPDwgaXNNYWlu
VGhyZWFkKCkgPDwgIikiKTsKKworICAgIHN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21w
bGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpOworICAgIG1fY2xpZW50LndpbGxTdGFydFNjcm9s
bFNuYXBBbmltYXRpb24oKTsKKyAgICBtX3Njcm9sbFNuYXBUaW1lciA9IG1fY2xpZW50LmNyZWF0
ZVRpbWVyKFt0aGlzXSB7CisgICAgICAgIHNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CisgICAgfSk7
CisgICAgbV9zY3JvbGxTbmFwVGltZXItPnN0YXJ0UmVwZWF0aW5nKDFfcyAvIDYwLik7Cit9CisK
K3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNjcm9sbFNuYXBUaW1lcigpCit7CisgICAgaWYg
KCFtX3Njcm9sbFNuYXBUaW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwg
IiBzdG9wU2Nyb2xsU25hcFRpbWVyIChtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8
ICIpIik7CisKKyAgICBzdG9wRGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9T
Y3JvbGxTbmFwcGluZygpOworICAgIG1fY2xpZW50LmRpZFN0b3BTY3JvbGxTbmFwQW5pbWF0aW9u
KCk7CisKKyAgICBtX3Njcm9sbFNuYXBUaW1lci0+c3RvcCgpOworICAgIG1fc2Nyb2xsU25hcFRp
bWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxTbmFwVGlt
ZXJGaXJlZCgpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBpc0Fu
aW1hdGlvbkNvbXBsZXRlOworICAgIGF1dG8gYW5pbWF0aW9uT2Zmc2V0ID0gbV9zY3JvbGxTbmFw
U3RhdGUtPmN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChpc0FuaW1hdGlvbkNvbXBsZXRlKTsK
KyAgICBhdXRvIGN1cnJlbnRPZmZzZXQgPSBtX2NsaWVudC5zY3JvbGxPZmZzZXQoKTsKKworICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIg
IiA8PCB0aGlzIDw8ICIgc2Nyb2xsU25hcFRpbWVyRmlyZWQgLSBpc0FuaW1hdGlvbkNvbXBsZXRl
ICIgPDwgaXNBbmltYXRpb25Db21wbGV0ZSA8PCAiIGN1cnJlbnRPZmZzZXQgIiA8PCBjdXJyZW50
T2Zmc2V0IDw8ICIgKG1haW4gdGhyZWFkICIgPDwgaXNNYWluVGhyZWFkKCkgPDwgIikiKTsKKwor
ICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWlu
dHMoRmxvYXRTaXplKGFuaW1hdGlvbk9mZnNldC54KCkgLSBjdXJyZW50T2Zmc2V0LngoKSwgYW5p
bWF0aW9uT2Zmc2V0LnkoKSAtIGN1cnJlbnRPZmZzZXQueSgpKSk7CisgICAgaWYgKGlzQW5pbWF0
aW9uQ29tcGxldGUpIHsKKyAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub0Rl
c3RpbmF0aW9uUmVhY2hlZFN0YXRlKCk7CisgICAgICAgIHN0b3BTY3JvbGxTbmFwVGltZXIoKTsK
KyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKworCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJCRVJfQkFORElORykgfHwg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZU1hYy5tbQppbmRleCAyYzExZjdl
ZjUyZTA2MTRlNWYzNjI5YjRhMWUwY2FmZmU5YzI1ZDMzLi4yNGVkZTk0Yzg0ODYyMDNiNjA2MWE3
ZjcxY2EwZTc3MTdhOTk2ODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KQEAgLTQwLDYgKzQwLDcg
QEAKICNpbXBvcnQgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+CiAj
aW1wb3J0IDxwYWwvc3BpL2NvY29hL0FWS2l0U1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9Q
SVBTUEkuaD4KKyNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAKICNpbXBvcnQgPHBhbC9jZi9Db3Jl
TWVkaWFTb2Z0TGluay5oPgogCg==
</data>
<flag name="commit-queue"
          id="438771"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420303</attachid>
            <date>2021-02-15 04:32:38 -0800</date>
            <delta_ts>2021-02-15 05:21:41 -0800</delta_ts>
            <desc>Diff handling file move</desc>
            <filename>file-tracking-diff.diff</filename>
            <type>text/plain</type>
            <size>42835</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">Y29tbWl0IDA0OGY2ZTdjMDkzMjljNTkzZjAzMGMxYTJjNmEwODExNWNjZTQ3YzcKQXV0aG9yOiBN
YXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3JnPgpEYXRlOiAgIE1vbiBGZWIgMTUg
MTM6Mjg6MzcgMjAyMSArMDEwMAoKICAgIFB1bGwgTWFjLW9ubHkgY29kZSBvdXQgb2YgU2Nyb2xs
Q29udHJvbGxlcgogICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MTQ2MgogICAgPHJkYXI6Ly9wcm9ibGVtLzc0MjczODUzPgogICAgCiAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KICAgIAogICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hh
bmdlIGJlaGF2aW9yLgogICAgCiAgICBTcGxpdCBvdXQgTWFjLXNwZWNpZmljIGNvZGUgZnJvbSBT
Y3JvbGxDb250cm9sbGVyIGFuZCBwcmVwYXJlIGl0IGZvciB1c2Ugb24KICAgIG5vbi1Db2NvYSBw
bGF0Zm9ybXMuIFRoaXMgY29kZSBtdXN0IGJlIHB1bGxlZCBvdXQgcHJpbWFyaWx5IGJlY2F1c2Ug
aXQgaXMKICAgIE9iamVjdGl2ZS1DKysgY29kZSBhbmQgc2hvdWxkIG1haW50YWluIHRoZSAubW0g
ZXh0ZW5zaW9uLiBUaGUgaWRlYSBoZXJlIGlzIHRvCiAgICBpc29sYXRlIHRoZSBiYXNpYyBwbGF0
Zm9ybS1pbmRlcGVuZGVudCBzY3JvbGwgc25hcHBpbmcgY29kZSBhbmQgZ3JhZHVhbGx5IG1ha2UK
ICAgIHRoZSByZXN0IChyZWxhdGVkIHRvIGhhbmRsaW5nIHdoZWVsIGV2ZW50cykgbW9yZS1hbmQt
bW9yZSBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KICAgIAogICAgKiBQbGF0Zm9ybU1hYy5jbWFrZTog
VXBkYXRlIHNvdXJjZSBsaXN0LgogICAgKiBTb3VyY2VzLnR4dDogRGl0dG8uCiAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6IERpdHRvLgogICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgogICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcDogQWRkZWQuCiAg
ICBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgcGxhdGZvcm0taW5kZXBlbmRlbnQgc2Nyb2xs
IHNuYXBwaW5nIGNvZGUgdGhhdCB3aWxsIGJlCiAgICB1c2VkIHRvIGFkZCBpbml0aWFsIHNjcm9s
bCBzbmFwIHN1cHBvcnQgdG8gb3RoZXIgcG9ydHMuCiAgICAqIHBsYXRmb3JtL1Njcm9sbENvbnRy
b2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9s
bENvbnRyb2xsZXIuaC4KICAgICogcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUubW0uCiAgICAqIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oLgogICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRH
TENHLmNwcDogRml4IHVuaWZpZWQgc291cmNlIGJ1aWxkIGlzc3VlIGV4cG9zZWQgYnkgdGhpcwog
ICAgY2hhbmdlLgogICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbTogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0u
CiAgICAqIHBsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW06IEZpeCB1
bmlmaWVkIHNvdXJjZSBidWlsZCBpc3N1ZS4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRlNWY3YmZjZGMwLi5j
YmU1Y2MwYWE0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAyMS0wMi0xNSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUHVsbCBNYWMt
b25seSBjb2RlIG91dCBvZiBTY3JvbGxDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE0NjIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzc0MjczODUzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBzaG91bGQgbm90IGNoYW5nZSBiZWhhdmlvci4KKworICAg
ICAgICBTcGxpdCBvdXQgTWFjLXNwZWNpZmljIGNvZGUgZnJvbSBTY3JvbGxDb250cm9sbGVyIGFu
ZCBwcmVwYXJlIGl0IGZvciB1c2Ugb24KKyAgICAgICAgbm9uLUNvY29hIHBsYXRmb3Jtcy4gVGhp
cyBjb2RlIG11c3QgYmUgcHVsbGVkIG91dCBwcmltYXJpbHkgYmVjYXVzZSBpdCBpcworICAgICAg
ICBPYmplY3RpdmUtQysrIGNvZGUgYW5kIHNob3VsZCBtYWludGFpbiB0aGUgLm1tIGV4dGVuc2lv
bi4gVGhlIGlkZWEgaGVyZSBpcyB0bworICAgICAgICBpc29sYXRlIHRoZSBiYXNpYyBwbGF0Zm9y
bS1pbmRlcGVuZGVudCBzY3JvbGwgc25hcHBpbmcgY29kZSBhbmQgZ3JhZHVhbGx5IG1ha2UKKyAg
ICAgICAgdGhlIHJlc3QgKHJlbGF0ZWQgdG8gaGFuZGxpbmcgd2hlZWwgZXZlbnRzKSBtb3JlLWFu
ZC1tb3JlIHBsYXRmb3JtLWluZGVwZW5kZW50LgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21h
a2U6IFVwZGF0ZSBzb3VyY2UgbGlzdC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDogRGl0dG8uCisg
ICAgICAgICogU291cmNlc0NvY29hLnR4dDogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxD
b250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRo
ZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzY3JvbGwgc25hcHBpbmcgY29kZSB0aGF0IHdpbGwgYmUK
KyAgICAgICAgdXNlZCB0byBhZGQgaW5pdGlhbCBzY3JvbGwgc25hcCBzdXBwb3J0IHRvIG90aGVy
IHBvcnRzLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5t
bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENH
LmNwcDogRml4IHVuaWZpZWQgc291cmNlIGJ1aWxkIGlzc3VlIGV4cG9zZWQgYnkgdGhpcworICAg
ICAgICBjaGFuZ2UuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW06
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9s
bGVyLm1tLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMubW06IEZpeCB1bmlmaWVkIHNvdXJjZSBidWlsZCBpc3N1ZS4KKwogMjAyMS0wMi0xMiAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdIFVwZGF0ZSB0aGUg
YmxvY2sgYm94L2NvbnRhaW5lciBsaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDIy
ZDA0NjZlZTlmOC4uNzZkMGM5MzgwMjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAt
MzY4LDYgKzM2OCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L21hYy9SZW1vdGVDb21tYW5kTGlzdGVuZXJNYWMubW0KICAgICBwbGF0Zm9ybS9tYWMvU1NMS2V5
R2VuZXJhdG9yTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisg
ICAgcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0KICAgICBwbGF0Zm9ybS9tYWMvU2Ny
b2xsVmlld01hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQogICAg
IHBsYXRmb3JtL21hYy9TZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlTWFjLm1tCkBAIC01MTAsOCAr
NTExLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vY29jb2EvUGxhdGZvcm1WaWV3LmgKICAgICBwbGF0Zm9ybS9jb2NvYS9QbGF5
YmFja1Nlc3Npb25Nb2RlbC5oCiAgICAgcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQuaAotICAgIHBsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAot
ICAgIHBsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKICAgICBwbGF0Zm9y
bS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5oCiAgICAgcGxhdGZvcm0vY29jb2EvU3lzdGVt
QmF0dGVyeS5oCiAgICAgcGxhdGZvcm0vY29jb2EvU3lzdGVtVmVyc2lvbi5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDA0NWNmMjcwNmMwMy4uNjdhMTRhZmU4M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTc3
MSw2ICsxNzcxLDcgQEAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcAogcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAKK3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5j
cHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlLmNwcAogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZUhvc3RpbmdOb2RlLmNwcAogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCkBAIC0xODM5LDYgKzE4NDAsOCBA
QCBwbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwCiBwbGF0Zm9ybS9TU0xLZXlH
ZW5lcmF0b3IuY3BwCiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25TbW9vdGguY3BwCiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKK3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCitwbGF0
Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmNw
cAogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNzk3ZjUzMWM4NWY2Li4yZjBmZGVmZTkzYWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMTkwLDcgKzE5MCw2IEBAIHBhZ2UvbWFjL1BhZ2VN
YWMubW0KIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KIHBhZ2UvbWFjL1Rl
eHRJbmRpY2F0b3JXaW5kb3cubW0KIHBhZ2UvbWFjL1doZWVsRXZlbnREZWx0YUZpbHRlck1hYy5t
bQotcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yLmNwcAogcGFnZS9z
Y3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nU3RhdGVOb2RlLm1tCiBwYWdlL3Njcm9sbGluZy9jb2Nv
YS9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tCiBwYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxQcm94eU5vZGUubW0KQEAgLTI0OSw4ICsyNDgsNiBAQCBwbGF0
Zm9ybS9jb2NvYS9QbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbQogcGxhdGZvcm0vY29jb2EvUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KIHBsYXRmb3JtL2NvY29hL1Bvd2VyU291
cmNlTm90aWZpZXIubW0KIHBsYXRmb3JtL2NvY29hL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0Nv
Y29hLm1tCi1wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCi1wbGF0Zm9ybS9jb2Nv
YS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQogcGxhdGZvcm0vY29jb2EvU2VhcmNoUG9wdXBN
ZW51Q29jb2EubW0KIHBsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCiBwbGF0Zm9y
bS9jb2NvYS9TeXN0ZW1WZXJzaW9uLm1tCkBAIC01MDIsNiArNDk5LDcgQEAgcGxhdGZvcm0vbWFj
L1B1YmxpY1N1ZmZpeE1hYy5tbQogcGxhdGZvcm0vbWFjL1JlbW90ZUNvbW1hbmRMaXN0ZW5lck1h
Yy5tbQogcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQogcGxhdGZvcm0vbWFjL1Nj
cm9sbEFuaW1hdG9yTWFjLm1tIEBuby11bmlmeQorcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xs
ZXIubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCiBwbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyVGhlbWVNYWMubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3Jt
RGF0YUN1ZU1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDhjMTVlYjY0ODAzNy4uNzliNDIyYmNiZjUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjYs
NyArNTI2LDYgQEAKIAkJMUE5MjdGRDIxNDE2QTE1QjAwM0E4M0M4IC8qIG5wYXBpLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyN0ZDRjE0MTZBMTVC
MDAzQTgzQzggLyogbnBhcGkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxQTkyN0ZEMzE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyN0ZEMDE0MTZB
MTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE5MjdGRDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkQx
MTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUFBODRGMDUxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9s
bENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBQTg0RjAzMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBQUREQTQxNERC
NDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxp
bmdUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUFBQURERTQxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERFMjE0REM4QzhG
MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUIzM0RBNTEyNTUxRTMyMDAyNDQ1N0EgLyogSU9L
aXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFCMzNEQTQxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZyYW1ld29yayAqLzsgfTsK
QEAgLTE5NDEsNiArMTk0MCw4IEBACiAJCTVBNTc0RjI1MTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5k
ZXJRdW90ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUE1NzRGMjMxMzFEQjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmggKi87IH07CiAJCTVBNTc0
RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNzEzMURCOTZEMDA0NzFCODggLyogUXVv
dGVzRGF0YS5oICovOyB9OwogCQk1QjMwNjk1RTE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3
QnVmZmVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUIzMDY5NUIxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaCAqLzsgfTsKKwkJ
NUI0NjY1NjMyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDY2NTVGMjVEMTRDMDkwMDBD
RkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNUI0NjY1NjQyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNu
YXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QjQ2NjU2MDI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
QzJCMUFFQzIyMzk3RUJDMDBCOTFDRjcgLyogUmVzb3VyY2VSZXNwb25zZUNvY29hLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFGNzhEMEIxQzI1NDIy
QzAwMjQ1NDQ2IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSAqLzsgfTsKIAkJNUM0MzA0QjEx
OTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNDMwNEFFMTkxQUM5MDgwMDBFMkJDMCAv
KiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggKi87IH07CiAJCTVDNDMwNEI2MTkxQUVGNDYwMDBFMkJD
MCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDNDMwNEI0MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRl
clRleHR1cmVMT0QuaCAqLzsgfTsKQEAgLTUyNzUsNyArNTI3Niw2IEBACiAJCUY0NTc3NUNFMjQx
NDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1Nzc1Q0QyNDE0MzdENTAwMkRGMUEwIC8qIElubGlu
ZVBhdGhEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjQ2NzI5MjgxRTBERTY4NTAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ2NzI5MjUx
RTBERTVBQjAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBPZmZzZXRzSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0NkM0NDdFMjM0NjU0NTQwMDM5
QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDZDNDQ3QzIzNDY1NDU0MDAzOUE3OUQg
LyogQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5oICovOyB9OwotCQlGNDc4NzU1NDE5
OTgzQUZGMDAyNEEyODcgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4
NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0N0EwOUQxMjBBOTNBOTcwMDI0MEZBRSAvKiBEaXNh
YmxlZEFkYXB0YXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDdBMDlDRjIwQTkzOUY2MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0N0E1
RTNFMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0N0E1RTNCMTk1QjhDOEEwMDQ4
MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDdBNjMzRDFGRjZGRDUwMDA4MUIzQ0MgLyogUHJv
bWlzZWRBdHRhY2htZW50SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjQ3QTYzM0MxRkY2RkQ1MDAwODFCM0NDIC8qIFByb21pc2VkQXR0YWNobWVu
dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNjU5Nyw4ICs2NTk3LDYgQEAKIAkJMUE5MjdGQ0YxNDE2QTE1QjAwM0E4M0M4IC8qIG5wYXBp
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG5wYXBpLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBOTI3RkQwMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbnBydW50aW1lLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTI3RkQxMTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG5wdHlwZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBODRGMDIxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbENv
bnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3Jv
bGxDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUE4NEYwMzE0
M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JvbGxDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBQUFEREExMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERBMjE0REI0MDlGMDBBRjY0QjMgLyogU2Ny
b2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdU
cmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQUFEREUxMTREQzhDOEYwMEFG
NjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NDc5LDkgKzk0NzcsMTQgQEAKIAkJNUE1NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8q
IFF1b3Rlc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVv
dGVzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVBNTc0RjI3MTMxREI5
NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1b3Rlc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE5MTQ2OUU4
RTlGODQ4NUMzN0EyODc2IC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0dyYXBoaWNzRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCMUUwRTQzMjVEMTYyOUIwMDI3MjI4MSAvKiBTY3Jv
bGxDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsQ29udHJvbGxlci5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUIzMDY5NUExOEIzRDM0NTAwOTlENUU4
IC8qIFdlYkdMRHJhd0J1ZmZlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViR0xEcmF3QnVmZmVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVCMzA2OTVCMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMRHJhd0J1ZmZlcnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUIzMDY5NUMxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1
ZmZlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkdMRHJhd0J1ZmZlcnMuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQ2NjU1RDI1RDE0QzA5MDAwQ0ZFMTQgLyog
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1QjQ2NjU1RTI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0NjY1NUYyNUQxNEMwOTAwMENG
RTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2Nyb2xsQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQ2
NjU2MDI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3QUI5RjYyNTY3REI3RTAwNjU5MkQwIC8qIFNj
cm9sbFNuYXBPZmZzZXRzSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1QzAwMTUyMTI1MDAxMTAwMDA5NEFBOTMgLyogVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29kZWNTaW5nbGVCeXRl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwMDE1MjMyNTAwMTEwMTAwOTRB
QTkzIC8qIFRleHRDb2RlY1NpbmdsZUJ5dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dENvZGVjU2luZ2xlQnl0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTY2MTMsOCArMTY2MTYsNiBAQAogCQlGNDZDNDQ3RDIzNDY1NDU0MDAzOUE3OUQgLyogQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbGlw
Ym9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjQ2QzQ0ODAyMzQ2NTQ3QTAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJk
RGF0YVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRJdGVtUGFzdGVib2FyZERhdGFT
b3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ2QzQ0ODEyMzQ2NTQ3QTAw
MzlBNzlEIC8qIENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDbGlwYm9hcmRJdGVtUGFzdGVib2FyZERhdGFTb3VyY2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlGNDc4NzU1MjE5OTgzQUZGMDAyNEEyODcgLyogU2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjQ3
ODc1NTMxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0EwOUNGMjBBOTM5RjYwMDI0
MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc2FibGVkQWRh
cHRhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTA5RDQyMEE5REQw
NDAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlzYWJsZWRBZGFwdGF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
N0E1RTNCMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTk0Nyw2ICsyMTk0OCw3IEBACiAJCQkJQkM1MTE1
NkQxMkIxNzQ5QzAwQzk2NzU0IC8qIFNjcm9sbEFuaW1hdG9yTWFjLm1tICovLAogCQkJCUJDOEI4
NTNDMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4
NjlFMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKKwkJCQk1QjFF
MEU0MzI1RDE2MjlCMDAyNzIyODEgLyogU2Nyb2xsQ29udHJvbGxlci5tbSAqLywKIAkJCQk5MzUz
Njc2QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAqLywKIAkJCQkwNzdBRjE0
MTE4RjRCMUJCMDAwMUVENjEgLyogU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5oICovLAog
CQkJCTA3N0FGMTQyMThGNEIxQkIwMDAxRUQ2MSAvKiBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3Vl
TWFjLm1tICovLApAQCAtMjQ2MjksMTAgKzI0NjMxLDYgQEAKIAkJCQlDREM3NDcwMDI0QkUyNjc5
MDBDMTg2OEIgLyogUG93ZXJTb3VyY2VOb3RpZmllci5oICovLAogCQkJCUNEQzc0NzAxMjRCRTI2
NzkwMEMxODY4QiAvKiBQb3dlclNvdXJjZU5vdGlmaWVyLm1tICovLAogCQkJCTQ2NUE4RTc4MUM4
QTI0Q0UwMEU3RDNFNCAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NDb2NvYS5tbSAqLywKLQkJ
CQkxQUE4NEYwMzE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5oICovLAotCQkJ
CTFBQTg0RjAyMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLm1tICovLAotCQkJ
CUY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oICov
LAotCQkJCUY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5tbSAqLywKIAkJCQkwRTcwNThGMzFCQzVDQ0Q3MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51
Q29jb2EuaCAqLywKIAkJCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBN
ZW51Q29jb2EubW0gKi8sCiAJCQkJMUE0QTk1NTEwQjRFRENGRjAwMkQ4QzNDIC8qIFNoYXJlZEJ1
ZmZlckNvY29hLm1tICovLApAQCAtMjc3MDYsNiArMjc3MDQsMTAgQEAKIAkJCQlCQzhCODU0QTBF
N0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCAqLywKIAkJCQlCQzE0MDI4ODBFODM2
ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwICovLAogCQkJCUJDMTQw
Mjg5MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oICovLAorCQkJ
CTVCNDY2NTVFMjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmNwcCAqLywKKwkJ
CQk1QjQ2NjU1RjI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5oICovLAorCQkJ
CTVCNDY2NTVEMjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAg
Ki8sCisJCQkJNUI0NjY1NjAyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0
YXRlLmggKi8sCiAJCQkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8qIFNjcm9sbFR5cGVzLmNw
cCAqLywKIAkJCQk5M0MwOUM4NTBCMDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCAqLywK
IAkJCQlCQzI0NDFDMzBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xsVmlldy5jcHAgKi8sCkBAIC0z
MTg3NCw2ICszMTg3Niw3IEBACiAJCQkJNTkzMDlBMTMxMUY0QUU2QTAwMjUwNjAzIC8qIERldmlj
ZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTlBOEYxRDYxMUE2
OTUxMzAwMUFDMzRBIC8qIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTkwRTFCNDkxMUU0RUY0QjAwNjlGNzg0IC8qIERldmljZU9yaWVudGF0aW9uRGF0
YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUI0NjY1NjQyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUE4NUVBNDExOUQ2OEVD
MDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDYwRTMwNzUyMjJGNEVGRDAwOUEwNjA2IC8qIERldmljZU9yaWVudGF0aW9uT3JNb3Rpb25FdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYwRTMwNzcyMjJGNEYwMzAwOUEwNjA2IC8qIERldmlj
ZU9yaWVudGF0aW9uT3JNb3Rpb25QZXJtaXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MzQ1NTcsNyArMzQ1NjAsNiBAQAogCQkJCUJDOEI4NTNFMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3Jv
bGxiYXJUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzE0MDYxNDIxNzBCODAwREIz
M0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDNTc5NUQx
REE1QzMwMTAwNkZBQzg2IC8qIFNjcm9sbEJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QUE4NEYwNTE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MDVBRUQxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUY2MkVFODE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTFBOTkxMTYyNzQ2Q0IwMDI5
NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDU5
NSw3ICszNDU5Nyw2IEBACiAJCQkJODNDNTc5NUQxREE1QzMwMTAwNkY5Qzk3IC8qIFNjcm9sbElu
dG9WaWV3T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDNTc5NUQxREE1QzMwMTAwNkY5
Qzg2IC8qIFNjcm9sbExvZ2ljYWxQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDNTc5
NUQxREE1QzMwMTAwNkZBQzk3IC8qIFNjcm9sbE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjQ2NzI5MjgxRTBERTY4NTAwQUNDM0Q4IC8qIFNjcm9sbFNuYXBP
ZmZzZXRzSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDNTc5NUQxREE1QzMwMTAwNkZBQ0E4
IC8qIFNjcm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMDlDODYwQjA2NTdB
QTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1MzY3LDYgKzM1
MzY4LDcgQEAKIAkJCQk3RTY2RTIzNDE3RTZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTNGQUU4RjE0NzMzRkRCMDBFNDIz
MDYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZF
NEU5MUFGMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1QjQ2NjU2MzI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGNkYxRUUxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdM
Q29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwMUQzQ0Y4MzE0QkQwQTMwMDBGRTk5
NzAgLyogV2ViR0xDb250ZXh0R3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTAxRDNDRjg1MTRC
RDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRPYmplY3QuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMzZWM2YzQ0MWQzMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCkBAIC0wLDAg
KzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRl
ICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisjaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKKyNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsQ29udHJv
bGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCisg
ICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQ29udHJvbGxlcjo6dXNl
c1Njcm9sbFNuYXAoKSBjb25zdAoreworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAg
cmV0dXJuICEhbV9zY3JvbGxTbmFwU3RhdGU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKwordm9pZCBTY3JvbGxDb250
cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEmIHNjcm9s
bGFibGVBcmVhKQoreworICAgIGNvbnN0IGF1dG8qIHNuYXBPZmZzZXRJbmZvID0gc2Nyb2xsYWJs
ZUFyZWEuc25hcE9mZnNldEluZm8oKTsKKyAgICBpZiAoIXNuYXBPZmZzZXRJbmZvKSB7CisgICAg
ICAgIG1fc2Nyb2xsU25hcFN0YXRlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoKnNuYXBPZmZzZXRJbmZvKTsKK30KKwordm9p
ZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFNjcm9sbFNu
YXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYgc25hcE9mZnNldEluZm8pCit7CisgICAgaWYgKHNu
YXBPZmZzZXRJbmZvLmlzRW1wdHkoKSkgeworICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG51
bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIHNob3VsZENvbXB1dGVD
dXJyZW50U25hcEluZGljZXMgPSAhbV9zY3JvbGxTbmFwU3RhdGU7CisgICAgaWYgKCFtX3Njcm9s
bFNuYXBTdGF0ZSkKKyAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBtYWtlVW5pcXVlPFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlPigpOworCisgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldFNuYXBP
ZmZzZXRJbmZvKHNuYXBPZmZzZXRJbmZvKTsKKworICAgIGlmIChzaG91bGRDb21wdXRlQ3VycmVu
dFNuYXBJbmRpY2VzKQorICAgICAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNl
dChyb3VuZGVkSW50UG9pbnQobV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0
aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0YXRlIG5ldyBzdGF0ZTogIiA8PCBWYWx1ZU9yTnVs
bChtX3Njcm9sbFNuYXBTdGF0ZS5nZXQoKSkpOworfQorCit1bnNpZ25lZCBTY3JvbGxDb250cm9s
bGVyOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBj
b25zdAoreworICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoYXhp
cyk7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYg
KCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbFNuYXBT
dGF0ZS0+c2V0QWN0aXZlU25hcEluZGV4Rm9yQXhpcyhheGlzLCBpbmRleCk7Cit9CisKK3ZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZz
ZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGludCBvZmZzZXQpCit7CisgICAgaWYgKCF1c2VzU2Ny
b2xsU25hcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IG1f
Y2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOworICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBz
bmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3RhdGU7CisKKyAgICBhdXRvIHNuYXBPZmZzZXRzID0g
c25hcFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhheGlzKTsKKyAgICBpZiAoIXNuYXBPZmZzZXRz
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0VW5pdCBjbGFtcGVkT2Zmc2V0
ID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0VW5pdChvZmZzZXQgLyBzY2FsZUZhY3RvciksIHNu
YXBPZmZzZXRzLmZpcnN0KCkub2Zmc2V0KSwgc25hcE9mZnNldHMubGFzdCgpLm9mZnNldCk7CisK
KyAgICB1bnNpZ25lZCBhY3RpdmVJbmRleCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygpLmNs
b3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIGNsYW1wZWRPZmZzZXQsIDApLnNlY29uZDsKKyAgICBpZiAo
YWN0aXZlSW5kZXggPT0gYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhheGlzKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSB0cnVl
OworICAgIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywgYWN0aXZlSW5kZXgp
OworfQorCitmbG9hdCBTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihT
Y3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9j
aXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpCit7CisgICAgaWYgKCF1c2VzU2Ny
b2xsU25hcCgpKQorICAgICAgICByZXR1cm4gZGVzdGluYXRpb25PZmZzZXQ7CisKKyAgICBTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOworICAg
IGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOwor
ICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZGVzdGluYXRpb25P
ZmZzZXQ7CisKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbE9mZnNldEluTGF5b3V0
VW5pdHM7CisgICAgaWYgKG9yaWdpbmFsT2Zmc2V0Lmhhc1ZhbHVlKCkpCisgICAgICAgIG9yaWdp
bmFsT2Zmc2V0SW5MYXlvdXRVbml0cyA9IExheW91dFVuaXQoKm9yaWdpbmFsT2Zmc2V0IC8gbV9j
bGllbnQucGFnZVNjYWxlRmFjdG9yKCkpOworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gc25hcFN0
YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgTGF5b3V0VW5pdChk
ZXN0aW5hdGlvbk9mZnNldCAvIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpKSwgdmVsb2NpdHks
IG9yaWdpbmFsT2Zmc2V0SW5MYXlvdXRVbml0cykuZmlyc3Q7CisgICAgcmV0dXJuIG9mZnNldCAq
IG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOworfQorCisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxl
cjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoU2Nyb2xsT2Zmc2V0IG9mZnNl
dCkKK3sKKyAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCwgb2Zmc2V0LngoKSk7CisgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRl
eEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0LnkoKSk7
Cit9CisjZW5kaWYKKworLy8gQ3VycmVudGx5LCBvbmx5IE1hYyBzdXBwb3J0cyBtb21lbnR1bSBz
cm9sbGluZy1iYXNlZCBzY3JvbGxzbmFwcGluZyBhbmQgcnViYmVyIGJhbmRpbmcKKy8vIHNvIGFs
bCBvZiB0aGVzZSBtZXRob2RzIGFyZSBhIG5vb3Agb24gbm9uLU1hYyBwbGF0Zm9ybXMuCisjaWYg
IVBMQVRGT1JNKE1BQykKK1Njcm9sbENvbnRyb2xsZXI6On5TY3JvbGxDb250cm9sbGVyKCkKK3sK
K30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wQWxsVGltZXJzKCkKK3sKK30KKwordm9p
ZCBTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQoreworfQorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKc2ltaWxhcml0eSBp
bmRleCA5NiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xs
Q29udHJvbGxlci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250
cm9sbGVyLmgKaW5kZXggOTQ0Yjk4MDZkNDY4Li5kOTI1ZmQ0NTU4NGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKQEAgLTg4LDcgKzg4LDcgQEAg
cHVibGljOgogICAgIC8vIEZJWE1FOiB1c2UgU2Nyb2xsQ2xhbXBpbmcgdG8gY29sbGFwc2UgdGhl
c2UgdG8gb25lLgogICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9h
dFNpemUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENv
bnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRTaXplJikgPSAwOwotICAgIAorCiAgICAg
dmlydHVhbCB2b2lkIHdpbGxTdGFydFJ1YmJlckJhbmRTbmFwQW5pbWF0aW9uKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpZFN0b3BSdWJiZXJiYW5kU25hcEFuaW1hdGlvbigpIHsgfQogCkBAIC0x
MjAsMTcgKzEyMCw2IEBAIHB1YmxpYzoKICNlbmRpZgogfTsKIAotZW51bSBjbGFzcyBXaGVlbEV2
ZW50U3RhdHVzIHsKLSAgICBVc2VyU2Nyb2xsQmVnaW4sCi0gICAgVXNlclNjcm9sbGluZywKLSAg
ICBVc2VyU2Nyb2xsRW5kLAotICAgIE1vbWVudHVtU2Nyb2xsQmVnaW4sCi0gICAgTW9tZW50dW1T
Y3JvbGxpbmcsCi0gICAgTW9tZW50dW1TY3JvbGxFbmQsCi0gICAgU3RhdGVsZXNzU2Nyb2xsRXZl
bnQsCi0gICAgVW5rbm93bgotfTsKLQogY2xhc3MgU2Nyb2xsQ29udHJvbGxlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsQ29udHJvbGxlcik7CiAKQEAgLTEzOCwyMyArMTI3LDgg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IFNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxl
ckNsaWVudCYpOwogICAgIH5TY3JvbGxDb250cm9sbGVyKCk7CiAKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGhhbmRsZWQuCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHN0b3BS
dWJiZXJiYW5kaW5nKCk7Ci0KICAgICBib29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7Ci0KLSAg
ICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdDsKLSAgICBib29sIGlzUnViYmVy
QmFuZEluUHJvZ3Jlc3MoKSBjb25zdDsKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Mo
KSBjb25zdDsKLSAgICAKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgUmVjdEVkZ2Vz
PGJvb2w+IHJ1YmJlckJhbmRpbmdFZGdlcygpIGNvbnN0IHsgcmV0dXJuIG1fcnViYmVyQmFuZGlu
Z0VkZ2VzOyB9Ci0jZW5kaWYKLQorICAgIHZvaWQgc3RvcEFsbFRpbWVycygpOwogICAgIHZvaWQg
c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpA
QCAtMTY3LDkxICsxNDEsOTkgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFN0
YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7CiAgICAgdm9pZCB1cGRhdGVHZXN0dXJlSW5Qcm9n
cmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogICAgIGZsb2F0IGFkanVzdFNj
cm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVzdGluYXRpb25PZmZzZXQs
IGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpOwotI2lmIFBM
QVRGT1JNKE1BQykKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZC4KLSAgICBib29sIHBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsK
LSNlbmRpZgogI2VuZGlmCiAKLSAgICBzdGF0aWMgRmxvYXRTaXplIHdoZWVsRGVsdGFCaWFzaW5n
VG93YXJkc1ZlcnRpY2FsKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZC4KKyAgICBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKICAgICBlbnVtIGNsYXNzIFdo
ZWVsQXhpc0JpYXMgeyBOb25lLCBWZXJ0aWNhbCB9OwogICAgIHN0YXRpYyBPcHRpb25hbDxTY3Jv
bGxEaXJlY3Rpb24+IGRpcmVjdGlvbkZyb21FdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBPcHRpb25hbDxTY3JvbGxFdmVudEF4aXM+LCBXaGVlbEF4aXNCaWFzID0gV2hlZWxBeGlzQmlh
czo6Tm9uZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSB3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNW
ZXJ0aWNhbChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKIAotICAgIHZvaWQgc3RvcEFsbFRp
bWVycygpOwotCi1wcml2YXRlOgotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB2b2lk
IHN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcigpOwotICAgIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5k
VGltZXIoKTsKLSAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgdm9pZCBzbmFwUnViYmVy
QmFuZFRpbWVyRmlyZWQoKTsKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25z
dDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdDsKIAotICAgIGJvb2wg
c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKSBjb25zdDsKLSAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3Jv
bGxEaXJlY3Rpb24pIGNvbnN0OworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIGhhbmRsZWQuCisgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNj
cm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisjZW5kaWYKIAotICAgIGJvb2wg
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFsKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVS
dWJiZXJCYW5kaW5nU3RhdGUoKTsKLSAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhJ
bnRTaXplIGNsaWVudFN0cmV0Y2gpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICB2
b2lkIHN0b3BSdWJiZXJiYW5kaW5nKCk7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNz
KCkgY29uc3Q7CisgICAgUmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRpbmdFZGdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcnViYmVyQmFuZGluZ0VkZ2VzOyB9CisjZW5kaWYKICNlbmRpZgogCitwcml2
YXRlOgogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgdm9pZCBzZXROZWFyZXN0U2Ny
b2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGludCk7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAg
IHZvaWQgc2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRp
bWVyKCk7CiAgICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7Ci0KICAgICBib29sIHNob3Vs
ZE92ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKSBjb25zdDsKICAgICB2b2lkIHN0YXRlbGVzc1Nu
YXBUcmFuc2l0aW9uVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVTdGF0ZWxlc3NTY3Jv
bGxTbmFwKCk7Ci0KICAgICB2b2lkIHN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0
aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpOwogICAgIHZvaWQgc3RvcERlZmVycmluZ1doZWVsRXZl
bnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKICNlbmRpZgorCisjaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIHZvaWQgc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7
CisgICAgdm9pZCBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpOworICAgIHZvaWQgc25hcFJ1YmJl
ckJhbmQoKTsKKyAgICB2b2lkIHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpOworICAgIGJvb2wg
c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKSBjb25zdDsKKyAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3Jv
bGxEaXJlY3Rpb24pIGNvbnN0OworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVy
bmFsKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKKyAgICB2
b2lkIHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0cmV0Y2gpOworI2Vu
ZGlmCiAjZW5kaWYKIAogICAgIFNjcm9sbENvbnRyb2xsZXJDbGllbnQmIG1fY2xpZW50OworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbFNuYXBB
bmltYXRvclN0YXRlPiBtX3Njcm9sbFNuYXBTdGF0ZTsKKyAgICBib29sIG1fYWN0aXZlU2Nyb2xs
U25hcEluZGV4RGlkQ2hhbmdlIHsgZmFsc2UgfTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIFdhbGxUaW1lIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotI2VuZGlmCiAg
ICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKICAgICBGbG9hdFNpemUgbV9zdHJl
dGNoU2Nyb2xsRm9yY2U7CiAgICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKIAotI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAvLyBSdWJiZXIgYmFuZCBzdGF0ZS4KLSAgICBN
b25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwotICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsK
LSAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7Ci0gICAgUmVjdEVkZ2VzPGJvb2w+IG1fcnVi
YmVyQmFuZGluZ0VkZ2VzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGlt
ZXI+IG1fc25hcFJ1YmJlcmJhbmRUaW1lcjsKLSNlbmRpZgorICAgIGJvb2wgbV9pblNjcm9sbEdl
c3R1cmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9pc1J1YmJlckJhbmRpbmcgeyBmYWxzZSB9OwogCiAjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+IG1f
c2Nyb2xsU25hcFN0YXRlOwotI2lmIFBMQVRGT1JNKE1BQykKICAgICBGbG9hdFNpemUgbV9kcmFn
RW5kZWRTY3JvbGxpbmdWZWxvY2l0eTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJv
bGxlclRpbWVyPiBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFNjcm9sbENvbnRyb2xsZXJUaW1lcj4gbV9zY3JvbGxTbmFwVGltZXI7CiAjZW5kaWYK
LSNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGJvb2wgbV9pblNjcm9sbEdlc3R1cmUg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgeyBmYWxzZSB9OwotICAgIGJvb2wg
bV9pc1J1YmJlckJhbmRpbmcgeyBmYWxzZSB9OworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
KyAgICAvLyBSdWJiZXIgYmFuZCBzdGF0ZS4KKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1l
OworICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKKyAgICBGbG9hdFNpemUgbV9vcmlnVmVs
b2NpdHk7CisgICAgUmVjdEVkZ2VzPGJvb2w+IG1fcnViYmVyQmFuZGluZ0VkZ2VzOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IG1fc25hcFJ1YmJlcmJhbmRUaW1l
cjsKICNlbmRpZgogCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBib29sIG1fdGltZXJzV2VyZVN0
b3BwZWQgeyBmYWxzZSB9OwogI2VuZGlmCi0KLSAgICBib29sIG1fYWN0aXZlU2Nyb2xsU25hcElu
ZGV4RGlkQ2hhbmdlIHsgZmFsc2UgfTsKKyNlbmRpZgogfTsKLSAgICAKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAK
c2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0KcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcAppbmRleCA3M2MzZTA2NmZhZDIu
LjdkNjhkNTBkZGU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwCkBAIC0yMywxMyArMjMsMTMgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCiAKLSNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW1wb3J0IDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKc2lt
aWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKaW5k
ZXggZTJlNTFmZDBhMDYwLi41ZGVkM2EwODdkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE5FT04uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5h
bWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1t
CnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5t
bQppbmRleCBhMzdmNTNhZWQ2MzMuLjBkZTgxZTA2ZjYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQpAQCAtMjYsMjQgKzI2LDE1IEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlNjcm9sbENvbnRyb2xsZXIuaCIKIAotI2lt
cG9ydCAiTGF5b3V0U2l6ZS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUGxhdGZv
cm1XaGVlbEV2ZW50LmgiCiAjaW1wb3J0ICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIKKyNpbXBv
cnQgPHBhbC9zcGkvbWFjL05TU2Nyb2xsVmlld1NQSS5oPgogI2ltcG9ydCA8c3lzL3N5c2N0bC5o
PgogI2ltcG9ydCA8c3lzL3RpbWUuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1wb3J0ICJTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5oIgotI2ltcG9ydCAiU2Nyb2xsYWJsZUFyZWEuaCIKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oTUFDKQotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNTY3JvbGxWaWV3U1BJLmg+Ci0jZW5k
aWYKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykgfHwgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKKyNpZiBQTEFURk9STShNQUMpICYmIChFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJM
RShDU1NfU0NST0xMX1NOQVApKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDcgKzQ0
LDYgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJh
dGlvID0gMTsKIHN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVs
dGFCZWZvcmVTdHJldGNoID0gMTA7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKIHN0YXRp
YyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBvc2l0aW9uLCBm
bG9hdCBpbml0aWFsVmVsb2NpdHksIFNlY29uZHMgZWxhcHNlZFRpbWUpCiB7CiAgICAgcmV0dXJu
IF9OU0VsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShpbml0aWFsUG9zaXRpb24sIGluaXRpYWxWZWxv
Y2l0eSwgZWxhcHNlZFRpbWUuc2Vjb25kcygpKTsKQEAgLTc5LDEyICs2OSw2IEBAIHN0YXRpYyBm
bG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKQogICAgIH0KICAgICByZXR1cm4gbXVsdGlwbGll
cjsKIH0KLSNlbmRpZgotCi1TY3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9s
bENvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLXsKLX0K
IAogU2Nyb2xsQ29udHJvbGxlcjo6flNjcm9sbENvbnRyb2xsZXIoKQogewpAQCAtOTgsNyArODIs
NyBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BBbGxUaW1lcnMoKQogICAgICAgICBtX3Nu
YXBSdWJiZXJiYW5kVGltZXItPnN0b3AoKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAg
ICAgaWYgKG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcikKICAgICAgICAgbV9zdGF0ZWxl
c3NTbmFwVHJhbnNpdGlvblRpbWVyLT5zdG9wKCk7CiAKQEAgLTExMSw3ICs5NSw2IEBAIHZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6c3RvcEFsbFRpbWVycygpCiAjZW5kaWYKIH0KIAotI2lmIFBMQVRG
T1JNKE1BQykKIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKQEAgLTMyOSw3ICszMTIsNiBAQCBib29sIFNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogCiAgICAgcmV0
dXJuIGhhbmRsZWQ7CiB9Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiBGbG9hdFNpemUgU2Ny
b2xsQ29udHJvbGxlcjo6d2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogewpAQCAtNDY5LDI3ICs0NTEsMTQgQEAgdm9p
ZCBTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQogI2VuZGlmCiB9CiAK
LWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6dXNlc1Njcm9sbFNuYXAoKSBjb25zdAotewotI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgcmV0dXJuICEhbV9zY3JvbGxTbmFwU3RhdGU7Ci0j
ZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBib29sIFNjcm9sbENvbnRyb2xs
ZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAogewotI2lmIFBMQVRGT1JNKE1BQykK
ICAgICByZXR1cm4gbV9pblNjcm9sbEdlc3R1cmU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZgogfQogCiBib29sIFNjcm9sbENvbnRyb2xsZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jl
c3MoKSBjb25zdAogewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykgJiYgUExBVEZPUk0oTUFD
KQorI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICByZXR1cm4gbV9pc1J1YmJlckJhbmRp
bmc7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKQEAgLTUwMSw3ICs0NzAsNyBAQCBib29sIFNj
cm9sbENvbnRyb2xsZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAogICAgIGlmICgh
dXNlc1Njcm9sbFNuYXAoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCiAgICAgaWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1fbW9tZW50dW1TY3JvbGxJblByb2dy
ZXNzIHx8IG1fc2Nyb2xsU25hcFRpbWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgpA
QCAtNjExLDggKzU4MCwxNyBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJh
bmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0cmV0Y2gpCiAjZW5kaWYgLy8gRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK2VudW0gY2xhc3MgV2hl
ZWxFdmVudFN0YXR1cyB7CisgICAgVXNlclNjcm9sbEJlZ2luLAorICAgIFVzZXJTY3JvbGxpbmcs
CisgICAgVXNlclNjcm9sbEVuZCwKKyAgICBNb21lbnR1bVNjcm9sbEJlZ2luLAorICAgIE1vbWVu
dHVtU2Nyb2xsaW5nLAorICAgIE1vbWVudHVtU2Nyb2xsRW5kLAorICAgIFN0YXRlbGVzc1Njcm9s
bEV2ZW50LAorICAgIFVua25vd24KK307CiAKLSNpZiBQTEFURk9STShNQUMpCiBzdGF0aWMgaW5s
aW5lIFdoZWVsRXZlbnRTdGF0dXMgdG9XaGVlbEV2ZW50U3RhdHVzKFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlIHBoYXNlLCBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNlKQogewog
ICAgIGlmIChwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9uZSkgewpAQCAtODIx
LDEwNCArNzk5LDEwIEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2Nyb2xsU25hcFRpbWVyRmly
ZWQoKQogICAgICAgICBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7CiAgICAgfQogfQotI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCi12b2lk
IFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZShjb25zdCBTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgY29uc3QgYXV0byogc25hcE9mZnNldEluZm8g
PSBzY3JvbGxhYmxlQXJlYS5zbmFwT2Zmc2V0SW5mbygpOwotICAgIGlmICghc25hcE9mZnNldElu
Zm8pIHsKLSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOwotICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50cygqc25hcE9mZnNldEluZm8p
OwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoY29u
c3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0SW5mbykKLXsK
LSAgICBpZiAoc25hcE9mZnNldEluZm8uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc2Nyb2xsU25h
cFN0YXRlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgc2hv
dWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcyA9ICFtX3Njcm9sbFNuYXBTdGF0ZTsKLSAgICBp
ZiAoIW1fc2Nyb2xsU25hcFN0YXRlKQotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG1ha2VV
bmlxdWU8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+KCk7Ci0KLSAgICBtX3Njcm9sbFNuYXBTdGF0
ZS0+c2V0U25hcE9mZnNldEluZm8oc25hcE9mZnNldEluZm8pOwotCi0gICAgaWYgKHNob3VsZENv
bXB1dGVDdXJyZW50U25hcEluZGljZXMpCi0gICAgICAgIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRp
Y2VzRm9yT2Zmc2V0KHJvdW5kZWRJbnRQb2ludChtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSkpOwot
Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJv
bGxlciAiIDw8IHRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3RhdGUgbmV3IHN0YXRlOiAiIDw8
IFZhbHVlT3JOdWxsKG1fc2Nyb2xsU25hcFN0YXRlLmdldCgpKSk7Ci19Ci0KLXVuc2lnbmVkIFNj
cm9sbENvbnRyb2xsZXI6OmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMpIGNvbnN0Ci17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZlU25hcEluZGV4
Rm9yQXhpcyhheGlzKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRBY3RpdmVTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkK
LXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2Nyb2xsU25hcFN0YXRlLT5zZXRBY3RpdmVTbmFwSW5kZXhGb3JBeGlzKGF4aXMsIGluZGV4KTsK
LX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9y
QXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgaW50IG9mZnNldCkKLXsKLSAgICBp
ZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCk7Ci0gICAgU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUmIHNuYXBTdGF0ZSA9ICptX3Njcm9sbFNuYXBTdGF0ZTsKLQotICAgIGF1dG8gc25h
cE9mZnNldHMgPSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOwotICAgIGlmICgh
c25hcE9mZnNldHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRVbml0IGNs
YW1wZWRPZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1heChMYXlvdXRVbml0KG9mZnNldCAvIHNjYWxl
RmFjdG9yKSwgc25hcE9mZnNldHMuZmlyc3QoKS5vZmZzZXQpLCBzbmFwT2Zmc2V0cy5sYXN0KCku
b2Zmc2V0KTsKLQotICAgIHVuc2lnbmVkIGFjdGl2ZUluZGV4ID0gc25hcFN0YXRlLnNuYXBPZmZz
ZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgY2xhbXBlZE9mZnNldCwgMCkuc2Vjb25k
OwotICAgIGlmIChhY3RpdmVJbmRleCA9PSBhY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4
aXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENo
YW5nZSA9IHRydWU7Ci0gICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhheGlzLCBh
Y3RpdmVJbmRleCk7Ci19Ci0KLWZsb2F0IFNjcm9sbENvbnRyb2xsZXI6OmFkanVzdFNjcm9sbERl
c3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBkZXN0aW5hdGlvbk9mZnNldCwg
ZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFsPGZsb2F0PiBvcmlnaW5hbE9mZnNldCkKLXsKLSAgICBp
ZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybiBkZXN0aW5hdGlvbk9mZnNldDsK
LQotICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFw
U3RhdGU7Ci0gICAgYXV0byBzbmFwT2Zmc2V0cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4
aXMoYXhpcyk7Ci0gICAgaWYgKCFzbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBk
ZXN0aW5hdGlvbk9mZnNldDsKLQotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFsT2Zm
c2V0SW5MYXlvdXRVbml0czsKLSAgICBpZiAob3JpZ2luYWxPZmZzZXQuaGFzVmFsdWUoKSkKLSAg
ICAgICAgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzID0gTGF5b3V0VW5pdCgqb3JpZ2luYWxP
ZmZzZXQgLyBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSk7Ci0gICAgTGF5b3V0VW5pdCBvZmZz
ZXQgPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCBM
YXlvdXRVbml0KGRlc3RpbmF0aW9uT2Zmc2V0IC8gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCkp
LCB2ZWxvY2l0eSwgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzKS5maXJzdDsKLSAgICByZXR1
cm4gb2Zmc2V0ICogbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLQotdm9pZCBTY3Jv
bGxDb250cm9sbGVyOjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNldChTY3JvbGxP
ZmZzZXQgb2Zmc2V0KQotewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBvZmZzZXQueCgpKTsKLSAgICBzZXROZWFyZXN0U2Ny
b2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBv
ZmZzZXQueSgpKTsKLX0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKSB8fCBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCmluZGV4
IDJjMTFmN2VmNTJlMC4uMjRlZGU5NGM4NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW0KQEAgLTQw
LDYgKzQwLDcgQEAKICNpbXBvcnQgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0FWS2l0U1BJLmg+CiAjaW1wb3J0IDxwYWwv
c3BpL21hYy9QSVBTUEkuaD4KKyNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAKICNpbXBvcnQgPHBh
bC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420309</attachid>
            <date>2021-02-15 05:21:49 -0800</date>
            <delta_ts>2021-02-15 13:48:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221462-20210215142146.patch</filename>
            <type>text/plain</type>
            <size>131995</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRlNWY3YmZjZGMwNzky
NWQyZjJkZDA3ZTJlODM0MjQ0NmUyNjk4Mi4uNTlmNjQ4Y2JlYjY4YzhhNjEwYWUwZTg4ZjMyMWUx
MDc1MDlkYTVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTAyLTE1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBQdWxsIE1hYy1v
bmx5IGNvZGUgb3V0IG9mIFNjcm9sbENvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTQ2MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NzQyNzM4NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAg
ICAgIFNwbGl0IG91dCBNYWMtc3BlY2lmaWMgY29kZSBmcm9tIFNjcm9sbENvbnRyb2xsZXIgYW5k
IHByZXBhcmUgaXQgZm9yIHVzZSBvbgorICAgICAgICBub24tQ29jb2EgcGxhdGZvcm1zLiBUaGlz
IGNvZGUgbXVzdCBiZSBwdWxsZWQgb3V0IHByaW1hcmlseSBiZWNhdXNlIGl0IGlzCisgICAgICAg
IE9iamVjdGl2ZS1DKysgY29kZSBhbmQgc2hvdWxkIG1haW50YWluIHRoZSAubW0gZXh0ZW5zaW9u
LiBUaGUgaWRlYSBoZXJlIGlzIHRvCisgICAgICAgIGlzb2xhdGUgdGhlIGJhc2ljIHBsYXRmb3Jt
LWluZGVwZW5kZW50IHNjcm9sbCBzbmFwcGluZyBjb2RlIGFuZCBncmFkdWFsbHkgbWFrZQorICAg
ICAgICB0aGUgcmVzdCAocmVsYXRlZCB0byBoYW5kbGluZyB3aGVlbCBldmVudHMpIG1vcmUtYW5k
LW1vcmUgcGxhdGZvcm0taW5kZXBlbmRlbnQuCisKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFr
ZTogVXBkYXRlIHNvdXJjZSBsaXN0LgorICAgICAgICAqIFNvdXJjZXMudHh0OiBEaXR0by4KKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5jcHA6IEd1YXJkIGNvZGUgd2l0aCBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcDog
QWRkZWQuCisgICAgICAgIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBwbGF0Zm9ybS1pbmRl
cGVuZGVudCBzY3JvbGwgc25hcHBpbmcgY29kZSB0aGF0IHdpbGwgYmUKKyAgICAgICAgdXNlZCB0
byBhZGQgaW5pdGlhbCBzY3JvbGwgc25hcCBzdXBwb3J0IHRvIG90aGVyIHBvcnRzLgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDogRml4IHVuaWZp
ZWQgc291cmNlIGJ1aWxkIGlzc3VlIGV4cG9zZWQgYnkgdGhpcworICAgICAgICBjaGFuZ2UuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW06IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMubW06IEZpeCB1bmlm
aWVkIHNvdXJjZSBidWlsZCBpc3N1ZS4KKwogMjAyMS0wMi0xMiAgWmFsYW4gQnVqdGFzICA8emFs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdIFVwZGF0ZSB0aGUgYmxvY2sgYm94L2NvbnRh
aW5lciBsaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDIyZDA0NjZlZTlmOGI0NWYw
Y2Q3Mjc0YWZkY2FiODM0NGViODMwNzAuLjc2ZDBjOTM4MDI1MTMxZjc0OWZhODFlMDkzMTVlNWIz
NTQ3YzE3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zNjgsNiArMzY4LDcgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbWFjL1JlbW90ZUNvbW1h
bmRMaXN0ZW5lck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0K
ICAgICBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKyAgICBwbGF0Zm9ybS9tYWMv
U2Nyb2xsQ29udHJvbGxlci5tbQogICAgIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCiAg
ICAgcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1Nl
cmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMubW0KQEAgLTUxMCw4ICs1MTEsNiBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9jb2Nv
YS9QbGF0Zm9ybVZpZXcuaAogICAgIHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVs
LmgKICAgICBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5o
Ci0gICAgcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCi0gICAgcGxhdGZvcm0vY29j
b2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAogICAgIHBsYXRmb3JtL2NvY29hL1NlYXJjaFBv
cHVwTWVudUNvY29hLmgKICAgICBwbGF0Zm9ybS9jb2NvYS9TeXN0ZW1CYXR0ZXJ5LmgKICAgICBw
bGF0Zm9ybS9jb2NvYS9TeXN0ZW1WZXJzaW9uLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMDQ1Y2YyNzA2
YzAzNjdlNGNmOTBiMzJkZGQ3OTE0NmQ1ZmExMWRmZi4uNjdhMTRhZmU4M2UwNDA4N2RlZjI1OTZm
YzBhZDVjOTZhNzRiZTEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE3NzEsNiArMTc3MSw3IEBAIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0
cmFpbnRzLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCitwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3IuY3BwCiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlRnJhbWVIb3N0aW5nTm9kZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlLmNwcApAQCAtMTgzOSw2ICsxODQwLDggQEAgcGxhdGZvcm0vUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcAogcGxhdGZvcm0vU1NMS2V5R2VuZXJhdG9yLmNwcAogcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmNwcAogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCitwbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcAorcGxhdGZvcm0vU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUuY3BwCiBwbGF0Zm9ybS9TY3JvbGxUeXBlcy5jcHAKIHBsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IDc5N2Y1MzFjODVmNjYyN2U0MzU1YzU0ZGI1YjljYzdmNTgzYzE5ZWMuLjJmMGZk
ZWZlOTNhZWM2ZWVmY2ZlODcxY2VmZWVjOWZlNDU4Mjg3NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMTkwLDcgKzE5MCw2IEBAIHBhZ2UvbWFjL1BhZ2VNYWMubW0KIHBhZ2UvbWFjL1Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KIHBhZ2UvbWFjL1doZWVsRXZlbnREZWx0YUZpbHRlck1hYy5tbQotcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yLmNwcAogcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Ny
b2xsaW5nU3RhdGVOb2RlLm1tCiBwYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLm1tCiBwYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxQcm94eU5vZGUubW0KQEAgLTI0OSw4ICsyNDgsNiBAQCBwbGF0Zm9ybS9jb2NvYS9QbGF0Zm9y
bVBhc3RlYm9hcmRDb2NvYS5tbQogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQubW0KIHBsYXRmb3JtL2NvY29hL1Bvd2VyU291cmNlTm90aWZpZXIubW0KIHBs
YXRmb3JtL2NvY29hL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0NvY29hLm1tCi1wbGF0Zm9ybS9j
b2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCi1wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5tbQogcGxhdGZvcm0vY29jb2EvU2VhcmNoUG9wdXBNZW51Q29jb2EubW0KIHBsYXRm
b3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCiBwbGF0Zm9ybS9jb2NvYS9TeXN0ZW1WZXJz
aW9uLm1tCkBAIC01MDIsNiArNDk5LDcgQEAgcGxhdGZvcm0vbWFjL1B1YmxpY1N1ZmZpeE1hYy5t
bQogcGxhdGZvcm0vbWFjL1JlbW90ZUNvbW1hbmRMaXN0ZW5lck1hYy5tbQogcGxhdGZvcm0vbWFj
L1NTTEtleUdlbmVyYXRvck1hYy5tbQogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1t
IEBuby11bmlmeQorcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0KIHBsYXRmb3JtL21h
Yy9TY3JvbGxWaWV3TWFjLm1tCiBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0gQG5v
LXVuaWZ5CiBwbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDhjMTVlYjY0ODAzNzMwNTgwN2I3MDNkMGJkYmFiM2YzYmZhNTcxNWIuLjI5ZTE5YTkxN2I1YmUw
NGMzY2RmMWJlM2FhZTBmYjRiN2VkZGFjYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyNiw3ICs1MjYsNiBAQAogCQkxQTky
N0ZEMjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkNGMTQxNkExNUIwMDNBODNDOCAvKiBucGFwaS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBOTI3
RkQzMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkQwMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1
bnRpbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxQTkyN0ZENDE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGRDExNDE2QTE1QjAwM0E4M0M4IC8q
IG5wdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkxQUE4NEYwNTE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRGMDMxNDNCQTdC
RDAwNTFEMTUzIC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUFBRERBNDE0REI0MDlGMDBBRjY0QjMgLyogU2Ny
b2xsaW5nVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUFBRERFNDE0REM4QzhG
MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREUyMTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxp
bmdUcmVlTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTFBQjMzREE1MTI1NTFFMzIwMDI0NDU3QSAvKiBJT0tpdC5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUIzM0RBNDEyNTUx
RTMyMDAyNDQ1N0EgLyogSU9LaXQuZnJhbWV3b3JrICovOyB9OwpAQCAtMTk0MSw2ICsxOTQwLDgg
QEAKIAkJNUE1NzRGMjUxMzFEQjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyMzEzMURCOTM5MDA0
NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLzsgfTsKIAkJNUE1NzRGMjkxMzFEQjk2RDAwNDcxQjg4
IC8qIFF1b3Rlc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVBNTc0RjI3MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggKi87IH07CiAJ
CTVCMzA2OTVFMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjMwNjk1QjE4QjNEMzQ1MDA5
OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICovOyB9OworCQk1QjQ2NjU2MzI1RDE0QzBBMDAw
Q0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUI0NjY1NUYyNUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbENvbnRy
b2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk1QjQ2NjU2NDI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDY2NTYwMjVE
MTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDMkIxQUVDMjIzOTdFQkMwMEI5
MUNGNyAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUY3OEQwQjFDMjU0MjJDMDAyNDU0NDYgLyogUmVzb3Vy
Y2VSZXNwb25zZUNvY29hLm1tICovOyB9OwogCQk1QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyog
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM0MzA0QUUxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVM
T0QuaCAqLzsgfTsKIAkJNUM0MzA0QjYxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9
OwpAQCAtNTI3NSw3ICs1Mjc2LDYgQEAKIAkJRjQ1Nzc1Q0UyNDE0MzdENTAwMkRGMUEwIC8qIElu
bGluZVBhdGhEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDU3NzVDRDI0MTQzN0Q1MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDY3MjkyODFFMERF
Njg1MDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyog
U2Nyb2xsU25hcE9mZnNldHNJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRjQ2QzQ0N0UyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBib2FyZEl0
ZW1CaW5kaW5nc0RhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0NkM0NDdDMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmlu
ZGluZ3NEYXRhU291cmNlLmggKi87IH07Ci0JCUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBT
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmlt
YXRvclN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjQ3QTA5RDEyMEE5M0E5NzAwMjQwRkFFIC8qIERpc2FibGVkQWRhcHRhdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0N0EwOUNGMjBB
OTM5RjYwMDI0MEZBRSAvKiBEaXNhYmxlZEFkYXB0YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAw
IC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xs
U25hcFBvaW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUY0N0E2MzNEMUZGNkZENTAwMDgxQjNDQyAvKiBQcm9taXNlZEF0dGFjaG1lbnRJbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNjMz
QzFGRjZGRDUwMDA4MUIzQ0MgLyogUHJvbWlzZWRBdHRhY2htZW50SW5mby5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02NTk3LDggKzY1OTcsNiBA
QAogCQkxQTkyN0ZDRjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gbnBhcGkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUE5MjdGRDAxNDE2QTE1QjAwM0E4M0M4IC8qIG5wcnVudGltZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBucHJ1bnRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUE5MjdGRDExNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gbnB0eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbENvbnRyb2xsZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTg0RjAzMTQzQkE3QkQwMDUxRDE1MyAvKiBT
Y3JvbGxDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9s
bENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQUREQTExNERC
NDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBQUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1RyZWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQURERTExNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1Ry
ZWVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGlu
Z1RyZWVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0NzksOSArOTQ3
NywxNCBAQAogCQk1QTU3NEYyNjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdW90ZXNEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjcxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rl
c0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVvdGVzRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QTkxNDY5RThFOUY4NDg1QzM3QTI4NzYgLyog
SlNTVkdHcmFwaGljc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTU1ZHR3JhcGhpY3NFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUIxRTBFNDMyNUQxNjI5QjAwMjcyMjgxIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1QjMwNjk1QTE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVy
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTERyYXdCdWZm
ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUIzMDY5NUIxOEIzRDM0NTAw
OTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViR0xEcmF3QnVmZmVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
QjMwNjk1QzE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gV2ViR0xEcmF3QnVmZmVycy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVCNDY2NTVEMjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDY2NTVF
MjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QjQ2NjU1RjI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDY2NTYwMjVEMTRDMEEwMDBDRkUx
NCAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QjdBQjlGNjI1NjdEQjdFMDA2NTkyRDAgLyogU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFNuYXBPZmZz
ZXRzSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDAxNTIxMjUwMDEx
MDAwMDk0QUE5MyAvKiBUZXh0Q29kZWNTaW5nbGVCeXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlY1NpbmdsZUJ5dGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzAwMTUyMzI1MDAxMTAxMDA5NEFBOTMgLyogVGV4dENvZGVjU2lu
Z2xlQnl0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNTaW5n
bGVCeXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjYxMyw4ICsxNjYxNiw2
IEBACiAJCUY0NkM0NDdEMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NE
YXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MDIzNDY1
NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDZDNDQ4MTIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJk
SXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2Fy
ZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEy
ODcgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTA5Q0YyMEE5MzlGNjAwMjQwRkFFIC8qIERpc2FibGVkQWRh
cHRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzYWJsZWRBZGFwdGF0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBMDlENDIwQTlERDA0MDAyNDBGQUUgLyogRGlzYWJs
ZWRBZGFwdGF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNhYmxlZEFkYXB0YXRpb25z
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTVFM0IxOTVCOEM4QTAwNDgz
MTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIxOTQ3LDYgKzIxOTQ4LDcgQEAKIAkJCQlCQzUxMTU2RDEyQjE3NDlDMDBDOTY3NTQg
LyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gKi8sCiAJCQkJQkM4Qjg1M0MwRTdDN0YxMTAwQUI2OTg0
IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggKi8sCiAJCQkJQkNFRjg2OUUwRTg0NEU5RDAwQTg1Q0Q1
IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tICovLAorCQkJCTVCMUUwRTQzMjVEMTYyOUIwMDI3MjI4
MSAvKiBTY3JvbGxDb250cm9sbGVyLm1tICovLAogCQkJCTkzNTM2NzZBMDlBRUQ4OEIwMEQzNUNE
NiAvKiBTY3JvbGxWaWV3TWFjLm1tICovLAogCQkJCTA3N0FGMTQxMThGNEIxQkIwMDAxRUQ2MSAv
KiBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlTWFjLmggKi8sCiAJCQkJMDc3QUYxNDIxOEY0QjFC
QjAwMDFFRDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMubW0gKi8sCkBAIC0yNDYy
OSwxMCArMjQ2MzEsNiBAQAogCQkJCUNEQzc0NzAwMjRCRTI2NzkwMEMxODY4QiAvKiBQb3dlclNv
dXJjZU5vdGlmaWVyLmggKi8sCiAJCQkJQ0RDNzQ3MDEyNEJFMjY3OTAwQzE4NjhCIC8qIFBvd2Vy
U291cmNlTm90aWZpZXIubW0gKi8sCiAJCQkJNDY1QThFNzgxQzhBMjRDRTAwRTdEM0U0IC8qIFJ1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0NvY29hLm1tICovLAotCQkJCTFBQTg0RjAzMTQzQkE3QkQw
MDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLmggKi8sCi0JCQkJMUFBODRGMDIxNDNCQTdCRDAw
NTFEMTUzIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi8sCi0JCQkJRjQ3ODc1NTIxOTk4M0FGRjAw
MjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmggKi8sCi0JCQkJRjQ3ODc1NTMxOTk4
M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tICovLAogCQkJCTBFNzA1
OEYzMUJDNUNDRDcwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5oICovLAogCQkJCTBF
NzA1OEVEMUJDNUJDMTkwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5tbSAqLywKIAkJ
CQkxQTRBOTU1MTBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyQ29jb2EubW0gKi8sCkBA
IC0yNzcwNiw2ICsyNzcwNCwxMCBAQAogCQkJCUJDOEI4NTRBMEU3QzdGNTYwMEFCNjk4NCAvKiBT
Y3JvbGxiYXJUaGVtZS5oICovLAogCQkJCUJDMTQwMjg4MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgKi8sCiAJCQkJQkMxNDAyODkwRTgzNjgwODAwMzE5NzE3
IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggKi8sCisJCQkJNUI0NjY1NUUyNUQxNEMwOTAw
MENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuY3BwICovLAorCQkJCTVCNDY2NTVGMjVEMTRDMDkw
MDBDRkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmggKi8sCisJCQkJNUI0NjY1NUQyNUQxNEMwOTAw
MENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcCAqLywKKwkJCQk1QjQ2NjU2MDI1
RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCAqLywKIAkJCQkwRjRD
REVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovLAogCQkJCTkzQzA5Qzg1
MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5oICovLAogCQkJCUJDMjQ0MUMzMEU4QjY1
RDAwMDU1MzIwRiAvKiBTY3JvbGxWaWV3LmNwcCAqLywKQEAgLTM0NTU3LDcgKzM0NTU5LDcgQEAK
IAkJCQlCQzhCODUzRTBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGQUM4NiAvKiBT
Y3JvbGxCZWhhdmlvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBODRGMDUxNDNCQTdCRDAwNTFE
MTUzIC8qIFNjcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTVCNDY2NTYzMjVE
MTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjYwNUFFRDE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRjYyRUU4MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGlu
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MUE5OTExNjI3NDZDQjAwMjk3MzMwIC8qIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTM0NTk1LDcgKzM0NTk3
LDcgQEAKIAkJCQk4M0M1Nzk1RDFEQTVDMzAxMDA2RjlDOTcgLyogU2Nyb2xsSW50b1ZpZXdPcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0M1Nzk1RDFEQTVDMzAxMDA2RjlDODYgLyogU2Ny
b2xsTG9naWNhbFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0M1Nzk1RDFEQTVDMzAx
MDA2RkFDOTcgLyogU2Nyb2xsT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRjQ3ODc1NTQx
OTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1QjQ2NjU2NDI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0NjcyOTI4MUUwREU2ODUwMEFDQzNEOCAvKiBTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzU3OTVEMURBNUMzMDEw
MDZGQUNBOCAvKiBTY3JvbGxUb09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQzA5Qzg2
MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1
bGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nTW9tZW50
dW1DYWxjdWxhdG9yLmNwcAppbmRleCAxYmZlZmFhY2I4YzcxMTUwNzM1YzQ3NTgwY2IyY2ZhMGI4
NjQ2NTRhLi5iMWY4NjRmZWU4ZWZiYzNkODYyNTAwZDViOTlkMmQwYzFkYzY5NDZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1
bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ01v
bWVudHVtQ2FsY3VsYXRvci5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBTZWNvbmRzIHNjcm9s
bFNuYXBBbmltYXRpb25EdXJhdGlvbiA9IDFfczsKQEAgLTIzMywzICsyMzUsNSBAQCBmbG9hdCBC
YXNpY1Njcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvcjo6YW5pbWF0aW9uUHJvZ3Jlc3NBZnRlckVs
YXBzZWRUaW1lKFNlY29uZAogfQogCiB9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNlYzZjNDQxZDMxMmY1ODUyYmJkNmYyYjQ5
MGUyN2NiNWUzMTNhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgorCisj
aW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIK
KworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisjaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2VuZGlmCisKKyNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3Jv
bGxDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9
CisKK2Jvb2wgU2Nyb2xsQ29udHJvbGxlcjo6dXNlc1Njcm9sbFNuYXAoKSBjb25zdAoreworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgcmV0dXJuICEhbV9zY3JvbGxTbmFwU3RhdGU7
CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3Rh
dGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQoreworICAgIGNvbnN0IGF1
dG8qIHNuYXBPZmZzZXRJbmZvID0gc2Nyb2xsYWJsZUFyZWEuc25hcE9mZnNldEluZm8oKTsKKyAg
ICBpZiAoIXNuYXBPZmZzZXRJbmZvKSB7CisgICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlID0gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2lu
dHMoKnNuYXBPZmZzZXRJbmZvKTsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVT
Y3JvbGxTbmFwUG9pbnRzKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0PiYg
c25hcE9mZnNldEluZm8pCit7CisgICAgaWYgKHNuYXBPZmZzZXRJbmZvLmlzRW1wdHkoKSkgewor
ICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBib29sIHNob3VsZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMgPSAhbV9zY3Jv
bGxTbmFwU3RhdGU7CisgICAgaWYgKCFtX3Njcm9sbFNuYXBTdGF0ZSkKKyAgICAgICAgbV9zY3Jv
bGxTbmFwU3RhdGUgPSBtYWtlVW5pcXVlPFNjcm9sbFNuYXBBbmltYXRvclN0YXRlPigpOworCisg
ICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldFNuYXBPZmZzZXRJbmZvKHNuYXBPZmZzZXRJbmZvKTsK
KworICAgIGlmIChzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzKQorICAgICAgICBzZXRB
Y3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNldChyb3VuZGVkSW50UG9pbnQobV9jbGllbnQu
c2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJl
YW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0
YXRlIG5ldyBzdGF0ZTogIiA8PCBWYWx1ZU9yTnVsbChtX3Njcm9sbFNuYXBTdGF0ZS5nZXQoKSkp
OworfQorCit1bnNpZ25lZCBTY3JvbGxDb250cm9sbGVyOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhG
b3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAoreworICAgIGlmICghdXNlc1Njcm9s
bFNuYXAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9zY3JvbGxTbmFwU3Rh
dGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoYXhpcyk7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJv
bGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhp
cywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+c2V0QWN0aXZlU25hcEluZGV4Rm9y
QXhpcyhheGlzLCBpbmRleCk7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVz
dFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGlu
dCBvZmZzZXQpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOwor
ICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3Rh
dGU7CisKKyAgICBhdXRvIHNuYXBPZmZzZXRzID0gc25hcFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhp
cyhheGlzKTsKKyAgICBpZiAoIXNuYXBPZmZzZXRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTGF5b3V0VW5pdCBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0
VW5pdChvZmZzZXQgLyBzY2FsZUZhY3RvciksIHNuYXBPZmZzZXRzLmZpcnN0KCkub2Zmc2V0KSwg
c25hcE9mZnNldHMubGFzdCgpLm9mZnNldCk7CisKKyAgICB1bnNpZ25lZCBhY3RpdmVJbmRleCA9
IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIGNsYW1w
ZWRPZmZzZXQsIDApLnNlY29uZDsKKyAgICBpZiAoYWN0aXZlSW5kZXggPT0gYWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yQXhpcyhheGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hY3RpdmVT
Y3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSB0cnVlOworICAgIHNldEFjdGl2ZVNjcm9sbFNuYXBJ
bmRleEZvckF4aXMoYXhpcywgYWN0aXZlSW5kZXgpOworfQorCitmbG9hdCBTY3JvbGxDb250cm9s
bGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQg
ZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2lu
YWxPZmZzZXQpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm4g
ZGVzdGluYXRpb25PZmZzZXQ7CisKKyAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0
YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOworICAgIGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3Rh
dGUuc25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOworICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gZGVzdGluYXRpb25PZmZzZXQ7CisKKyAgICBPcHRpb25hbDxMYXlv
dXRVbml0PiBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHM7CisgICAgaWYgKG9yaWdpbmFsT2Zm
c2V0Lmhhc1ZhbHVlKCkpCisgICAgICAgIG9yaWdpbmFsT2Zmc2V0SW5MYXlvdXRVbml0cyA9IExh
eW91dFVuaXQoKm9yaWdpbmFsT2Zmc2V0IC8gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCkpOwor
ICAgIExheW91dFVuaXQgb2Zmc2V0ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2Vz
dFNuYXBPZmZzZXQoYXhpcywgTGF5b3V0VW5pdChkZXN0aW5hdGlvbk9mZnNldCAvIG1fY2xpZW50
LnBhZ2VTY2FsZUZhY3RvcigpKSwgdmVsb2NpdHksIG9yaWdpbmFsT2Zmc2V0SW5MYXlvdXRVbml0
cykuZmlyc3Q7CisgICAgcmV0dXJuIG9mZnNldCAqIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3Rvcigp
OworfQorCisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGlj
ZXNGb3JPZmZzZXQoU2Nyb2xsT2Zmc2V0IG9mZnNldCkKK3sKKyAgICBpZiAoIXVzZXNTY3JvbGxT
bmFwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhG
b3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgb2Zmc2V0LngoKSk7
CisgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZl
bnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0LnkoKSk7Cit9CisjZW5kaWYKKworLy8gQ3VycmVudGx5
LCBvbmx5IE1hYyBzdXBwb3J0cyBtb21lbnR1bSBzcm9sbGluZy1iYXNlZCBzY3JvbGxzbmFwcGlu
ZyBhbmQgcnViYmVyIGJhbmRpbmcKKy8vIHNvIGFsbCBvZiB0aGVzZSBtZXRob2RzIGFyZSBhIG5v
b3Agb24gbm9uLU1hYyBwbGF0Zm9ybXMuCisjaWYgIVBMQVRGT1JNKE1BQykKK1Njcm9sbENvbnRy
b2xsZXI6On5TY3JvbGxDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVy
OjpzdG9wQWxsVGltZXJzKCkKK3sKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY3JvbGxQ
b3NpdGlvbkNoYW5nZWQoKQoreworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxD
b250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkyNWZkNDU1ODRjMDExMWM5ZWYwYzI4OTFmN2M3NTE2
NjEwZWI3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCisjaW5jbHVkZSAiUmVjdEVkZ2VzLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIK
KyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKKyNpbmNsdWRlICJTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oIgorI2luY2x1ZGUg
IlNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgTGF5b3V0U2l6ZTsKK2NsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKK2NsYXNzIFNj
cm9sbENvbnRyb2xsZXI7CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKK2NsYXNzIFdoZWVsRXZlbnRU
ZXN0TW9uaXRvcjsKKworY2xhc3MgU2Nyb2xsQ29udHJvbGxlclRpbWVyIDogcHVibGljIFJ1bkxv
b3A6OlRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgU2Nyb2xsQ29udHJvbGxlclRpbWVyKFJ1bkxv
b3AmIHJ1bkxvb3AsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykKKyAgICAgICAgOiBSdW5M
b29wOjpUaW1lckJhc2UocnVuTG9vcCkKKyAgICAgICAgLCBtX2NhbGxiYWNrKFdURk1vdmUoY2Fs
bGJhY2spKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpcmVkKCkgZmluYWwKKyAgICB7Cisg
ICAgICAgIG1fY2FsbGJhY2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9p
ZCgpPiBtX2NhbGxiYWNrOworfTsKKworY2xhc3MgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+U2Nyb2xsQ29udHJvbGxlckNsaWVudCgpID0gZGVmYXVs
dDsKKworcHVibGljOgorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbENvbnRyb2xs
ZXJUaW1lcj4gY3JlYXRlVGltZXIoRnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CisKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTdHJl
dGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgc3RyZXRjaEFtb3VudCgpIGNvbnN0ID0g
MDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Bpbm5lZEZvclNjcm9sbERlbHRhKGNvbnN0IEZsb2F0
U2l6ZSYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVjdEVkZ2VzPGJvb2w+IGVkZ2VQaW5u
ZWRTdGF0ZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFs
U2Nyb2xsaW5nKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFNj
cm9sbGluZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFuZElu
RGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IHVz
ZSBTY3JvbGxDbGFtcGluZyB0byBjb2xsYXBzZSB0aGVzZSB0byBvbmUuCisgICAgdmlydHVhbCB2
b2lkIGltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25z
dCBGbG9hdFNpemUmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0UnViYmVyQmFu
ZFNuYXBBbmltYXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcFJ1YmJlcmJhbmRT
bmFwQW5pbWF0aW9uKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcnViYmVyQmFuZGluZ1N0YXRl
Q2hhbmdlZChib29sKSB7IH0KKworICAgIC8vIElmIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlv
biBpcyB3aXRoaW4gdGhlIG92ZXJoYW5nIGFyZWEsIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZQor
ICAgIC8vIHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4K
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5
KCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmZXJXaGVlbEV2ZW50VGVzdENv
bXBsZXRpb25Gb3JSZWFzb24oV2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlk
ZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6RGVmZXJSZWFzb24pIGNvbnN0IHsgLyog
RG8gbm90aGluZyAqLyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVdoZWVsRXZlbnRUZXN0Q29t
cGxldGlvbkRlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJs
ZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkRlZmVyUmVhc29uKSBjb25z
dCB7IC8qIERvIG5vdGhpbmcgKi8gfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAg
ICB2aXJ0dWFsIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0
YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9CisK
KyAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgdW5zaWduZWQgYWN0aXZlU2Nyb2xsT2Zmc2V0SW5kZXgoU2Nyb2xsRXZlbnRBeGlzKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdmlydHVhbCBMYXlv
dXRTaXplIHNjcm9sbEV4dGVudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2
aWV3cG9ydFNpemUoKSBjb25zdCA9IDA7CisjZW5kaWYKK307CisKK2NsYXNzIFNjcm9sbENvbnRy
b2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbENvbnRyb2xsZXIpOworCitw
dWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xp
ZW50Jik7CisgICAgflNjcm9sbENvbnRyb2xsZXIoKTsKKworICAgIGJvb2wgdXNlc1Njcm9sbFNu
YXAoKSBjb25zdDsKKyAgICB2b2lkIHN0b3BBbGxUaW1lcnMoKTsKKyAgICB2b2lkIHNjcm9sbFBv
c2l0aW9uQ2hhbmdlZCgpOworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lk
IHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91
dFVuaXQ+Jik7CisgICAgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9s
bEV2ZW50QXhpcywgdW5zaWduZWQpOworICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGlj
ZXNGb3JPZmZzZXQoU2Nyb2xsT2Zmc2V0KTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRl
eERpZENoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hh
bmdlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0ZSkg
eyBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSA9IHN0YXRlOyB9CisgICAgdW5zaWdu
ZWQgYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0Owor
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7Cisg
ICAgdm9pZCB1cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpOworICAgIGZsb2F0IGFkanVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhp
cywgZmxvYXQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9h
dD4gb3JpZ2luYWxPZmZzZXQpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIGhhbmRsZWQuCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYpOworCisgICAgZW51bSBjbGFzcyBXaGVlbEF4aXNCaWFzIHsg
Tm9uZSwgVmVydGljYWwgfTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2Nyb2xsRGlyZWN0aW9uPiBk
aXJlY3Rpb25Gcm9tRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgT3B0aW9uYWw8U2Ny
b2xsRXZlbnRBeGlzPiwgV2hlZWxBeGlzQmlhcyA9IFdoZWVsQXhpc0JpYXM6Ok5vbmUpOworICAg
IHN0YXRpYyBGbG9hdFNpemUgd2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50Jik7CisKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Mo
KSBjb25zdDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdDsKKworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGhhbmRsZWQu
CisgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7CisjZW5kaWYKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICB2
b2lkIHN0b3BSdWJiZXJiYW5kaW5nKCk7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNz
KCkgY29uc3Q7CisgICAgUmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRpbmdFZGdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcnViYmVyQmFuZGluZ0VkZ2VzOyB9CisjZW5kaWYKKyNlbmRpZgorCitwcml2
YXRlOgorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCBzZXROZWFyZXN0U2Ny
b2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGludCk7CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAg
IHZvaWQgc2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRp
bWVyKCk7CisgICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7CisgICAgYm9vbCBzaG91bGRP
dmVycmlkZU1vbWVudHVtU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAgdm9pZCBzdGF0ZWxlc3NTbmFw
VHJhbnNpdGlvblRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHNjaGVkdWxlU3RhdGVsZXNzU2Nyb2xs
U25hcCgpOworICAgIHZvaWQgc3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25E
dWVUb1Njcm9sbFNuYXBwaW5nKCk7CisgICAgdm9pZCBzdG9wRGVmZXJyaW5nV2hlZWxFdmVudFRl
c3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpOworI2VuZGlmCisKKyNpZiBFTkFCTEUo
UlVCQkVSX0JBTkRJTkcpCisgICAgdm9pZCBzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKKyAg
ICB2b2lkIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFu
ZCgpOworICAgIHZvaWQgc25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKCk7CisgICAgYm9vbCBzaG91
bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERp
cmVjdGlvbikgY29uc3Q7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwo
KSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOworICAgIHZvaWQg
dXBkYXRlUnViYmVyQmFuZGluZ0VkZ2VzKEludFNpemUgY2xpZW50U3RyZXRjaCk7CisjZW5kaWYK
KyNlbmRpZgorCisgICAgU2Nyb2xsQ29udHJvbGxlckNsaWVudCYgbV9jbGllbnQ7CisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGU+IG1fc2Nyb2xsU25hcFN0YXRlOworICAgIGJvb2wgbV9hY3RpdmVTY3JvbGxTbmFw
SW5kZXhEaWRDaGFuZ2UgeyBmYWxzZSB9OworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgV2FsbFRpbWUgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgRmxvYXRTaXpl
IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9y
Y2U7CisgICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKKworICAgIGJvb2wgbV9pblNj
cm9sbEdlc3R1cmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jl
c3MgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc1J1YmJlckJhbmRpbmcgeyBmYWxzZSB9OworCisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKKyAgICBGbG9hdFNpemUgbV9kcmFnRW5kZWRTY3JvbGxpbmdWZWxvY2l0
eTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBtX3N0YXRlbGVz
c1NuYXBUcmFuc2l0aW9uVGltZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbENvbnRyb2xs
ZXJUaW1lcj4gbV9zY3JvbGxTbmFwVGltZXI7CisjZW5kaWYKKworI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKKyAgICAvLyBSdWJiZXIgYmFuZCBzdGF0ZS4KKyAgICBNb25vdG9uaWNUaW1lIG1f
c3RhcnRUaW1lOworICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKKyAgICBGbG9hdFNpemUg
bV9vcmlnVmVsb2NpdHk7CisgICAgUmVjdEVkZ2VzPGJvb2w+IG1fcnViYmVyQmFuZGluZ0VkZ2Vz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IG1fc25hcFJ1YmJl
cmJhbmRUaW1lcjsKKyNlbmRpZgorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIG1fdGlt
ZXJzV2VyZVN0b3BwZWQgeyBmYWxzZSB9OworI2VuZGlmCisjZW5kaWYKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJCRVJfQkFORElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43ZDY4ZDUwZGRlNzZlODkwOTZjZDNlNThmM2ZjMzkxZmZjNjcxNzdjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGUuY3BwCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKKworI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0cmFuc2l0aW9uVG9TbmFwQW5pbWF0aW9uU3Rh
dGUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9y
dFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCkK
K3sKKyAgICBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcs
IGNvbnRlbnRTaXplLCB2aWV3cG9ydFNpemUsIHBhZ2VTY2FsZSwgaW5pdGlhbE9mZnNldCwgeyB9
LCB7IH0pOworfQorCit2b2lkIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0cmFuc2l0aW9uVG9H
bGlkZUFuaW1hdGlvblN0YXRlKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUsIGNvbnN0IEZs
b2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBwYWdlU2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQm
IGluaXRpYWxPZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbFZlbG9jaXR5LCBjb25zdCBG
bG9hdFNpemUmIGluaXRpYWxEZWx0YSkKK3sKKyAgICBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNj
cm9sbFNuYXBTdGF0ZTo6R2xpZGluZywgY29udGVudFNpemUsIHZpZXdwb3J0U2l6ZSwgcGFnZVNj
YWxlLCBpbml0aWFsT2Zmc2V0LCBpbml0aWFsVmVsb2NpdHksIGluaXRpYWxEZWx0YSk7Cit9CisK
K3ZvaWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnNldHVwQW5pbWF0aW9uRm9yU3RhdGUoU2Ny
b2xsU25hcFN0YXRlIHN0YXRlLCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplLCBjb25zdCBG
bG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgcGFnZVNjYWxlLCBjb25zdCBGbG9hdFBvaW50
JiBpbml0aWFsT2Zmc2V0LCBjb25zdCBGbG9hdFNpemUmIGluaXRpYWxWZWxvY2l0eSwgY29uc3Qg
RmxvYXRTaXplJiBpbml0aWFsRGVsdGEpCit7CisgICAgQVNTRVJUKHN0YXRlID09IFNjcm9sbFNu
YXBTdGF0ZTo6U25hcHBpbmcgfHwgc3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKTsK
KyAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gc3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbW9tZW50dW1DYWxjdWxhdG9yID0gU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yOjpjcmVh
dGUodmlld3BvcnRTaXplLCBjb250ZW50U2l6ZSwgaW5pdGlhbE9mZnNldCwgaW5pdGlhbERlbHRh
LCBpbml0aWFsVmVsb2NpdHkpOworICAgIGF1dG8gcHJlZGljdGVkU2Nyb2xsVGFyZ2V0ID0gbV9t
b21lbnR1bUNhbGN1bGF0b3ItPnByZWRpY3RlZERlc3RpbmF0aW9uT2Zmc2V0KCk7CisgICAgZmxv
YXQgdGFyZ2V0T2Zmc2V0WCA9IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCwgY29udGVudFNpemUud2lkdGgoKSAtIHZpZXdwb3J0U2l6ZS53aWR0
aCgpLCBpbml0aWFsT2Zmc2V0LngoKSwgcHJlZGljdGVkU2Nyb2xsVGFyZ2V0LndpZHRoKCksIHBh
Z2VTY2FsZSwgaW5pdGlhbERlbHRhLndpZHRoKCksIG1fYWN0aXZlU25hcEluZGV4WCk7CisgICAg
ZmxvYXQgdGFyZ2V0T2Zmc2V0WSA9IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWwsIGNvbnRlbnRTaXplLmhlaWdodCgpIC0gdmlld3BvcnRTaXplLmhl
aWdodCgpLCBpbml0aWFsT2Zmc2V0LnkoKSwgcHJlZGljdGVkU2Nyb2xsVGFyZ2V0LmhlaWdodCgp
LCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0YS5oZWlnaHQoKSwgbV9hY3RpdmVTbmFwSW5kZXhZKTsK
KyAgICBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2V0UmV0YXJnZXRlZFNjcm9sbE9mZnNldCh7IHRh
cmdldE9mZnNldFgsIHRhcmdldE9mZnNldFkgfSk7CisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKKyAgICBtX2N1cnJlbnRTdGF0ZSA9IHN0YXRlOworfQorCit2b2lkIFNj
cm9sbFNuYXBBbmltYXRvclN0YXRlOjp0cmFuc2l0aW9uVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZSgp
Cit7CisgICAgdGVhcmRvd25BbmltYXRpb25Gb3JTdGF0ZShTY3JvbGxTbmFwU3RhdGU6OlVzZXJJ
bnRlcmFjdGlvbik7Cit9CisKK3ZvaWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRyYW5zaXRp
b25Ub0Rlc3RpbmF0aW9uUmVhY2hlZFN0YXRlKCkKK3sKKyAgICB0ZWFyZG93bkFuaW1hdGlvbkZv
clN0YXRlKFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRpb25SZWFjaGVkKTsKK30KKwordm9pZCBT
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6dGVhcmRvd25BbmltYXRpb25Gb3JTdGF0ZShTY3JvbGxT
bmFwU3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6
VXNlckludGVyYWN0aW9uIHx8IHN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRpb25S
ZWFjaGVkKTsKKyAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gc3RhdGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fbW9tZW50dW1DYWxjdWxhdG9yID0gbnVsbHB0cjsKKyAgICBtX3N0YXJ0VGlt
ZSA9IE1vbm90b25pY1RpbWUoKTsKKyAgICBtX2N1cnJlbnRTdGF0ZSA9IHN0YXRlOworfQorCitG
bG9hdFBvaW50IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpjdXJyZW50QW5pbWF0ZWRTY3JvbGxP
ZmZzZXQoYm9vbCYgaXNBbmltYXRpb25Db21wbGV0ZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fbW9t
ZW50dW1DYWxjdWxhdG9yKSB7CisgICAgICAgIGlzQW5pbWF0aW9uQ29tcGxldGUgPSB0cnVlOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFNlY29uZHMgZWxhcHNlZFRpbWUgPSBN
b25vdG9uaWNUaW1lOjpub3coKSAtIG1fc3RhcnRUaW1lOworICAgIGlzQW5pbWF0aW9uQ29tcGxl
dGUgPSBlbGFwc2VkVGltZSA+PSBtX21vbWVudHVtQ2FsY3VsYXRvci0+YW5pbWF0aW9uRHVyYXRp
b24oKTsKKyAgICByZXR1cm4gbV9tb21lbnR1bUNhbGN1bGF0b3ItPnNjcm9sbE9mZnNldEFmdGVy
RWxhcHNlZFRpbWUoZWxhcHNlZFRpbWUpOworfQorCitmbG9hdCBTY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZTo6dGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZs
b2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRpY3RlZE9m
ZnNldCwgZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBpbml0aWFsRGVsdGEsIHVuc2lnbmVkJiBvdXRB
Y3RpdmVTbmFwSW5kZXgpIGNvbnN0Cit7CisgICAgTGF5b3V0VW5pdCBwcm9wb3NlZE9mZnNldDsK
KyAgICBzdGQ6OnRpZShwcm9wb3NlZE9mZnNldCwgb3V0QWN0aXZlU25hcEluZGV4KSA9IG1fc25h
cE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIExheW91dFVuaXQocHJlZGljdGVk
T2Zmc2V0IC8gcGFnZVNjYWxlKSwgaW5pdGlhbERlbHRhKTsKKyAgICBpZiAob3V0QWN0aXZlU25h
cEluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpCisgICAgICAgIHJldHVybiBwYWdlU2Nh
bGUgKiBwcm9wb3NlZE9mZnNldDsKKyAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RhcnRPZmZz
ZXQsIDAsIG1heFNjcm9sbE9mZnNldCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzdGF0ZSkKK3sKKyAg
ICB0cyA8PCAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUiOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c25hcCBvZmZzZXRzIHgiLCBzdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMgeSIsIHN0
YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisgICAg
aWYgKCFzdGF0ZS5zbmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwpLmlzRW1wdHkoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMg
cmFuZ2VzIHgiLCBzdGF0ZS5zbmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwpKTsKKyAgICBpZiAoIXN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWwpLmlzRW1wdHkoKSkKKyAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzbmFwIG9mZnNldHMgcmFuZ2VzIHkiLCBzdGF0ZS5zbmFwT2Zmc2V0UmFuZ2VzRm9yQXhp
cyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImFj
dGl2ZSBzbmFwIGluZGV4IHgiLCBzdGF0ZS5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWN0aXZlIHNuYXAg
aW5kZXggeSIsIHN0YXRlLmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCkpOworCisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZWIxYWMzYjU5YWFl
ZTQ0YzYzOWI0YWZmMGMyNDI2OTU4MjE0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCkBAIC0wLDAgKzEsMTIyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CisjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKKyNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCIKKyNpbmNsdWRlICJTY3JvbGxU
eXBlcy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5oIgorI2luY2x1
ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgVGV4dFN0
cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFNjcm9sbFNuYXBT
dGF0ZSB7CisgICAgU25hcHBpbmcsCisgICAgR2xpZGluZywKKyAgICBEZXN0aW5hdGlvblJlYWNo
ZWQsCisgICAgVXNlckludGVyYWN0aW9uCit9OworCitjbGFzcyBTY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgY29uc3Qg
VmVjdG9yPFNuYXBPZmZzZXQ8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xs
RXZlbnRBeGlzIGF4aXMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25h
cE9mZnNldHMgOiBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIH0K
KworICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBP
ZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFw
T2Zmc2V0c0luZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMgOiBtX3NuYXBPZmZzZXRzSW5m
by52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7CisgICAgfQorCisgICAgY29uc3QgU2Nyb2xsU25h
cE9mZnNldHNJbmZvPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0SW5mbygpIGNvbnN0IHsgcmV0dXJu
IG1fc25hcE9mZnNldHNJbmZvOyB9CisgICAgdm9pZCBzZXRTbmFwT2Zmc2V0SW5mbyhjb25zdCBT
Y3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4mIG5ld0luZm8pIHsgbV9zbmFwT2Zmc2V0
c0luZm8gPSBuZXdJbmZvOyB9CisKKyAgICB2b2lkIHNldFNuYXBPZmZzZXRzQW5kUG9zaXRpb25S
YW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8U25hcE9mZnNl
dDxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFu
Z2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzKQorICAgIHsKKyAgICAgICAgaWYgKGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSB7CisgICAgICAgICAgICBtX3NuYXBP
ZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKKyAgICAgICAg
ICAgIG1fc25hcE9mZnNldHNJbmZvLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzID0gc25hcE9m
ZnNldFJhbmdlczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc25hcE9mZnNldHNJ
bmZvLnZlcnRpY2FsU25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKKyAgICAgICAgICAgIG1fc25h
cE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyA9IHNuYXBPZmZzZXRSYW5nZXM7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTY3JvbGxTbmFwU3RhdGUgY3VycmVudFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50U3RhdGU7IH0KKworICAgIHVuc2lnbmVkIGFjdGl2ZVNu
YXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX2FjdGl2ZVNu
YXBJbmRleFggOiBtX2FjdGl2ZVNuYXBJbmRleFk7CisgICAgfQorCisgICAgdm9pZCBzZXRBY3Rp
dmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkK
KyAgICAgICAgICAgIG1fYWN0aXZlU25hcEluZGV4WCA9IGluZGV4OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2FjdGl2ZVNuYXBJbmRleFkgPSBpbmRleDsKKyAgICB9CisKKyAgICBGbG9h
dFBvaW50IGN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChib29sJiBpc0FuaW1hdGlvbkNvbXBs
ZXRlKSBjb25zdDsKKworICAgIC8vIFN0YXRlIHRyYW5zaXRpb24gaGVscGVycy4KKyAgICB2b2lk
IHRyYW5zaXRpb25Ub1NuYXBBbmltYXRpb25TdGF0ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRT
aXplLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgcGFnZVNjYWxlLCBjb25z
dCBGbG9hdFBvaW50JiBpbml0aWFsT2Zmc2V0KTsKKyAgICB2b2lkIHRyYW5zaXRpb25Ub0dsaWRl
QW5pbWF0aW9uU3RhdGUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRT
aXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5p
dGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0
U2l6ZSYgaW5pdGlhbERlbHRhKTsKKyAgICB2b2lkIHRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlv
blN0YXRlKCk7CisgICAgdm9pZCB0cmFuc2l0aW9uVG9EZXN0aW5hdGlvblJlYWNoZWRTdGF0ZSgp
OworCitwcml2YXRlOgorICAgIGZsb2F0IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9s
bEV2ZW50QXhpcywgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxv
YXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwg
dW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3Q7CisgICAgdm9pZCB0ZWFyZG93bkFu
aW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSk7CisgICAgdm9pZCBzZXR1cEFuaW1hdGlv
bkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwg
Y29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxv
YXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmVsb2NpdHks
IGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsKKworICAgIFNjcm9sbFNuYXBTdGF0ZSBt
X2N1cnJlbnRTdGF0ZSB7IFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9uIH07CisKKyAg
ICBTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0c0luZm87CisK
KyAgICB1bnNpZ25lZCBtX2FjdGl2ZVNuYXBJbmRleFggeyAwIH07CisgICAgdW5zaWduZWQgbV9h
Y3RpdmVTbmFwSW5kZXhZIHsgMCB9OworCisgICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yPiBtX21vbWVu
dHVtQ2FsY3VsYXRvcjsKK307CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBjb25zdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDRiOTgwNmQ0Njg2MjQwM2IxOTA0N2Y2ZmZkN2RhOGE0
MDhlODdjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykgfHwgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNp
bmNsdWRlICJSZWN0RWRnZXMuaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUg
IldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
I2luY2x1ZGUgIlNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgiCi0jaW5jbHVkZSAiU2Nyb2xsU25h
cE9mZnNldHNJbmZvLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBM
YXlvdXRTaXplOwotY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwotY2xhc3MgU2Nyb2xsQ29udHJv
bGxlcjsKLWNsYXNzIFNjcm9sbGFibGVBcmVhOwotY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9y
OwotCi1jbGFzcyBTY3JvbGxDb250cm9sbGVyVGltZXIgOiBwdWJsaWMgUnVuTG9vcDo6VGltZXJC
YXNlIHsKLXB1YmxpYzoKLSAgICBTY3JvbGxDb250cm9sbGVyVGltZXIoUnVuTG9vcCYgcnVuTG9v
cCwgRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQotICAgICAgICA6IFJ1bkxvb3A6OlRpbWVy
QmFzZShydW5Mb29wKQotICAgICAgICAsIG1fY2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgZmlyZWQoKSBmaW5hbAotICAgIHsKLSAgICAgICAgbV9j
YWxsYmFjaygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fY2Fs
bGJhY2s7Ci19OwotCi1jbGFzcyBTY3JvbGxDb250cm9sbGVyQ2xpZW50IHsKLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIH5TY3JvbGxDb250cm9sbGVyQ2xpZW50KCkgPSBkZWZhdWx0OwotCi1wdWJs
aWM6Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBj
cmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYpID0gMDsKLQotI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhbGxv
d3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgY29uc3QgPSAwOwotCi0gICAg
dmlydHVhbCBib29sIGlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJikgY29u
c3QgPSAwOwotCi0gICAgdmlydHVhbCBSZWN0RWRnZXM8Ym9vbD4gZWRnZVBpbm5lZFN0YXRlKCkg
Y29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTY3JvbGxpbmco
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24o
U2Nyb2xsRGlyZWN0aW9uKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBGSVhNRTogdXNlIFNjcm9sbENs
YW1waW5nIHRvIGNvbGxhcHNlIHRoZXNlIHRvIG9uZS4KLSAgICB2aXJ0dWFsIHZvaWQgaW1tZWRp
YXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbW1l
ZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6
ZSYpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0UnViYmVyQmFuZFNuYXBB
bmltYXRpb24oKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcFJ1YmJlcmJhbmRTbmFwQW5p
bWF0aW9uKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnViYmVyQmFuZGluZ1N0YXRlQ2hhbmdl
ZChib29sKSB7IH0KLQotICAgIC8vIElmIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBpcyB3
aXRoaW4gdGhlIG92ZXJoYW5nIGFyZWEsIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZQotICAgIC8v
IHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4KLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAw
OwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZGVmZXJXaGVlbEV2ZW50VGVzdENvbXBsZXRp
b25Gb3JSZWFzb24oV2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZp
ZXIsIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6RGVmZXJSZWFzb24pIGNvbnN0IHsgLyogRG8gbm90
aGluZyAqLyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVdoZWVsRXZlbnRUZXN0Q29tcGxldGlv
bkRlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkRlZmVyUmVhc29uKSBjb25zdCB7IC8q
IERvIG5vdGhpbmcgKi8gfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2aXJ0
dWFsIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwg
dW5zaWduZWQgYWN0aXZlU2Nyb2xsT2Zmc2V0SW5kZXgoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdmlydHVhbCBMYXlvdXRTaXpl
IHNjcm9sbEV4dGVudCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWV3cG9y
dFNpemUoKSBjb25zdCA9IDA7Ci0jZW5kaWYKLX07Ci0KLWVudW0gY2xhc3MgV2hlZWxFdmVudFN0
YXR1cyB7Ci0gICAgVXNlclNjcm9sbEJlZ2luLAotICAgIFVzZXJTY3JvbGxpbmcsCi0gICAgVXNl
clNjcm9sbEVuZCwKLSAgICBNb21lbnR1bVNjcm9sbEJlZ2luLAotICAgIE1vbWVudHVtU2Nyb2xs
aW5nLAotICAgIE1vbWVudHVtU2Nyb2xsRW5kLAotICAgIFN0YXRlbGVzc1Njcm9sbEV2ZW50LAot
ICAgIFVua25vd24KLX07Ci0KLWNsYXNzIFNjcm9sbENvbnRyb2xsZXIgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNjcm9sbENvbnRyb2xsZXIpOwotCi1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50Jik7Ci0gICAgflNjcm9sbENv
bnRyb2xsZXIoKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYg
aGFuZGxlZC4KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50Jik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc3RvcFJ1YmJlcmJhbmRpbmcoKTsKLQotICAgIGJv
b2wgdXNlc1Njcm9sbFNuYXAoKSBjb25zdDsKLQotICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9n
cmVzcygpIGNvbnN0OwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Owot
ICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0OwotICAgIAotI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKLSAgICBSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGluZ0VkZ2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9ydWJiZXJCYW5kaW5nRWRnZXM7IH0KLSNlbmRpZgotCi0gICAg
dm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbzxMYXlvdXRVbml0PiYpOwotICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMsIHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldEFjdGl2ZVNj
cm9sbFNuYXBJbmRpY2VzRm9yT2Zmc2V0KFNjcm9sbE9mZnNldCk7Ci0gICAgYm9vbCBhY3RpdmVT
Y3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNjcm9sbFNu
YXBJbmRleERpZENoYW5nZTsgfQotICAgIHZvaWQgc2V0U2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdl
KGJvb2wgc3RhdGUpIHsgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSBzdGF0ZTsg
fQotICAgIHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZShjb25zdCBTY3JvbGxh
YmxlQXJlYSYpOwotICAgIHZvaWQgdXBkYXRlR2VzdHVyZUluUHJvZ3Jlc3NTdGF0ZShjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAgICBmbG9hdCBhZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihT
Y3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwg
T3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsT2Zmc2V0KTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAg
Ly8gUmV0dXJucyB0cnVlIGlmIGhhbmRsZWQuCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZv
clNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0jZW5kaWYKLSNlbmRpZgot
Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSB3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNWZXJ0aWNhbChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLQotICAgIGVudW0gY2xhc3MgV2hlZWxBeGlzQmlh
cyB7IE5vbmUsIFZlcnRpY2FsIH07Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNjcm9sbERpcmVjdGlv
bj4gZGlyZWN0aW9uRnJvbUV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIE9wdGlvbmFs
PFNjcm9sbEV2ZW50QXhpcz4sIFdoZWVsQXhpc0JpYXMgPSBXaGVlbEF4aXNCaWFzOjpOb25lKTsK
LQotICAgIHZvaWQgc3RvcEFsbFRpbWVycygpOwotCi1wcml2YXRlOgotI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKLSAgICB2b2lkIHN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcigpOwotICAgIHZv
aWQgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKLSAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7
Ci0gICAgdm9pZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgc2hvdWxk
UnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KSBjb25zdDsKLSAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJl
Y3Rpb24pIGNvbnN0OwotCi0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwo
KSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotICAgIHZvaWQg
dXBkYXRlUnViYmVyQmFuZGluZ0VkZ2VzKEludFNpemUgY2xpZW50U3RyZXRjaCk7Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCBzZXROZWFyZXN0U2Nyb2xs
U25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGludCk7Ci0jaWYgUExB
VEZPUk0oTUFDKQotICAgIHZvaWQgc2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHN0
YXJ0U2Nyb2xsU25hcFRpbWVyKCk7Ci0gICAgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7Ci0K
LSAgICBib29sIHNob3VsZE92ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKSBjb25zdDsKLSAgICB2
b2lkIHN0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXJGaXJlZCgpOwotICAgIHZvaWQgc2NoZWR1
bGVTdGF0ZWxlc3NTY3JvbGxTbmFwKCk7Ci0KLSAgICB2b2lkIHN0YXJ0RGVmZXJyaW5nV2hlZWxF
dmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpOwotICAgIHZvaWQgc3RvcERl
ZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLSNl
bmRpZgotI2VuZGlmCi0KLSAgICBTY3JvbGxDb250cm9sbGVyQ2xpZW50JiBtX2NsaWVudDsKLQot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBXYWxsVGltZSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVz
dGFtcDsKLSNlbmRpZgotICAgIEZsb2F0U2l6ZSBtX292ZXJmbG93U2Nyb2xsRGVsdGE7Ci0gICAg
RmxvYXRTaXplIG1fc3RyZXRjaFNjcm9sbEZvcmNlOwotICAgIEZsb2F0U2l6ZSBtX21vbWVudHVt
VmVsb2NpdHk7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgLy8gUnViYmVyIGJh
bmQgc3RhdGUuCi0gICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKLSAgICBGbG9hdFNpemUg
bV9zdGFydFN0cmV0Y2g7Ci0gICAgRmxvYXRTaXplIG1fb3JpZ1ZlbG9jaXR5OwotICAgIFJlY3RF
ZGdlczxib29sPiBtX3J1YmJlckJhbmRpbmdFZGdlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Ny
b2xsQ29udHJvbGxlclRpbWVyPiBtX3NuYXBSdWJiZXJiYW5kVGltZXI7Ci0jZW5kaWYKLQotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbFNuYXBB
bmltYXRvclN0YXRlPiBtX3Njcm9sbFNuYXBTdGF0ZTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAg
RmxvYXRTaXplIG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHk7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbENvbnRyb2xsZXJUaW1lcj4gbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVy
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IG1fc2Nyb2xsU25h
cFRpbWVyOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBib29sIG1f
aW5TY3JvbGxHZXN0dXJlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJblBy
b2dyZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlTW9tZW50dW1TY3JvbGxzIHsgZmFs
c2UgfTsKLSAgICBib29sIG1faXNSdWJiZXJCYW5kaW5nIHsgZmFsc2UgfTsKLSNlbmRpZgotCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1fdGltZXJzV2VyZVN0b3BwZWQgeyBmYWxzZSB9
OwotI2VuZGlmCi0KLSAgICBib29sIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlIHsg
ZmFsc2UgfTsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvU2Nyb2xsQ29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3
ZjUzYWVkNjMzMTZhNjEzMTE3YjZkYTEzYWZiZWU5MWIyM2Y0MS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9TY3JvbGxDb250cm9sbGVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsOTI0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2Nyb2xsQ29udHJv
bGxlci5oIgotCi0jaW1wb3J0ICJMYXlvdXRTaXplLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0j
aW1wb3J0ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbXBvcnQgIldoZWVsRXZlbnRUZXN0TW9u
aXRvci5oIgotI2ltcG9ydCA8c3lzL3N5c2N0bC5oPgotI2ltcG9ydCA8c3lzL3RpbWUuaD4KLSNp
bXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi0jaW1wb3J0ICJTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oIgotI2ltcG9ydCAiU2Nyb2xs
YWJsZUFyZWEuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2ltcG9ydCA8cGFsL3Nw
aS9tYWMvTlNTY3JvbGxWaWV3U1BJLmg+Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykgfHwgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xs
VmVsb2NpdHlaZXJvaW5nVGltZW91dCA9IDEwMF9tczsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJi
ZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7Ci1zdGF0aWMgY29uc3QgZmxvYXQg
cnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOwotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShNQUMpCi1zdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURl
bHRhKGZsb2F0IGluaXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaXR5LCBTZWNvbmRz
IGVsYXBzZWRUaW1lKQotewotICAgIHJldHVybiBfTlNFbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEo
aW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsVmVsb2NpdHksIGVsYXBzZWRUaW1lLnNlY29uZHMoKSk7
Ci19Ci0KLXN0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVs
dGEpCi17Ci0gICAgcmV0dXJuIF9OU0VsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShkZWx0YSk7
Ci19Ci0KLXN0YXRpYyBmbG9hdCByZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZmxvYXQgZGVs
dGEpCi17Ci0gICAgcmV0dXJuIF9OU1JlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShkZWx0YSk7
Ci19Ci0KLXN0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKQotewotICAgIHN0YXRp
YyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7Ci0gICAgaWYgKG11bHRpcGxpZXIgPCAwKSB7Ci0gICAg
ICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBm
bG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0aXBsaWVyIl07Ci0gICAgICAgIGlmIChtdWx0
aXBsaWVyIDw9IDApCi0gICAgICAgICAgICBtdWx0aXBsaWVyID0gMTsKLSAgICB9Ci0gICAgcmV0
dXJuIG11bHRpcGxpZXI7Ci19Ci0jZW5kaWYKLQotU2Nyb2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29u
dHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChj
bGllbnQpCi17Ci19Ci0KLVNjcm9sbENvbnRyb2xsZXI6On5TY3JvbGxDb250cm9sbGVyKCkKLXsK
LSAgICBBU1NFUlQobV90aW1lcnNXZXJlU3RvcHBlZCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJv
bGxlcjo6c3RvcEFsbFRpbWVycygpCi17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAg
IGlmIChtX3NuYXBSdWJiZXJiYW5kVGltZXIpCi0gICAgICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1l
ci0+c3RvcCgpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFU
Rk9STShNQUMpCi0gICAgaWYgKG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcikKLSAgICAg
ICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyLT5zdG9wKCk7Ci0KLSAgICBpZiAobV9z
Y3JvbGxTbmFwVGltZXIpCi0gICAgICAgIG1fc2Nyb2xsU25hcFRpbWVyLT5zdG9wKCk7Ci0jZW5k
aWYKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV90aW1lcnNXZXJlU3RvcHBlZCA9IHRydWU7
Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6
aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBpZiAocHJvY2Vzc1doZWVsRXZlbnRG
b3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgot
ICAgIGlmICh3aGVlbEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok1h
eUJlZ2luIHx8IHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6
Q2FuY2VsbGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAod2hlZWxFdmVudC5w
aGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpCZWdhbikgewotICAgICAgICAvLyBG
SVhNRTogVHJ5aW5nIHRvIGRlY2lkZSBpZiBhIGdlc3R1cmUgaXMgaG9yaXpvbnRhbCBvciB2ZXJ0
aWNhbCBhdCB0aGUgImJlZ2FuIiBwaGFzZSBpcyB2ZXJ5IGVycm9yLXByb25lLgotICAgICAgICBh
dXRvIGRpcmVjdGlvbiA9IGRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwpOwotICAgICAgICBpZiAoZGlyZWN0aW9uICYmIG1fY2xpZW50Lmlz
UGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKC13aGVlbEV2ZW50LmRlbHRhWCgpLCAwKSkg
JiYgIXNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uRnJv
bUV2ZW50KHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwotICAgICAgICBp
ZiAoZGlyZWN0aW9uICYmIG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXpl
KDAsIC13aGVlbEV2ZW50LmRlbHRhWSgpKSkgJiYgIXNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlv
bihkaXJlY3Rpb24udmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgICAgbV9pZ25vcmVN
b21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1l
c3RhbXAgPSB7IH07Ci0gICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IHsgfTsKLQotICAgICAg
ICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAg
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNE
ZWx0YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKLSAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9y
Y2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50Lmhl
aWdodCgpKSk7Ci0gICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOwot
Ci0gICAgICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0gICAgICAgIHVwZGF0ZVJ1YmJl
ckJhbmRpbmdTdGF0ZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
d2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgewot
ICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwotICAgICAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3Rh
dGUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBpc01vbWVudHVt
U2Nyb2xsRXZlbnQgPSAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgIT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6Ok5vbmUpOwotICAgIGlmIChtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyAmJiAo
aXNNb21lbnR1bVNjcm9sbEV2ZW50IHx8IG1fc25hcFJ1YmJlcmJhbmRUaW1lcikpIHsKLSAgICAg
ICAgaWYgKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlOjpFbmRlZCkgewotICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlz
TW9tZW50dW1TY3JvbGxFdmVudCAmJiBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBm
bG9hdCBkZWx0YVggPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAgICBmbG9hdCBk
ZWx0YVkgPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0KLSAgICAvLyBSZXNldCBv
dmVyZmxvdyB2YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92ZSBkZWx0YSBhdCB2
YXJpb3VzIHBvaW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCi0gICAgbV9vdmVyZmxvd1Nj
cm9sbERlbHRhID0gRmxvYXRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBt
X2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQg
PSBzdHJldGNoQW1vdW50LmhlaWdodCgpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsbHlTdHJldGNo
ZWQgPSBzdHJldGNoQW1vdW50LndpZHRoKCk7Ci0KLSAgICBmbG9hdCBldmVudENvYWxlc2NlZERl
bHRhWDsKLSAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWTsKLQotICAgIGlmIChpc1ZlcnRp
Y2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKLSAgICAgICAgZXZl
bnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVs
dGFYKCk7Ci0gICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQudW5hY2Nl
bGVyYXRlZFNjcm9sbGluZ0RlbHRhWSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2ZW50Q29h
bGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7Ci0gICAgICAgIGV2ZW50Q29hbGVz
Y2VkRGVsdGFZID0gLXdoZWVsRXZlbnQuZGVsdGFZKCk7Ci0gICAgfQotCi0gICAgZGVsdGFYICs9
IGV2ZW50Q29hbGVzY2VkRGVsdGFYOwotICAgIGRlbHRhWSArPSBldmVudENvYWxlc2NlZERlbHRh
WTsKLQotICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBieSBhcHBs
eWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQotICAgIC8vIEZJWE1FOiBVc2Ugd2hlZWxEZWx0YUJp
YXNpbmdUb3dhcmRzVmVydGljYWwoKS4KLSAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihk
ZWx0YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAgIGVsc2UKLSAgICAgICAgZGVsdGFZID0g
MDsKLQotICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZhbHNlOwotCi0gICAgUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSA9IHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpOwot
Ci0gICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0aGVuIGRvIHNv
bWUgc2V0dXAuCi0gICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAobW9tZW50
dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW4gfHwgbW9tZW50dW1QaGFz
ZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZCkpCi0gICAgICAgIG1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1ZTsKLQotICAgIGF1dG8gdGltZURlbHRhID0gd2hlZWxF
dmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIGlm
IChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgewotICAg
ICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID4gMF9z
ICYmIHRpbWVEZWx0YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpIHsKLSAgICAgICAg
ICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRXaWR0aChldmVudENvYWxlc2NlZERlbHRhWCAvIHRp
bWVEZWx0YS5zZWNvbmRzKCkpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldEhl
aWdodChldmVudENvYWxlc2NlZERlbHRhWSAvIHRpbWVEZWx0YS5zZWNvbmRzKCkpOwotICAgICAg
ICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFt
cCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxU
aW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9tb21lbnR1
bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNWZXJ0
aWNhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbGx5U3RyZXRj
aGVkICYmIG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRlbHRhWCwg
MCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNh
bC4KLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFZICYmIChmYWJzZihkZWx0YVggLyBkZWx0YVkp
IDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQotICAgICAgICAgICAgICAg
ICAgICBkZWx0YVggPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWCkg
PCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Ny
b2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9
IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRl
bHRhWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNIb3Jpem9udGFsbHlT
dHJldGNoZWQpIHsKLSAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgaG9yaXpv
bnRhbC4KLSAgICAgICAgICAgIGlmIChtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZs
b2F0U2l6ZSgwLCBkZWx0YVkpKSkgewotICAgICAgICAgICAgICAgIGlmIChkZWx0YVggJiYgKGZh
YnNmKGRlbHRhWSAvIGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRp
bykpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZmFic2YoZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9y
ZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNl
dEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwotICAgICAg
ICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3ZlcmZsb3dT
Y3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBhdCBhbGwgeWV0LgotICAgICAg
ICAgICAgaWYgKG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRlbHRh
WCwgZGVsdGFZKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJz
ZihkZWx0YVgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVgpIDwgcnVi
YmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRh
WCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53
aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIW1fY2xpZW50LmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKQotICAg
ICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX2Ns
aWVudC5hbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpCi0gICAgICAgICAgICAg
ICAgICAgIGRlbHRhWSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBzaG91bGRTdHJldGNoID0gZGVs
dGFYIHx8IGRlbHRhWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxl
V2hlZWxFdmVudCgpIC0gZGVsdGFYICIgPDwgZGVsdGFYIDw8ICIgZGVsdGFZICIgPDwgZGVsdGFZ
IDw8ICIgcGlubmVkICIgPDwgbV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNp
emUoZGVsdGFYLCBkZWx0YVkpKSA8PCAiIHNob3VsZFN0cmV0Y2ggIiA8PCBzaG91bGRTdHJldGNo
KTsKLSAgICB9Ci0KLSAgICBib29sIGhhbmRsZWQgPSB0cnVlOwotCi0gICAgaWYgKGRlbHRhWCB8
fCBkZWx0YVkpIHsKLSAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlT
dHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7Ci0gICAgICAgICAgICBpZiAo
ZGVsdGFZKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGll
cigpOwotICAgICAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5KEZsb2F0U2l6
ZSgwLCBkZWx0YVkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkZWx0YVgpIHsK
LSAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Ci0gICAg
ICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRTaXplKGRlbHRhWCwg
MCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGRl
bHRhWCkgewotICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzSG9yaXpvbnRhbFN0
cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAwOwotICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgh
aXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgIW1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVs
dGEoRmxvYXRTaXplKGRlbHRhWCwgMCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCAq
PSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVu
dC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6
ZShkZWx0YVgsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkZWx0YVkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyh3aGVl
bEV2ZW50KSkgewotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAg
ICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGhh
bmRsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1ZlcnRpY2FsbHlT
dHJldGNoZWQgJiYgIW1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKDAs
IGRlbHRhWSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11
bHRpcGxpZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3Jv
bGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fY2xpZW50
LnN0cmV0Y2hBbW91bnQoKTsKLQotICAgICAgICAgICAgaWYgKG1fbW9tZW50dW1TY3JvbGxJblBy
b2dyZXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9s
bERlbHRhKEZsb2F0U2l6ZShldmVudENvYWxlc2NlZERlbHRhWCwgZXZlbnRDb2FsZXNjZWREZWx0
YVkpKSB8fCAoZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2YoZXZlbnRDb2FsZXNj
ZWREZWx0YVkpIDw9IDApKSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCkgewotICAg
ICAgICAgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChtX3N0
cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIG1fc3RyZXRj
aFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSArIGRl
bHRhWSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShjZWlsZihlbGFzdGlj
RGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkpLCBjZWls
ZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0
KCkpKSk7Ci0KLSAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENv
bnRlbnRFZGdlQ29uc3RyYWludHMoZGFtcGVkRGVsdGEgLSBzdHJldGNoQW1vdW50KTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiBtb21l
bnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgewotICAgICAgICBt
X21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICBtX2lnbm9yZU1vbWVu
dHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCA9IHsgfTsKLSAgICB9Ci0KLSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLQotICAg
IHJldHVybiBoYW5kbGVkOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotRmxvYXRTaXpl
IFNjcm9sbENvbnRyb2xsZXI6OndoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBhdXRvIGRlbHRhWCA9IHdo
ZWVsRXZlbnQuZGVsdGFYKCk7Ci0gICAgYXV0byBkZWx0YVkgPSB3aGVlbEV2ZW50LmRlbHRhWSgp
OwotCi0gICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKLSAgICAgICAgZGVs
dGFYID0gMDsKLSAgICBlbHNlCi0gICAgICAgIGRlbHRhWSA9IDA7Ci0KLSAgICByZXR1cm4geyBk
ZWx0YVgsIGRlbHRhWSB9OwotfQotCi1PcHRpb25hbDxTY3JvbGxEaXJlY3Rpb24+IFNjcm9sbENv
bnRyb2xsZXI6OmRpcmVjdGlvbkZyb21FdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQsIE9wdGlvbmFsPFNjcm9sbEV2ZW50QXhpcz4gYXhpcywgV2hlZWxBeGlzQmlhcyBi
aWFzKQotewotICAgIC8vIEZJWE1FOiBJdCdzIGltcG9zc2libGUgdG8gaW5mZXIgZGlyZWN0aW9u
IGZyb20gYSBzaW5nbGUgZXZlbnQsIHNpbmNlIHRoZSBzdGFydCBvZiBhIGdlc3R1cmUgaXMgZWl0
aGVyIHplcm8gb3IKLSAgICAvLyBoYXMgc21hbGwgZGVsdGFzIG9uIGJvdGggYXhlcy4KLQotICAg
IGF1dG8gd2hlZWxEZWx0YSA9IEZsb2F0U2l6ZSB7IHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVs
RXZlbnQuZGVsdGFZKCkgfTsKLSAgICBpZiAoYmlhcyA9PSBXaGVlbEF4aXNCaWFzOjpWZXJ0aWNh
bCkKLSAgICAgICAgd2hlZWxEZWx0YSA9IHdoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2Fs
KHdoZWVsRXZlbnQpOwotCi0gICAgaWYgKGF4aXMpIHsKLSAgICAgICAgc3dpdGNoIChheGlzLnZh
bHVlKCkpIHsKLSAgICAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOgotICAgICAg
ICAgICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVy
biBTY3JvbGxEb3duOwotCi0gICAgICAgICAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA+IDAp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbFVwOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6Ci0gICAgICAgICAgICBp
ZiAod2hlZWxEZWx0YS53aWR0aCgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xs
TGVmdDsKLQotICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEud2lkdGgoKSA8IDApCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBZIGZpcnN0IGJlY2F1c2UgdmVy
dGljYWwgc2Nyb2xsaW5nIGRvbWluYXRlcy4KLSAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA8
IDApCi0gICAgICAgIHJldHVybiBTY3JvbGxEb3duOwotCi0gICAgaWYgKHdoZWVsRGVsdGEuaGVp
Z2h0KCkgPiAwKQotICAgICAgICByZXR1cm4gU2Nyb2xsVXA7Ci0KLSAgICBpZiAod2hlZWxEZWx0
YS53aWR0aCgpID4gMCkKLSAgICAgICAgcmV0dXJuIFNjcm9sbExlZnQ7Ci0KLSAgICBpZiAod2hl
ZWxEZWx0YS53aWR0aCgpIDwgMCkKLSAgICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OwotCi0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLXN0
YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKLXsKLSAgICByZXR1
cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSArIDAuNWYpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZmxvYXQg
bnVtKQotewotICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsKLSAgICBpZiAoZmFi
cyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQotICAgICAgICBudW0gPSByb3VuZGVkTnVtOwot
Ci0gICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOwotfQotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKGlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRU
aW1lckZpcmVkKCkgLSBtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlm
ICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMp
IHsKLSAgICAgICAgYXV0byB0aW1lRGVsdGEgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fc3Rh
cnRUaW1lOwotCi0gICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaC5pc1plcm8oKSkgewotICAgICAg
ICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAgICAg
ICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsKLSAgICAgICAgICAgICAg
ICBzdG9wUnViYmVyYmFuZGluZygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7
Ci0KLSAgICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVy
dGljYWwgcnViYmVyYmFuZGluZwotICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5
LmhlaWdodCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKLSAgICAgICAgICAg
ICAgICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3Qg
cnViYmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBo
b3Jpem9udGFsbHkKLSAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzSG9yaXpvbnRhbFNj
cm9sbGluZygpKQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwot
Ci0gICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90
IHBvc3NpYmxlIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5Ci0gICAgICAgICAgICBpZiAoIW1fY2xpZW50
LmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2Np
dHkuc2V0SGVpZ2h0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRQb2ludCBkZWx0YShy
b3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0
YXJ0U3RyZXRjaC53aWR0aCgpLCAtbV9vcmlnVmVsb2NpdHkud2lkdGgoKSwgdGltZURlbHRhKSks
Ci0gICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZv
clRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdo
dCgpLCB0aW1lRGVsdGEpKSk7Ci0KLSAgICAgICAgaWYgKGZhYnMoZGVsdGEueCgpKSA+PSAxIHx8
IGZhYnMoZGVsdGEueSgpKSA+PSAxKSB7Ci0gICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVT
Y3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShkZWx0YS54KCks
IGRlbHRhLnkoKSkgLSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCkpOwotCi0gICAgICAgICAgICBG
bG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKTsKLQotICAgICAg
ICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3Rp
Y0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xs
Rm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLmhl
aWdodCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2NsaWVudC5hZGp1c3RT
Y3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIHN0b3BSdWJi
ZXJiYW5kaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtX3N0YXJ0VGlt
ZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IHsgfTsK
LSAgICAgICAgaWYgKCFpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSkKLSAgICAgICAg
ICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0gICAgfQotCi0gICAgdXBkYXRlUnViYmVy
QmFuZGluZ1N0YXRlKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY3Jv
bGxQb3NpdGlvbkNoYW5nZWQoKQotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB1
cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLSNlbmRpZgotfQotCi1ib29sIFNjcm9sbENvbnRy
b2xsZXI6OnVzZXNTY3JvbGxTbmFwKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQotICAgIHJldHVybiAhIW1fc2Nyb2xsU25hcFN0YXRlOwotI2Vsc2UKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVyOjppc1VzZXJTY3JvbGxJ
blByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIG1faW5T
Y3JvbGxHZXN0dXJlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotYm9v
bCBTY3JvbGxDb250cm9sbGVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpICYmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gbV9p
c1J1YmJlckJhbmRpbmc7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1i
b29sIFNjcm9sbENvbnRyb2xsZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAotewot
ICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQotICAgIGlmIChtX2luU2Ny
b2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX3Njcm9sbFNuYXBU
aW1lcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFJ1YmJlcmJhbmRpbmcoKQotewotI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLSAgICBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpOwotICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlID0geyB9OwotICAgIG1fc3RhcnRUaW1lID0geyB9OwotICAg
IG1fc3RhcnRTdHJldGNoID0geyB9OwotICAgIG1fb3JpZ1ZlbG9jaXR5ID0geyB9OwotICAgIHVw
ZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1l
cigpCi17Ci0gICAgbV9jbGllbnQud2lsbFN0YXJ0UnViYmVyQmFuZFNuYXBBbmltYXRpb24oKTsK
LQotICAgIC8vIE1ha2UgYSBuZXcgb25lIGVhY2ggdGltZSB0byBlbnN1cmUgaXQgZmlyZXMgb24g
dGhlIGN1cnJlbnQgUnVuTG9vcC4KLSAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXIgPSBtX2NsaWVu
dC5jcmVhdGVUaW1lcihbdGhpc10gewotICAgICAgICBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQo
KTsKLSAgICB9KTsKLSAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXItPnN0YXJ0UmVwZWF0aW5nKDFf
cyAvIDYwLik7Ci0KLSAgICBtX2NsaWVudC5kZWZlcldoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkZv
clJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJs
ZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpSdWJiZXJiYW5k
SW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNuYXBSdWJiZXJi
YW5kVGltZXIoKQotewotICAgIG1fY2xpZW50LmRpZFN0b3BSdWJiZXJiYW5kU25hcEFuaW1hdGlv
bigpOwotCi0gICAgaWYgKG1fc25hcFJ1YmJlcmJhbmRUaW1lcikgewotICAgICAgICBtX3NuYXBS
dWJiZXJiYW5kVGltZXItPnN0b3AoKTsKLSAgICAgICAgbV9zbmFwUnViYmVyYmFuZFRpbWVyID0g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBtX2NsaWVudC5yZW1vdmVXaGVlbEV2ZW50VGVzdENvbXBs
ZXRpb25EZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9u
aXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25p
dG9yOjpSdWJiZXJiYW5kSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6
c25hcFJ1YmJlckJhbmQoKQotewotICAgIGF1dG8gdGltZURlbHRhID0gV2FsbFRpbWU6Om5vdygp
IC0gbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7Ci0gICAgaWYgKG1fbGFzdE1vbWVudHVt
U2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+PSBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1l
b3V0KQotICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSB7IH07Ci0KLSAgICBpZiAobV9zbmFw
UnViYmVyYmFuZFRpbWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXJ0VGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwotICAgIG1fc3RhcnRTdHJldGNoID0geyB9OwotICAgIG1fb3Jp
Z1ZlbG9jaXR5ID0geyB9OwotCi0gICAgc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci19Ci0K
LWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVj
dGlvbihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpIGNvbnN0Ci17Ci0gICAg
YXV0byBkaXJlY3Rpb24gPSBkaXJlY3Rpb25Gcm9tRXZlbnQod2hlZWxFdmVudCwgU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsKTsKLSAgICBpZiAoZGlyZWN0aW9uKQotICAgICAgICByZXR1cm4g
c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKGRpcmVjdGlvbi52YWx1ZSgpKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFNjcm9sbENvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJ
bkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAotewotICAgIHJldHVy
biBtX2NsaWVudC5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uKTsKLX0KLQot
Ym9vbCBTY3JvbGxDb250cm9sbGVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSBj
b25zdAotewotICAgIGlmICghbV9pblNjcm9sbEdlc3R1cmUgJiYgIW1fbW9tZW50dW1TY3JvbGxJ
blByb2dyZXNzICYmICFtX3NuYXBSdWJiZXJiYW5kVGltZXIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiAhbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpLmlzWmVybygpOwotfQot
Ci12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpCi17Ci0g
ICAgYm9vbCBpc1J1YmJlckJhbmRpbmcgPSBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwo
KTsKLSAgICBpZiAoaXNSdWJiZXJCYW5kaW5nID09IG1faXNSdWJiZXJCYW5kaW5nKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2lzUnViYmVyQmFuZGluZyA9IGlzUnViYmVyQmFuZGluZzsKLSAg
ICBpZiAobV9pc1J1YmJlckJhbmRpbmcpCi0gICAgICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdl
cyhtX2NsaWVudC5zdHJldGNoQW1vdW50KCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9ydWJiZXJC
YW5kaW5nRWRnZXMgPSB7IH07Ci0KLSAgICBtX2NsaWVudC5ydWJiZXJCYW5kaW5nU3RhdGVDaGFu
Z2VkKG1faXNSdWJiZXJCYW5kaW5nKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRh
dGVSdWJiZXJCYW5kaW5nRWRnZXMoSW50U2l6ZSBjbGllbnRTdHJldGNoKQotewotICAgIG1fcnVi
YmVyQmFuZGluZ0VkZ2VzLnNldExlZnQoY2xpZW50U3RyZXRjaC53aWR0aCgpIDwgMCk7Ci0gICAg
bV9ydWJiZXJCYW5kaW5nRWRnZXMuc2V0UmlnaHQoY2xpZW50U3RyZXRjaC53aWR0aCgpID4gMCk7
Ci0KLSAgICBtX3J1YmJlckJhbmRpbmdFZGdlcy5zZXRUb3AoY2xpZW50U3RyZXRjaC5oZWlnaHQo
KSA8IDApOwotICAgIG1fcnViYmVyQmFuZGluZ0VkZ2VzLnNldEJvdHRvbShjbGllbnRTdHJldGNo
LmhlaWdodCgpID4gMCk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0K
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotCi0jaWYgUExBVEZPUk0oTUFDKQotc3RhdGlj
IGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0YXR1cyhQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSkK
LXsKLSAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmUpIHsKLSAg
ICAgICAgc3dpdGNoIChtb21lbnR1bVBoYXNlKSB7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6OkJlZ2FuOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6
Ok1vbWVudHVtU2Nyb2xsQmVnaW47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNoYW5nZWQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxF
dmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxpbmc7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgotICAgICAgICAgICAgcmV0dXJu
IFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsRW5kOwotCi0gICAgICAgIGNhc2UgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVu
dFN0YXR1czo6U3RhdGVsZXNzU2Nyb2xsRXZlbnQ7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOwotICAgICAgICB9Ci0gICAg
fQotICAgIGlmIChtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpOb25l
KSB7Ci0gICAgICAgIHN3aXRjaCAocGhhc2UpIHsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZTo6QmVnYW46Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6
Ok1heUJlZ2luOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3Jv
bGxCZWdpbjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZTo6Q2hhbmdlZDoKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpV
c2VyU2Nyb2xsaW5nOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlOjpFbmRlZDoKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZTo6Q2FuY2VsbGVkOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJT
Y3JvbGxFbmQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsKLX0KLQotI2lmICFMT0dfRElTQUJM
RUQKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBXaGVlbEV2
ZW50U3RhdHVzIHN0YXR1cykKLXsKLSAgICBzd2l0Y2ggKHN0YXR1cykgewotICAgIGNhc2UgV2hl
ZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOiB0cyA8PCAiVXNlclNjcm9sbEJlZ2luIjsg
YnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOiB0cyA8PCAi
VXNlclNjcm9sbGluZyI7IGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNj
cm9sbEVuZDogdHMgPDwgIlVzZXJTY3JvbGxFbmQiOyBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZl
bnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsQmVnaW46IHRzIDw8ICJNb21lbnR1bVNjcm9sbEJlZ2lu
IjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbGluZzog
dHMgPDwgIk1vbWVudHVtU2Nyb2xsaW5nIjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3Rh
dHVzOjpNb21lbnR1bVNjcm9sbEVuZDogdHMgPDwgIk1vbWVudHVtU2Nyb2xsRW5kIjsgYnJlYWs7
Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpTdGF0ZWxlc3NTY3JvbGxFdmVudDogdHMgPDwg
IlN0YXRlbGVzc1Njcm9sbEV2ZW50IjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVz
OjpVbmtub3duOiB0cyA8PCAiVW5rbm93biI7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7
Ci19Ci0jZW5kaWYKLQotYm9vbCBTY3JvbGxDb250cm9sbGVyOjpzaG91bGRPdmVycmlkZU1vbWVu
dHVtU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNjcm9sbFNuYXBTdGF0ZSBzY3JvbGxTbmFwU3RhdGUg
PSBtX3Njcm9sbFNuYXBTdGF0ZS0+Y3VycmVudFN0YXRlKCk7Ci0gICAgcmV0dXJuIHNjcm9sbFNu
YXBTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgc2Nyb2xsU25hcFN0YXRlID09
IFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRpb25SZWFjaGVkOwotfQotCi12b2lkIFNjcm9sbENv
bnRyb2xsZXI6OnNjaGVkdWxlU3RhdGVsZXNzU2Nyb2xsU25hcCgpCi17Ci0gICAgc3RvcFNjcm9s
bFNuYXBUaW1lcigpOwotICAgIGlmIChtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXIpIHsK
LSAgICAgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyLT5zdG9wKCk7Ci0gICAgICAg
IG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lciA9IG51bGxwdHI7Ci0gICAgfQotICAgIGlm
ICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljIGNvbnN0
IFNlY29uZHMgc3RhdGVsZXNzU2Nyb2xsU25hcERlbGF5ID0gNzUwX21zOwotICAgIG1fc3RhdGVs
ZXNzU25hcFRyYW5zaXRpb25UaW1lciA9IG1fY2xpZW50LmNyZWF0ZVRpbWVyKFt0aGlzXSB7Ci0g
ICAgICAgIHN0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXJGaXJlZCgpOwotICAgIH0pOwotICAg
IG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lci0+c3RhcnRPbmVTaG90KHN0YXRlbGVzc1Nj
cm9sbFNuYXBEZWxheSk7Ci0gICAgc3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRp
b25EdWVUb1Njcm9sbFNuYXBwaW5nKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3Rh
dGVsZXNzU25hcFRyYW5zaXRpb25UaW1lckZpcmVkKCkKLXsKLSAgICBtX3N0YXRlbGVzc1NuYXBU
cmFuc2l0aW9uVGltZXIgPSBudWxscHRyOwotCi0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvU25h
cEFuaW1hdGlvblN0YXRlKG1fY2xpZW50LnNjcm9sbEV4dGVudCgpLCBtX2NsaWVudC52aWV3cG9y
dFNpemUoKSwgbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50LnNjcm9sbE9mZnNl
dCgpKTsKLSAgICBzdGFydFNjcm9sbFNuYXBUaW1lcigpOwotfQotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxT
bmFwcGluZygpCi17Ci0gICAgbV9jbGllbnQuZGVmZXJXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25G
b3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFi
bGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsU25h
cEluUHJvZ3Jlc3MpOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BEZWZlcnJpbmdX
aGVlbEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCkKLXsKLSAgICBtX2Ns
aWVudC5yZW1vdmVXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EZWZlcnJhbEZvclJlYXNvbihyZWlu
dGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlm
aWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxTbmFwSW5Qcm9ncmVzcyk7
Ci19Ci0KLWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxT
bmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAoIXVz
ZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3Njcm9s
bFNuYXBTdGF0ZS0+c25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCkuaXNFbXB0eSgpICYmIG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIHN0YXR1cyA9IHRvV2hlZWxFdmVudFN0YXR1cyh3aGVlbEV2ZW50LnBoYXNl
KCksIHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgcHJv
Y2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwOiBzdGF0dXMgIiA8PCBzdGF0dXMpOwotCi0gICAg
Ym9vbCBpc01vbWVudHVtU2Nyb2xsaW5nID0gZmFsc2U7Ci0gICAgc3dpdGNoIChzdGF0dXMpIHsK
LSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKLSAgICBjYXNlIFdo
ZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc6Ci0gICAgICAgIHN0b3BTY3JvbGxTbmFwVGlt
ZXIoKTsKLSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub1VzZXJJbnRlcmFj
dGlvblN0YXRlKCk7Ci0gICAgICAgIG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHkgPSAtd2hl
ZWxFdmVudC5zY3JvbGxpbmdWZWxvY2l0eSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdo
ZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ6Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRl
LT50cmFuc2l0aW9uVG9TbmFwQW5pbWF0aW9uU3RhdGUobV9jbGllbnQuc2Nyb2xsRXh0ZW50KCks
IG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLCBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSwgbV9j
bGllbnQuc2Nyb2xsT2Zmc2V0KCkpOwotICAgICAgICBzdGFydFNjcm9sbFNuYXBUaW1lcigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xs
QmVnaW46Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9HbGlkZUFuaW1h
dGlvblN0YXRlKG1fY2xpZW50LnNjcm9sbEV4dGVudCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUo
KSwgbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50LnNjcm9sbE9mZnNldCgpLCBt
X2RyYWdFbmRlZFNjcm9sbGluZ1ZlbG9jaXR5LCBGbG9hdFNpemUoLXdoZWVsRXZlbnQuZGVsdGFY
KCksIC13aGVlbEV2ZW50LmRlbHRhWSgpKSk7Ci0gICAgICAgIG1fZHJhZ0VuZGVkU2Nyb2xsaW5n
VmVsb2NpdHkgPSB7IH07Ci0gICAgICAgIGlzTW9tZW50dW1TY3JvbGxpbmcgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsaW5n
OgotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxFbmQ6Ci0gICAgICAg
IGlzTW9tZW50dW1TY3JvbGxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdo
ZWVsRXZlbnRTdGF0dXM6OlN0YXRlbGVzc1Njcm9sbEV2ZW50OgotICAgICAgICBtX3Njcm9sbFNu
YXBTdGF0ZS0+dHJhbnNpdGlvblRvVXNlckludGVyYWN0aW9uU3RhdGUoKTsKLSAgICAgICAgc2No
ZWR1bGVTdGF0ZWxlc3NTY3JvbGxTbmFwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2hl
ZWxFdmVudFN0YXR1czo6VW5rbm93bjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBpc01vbWVudHVtU2Nyb2xsaW5nICYm
IHNob3VsZE92ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKTsKLX0KLQotdm9pZCBTY3JvbGxDb250
cm9sbGVyOjp1cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgp
IHx8IHdoZWVsRXZlbnQuaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKQotICAgICAg
ICBtX2luU2Nyb2xsR2VzdHVyZSA9IHRydWU7Ci0gICAgZWxzZSBpZiAod2hlZWxFdmVudC5pc0Vu
ZE9mTm9uTW9tZW50dW1TY3JvbGwoKSB8fCB3aGVlbEV2ZW50LmlzR2VzdHVyZUNhbmNlbCgpIHx8
IHdoZWVsRXZlbnQuaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkpCi0gICAgICAgIG1faW5TY3JvbGxH
ZXN0dXJlID0gZmFsc2U7Ci0KLSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLX0KLQot
dm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGFydFNjcm9sbFNuYXBUaW1lcigpCi17Ci0gICAgaWYg
KG1fc2Nyb2xsU25hcFRpbWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAi
IHN0YXJ0U2Nyb2xsU25hcFRpbWVyIChtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8
ICIpIik7Ci0KLSAgICBzdGFydERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRv
U2Nyb2xsU25hcHBpbmcoKTsKLSAgICBtX2NsaWVudC53aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0
aW9uKCk7Ci0gICAgbV9zY3JvbGxTbmFwVGltZXIgPSBtX2NsaWVudC5jcmVhdGVUaW1lcihbdGhp
c10gewotICAgICAgICBzY3JvbGxTbmFwVGltZXJGaXJlZCgpOwotICAgIH0pOwotICAgIG1fc2Ny
b2xsU25hcFRpbWVyLT5zdGFydFJlcGVhdGluZygxX3MgLyA2MC4pOwotfQotCi12b2lkIFNjcm9s
bENvbnRyb2xsZXI6OnN0b3BTY3JvbGxTbmFwVGltZXIoKQotewotICAgIGlmICghbV9zY3JvbGxT
bmFwVGltZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxT
bmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgc3RvcFNjcm9s
bFNuYXBUaW1lciAobWFpbiB0aHJlYWQgIiA8PCBpc01haW5UaHJlYWQoKSA8PCAiKSIpOwotCi0g
ICAgc3RvcERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBp
bmcoKTsKLSAgICBtX2NsaWVudC5kaWRTdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpOwotCi0gICAg
bV9zY3JvbGxTbmFwVGltZXItPnN0b3AoKTsKLSAgICBtX3Njcm9sbFNuYXBUaW1lciA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2Nyb2xsU25hcFRpbWVyRmlyZWQoKQot
ewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgaXNBbmltYXRpb25Db21w
bGV0ZTsKLSAgICBhdXRvIGFuaW1hdGlvbk9mZnNldCA9IG1fc2Nyb2xsU25hcFN0YXRlLT5jdXJy
ZW50QW5pbWF0ZWRTY3JvbGxPZmZzZXQoaXNBbmltYXRpb25Db21wbGV0ZSk7Ci0gICAgYXV0byBj
dXJyZW50T2Zmc2V0ID0gbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8
PCAiIHNjcm9sbFNuYXBUaW1lckZpcmVkIC0gaXNBbmltYXRpb25Db21wbGV0ZSAiIDw8IGlzQW5p
bWF0aW9uQ29tcGxldGUgPDwgIiBjdXJyZW50T2Zmc2V0ICIgPDwgY3VycmVudE9mZnNldCA8PCAi
IChtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8ICIpIik7Ci0KLSAgICBtX2NsaWVu
dC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6
ZShhbmltYXRpb25PZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGFuaW1hdGlvbk9mZnNl
dC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSkpOwotICAgIGlmIChpc0FuaW1hdGlvbkNvbXBsZXRl
KSB7Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9EZXN0aW5hdGlvblJl
YWNoZWRTdGF0ZSgpOwotICAgICAgICBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7Ci0gICAgfQotfQot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVT
Y3JvbGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQotewot
ICAgIGNvbnN0IGF1dG8qIHNuYXBPZmZzZXRJbmZvID0gc2Nyb2xsYWJsZUFyZWEuc25hcE9mZnNl
dEluZm8oKTsKLSAgICBpZiAoIXNuYXBPZmZzZXRJbmZvKSB7Ci0gICAgICAgIG1fc2Nyb2xsU25h
cFN0YXRlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVwZGF0ZVNj
cm9sbFNuYXBQb2ludHMoKnNuYXBPZmZzZXRJbmZvKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9s
bGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxM
YXlvdXRVbml0PiYgc25hcE9mZnNldEluZm8pCi17Ci0gICAgaWYgKHNuYXBPZmZzZXRJbmZvLmlz
RW1wdHkoKSkgewotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZENvbXB1dGVDdXJyZW50U25hcEluZGlj
ZXMgPSAhbV9zY3JvbGxTbmFwU3RhdGU7Ci0gICAgaWYgKCFtX3Njcm9sbFNuYXBTdGF0ZSkKLSAg
ICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBtYWtlVW5pcXVlPFNjcm9sbFNuYXBBbmltYXRvclN0
YXRlPigpOwotCi0gICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldFNuYXBPZmZzZXRJbmZvKHNuYXBP
ZmZzZXRJbmZvKTsKLQotICAgIGlmIChzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzKQot
ICAgICAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNldChyb3VuZGVkSW50UG9p
bnQobV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3Jv
bGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRl
U2Nyb2xsU25hcFN0YXRlIG5ldyBzdGF0ZTogIiA8PCBWYWx1ZU9yTnVsbChtX3Njcm9sbFNuYXBT
dGF0ZS5nZXQoKSkpOwotfQotCi11bnNpZ25lZCBTY3JvbGxDb250cm9sbGVyOjphY3RpdmVTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAotewotICAgIGlm
ICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9z
Y3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoYXhpcyk7Ci19Ci0KLXZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxF
dmVudEF4aXMgYXhpcywgdW5zaWduZWQgaW5kZXgpCi17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25h
cCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+c2V0QWN0aXZl
U25hcEluZGV4Rm9yQXhpcyhheGlzLCBpbmRleCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxl
cjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMsIGludCBvZmZzZXQpCi17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IG1fY2xpZW50LnBhZ2VTY2Fs
ZUZhY3RvcigpOwotICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9z
Y3JvbGxTbmFwU3RhdGU7Ci0KLSAgICBhdXRvIHNuYXBPZmZzZXRzID0gc25hcFN0YXRlLnNuYXBP
ZmZzZXRzRm9yQXhpcyhheGlzKTsKLSAgICBpZiAoIXNuYXBPZmZzZXRzLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTGF5b3V0VW5pdCBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptaW4oc3Rk
OjptYXgoTGF5b3V0VW5pdChvZmZzZXQgLyBzY2FsZUZhY3RvciksIHNuYXBPZmZzZXRzLmZpcnN0
KCkub2Zmc2V0KSwgc25hcE9mZnNldHMubGFzdCgpLm9mZnNldCk7Ci0KLSAgICB1bnNpZ25lZCBh
Y3RpdmVJbmRleCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0
KGF4aXMsIGNsYW1wZWRPZmZzZXQsIDApLnNlY29uZDsKLSAgICBpZiAoYWN0aXZlSW5kZXggPT0g
YWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhheGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSB0cnVlOwotICAgIHNldEFjdGl2
ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywgYWN0aXZlSW5kZXgpOwotfQotCi1mbG9hdCBT
Y3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXMg
YXhpcywgZmxvYXQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxm
bG9hdD4gb3JpZ2luYWxPZmZzZXQpCi17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAg
ICAgICByZXR1cm4gZGVzdGluYXRpb25PZmZzZXQ7Ci0KLSAgICBTY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwotICAgIGF1dG8gc25hcE9mZnNl
dHMgPSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOwotICAgIGlmICghc25hcE9m
ZnNldHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZGVzdGluYXRpb25PZmZzZXQ7Ci0KLSAgICBP
cHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHM7Ci0gICAgaWYg
KG9yaWdpbmFsT2Zmc2V0Lmhhc1ZhbHVlKCkpCi0gICAgICAgIG9yaWdpbmFsT2Zmc2V0SW5MYXlv
dXRVbml0cyA9IExheW91dFVuaXQoKm9yaWdpbmFsT2Zmc2V0IC8gbV9jbGllbnQucGFnZVNjYWxl
RmFjdG9yKCkpOwotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJ
bmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgTGF5b3V0VW5pdChkZXN0aW5hdGlvbk9mZnNl
dCAvIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpKSwgdmVsb2NpdHksIG9yaWdpbmFsT2Zmc2V0
SW5MYXlvdXRVbml0cykuZmlyc3Q7Ci0gICAgcmV0dXJuIG9mZnNldCAqIG1fY2xpZW50LnBhZ2VT
Y2FsZUZhY3RvcigpOwotfQotCi0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0QWN0aXZlU2Ny
b2xsU25hcEluZGljZXNGb3JPZmZzZXQoU2Nyb2xsT2Zmc2V0IG9mZnNldCkKLXsKLSAgICBpZiAo
IXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldE5lYXJlc3RTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwg
b2Zmc2V0LngoKSk7Ci0gICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZz
ZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0LnkoKSk7Ci19Ci0jZW5kaWYKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBB
bmltYXRvclN0YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZWIxYWMzYjU5
YWFlZTQ0YzYzOWI0YWZmMGMyNDI2OTU4MjE0OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
Ci0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5j
bHVkZSAiTGF5b3V0UG9pbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNp
bmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5o
IgotI2luY2x1ZGUgIlNjcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5oIgotI2luY2x1ZGUgPHd0
Zi9Nb25vdG9uaWNUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsK
LX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIFNjcm9sbFNuYXBTdGF0ZSB7
Ci0gICAgU25hcHBpbmcsCi0gICAgR2xpZGluZywKLSAgICBEZXN0aW5hdGlvblJlYWNoZWQsCi0g
ICAgVXNlckludGVyYWN0aW9uCi19OwotCi1jbGFzcyBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgY29uc3QgVmVjdG9y
PFNuYXBPZmZzZXQ8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwgPyBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNl
dHMgOiBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRzOwotICAgIH0KLQotICAg
IGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRS
YW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFwT2Zmc2V0
c0luZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMgOiBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0
aWNhbFNuYXBPZmZzZXRSYW5nZXM7Ci0gICAgfQotCi0gICAgY29uc3QgU2Nyb2xsU25hcE9mZnNl
dHNJbmZvPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc25h
cE9mZnNldHNJbmZvOyB9Ci0gICAgdm9pZCBzZXRTbmFwT2Zmc2V0SW5mbyhjb25zdCBTY3JvbGxT
bmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4mIG5ld0luZm8pIHsgbV9zbmFwT2Zmc2V0c0luZm8g
PSBuZXdJbmZvOyB9Ci0KLSAgICB2b2lkIHNldFNuYXBPZmZzZXRzQW5kUG9zaXRpb25SYW5nZXNG
b3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBWZWN0b3I8U25hcE9mZnNldDxMYXlv
dXRVbml0Pj4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5
b3V0VW5pdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzKQotICAgIHsKLSAgICAgICAgaWYgKGF4aXMgPT0g
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSB7Ci0gICAgICAgICAgICBtX3NuYXBPZmZzZXRz
SW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKLSAgICAgICAgICAgIG1f
c25hcE9mZnNldHNJbmZvLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzID0gc25hcE9mZnNldFJh
bmdlczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLnZl
cnRpY2FsU25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKLSAgICAgICAgICAgIG1fc25hcE9mZnNl
dHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyA9IHNuYXBPZmZzZXRSYW5nZXM7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBTY3JvbGxTbmFwU3RhdGUgY3VycmVudFN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50U3RhdGU7IH0KLQotICAgIHVuc2lnbmVkIGFjdGl2ZVNuYXBJbmRl
eEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX2FjdGl2ZVNuYXBJbmRl
eFggOiBtX2FjdGl2ZVNuYXBJbmRleFk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBY3RpdmVTbmFw
SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkKLSAgICB7
Ci0gICAgICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKLSAgICAg
ICAgICAgIG1fYWN0aXZlU25hcEluZGV4WCA9IGluZGV4OwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2FjdGl2ZVNuYXBJbmRleFkgPSBpbmRleDsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50
IGN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChib29sJiBpc0FuaW1hdGlvbkNvbXBsZXRlKSBj
b25zdDsKLQotICAgIC8vIFN0YXRlIHRyYW5zaXRpb24gaGVscGVycy4KLSAgICB2b2lkIHRyYW5z
aXRpb25Ub1NuYXBBbmltYXRpb25TdGF0ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplLCBj
b25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgcGFnZVNjYWxlLCBjb25zdCBGbG9h
dFBvaW50JiBpbml0aWFsT2Zmc2V0KTsKLSAgICB2b2lkIHRyYW5zaXRpb25Ub0dsaWRlQW5pbWF0
aW9uU3RhdGUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2
aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9m
ZnNldCwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYg
aW5pdGlhbERlbHRhKTsKLSAgICB2b2lkIHRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlvblN0YXRl
KCk7Ci0gICAgdm9pZCB0cmFuc2l0aW9uVG9EZXN0aW5hdGlvblJlYWNoZWRTdGF0ZSgpOwotCi1w
cml2YXRlOgotICAgIGZsb2F0IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50
QXhpcywgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJl
ZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWdu
ZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3Q7Ci0gICAgdm9pZCB0ZWFyZG93bkFuaW1hdGlv
bkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSk7Ci0gICAgdm9pZCBzZXR1cEFuaW1hdGlvbkZvclN0
YXRlKFNjcm9sbFNuYXBTdGF0ZSwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3Qg
RmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2lu
dCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmVsb2NpdHksIGNvbnN0
IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsKLQotICAgIFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJl
bnRTdGF0ZSB7IFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9uIH07Ci0KLSAgICBTY3Jv
bGxTbmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0c0luZm87Ci0KLSAgICB1
bnNpZ25lZCBtX2FjdGl2ZVNuYXBJbmRleFggeyAwIH07Ci0gICAgdW5zaWduZWQgbV9hY3RpdmVT
bmFwSW5kZXhZIHsgMCB9OwotCi0gICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yPiBtX21vbWVudHVtQ2Fs
Y3VsYXRvcjsKLX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBjb25zdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYpOwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNjM2UwNjZmYWQyM2Q2MTdkODU3MjI1
NTRlMzgxOGIxNzhjNmU5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgi
Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotCi0jaW1wb3J0IDx3dGYvTWF0aEV4dHJh
cy5oPgotI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXZvaWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRyYW5zaXRpb25Ub1NuYXBBbmlt
YXRpb25TdGF0ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplLCBjb25zdCBGbG9hdFNpemUm
IHZpZXdwb3J0U2l6ZSwgZmxvYXQgcGFnZVNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBpbml0aWFs
T2Zmc2V0KQotewotICAgIHNldHVwQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlOjpT
bmFwcGluZywgY29udGVudFNpemUsIHZpZXdwb3J0U2l6ZSwgcGFnZVNjYWxlLCBpbml0aWFsT2Zm
c2V0LCB7IH0sIHsgfSk7Ci19Ci0KLXZvaWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRyYW5z
aXRpb25Ub0dsaWRlQW5pbWF0aW9uU3RhdGUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSwg
Y29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxv
YXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmVsb2NpdHks
IGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKQotewotICAgIHNldHVwQW5pbWF0aW9uRm9y
U3RhdGUoU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nLCBjb250ZW50U2l6ZSwgdmlld3BvcnRTaXpl
LCBwYWdlU2NhbGUsIGluaXRpYWxPZmZzZXQsIGluaXRpYWxWZWxvY2l0eSwgaW5pdGlhbERlbHRh
KTsKLX0KLQotdm9pZCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6c2V0dXBBbmltYXRpb25Gb3JT
dGF0ZShTY3JvbGxTbmFwU3RhdGUgc3RhdGUsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBwYWdlU2NhbGUsIGNvbnN0IEZs
b2F0UG9pbnQmIGluaXRpYWxPZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbFZlbG9jaXR5
LCBjb25zdCBGbG9hdFNpemUmIGluaXRpYWxEZWx0YSkKLXsKLSAgICBBU1NFUlQoc3RhdGUgPT0g
U2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyB8fCBzdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6Okds
aWRpbmcpOwotICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBzdGF0ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9tb21lbnR1bUNhbGN1bGF0b3IgPSBTY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0
b3I6OmNyZWF0ZSh2aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLCBpbml0aWFsT2Zmc2V0LCBpbml0
aWFsRGVsdGEsIGluaXRpYWxWZWxvY2l0eSk7Ci0gICAgYXV0byBwcmVkaWN0ZWRTY3JvbGxUYXJn
ZXQgPSBtX21vbWVudHVtQ2FsY3VsYXRvci0+cHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQoKTsK
LSAgICBmbG9hdCB0YXJnZXRPZmZzZXRYID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlld3BvcnRT
aXplLndpZHRoKCksIGluaXRpYWxPZmZzZXQueCgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQud2lk
dGgoKSwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEud2lkdGgoKSwgbV9hY3RpdmVTbmFwSW5kZXhY
KTsKLSAgICBmbG9hdCB0YXJnZXRPZmZzZXRZID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQo
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9y
dFNpemUuaGVpZ2h0KCksIGluaXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQu
aGVpZ2h0KCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpLCBtX2FjdGl2ZVNuYXBJ
bmRleFkpOwotICAgIG1fbW9tZW50dW1DYWxjdWxhdG9yLT5zZXRSZXRhcmdldGVkU2Nyb2xsT2Zm
c2V0KHsgdGFyZ2V0T2Zmc2V0WCwgdGFyZ2V0T2Zmc2V0WSB9KTsKLSAgICBtX3N0YXJ0VGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIG1fY3VycmVudFN0YXRlID0gc3RhdGU7Ci19Ci0K
LXZvaWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlv
blN0YXRlKCkKLXsKLSAgICB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0
ZTo6VXNlckludGVyYWN0aW9uKTsKLX0KLQotdm9pZCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6
dHJhbnNpdGlvblRvRGVzdGluYXRpb25SZWFjaGVkU3RhdGUoKQotewotICAgIHRlYXJkb3duQW5p
bWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQpOwotfQot
Ci12b2lkIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRl
KFNjcm9sbFNuYXBTdGF0ZSBzdGF0ZSkKLXsKLSAgICBBU1NFUlQoc3RhdGUgPT0gU2Nyb2xsU25h
cFN0YXRlOjpVc2VySW50ZXJhY3Rpb24gfHwgc3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0
aW5hdGlvblJlYWNoZWQpOwotICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBzdGF0ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9tb21lbnR1bUNhbGN1bGF0b3IgPSBudWxscHRyOwotICAgIG1f
c3RhcnRUaW1lID0gTW9ub3RvbmljVGltZSgpOwotICAgIG1fY3VycmVudFN0YXRlID0gc3RhdGU7
Ci19Ci0KLUZsb2F0UG9pbnQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OmN1cnJlbnRBbmltYXRl
ZFNjcm9sbE9mZnNldChib29sJiBpc0FuaW1hdGlvbkNvbXBsZXRlKSBjb25zdAotewotICAgIGlm
ICghbV9tb21lbnR1bUNhbGN1bGF0b3IpIHsKLSAgICAgICAgaXNBbmltYXRpb25Db21wbGV0ZSA9
IHRydWU7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgU2Vjb25kcyBlbGFwc2Vk
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9zdGFydFRpbWU7Ci0gICAgaXNBbmltYXRp
b25Db21wbGV0ZSA9IGVsYXBzZWRUaW1lID49IG1fbW9tZW50dW1DYWxjdWxhdG9yLT5hbmltYXRp
b25EdXJhdGlvbigpOwotICAgIHJldHVybiBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2Nyb2xsT2Zm
c2V0QWZ0ZXJFbGFwc2VkVGltZShlbGFwc2VkVGltZSk7Ci19Ci0KLWZsb2F0IFNjcm9sbFNuYXBB
bmltYXRvclN0YXRlOjp0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXMg
YXhpcywgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJl
ZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWdu
ZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3QKLXsKLSAgICBMYXlvdXRVbml0IHByb3Bvc2Vk
T2Zmc2V0OwotICAgIHN0ZDo6dGllKHByb3Bvc2VkT2Zmc2V0LCBvdXRBY3RpdmVTbmFwSW5kZXgp
ID0gbV9zbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgTGF5b3V0VW5pdChw
cmVkaWN0ZWRPZmZzZXQgLyBwYWdlU2NhbGUpLCBpbml0aWFsRGVsdGEpOwotICAgIGlmIChvdXRB
Y3RpdmVTbmFwSW5kZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCkKLSAgICAgICAgcmV0dXJu
IHBhZ2VTY2FsZSAqIHByb3Bvc2VkT2Zmc2V0OwotICAgIHJldHVybiBjbGFtcFRvPGZsb2F0Pihz
dGFydE9mZnNldCwgMCwgbWF4U2Nyb2xsT2Zmc2V0KTsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHN0YXRl
KQotewotICAgIHRzIDw8ICJTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSI7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJzbmFwIG9mZnNldHMgeCIsIHN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxF
dmVudEF4aXM6Okhvcml6b250YWwpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0
cyB5Iiwgc3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwp
KTsKLSAgICBpZiAoIXN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCkuaXNFbXB0eSgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAg
b2Zmc2V0cyByYW5nZXMgeCIsIHN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCkpOwotICAgIGlmICghc3RhdGUuc25hcE9mZnNldFJhbmdlc0Zv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkuaXNFbXB0eSgpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyByYW5nZXMgeSIsIHN0YXRlLnNuYXBPZmZzZXRSYW5n
ZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKLQotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiYWN0aXZlIHNuYXAgaW5kZXggeCIsIHN0YXRlLmFjdGl2ZVNuYXBJbmRleEZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhY3Rp
dmUgc25hcCBpbmRleCB5Iiwgc3RhdGUuYWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIENTU19TQ1JPTExfU05BUApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNw
cAppbmRleCBlMmU1MWZkMGEwNjBkYWQyMWIyZDIxYTUyODVkNDBkNDczYmM1MjZhLi41ZGVkM2Ew
ODdkYTMyYzg1MDMwZDhkYjg1MjI5NTc5YTQ5OWQyODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNw
cApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xORU9OLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkZTgxZTA2ZjYz
OGU5Yzc3MGQ4NzQ4NjUzYjBjNWZlNjExYzRlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQpAQCAtMCwwICsxLDgwOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTY3JvbGxD
b250cm9sbGVyLmgiCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgorI2ltcG9ydCAiV2hlZWxFdmVudFRlc3RNb25pdG9yLmgiCisjaW1wb3J0IDxw
YWwvc3BpL21hYy9OU1Njcm9sbFZpZXdTUEkuaD4KKyNpbXBvcnQgPHN5cy9zeXNjdGwuaD4KKyNp
bXBvcnQgPHN5cy90aW1lLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKKyNp
ZiBQTEFURk9STShNQUMpICYmIChFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCitzdGF0aWMgY29uc3QgU2Vjb25kcyBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1l
b3V0ID0gMTAwX21zOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2Nr
U3RyZXRjaFJhdGlvID0gMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kTWluaW11bVJl
cXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoID0gMTA7CisjZW5kaWYKKworc3RhdGljIGZsb2F0IGVs
YXN0aWNEZWx0YUZvclRpbWVEZWx0YShmbG9hdCBpbml0aWFsUG9zaXRpb24sIGZsb2F0IGluaXRp
YWxWZWxvY2l0eSwgU2Vjb25kcyBlbGFwc2VkVGltZSkKK3sKKyAgICByZXR1cm4gX05TRWxhc3Rp
Y0RlbHRhRm9yVGltZURlbHRhKGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFZlbG9jaXR5LCBlbGFw
c2VkVGltZS5zZWNvbmRzKCkpOworfQorCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVi
b3VuZERlbHRhKGZsb2F0IGRlbHRhKQoreworICAgIHJldHVybiBfTlNFbGFzdGljRGVsdGFGb3JS
ZWJvdW5kRGVsdGEoZGVsdGEpOworfQorCitzdGF0aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxh
c3RpY0RlbHRhKGZsb2F0IGRlbHRhKQoreworICAgIHJldHVybiBfTlNSZWJvdW5kRGVsdGFGb3JF
bGFzdGljRGVsdGEoZGVsdGEpOworfQorCitzdGF0aWMgZmxvYXQgc2Nyb2xsV2hlZWxNdWx0aXBs
aWVyKCkKK3sKKyAgICBzdGF0aWMgZmxvYXQgbXVsdGlwbGllciA9IC0xOworICAgIGlmIChtdWx0
aXBsaWVyIDwgMCkgeworICAgICAgICBtdWx0aXBsaWVyID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gZmxvYXRGb3JLZXk6QCJOU1Njcm9sbFdoZWVsTXVsdGlwbGllciJd
OworICAgICAgICBpZiAobXVsdGlwbGllciA8PSAwKQorICAgICAgICAgICAgbXVsdGlwbGllciA9
IDE7CisgICAgfQorICAgIHJldHVybiBtdWx0aXBsaWVyOworfQorCitTY3JvbGxDb250cm9sbGVy
Ojp+U2Nyb2xsQ29udHJvbGxlcigpCit7CisgICAgQVNTRVJUKG1fdGltZXJzV2VyZVN0b3BwZWQp
OworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BBbGxUaW1lcnMoKQoreworI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKQorICAg
ICAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXItPnN0b3AoKTsKKyNlbmRpZgorCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAobV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVy
KQorICAgICAgICBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3AoKTsKKworICAg
IGlmIChtX3Njcm9sbFNuYXBUaW1lcikKKyAgICAgICAgbV9zY3JvbGxTbmFwVGltZXItPnN0b3Ao
KTsKKyNlbmRpZgorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBtX3RpbWVyc1dlcmVTdG9wcGVk
ID0gdHJ1ZTsKKyNlbmRpZgorfQorCitib29sIFNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25h
cCh3aGVlbEV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICBpZiAod2hl
ZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpNYXlCZWdpbiB8fCB3
aGVlbEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW4pIHsKKyAgICAgICAgLy8gRklYTUU6IFRyeWlu
ZyB0byBkZWNpZGUgaWYgYSBnZXN0dXJlIGlzIGhvcml6b250YWwgb3IgdmVydGljYWwgYXQgdGhl
ICJiZWdhbiIgcGhhc2UgaXMgdmVyeSBlcnJvci1wcm9uZS4KKyAgICAgICAgYXV0byBkaXJlY3Rp
b24gPSBkaXJlY3Rpb25Gcm9tRXZlbnQod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsKTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiAmJiBtX2NsaWVudC5pc1Bpbm5lZEZvclNj
cm9sbERlbHRhKEZsb2F0U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgoKSwgMCkpICYmICFzaG91bGRS
dWJiZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbkZyb21FdmVudCh3aGVl
bEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKKyAgICAgICAgaWYgKGRpcmVjdGlv
biAmJiBtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZSgwLCAtd2hlZWxF
dmVudC5kZWx0YVkoKSkpICYmICFzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9u
LnZhbHVlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3Jv
bGxzID0gZmFsc2U7CisgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0geyB9
OworICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSB7IH07CisKKyAgICAgICAgSW50U2l6ZSBz
dHJldGNoQW1vdW50ID0gbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpOworICAgICAgICBtX3N0cmV0
Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRj
aEFtb3VudC53aWR0aCgpKSk7CisgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdo
dChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWlnaHQoKSkpOwor
ICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKworICAgICAgICBz
dG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpOworICAgICAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3Rh
dGUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHdoZWVsRXZlbnQu
cGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQpIHsKKyAgICAgICAgc25h
cFJ1YmJlckJhbmQoKTsKKyAgICAgICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXNNb21lbnR1bVNjcm9sbEV2ZW50
ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
OjpOb25lKTsKKyAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgJiYgKGlzTW9tZW50dW1T
Y3JvbGxFdmVudCB8fCBtX3NuYXBSdWJiZXJiYW5kVGltZXIpKSB7CisgICAgICAgIGlmICh3aGVl
bEV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQp
IHsKKyAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc01vbWVudHVtU2Ny
b2xsRXZlbnQgJiYgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZmxvYXQgZGVsdGFY
ID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCk7CisgICAgZmxvYXQgZGVsdGFZID0gbV9v
dmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpOworCisgICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFs
dWVzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2lu
dHMgYW5kIHB1dCBpdCBpbnRvIG92ZXJmbG93LgorICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9
IEZsb2F0U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQuc3Ry
ZXRjaEFtb3VudCgpOworICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkID0gc3RyZXRjaEFt
b3VudC5oZWlnaHQoKTsKKyAgICBib29sIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gc3RyZXRj
aEFtb3VudC53aWR0aCgpOworCisgICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVg7CisgICAg
ZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVk7CisKKyAgICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRj
aGVkIHx8IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7CisgICAgICAgIGV2ZW50Q29hbGVzY2Vk
RGVsdGFYID0gLXdoZWVsRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCgpOworICAg
ICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LnVuYWNjZWxlcmF0ZWRTY3Jv
bGxpbmdEZWx0YVkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBldmVudENvYWxlc2NlZERlbHRh
WCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9
IC13aGVlbEV2ZW50LmRlbHRhWSgpOworICAgIH0KKworICAgIGRlbHRhWCArPSBldmVudENvYWxl
c2NlZERlbHRhWDsKKyAgICBkZWx0YVkgKz0gZXZlbnRDb2FsZXNjZWREZWx0YVk7CisKKyAgICAv
LyBTbGlnaHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkgYXBwbHlpbmcgdGhlID0g
Y2FzZSB0byBkZWx0YVkKKyAgICAvLyBGSVhNRTogVXNlIHdoZWVsRGVsdGFCaWFzaW5nVG93YXJk
c1ZlcnRpY2FsKCkuCisgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAg
ICAgICAgZGVsdGFYID0gMDsKKyAgICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICBi
b29sIHNob3VsZFN0cmV0Y2ggPSBmYWxzZTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
IG1vbWVudHVtUGhhc2UgPSB3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsKKworICAgIC8vIElm
IHdlIGFyZSBzdGFydGluZyBtb21lbnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBzb21lIHNldHVwLgor
ICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgKG1vbWVudHVtUGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuIHx8IG1vbWVudHVtUGhhc2UgPT0gUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2U6OkNoYW5nZWQpKQorICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcyA9IHRydWU7CisKKyAgICBhdXRvIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0
YW1wKCkgLSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9s
bEdlc3R1cmUgfHwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1f
bGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+IDBfcyAmJiB0aW1lRGVs
dGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KSB7CisgICAgICAgICAgICBtX21vbWVu
dHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsZXNjZWREZWx0YVggLyB0aW1lRGVsdGEuc2Vj
b25kcygpKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRIZWlnaHQoZXZlbnRD
b2FsZXNjZWREZWx0YVkgLyB0aW1lRGVsdGEuc2Vjb25kcygpKTsKKyAgICAgICAgICAgIG1fbGFz
dE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0g
d2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9
IEZsb2F0U2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0
Y2hlZCkgeworICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBtX2Ns
aWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgeworICAg
ICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgdmVydGljYWwuCisgICAgICAg
ICAgICAgICAgaWYgKGRlbHRhWSAmJiAoZmFic2YoZGVsdGFYIC8gZGVsdGFZKSA8IHJ1YmJlcmJh
bmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFY
ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFu
ZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgeworICAgICAgICAgICAgICAgICAg
ICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndp
ZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVs
dGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7
CisgICAgICAgICAgICAvLyBTdHJldGNoaW5nIG9ubHkgaW4gdGhlIGhvcml6b250YWwuCisgICAg
ICAgICAgICBpZiAobV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoMCwg
ZGVsdGFZKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVsdGFYICYmIChmYWJzZihkZWx0YVkg
LyBkZWx0YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQorICAgICAg
ICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNm
KGRlbHRhWSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7
CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9v
dmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEu
aGVpZ2h0KCkgKyBkZWx0YVkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4KKyAgICAgICAgICAgIGlmICht
X2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5p
bXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lk
dGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRl
bHRhWCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dC5hbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkKKyAgICAgICAgICAgICAg
ICAgICAgZGVsdGFYID0gMDsKKworICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKQorICAgICAgICAgICAgICAgICAgICBkZWx0
YVkgPSAwOworCisgICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IGRlbHRhWCB8fCBkZWx0
YVk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
U2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQo
KSAtIGRlbHRhWCAiIDw8IGRlbHRhWCA8PCAiIGRlbHRhWSAiIDw8IGRlbHRhWSA8PCAiIHBpbm5l
ZCAiIDw8IG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRlbHRhWCwg
ZGVsdGFZKSkgPDwgIiBzaG91bGRTdHJldGNoICIgPDwgc2hvdWxkU3RyZXRjaCk7CisgICAgfQor
CisgICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsKKworICAgIGlmIChkZWx0YVggfHwgZGVsdGFZKSB7
CisgICAgICAgIGlmICghKHNob3VsZFN0cmV0Y2ggfHwgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkIHx8
IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSkgeworICAgICAgICAgICAgaWYgKGRlbHRhWSkgewor
ICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeShGbG9hdFNpemUoMCwgZGVsdGFZ
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVsdGFYKSB7CisgICAgICAgICAg
ICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOworICAgICAgICAgICAgICAg
IG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5KEZsb2F0U2l6ZShkZWx0YVgsIDApKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkZWx0YVgpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKHdo
ZWVsRXZlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRh
bGx5U3RyZXRjaGVkICYmICFtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6
ZShkZWx0YVgsIDApKSkgeworICAgICAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hl
ZWxNdWx0aXBsaWVyKCk7CisKKyAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRl
U2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoZGVsdGFYLCAw
KSk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZGVsdGFZKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5hbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZXZl
bnRDb2FsZXNjZWREZWx0YVkgPSAwOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNWZXJ0aWNhbGx5U3RyZXRjaGVkICYm
ICFtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKSkg
eworICAgICAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0
Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoMCwgZGVsdGFZKSk7CisgICAgICAgICAg
ICAgICAgICAgIGRlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC5zdHJldGNoQW1v
dW50KCk7CisKKyAgICAgICAgICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgewor
ICAgICAgICAgICAgICAgIGlmICgobV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9h
dFNpemUoZXZlbnRDb2FsZXNjZWREZWx0YVgsIGV2ZW50Q29hbGVzY2VkRGVsdGFZKSkgfHwgKGZh
YnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFYKSArIGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFZKSA8
PSAwKSkgJiYgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXApIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBzbmFwUnViYmVyQmFuZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xs
Rm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0YVkpOworCisg
ICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVi
b3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0Rl
bHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOworCisg
ICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKGRhbXBlZERlbHRhIC0gc3RyZXRjaEFtb3VudCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgbW9tZW50dW1QaGFzZSA9
PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQpIHsKKyAgICAgICAgbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMg
PSBmYWxzZTsKKyAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB7IH07Cisg
ICAgfQorCisgICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7CisKKyAgICByZXR1cm4gaGFu
ZGxlZDsKK30KKworRmxvYXRTaXplIFNjcm9sbENvbnRyb2xsZXI6OndoZWVsRGVsdGFCaWFzaW5n
VG93YXJkc1ZlcnRpY2FsKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sK
KyAgICBhdXRvIGRlbHRhWCA9IHdoZWVsRXZlbnQuZGVsdGFYKCk7CisgICAgYXV0byBkZWx0YVkg
PSB3aGVlbEV2ZW50LmRlbHRhWSgpOworCisgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2Yo
ZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAgICBlbHNlCisgICAgICAgIGRlbHRhWSA9
IDA7CisKKyAgICByZXR1cm4geyBkZWx0YVgsIGRlbHRhWSB9OworfQorCitPcHRpb25hbDxTY3Jv
bGxEaXJlY3Rpb24+IFNjcm9sbENvbnRyb2xsZXI6OmRpcmVjdGlvbkZyb21FdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvbmFsPFNjcm9sbEV2ZW50QXhpcz4g
YXhpcywgV2hlZWxBeGlzQmlhcyBiaWFzKQoreworICAgIC8vIEZJWE1FOiBJdCdzIGltcG9zc2li
bGUgdG8gaW5mZXIgZGlyZWN0aW9uIGZyb20gYSBzaW5nbGUgZXZlbnQsIHNpbmNlIHRoZSBzdGFy
dCBvZiBhIGdlc3R1cmUgaXMgZWl0aGVyIHplcm8gb3IKKyAgICAvLyBoYXMgc21hbGwgZGVsdGFz
IG9uIGJvdGggYXhlcy4KKworICAgIGF1dG8gd2hlZWxEZWx0YSA9IEZsb2F0U2l6ZSB7IHdoZWVs
RXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkgfTsKKyAgICBpZiAoYmlhcyA9PSBX
aGVlbEF4aXNCaWFzOjpWZXJ0aWNhbCkKKyAgICAgICAgd2hlZWxEZWx0YSA9IHdoZWVsRGVsdGFC
aWFzaW5nVG93YXJkc1ZlcnRpY2FsKHdoZWVsRXZlbnQpOworCisgICAgaWYgKGF4aXMpIHsKKyAg
ICAgICAgc3dpdGNoIChheGlzLnZhbHVlKCkpIHsKKyAgICAgICAgY2FzZSBTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsOgorICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPCAwKQor
ICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxEb3duOworCisgICAgICAgICAgICBpZiAod2hl
ZWxEZWx0YS5oZWlnaHQoKSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbFVwOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWw6CisgICAgICAgICAgICBpZiAod2hlZWxEZWx0YS53aWR0aCgpID4gMCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gU2Nyb2xsTGVmdDsKKworICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEu
d2lkdGgoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBDaGVj
ayBZIGZpcnN0IGJlY2F1c2UgdmVydGljYWwgc2Nyb2xsaW5nIGRvbWluYXRlcy4KKyAgICBpZiAo
d2hlZWxEZWx0YS5oZWlnaHQoKSA8IDApCisgICAgICAgIHJldHVybiBTY3JvbGxEb3duOworCisg
ICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPiAwKQorICAgICAgICByZXR1cm4gU2Nyb2xsVXA7
CisKKyAgICBpZiAod2hlZWxEZWx0YS53aWR0aCgpID4gMCkKKyAgICAgICAgcmV0dXJuIFNjcm9s
bExlZnQ7CisKKyAgICBpZiAod2hlZWxEZWx0YS53aWR0aCgpIDwgMCkKKyAgICAgICAgcmV0dXJu
IFNjcm9sbFJpZ2h0OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZs
b2F0IG51bSkKK3sKKyAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxv
b3JmKG51bSArIDAuNWYpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQ
aXhlbFRvd2FyZFplcm8oZmxvYXQgbnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3Vu
ZGYobnVtKTsKKyAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAg
ICBudW0gPSByb3VuZGVkTnVtOworCisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOwor
fQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpCit7
CisgICAgaWYgKGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJv
bGxlcjo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKCkgLSBtYWluIHRocmVhZCAiIDw8IGlzTWFp
blRocmVhZCgpKTsKKworICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9p
Z25vcmVNb21lbnR1bVNjcm9sbHMpIHsKKyAgICAgICAgYXV0byB0aW1lRGVsdGEgPSBNb25vdG9u
aWNUaW1lOjpub3coKSAtIG1fc3RhcnRUaW1lOworCisgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRj
aC5pc1plcm8oKSkgeworICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX2NsaWVudC5zdHJl
dGNoQW1vdW50KCk7CisgICAgICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXpl
KCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wUnViYmVyYmFuZGluZygpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkg
PSBtX21vbWVudHVtVmVsb2NpdHk7CisKKyAgICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3JtYWwg
c2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwgcnViYmVyYmFuZGluZworICAgICAgICAgICAgaWYg
KGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0eS53
aWR0aCgpKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKKwor
ICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90
IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkKKyAgICAgICAgICAgIGlmICghbV9jbGll
bnQuYWxsb3dzSG9yaXpvbnRhbFNjcm9sbGluZygpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1Zl
bG9jaXR5LnNldFdpZHRoKDApOworCisgICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2
ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5CisgICAg
ICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkpCisgICAgICAg
ICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0SGVpZ2h0KDApOworICAgICAgICB9CisKKyAgICAg
ICAgRmxvYXRQb2ludCBkZWx0YShyb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNE
ZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC53aWR0aCgpLCAtbV9vcmlnVmVsb2NpdHku
d2lkdGgoKSwgdGltZURlbHRhKSksCisgICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dh
cmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwg
LW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCB0aW1lRGVsdGEpKSk7CisKKyAgICAgICAgaWYgKGZh
YnMoZGVsdGEueCgpKSA+PSAxIHx8IGZhYnMoZGVsdGEueSgpKSA+PSAxKSB7CisgICAgICAgICAg
ICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRz
KEZsb2F0U2l6ZShkZWx0YS54KCksIGRlbHRhLnkoKSkgLSBtX2NsaWVudC5zdHJldGNoQW1vdW50
KCkpOworCisgICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fY2xpZW50LnN0cmV0
Y2hBbW91bnQoKTsKKworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgo
cmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOworICAgICAg
ICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0
aWNEZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2NsaWVudC5hZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKTsK
KyAgICAgICAgICAgIHN0b3BSdWJiZXJiYW5kaW5nKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBt
X3N0YXJ0U3RyZXRjaCA9IHsgfTsKKyAgICAgICAgaWYgKCFpc1J1YmJlckJhbmRJblByb2dyZXNz
SW50ZXJuYWwoKSkKKyAgICAgICAgICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7CisgICAg
fQorCisgICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7Cit9CisjZW5kaWYKKwordm9pZCBT
Y3JvbGxDb250cm9sbGVyOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQoreworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKKyNlbmRpZgor
fQorCitib29sIFNjcm9sbENvbnRyb2xsZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25z
dAoreworICAgIHJldHVybiBtX2luU2Nyb2xsR2VzdHVyZTsKK30KKworYm9vbCBTY3JvbGxDb250
cm9sbGVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgcmV0dXJuIG1faXNSdWJiZXJCYW5kaW5nOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBTY3JvbGxDb250cm9sbGVyOjppc1Njcm9s
bFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAg
aWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8IG1f
c2Nyb2xsU25hcFRpbWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wUnViYmVyYmFuZGluZygp
Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIHN0b3BTbmFwUnViYmVyYmFuZFRp
bWVyKCk7CisgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSB7IH07CisgICAgbV9zdGFydFRpbWUg
PSB7IH07CisgICAgbV9zdGFydFN0cmV0Y2ggPSB7IH07CisgICAgbV9vcmlnVmVsb2NpdHkgPSB7
IH07CisgICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7CisjZW5kaWYKK30KKworI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRTbmFwUnVi
YmVyYmFuZFRpbWVyKCkKK3sKKyAgICBtX2NsaWVudC53aWxsU3RhcnRSdWJiZXJCYW5kU25hcEFu
aW1hdGlvbigpOworCisgICAgLy8gTWFrZSBhIG5ldyBvbmUgZWFjaCB0aW1lIHRvIGVuc3VyZSBp
dCBmaXJlcyBvbiB0aGUgY3VycmVudCBSdW5Mb29wLgorICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1l
ciA9IG1fY2xpZW50LmNyZWF0ZVRpbWVyKFt0aGlzXSB7CisgICAgICAgIHNuYXBSdWJiZXJCYW5k
VGltZXJGaXJlZCgpOworICAgIH0pOworICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lci0+c3RhcnRS
ZXBlYXRpbmcoMV9zIC8gNjAuKTsKKworICAgIG1fY2xpZW50LmRlZmVyV2hlZWxFdmVudFRlc3RD
b21wbGV0aW9uRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9y
OjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6
OlJ1YmJlcmJhbmRJblByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9w
U25hcFJ1YmJlcmJhbmRUaW1lcigpCit7CisgICAgbV9jbGllbnQuZGlkU3RvcFJ1YmJlcmJhbmRT
bmFwQW5pbWF0aW9uKCk7CisKKyAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKSB7CisgICAg
ICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lci0+c3RvcCgpOworICAgICAgICBtX3NuYXBSdWJiZXJi
YW5kVGltZXIgPSBudWxscHRyOworICAgIH0KKworICAgIG1fY2xpZW50LnJlbW92ZVdoZWVsRXZl
bnRUZXN0Q29tcGxldGlvbkRlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxF
dmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2
ZW50VGVzdE1vbml0b3I6OlJ1YmJlcmJhbmRJblByb2dyZXNzKTsKK30KKwordm9pZCBTY3JvbGxD
b250cm9sbGVyOjpzbmFwUnViYmVyQmFuZCgpCit7CisgICAgYXV0byB0aW1lRGVsdGEgPSBXYWxs
VGltZTo6bm93KCkgLSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9s
YXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5
WmVyb2luZ1RpbWVvdXQpCisgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IHsgfTsKKworICAg
IGlmIChtX3NuYXBSdWJiZXJiYW5kVGltZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3Rh
cnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgbV9zdGFydFN0cmV0Y2ggPSB7IH07
CisgICAgbV9vcmlnVmVsb2NpdHkgPSB7IH07CisKKyAgICBzdGFydFNuYXBSdWJiZXJiYW5kVGlt
ZXIoKTsKK30KKworYm9vbCBTY3JvbGxDb250cm9sbGVyOjpzaG91bGRSdWJiZXJCYW5kSW5Ib3Jp
em9udGFsRGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkgY29u
c3QKK3sKKyAgICBhdXRvIGRpcmVjdGlvbiA9IGRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50
LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgIGlmIChkaXJlY3Rpb24pCisgICAg
ICAgIHJldHVybiBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2Nyb2xsQ29udHJvbGxlcjo6c2hvdWxk
UnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rp
b24pOworfQorCitib29sIFNjcm9sbENvbnRyb2xsZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3NJ
bnRlcm5hbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2luU2Nyb2xsR2VzdHVyZSAmJiAhbV9tb21l
bnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgIW1fc25hcFJ1YmJlcmJhbmRUaW1lcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFtX2NsaWVudC5zdHJldGNoQW1vdW50KCkuaXNa
ZXJvKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZGluZ1N0
YXRlKCkKK3sKKyAgICBib29sIGlzUnViYmVyQmFuZGluZyA9IGlzUnViYmVyQmFuZEluUHJvZ3Jl
c3NJbnRlcm5hbCgpOworICAgIGlmIChpc1J1YmJlckJhbmRpbmcgPT0gbV9pc1J1YmJlckJhbmRp
bmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNSdWJiZXJCYW5kaW5nID0gaXNSdWJiZXJC
YW5kaW5nOworICAgIGlmIChtX2lzUnViYmVyQmFuZGluZykKKyAgICAgICAgdXBkYXRlUnViYmVy
QmFuZGluZ0VkZ2VzKG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKSk7CisgICAgZWxzZQorICAgICAg
ICBtX3J1YmJlckJhbmRpbmdFZGdlcyA9IHsgfTsKKworICAgIG1fY2xpZW50LnJ1YmJlckJhbmRp
bmdTdGF0ZUNoYW5nZWQobV9pc1J1YmJlckJhbmRpbmcpOworfQorCit2b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0cmV0Y2gpCit7
CisgICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMuc2V0TGVmdChjbGllbnRTdHJldGNoLndpZHRoKCkg
PCAwKTsKKyAgICBtX3J1YmJlckJhbmRpbmdFZGdlcy5zZXRSaWdodChjbGllbnRTdHJldGNoLndp
ZHRoKCkgPiAwKTsKKworICAgIG1fcnViYmVyQmFuZGluZ0VkZ2VzLnNldFRvcChjbGllbnRTdHJl
dGNoLmhlaWdodCgpIDwgMCk7CisgICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMuc2V0Qm90dG9tKGNs
aWVudFN0cmV0Y2guaGVpZ2h0KCkgPiAwKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShSVUJCRVJf
QkFORElORykKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitlbnVtIGNsYXNzIFdoZWVs
RXZlbnRTdGF0dXMgeworICAgIFVzZXJTY3JvbGxCZWdpbiwKKyAgICBVc2VyU2Nyb2xsaW5nLAor
ICAgIFVzZXJTY3JvbGxFbmQsCisgICAgTW9tZW50dW1TY3JvbGxCZWdpbiwKKyAgICBNb21lbnR1
bVNjcm9sbGluZywKKyAgICBNb21lbnR1bVNjcm9sbEVuZCwKKyAgICBTdGF0ZWxlc3NTY3JvbGxF
dmVudCwKKyAgICBVbmtub3duCit9OworCitzdGF0aWMgaW5saW5lIFdoZWVsRXZlbnRTdGF0dXMg
dG9XaGVlbEV2ZW50U3RhdHVzKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlLCBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNlKQoreworICAgIGlmIChwaGFzZSA9PSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9uZSkgeworICAgICAgICBzd2l0Y2ggKG1vbWVudHVtUGhh
c2UpIHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW46CisgICAg
ICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hh
bmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9s
bGluZzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZTo6RW5kZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50
dW1TY3JvbGxFbmQ7CisKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9u
ZToKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpTdGF0ZWxlc3NTY3JvbGxF
dmVudDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRT
dGF0dXM6OlVua25vd247CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1vbWVudHVtUGhhc2Ug
PT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChwaGFz
ZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpCZWdhbjoKKyAgICAg
ICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6TWF5QmVnaW46CisgICAgICAgICAgICBy
ZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOworICAgICAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpDaGFuZ2VkOgorICAgICAg
ICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgorICAg
ICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpDYW5jZWxsZWQ6CisgICAgICAgICAg
ICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVz
OjpVbmtub3duOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVz
OjpVbmtub3duOworfQorCisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdoZWVsRXZlbnRTdGF0dXMgc3RhdHVzKQoreworICAg
IHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xs
QmVnaW46IHRzIDw8ICJVc2VyU2Nyb2xsQmVnaW4iOyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc6IHRzIDw8ICJVc2VyU2Nyb2xsaW5nIjsgYnJlYWs7Cisg
ICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5kOiB0cyA8PCAiVXNlclNjcm9s
bEVuZCI7IGJyZWFrOworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxC
ZWdpbjogdHMgPDwgIk1vbWVudHVtU2Nyb2xsQmVnaW4iOyBicmVhazsKKyAgICBjYXNlIFdoZWVs
RXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsaW5nOiB0cyA8PCAiTW9tZW50dW1TY3JvbGxpbmci
OyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsRW5kOiB0
cyA8PCAiTW9tZW50dW1TY3JvbGxFbmQiOyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0
dXM6OlN0YXRlbGVzc1Njcm9sbEV2ZW50OiB0cyA8PCAiU3RhdGVsZXNzU2Nyb2xsRXZlbnQiOyBi
cmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd246IHRzIDw8ICJVbmtub3du
IjsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKyNlbmRpZgorCitib29sIFNjcm9s
bENvbnRyb2xsZXI6OnNob3VsZE92ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKSBjb25zdAorewor
ICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
U2Nyb2xsU25hcFN0YXRlIHNjcm9sbFNuYXBTdGF0ZSA9IG1fc2Nyb2xsU25hcFN0YXRlLT5jdXJy
ZW50U3RhdGUoKTsKKyAgICByZXR1cm4gc2Nyb2xsU25hcFN0YXRlID09IFNjcm9sbFNuYXBTdGF0
ZTo6R2xpZGluZyB8fCBzY3JvbGxTbmFwU3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5h
dGlvblJlYWNoZWQ7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2NoZWR1bGVTdGF0ZWxl
c3NTY3JvbGxTbmFwKCkKK3sKKyAgICBzdG9wU2Nyb2xsU25hcFRpbWVyKCk7CisgICAgaWYgKG1f
c3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcikgeworICAgICAgICBtX3N0YXRlbGVzc1NuYXBU
cmFuc2l0aW9uVGltZXItPnN0b3AoKTsKKyAgICAgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlv
blRpbWVyID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBzdGF0ZWxlc3NTY3JvbGxT
bmFwRGVsYXkgPSA3NTBfbXM7CisgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyID0g
bV9jbGllbnQuY3JlYXRlVGltZXIoW3RoaXNdIHsKKyAgICAgICAgc3RhdGVsZXNzU25hcFRyYW5z
aXRpb25UaW1lckZpcmVkKCk7CisgICAgfSk7CisgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlv
blRpbWVyLT5zdGFydE9uZVNob3Qoc3RhdGVsZXNzU2Nyb2xsU25hcERlbGF5KTsKKyAgICBzdGFy
dERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsK
K30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVy
RmlyZWQoKQoreworICAgIG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lciA9IG51bGxwdHI7
CisKKyAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9TbmFwQW5pbWF0aW9uU3RhdGUobV9jbGllbnQu
c2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLCBtX2NsaWVudC5wYWdlU2Nh
bGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpOworICAgIHN0YXJ0U2Nyb2xsU25h
cFRpbWVyKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhcnREZWZlcnJpbmdXaGVl
bEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCkKK3sKKyAgICBtX2NsaWVu
dC5kZWZlcldoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkZvclJlYXNvbihyZWludGVycHJldF9jYXN0
PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwg
V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxTbmFwSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6c3RvcERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1
ZVRvU2Nyb2xsU25hcHBpbmcoKQoreworICAgIG1fY2xpZW50LnJlbW92ZVdoZWVsRXZlbnRUZXN0
Q29tcGxldGlvbkRlZmVycmFsRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRl
c3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVz
dE1vbml0b3I6OlNjcm9sbFNuYXBJblByb2dyZXNzKTsKK30KKworYm9vbCBTY3JvbGxDb250cm9s
bGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0Zv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5pc0VtcHR5KCkgJiYgbV9zY3JvbGxT
bmFwU3RhdGUtPnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gc3RhdHVzID0gdG9X
aGVlbEV2ZW50U3RhdHVzKHdoZWVsRXZlbnQucGhhc2UoKSwgd2hlZWxFdmVudC5tb21lbnR1bVBo
YXNlKCkpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Ny
b2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNu
YXA6IHN0YXR1cyAiIDw8IHN0YXR1cyk7CisKKyAgICBib29sIGlzTW9tZW50dW1TY3JvbGxpbmcg
PSBmYWxzZTsKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1
czo6VXNlclNjcm9sbEJlZ2luOgorICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9s
bGluZzoKKyAgICAgICAgc3RvcFNjcm9sbFNuYXBUaW1lcigpOworICAgICAgICBtX3Njcm9sbFNu
YXBTdGF0ZS0+dHJhbnNpdGlvblRvVXNlckludGVyYWN0aW9uU3RhdGUoKTsKKyAgICAgICAgbV9k
cmFnRW5kZWRTY3JvbGxpbmdWZWxvY2l0eSA9IC13aGVlbEV2ZW50LnNjcm9sbGluZ1ZlbG9jaXR5
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9s
bEVuZDoKKyAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub1NuYXBBbmltYXRp
b25TdGF0ZShtX2NsaWVudC5zY3JvbGxFeHRlbnQoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCks
IG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpLCBtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSk7Cisg
ICAgICAgIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjoKKyAgICAgICAgbV9zY3JvbGxT
bmFwU3RhdGUtPnRyYW5zaXRpb25Ub0dsaWRlQW5pbWF0aW9uU3RhdGUobV9jbGllbnQuc2Nyb2xs
RXh0ZW50KCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLCBtX2NsaWVudC5wYWdlU2NhbGVGYWN0
b3IoKSwgbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCksIG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2Np
dHksIEZsb2F0U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgoKSwgLXdoZWVsRXZlbnQuZGVsdGFZKCkp
KTsKKyAgICAgICAgbV9kcmFnRW5kZWRTY3JvbGxpbmdWZWxvY2l0eSA9IHsgfTsKKyAgICAgICAg
aXNNb21lbnR1bVNjcm9sbGluZyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2hl
ZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxpbmc6CisgICAgY2FzZSBXaGVlbEV2ZW50U3Rh
dHVzOjpNb21lbnR1bVNjcm9sbEVuZDoKKyAgICAgICAgaXNNb21lbnR1bVNjcm9sbGluZyA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6U3RhdGVsZXNz
U2Nyb2xsRXZlbnQ6CisgICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9Vc2Vy
SW50ZXJhY3Rpb25TdGF0ZSgpOworICAgICAgICBzY2hlZHVsZVN0YXRlbGVzc1Njcm9sbFNuYXAo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIGlzTW9tZW50dW1TY3JvbGxpbmcgJiYgc2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNj
cm9sbGluZygpOworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUdlc3R1cmVJblBy
b2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAg
IGlmICh3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkgfHwgd2hlZWxFdmVudC5pc1RyYW5zaXRp
b25pbmdUb01vbWVudHVtU2Nyb2xsKCkpCisgICAgICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1
ZTsKKyAgICBlbHNlIGlmICh3aGVlbEV2ZW50LmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIHx8
IHdoZWVsRXZlbnQuaXNHZXN0dXJlQ2FuY2VsKCkgfHwgd2hlZWxFdmVudC5pc0VuZE9mTW9tZW50
dW1TY3JvbGwoKSkKKyAgICAgICAgbV9pblNjcm9sbEdlc3R1cmUgPSBmYWxzZTsKKworICAgIHVw
ZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0
YXJ0U2Nyb2xsU25hcFRpbWVyKCkKK3sKKyAgICBpZiAobV9zY3JvbGxTbmFwVGltZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwg
IlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgc3RhcnRTY3JvbGxTbmFwVGltZXIgKG1h
aW4gdGhyZWFkICIgPDwgaXNNYWluVGhyZWFkKCkgPDwgIikiKTsKKworICAgIHN0YXJ0RGVmZXJy
aW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpOworICAgIG1f
Y2xpZW50LndpbGxTdGFydFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKyAgICBtX3Njcm9sbFNuYXBU
aW1lciA9IG1fY2xpZW50LmNyZWF0ZVRpbWVyKFt0aGlzXSB7CisgICAgICAgIHNjcm9sbFNuYXBU
aW1lckZpcmVkKCk7CisgICAgfSk7CisgICAgbV9zY3JvbGxTbmFwVGltZXItPnN0YXJ0UmVwZWF0
aW5nKDFfcyAvIDYwLik7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNjcm9sbFNu
YXBUaW1lcigpCit7CisgICAgaWYgKCFtX3Njcm9sbFNuYXBUaW1lcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29u
dHJvbGxlciAiIDw8IHRoaXMgPDwgIiBzdG9wU2Nyb2xsU25hcFRpbWVyIChtYWluIHRocmVhZCAi
IDw8IGlzTWFpblRocmVhZCgpIDw8ICIpIik7CisKKyAgICBzdG9wRGVmZXJyaW5nV2hlZWxFdmVu
dFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpOworICAgIG1fY2xpZW50LmRpZFN0
b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CisKKyAgICBtX3Njcm9sbFNuYXBUaW1lci0+c3RvcCgp
OworICAgIG1fc2Nyb2xsU25hcFRpbWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBTY3JvbGxDb250
cm9sbGVyOjpzY3JvbGxTbmFwVGltZXJGaXJlZCgpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25h
cCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYm9vbCBpc0FuaW1hdGlvbkNvbXBsZXRlOworICAgIGF1dG8gYW5pbWF0aW9u
T2Zmc2V0ID0gbV9zY3JvbGxTbmFwU3RhdGUtPmN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChp
c0FuaW1hdGlvbkNvbXBsZXRlKTsKKyAgICBhdXRvIGN1cnJlbnRPZmZzZXQgPSBtX2NsaWVudC5z
Y3JvbGxPZmZzZXQoKTsKKworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0g
PDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgc2Nyb2xsU25hcFRpbWVyRmlyZWQg
LSBpc0FuaW1hdGlvbkNvbXBsZXRlICIgPDwgaXNBbmltYXRpb25Db21wbGV0ZSA8PCAiIGN1cnJl
bnRPZmZzZXQgIiA8PCBjdXJyZW50T2Zmc2V0IDw8ICIgKG1haW4gdGhyZWFkICIgPDwgaXNNYWlu
VGhyZWFkKCkgPDwgIikiKTsKKworICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91
dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKGFuaW1hdGlvbk9mZnNldC54KCkgLSBj
dXJyZW50T2Zmc2V0LngoKSwgYW5pbWF0aW9uT2Zmc2V0LnkoKSAtIGN1cnJlbnRPZmZzZXQueSgp
KSk7CisgICAgaWYgKGlzQW5pbWF0aW9uQ29tcGxldGUpIHsKKyAgICAgICAgbV9zY3JvbGxTbmFw
U3RhdGUtPnRyYW5zaXRpb25Ub0Rlc3RpbmF0aW9uUmVhY2hlZFN0YXRlKCk7CisgICAgICAgIHN0
b3BTY3JvbGxTbmFwVGltZXIoKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKKworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShSVUJCRVJfQkFORElORykgfHwgRU5BQkxFKENTU19TQ1JPTExfU05BUCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZU1hYy5tbQppbmRleCAyYzExZjdlZjUyZTA2MTRlNWYzNjI5YjRhMWUwY2FmZmU5YzI1ZDMzLi4y
NGVkZTk0Yzg0ODYyMDNiNjA2MWE3ZjcxY2EwZTc3MTdhOTk2ODFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VN
YWMubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFU
aW1lQVZGb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0FWS2l0U1BJLmg+CiAj
aW1wb3J0IDxwYWwvc3BpL21hYy9QSVBTUEkuaD4KKyNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAK
ICNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>