<?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>142205</bug_id>
          
          <creation_ts>2015-03-02 19:24:27 -0800</creation_ts>
          <short_desc>REGRESSION(r180902): It broke scrolling in some cases. See bug 142202 for details. (Requested by bdash on #webkit).</short_desc>
          <delta_ts>2015-03-03 15:56:45 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>142102</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>mrowe</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1073575</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-02 19:24:27 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/180902 broke the build:
It broke scrolling in some cases. See bug 142202 for details. (Requested by bdash on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073577</commentid>
    <comment_count>1</comment_count>
      <attachid>247737</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-02 19:24:57 -0800</bug_when>
    <thetext>Created attachment 247737
ROLLOUT of r180902

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073581</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2015-03-02 19:26:23 -0800</bug_when>
    <thetext>*** Bug 142202 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073583</commentid>
    <comment_count>3</comment_count>
      <attachid>247737</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-02 19:30:03 -0800</bug_when>
    <thetext>Comment on attachment 247737
ROLLOUT of r180902

Clearing flags on attachment: 247737

Committed r180915: &lt;http://trac.webkit.org/changeset/180915&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073584</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-02 19:30:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073837</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-03 15:56:45 -0800</bug_when>
    <thetext>This bug was caused by an error in my refactoring of ScrollingTreeScrollingNodeMac. The original &quot;snapRubberbandTimer&quot; implementation made sure to notify the scrollingTree that rubber banding was ended, and to reset the content size of the scrolling node. When I consolidated the stop timer methods, I lost this step.

This caused the scrolling thread&apos;s view of the scrollable area to no longer match the main thread. The scrolling thread then allowed the user to scroll down far past the end of the document.

Attempts to build a test that notices this problem are confounded by the fact that querying the DOM for the scroll area size returns the right information (even with this bug) because the main thread copy of the state is correct.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247737</attachid>
            <date>2015-03-02 19:24:57 -0800</date>
            <delta_ts>2015-03-02 19:30:03 -0800</delta_ts>
            <desc>ROLLOUT of r180902</desc>
            <filename>bug-142205-20150302192440.patch</filename>
            <type>text/plain</type>
            <size>75916</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYzOGMwNmRkNDZhYzE0
NGI3YWZhNjM4YWY2OGJmMzE5NWE3NTM5NS4uZGYyOTdhZTQ0NmJhMGFlYjZjZWE2OWE3NTRhNzVh
YjNlZWU4ZjY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAzLTAyICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTgwOTAyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQyMjA1CisKKyAgICAgICAgSXQgYnJva2Ugc2Nyb2xsaW5nIGluIHNv
bWUgY2FzZXMuIFNlZSBidWcgMTQyMjAyIGZvciBkZXRhaWxzLgorICAgICAgICAoUmVxdWVzdGVk
IGJ5IGJkYXNoIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldDoKKwor
ICAgICAgICAiTW92ZSBzY3JvbGwgYW5pbWF0aW5nIGZ1bmN0aW9ucyBmcm9tIFNjcm9sbEFuaW1h
dG9yIHRvCisgICAgICAgIFNjcm9sbENvbnRyb2xsZXIiCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIxMDIKKyAgICAgICAgaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9jaGFuZ2VzZXQvMTgwOTAyCisKIDIwMTUtMDMtMDIgIFlvYXYgV2Vpc3MgIDx5b2F2
QHlvYXYud3M+CiAKICAgICAgICAgQWRkIGEgbWljcm90YXNrIGFic3RyYWN0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggY2Vk
OGM0OTBjY2Y3ZmMyZmViYzFhMTBlYTdhZjVkOGMzODYzYmU2YS4uZWU4ZGYwODA5ZDg4NzM4OTI1
NmEwMDg0NGI0YzZlYWRiZWE5ZDcxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzg2LDYgKzc4Niw4IEBACiAJCTFBOTI3RkQz
MTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkQwMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRp
bWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
QTkyN0ZENDE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGRDExNDE2QTE1QjAwM0E4M0M4IC8qIG5w
dHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxQTk4OTU2QjBBQTc4RjgwMDA1RUY1RUYgLyogVVJMQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5ODk1NkEwQUE3OEY4MDAwNUVGNUVGIC8q
IFVSTENGLmNwcCAqLzsgfTsKKwkJMUFBODRGMDQxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbENv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5tbSAqLzsgfTsK
KwkJMUFBODRGMDUxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg0RjAzMTQzQkE3QkQw
MDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBODc5OTAxMUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdp
blN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1Z2luU3RyYXRlZ3kuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUFBRERBMzE0REI0MDlG
MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERBMTE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5n
VHJlZS5jcHAgKi87IH07CiAJCTFBQUFEREE0MTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdU
cmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFB
RERBMjE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNDQ0LDggKzI0NDYsNiBAQAogCQk3
QTc0RUNCRDEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3NEVD
QkMxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCAq
LzsgfTsKIAkJN0E5Mzg2ODUxOERDQzE0NTAwQjgyNjNEIC8qIFZUVFNjYW5uZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5Mzg2ODIxOERDQzE0
NTAwQjgyNjNEIC8qIFZUVFNjYW5uZXIuY3BwICovOyB9OwogCQk3QTkzODY4NjE4RENDMTQ1MDBC
ODI2M0QgLyogVlRUU2Nhbm5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0E5Mzg2ODMxOERDQzE0NTAwQjgyNjNEIC8qIFZUVFNjYW5uZXIuaCAqLzsg
fTsKLQkJN0E5QURGRjMxQUExMTYzODAwRDI3MzNDIC8qIFNjcm9sbENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkZBNDExMUFBMTAz
OUQwMEYwMTI1QiAvKiBTY3JvbGxDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0E5QURGRjQxQUExMTYzQjAwRDI3MzNDIC8qIFNj
cm9sbENvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QUZGQTQxMjFBQTEwMzlEMDBGMDEyNUIgLyogU2Nyb2xsQ29udHJvbGxlci5tbSAq
LzsgfTsKIAkJN0FBM0E2OTkxOTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQTNBNjk1MTk0
QTY0RTcwMDFDQkQyNCAvKiBUaWxlQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTdBQTNBNjlBMTk0
QTY0RTcwMDFDQkQyNCAvKiBUaWxlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FBM0E2OTYxOTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVD
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0FBM0E2OUIxOTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVHcmlkLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQTNBNjk3MTk0QTY0RTcwMDFD
QkQyNCAvKiBUaWxlR3JpZC5jcHAgKi87IH07CkBAIC03ODEzLDYgKzc4MTMsOCBAQAogCQkxQTky
N0ZEMDE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IG5wcnVudGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QTkyN0ZEMTE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBucHR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFB
OTg5NTZBMEFBNzhGODAwMDVFRjVFRiAvKiBVUkxDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVVJMQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxlci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbENvbnRyb2xsZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQTg0RjAzMTQzQkE3QkQwMDUxRDE1MyAvKiBT
Y3JvbGxDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9s
bENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBODc5OEYxMUNC
RTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsdWdpblN0cmF0ZWd5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBQUFEREExMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERBMjE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5n
VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjcwLDggKzk2NzIsNiBAQAogCQk3QUY5
QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0FGOUIyMEExOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQjE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNW
VFRSZWdpb25MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVn
aW9uTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUZGQTQxMTFBQTEwMzlE
MDBGMDEyNUIgLyogU2Nyb2xsQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JvbGxDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdBRkZBNDEyMUFBMTAzOUQwMEYwMTI1QiAvKiBTY3JvbGxDb250cm9sbGVyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsQ29udHJvbGxlci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MyQkREM0IxN0M3Rjk4QjAwMzhGRjE1IC8qIEpT
RE9NR2xvYmFsT2JqZWN0VGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzJCREQzQzE3QzdGOThCMDAzOEZGMTUgLyogSlNET01HbG9iYWxPYmplY3RUYXNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NR2xvYmFsT2JqZWN0VGFzay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNCNzk2RjE5MDg3NTdCMDBCNDdBMkQg
LyogVXNlck1lc3NhZ2VIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJNZXNzYWdlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNjU5Nyw2ICsxNjU5Nyw4IEBACiAJCQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2NzU0IC8q
IFNjcm9sbEFuaW1hdG9yTWFjLm1tICovLAogCQkJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKKwkJCQkxQUE4NEYwMzE0M0JBN0JEMDA1MUQxNTMg
LyogU2Nyb2xsQ29udHJvbGxlci5oICovLAorCQkJCTFBQTg0RjAyMTQzQkE3QkQwMDUxRDE1MyAv
KiBTY3JvbGxDb250cm9sbGVyLm1tICovLAogCQkJCTkzNTM2NzZBMDlBRUQ4OEIwMEQzNUNENiAv
KiBTY3JvbGxWaWV3TWFjLm1tICovLAogCQkJCTA3N0FGMTQxMThGNEIxQkIwMDAxRUQ2MSAvKiBT
ZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5oICovLAogCQkJCTA3N0FGMTQyMThG
NEIxQkIwMDAxRUQ2MSAvKiBTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5tbSAq
LywKQEAgLTE4NzA2LDggKzE4NzA4LDYgQEAKIAkJCQkxQTA0MDlGMjFBNDM2NzVDMDA5RTQ3RjMg
LyogTWFjaFNlbmRSaWdodC5jcHAgKi8sCiAJCQkJMUEwNDA5REIxQTQzNjBCNTAwOUU0N0YzIC8q
IE1hY2hTZW5kUmlnaHQuaCAqLywKIAkJCQlBREI2QjI5NzE4RkI5MDI0MDA4MTk2M0UgLyogTWVt
b3J5UHJlc3N1cmVIYW5kbGVyQ29jb2EubW0gKi8sCi0JCQkJN0FGRkE0MTExQUExMDM5RDAwRjAx
MjVCIC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLywKLQkJCQk3QUZGQTQxMjFBQTEwMzlEMDBGMDEy
NUIgLyogU2Nyb2xsQ29udHJvbGxlci5tbSAqLywKIAkJCQk1RDU5NzVCMTE5NjM1RjExMDBEMDA4
NzggLyogU3lzdGVtVmVyc2lvbi5oICovLAogCQkJCTVENTk3NUIyMTk2MzVGMTEwMEQwMDg3OCAv
KiBTeXN0ZW1WZXJzaW9uLm1tICovLAogCQkJCTdDQzU2NEI5MThCQUM3MjAwMDFCOTY1MiAvKiBU
ZWxlcGhvbmVOdW1iZXJEZXRlY3RvckNvY29hLmNwcCAqLywKQEAgLTI0NjYxLDcgKzI0NjYxLDYg
QEAKIAkJCQlBOEVBN0NCNTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTFBhcmFncmFwaEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFENDU4MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFy
YW1FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0UyQTMwNzEyM0U5REMwMDA5RkUxMkEg
LyogSFRNTFBhcnNlcklkaW9tcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0E5QURGRjMxQUExMTYz
ODAwRDI3MzNDIC8qIFNjcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3M0Y0
MThBMTY5Qjk1RkYwMDA2QkY2MCAvKiBIVE1MUGFyc2VyT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTc3QjM4NzExMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxQYXJzZXJTY2hlZHVsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4NzFENDU2MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGx1Z0lu
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjExNiw2ICsyNjExNSw3IEBACiAJCQkJQkM4
Qjg1M0UwRTdDN0YxMTAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkU3MTQwNjE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1RDkyNUI2ODBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVo
YXZpb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBQTg0RjA1MTQzQkE3QkQwMDUxRDE1MyAvKiBT
Y3JvbGxDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYwNUFFRDE1Rjk0ODQ4MDA0
REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjYy
RUU4MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDNEU0MEQxODdGODJFMTAwNDU4ODJDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
SU9TLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NTExLDcgKzI3NTExLDYgQEAKIAkJCQlFMTlBQzNG
NDE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBNTEyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxRkUxMzY0MTgzNDM1MTEwMDg5MkYxMyAvKiBDcnlwdG9EaWdlc3RNYWMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1N0E4RTQxODE3M0EzQTAwOUY4MjFEIC8qIENyeXB0b0tl
eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QTlBREZGNDFBQTExNjNCMDBEMjczM0MgLyogU2Ny
b2xsQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxMjVGODREMTgyNDI4OUQwMEQ4
NENEOSAvKiBDcnlwdG9LZXlBRVMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNUY4NjMxODJD
MzAzQTAwRDg0Q0Q5IC8qIENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxQzI2NkRFMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NTI0LDYgKzI5NTIzLDcgQEAKIAkJCQlC
Q0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQkwRkU3MTQwNTE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEOTI1QjY3MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3Jv
bGxCZWhhdmlvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUE4NEYwNDE0M0JBN0JEMDA1MUQx
NTMgLyogU2Nyb2xsQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGNjA1QUVDMTVG
OTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQUY2MkVFNzE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDNEU0MEUxODdGODJFMTAwNDU4ODJDIC8qIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggYTA4OGUyNGI1YTVhYzJlYTNhZDFkYTU2MDA5OWE1
MDkyY2E5ZjA0Ny4uNzVkMTQzYTRlNWE5MGQ4NjdhYjlhNGEzNjBiMjk4N2I5M2EwZDQ0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtOTYxLDEyICs5
NjEsNiBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZQogICAgIAogICAgIGJvb2wgZGlkSGFuZGxl
RXZlbnQgPSB2aWV3ID8gdmlldy0+d2hlZWxFdmVudCh3aGVlbEV2ZW50KSA6IGZhbHNlOwogICAg
IG1faXNIYW5kbGluZ1doZWVsRXZlbnQgPSBmYWxzZTsKLSAgICAKLSNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQotICAgIGlmIChzY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcGxhdGZvcm1Ob3Rp
ZnlTbmFwSWZOZWNlc3Nhcnkod2hlZWxFdmVudCwgKnNjcm9sbGFibGVBcmVhKTsKLSNlbmRpZgot
CiAgICAgcmV0dXJuIGRpZEhhbmRsZUV2ZW50OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVNYWMuaAppbmRleCA4MTYzNzRjZDEwODA5MmY1MGI3YzFmY2ZlYWJmNGUy
N2Y5MzJmMWJmLi5lNjMyY2IyNDJjZDYyOWQzNzk2Mjk1MzFhMGE0MTNkNzE5ZTgyMjc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmgKQEAgLTYxLDYgKzYxLDgg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEludFBvaW50IGFic29sdXRlU2Nyb2xsUG9zaXRpb24o
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxv
YXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0
aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcigpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtNzgsMTQgKzgwLDEwIEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzQWxyZWFk
eVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFNj
cm9sbEV2ZW50QXhpcyk7CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9S
TShNQUMpCi0gICAgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlz
KSBvdmVycmlkZTsKLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4
aXMsIGZsb2F0IGRlbHRhKSBvdmVycmlkZTsKLSNlbmRpZgotCiAgICAgdm9pZCBsb2dFeHBvc2Vk
VW5maWxsZWRBcmVhKCk7CiAKICAgICBTY3JvbGxDb250cm9sbGVyIG1fc2Nyb2xsQ29udHJvbGxl
cjsKKyAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+IG1fc25hcFJ1YmJlcmJhbmRUaW1l
cjsKIAogICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Njcm9sbExheWVyOwogICAgIFJldGFpblB0
cjxDQUxheWVyPiBtX3Njcm9sbGVkQ29udGVudHNMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMubW0KaW5kZXggYmE5ODdhNTFiMzFlNzdiMzVjZTUxZGJjOTlm
MzliMTczMDI5ZTMzYS4uNzJlMDM0NWQ0ZjFkY2Y0NmMwNDJkY2Q3NGUxMjVjZjFiMjA2M2Y2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KQEAgLTY2LDYg
KzY2LDggQEAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6U2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYyhTY3JvbGxpbmcKIAogU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZU1hYzo6flNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMoKQogewor
ICAgIGlmIChtX3NuYXBSdWJiZXJiYW5kVGltZXIpCisgICAgICAgIENGUnVuTG9vcFRpbWVySW52
YWxpZGF0ZShtX3NuYXBSdWJiZXJiYW5kVGltZXIuZ2V0KCkpOwogfQogCiB2b2lkIFNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNj
cm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQpAQCAtMjk0LDYgKzI5NiwzMiBAQCB2b2lkIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91
dENvbnRlbnRFZGdlQ29ucwogICAgIHNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWlu
dHMob2Zmc2V0KTsKIH0KIAordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
OjpzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKQoreworICAgIEFTU0VSVCghbV9zbmFwUnViYmVy
YmFuZFRpbWVyKTsKKworICAgIENGVGltZUludGVydmFsIHRpbWVySW50ZXJ2YWwgPSAxLjAgLyA2
MC4wOworCisgICAgbV9zbmFwUnViYmVyYmFuZFRpbWVyID0gYWRvcHRDRihDRlJ1bkxvb3BUaW1l
ckNyZWF0ZVdpdGhIYW5kbGVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIENGQWJzb2x1dGVUaW1lR2V0
Q3VycmVudCgpICsgdGltZXJJbnRlcnZhbCwgdGltZXJJbnRlcnZhbCwgMCwgMCwgXihDRlJ1bkxv
b3BUaW1lclJlZikgeworICAgICAgICBtX3Njcm9sbENvbnRyb2xsZXIuc25hcFJ1YmJlckJhbmRU
aW1lckZpcmVkKCk7CisgICAgfSkpOworICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdl
dEN1cnJlbnQoKSwgbV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wRGVmYXVs
dE1vZGUpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnN0
b3BTbmFwUnViYmVyYmFuZFRpbWVyKCkKK3sKKyAgICBpZiAoIW1fc25hcFJ1YmJlcmJhbmRUaW1l
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE1haW5GcmFtZUlz
UnViYmVyQmFuZGluZyhmYWxzZSk7CisKKyAgICAvLyBTaW5jZSB0aGUgcnViYmVyYmFuZCB0aW1l
ciBoYXMgc3RvcHBlZCwgdG90YWxDb250ZW50c1NpemVGb3JSdWJiZXJCYW5kIGNhbiBiZSBzeW5j
aHJvbml6ZWQgd2l0aCB0b3RhbENvbnRlbnRzU2l6ZS4KKyAgICBzZXRUb3RhbENvbnRlbnRzU2l6
ZUZvclJ1YmJlckJhbmQodG90YWxDb250ZW50c1NpemUoKSk7CisKKyAgICBDRlJ1bkxvb3BUaW1l
ckludmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgpKTsKKyAgICBtX3NuYXBSdWJi
ZXJiYW5kVGltZXIgPSBudWxscHRyOworfQorCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpCiB7
CiAgICAgRmxvYXRQb2ludCBjdXJyZW50U2Nyb2xsUG9zaXRpb24gPSBhYnNvbHV0ZVNjcm9sbFBv
c2l0aW9uKCk7CkBAIC01MTIsMTkgKzU0MCw2IEBAIHZvaWQgbG9nV2hlZWxFdmVudEhhbmRsZXJD
b3VudENoYW5nZWQodW5zaWduZWQgY291bnQpCiAgICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6
IFdoZWVsIGV2ZW50IGhhbmRsZXIgY291bnQgY2hhbmdlZC4gVGltZTogJWYgQ291bnQ6ICV1XG4i
LCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCBjb3VudCk7CiB9CiAKLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi1MYXlvdXRVbml0IFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbE9mZnNldE9uQXhpcyhTY3JvbGxF
dmVudEF4aXMpCi17Ci0gICAgLy8gVGVtcG9yYXJ5IHN0dWIgdW50aWwgaHR0cDovL3dlYmtpdC5v
cmcvYi8xNDE5NzMuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZU1hYzo6aW1tZWRpYXRlU2Nyb2xsT25BeGlzKFNjcm9sbEV2ZW50QXhpcywg
ZmxvYXQpCi17Ci0gICAgLy8gVGVtcG9yYXJ5IHN0dWIgdW50aWwgaHR0cDovL3dlYmtpdC5vcmcv
Yi8xNDE5NzMuCi19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IDBlNDNiNTE3ZDI3NmY1OWQ3ZWYz
NGM4YjMzOGVhMDYyNDAzMTYxMzkuLmFhZjgwNTAxYjZlY2ZjMmQ3ZjZkMmI4Y2U1ZjhmOTE5MTgw
OTEzZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAg
LTQ5LDkgKzQ5LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmlt
YXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmwKIAogU2Nyb2xsQW5pbWF0b3I6
OlNjcm9sbEFuaW1hdG9yKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKICAgICA6IG1f
c2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEpCi0jaWYgKEVOQUJMRShDU1NfU0NST0xMX1NO
QVApIHx8IEVOQUJMRShSVUJCRVJfQkFORElORykpICYmIFBMQVRGT1JNKE1BQykKLSAgICAsIG1f
c2Nyb2xsQ29udHJvbGxlcih0aGlzKQotI2VuZGlmCiAgICAgLCBtX2N1cnJlbnRQb3NYKDApCiAg
ICAgLCBtX2N1cnJlbnRQb3NZKDApCiB7CkBAIC04NCwxNiArODEsMjggQEAgdm9pZCBTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IG9mZnNldCkKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1B
QykKLWJvb2wgU2Nyb2xsQW5pbWF0b3I6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit2b2lkIFNjcm9sbEFuaW1hdG9y
Ojpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbEV2ZW50KQogewotICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIucHJvY2Vzc1do
ZWVsRXZlbnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpOworICAgIGlmIChtX3ZlcnRpY2FsU2Ny
b2xsU25hcEFuaW1hdG9yKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yLT5o
YW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxT
bmFwQW5pbWF0b3IpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+aGFu
ZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIH0KICNlbmRpZgogCiBib29sIFNjcm9sbEFuaW1h
dG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKIHsKICNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCi0gICAgbV9zY3JvbGxD
b250cm9sbGVyLnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChlKTsKKyAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25h
cEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KGUpOworICAgICAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbFNuYXBBbmltYXRvci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFu
aW1hdG9yKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+aGFuZGxl
V2hlZWxFdmVudChlKTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRv
ci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KICNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIEV2ZW50cyBpbiB0
aGUgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlCZWdpbiBwaGFzZSBoYXZlIG5vIGRlbHRhcywg
YW5kIHRoZXJlZm9yZSBuZXZlciBwYXNzZXMgdGhyb3VnaCB0aGUgc2Nyb2xsIGhhbmRsaW5nIGxv
Z2ljIGJlbG93LgpAQCAtMTc0LDE1ICsxODMsMzAgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6bm90
aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCiAjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQogdm9pZCBTY3JvbGxBbmltYXRvcjo6dXBk
YXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCkKIHsKLSAgICBtX3Njcm9sbENvbnRyb2xsZXIu
dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKG1fc2Nyb2xsYWJsZUFyZWEpOworICAgIC8v
IEZJWE1FOiBDdXJyZW50bHksIHNjcm9sbCBzbmFwIGFuaW1hdG9ycyBhcmUgcmVjcmVhdGVkIGV2
ZW4gdGhvdWdoIHRoZSBzbmFwIG9mZnNldHMgYWxvbmUgY2FuIGJlIHVwZGF0ZWQuCisgICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkpIHsKKyAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0
cygpLCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVyPigqdGhpcywgJlNjcm9sbEFu
aW1hdG9yOjpob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQpOworICAgIH0gZWxzZSBpZiAo
bV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNu
YXBUaW1lciA9IG51bGxwdHI7CisgICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnZlcnRp
Y2FsU25hcE9mZnNldHMoKSkgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9y
ID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBtX3Njcm9s
bGFibGVBcmVhLnZlcnRpY2FsU25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRpbWVyPigqdGhpcywgJlNjcm9sbEFuaW1hdG9yOjp2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZp
cmVkKTsKKyAgICB9IGVsc2UgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpIHsKKyAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1f
dmVydGljYWxTY3JvbGxTbmFwVGltZXIgPSBudWxscHRyOworICAgIH0KIH0KIAotTGF5b3V0VW5p
dCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsT2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlz
KQorTGF5b3V0VW5pdCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsT2Zmc2V0SW5BeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzKQogewotICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbCA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQb3NZOworICAgIEZsb2F0UG9pbnQg
Y3VycmVudFBvc2l0aW9uID0gdGhpcy0+Y3VycmVudFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gY3VycmVudFBvc2l0aW9uLngoKSA6
IGN1cnJlbnRQb3NpdGlvbi55KCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OmltbWVkaWF0
ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVsdGEpCit2b2lkIFNj
cm9sbEFuaW1hdG9yOjppbW1lZGlhdGVTY3JvbGxJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMs
IGZsb2F0IGRlbHRhKQogewogICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gdGhpcy0+
Y3VycmVudFBvc2l0aW9uKCk7CiAgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsKQpAQCAtMTkwLDYgKzIxNCwzMCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjppbW1lZGlh
dGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlbHRhKQogICAgIGVs
c2UKICAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQoY3Vy
cmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSArIGRlbHRhKSk7CiB9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3I6OnN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50QXhpcyBh
eGlzKQoreworICAgIFRpbWVyKiBzY3JvbGxTbmFwVGltZXIgPSBheGlzID09IFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lci5nZXQoKSA6IG1f
dmVydGljYWxTY3JvbGxTbmFwVGltZXIuZ2V0KCk7CisgICAgaWYgKCFzY3JvbGxTbmFwVGltZXIt
PmlzQWN0aXZlKCkpCisgICAgICAgIHNjcm9sbFNuYXBUaW1lci0+c3RhcnRSZXBlYXRpbmcoMS4w
IC8gNjAuMCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BTY3JvbGxTbmFwVGltZXIo
U2Nyb2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgVGltZXIqIHNjcm9sbFNuYXBUaW1lciA9IGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9ob3Jpem9udGFsU2Nyb2xsU25h
cFRpbWVyLmdldCgpIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lci5nZXQoKTsKKyAgICBpZiAo
c2Nyb2xsU25hcFRpbWVyLT5pc0FjdGl2ZSgpKQorICAgICAgICBzY3JvbGxTbmFwVGltZXItPnN0
b3AoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1l
ckZpcmVkKCkKK3sKKyAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3ItPnNjcm9sbFNu
YXBBbmltYXRpb25VcGRhdGUoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6dmVydGljYWxT
Y3JvbGxTbmFwVGltZXJGaXJlZCgpCit7CisgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRv
ci0+c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOworfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4
IDA5MTNkZWJiNDUyZjM2Y2ZjODBkZDA5YmRjOTJiMzM4M2UzMTg2YzUuLjU2NjA4NWRlOWUzMDQx
YzJjZDhmOWJlZmQ3MWNkODhiZGYxN2Y0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuaApAQCAtMzMsMTQgKzMzLDE0IEBACiAjZGVmaW5lIFNjcm9sbEFuaW1hdG9y
X2gKIAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAot
I2lmIChFTkFCTEUoUlVCQkVSX0JBTkRJTkcpIHx8IEVOQUJMRShDU1NfU0NST0xMX1NOQVApKSAm
JiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgorI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC01MCw4ICs1MCw4IEBAIGNsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKIGNs
YXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwogCi0jaWYgKEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApIHx8IEVOQUJMRShSVUJCRVJfQkFORElORykpICYmIFBMQVRGT1JNKE1BQykK
LWNsYXNzIFNjcm9sbEFuaW1hdG9yIDogcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50IHsK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCitjbGFzcyBTY3Jv
bGxBbmltYXRvciA6IHB1YmxpYyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50IHsKICNlbHNl
CiBjbGFzcyBTY3JvbGxBbmltYXRvciB7CiAjZW5kaWYKQEAgLTExOCwyMiArMTE4LDMzIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9S
TShNQUMpCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50Jik7Ci0KKyAgICB2b2lkIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xs
U25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEFu
aW1hdG9yc0FuZFRpbWVycygpOwotICAgIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0T25BeGlzKFNj
cm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMo
U2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IHNjcm9sbE9mZnNldEluQXhpcyhTY3JvbGxFdmVudEF4aXMpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9h
dCBkZWx0YSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVy
KFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BTY3JvbGxT
bmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzKSBvdmVycmlkZTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUm
IGRlbHRhKTsKIAotICAgIFNjcm9sbGFibGVBcmVhJiBtX3Njcm9sbGFibGVBcmVhOwotI2lmIChF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpKSAmJiBQTEFU
Rk9STShNQUMpCi0gICAgU2Nyb2xsQ29udHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7CisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQorICAgIC8vIFRyaXZpYWwg
d3JhcHBlcnMgYXJvdW5kIHRoZSBhY3R1YWwgdXBkYXRlIGxvb3AgaW4gQXhpc1Njcm9sbFNuYXBB
bmltYXRvciwgc2luY2UgV2ViQ29yZSBUaW1lciByZXF1aXJlcyBhIFRpbWVyIGFyZ3VtZW50Lgor
ICAgIHZvaWQgaG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CisgICAgdm9pZCB2ZXJ0
aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCk7CiAjZW5kaWYKKworICAgIFNjcm9sbGFibGVBcmVh
JiBtX3Njcm9sbGFibGVBcmVhOwogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lk
IHVzaW5nIGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJl
bnRQb3NZOyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yPiBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3I7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFRpbWVyPiBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXI7CisgICAgLy8gRklY
TUU6IEZpbmQgYSB3YXkgdG8gY29uc29saWRhdGUgYm90aCB0aW1lcnMgaW50byBvbmUgdmFyaWFi
bGUuCisgICAgc3RkOjp1bmlxdWVfcHRyPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+IG1fdmVydGlj
YWxTY3JvbGxTbmFwQW5pbWF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVyPiBtX3ZlcnRp
Y2FsU2Nyb2xsU25hcFRpbWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZDJhZWIxYWM2YzkwYzk0YmQwOTY3NGEy
ODE3YzIzZmYwOWMwMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgU2Nyb2xsQ29udHJvbGxlcl9oCi0jZGVmaW5lIFNjcm9sbENvbnRyb2xsZXJfaAotCi0j
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCi0jaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50
OwotY2xhc3MgU2Nyb2xsYWJsZUFyZWE7Ci0KLWNsYXNzIFNjcm9sbENvbnRyb2xsZXJDbGllbnQg
ewotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgflNjcm9sbENvbnRyb2xsZXJDbGllbnQoKSB7IH0K
LQotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGFsbG93c1Zl
cnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7Ci0gICAgdmly
dHVhbCBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBpbm5l
ZEluRGlyZWN0aW9uKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY2Fu
U2Nyb2xsSG9yaXpvbnRhbGx5KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5TY3JvbGxWZXJ0
aWNhbGx5KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rp
b24oU2Nyb2xsRGlyZWN0aW9uKSA9IDA7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGFic29sdXRlIHNj
cm9sbCBwb3NpdGlvbiwgbm90IHJlbGF0aXZlIHRvIHRoZSBzY3JvbGwgb3JpZ2luLgotICAgIHZp
cnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgYWJzb2x1dGVTY3JvbGxQb3NpdGlvbigpID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29u
c3RyYWludHMoY29uc3QgRmxvYXRTaXplJikgPSAwOwotCi0gICAgLy8gSWYgdGhlIGN1cnJlbnQg
c2Nyb2xsIHBvc2l0aW9uIGlzIHdpdGhpbiB0aGUgb3ZlcmhhbmcgYXJlYSwgdGhpcyBmdW5jdGlv
biB3aWxsIGNhdXNlCi0gICAgLy8gdGhlIHBhZ2UgdG8gc2Nyb2xsIHRvIHRoZSBuZWFyZXN0IGJv
dW5kYXJ5IHBvaW50LgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91
bmRzSWZOZWNlc3NhcnkoKSA9IDA7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQ
TEFURk9STShNQUMpCi0gICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhpcyhT
Y3JvbGxFdmVudEF4aXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsT25B
eGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVsdGEpID0gMDsKLSNlbmRpZgotfTsKLQotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLWNsYXNzIFNjcm9sbENv
bnRyb2xsZXIgOiBwdWJsaWMgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCB7Ci0jZWxzZQot
Y2xhc3MgU2Nyb2xsQ29udHJvbGxlciB7Ci0jZW5kaWYKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTY3JvbGxDb250cm9sbGVyKTsKLQotcHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9sbENvbnRy
b2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCopOwotCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotCi0gICAgYm9vbCBpc1J1YmJlckJhbmRJ
blByb2dyZXNzKCkgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFU
Rk9STShNQUMpCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRU
aW1lcnMoY29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHZv
aWQgc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0gICAgdm9pZCBzdG9wU25hcFJ1YmJlcmJh
bmRUaW1lcigpOwotICAgIHZvaWQgc25hcFJ1YmJlckJhbmQoKTsKLSAgICB2b2lkIHNuYXBSdWJi
ZXJCYW5kVGltZXJGaXJlZCgpOwotCi0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9u
dGFsRGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotCi0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgaG9yaXpvbnRhbFNjcm9s
bFNuYXBUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCB2ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lckZpcmVk
KCk7Ci0gICAgdm9pZCBzdGFydFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMpOwotICAg
IHZvaWQgc3RvcFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMpOwotCi0gICAgTGF5b3V0
VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBvdmVycmlkZTsKLSAgICB2
b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSBv
dmVycmlkZTsKLSNlbmRpZgotCi0gICAgU2Nyb2xsQ29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7
Ci0gICAgCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7
Ci0gICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKLSAgICBGbG9hdFNpemUgbV9z
dHJldGNoU2Nyb2xsRm9yY2U7Ci0gICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKLQot
ICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgotICAgIENGVGltZUludGVydmFsIG1fc3RhcnRUaW1l
OwotICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKLSAgICBGbG9hdFBvaW50IG1fb3JpZ09y
aWdpbjsKLSAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7Ci0gICAgUnVuTG9vcDo6VGltZXI8
U2Nyb2xsQ29udHJvbGxlcj4gbV9zbmFwUnViYmVyYmFuZFRpbWVyOwotICAgIAotI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBGSVhNRTogRmluZCBh
IHdheSB0byBjb25zb2xpZGF0ZSBib3RoIHRpbWVycyBpbnRvIG9uZSB2YXJpYWJsZS4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4gbV9ob3Jpem9udGFsU2Nyb2xs
U25hcEFuaW1hdG9yOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBeGlzU2Nyb2xsU25hcEFuaW1hdG9y
PiBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yOwotICAgIFJ1bkxvb3A6OlRpbWVyPFNjcm9s
bENvbnRyb2xsZXI+IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lcjsKLSAgICBSdW5Mb29wOjpU
aW1lcjxTY3JvbGxDb250cm9sbGVyPiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyOwotI2VuZGlm
Ci0KLSAgICBib29sIG1faW5TY3JvbGxHZXN0dXJlOwotICAgIGJvb2wgbV9tb21lbnR1bVNjcm9s
bEluUHJvZ3Jlc3M7Ci0gICAgYm9vbCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xsczsKLSAgICBib29s
IG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotCi0jZW5kaWYgLy8gU2Ny
b2xsQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9TY3JvbGxDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Ny
b2xsQ29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RhOTNmZWM4
YjY2ZjQwY2RhZDljYzNjZWE4OTBhY2U4YzA3ZmM1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3Jv
bGxDb250cm9sbGVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxDb250
cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotI2luY2x1
ZGUgPHN5cy90aW1lLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotI2luY2x1ZGUg
IkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0KLXN0YXRpYyBOU1RpbWVJbnRl
cnZhbCBzeXN0ZW1VcHRpbWUoKQotewotICAgIGlmIChbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0lu
Zm9dIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc3lzdGVtVXB0aW1lKV0pCi0gICAgICAg
IHJldHVybiBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV07Ci0KLSAg
ICAvLyBHZXQgaG93IGxvbmcgc3lzdGVtIGhhcyBiZWVuIHVwLiBGb3VuZCBieSBsb29raW5nIGdl
dHRpbmcgImJvb3R0aW1lIiBmcm9tIHRoZSBrZXJuZWwuCi0gICAgc3RhdGljIHN0cnVjdCB0aW1l
dmFsIGJvb3R0aW1lID0gezAsIDB9OwotICAgIGlmICghYm9vdHRpbWUudHZfc2VjKSB7Ci0gICAg
ICAgIGludCBtaWJbMl0gPSB7Q1RMX0tFUk4sIEtFUk5fQk9PVFRJTUV9OwotICAgICAgICBzaXpl
X3Qgc2l6ZSA9IHNpemVvZihib290dGltZSk7Ci0gICAgICAgIGlmICgtMSA9PSBzeXNjdGwobWli
LCAyLCAmYm9vdHRpbWUsICZzaXplLCAwLCAwKSkKLSAgICAgICAgICAgIGJvb3R0aW1lLnR2X3Nl
YyA9IDA7Ci0gICAgfQotICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKLSAgICBpZiAoYm9vdHRpbWUu
dHZfc2VjICYmIC0xICE9IGdldHRpbWVvZmRheSgmbm93LCAwKSkgewotICAgICAgICBzdHJ1Y3Qg
dGltZXZhbCB1cHRpbWU7Ci0gICAgICAgIHRpbWVyc3ViKCZub3csICZib290dGltZSwgJnVwdGlt
ZSk7Ci0gICAgICAgIE5TVGltZUludGVydmFsIHJlc3VsdCA9IHVwdGltZS50dl9zZWMgKyAodXB0
aW1lLnR2X3VzZWMgLyAxRSs2KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgZmxv
YXQgc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCA9IDAuMTBmOwotc3RhdGljIGNvbnN0IGZs
b2F0IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvID0gMTsKLXN0YXRpYyBjb25z
dCBmbG9hdCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoID0gMTA7
Ci0KLXN0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBv
c2l0aW9uLCBmbG9hdCBpbml0aWFsVmVsb2NpdHksIGZsb2F0IGVsYXBzZWRUaW1lKQotewotICAg
IHJldHVybiB3a05TRWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGluaXRpYWxQb3NpdGlvbiwgaW5p
dGlhbFZlbG9jaXR5LCBlbGFwc2VkVGltZSk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBlbGFzdGljRGVs
dGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0gICAgcmV0dXJuIHdrTlNFbGFzdGlj
RGVsdGFGb3JSZWJvdW5kRGVsdGEoZGVsdGEpOwotfQotCi1zdGF0aWMgZmxvYXQgcmVib3VuZERl
bHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQotewotICAgIHJldHVybiB3a05TUmVib3Vu
ZERlbHRhRm9yRWxhc3RpY0RlbHRhKGRlbHRhKTsKLX0KLQotc3RhdGljIGZsb2F0IHNjcm9sbFdo
ZWVsTXVsdGlwbGllcigpCi17Ci0gICAgc3RhdGljIGZsb2F0IG11bHRpcGxpZXIgPSAtMTsKLSAg
ICBpZiAobXVsdGlwbGllciA8IDApIHsKLSAgICAgICAgbXVsdGlwbGllciA9IFtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGZsb2F0Rm9yS2V5OkAiTlNTY3JvbGxXaGVlbE11
bHRpcGxpZXIiXTsKLSAgICAgICAgaWYgKG11bHRpcGxpZXIgPD0gMCkKLSAgICAgICAgICAgIG11
bHRpcGxpZXIgPSAxOwotICAgIH0KLSAgICByZXR1cm4gbXVsdGlwbGllcjsKLX0KLQotU2Nyb2xs
Q29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50KiBjbGll
bnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2xhc3RNb21lbnR1bVNjcm9sbFRp
bWVzdGFtcCgwKQotICAgICwgbV9zdGFydFRpbWUoMCkKLSAgICAsIG1fc25hcFJ1YmJlcmJhbmRU
aW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZTY3JvbGxDb250cm9sbGVyOjpzbmFwUnVi
YmVyQmFuZFRpbWVyRmlyZWQpCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZP
Uk0oTUFDKQotICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyKFJ1bkxvb3A6OmN1cnJl
bnQoKSwgdGhpcywgJlNjcm9sbENvbnRyb2xsZXI6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJG
aXJlZCkKLSAgICAsIG1fdmVydGljYWxTY3JvbGxTbmFwVGltZXIoUnVuTG9vcDo6Y3VycmVudCgp
LCB0aGlzLCAmU2Nyb2xsQ29udHJvbGxlcjo6dmVydGljYWxTY3JvbGxTbmFwVGltZXJGaXJlZCkK
LSNlbmRpZgotICAgICwgbV9pblNjcm9sbEdlc3R1cmUoZmFsc2UpCi0gICAgLCBtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcyhmYWxzZSkKLSAgICAsIG1faWdub3JlTW9tZW50dW1TY3JvbGxzKGZh
bHNlKQotICAgICwgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUoZmFsc2UpCi17Ci19Ci0K
LWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYg
UExBVEZPUk0oTUFDKQotICAgIGlmICghcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKHdo
ZWVsRXZlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAod2hlZWxF
dmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4pIHsKLSAgICAgICAg
Ly8gRmlyc3QsIGNoZWNrIGlmIHdlIHNob3VsZCBydWJiZXItYmFuZCBhdCBhbGwuCi0gICAgICAg
IGlmIChtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKC13aGVlbEV2ZW50LmRl
bHRhWCgpLCAwKSkKLSAgICAgICAgICAgICYmICFzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFs
RGlyZWN0aW9uKHdoZWVsRXZlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKLSAgICAgICAgbV9tb21lbnR1bVNjcm9sbElu
UHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxz
ZTsKLSAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwotICAgICAgICBt
X21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKLQotICAgICAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOwotICAgICAgICBtX3N0cmV0Y2hT
Y3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFt
b3VudC53aWR0aCgpKSk7Ci0gICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChy
ZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWlnaHQoKSkpOwotICAg
ICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKLQotICAgICAgICBzdG9w
U25hcFJ1YmJlcmJhbmRUaW1lcigpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmICh3aGVlbEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRl
ZCkgewotICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBib29sIGlzTW9tZW50dW1TY3JvbGxFdmVudCA9ICh3aGVlbEV2ZW50Lm1vbWVu
dHVtUGhhc2UoKSAhPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpOwotICAgIGlmIChtX2ln
bm9yZU1vbWVudHVtU2Nyb2xscyAmJiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50IHx8IG1fc25hcFJ1
YmJlcmJhbmRUaW1lcklzQWN0aXZlKSkgewotICAgICAgICBpZiAod2hlZWxFdmVudC5tb21lbnR1
bVBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCkgewotICAgICAgICAgICAg
bV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmbG9hdCBk
ZWx0YVggPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAgICBmbG9hdCBkZWx0YVkg
PSBtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0KLSAgICAvLyBSZXNldCBvdmVyZmxv
dyB2YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92ZSBkZWx0YSBhdCB2YXJpb3Vz
IHBvaW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCi0gICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhID0gRmxvYXRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVu
dC0+c3RyZXRjaEFtb3VudCgpOwotICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkID0gc3Ry
ZXRjaEFtb3VudC5oZWlnaHQoKTsKLSAgICBib29sIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0g
c3RyZXRjaEFtb3VudC53aWR0aCgpOwotCi0gICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVg7
Ci0gICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVk7Ci0KLSAgICBpZiAoaXNWZXJ0aWNhbGx5
U3RyZXRjaGVkIHx8IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgIGV2ZW50Q29h
bGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCgp
OwotICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LnVuYWNjZWxlcmF0
ZWRTY3JvbGxpbmdEZWx0YVkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBldmVudENvYWxlc2Nl
ZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOwotICAgICAgICBldmVudENvYWxlc2NlZERl
bHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOwotICAgIH0KLQotICAgIGRlbHRhWCArPSBldmVu
dENvYWxlc2NlZERlbHRhWDsKLSAgICBkZWx0YVkgKz0gZXZlbnRDb2FsZXNjZWREZWx0YVk7Ci0K
LSAgICAvLyBTbGlnaHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkgYXBwbHlpbmcg
dGhlID0gY2FzZSB0byBkZWx0YVkKLSAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0
YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAgIGVsc2UKLSAgICAgICAgZGVsdGFZID0gMDsK
LQotICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZhbHNlOwotCi0gICAgUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2UgbW9tZW50dW1QaGFzZSA9IHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpOwotCi0g
ICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0aGVuIGRvIHNvbWUg
c2V0dXAuCi0gICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAobW9tZW50dW1Q
aGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuIHx8IG1vbWVudHVtUGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkKSkKLSAgICAgICAgbV9tb21lbnR1bVNjcm9s
bEluUHJvZ3Jlc3MgPSB0cnVlOwotCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gd2hl
ZWxFdmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAg
IGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgewot
ICAgICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID4g
MCAmJiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KSB7Ci0gICAgICAg
ICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsZXNjZWREZWx0YVggLyAo
ZmxvYXQpdGltZURlbHRhKTsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRIZWln
aHQoZXZlbnRDb2FsZXNjZWREZWx0YVkgLyAoZmxvYXQpdGltZURlbHRhKTsKLSAgICAgICAgICAg
IG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0
YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxv
Y2l0eSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzVmVydGljYWxs
eVN0cmV0Y2hlZCkgewotICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAm
JiBtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKGRlbHRhWCwgMCkpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNhbC4KLSAgICAg
ICAgICAgICAgICBpZiAoZGVsdGFZICYmIChmYWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVy
YmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQotICAgICAgICAgICAgICAgICAgICBkZWx0
YVggPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJi
YW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEu
d2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQp
IHsKLSAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KLSAg
ICAgICAgICAgIGlmIChtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKDAsIGRl
bHRhWSkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAmJiAoZmFic2YoZGVsdGFZIC8g
ZGVsdGFYKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKLSAgICAgICAg
ICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChmYWJzZihk
ZWx0YVkpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgewot
ICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAgICAgICAgICAg
IGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhl
aWdodCgpICsgZGVsdGFZKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIE5vdCBzdHJldGNoaW5nIGF0IGFsbCB5ZXQuCi0gICAgICAgICAgICBpZiAobV9j
bGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSkpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVx
dWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSAr
IGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNob3VsZFN0cmV0Y2ggPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRlbHRhWCB8fCBk
ZWx0YVkpIHsKLSAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlTdHJl
dGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7Ci0gICAgICAgICAgICBpZiAoZGVs
dGFZKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigp
OwotICAgICAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeShGbG9hdFNpemUo
MCwgZGVsdGFZKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGVsdGFYKSB7Ci0g
ICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotICAgICAg
ICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeShGbG9hdFNpemUoZGVsdGFYLCAw
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1f
Y2xpZW50LT5hbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkgewotICAgICAg
ICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0
YVggPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkZWx0YVggJiYgIWlzSG9yaXpvbnRhbGx5
U3RyZXRjaGVkICYmICFtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKGRlbHRh
WCwgMCkpKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGll
cigpOwotCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91
dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKGRlbHRhWCwgMCkpOwotICAgICAgICAg
ICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbV9j
bGllbnQtPmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkgewotICAgICAgICAg
ICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVkg
PSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkZWx0YVkgJiYgIWlzVmVydGljYWxseVN0cmV0
Y2hlZCAmJiAhbV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0U2l6ZSgwLCBkZWx0YVkp
KSkgewotICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsK
LQotICAgICAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250
ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsKLSAgICAgICAgICAgICAg
ICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOwotCi0gICAgICAgICAgICBpZiAo
bV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG1fY2xp
ZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoZXZlbnRDb2FsZXNjZWREZWx0YVgsIGV2
ZW50Q29hbGVzY2VkRGVsdGFZKSkgfHwgKGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFYKSArIGZh
YnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9tZW50dW1TY3JvbGxU
aW1lc3RhbXApIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9y
Y2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAg
ICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9y
Y2UuaGVpZ2h0KCkgKyBkZWx0YVkpOwotCi0gICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVs
dGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNl
LndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNj
cm9sbEZvcmNlLmhlaWdodCgpKSkpOwotCi0gICAgICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRl
U2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhkYW1wZWREZWx0YSAtIHN0cmV0
Y2hBbW91bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fbW9tZW50dW1TY3JvbGxJ
blByb2dyZXNzICYmIG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRl
ZCkgewotICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAg
ICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICBtX2xhc3RNb21lbnR1
bVNjcm9sbFRpbWVzdGFtcCA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKLXsKLSAgICByZXR1
cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSArIDAuNWYpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZmxvYXQg
bnVtKQotewotICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsKLSAgICBpZiAoZmFi
cyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQotICAgICAgICBudW0gPSByb3VuZGVkTnVtOwot
Ci0gICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOwotfQotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKCFtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgewotICAgICAgICBD
RlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsKLQotICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0g
RmxvYXRTaXplKCkpIHsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9jbGllbnQtPnN0
cmV0Y2hBbW91bnQoKTsKLSAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBGbG9hdFNp
emUoKSkgewotICAgICAgICAgICAgICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0KLSAg
ICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6ZSgpOwotICAgICAg
ICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRj
aCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9p
bnQoKTsKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9vcmln
T3JpZ2luID0gbV9jbGllbnQtPmFic29sdXRlU2Nyb2xsUG9zaXRpb24oKSAtIG1fc3RhcnRTdHJl
dGNoOwotICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7Ci0K
LSAgICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGlj
YWwgcnViYmVyYmFuZGluZwotICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5Lmhl
aWdodCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKLSAgICAgICAgICAgICAg
ICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgcnVi
YmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jp
em9udGFsbHkKLSAgICAgICAgICAgIGlmICghbV9jbGllbnQtPmNhblNjcm9sbEhvcml6b250YWxs
eSgpKQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwotCi0gICAg
ICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3Np
YmxlIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5Ci0gICAgICAgICAgICBpZiAoIW1fY2xpZW50LT5jYW5T
Y3JvbGxWZXJ0aWNhbGx5KCkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0SGVp
Z2h0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRQb2ludCBkZWx0YShyb3VuZFRvRGV2
aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRj
aC53aWR0aCgpLCAtbV9vcmlnVmVsb2NpdHkud2lkdGgoKSwgKGZsb2F0KXRpbWVEZWx0YSkpLAot
ICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JU
aW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdWZWxvY2l0eS5oZWlnaHQo
KSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKLQotICAgICAgICBpZiAoZmFicyhkZWx0YS54KCkpID49
IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKLSAgICAgICAgICAgIG1fY2xpZW50LT5pbW1l
ZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShkZWx0
YS54KCksIGRlbHRhLnkoKSkgLSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpKTsKLQotICAgICAg
ICAgICAgRmxvYXRTaXplIG5ld1N0cmV0Y2ggPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOwot
Ci0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFG
b3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC53aWR0aCgpKSk7Ci0gICAgICAgICAgICBtX3N0cmV0
Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0
cmV0Y2guaGVpZ2h0KCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fY2xpZW50
LT5hZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKTsKLQotICAgICAgICAg
ICAgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9s
bEZvcmNlID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICBtX3N0YXJ0VGltZSA9IDA7Ci0gICAg
ICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgbV9vcmln
T3JpZ2luID0gRmxvYXRQb2ludCgpOwotICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9h
dFNpemUoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3RhcnRUaW1lID0g
W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdOwotICAgICAgICBtX3N0YXJ0
U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgIH0KLX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVy
Ojppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5TY3JvbGxH
ZXN0dXJlICYmICFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAhbV9zbmFwUnViYmVyYmFu
ZFRpbWVySXNBY3RpdmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhbV9j
bGllbnQtPnN0cmV0Y2hBbW91bnQoKS5pc1plcm8oKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKQotewotICAgIG1fc25hcFJ1YmJlcmJhbmRU
aW1lci5zdGFydFJlcGVhdGluZygxLjAgLyA2MC4wKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpCi17Ci0gICAgbV9zbmFwUnViYmVyYmFuZFRp
bWVyLnN0b3AoKTsKLSAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSA9IGZhbHNlOwot
fQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5kKCkKLXsKLSAgICBDRlRp
bWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBzeXN0ZW1VcHRpbWUoKSAtIG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wOwotICAgIGlmIChtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0
aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCkKLSAgICAgICAgbV9tb21l
bnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0KLSAgICBtX2luU2Nyb2xsR2VzdHVyZSA9IGZh
bHNlOwotCi0gICAgaWYgKG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZl
cmVuY2VEYXRlXTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fb3Jp
Z09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgp
OwotCi0gICAgc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0gICAgbV9zbmFwUnViYmVyYmFu
ZFRpbWVySXNBY3RpdmUgPSB0cnVlOwotfQotCi1ib29sIFNjcm9sbENvbnRyb2xsZXI6OnNob3Vs
ZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbEV2ZW50KQotewotICAgIGlmICh3aGVlbEV2ZW50LmRlbHRhWCgpID4gMCkKLSAgICAg
ICAgcmV0dXJuIG1fY2xpZW50LT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsTGVm
dCk7Ci0gICAgaWYgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAwKQotICAgICAgICByZXR1cm4gbV9j
bGllbnQtPnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxSaWdodCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JN
KE1BQykKLWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxT
bmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvcikgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25h
cEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KHdoZWVs
RXZlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobV9ob3Jp
em9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNu
YXBBbmltYXRvci0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLSAgICAgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KHdo
ZWVsRXZlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotICAgIAotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxBbmlt
YXRvcnNBbmRUaW1lcnMoY29uc3QgU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQotewot
ICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHNjcm9sbCBzbmFwIGFuaW1hdG9ycyBhcmUgcmVjcmVh
dGVkIGV2ZW4gdGhvdWdoIHRoZSBzbmFwIG9mZnNldHMgYWxvbmUgY2FuIGJlIHVwZGF0ZWQuCi0g
ICAgaWYgKHNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0cygpKQotICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3I+KHRoaXMsIHNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0
cygpLCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwotICAgIGVsc2UgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbFNuYXBBbmltYXRvcikKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFu
aW1hdG9yID0gbnVsbHB0cjsKLQotICAgIGlmIChzY3JvbGxhYmxlQXJlYS52ZXJ0aWNhbFNuYXBP
ZmZzZXRzKCkpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1h
a2VfdW5pcXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsIHNjcm9sbGFibGVBcmVhLnZl
cnRpY2FsU25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7Ci0gICAgZWxz
ZSBpZiAobV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvcikKLSAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6
c3RhcnRTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCi17Ci0gICAgUnVuTG9v
cDo6VGltZXI8U2Nyb2xsQ29udHJvbGxlcj4mIHNjcm9sbFNuYXBUaW1lciA9IGF4aXMgPT0gU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyIDog
bV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcjsKLSAgICBpZiAoIXNjcm9sbFNuYXBUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICBzY3JvbGxTbmFwVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wIC8gNjAu
MCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNjcm9sbFNuYXBUaW1lcihTY3Jv
bGxFdmVudEF4aXMgYXhpcykKLXsKLSAgICBSdW5Mb29wOjpUaW1lcjxTY3JvbGxDb250cm9sbGVy
PiYgc2Nyb2xsU25hcFRpbWVyID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwg
PyBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgOiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVy
OwotICAgIHNjcm9sbFNuYXBUaW1lci5zdG9wKCk7Ci19Ci0gICAgCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6Omhvcml6b250YWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvcikKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsU25h
cEFuaW1hdG9yLT5zY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCk7Ci19Ci0KLXZvaWQgU2Nyb2xs
Q29udHJvbGxlcjo6dmVydGljYWxTY3JvbGxTbmFwVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1f
dmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFw
QW5pbWF0b3ItPnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKTsKLX0KLQotTGF5b3V0VW5pdCBT
Y3JvbGxDb250cm9sbGVyOjpzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMp
Ci17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5zY3JvbGxPZmZzZXRPbkF4aXMoYXhpcyk7Ci19Ci0K
LXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6aW1tZWRpYXRlU2Nyb2xsT25BeGlzKFNjcm9sbEV2ZW50
QXhpcyBheGlzLCBmbG9hdCBkZWx0YSkKLXsKLSAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xs
T25BeGlzKGF4aXMsIGRlbHRhKTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaAppbmRleCAyOTkzYTIz
OTc2OTIyNjQwMmRkYmI0ODk5OTBhNjNkZDFlMzVhODM2Li5jZTE1NjM5MDlmMjAzNWE4MjY1NDhj
M2FjYmQ2MTEyY2JiNGNjYzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgKQEAgLTU3LDggKzU3LDggQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgfkF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQoKSB7IH0KIAogcHVi
bGljOgotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZl
bnRBeGlzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3Jv
bGxFdmVudEF4aXMsIGZsb2F0IHZlbG9jaXR5KSA9IDA7CisgICAgdmlydHVhbCBMYXlvdXRVbml0
IHNjcm9sbE9mZnNldEluQXhpcyhTY3JvbGxFdmVudEF4aXMpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgaW1tZWRpYXRlU2Nyb2xsSW5BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgdmVsb2NpdHkp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRB
eGlzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZl
bnRBeGlzKSA9IDA7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
QXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbQppbmRleCBhNDQyZTM3YzU5YjQ4NTk3NDZhOWEzYWUw
OGY5YmI0ZjM3ZTkxNjE1Li43MGVhN2ZiNTk1MTQ5Yjc3MjM2OTY1ZjNkMWM3MWY1YTI0Y2M2NmU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBB
bmltYXRvci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNu
YXBBbmltYXRvci5tbQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgQXhpc1Njcm9sbFNuYXBBbmlt
YXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQog
ICAgICAgICAvLyBCZWdpbiB0cmFja2luZyB3aGVlbCBkZWx0YXMgZm9yIGdsaWRlIHByZWRpY3Rp
b24uCiAgICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpVc2Vy
SW50ZXJhY3Rpb24pOwogICAgICAgICBwdXNoSW5pdGlhbFdoZWVsRGVsdGEod2hlZWxEZWx0YSk7
Ci0gICAgICAgIG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQgPSBtX2NsaWVudC0+c2Ny
b2xsT2Zmc2V0T25BeGlzKG1fYXhpcyk7CisgICAgICAgIG1fYmVnaW5UcmFja2luZ1doZWVsRGVs
dGFPZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzoK
QEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNu
YXBBbmltYXRpb25VcGRhdGUoKQogICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxT
bmFwU3RhdGU6OkdsaWRpbmcgfHwgbV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpT
bmFwcGluZyk7CiAgICAgZmxvYXQgZGVsdGEgPSBtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFw
U3RhdGU6OlNuYXBwaW5nID8gY29tcHV0ZVNuYXBEZWx0YSgpIDogY29tcHV0ZUdsaWRlRGVsdGEo
KTsKICAgICBpZiAoZGVsdGEpCi0gICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxPbkF4
aXMobV9heGlzLCBkZWx0YSk7CisgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxJbkF4
aXMobV9heGlzLCBkZWx0YSk7CiAgICAgZWxzZQogICAgICAgICBlbmRTY3JvbGxTbmFwQW5pbWF0
aW9uKFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRpb25SZWFjaGVkKTsKIH0KQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25V
cGRhdGUoKQogdm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNjcm9sbFNuYXBBbmlt
YXRpb24oU2Nyb2xsU25hcFN0YXRlIG5ld1N0YXRlKQogewogICAgIEFTU0VSVChuZXdTdGF0ZSA9
PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRl
OjpTbmFwcGluZyk7Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zm
c2V0T25BeGlzKG1fYXhpcyk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Ny
b2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CiAgICAgZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEgPSBu
ZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgPyBhdmVyYWdlSW5pdGlhbFdoZWVs
RGVsdGEoKSA6IDA7CiAgICAgTGF5b3V0VW5pdCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9
IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyA/IG1fYmVnaW5UcmFja2luZ1do
ZWVsRGVsdGFPZmZzZXQgKyBMYXlvdXRVbml0KHByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFu
Y2UoaW5pdGlhbFdoZWVsRGVsdGEpKSA6IG9mZnNldDsKICAgICBwcm9qZWN0ZWRTY3JvbGxEZXN0
aW5hdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBt
X3NuYXBPZmZzZXRzLT5maXJzdCgpKSwgbV9zbmFwT2Zmc2V0cy0+bGFzdCgpKTsKQEAgLTIwMyw3
ICsyMDMsNyBAQCB2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmVuZFNjcm9sbFNuYXBBbmlt
YXRpb24oU2Nyb2xsU25hcFN0YXRlIG5ld1N0YXRlKQogLy8gcmVsYXRpb25zaGlwIG9mIHRoZSBk
aXN0YW5jZSB0cmF2ZWxlZCwgY2xhbXBlZCBieSBhcmJpdHJhcnkgbWluIGFuZCBtYXggdmFsdWVz
LgogZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y29tcHV0ZVNuYXBEZWx0YSgpIGNvbnN0
CiB7Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlz
KG1fYXhpcyk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0
SW5BeGlzKG1fYXhpcyk7CiAgICAgYm9vbCBjYW5Db21wdXRlU25hcCA9ICAobV9pbml0aWFsT2Zm
c2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCkgfHwgKG1fdGFyZ2V0T2Zm
c2V0IDwgb2Zmc2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxPZmZzZXQpOwogICAgIGlmIChtX2N1
cnJlbnRTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nIHx8ICFjYW5Db21wdXRlU25h
cCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMzcsNyArMjM3LDcgQEAgZmxvYXQgQXhpc1Njcm9s
bFNuYXBBbmltYXRvcjo6Y29tcHV0ZVNuYXBEZWx0YSgpIGNvbnN0CiAvLyBhbmQgVkYuIFRodXMs
IHdlIGNhbiBleHByZXNzIG91ciBnbGlkaW5nIGVxdWF0aW9uIGFsbCBpbiB0ZXJtcyBvZiBWMCwg
VkYgYW5kIHQuCiBmbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjb21wdXRlR2xpZGVEZWx0
YSgpIGNvbnN0CiB7Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zm
c2V0T25BeGlzKG1fYXhpcyk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Ny
b2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CiAgICAgYm9vbCBjYW5Db21wdXRlR2xpZGUgPSAobV9p
bml0aWFsT2Zmc2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCkgfHwgKG1f
dGFyZ2V0T2Zmc2V0IDwgb2Zmc2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxPZmZzZXQpOwogICAg
IGlmIChtX2N1cnJlbnRTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgIWNhbkNv
bXB1dGVHbGlkZSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCmluZGV4IDM4ZDljYzhiMWQyZjJjMzk4MDM2ZmVl
YTRkNjFiZTBkMzk4NTZjZjcuLjUwMjUxOTg2NTlhYTJlMWM1OGVjNTZhN2JmYTM2MGY0NGZhOWIz
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVkZSAiU2Ny
b2xsQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgogCkBAIC00MSwxMSArNDIsMTUgQEAgT0JKQ19DTEFTUyBXZWJTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGU7CiAKIHR5cGVkZWYgaWQgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CiAK
KyNpZiAhRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorY2xhc3MgU2Nyb2xsQ29udHJvbGxlckNsaWVu
dCB7IH07CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxiYXI7
CiAKLWNsYXNzIFNjcm9sbEFuaW1hdG9yTWFjIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK2Ns
YXNzIFNjcm9sbEFuaW1hdG9yTWFjIDogcHVibGljIFNjcm9sbEFuaW1hdG9yLCBwcml2YXRlIFNj
cm9sbENvbnRyb2xsZXJDbGllbnQgewogCiBwdWJsaWM6CiAgICAgU2Nyb2xsQW5pbWF0b3JNYWMo
U2Nyb2xsYWJsZUFyZWEmKTsKQEAgLTE0NSwxMSArMTUwLDE3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRQb2ludCBhYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29u
c3RyYWludHMoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGlt
bWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgb3ZlcnJpZGU7CiAKICAg
ICBib29sIHBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsKKyAg
ICB2b2lkIHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpOwogCiAgICAgYm9vbCBpc0FscmVhZHlQ
aW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBTY3Jv
bGxFdmVudEF4aXMpOworCisgICAgU2Nyb2xsQ29udHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7
CisgICAgVGltZXIgbV9zbmFwUnViYmVyQmFuZFRpbWVyOwogI2VuZGlmCiAKICAgICBib29sIG1f
aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCAzMzUxMzg3YmJmZDdiYzdjZWZmMTJjNGU1
ZTFjOTViNzI4N2E3ODA4Li5hZWRhNWQ5M2Y1MGNiNzVlZmEyOTM1YjI5NmE1ZDcwMWIzYmQxZTc5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCkBAIC02NDMsNiArNjQzLDEwIEBAIFNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRv
ck1hYyhTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRv
cihzY3JvbGxhYmxlQXJlYSkKICAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIoKnRo
aXMsICZTY3JvbGxBbmltYXRvck1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkK
ICAgICAsIG1fc2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lcigqdGhpcywgJlNjcm9sbEFuaW1h
dG9yTWFjOjpzZW5kQ29udGVudEFyZWFTY3JvbGxlZFRpbWVyRmlyZWQpCisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorICAgICwgbV9zY3JvbGxDb250cm9sbGVyKHRoaXMpCisgICAgLCBtX3Nu
YXBSdWJiZXJCYW5kVGltZXIoKnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJh
bmRUaW1lckZpcmVkKQorI2VuZGlmCiAgICAgLCBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQo
ZmFsc2UpCiAgICAgLCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZShmYWxzZSkKIHsKQEAgLTEy
NjYsNiArMTI3MCwyMSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxC
eShjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogICAgIG1fY3VycmVudFBvc1kgPSBuZXdQb3MueSgp
OwogICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChhZGp1c3RlZERlbHRhKTsKIH0KKwordm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCkKK3sKKyAgICBtX3Nu
YXBSdWJiZXJCYW5kVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wIC8gNjAuMCk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6OnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCkKK3sKKyAgICBtX3Nu
YXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpz
bmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKQoreworICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zbmFw
UnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKK30KICNlbmRpZgogCiB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3MDM0YTgwZmZlMDAwNmQ4ZWI5NDQ5
OGY5OGY2Njg4NTAyOWE1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTY3JvbGxDb250cm9sbGVyX2gKKyNkZWZpbmUgU2Nyb2xsQ29udHJvbGxlcl9o
CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisKKyNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQ
bGF0Zm9ybVdoZWVsRXZlbnQ7CisKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgeworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgflNjcm9sbENvbnRyb2xsZXJDbGllbnQoKSB7IH0KKworcHVi
bGljOgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFsbG93c1ZlcnRpY2Fs
U3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7CisgICAgdmlydHVhbCBJ
bnRTaXplIHN0cmV0Y2hBbW91bnQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBpbm5lZEluRGly
ZWN0aW9uKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xs
SG9yaXpvbnRhbGx5KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5TY3JvbGxWZXJ0aWNhbGx5
KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Ny
b2xsRGlyZWN0aW9uKSA9IDA7CisKKyAgICAvLyBSZXR1cm4gdGhlIGFic29sdXRlIHNjcm9sbCBw
b3NpdGlvbiwgbm90IHJlbGF0aXZlIHRvIHRoZSBzY3JvbGwgb3JpZ2luLgorICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgYWJzb2x1dGVTY3JvbGxQb3NpdGlvbigpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWlu
dHMoY29uc3QgRmxvYXRTaXplJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFNuYXBSdWJi
ZXJiYW5kVGltZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BTbmFwUnViYmVyYmFuZFRp
bWVyKCkgPSAwOworCisgICAgLy8gSWYgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGlzIHdp
dGhpbiB0aGUgb3ZlcmhhbmcgYXJlYSwgdGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlCisgICAgLy8g
dGhlIHBhZ2UgdG8gc2Nyb2xsIHRvIHRoZSBuZWFyZXN0IGJvdW5kYXJ5IHBvaW50LgorICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSA9IDA7
Cit9OworCitjbGFzcyBTY3JvbGxDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTY3JvbGxDb250cm9sbGVyKTsKKworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbENvbnRy
b2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCopOworCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIHZvaWQgc25hcFJ1YmJlckJhbmRU
aW1lckZpcmVkKCk7CisKKyAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7CisgICAgdm9p
ZCBzbmFwUnViYmVyQmFuZCgpOworCisgICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9u
dGFsRGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworCisgICAgU2Nyb2xsQ29u
dHJvbGxlckNsaWVudCogbV9jbGllbnQ7CisKKyAgICBib29sIG1faW5TY3JvbGxHZXN0dXJlOwor
ICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3M7CisgICAgYm9vbCBtX2lnbm9yZU1v
bWVudHVtU2Nyb2xsczsKKyAgICAKKyAgICBDRlRpbWVJbnRlcnZhbCBtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcDsKKyAgICBGbG9hdFNpemUgbV9vdmVyZmxvd1Njcm9sbERlbHRhOworICAg
IEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKKyAgICBGbG9hdFNpemUgbV9tb21lbnR1
bVZlbG9jaXR5OworCisgICAgLy8gUnViYmVyIGJhbmQgc3RhdGUuCisgICAgQ0ZUaW1lSW50ZXJ2
YWwgbV9zdGFydFRpbWU7CisgICAgRmxvYXRTaXplIG1fc3RhcnRTdHJldGNoOworICAgIEZsb2F0
UG9pbnQgbV9vcmlnT3JpZ2luOworICAgIEZsb2F0U2l6ZSBtX29yaWdWZWxvY2l0eTsKKworICAg
IGJvb2wgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisKKyNlbmRpZiAv
LyBTY3JvbGxDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9TY3JvbGxDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbENvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDYxMDY5YjFlN2UyMmY1NzcwMmEzNzE5Yjhl
MzcxOWRiOTYyOWIyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9TY3JvbGxDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNDA2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxl
ci5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxz
eXMvdGltZS5oPgorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorCitzdGF0aWMgTlNUaW1l
SW50ZXJ2YWwgc3lzdGVtVXB0aW1lKCkKK3sKKyAgICBpZiAoW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN5c3RlbVVwdGltZSldKQorICAg
ICAgICByZXR1cm4gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOwor
CisgICAgLy8gR2V0IGhvdyBsb25nIHN5c3RlbSBoYXMgYmVlbiB1cC4gRm91bmQgYnkgbG9va2lu
ZyBnZXR0aW5nICJib290dGltZSIgZnJvbSB0aGUga2VybmVsLgorICAgIHN0YXRpYyBzdHJ1Y3Qg
dGltZXZhbCBib290dGltZSA9IHswLCAwfTsKKyAgICBpZiAoIWJvb3R0aW1lLnR2X3NlYykgewor
ICAgICAgICBpbnQgbWliWzJdID0ge0NUTF9LRVJOLCBLRVJOX0JPT1RUSU1FfTsKKyAgICAgICAg
c2l6ZV90IHNpemUgPSBzaXplb2YoYm9vdHRpbWUpOworICAgICAgICBpZiAoLTEgPT0gc3lzY3Rs
KG1pYiwgMiwgJmJvb3R0aW1lLCAmc2l6ZSwgMCwgMCkpCisgICAgICAgICAgICBib290dGltZS50
dl9zZWMgPSAwOworICAgIH0KKyAgICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgICAgaWYgKGJvb3R0
aW1lLnR2X3NlYyAmJiAtMSAhPSBnZXR0aW1lb2ZkYXkoJm5vdywgMCkpIHsKKyAgICAgICAgc3Ry
dWN0IHRpbWV2YWwgdXB0aW1lOworICAgICAgICB0aW1lcnN1Yigmbm93LCAmYm9vdHRpbWUsICZ1
cHRpbWUpOworICAgICAgICBOU1RpbWVJbnRlcnZhbCByZXN1bHQgPSB1cHRpbWUudHZfc2VjICsg
KHVwdGltZS50dl91c2VjIC8gMUUrNik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQgPSAwLjEwZjsKK3N0YXRpYyBjb25z
dCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7CitzdGF0aWMg
Y29uc3QgZmxvYXQgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9
IDEwOworCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRp
YWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZlbG9jaXR5LCBmbG9hdCBlbGFwc2VkVGltZSkKK3sK
KyAgICByZXR1cm4gd2tOU0VsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShpbml0aWFsUG9zaXRpb24s
IGluaXRpYWxWZWxvY2l0eSwgZWxhcHNlZFRpbWUpOworfQorCitzdGF0aWMgZmxvYXQgZWxhc3Rp
Y0RlbHRhRm9yUmVib3VuZERlbHRhKGZsb2F0IGRlbHRhKQoreworICAgIHJldHVybiB3a05TRWxh
c3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGRlbHRhKTsKK30KKworc3RhdGljIGZsb2F0IHJlYm91
bmREZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKK3sKKyAgICByZXR1cm4gd2tOU1Jl
Ym91bmREZWx0YUZvckVsYXN0aWNEZWx0YShkZWx0YSk7Cit9CisKK3N0YXRpYyBmbG9hdCBzY3Jv
bGxXaGVlbE11bHRpcGxpZXIoKQoreworICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7
CisgICAgaWYgKG11bHRpcGxpZXIgPCAwKSB7CisgICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hl
ZWxNdWx0aXBsaWVyIl07CisgICAgICAgIGlmIChtdWx0aXBsaWVyIDw9IDApCisgICAgICAgICAg
ICBtdWx0aXBsaWVyID0gMTsKKyAgICB9CisgICAgcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK1Nj
cm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCog
Y2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pblNjcm9sbEdlc3R1cmUo
ZmFsc2UpCisgICAgLCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyhmYWxzZSkKKyAgICAsIG1f
aWdub3JlTW9tZW50dW1TY3JvbGxzKGZhbHNlKQorICAgICwgbV9sYXN0TW9tZW50dW1TY3JvbGxU
aW1lc3RhbXAoMCkKKyAgICAsIG1fc3RhcnRUaW1lKDApCisgICAgLCBtX3NuYXBSdWJiZXJiYW5k
VGltZXJJc0FjdGl2ZShmYWxzZSkKK3sKK30KKworYm9vbCBTY3JvbGxDb250cm9sbGVyOjpoYW5k
bGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAg
ICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4p
IHsKKyAgICAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHdlIHNob3VsZCBydWJiZXItYmFuZCBhdCBh
bGwuCisgICAgICAgIGlmIChtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKC13
aGVlbEV2ZW50LmRlbHRhWCgpLCAwKSkKKyAgICAgICAgICAgICYmICFzaG91bGRSdWJiZXJCYW5k
SW5Ib3Jpem9udGFsRGlyZWN0aW9uKHdoZWVsRXZlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKKyAgICAgICAgbV9tb21l
bnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNj
cm9sbHMgPSBmYWxzZTsKKyAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSAw
OworICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKworICAgICAgICBJ
bnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOworICAgICAg
ICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVs
dGEoc3RyZXRjaEFtb3VudC53aWR0aCgpKSk7CisgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNl
LnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWln
aHQoKSkpOworICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKwor
ICAgICAgICBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmICh3aGVlbEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VFbmRlZCkgeworICAgICAgICBzbmFwUnViYmVyQmFuZCgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzTW9tZW50dW1TY3JvbGxFdmVudCA9ICh3aGVl
bEV2ZW50Lm1vbWVudHVtUGhhc2UoKSAhPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpOwor
ICAgIGlmIChtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyAmJiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50
IHx8IG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlKSkgeworICAgICAgICBpZiAod2hlZWxF
dmVudC5tb21lbnR1bVBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCkgewor
ICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBmbG9hdCBkZWx0YVggPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKTsKKyAgICBm
bG9hdCBkZWx0YVkgPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisKKyAgICAvLyBS
ZXNldCBvdmVyZmxvdyB2YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92ZSBkZWx0
YSBhdCB2YXJpb3VzIHBvaW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCisgICAgbV9vdmVy
Zmxvd1Njcm9sbERlbHRhID0gRmxvYXRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0Y2hBbW91
bnQgPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOworICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3Ry
ZXRjaGVkID0gc3RyZXRjaEFtb3VudC5oZWlnaHQoKTsKKyAgICBib29sIGlzSG9yaXpvbnRhbGx5
U3RyZXRjaGVkID0gc3RyZXRjaEFtb3VudC53aWR0aCgpOworCisgICAgZmxvYXQgZXZlbnRDb2Fs
ZXNjZWREZWx0YVg7CisgICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVk7CisKKyAgICBpZiAo
aXNWZXJ0aWNhbGx5U3RyZXRjaGVkIHx8IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7CisgICAg
ICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9s
bGluZ0RlbHRhWCgpOworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50
LnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
dmVudENvYWxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOworICAgICAgICBldmVu
dENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOworICAgIH0KKworICAgIGRl
bHRhWCArPSBldmVudENvYWxlc2NlZERlbHRhWDsKKyAgICBkZWx0YVkgKz0gZXZlbnRDb2FsZXNj
ZWREZWx0YVk7CisKKyAgICAvLyBTbGlnaHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkg
YnkgYXBwbHlpbmcgdGhlID0gY2FzZSB0byBkZWx0YVkKKyAgICBpZiAoZmFic2YoZGVsdGFZKSA+
PSBmYWJzZihkZWx0YVgpKQorICAgICAgICBkZWx0YVggPSAwOworICAgIGVsc2UKKyAgICAgICAg
ZGVsdGFZID0gMDsKKworICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZhbHNlOworCisgICAgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSA9IHdoZWVsRXZlbnQubW9tZW50dW1Q
aGFzZSgpOworCisgICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0
aGVuIGRvIHNvbWUgc2V0dXAuCisgICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAm
JiAobW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuIHx8IG1vbWVu
dHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkKSkKKyAgICAgICAgbV9t
b21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSB0cnVlOworCisgICAgQ0ZUaW1lSW50ZXJ2YWwgdGlt
ZURlbHRhID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGlt
ZXN0YW1wOworICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcykgeworICAgICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYg
dGltZURlbHRhID4gMCAmJiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0
KSB7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsZXNj
ZWREZWx0YVggLyAoZmxvYXQpdGltZURlbHRhKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxv
Y2l0eS5zZXRIZWlnaHQoZXZlbnRDb2FsZXNjZWREZWx0YVkgLyAoZmxvYXQpdGltZURlbHRhKTsK
KyAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50
aW1lc3RhbXAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVudHVt
U2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgICAgIG1f
bW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGlzVmVydGljYWxseVN0cmV0Y2hlZCkgeworICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxs
eVN0cmV0Y2hlZCAmJiBtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKGRlbHRh
WCwgMCkpKSB7CisgICAgICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0
aWNhbC4KKyAgICAgICAgICAgICAgICBpZiAoZGVsdGFZICYmIChmYWJzZihkZWx0YVggLyBkZWx0
YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQorICAgICAgICAgICAg
ICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRh
WCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93
U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRh
WCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSAr
IGRlbHRhWCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNIb3Jpem9udGFs
bHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgaG9y
aXpvbnRhbC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxv
YXRTaXplKDAsIGRlbHRhWSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAmJiAoZmFi
c2YoZGVsdGFZIC8gZGVsdGFYKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlv
KSkKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChmYWJzZihkZWx0YVkpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3Jl
U3RyZXRjaCkgeworICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0
SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7CisgICAgICAg
ICAgICAgICAgICAgIGRlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Nj
cm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIE5vdCBzdHJldGNoaW5nIGF0IGFsbCB5ZXQuCisgICAgICAg
ICAgICBpZiAobV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0U2l6ZShkZWx0YVgsIGRl
bHRhWSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVs
dGFYKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJh
bmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVs
dGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAw
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgo
KSArIGRlbHRhWCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNob3VsZFN0
cmV0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGRlbHRhWCB8fCBkZWx0YVkpIHsKKyAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1Zl
cnRpY2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAgICAg
ICAgICBpZiAoZGVsdGFZKSB7CisgICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVs
TXVsdGlwbGllcigpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxC
eShGbG9hdFNpemUoMCwgZGVsdGFZKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZGVsdGFYKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGll
cigpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeShGbG9hdFNp
emUoZGVsdGFYLCAwKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIW1fY2xpZW50LT5hbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyh3aGVlbEV2ZW50
KSkgeworICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgZXZlbnRD
b2FsZXNjZWREZWx0YVggPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChkZWx0YVggJiYgIWlz
SG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmICFtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxv
YXRTaXplKGRlbHRhWCwgMCkpKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdo
ZWVsTXVsdGlwbGllcigpOworCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNj
cm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKGRlbHRhWCwgMCkp
OworICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghbV9jbGllbnQtPmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkg
eworICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgZXZlbnRDb2Fs
ZXNjZWREZWx0YVkgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChkZWx0YVkgJiYgIWlzVmVy
dGljYWxseVN0cmV0Y2hlZCAmJiAhbV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0U2l6
ZSgwLCBkZWx0YVkpKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11
bHRpcGxpZXIoKTsKKworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxC
eVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsKKyAg
ICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJ
bnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOworCisgICAg
ICAgICAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoKG1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoZXZlbnRDb2FsZXNj
ZWREZWx0YVgsIGV2ZW50Q29hbGVzY2VkRGVsdGFZKSkgfHwgKGZhYnNmKGV2ZW50Q29hbGVzY2Vk
RGVsdGFYKSArIGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVNb21l
bnR1bVNjcm9sbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xs
SW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9zdHJl
dGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRl
bHRhWCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJl
dGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0YVkpOworCisgICAgICAgICAgICBGbG9hdFNp
emUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRj
aFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRh
KG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOworCisgICAgICAgICAgICBtX2NsaWVu
dC0+aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhkYW1wZWRE
ZWx0YSAtIHN0cmV0Y2hBbW91bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fbW9t
ZW50dW1TY3JvbGxJblByb2dyZXNzICYmIG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VFbmRlZCkgeworICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZh
bHNlOworICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAgICBt
X2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkK
K3sKKyAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSAr
IDAuNWYpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2Fy
ZFplcm8oZmxvYXQgbnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsK
KyAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAgICBudW0gPSBy
b3VuZGVkTnVtOworCisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOworfQorCit2b2lk
IFNjcm9sbENvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpCit7CisgICAgaWYg
KCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykg
eworICAgICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZh
bFNpbmNlUmVmZXJlbmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsKKworICAgICAgICBpZiAobV9zdGFy
dFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0g
bV9jbGllbnQtPnN0cmV0Y2hBbW91bnQoKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRj
aCA9PSBGbG9hdFNpemUoKSkgeworICAgICAgICAgICAgICAgIHN0b3BTbmFwUnViYmVyYmFuZFRp
bWVyKCk7CisKKyAgICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6
ZSgpOworICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBt
X3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdp
biA9IEZsb2F0UG9pbnQoKTsKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0
U2l6ZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbV9vcmlnT3JpZ2luID0gbV9jbGllbnQtPmFic29sdXRlU2Nyb2xsUG9zaXRpb24oKSAt
IG1fc3RhcnRTdHJldGNoOworICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVt
VmVsb2NpdHk7CisKKyAgICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBw
cmVmZXIgdmVydGljYWwgcnViYmVyYmFuZGluZworICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3Jp
Z1ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKKyAg
ICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKKworICAgICAgICAgICAg
Ly8gRG9uJ3QgcnViYmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRv
IHNjcm9sbCBob3Jpem9udGFsbHkKKyAgICAgICAgICAgIGlmICghbV9jbGllbnQtPmNhblNjcm9s
bEhvcml6b250YWxseSgpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRo
KDApOworCisgICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlmIGl0
J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5CisgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50LT5jYW5TY3JvbGxWZXJ0aWNhbGx5KCkpCisgICAgICAgICAgICAgICAgbV9vcmlnVmVs
b2NpdHkuc2V0SGVpZ2h0KDApOworICAgICAgICB9CisKKyAgICAgICAgRmxvYXRQb2ludCBkZWx0
YShyb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YSht
X3N0YXJ0U3RyZXRjaC53aWR0aCgpLCAtbV9vcmlnVmVsb2NpdHkud2lkdGgoKSwgKGZsb2F0KXRp
bWVEZWx0YSkpLAorICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFz
dGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdWZWxv
Y2l0eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKKworICAgICAgICBpZiAoZmFicyhk
ZWx0YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKKyAgICAgICAgICAgIG1f
Y2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZs
b2F0U2l6ZShkZWx0YS54KCksIGRlbHRhLnkoKSkgLSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgp
KTsKKworICAgICAgICAgICAgRmxvYXRTaXplIG5ld1N0cmV0Y2ggPSBtX2NsaWVudC0+c3RyZXRj
aEFtb3VudCgpOworCisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChy
ZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC53aWR0aCgpKSk7CisgICAgICAg
ICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3Rp
Y0RlbHRhKG5ld1N0cmV0Y2guaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fY2xpZW50LT5hZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKTsK
KworICAgICAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKKyAgICAgICAgICAgIG1f
c3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX3N0YXJ0VGlt
ZSA9IDA7CisgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOworICAgICAg
ICAgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgbV9vcmlnVmVs
b2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1f
c3RhcnRUaW1lID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdOworICAg
ICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOworICAgIH0KK30KKworYm9vbCBTY3Jv
bGxDb250cm9sbGVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1faW5TY3JvbGxHZXN0dXJlICYmICFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAhbV9z
bmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiAhbV9jbGllbnQtPnN0cmV0Y2hBbW91bnQoKS5pc1plcm8oKTsKK30KKwordm9pZCBT
Y3JvbGxDb250cm9sbGVyOjpzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpCit7CisgICAgbV9jbGll
bnQtPnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7CisgICAgbV9zbmFwUnViYmVyYmFuZFRpbWVy
SXNBY3RpdmUgPSBmYWxzZTsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVy
QmFuZCgpCit7CisgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gc3lzdGVtVXB0aW1lKCkg
LSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVv
dXQpCisgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgbV9p
blNjcm9sbEdlc3R1cmUgPSBmYWxzZTsKKworICAgIGlmIChtX3NuYXBSdWJiZXJiYW5kVGltZXJJ
c0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRp
bWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07CisgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9h
dFNpemUoKTsKKyAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgbV9vcmlnVmVs
b2NpdHkgPSBGbG9hdFNpemUoKTsKKworICAgIG1fY2xpZW50LT5zdGFydFNuYXBSdWJiZXJiYW5k
VGltZXIoKTsKKyAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSA9IHRydWU7Cit9CisK
K2Jvb2wgU2Nyb2xsQ29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVj
dGlvbihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKHdo
ZWVsRXZlbnQuZGVsdGFYKCkgPiAwKQorICAgICAgICByZXR1cm4gbV9jbGllbnQtPnNob3VsZFJ1
YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxMZWZ0KTsKKyAgICBpZiAod2hlZWxFdmVudC5kZWx0
YVgoKSA8IDApCisgICAgICAgIHJldHVybiBtX2NsaWVudC0+c2hvdWxkUnViYmVyQmFuZEluRGly
ZWN0aW9uKFNjcm9sbFJpZ2h0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>