<?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>22738</bug_id>
          
          <creation_ts>2008-12-08 11:05:13 -0800</creation_ts>
          <short_desc>Get rid of animation start, end and iteration timers</short_desc>
          <delta_ts>2008-12-11 08:25:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101835</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-12-08 11:05:13 -0800</bug_when>
    <thetext>Today, each animation or transition has a timer which fires 2 or more times per animation. The start timer always fires when the delay time is up. This is true even with a 0 delay - the timer fires as soon as possible. An end timer always fires as well when the duration is up, unless it is a repeating animation, in which case the timer fires after each iteration. 

These timers are used not only to send the animation events as needed, but they update the state machine as well. But they are really unnecessary because the AnimationController is already running a timer to do the animations themselves. So this timer can serve the purpose of handling state machine changes and event generation.

This will not only be more efficient (one timer per document, rather than one timer per animation), but it will make it easier to deal with other issues on my plate, such as synchronizing multiple animations and making sure the end animation callback comes at the correct instant rather than several hundred ms later, which is sometimes the case today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101841</commentid>
    <comment_count>1</comment_count>
      <attachid>25848</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-12-08 12:00:28 -0800</bug_when>
    <thetext>Created attachment 25848
Patch to fix bug

        Fixed https://bugs.webkit.org/show_bug.cgi?id=22738

        This gets rid of the per-animation timers which were used when an animation
        started, ended and looped. Their job is now done by the main AnimationController&apos;s
        timer. It is now set to fire as needed. For instance, if there is a delay, it will
        fire after the delay time and then every 30ms to run the animation. The start, loop
        and end events are generated as needed during the firing of this timer.

        I had to add one more bit of code. When animation timers used to fire the animation events.
        This would always happen from the RunLoop, so any style changes that happened in the
        event handler would get picked up on the next updateRendering() call. But now the start
        event is generated during the styleIsAvailable() call, which is in the middle of the 
        updateRendering() cycle. And calling an event handler in the middle of updateRendering()
        is not allowed and causes style changes to get missed. We already have a mechanism in
        AnimationController to defer updateRendering() calls. So I added logic to defer all
        event handling to there. Now, I put any request for event handling into a list and ask
        for a deferred updateRendering() call. When that deferred timer fires, I go through that
        list, send all the events and then call updateRendering().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102152</commentid>
    <comment_count>2</comment_count>
      <attachid>25848</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-12-10 14:39:14 -0800</bug_when>
    <thetext>Comment on attachment 25848
Patch to fix bug

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102234</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-12-11 08:25:02 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/page/animation/AnimationBase.cpp
Sending        WebCore/page/animation/AnimationBase.h
Sending        WebCore/page/animation/AnimationController.cpp
Sending        WebCore/page/animation/AnimationController.h
Sending        WebCore/page/animation/CompositeAnimation.cpp
Sending        WebCore/page/animation/CompositeAnimation.h
Sending        WebCore/page/animation/ImplicitAnimation.cpp
Sending        WebCore/page/animation/ImplicitAnimation.h
Sending        WebCore/page/animation/KeyframeAnimation.cpp
Sending        WebCore/page/animation/KeyframeAnimation.h
Transmitting file data ...........
Committed revision 39211.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25848</attachid>
            <date>2008-12-08 12:00:28 -0800</date>
            <delta_ts>2008-12-10 14:39:14 -0800</delta_ts>
            <desc>Patch to fix bug</desc>
            <filename>22738.patch</filename>
            <type>text/plain</type>
            <size>36275</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTA5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMDgtMTItMDggIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjczOAorCisgICAg
ICAgIFRoaXMgZ2V0cyByaWQgb2YgdGhlIHBlci1hbmltYXRpb24gdGltZXJzIHdoaWNoIHdlcmUg
dXNlZCB3aGVuIGFuIGFuaW1hdGlvbgorICAgICAgICBzdGFydGVkLCBlbmRlZCBhbmQgbG9vcGVk
LiBUaGVpciBqb2IgaXMgbm93IGRvbmUgYnkgdGhlIG1haW4gQW5pbWF0aW9uQ29udHJvbGxlcidz
CisgICAgICAgIHRpbWVyLiBJdCBpcyBub3cgc2V0IHRvIGZpcmUgYXMgbmVlZGVkLiBGb3IgaW5z
dGFuY2UsIGlmIHRoZXJlIGlzIGEgZGVsYXksIGl0IHdpbGwKKyAgICAgICAgZmlyZSBhZnRlciB0
aGUgZGVsYXkgdGltZSBhbmQgdGhlbiBldmVyeSAzMG1zIHRvIHJ1biB0aGUgYW5pbWF0aW9uLiBU
aGUgc3RhcnQsIGxvb3AKKyAgICAgICAgYW5kIGVuZCBldmVudHMgYXJlIGdlbmVyYXRlZCBhcyBu
ZWVkZWQgZHVyaW5nIHRoZSBmaXJpbmcgb2YgdGhpcyB0aW1lci4KKworICAgICAgICBJIGhhZCB0
byBhZGQgb25lIG1vcmUgYml0IG9mIGNvZGUuIFdoZW4gYW5pbWF0aW9uIHRpbWVycyB1c2VkIHRv
IGZpcmUgdGhlIGFuaW1hdGlvbiBldmVudHMuCisgICAgICAgIFRoaXMgd291bGQgYWx3YXlzIGhh
cHBlbiBmcm9tIHRoZSBSdW5Mb29wLCBzbyBhbnkgc3R5bGUgY2hhbmdlcyB0aGF0IGhhcHBlbmVk
IGluIHRoZQorICAgICAgICBldmVudCBoYW5kbGVyIHdvdWxkIGdldCBwaWNrZWQgdXAgb24gdGhl
IG5leHQgdXBkYXRlUmVuZGVyaW5nKCkgY2FsbC4gQnV0IG5vdyB0aGUgc3RhcnQKKyAgICAgICAg
ZXZlbnQgaXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgc3R5bGVJc0F2YWlsYWJsZSgpIGNhbGwsIHdo
aWNoIGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIAorICAgICAgICB1cGRhdGVSZW5kZXJpbmcoKSBj
eWNsZS4gQW5kIGNhbGxpbmcgYW4gZXZlbnQgaGFuZGxlciBpbiB0aGUgbWlkZGxlIG9mIHVwZGF0
ZVJlbmRlcmluZygpCisgICAgICAgIGlzIG5vdCBhbGxvd2VkIGFuZCBjYXVzZXMgc3R5bGUgY2hh
bmdlcyB0byBnZXQgbWlzc2VkLiBXZSBhbHJlYWR5IGhhdmUgYSBtZWNoYW5pc20gaW4KKyAgICAg
ICAgQW5pbWF0aW9uQ29udHJvbGxlciB0byBkZWZlciB1cGRhdGVSZW5kZXJpbmcoKSBjYWxscy4g
U28gSSBhZGRlZCBsb2dpYyB0byBkZWZlciBhbGwKKyAgICAgICAgZXZlbnQgaGFuZGxpbmcgdG8g
dGhlcmUuIE5vdywgSSBwdXQgYW55IHJlcXVlc3QgZm9yIGV2ZW50IGhhbmRsaW5nIGludG8gYSBs
aXN0IGFuZCBhc2sKKyAgICAgICAgZm9yIGEgZGVmZXJyZWQgdXBkYXRlUmVuZGVyaW5nKCkgY2Fs
bC4gV2hlbiB0aGF0IGRlZmVycmVkIHRpbWVyIGZpcmVzLCBJIGdvIHRocm91Z2ggdGhhdAorICAg
ICAgICBsaXN0LCBzZW5kIGFsbCB0aGUgZXZlbnRzIGFuZCB0aGVuIGNhbGwgdXBkYXRlUmVuZGVy
aW5nKCkuCisKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkFuaW1hdGlvbkJhc2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjp3aWxsTmVlZFNlcnZpY2UpOgorICAgICAgICAo
V2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6Z29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUpOgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUmVuZGVyaW5nRGlzcGF0
Y2hlckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjphZGRFdmVudFRvRGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QW5p
bWF0aW9uQ29udHJvbGxlcjo6YWRkRXZlbnRUb0Rpc3BhdGNoKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1h
dGlvblByaXZhdGU6OnVwZGF0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvblByaXZhdGU6OndpbGxOZWVkU2VydmljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OndpbGxOZWVkU2VydmljZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZvclByb3Bl
cnR5KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoKKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bXBsaWNpdEFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1w
bGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQpOgorICAgICAgICAqIHBhZ2UvYW5p
bWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246
OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmlt
YXRpb25FdmVudCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpzZXRVbmFuaW1hdGVkU3R5
bGUpOgorCiAyMDA4LTEyLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEtpbHplci4KSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gMzkwNDkpCisrKyBXZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMs
NiBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuCiAgICAgcmV0dXJu
IGJlemllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKIH0KIAotdm9pZCBBbmlt
YXRpb25UaW1lckNhbGxiYWNrOjp0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4q
KQotewotICAgIG1fYW5pbS0+YW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKG1fZXZlbnRUeXBl
LCBtX2VsYXBzZWRUaW1lKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgYmxlbmRGdW5jKGNvbnN0
IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykK
IHsgIAogICAgIHJldHVybiBpbnQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwpAQCAt
Mzg0LDEyICszNzksMTcgQEAgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmlt
YQogICAgICwgbV93YWl0ZWRGb3JSZXNwb25zZShmYWxzZSkKICAgICAsIG1fc3RhcnRUaW1lKDAp
CiAgICAgLCBtX3BhdXNlVGltZSgtMSkKKyAgICAsIG1fcmVxdWVzdGVkU3RhcnRUaW1lKDApCiAg
ICAgLCBtX29iamVjdChyZW5kZXJlcikKLSAgICAsIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjayhj
b25zdF9jYXN0PEFuaW1hdGlvbkJhc2UqPih0aGlzKSkKICAgICAsIG1fYW5pbWF0aW9uKGNvbnN0
X2Nhc3Q8QW5pbWF0aW9uKj4odHJhbnNpdGlvbikpCiAgICAgLCBtX2NvbXBBbmltKGNvbXBBbmlt
KQogICAgICwgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZChmYWxzZSkKKyAgICAsIG1fbmV4
dEl0ZXJhdGlvbkR1cmF0aW9uKC0xKQogeworICAgIC8vIENvbXB1dGUgdGhlIHRvdGFsIGR1cmF0
aW9uCisgICAgbV90b3RhbER1cmF0aW9uID0gLTE7CisgICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVy
YXRpb25Db3VudCgpID4gMCkKKyAgICAgICAgbV90b3RhbER1cmF0aW9uID0gbV9hbmltYXRpb24t
PmR1cmF0aW9uKCkgKiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKTsKIH0KIAogQW5pbWF0
aW9uQmFzZTo6fkFuaW1hdGlvbkJhc2UoKQpAQCAtNDk4LDE4ICs0OTgsMjEgQEAgdm9pZCBBbmlt
YXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQQogICAgICAgICBtX2FuaW1TdGF0ZSA9IEFu
aW1hdGlvblN0YXRlTmV3OwogICAgICAgICBtX3N0YXJ0VGltZSA9IDA7CiAgICAgICAgIG1fcGF1
c2VUaW1lID0gLTE7CisgICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gMDsKKyAgICAgICAg
bV9uZXh0SXRlcmF0aW9uRHVyYXRpb24gPSAtMTsKICAgICAgICAgbV93YWl0ZWRGb3JSZXNwb25z
ZSA9IGZhbHNlOwogICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRSZXN0YXJ0QW5p
bWF0aW9uKSB7Ci0gICAgICAgIGNhbmNlbFRpbWVycygpOwogICAgICAgICBpZiAobV9hbmltU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGVTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKICAgICAgICAgICAg
IG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShmYWxzZSk7CiAgICAgICAg
IG1fYW5pbVN0YXRlID0gQW5pbWF0aW9uU3RhdGVOZXc7CiAgICAgICAgIG1fc3RhcnRUaW1lID0g
MDsKICAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKKyAgICAgICAgbV9yZXF1ZXN0ZWRTdGFydFRp
bWUgPSAwOworICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlvbiA9IC0xOwogICAgICAgICBl
bmRBbmltYXRpb24oZmFsc2UpOwogCiAgICAgICAgIGlmICghcGF1c2VkKCkpCkBAIC01MTgsNyAr
NTIxLDYgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQQogICAgIH0K
IAogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0RW5kQW5pbWF0aW9uKSB7Ci0g
ICAgICAgIGNhbmNlbFRpbWVycygpOwogICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gQW5pbWF0
aW9uU3RhdGVTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKICAgICAgICAgICAgIG1fY29tcEFuaW0t
PnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShmYWxzZSk7CiAgICAgICAgIG1fYW5pbVN0YXRl
ID0gQW5pbWF0aW9uU3RhdGVEb25lOwpAQCAtNTQ5LDEwICs1NTEsOSBAQCB2b2lkIEFuaW1hdGlv
bkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGVO
ZXc6CiAgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dFN0YXJ0
QW5pbWF0aW9uIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRQbGF5U3RhdGVSdW5ubmlu
ZyB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0UGxheVN0YXRlUGF1c2VkKTsKICAgICAg
ICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0U3RhcnRBbmltYXRpb24gfHwg
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dFBsYXlTdGF0ZVJ1bm5uaW5nKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gU2V0IHRoZSBzdGFydCB0aW1lciB0byB0aGUgaW5pdGlhbCBkZWxheSAoMCBp
ZiBubyBkZWxheSkKICAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOwog
ICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gQW5pbWF0aW9uU3RhdGVTdGFydFdhaXRUaW1l
cjsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suc3RhcnRUaW1lciht
X2FuaW1hdGlvbi0+ZGVsYXkoKSwgZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvblN0YXJ0RXZl
bnQsIG1fYW5pbWF0aW9uLT5kZWxheSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlU3RhcnRXYWl0VGltZXI6CkBAIC01NzEs
NyArNTcyLDYgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQQogICAg
ICAgICAgICAgICAgIEFTU0VSVCghcGF1c2VkKCkpOwogICAgICAgICAgICAgICAgIC8vIFdlJ3Jl
IHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1lciB0byBmaXJlIGFuZCB3ZSBnb3QgYSBwYXVzZS4g
Q2FuY2VsIHRoZSB0aW1lciwgcGF1c2UgYW5kIHdhaXQKICAgICAgICAgICAgICAgICBtX3BhdXNl
VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgICAgICAgICAgICAgY2FuY2VsVGltZXJzKCk7CiAg
ICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0ZVBhdXNlZFdhaXRUaW1l
cjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjA1LDggKzYwNSw4IEBA
IHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEEKICAgICAgICAgICAgICAg
ICBpZiAobV9zdGFydFRpbWUgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUg
PSBwYXJhbTsKIAotICAgICAgICAgICAgICAgIC8vIERlY2lkZSB3aGVuIHRoZSBlbmQgb3IgbG9v
cCBldmVudCBuZWVkcyB0byBmaXJlCi0gICAgICAgICAgICAgICAgcHJpbWVFdmVudFRpbWVycygp
OworICAgICAgICAgICAgICAgIC8vIERlY2lkZSB3aGV0aGVyIHRvIGdvIGludG8gbG9vcGluZyBv
ciBlbmRpbmcgc3RhdGUKKyAgICAgICAgICAgICAgICBnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0
ZSgpOwogCiAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4gc3Rh
cnQgdGhlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAgIHNldENoYW5nZWQobV9vYmplY3QtPmVs
ZW1lbnQoKSk7CkBAIC02MjYsMTEgKzYyNiwxMiBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0
ZVN0YXRlTWFjaGluZShBCiAgICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOwogICAg
ICAgICAgICAgICAgIC8vIExvb3AgdGltZXIgZmlyZWQsIGxvb3AgYWdhaW4gb3IgZW5kLgogICAg
ICAgICAgICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uKHBhcmFtKTsKLSAgICAgICAgICAgICAg
ICBwcmltZUV2ZW50VGltZXJzKCk7CisKKyAgICAgICAgICAgICAgICAvLyBEZWNpZGUgd2hldGhl
ciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0YXRlCisgICAgICAgICAgICAgICAgZ29J
bnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmlt
YXRpb24gYW5kIHdhaXQKICAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1l
KCk7Ci0gICAgICAgICAgICAgICAgY2FuY2VsVGltZXJzKCk7CiAgICAgICAgICAgICAgICAgZW5k
QW5pbWF0aW9uKGZhbHNlKTsKICAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlv
blN0YXRlUGF1c2VkUnVuOwogICAgICAgICAgICAgfQpAQCAtNjU1LDcgKzY1Niw2IEBAIHZvaWQg
QW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEEKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVubmluZy4gQ2FuY2Vs
IHRoZSBhbmltYXRpb24gYW5kIHdhaXQKICAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGN1
cnJlbnRUaW1lKCk7Ci0gICAgICAgICAgICAgICAgY2FuY2VsVGltZXJzKCk7CiAgICAgICAgICAg
ICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsKICAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9
IEFuaW1hdGlvblN0YXRlUGF1c2VkUnVuOwogICAgICAgICAgICAgfQpAQCAtNzAzLDIxICs3MDMs
NDQgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQQogICAgIH0KIH0K
ICAgICAKLXZvaWQgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCit2b2lkIEFu
aW1hdGlvbkJhc2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpCiB7Ci0gICAgLy8gV2Ug
aGF2ZSB0byBtYWtlIHN1cmUgdG8ga2VlcCBhIHJlZiB0byB0aGUgdGhpcyBwb2ludGVyLCBiZWNh
dXNlIGl0IGNvdWxkIGdldCBkZXN0cm95ZWQKLSAgICAvLyBkdXJpbmcgYW4gYW5pbWF0aW9uIGNh
bGxiYWNrIHRoYXQgbWlnaHQgZ2V0IGNhbGxlZC4KLSAgICBSZWZQdHI8QW5pbWF0aW9uQmFzZT4g
cHJvdGVjdG9yKHRoaXMpOworICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgZGVsYXkg
dGltZSB0byBleHBpcmUgYW5kIGl0IGhhcywgZ28gdG8gdGhlIG5leHQgc3RhdGUKKyAgICBpZiAo
bV9hbmltU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGVTdGFydFdhaXRUaW1lciAmJiBtX2FuaW1TdGF0
ZSAhPSBBbmltYXRpb25TdGF0ZUxvb3BpbmcgJiYgbV9hbmltU3RhdGUgIT0gQW5pbWF0aW9uU3Rh
dGVFbmRpbmcpCisgICAgICAgIHJldHVybjsKICAgICAKLSAgICBBU1NFUlQobV9vYmplY3QtPmRv
Y3VtZW50KCkgJiYgIW1fb2JqZWN0LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKTsKLQotICAg
IC8vIEZJWE1FOiB1c2UgYW4gZW51bQotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQpCi0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0U3RhcnRUaW1lckZpcmVkLCBlbGFwc2VkVGltZSk7Ci0gICAgZWxz
ZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25F
dmVudCkKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXRMb29w
VGltZXJGaXJlZCwgZWxhcHNlZFRpbWUpOwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpIHsKLSAgICAgICAgdXBkYXRlU3RhdGVN
YWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXRFbmRUaW1lckZpcmVkLCBlbGFwc2VkVGltZSk7Cisg
ICAgLy8gQ2hlY2sgZm9yIHN0YXJ0IHRpbWVvdXQKKyAgICBpZiAobV9hbmltU3RhdGUgPT0gQW5p
bWF0aW9uU3RhdGVTdGFydFdhaXRUaW1lcikgeworICAgICAgICBpZiAoY3VycmVudFRpbWUoKSAt
IG1fcmVxdWVzdGVkU3RhcnRUaW1lID49IG1fYW5pbWF0aW9uLT5kZWxheSgpKQorICAgICAgICAg
ICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXRTdGFydFRpbWVyRmlyZWQs
IDApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGRvdWJsZSBlbGFwc2VkRHVy
YXRpb24gPSBjdXJyZW50VGltZSgpIC0gbV9zdGFydFRpbWU7CisgICAgQVNTRVJUKGVsYXBzZWRE
dXJhdGlvbiA+PSAwKTsKKyAgICAKKyAgICAvLyBDaGVjayBmb3IgZW5kIHRpbWVvdXQKKyAgICBp
ZiAobV90b3RhbER1cmF0aW9uID4gMCAmJiBlbGFwc2VkRHVyYXRpb24gPj0gbV90b3RhbER1cmF0
aW9uKSB7CisgICAgICAgIC8vIEZpcmUgYW4gZW5kIGV2ZW50CisgICAgICAgIHVwZGF0ZVN0YXRl
TWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0RW5kVGltZXJGaXJlZCwgbV90b3RhbER1cmF0aW9u
KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIENoZWNrIGZvciBpdGVyYXRpb24gdGlt
ZW91dAorICAgICAgICBpZiAobV9uZXh0SXRlcmF0aW9uRHVyYXRpb24gPCAwKSB7CisgICAgICAg
ICAgICAvLyBIYXNuJ3QgYmVlbiBzZXQgeWV0LCBzZXQgaXQKKyAgICAgICAgICAgIGRvdWJsZSBk
dXJhdGlvbkxlZnQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1cmF0
aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgICAgICBtX25leHRJdGVyYXRp
b25EdXJhdGlvbiA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9uTGVmdDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGVsYXBzZWREdXJhdGlvbiA+PSBtX25leHRJdGVyYXRpb25E
dXJhdGlvbikgeworICAgICAgICAgICAgLy8gU2V0IHRvIHRoZSBuZXh0IGl0ZXJhdGlvbgorICAg
ICAgICAgICAgZG91YmxlIHByZXZpb3VzID0gbV9uZXh0SXRlcmF0aW9uRHVyYXRpb247CisgICAg
ICAgICAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgLSBm
bW9kKGVsYXBzZWREdXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICAg
ICAgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24gPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxl
ZnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlbmQgdGhlIGV2ZW50CisgICAgICAg
ICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dExvb3BUaW1lckZpcmVk
LCBwcmV2aW91cyk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTcyNyw2ICs3NTAsMjIgQEAg
dm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVQbGF5U3RhdGUoYm9vbAogICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUocnVuID8gQW5pbWF0aW9uU3RhdGVJbnB1dFBsYXlTdGF0ZVJ1bm5uaW5nIDog
QW5pbWF0aW9uU3RhdGVJbnB1dFBsYXlTdGF0ZVBhdXNlZCwgLTEpOwogfQogCitkb3VibGUgQW5p
bWF0aW9uQmFzZTo6d2lsbE5lZWRTZXJ2aWNlKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm5zIHRo
ZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gLTEgbWVhbnMgbm8gc2Vy
dmljZSBpcyByZXF1aXJlZC4gMCBtZWFucyAKKyAgICAvLyBzZXJ2aWNlIGlzIHJlcXVpcmVkIG5v
dywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBzZWNvbmRzIGlu
IHRoZSBmdXR1cmUuCisgICAgaWYgKHBhdXNlZCgpIHx8IGlzTmV3KCkpCisgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgCisgICAgaWYgKG1fYW5pbVN0YXRlID09IEFuaW1hdGlvblN0YXRlU3Rh
cnRXYWl0VGltZXIpIHsKKyAgICAgICAgZG91YmxlIHRpbWVGcm9tTm93ID0gbV9hbmltYXRpb24t
PmRlbGF5KCkgLSAoY3VycmVudFRpbWUoKSAtIG1fcmVxdWVzdGVkU3RhcnRUaW1lKTsKKyAgICAg
ICAgcmV0dXJuIChmbG9hdCkgKCh0aW1lRnJvbU5vdyA+IDApID8gdGltZUZyb21Ob3cgOiAwKTsK
KyAgICB9CisgICAgCisgICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBuZWVkIHNlcnZpY2Ug
cmlnaHQgYXdheS4KKyAgICByZXR1cm4gMDsKK30KKwogZG91YmxlIEFuaW1hdGlvbkJhc2U6OnBy
b2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCwgY29uc3QgVGltaW5nRnVuY3Rpb24q
IHRmKSBjb25zdAogewogICAgIGlmIChwcmVBY3RpdmUoKSkKQEAgLTc3MSwzNyArODEwLDMwIEBA
IGRvdWJsZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2MKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIEFuaW1hdGlvbkJhc2U6OnByaW1lRXZlbnRUaW1lcnMoKQordm9pZCBB
bmltYXRpb25CYXNlOjpnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0ZSgpCiB7CiAgICAgLy8gRGVj
aWRlIHdoZW4gdGhlIGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKLSAgICBkb3VibGUg
Y3QgPSBjdXJyZW50VGltZSgpOwotICAgIGNvbnN0IGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBj
dCAtIG1fc3RhcnRUaW1lOwotICAgIEFTU0VSVChlbGFwc2VkRHVyYXRpb24gPj0gMCk7Ci0KICAg
ICBkb3VibGUgdG90YWxEdXJhdGlvbiA9IC0xOwogICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0
aW9uQ291bnQoKSA+IDApCiAgICAgICAgIHRvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwogCisgICAgY29uc3QgZG91
YmxlIGVsYXBzZWREdXJhdGlvbiA9IGN1cnJlbnRUaW1lKCkgLSBtX3N0YXJ0VGltZTsKKyAgICBB
U1NFUlQoZWxhcHNlZER1cmF0aW9uID49IDApOwogICAgIGRvdWJsZSBkdXJhdGlvbkxlZnQgPSAw
OwogICAgIGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9IHRvdGFsRHVyYXRpb247CisKICAgICBp
ZiAodG90YWxEdXJhdGlvbiA8IDAgfHwgZWxhcHNlZER1cmF0aW9uIDwgdG90YWxEdXJhdGlvbikg
ewogICAgICAgICBkdXJhdGlvbkxlZnQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2Qo
ZWxhcHNlZER1cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CiAgICAgICAgIG5leHRJ
dGVyYXRpb25UaW1lID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwogICAgIH0KIAot
ICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIDAgZHVyYXRpb25MZWZ0LCBpZiB3ZSd2
ZSBnb3R0ZW4gdGhlIGV2ZW50IGxhdGUgYW5kIHdlIGFyZSBhbHJlYWR5Ci0gICAgLy8gcGFzdCB0
b3RhbER1cmF0aW9uLiBJbiB0aGlzIGNhc2Ugd2Ugc3RpbGwgZmlyZSBhbiBlbmQgdGltZXIgYmVm
b3JlIHByb2Nlc3NpbmcgdGhlIGVuZC4gCi0gICAgLy8gVGhpcyBkZWZlcnMgdGhlIGNhbGwgdG8g
c2VuZEFuaW1hdGlvbkV2ZW50cyB0byBhdm9pZCByZS1lbnRyYW50IGNhbGxzIHRoYXQgZGVzdHJv
eQotICAgIC8vIHRoZSBSZW5kZXJPYmplY3QsIGFuZCB0aGVyZWZvcmUgfHRoaXN8IGJlZm9yZSB3
ZSdyZSBkb25lIHdpdGggaXQuCiAgICAgaWYgKHRvdGFsRHVyYXRpb24gPCAwIHx8IG5leHRJdGVy
YXRpb25UaW1lIDwgdG90YWxEdXJhdGlvbikgewotICAgICAgICAvLyBXZSBhcmUgbm90IGF0IHRo
ZSBlbmQgeWV0LCBzZW5kIGEgbG9vcCBldmVudAorICAgICAgICAvLyBXZSBhcmUgbm90IGF0IHRo
ZSBlbmQgeWV0CiAgICAgICAgIEFTU0VSVChuZXh0SXRlcmF0aW9uVGltZSA+IDApOwogICAgICAg
ICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlTG9vcGluZzsKLSAgICAgICAgbV9hbmltYXRp
b25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIoZHVyYXRpb25MZWZ0LCBldmVudE5hbWVzKCkud2Vi
a2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQsIG5leHRJdGVyYXRpb25UaW1lKTsKICAgICB9IGVs
c2UgewotICAgICAgICAvLyBXZSBhcmUgYXQgdGhlIGVuZCwgc2VuZCBhbiBlbmQgZXZlbnQKKyAg
ICAgICAgLy8gV2UgYXJlIGF0IHRoZSBlbmQKICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRp
b25TdGF0ZUVuZGluZzsKLSAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLnN0YXJ0VGlt
ZXIoZHVyYXRpb25MZWZ0LCBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQsIG5l
eHRJdGVyYXRpb25UaW1lKTsKICAgICB9CiB9CiAgIApJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmgJKHJldmlzaW9uIDM5MDQ5KQorKysgV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNk
ZWZpbmUgQW5pbWF0aW9uQmFzZV9oCiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKLSNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ1LDYwICs0NCw2IEBAIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRl
clN0eWxlOwogY2xhc3MgVGltaW5nRnVuY3Rpb247CiAKLWNsYXNzIEFuaW1hdGlvblRpbWVyQmFz
ZSB7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uVGltZXJCYXNlKEFuaW1hdGlvbkJhc2UqIGFuaW0p
Ci0gICAgICAgIDogbV90aW1lcih0aGlzLCAmQW5pbWF0aW9uVGltZXJCYXNlOjp0aW1lckZpcmVk
KQotICAgICAgICAsIG1fYW5pbShhbmltKQotICAgIHsKLSAgICAgICAgbV90aW1lci5zdGFydE9u
ZVNob3QoMCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+QW5pbWF0aW9uVGltZXJCYXNlKCkgeyB9
Ci0KLSAgICB2b2lkIHN0YXJ0VGltZXIoZG91YmxlIHRpbWVvdXQgPSAwKQotICAgIHsKLSAgICAg
ICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZW91dCk7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5j
ZWxUaW1lcigpCi0gICAgewotICAgICAgICBtX3RpbWVyLnN0b3AoKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+KikgPSAwOwot
Ci1wcml2YXRlOgotICAgIFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4gbV90aW1lcjsKLQotcHJv
dGVjdGVkOgotICAgIEFuaW1hdGlvbkJhc2UqIG1fYW5pbTsKLX07Ci0KLWNsYXNzIEFuaW1hdGlv
blRpbWVyQ2FsbGJhY2sgOiBwdWJsaWMgQW5pbWF0aW9uVGltZXJCYXNlIHsKLXB1YmxpYzoKLSAg
ICBBbmltYXRpb25UaW1lckNhbGxiYWNrKEFuaW1hdGlvbkJhc2UqIGFuaW0pIAotICAgICAgICA6
IEFuaW1hdGlvblRpbWVyQmFzZShhbmltKQotICAgICAgICAsIG1fZWxhcHNlZFRpbWUoMCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+QW5pbWF0aW9uVGltZXJDYWxsYmFjaygpIHsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uVGltZXJCYXNlPiop
OwotCi0gICAgdm9pZCBzdGFydFRpbWVyKGRvdWJsZSB0aW1lb3V0LCBjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQotICAgIHsKLSAgICAgICAgbV9ldmVu
dFR5cGUgPSBldmVudFR5cGU7Ci0gICAgICAgIG1fZWxhcHNlZFRpbWUgPSBlbGFwc2VkVGltZTsK
LSAgICAgICAgQW5pbWF0aW9uVGltZXJCYXNlOjpzdGFydFRpbWVyKHRpbWVvdXQpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmcgbV9ldmVudFR5cGU7Ci0gICAgZG91YmxlIG1f
ZWxhcHNlZFRpbWU7Ci19OwotCiBjbGFzcyBBbmltYXRpb25CYXNlIDogcHVibGljIFJlZkNvdW50
ZWQ8QW5pbWF0aW9uQmFzZT4gewogICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb25Q
cml2YXRlOwogCkBAIC0xMTIsMTEgKzU3LDYgQEAgcHVibGljOgogICAgIGRvdWJsZSBzdGFydFRp
bWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQogICAgIGRvdWJsZSBkdXJhdGlvbigp
IGNvbnN0OwogCi0gICAgdm9pZCBjYW5jZWxUaW1lcnMoKQotICAgIHsKLSAgICAgICAgbV9hbmlt
YXRpb25UaW1lckNhbGxiYWNrLmNhbmNlbFRpbWVyKCk7Ci0gICAgfQotCiAgICAgLy8gQW5pbWF0
aW9ucyBhbmQgVHJhbnNpdGlvbnMgZ28gdGhyb3VnaCB0aGUgc3RhdGVzIGJlbG93LiBXaGVuIGVu
dGVyaW5nIHRoZSBTVEFSVEVEIHN0YXRlCiAgICAgLy8gdGhlIGFuaW1hdGlvbiBpcyBzdGFydGVk
LiBUaGlzIG1heSBvciBtYXkgbm90IHJlcXVpcmUgZGVmZXJyZWQgcmVzcG9uc2UgZnJvbSB0aGUg
YW5pbWF0b3IuCiAgICAgLy8gSWYgc28sIHdlIHN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGF0
IHJlc3BvbnNlIGlzIHJlY2VpdmVkIChhbmQgaXQgcmV0dXJucyB0aGUgc3RhcnQgdGltZSkuCkBA
IC0xNzgsNyArMTE4LDcgQEAgcHVibGljOgogICAgIC8vICJhbmltYXRpbmciIG1lYW5zIHRoYXQg
c29tZXRoaW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyBhIHRpbWVyIHRvIGtlZXAgZmlyaW5n
CiAgICAgLy8gKGUuZy4gYSBzb2Z0d2FyZSBhbmltYXRpb24pCiAgICAgdm9pZCBzZXRBbmltYXRp
bmcoYm9vbCBpbkFuaW1hdGluZyA9IHRydWUpIHsgbV9pc0FuaW1hdGluZyA9IGluQW5pbWF0aW5n
OyB9Ci0gICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNBbmltYXRpbmc7
IH0KKyAgICBkb3VibGUgd2lsbE5lZWRTZXJ2aWNlKCkgY29uc3Q7CiAKICAgICBkb3VibGUgcHJv
Z3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0LCBjb25zdCBUaW1pbmdGdW5jdGlvbiop
IGNvbnN0OwogCkBAIC0xODcsNyArMTI3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29s
IHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBh
bmltYXRpb25UaW1lckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgdm9pZCBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVk
ZWQoKTsKIAogICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiopIGNvbnN0
OwogCkBAIC0yMjYsNyArMTY2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzdGFy
dEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCByZXNldCkgeyB9CiAKLSAgICB2b2lkIHByaW1lRXZl
bnRUaW1lcnMoKTsKKyAgICB2b2lkIGdvSW50b0VuZGluZ09yTG9vcGluZ1N0YXRlKCk7CiAKICAg
ICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoaW50IHByb3AsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CiAgICAgc3RhdGljIGludCBnZXRQcm9wZXJ0eUF0
SW5kZXgoaW50KTsKQEAgLTI0NCwxMiArMTg0LDEzIEBAIHByb3RlY3RlZDoKICAgICBib29sIG1f
d2FpdGVkRm9yUmVzcG9uc2U7CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwogICAgIGRvdWJsZSBt
X3BhdXNlVGltZTsKKyAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFydFRpbWU7CiAgICAgUmVuZGVy
T2JqZWN0KiBtX29iamVjdDsKIAotICAgIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2sgbV9hbmltYXRp
b25UaW1lckNhbGxiYWNrOwogICAgIFJlZlB0cjxBbmltYXRpb24+IG1fYW5pbWF0aW9uOwogICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogbV9jb21wQW5pbTsKICAgICBib29sIG1fdHJhbnNmb3JtRnVu
Y3Rpb25MaXN0VmFsaWQ7CisgICAgZG91YmxlIG1fdG90YWxEdXJhdGlvbiwgbV9uZXh0SXRlcmF0
aW9uRHVyYXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM5
MDQ5KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKICNpbmNsdWRlICJDU1NQ
YXJzZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJUaW1lci5oIgogCkBAIC00NiwxMCArNDcsMTEgQEAgcHVibGljOgogICAgIGJvb2wg
Y2xlYXIoUmVuZGVyT2JqZWN0Kik7CiAKICAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGlt
ZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+Kik7Ci0gICAgdm9pZCB1cGRhdGVBbmltYXRp
b25UaW1lcigpOworICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXIoYm9vbCBjYWxsU2V0Q2hh
bmdlZCA9IGZhbHNlKTsKIAogICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVk
KFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiopOwogICAgIHZvaWQgc3RhcnRVcGRh
dGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgdm9pZCBhZGRFdmVudFRvRGlzcGF0Y2goUGFz
c1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgZWxhcHNlZFRpbWUpOwogCiAgICAgYm9vbCBoYXNB
bmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fY29tcG9zaXRlQW5pbWF0aW9ucy5pc0VtcHR5
KCk7IH0KIApAQCAtNzAsNiArNzIsMTYgQEAgcHJpdmF0ZToKICAgICBUaW1lcjxBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZT4gbV9hbmltYXRpb25UaW1lcjsKICAgICBUaW1lcjxBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZT4gbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyOwogICAgIEZyYW1l
KiBtX2ZyYW1lOworICAgIAorICAgIGNsYXNzIEV2ZW50VG9EaXNwYXRjaCB7CisgICAgcHVibGlj
OgorICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudDsKKyAgICAgICAgQXRvbWljU3RyaW5n
IGV2ZW50VHlwZTsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIGRvdWJsZSBlbGFwc2Vk
VGltZTsKKyAgICB9OworICAgIAorICAgIFZlY3RvcjxFdmVudFRvRGlzcGF0Y2g+IG1fZXZlbnRz
VG9EaXNwYXRjaDsKIH07CiAKIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZShGcmFtZSogZnJhbWUpCkBAIC0xMTMsMjggKzEyNSw2NyBAQCB2b2lk
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdHlsZUF2CiAgICAgICAgIGl0LT5zZWNvbmQt
PnN0eWxlQXZhaWxhYmxlKCk7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnVwZGF0ZUFuaW1hdGlvblRpbWVyKCkKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnVwZGF0ZUFuaW1hdGlvblRpbWVyKGJvb2wgY2FsbFNldENoYW5nZWQvKiA9IGZhbHNlKi8pCiB7
Ci0gICAgYm9vbCBpc0FuaW1hdGluZyA9IGZhbHNlOworICAgIGRvdWJsZSBuZWVkc1NlcnZpY2Ug
PSAtMTsKKyAgICBib29sIGNhbGxlZFNldENoYW5nZWQgPSBmYWxzZTsKIAogICAgIFJlbmRlck9i
amVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
YW5pbWF0aW9uc0VuZDsgKytpdCkgewogICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBB
bmltID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKCFjb21wQW5pbS0+aXNTdXNwZW5kZWQoKSAm
JiBjb21wQW5pbS0+aXNBbmltYXRpbmcoKSkgewotICAgICAgICAgICAgaXNBbmltYXRpbmcgPSB0
cnVlOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghY29tcEFuaW0tPmlzU3VzcGVu
ZGVkKCkpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0ID0gY29tcEFuaW0tPndpbGxOZWVkU2Vydmlj
ZSgpOworICAgICAgICAgICAgaWYgKHQgIT0gLTEgJiYgKHQgPCBuZWVkc1NlcnZpY2UgfHwgbmVl
ZHNTZXJ2aWNlID09IC0xKSkKKyAgICAgICAgICAgICAgICBuZWVkc1NlcnZpY2UgPSB0OworICAg
ICAgICAgICAgaWYgKG5lZWRzU2VydmljZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGNh
bGxTZXRDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+Zmly
c3QtPmVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlIHx8IChub2Rl
LT5kb2N1bWVudCgpICYmICFub2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldENoYW5nZWQoQW5pbWF0aW9uU3R5bGVDaGFuZ2UpOwor
ICAgICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoaXNBbmltYXRp
bmcpIHsKLSAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYg
KGNhbGxlZFNldENoYW5nZWQpCisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVJl
bmRlcmluZygpOworICAgIAorICAgIC8vIElmIHdlIHdhbnQgc2VydmljZSBpbW1lZGlhdGVseSwg
d2Ugc3RhcnQgYSByZXBlYXRpbmcgdGltZXIgdG8gcmVkdWNlIHRoZSBvdmVyaGVhZCBvZiBzdGFy
dGluZworICAgIGlmIChuZWVkc1NlcnZpY2UgPT0gMCkgeworICAgICAgICBpZiAoIW1fYW5pbWF0
aW9uVGltZXIuaXNBY3RpdmUoKSB8fCBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkg
PT0gMCkKICAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoY0FuaW1h
dGlvblRpbWVyRGVsYXkpOwotICAgIH0gZWxzZSBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGRvbid0IG5l
ZWQgc2VydmljZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHRpbWVyIGlzIG5vIGxvbmdlciBy
dW5uaW5nCisgICAgaWYgKG5lZWRzU2VydmljZSA8IDApIHsKKyAgICAgICAgaWYgKG1fYW5pbWF0
aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIE90aGVyd2lzZSwgd2Ugd2Fu
dCB0byBzdGFydCBhIG9uZS1zaG90IHRpbWVyIHNvIHdlIGdldCBoZXJlIGFnYWluCisgICAgaWYg
KG1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9hbmltYXRpb25UaW1lci5z
dG9wKCk7CisgICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QobmVlZHNTZXJ2aWNlKTsK
IH0KIAogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUmVuZGVyaW5nRGlz
cGF0Y2hlckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiopCiB7CisgICAg
Ly8gZmlyZSBhbGwgdGhlIGV2ZW50cworICAgIFZlY3RvcjxFdmVudFRvRGlzcGF0Y2g+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2V2ZW50c1RvRGlzcGF0Y2guZW5kKCk7CisgICAgZm9yIChWZWN0
b3I8RXZlbnRUb0Rpc3BhdGNoPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2V2ZW50c1RvRGlzcGF0
Y2guYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+ZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQpCisgICAgICAgICAgICBp
dC0+ZWxlbWVudC0+ZGlzcGF0Y2hXZWJLaXRUcmFuc2l0aW9uRXZlbnQoaXQtPmV2ZW50VHlwZSxp
dC0+bmFtZSwgaXQtPmVsYXBzZWRUaW1lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXQt
PmVsZW1lbnQtPmRpc3BhdGNoV2ViS2l0QW5pbWF0aW9uRXZlbnQoaXQtPmV2ZW50VHlwZSxpdC0+
bmFtZSwgaXQtPmVsYXBzZWRUaW1lKTsKKyAgICB9CisgICAgCisgICAgbV9ldmVudHNUb0Rpc3Bh
dGNoLmNsZWFyKCk7CisgICAgCiAgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZG9jdW1lbnQo
KSkKICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CiB9CkBA
IC0xNDUsMjcgKzE5NiwyMyBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFy
dFVwCiAgICAgICAgIG1fdXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlci5zdGFydE9uZVNob3QoMCk7
CiB9CiAKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZEV2ZW50VG9EaXNwYXRj
aChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKKyAgICBtX2V2
ZW50c1RvRGlzcGF0Y2guZ3JvdyhtX2V2ZW50c1RvRGlzcGF0Y2guc2l6ZSgpKzEpOworICAgIEV2
ZW50VG9EaXNwYXRjaCYgZXZlbnQgPSBtX2V2ZW50c1RvRGlzcGF0Y2hbbV9ldmVudHNUb0Rpc3Bh
dGNoLnNpemUoKS0xXTsKKyAgICBldmVudC5lbGVtZW50ID0gZWxlbWVudDsKKyAgICBldmVudC5l
dmVudFR5cGUgPSBldmVudFR5cGU7CisgICAgZXZlbnQubmFtZSA9IG5hbWU7CisgICAgZXZlbnQu
ZWxhcHNlZFRpbWUgPSBlbGFwc2VkVGltZTsKKyAgICAKKyAgICBzdGFydFVwZGF0ZVJlbmRlcmlu
Z0Rpc3BhdGNoZXIoKTsKK30KKwogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5p
bWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4qIHRpbWVy
KQogewogICAgIC8vIFdoZW4gdGhlIHRpbWVyIGZpcmVzLCBhbGwgd2UgZG8gaXMgY2FsbCBzZXRD
aGFuZ2VkIG9uIGFsbCBET00gbm9kZXMgd2l0aCBydW5uaW5nIGFuaW1hdGlvbnMgYW5kIHRoZW4g
ZG8gYW4gaW1tZWRpYXRlCiAgICAgLy8gdXBkYXRlUmVuZGVyaW5nLiAgSXQgd2lsbCB0aGVuIGNh
bGwgYmFjayB0byB1cyB3aXRoIG5ldyBpbmZvcm1hdGlvbi4KLSAgICBib29sIGlzQW5pbWF0aW5n
ID0gZmFsc2U7Ci0gICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBh
bmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoUmVu
ZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIENv
bXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoIWNv
bXBBbmltLT5pc1N1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5pc0FuaW1hdGluZygpKSB7Ci0gICAg
ICAgICAgICBpc0FuaW1hdGluZyA9IHRydWU7Ci0gICAgICAgICAgICBjb21wQW5pbS0+c2V0QW5p
bWF0aW5nKGZhbHNlKTsKLQotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5maXJzdC0+ZWxl
bWVudCgpOwotICAgICAgICAgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVudCgpICYm
ICFub2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDaGFuZ2VkKEFuaW1hdGlvblN0eWxlQ2hhbmdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwotCi0gICAgdXBkYXRlQW5p
bWF0aW9uVGltZXIoKTsKKyAgICB1cGRhdGVBbmltYXRpb25UaW1lcih0cnVlKTsKIH0KIAogYm9v
bCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVy
ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05v
dykgY29uc3QKQEAgLTMzNCw2ICszODEsMTEgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpz
dGFydFVwZGF0ZVJlbgogICAgIG1fZGF0YS0+c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVy
KCk7CiB9CiAKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkRXZlbnRUb0Rpc3BhdGNoKFBh
c3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQoreworICAgIG1fZGF0YS0+
YWRkRXZlbnRUb0Rpc3BhdGNoKGVsZW1lbnQsIGV2ZW50VHlwZSwgbmFtZSwgZWxhcHNlZFRpbWUp
OworfQorCiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0eWxlQXZhaWxhYmxlKCkKIHsKICAg
ICBpZiAoIW1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKQpJbmRleDogV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDM5MDQ5KQorKysgV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU7CitjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBEb2N1bWVudDsK
K2NsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSZW5kZXJP
YmplY3Q7CkBAIC01OSw5ICs2MSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3VzcGVuZEFuaW1h
dGlvbnMoRG9jdW1lbnQqKTsKICAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqKTsK
LSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CiAKICAgICB2b2lkIHN0YXJ0VXBkYXRl
UmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAgIHZvaWQgYWRkRXZlbnRUb0Rpc3BhdGNoKFBhc3NS
ZWZQdHI8RWxlbWVudD4sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CiAKICAgICB2b2lkIHN0eWxlQXZhaWxhYmxl
KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlv
bi5jcHAJKHJldmlzaW9uIDM5MDQ5KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1Myw5IEBAIHB1YmxpYzoK
ICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAKICAgICB2
b2lkIHNldEFuaW1hdGluZyhib29sKTsKLSAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3Q7Cisg
ICAgZG91YmxlIHdpbGxOZWVkU2VydmljZSgpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IEtleWZy
YW1lQW5pbWF0aW9uKiBnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGdldEFuaW1hdGlvbkZvclByb3Bl
cnR5KGludCBwcm9wZXJ0eSk7CiAKICAgICB2b2lkIGNsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMo
UmVuZGVyT2JqZWN0Kik7CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1h
dGlvblByaXZhdGU6OnVwZGF0ZVRyCiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJ1bm5p
bmcgYW5pbWF0aW9uIGZvciB0aGlzIHByb3BlcnR5LCB0aGUgdHJhbnNpdGlvbiBpcyBvdmVycmlk
ZGVuCiAgICAgICAgICAgICAvLyBhbmQgd2UgaGF2ZSB0byB1c2UgdGhlIHVuYW5pbWF0ZWRTdHls
ZSBmcm9tIHRoZSBhbmltYXRpb24uIFdlIGRvIHRoZSB0ZXN0CiAgICAgICAgICAgICAvLyBhZ2Fp
bnN0IHRoZSB1bmFuaW1hdGVkIHN0eWxlIGhlcmUsIGJ1dCB3ZSAib3ZlcnJpZGUiIHRoZSB0cmFu
c2l0aW9uIGxhdGVyLgotICAgICAgICAgICAgY29uc3QgS2V5ZnJhbWVBbmltYXRpb24qIGtleWZy
YW1lQW5pbSA9IGdldEFuaW1hdGlvbkZvclByb3BlcnR5KHByb3ApOworICAgICAgICAgICAgUmVm
UHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBnZXRBbmltYXRpb25Gb3JQcm9w
ZXJ0eShwcm9wKTsKICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSBrZXlmcmFt
ZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVudFN0eWxlOwog
CiAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9y
IHRoaXMgcHJvcApAQCAtMjk3LDM0ICsyOTcsNDQgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb25Q
cml2YXRlOjpzZXRBbmltYQogICAgIH0KIH0KIAotYm9vbCBDb21wb3NpdGVBbmltYXRpb25Qcml2
YXRlOjppc0FuaW1hdGluZygpIGNvbnN0Citkb3VibGUgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0
ZTo6d2lsbE5lZWRTZXJ2aWNlKCkgY29uc3QKIHsKKyAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIGF0
IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gLTEgbWVhbnMgbm8gc2VydmljZSBpcyBy
ZXF1aXJlZC4gMCBtZWFucyAKKyAgICAvLyBzZXJ2aWNlIGlzIHJlcXVpcmVkIG5vdywgYW5kID4g
MCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBzZWNvbmRzIGluIHRoZSBmdXR1
cmUuCisgICAgZG91YmxlIG1pblQgPSAtMTsKKyAgICAKICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsK
ICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kLmdldCgp
OwotICAgICAgICBpZiAodHJhbnNpdGlvbiAmJiAhdHJhbnNpdGlvbi0+cGF1c2VkKCkgJiYgdHJh
bnNpdGlvbi0+aXNBbmltYXRpbmcoKSAmJiB0cmFuc2l0aW9uLT5hY3RpdmUoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkb3VibGUgdCA9IHRyYW5zaXRpb24gPyB0cmFuc2l0
aW9uLT53aWxsTmVlZFNlcnZpY2UoKSA6IC0xOworICAgICAgICBpZiAodCA8IG1pblQgfHwgbWlu
VCA9PSAtMSkKKyAgICAgICAgICAgIG1pblQgPSB0OworICAgICAgICBpZiAobWluVCA9PSAwKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwog
ICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAg
IEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAgICAgaWYg
KGFuaW0gJiYgIWFuaW0tPnBhdXNlZCgpICYmIGFuaW0tPmlzQW5pbWF0aW5nKCkgJiYgYW5pbS0+
YWN0aXZlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgS2V5ZnJhbWVBbmlt
YXRpb24qIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGRvdWJsZSB0ID0g
YW5pbWF0aW9uID8gYW5pbWF0aW9uLT53aWxsTmVlZFNlcnZpY2UoKSA6IC0xOworICAgICAgICBp
ZiAodCA8IG1pblQgfHwgbWluVCA9PSAtMSkKKyAgICAgICAgICAgIG1pblQgPSB0OworICAgICAg
ICBpZiAobWluVCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBtaW5UOwogfQogCi1jb25zdCBLZXlmcmFtZUFuaW1hdGlv
biogQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkoaW50
IHByb3BlcnR5KSBjb25zdAorUGFzc1JlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gQ29tcG9zaXRl
QW5pbWF0aW9uUHJpdmF0ZTo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkoaW50IHByb3BlcnR5KQog
ewotICAgIGNvbnN0IEtleWZyYW1lQW5pbWF0aW9uKiByZXR2YWwgPSAwOworICAgIFJlZlB0cjxL
ZXlmcmFtZUFuaW1hdGlvbj4gcmV0dmFsOwogICAgIAogICAgIC8vIFdlIHdhbnQgdG8gc2VuZCBi
YWNrIHRoZSBsYXN0IGFuaW1hdGlvbiB3aXRoIHRoZSBwcm9wZXJ0eSBpZiB0aGVyZSBhcmUgbXVs
dGlwbGVzLgogICAgIC8vIFNvIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBhbmltYXRp
b25zCiAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBh
bmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lQW5pbWF0aW9uKiBh
bmltID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9u
PiBhbmltID0gaXQtPnNlY29uZDsKICAgICAgICAgaWYgKGFuaW0tPmhhc0FuaW1hdGlvbkZvclBy
b3BlcnR5KHByb3BlcnR5KSkKICAgICAgICAgICAgIHJldHZhbCA9IGFuaW07CiAgICAgfQpAQCAt
NTY2LDkgKzU3Niw5IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGkK
ICAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRlKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdl
dFN0eWxlKTsKIH0KIAotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nKCkgY29u
c3QKK2RvdWJsZSBDb21wb3NpdGVBbmltYXRpb246OndpbGxOZWVkU2VydmljZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fZGF0YS0+aXNBbmltYXRpbmcoKTsKKyAgICByZXR1cm4gbV9kYXRhLT53
aWxsTmVlZFNlcnZpY2UoKTsKIH0KIAogdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFdhaXRp
bmdGb3JTdHlsZUF2YWlsYWJsZShib29sIGIpCkBAIC02MDYsNiArNjE2LDExIEBAIGJvb2wgQ29t
cG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3AKICAgICByZXR1cm4gbV9kYXRhLT5pc0Fu
aW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBpc1J1bm5pbmdOb3cpOwogfQogCitQYXNzUmVmUHRy
PEtleWZyYW1lQW5pbWF0aW9uPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZvclBy
b3BlcnR5KGludCBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5nZXRBbmltYXRpb25G
b3JQcm9wZXJ0eShwcm9wZXJ0eSk7Cit9CisKIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRB
bmltYXRpb25TdGFydFRpbWUoZG91YmxlIHQpCiB7CiAgICAgbV9kYXRhLT5zZXRBbmltYXRpb25T
dGFydFRpbWUodCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1h
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5p
bWF0aW9uLmgJKHJldmlzaW9uIDM5MDQ5KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21w
b3NpdGVBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU7CiBjbGFzcyBB
bmltYXRpb25Db250cm9sbGVyOworY2xhc3MgS2V5ZnJhbWVBbmltYXRpb247CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIApAQCAtNDksNyArNTAsNyBAQCBwdWJsaWM6
CiAgICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpOwogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdDsKKyAg
ICBkb3VibGUgd2lsbE5lZWRTZXJ2aWNlKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFdhaXRpbmdG
b3JTdHlsZUF2YWlsYWJsZShib29sKTsKIApAQCAtNjAsNiArNjEsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzdHlsZUF2YWlsYWJsZSgpOwogICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wpOwogICAg
IGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5nTm93
KSBjb25zdDsKKyAgICAKKyAgICBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBnZXRBbmlt
YXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpOworCiAKICAgICB2b2lkIHNldEFuaW1hdGlv
blN0YXJ0VGltZShkb3VibGUgdCk7CiAgICAgdm9pZCBzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGlu
dCBwcm9wZXJ0eSwgZG91YmxlIHQpOwpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9J
bXBsaWNpdEFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDM5MDQ5KQorKysgV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3
LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQW5pbWF0aW9u
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
SW1wbGljaXRBbmltYXRpb24uaCIKKyNpbmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NSwxMCAr
NzksMjIgQEAgdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdAogCiAgICAg
aWYgKGJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmltYXRlZFN0
eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygx
LCAwLCAwKSkpCiAgICAgICAgIHNldEFuaW1hdGluZygpOworCisgICAgLy8gRmlyZSB0aGUgc3Rh
cnQgdGltZW91dCBpZiBuZWVkZWQKKyAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsK
IH0KIAogdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBz
ZWRUaW1lKQogeworICAgIC8vIElmIHdlIGhhdmUgYSBrZXlmcmFtZSBhbmltYXRpb24gb24gdGhp
cyBwcm9wZXJ0eSwgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIG92ZXJyaWRkZW4uIFRoZSBrZXlm
cmFtZQorICAgIC8vIGFuaW1hdGlvbiBrZWVwcyBhbiB1bmFuaW1hdGVkIHN0eWxlIGluIGNhc2Ug
YSB0cmFuc2l0aW9uIHN0YXJ0cyB3aGlsZSB0aGUga2V5ZnJhbWUgYW5pbWF0aW9uIGlzCisgICAg
Ly8gcnVubmluZy4gQnV0IG5vdyB0aGF0IHRoZSB0cmFuc2l0aW9uIGhhcyBjb21wbGV0ZWQsIHdl
IG5lZWQgdG8gdXBkYXRlIHRoaXMgc3R5bGUgd2l0aCBpdHMgbmV3CisgICAgLy8gZGVzdGluYXRp
b24uIElmIHdlIGRpZG4ndCwgdGhlIG5leHQgdGltZSB0aHJvdWdoIHdlIHdvdWxkIHRoaW5rIGEg
dHJhbnNpdGlvbiBoYWQgc3RhcnRlZAorICAgIC8vIChjb21wYXJpbmcgdGhlIG9sZCB1bmFuaW1h
dGVkIHN0eWxlIHdpdGggdGhlIG5ldyBmaW5hbCBzdHlsZSBvZiB0aGUgdHJhbnNpdGlvbikuCisg
ICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2NvbXBBbmltLT5n
ZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShtX2FuaW1hdGluZ1Byb3BlcnR5KTsKKyAgICBpZiAoa2V5
ZnJhbWVBbmltKQorICAgICAgICBrZXlmcmFtZUFuaW0tPnNldFVuYW5pbWF0ZWRTdHlsZShtX3Rv
U3R5bGUpOworICAgIAogICAgIGlmICghc2VuZFRyYW5zaXRpb25FdmVudChldmVudE5hbWVzKCku
d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBlbGFwc2VkVGltZSkpIHsKICAgICAgICAgLy8gV2Ug
ZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50LCB3aGljaCB3b3VsZCBjYWxsIGVuZEFuaW1hdGlvbigp
LCBzbyB3ZSdsbCBqdXN0IGNhbGwgaXQgaGVyZS4KICAgICAgICAgZW5kQW5pbWF0aW9uKHRydWUp
OwpAQCAtMTA0LDExICsxMjAsMTEgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c2VuZFRyYW5z
aXRpb25FdgogICAgICAgICAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICAgICAgLy8gQ2FsbCB0aGUgZXZlbnQgaGFuZGxlcgotICAgICAg
ICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hXZWJLaXRUcmFuc2l0aW9uRXZlbnQoZXZlbnRUeXBlLCBw
cm9wZXJ0eU5hbWUsIGVsYXBzZWRUaW1lKTsKKyAgICAgICAgICAgIC8vIFNjaGVkdWxlIGV2ZW50
IGhhbmRsaW5nCisgICAgICAgICAgICBtX29iamVjdC0+YW5pbWF0aW9uKCktPmFkZEV2ZW50VG9E
aXNwYXRjaChlbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNlZFRpbWUpOwog
CiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUK
LSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlv
bkVuZEV2ZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBpZiAoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQgJiYgZWxlbWVudC0+
cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKGVsZW1lbnQuZ2V0KCkpOwog
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRGlkIGRpc3BhdGNoIGFuIGV2ZW50CkluZGV4
OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCShyZXZpc2lvbiAz
OTA0OSkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsOCArNTQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPdmVycmlk
ZGVuKGJvb2wpOwogICAgIHZpcnR1YWwgYm9vbCBvdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4g
bV9vdmVycmlkZGVuOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmlyZUV2ZW50cygpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLQogICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJvcGVydHko
aW50KSBjb25zdDsKIAogICAgIGJvb2wgaGFzU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2Zyb21T
dHlsZSAmJiBtX3RvU3R5bGU7IH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJh
bWVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzOTA0OSkKKysrIFdlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIK
IAorI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbXBv
c2l0ZUFuaW1hdGlvbi5oIgpAQCAtNjIsNiArNjMsOSBAQCBLZXlmcmFtZUFuaW1hdGlvbjo6fktl
eWZyYW1lQW5pbWF0aW9uKCkKIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9z
aXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+
JiBhbmltYXRlZFN0eWxlKQogeworICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVl
ZGVkCisgICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7CisgICAgCiAgICAgLy8gSWYg
d2UgaGF2ZSBub3QgeWV0IHN0YXJ0ZWQsIHdlIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBzdGFydCB0
aW1lLCBzbyBqdXN0IHN0YXJ0IHRoZSBhbmltYXRpb24gaWYgbmVlZGVkLgogICAgIGlmIChpc05l
dygpICYmIG1fYW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBBbmltUGxheVN0YXRlUGxheWluZykK
ICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXRTdGFydEFuaW1h
dGlvbiwgLTEpOwpAQCAtMjAwLDggKzIwNCw4IEBAIGJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNl
bmRBbmltYXRpb25FdmUKICAgICAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIC8vIENhbGwgdGhlIGV2ZW50IGhhbmRsZXIKLSAgICAgICAgZWxl
bWVudC0+ZGlzcGF0Y2hXZWJLaXRBbmltYXRpb25FdmVudChldmVudFR5cGUsIG1fa2V5ZnJhbWVz
LmFuaW1hdGlvbk5hbWUoKSwgZWxhcHNlZFRpbWUpOworICAgICAgICAvLyBTY2hlZHVsZSBldmVu
dCBoYW5kbGluZworICAgICAgICBtX29iamVjdC0+YW5pbWF0aW9uKCktPmFkZEV2ZW50VG9EaXNw
YXRjaChlbGVtZW50LCBldmVudFR5cGUsIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSwgZWxh
cHNlZFRpbWUpOwogCiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVk
KSBzdHlsZQogICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmlt
YXRpb25FbmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQpJbmRleDogV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkocmV2aXNpb24gMzkwNDkpCisrKyBXZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDEwICs1MSw5IEBAIHB1YmxpYzoKICAgICBpbnQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CiAgICAgdm9pZCBzZXRJbmRleChpbnQgaSkgeyBtX2luZGV4ID0gaTsgfQogCi0g
ICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgCiAgICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNv
bnN0OwogICAgIAorICAgIHZvaWQgc2V0VW5hbmltYXRlZFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlKSB7IG1fdW5hbmltYXRlZFN0eWxlID0gc3R5bGU7IH0KICAgICBSZW5kZXJT
dHlsZSogdW5hbmltYXRlZFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV91bmFuaW1hdGVkU3R5bGUu
Z2V0KCk7IH0KIAogcHJvdGVjdGVkOgo=
</data>
<flag name="review"
          id="12122"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>