<?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>223477</bug_id>
          
          <creation_ts>2021-03-18 13:50:35 -0700</creation_ts>
          <short_desc>Avoid heap allocation under AudioParamTimeline::processSetTargetFollowedByRamp()</short_desc>
          <delta_ts>2021-03-18 16:40:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>223226</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1741395</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-18 13:50:35 -0700</bug_when>
    <thetext>Avoid heap allocation under AudioParamTimeline::processSetTargetFollowedByRamp():
Thread 18 Crashed:: offline renderer
0   com.apple.JavaScriptCore      	0x00000006a7bb82ce 0x6a7bb6000 + 8910
1   com.apple.JavaScriptCore      	0x00000006a935ad5b 0x6a7bb6000 + 24792411
2   com.apple.JavaScriptCore      	0x00000006a7bf5a0b 0x6a7bb6000 + 260619
3   com.apple.WebCore             	0x000000068ab657a5 WebCore::AudioParamTimeline::ParamEvent::operator new(unsigned long) + 21 (AudioParamTimeline.h:67)
4   com.apple.WebCore             	0x000000068ab65d09 WTF::UniqueRef&lt;WebCore::AudioParamTimeline::ParamEvent&gt; WTF::makeUniqueRefWithoutFastMallocCheck&lt;WebCore::AudioParamTimeline::ParamEvent, WebCore::AudioParamTimeline::ParamEvent::Type, float&amp;, WTF::Seconds&amp;, int, WTF::Seconds, WTF::Vector&lt;float, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;, int, int, std::nullptr_t&gt;(WebCore::AudioParamTimeline::ParamEvent::Type&amp;&amp;, float&amp;, WTF::Seconds&amp;, int&amp;&amp;, WTF::Seconds&amp;&amp;, WTF::Vector&lt;float, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;&amp;&amp;, int&amp;&amp;, int&amp;&amp;, std::nullptr_t&amp;&amp;) + 105 (UniqueRef.h:38)
5   com.apple.WebCore             	0x000000068ab59ba0 WTF::UniqueRef&lt;WebCore::AudioParamTimeline::ParamEvent&gt; WTF::makeUniqueRef&lt;WebCore::AudioParamTimeline::ParamEvent, WebCore::AudioParamTimeline::ParamEvent::Type, float&amp;, WTF::Seconds&amp;, int, WTF::Seconds, WTF::Vector&lt;float, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;, int, int, std::nullptr_t&gt;(WebCore::AudioParamTimeline::ParamEvent::Type&amp;&amp;, float&amp;, WTF::Seconds&amp;, int&amp;&amp;, WTF::Seconds&amp;&amp;, WTF::Vector&lt;float, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;&amp;&amp;, int&amp;&amp;, int&amp;&amp;, std::nullptr_t&amp;&amp;) + 304 (UniqueRef.h:45)
6   com.apple.WebCore             	0x000000068ab55c00 WebCore::AudioParamTimeline::ParamEvent::createSetValueEvent(float, WTF::Seconds) + 160 (AudioParamTimeline.cpp:905)
7   com.apple.WebCore             	0x000000068ab57dfc WebCore::AudioParamTimeline::processSetTargetFollowedByRamp(int, WebCore::AudioParamTimeline::ParamEvent*&amp;, WebCore::AudioParamTimeline::ParamEvent::Type, unsigned long, double, double, float&amp;) + 684 (AudioParamTimeline.cpp:803)
8   com.apple.WebCore             	0x000000068ab573fc WebCore::AudioParamTimeline::valuesForFrameRangeImpl(unsigned long, unsigned long, float, float*, unsigned int, double, double) + 1212 (AudioParamTimeline.cpp:414)
9   com.apple.WebCore             	0x000000068ab54652 WebCore::AudioParamTimeline::valuesForFrameRange(unsigned long, unsigned long, float, float, float, float*, unsigned int, double, double) + 178 (AudioParamTimeline.cpp:354)
10  com.apple.WebCore             	0x000000068ab544cb WebCore::AudioParam::calculateTimelineValues(float*, unsigned int) + 219 (AudioParam.cpp:312)
11  com.apple.WebCore             	0x000000068ab53fe9 WebCore::AudioParam::calculateFinalValues(float*, unsigned int, bool) + 233 (AudioParam.cpp:263)
12  com.apple.WebCore             	0x000000068ab543e5 WebCore::AudioParam::calculateSampleAccurateValues(float*, unsigned int) + 245 (AudioParam.cpp:249)
13  com.apple.WebCore             	0x000000068abcbdc7 WebCore::GainNode::process(unsigned long) + 503 (GainNode.cpp:84)
14  com.apple.WebCore             	0x000000068ab2972e WebCore::AudioNode::processIfNecessary(unsigned long) + 462 (AudioNode.cpp:474)
15  com.apple.WebCore             	0x000000068ab2bfd7 WebCore::AudioNodeOutput::pull(WebCore::AudioBus*, unsigned long) + 407 (AudioNodeOutput.cpp:120)
16  com.apple.WebCore             	0x000000068ab2bda6 WebCore::AudioNodeInput::sumAllConnections(WebCore::AudioBus*, unsigned long) + 566 (AudioNodeInput.cpp:193)
17  com.apple.WebCore             	0x000000068ab245e7 WebCore::AudioNodeInput::pull(WebCore::AudioBus*, unsigned long) + 295 (AudioNodeInput.cpp:221)
18  com.apple.WebCore             	0x000000068ab24185 WebCore::AudioDestinationNode::render(WebCore::AudioBus*, WebCore::AudioBus*, unsigned long, WebCore::AudioIOPosition const&amp;) + 469 (AudioDestinationNode.cpp:94)
19  com.apple.WebCore             	0x000000068abe0d3d WebCore::OfflineAudioDestinationNode::offlineRender() + 877 (OfflineAudioDestinationNode.cpp:163)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741398</commentid>
    <comment_count>1</comment_count>
      <attachid>423646</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-18 13:53:03 -0700</bug_when>
    <thetext>Created attachment 423646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741501</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-18 16:39:09 -0700</bug_when>
    <thetext>Committed r274686: &lt;https://commits.webkit.org/r274686&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 423646.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741503</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-18 16:40:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/75597040&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423646</attachid>
            <date>2021-03-18 13:53:03 -0700</date>
            <delta_ts>2021-03-18 16:39:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223477-20210318135302.patch</filename>
            <type>text/plain</type>
            <size>24993</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTUxNDUxOTY3Y2QyOGQ4
YjcyYTM5OTQ2MzU4NGNlMjgzYjQ2YTkzZS4uY2Y0ZmZjZDIxZDUzZWJkZjhkZWU1ZTY2NTkzMDFi
MjM2Yzk5NDkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTAzLTE4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgaGVhcCBhbGxvY2F0
aW9uIHVuZGVyIEF1ZGlvUGFyYW1UaW1lbGluZTo6cHJvY2Vzc1NldFRhcmdldEZvbGxvd2VkQnlS
YW1wKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MzQ3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0
b3AgaGVhcC1hbGxvY2F0aW5nIFBhcmFtRXZlbnQgb2JqZWN0cyBpbiBBdWRpb1BhcmFtVGltZWxp
bmUgc2luY2UgdGhleSBzb21ldGltZXMKKyAgICAgICAgZ2V0IGNvbnN0cnVjdGVkIG9uIHRoZSBh
dWRpbyB0aHJlYWQuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1l
bGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6Omluc2VydEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6Y2FuY2VsQW5kSG9s
ZEF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OnZhbHVlRm9y
Q29udGV4dFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1
ZXNGb3JGcmFtZVJhbmdlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxp
bmU6OnByb2Nlc3NDYW5jZWxWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRp
bWVsaW5lOjpwcm9jZXNzU2V0VGFyZ2V0Rm9sbG93ZWRCeVJhbXApOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpoYW5kbGVDYW5jZWxWYWx1ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50OjpjcmVhdGVTZXRWYWx1ZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6UGFyYW1FdmVudDo6Y3Jl
YXRlTGluZWFyUmFtcEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGlu
ZTo6UGFyYW1FdmVudDo6Y3JlYXRlRXhwb25lbnRpYWxSYW1wRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50OjpjcmVhdGVTZXRUYXJnZXRFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6OlBhcmFtRXZlbnQ6OmNy
ZWF0ZVNldFZhbHVlQ3VydmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGlt
ZWxpbmU6OlBhcmFtRXZlbnQ6OmNyZWF0ZUNhbmNlbFZhbHVlc0V2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6aGFzVmFsdWVzIGNvbnN0KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50OjpQYXJhbUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6UGFyYW1FdmVudDo6c2F2ZWRFdmVudCk6CisKIDIw
MjEtMDMtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9p
ZCBoZWFwIGFsbG9jYXRpb24gdW5kZXIgUGFubmVyTm9kZTo6cHJvY2Vzc1NhbXBsZUFjY3VyYXRl
VmFsdWVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9QYXJhbVRpbWVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9QYXJhbVRpbWVsaW5lLmNwcAppbmRleCA4ZjdiY2U5NjA5NzNlZTk2NjYyNTAxNjk2YzhlNjc0
NDU4YjA2ZjJiLi43MmU0ODAwYzg4NzM3YzY2OGMxZDY2OWU4ZTAxOGUxM2FiMDdlOWZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGlu
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGlt
ZWxpbmUuY3BwCkBAIC0xMzIsMTUgKzEzMiwxNSBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkTnVtYmVy
KFNlY29uZHMgcykKICAgICByZXR1cm4gIXN0ZDo6aXNuYW4ocy52YWx1ZSgpKSAmJiAhc3RkOjpp
c2luZihzLnZhbHVlKCkpOwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBBdWRpb1BhcmFtVGltZWxp
bmU6Omluc2VydEV2ZW50KFVuaXF1ZVJlZjxQYXJhbUV2ZW50PiBldmVudCkKK0V4Y2VwdGlvbk9y
PHZvaWQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0RXZlbnQoUGFyYW1FdmVudCYmIGV2ZW50
KQogewogICAgIC8vIFNhbml0eSBjaGVjayB0aGUgZXZlbnQuIEJlIHN1cGVyIGNhcmVmdWwgd2Un
cmUgbm90IGdldHRpbmcgaW5mZWN0ZWQgd2l0aCBOYU4gb3IgSW5mLgotICAgIGJvb2wgaXNWYWxp
ZCA9IGV2ZW50LT50eXBlKCkgPCBQYXJhbUV2ZW50OjpMYXN0VHlwZQotICAgICAgICAmJiBpc1Zh
bGlkTnVtYmVyKGV2ZW50LT52YWx1ZSgpKQotICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50
LT50aW1lKCkpCi0gICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQtPnRpbWVDb25zdGFudCgp
KQotICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LT5kdXJhdGlvbigpKQotICAgICAgICAm
JiBldmVudC0+ZHVyYXRpb24oKSA+PSAwX3M7CisgICAgYm9vbCBpc1ZhbGlkID0gZXZlbnQudHlw
ZSgpIDwgUGFyYW1FdmVudDo6TGFzdFR5cGUKKyAgICAgICAgJiYgaXNWYWxpZE51bWJlcihldmVu
dC52YWx1ZSgpKQorICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LnRpbWUoKSkKKyAgICAg
ICAgJiYgaXNWYWxpZE51bWJlcihldmVudC50aW1lQ29uc3RhbnQoKSkKKyAgICAgICAgJiYgaXNW
YWxpZE51bWJlcihldmVudC5kdXJhdGlvbigpKQorICAgICAgICAmJiBldmVudC5kdXJhdGlvbigp
ID49IDBfczsKIAogICAgIGlmICghaXNWYWxpZCkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTE0
OCwzMyArMTQ4LDMzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6aW5z
ZXJ0RXZlbnQoVW5pcXVlUmVmPFBhcmFtRXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVChtX2V2ZW50
c0xvY2suaXNMb2NrZWQoKSk7CiAKICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBhdXRvIGluc2Vy
dFRpbWUgPSBldmVudC0+dGltZSgpOworICAgIGF1dG8gaW5zZXJ0VGltZSA9IGV2ZW50LnRpbWUo
KTsKIAogICAgIGZvciAoYXV0byYgcGFyYW1FdmVudCA6IG1fZXZlbnRzKSB7Ci0gICAgICAgIGlm
IChldmVudC0+dHlwZSgpID09IFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmUpIHsKLSAgICAgICAg
ICAgIGlmIChwYXJhbUV2ZW50LT50eXBlKCkgIT0gUGFyYW1FdmVudDo6Q2FuY2VsVmFsdWVzKSB7
CisgICAgICAgIGlmIChldmVudC50eXBlKCkgPT0gUGFyYW1FdmVudDo6U2V0VmFsdWVDdXJ2ZSkg
eworICAgICAgICAgICAgaWYgKHBhcmFtRXZlbnQudHlwZSgpICE9IFBhcmFtRXZlbnQ6OkNhbmNl
bFZhbHVlcykgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZXZlbnQgaXMgYSBTZXRWYWx1
ZUN1cnZlLCBtYWtlIHN1cmUgaXQgZG9lc24ndCBvdmVybGFwIGFueSBleGlzdGluZyBldmVudC4K
ICAgICAgICAgICAgICAgICAvLyBJdCdzIG9rIGlmIHRoZSBTZXRWYWx1ZUN1cnZlIHN0YXJ0cyBh
dCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBlbmQgb2Ygc29tZSBvdGhlciBkdXJhdGlvbi4KLSAgICAg
ICAgICAgICAgICBhdXRvIGVuZFRpbWUgPSBldmVudC0+dGltZSgpICsgZXZlbnQtPmR1cmF0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtRXZlbnQtPnR5cGUoKSA9PSBQYXJhbUV2ZW50
OjpTZXRWYWx1ZUN1cnZlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcGFyYW1FdmVudEVu
ZFRpbWUgPSBwYXJhbUV2ZW50LT50aW1lKCkgKyBwYXJhbUV2ZW50LT5kdXJhdGlvbigpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoKHBhcmFtRXZlbnQtPnRpbWUoKSA+PSBldmVudC0+dGltZSgp
ICYmIHBhcmFtRXZlbnQtPnRpbWUoKSA8IGVuZFRpbWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB8fCAocGFyYW1FdmVudEVuZFRpbWUgPiBldmVudC0+dGltZSgpICYmIHBhcmFtRXZlbnRFbmRU
aW1lIDwgZW5kVGltZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChldmVudC0+dGltZSgp
ID49IHBhcmFtRXZlbnQtPnRpbWUoKSAmJiBldmVudC0+dGltZSgpIDwgcGFyYW1FdmVudEVuZFRp
bWUpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAoZW5kVGltZSA+PSBwYXJhbUV2ZW50LT50
aW1lKCkgJiYgZW5kVGltZSA8IHBhcmFtRXZlbnRFbmRUaW1lKSkgeworICAgICAgICAgICAgICAg
IGF1dG8gZW5kVGltZSA9IGV2ZW50LnRpbWUoKSArIGV2ZW50LmR1cmF0aW9uKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHBhcmFtRXZlbnQudHlwZSgpID09IFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3Vy
dmUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBwYXJhbUV2ZW50RW5kVGltZSA9IHBhcmFt
RXZlbnQudGltZSgpICsgcGFyYW1FdmVudC5kdXJhdGlvbigpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoKHBhcmFtRXZlbnQudGltZSgpID49IGV2ZW50LnRpbWUoKSAmJiBwYXJhbUV2ZW50LnRp
bWUoKSA8IGVuZFRpbWUpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAocGFyYW1FdmVudEVu
ZFRpbWUgPiBldmVudC50aW1lKCkgJiYgcGFyYW1FdmVudEVuZFRpbWUgPCBlbmRUaW1lKQorICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgKGV2ZW50LnRpbWUoKSA+PSBwYXJhbUV2ZW50LnRpbWUo
KSAmJiBldmVudC50aW1lKCkgPCBwYXJhbUV2ZW50RW5kVGltZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IChlbmRUaW1lID49IHBhcmFtRXZlbnQudGltZSgpICYmIGVuZFRpbWUgPCBwYXJh
bUV2ZW50RW5kVGltZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb3RTdXBwb3J0ZWRFcnJvciwgIkV2ZW50cyBhcmUgb3ZlcmxhcHBpbmciX3MgfTsKICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1FdmVu
dC0+dGltZSgpID4gZXZlbnQtPnRpbWUoKSAmJiBwYXJhbUV2ZW50LT50aW1lKCkgPCBlbmRUaW1l
KQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1FdmVudC50aW1lKCkgPiBldmVudC50
aW1lKCkgJiYgcGFyYW1FdmVudC50aW1lKCkgPCBlbmRUaW1lKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IsICJFdmVudHMgYXJlIG92ZXJs
YXBwaW5nIl9zIH07CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocGFyYW1FdmVu
dC0+dHlwZSgpID09IFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmUpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChwYXJhbUV2ZW50LnR5cGUoKSA9PSBQYXJhbUV2ZW50OjpTZXRWYWx1ZUN1cnZlKSB7CiAg
ICAgICAgICAgICAvLyBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGlzIGV2ZW50IGRvZXNuJ3Qgb3Zl
cmxhcCBhbnkgZXhpc3RpbmcgU2V0VmFsdWVDdXJ2ZSBldmVudC4KLSAgICAgICAgICAgIGF1dG8g
cGFyZW50RXZlbnRFbmRUaW1lID0gcGFyYW1FdmVudC0+dGltZSgpICsgcGFyYW1FdmVudC0+ZHVy
YXRpb24oKTsKLSAgICAgICAgICAgIGlmIChldmVudC0+dGltZSgpID49IHBhcmFtRXZlbnQtPnRp
bWUoKSAmJiBldmVudC0+dGltZSgpIDwgcGFyZW50RXZlbnRFbmRUaW1lKQorICAgICAgICAgICAg
YXV0byBwYXJlbnRFdmVudEVuZFRpbWUgPSBwYXJhbUV2ZW50LnRpbWUoKSArIHBhcmFtRXZlbnQu
ZHVyYXRpb24oKTsKKyAgICAgICAgICAgIGlmIChldmVudC50aW1lKCkgPj0gcGFyYW1FdmVudC50
aW1lKCkgJiYgZXZlbnQudGltZSgpIDwgcGFyZW50RXZlbnRFbmRUaW1lKQogICAgICAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciwgIkV2ZW50cyBhcmUgb3Zl
cmxhcHBpbmciIH07CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocGFyYW1FdmVudC0+dGltZSgp
ID4gaW5zZXJ0VGltZSkKKyAgICAgICAgaWYgKHBhcmFtRXZlbnQudGltZSgpID4gaW5zZXJ0VGlt
ZSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICsraTsKQEAgLTIxOSw3ICsyMTksNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb1BhcmFtVGltZWxpbmU6OmNhbmNlbEFuZEhvbGRBdFRp
bWUoU2Vjb25kcyBjYW5jZWxUaW1lKQogCiAgICAgLy8gRmluZCB0aGUgZmlyc3QgZXZlbnQgYXQg
b3IganVzdCBwYXN0IGNhbmNlbFRpbWUuCiAgICAgc2l6ZV90IGkgPSBtX2V2ZW50cy5maW5kTWF0
Y2hpbmcoWyZdKGF1dG8mIGV2ZW50KSB7Ci0gICAgICAgIHJldHVybiBldmVudC0+dGltZSgpID4g
Y2FuY2VsVGltZTsKKyAgICAgICAgcmV0dXJuIGV2ZW50LnRpbWUoKSA+IGNhbmNlbFRpbWU7CiAg
ICAgfSk7CiAgICAgaSA9IChpID09IG5vdEZvdW5kKSA/IG1fZXZlbnRzLnNpemUoKSA6IGk7CiAK
QEAgLTIyOCw3ICsyMjgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb1BhcmFtVGltZWxpbmU6
OmNhbmNlbEFuZEhvbGRBdFRpbWUoU2Vjb25kcyBjYW5jZWxUaW1lKQogCiAgICAgLy8gSWYgdGhl
IGV2ZW50IGp1c3QgYmVmb3JlIGNhbmNlbFRpbWUgaXMgYSBTZXRUYXJnZXQgb3IgU2V0VmFsdWVD
dXJ2ZSBldmVudCwgd2UgbmVlZAogICAgIC8vIHRvIGhhbmRsZSB0aGF0IGV2ZW50IHNwZWNpYWxs
eSBpbnN0ZWFkIG9mIHRoZSBldmVudCBhZnRlci4KLSAgICBpZiAoaSA+IDAgJiYgKChtX2V2ZW50
c1tpIC0gMV0tPnR5cGUoKSA9PSBQYXJhbUV2ZW50OjpTZXRUYXJnZXQpIHx8IChtX2V2ZW50c1tp
IC0gMV0tPnR5cGUoKSA9PSBQYXJhbUV2ZW50OjpTZXRWYWx1ZUN1cnZlKSkpCisgICAgaWYgKGkg
PiAwICYmICgobV9ldmVudHNbaSAtIDFdLnR5cGUoKSA9PSBQYXJhbUV2ZW50OjpTZXRUYXJnZXQp
IHx8IChtX2V2ZW50c1tpIC0gMV0udHlwZSgpID09IFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmUp
KSkKICAgICAgICAgY2FuY2VsbGVkRXZlbnRJbmRleCA9IGkgLSAxOwogICAgIGVsc2UgaWYgKGkg
Pj0gbV9ldmVudHMuc2l6ZSgpKSB7CiAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gZXZlbnRz
IG9jY3VycmluZyBhZnRlciB8Y2FuY2VsVGltZXwgKGFuZCB0aGUKQEAgLTIzNywxMiArMjM3LDEy
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6Y2FuY2VsQW5kSG9sZEF0
VGltZShTZWNvbmRzIGNhbmNlbFRpbWUpCiAgICAgfQogCiAgICAgLy8gY2FuY2VsbGVkRXZlbnQg
aXMgdGhlIGV2ZW50IHRoYXQgaXMgYmVpbmcgY2FuY2VsbGVkLgotICAgIGF1dG8mIGNhbmNlbGxl
ZEV2ZW50ID0gbV9ldmVudHNbY2FuY2VsbGVkRXZlbnRJbmRleF0uZ2V0KCk7CisgICAgYXV0byYg
Y2FuY2VsbGVkRXZlbnQgPSBtX2V2ZW50c1tjYW5jZWxsZWRFdmVudEluZGV4XTsKICAgICBhdXRv
IGV2ZW50VHlwZSA9IGNhbmNlbGxlZEV2ZW50LnR5cGUoKTsKIAogICAgIC8vIE5ldyBldmVudCB0
byBiZSBpbnNlcnRlZCwgaWYgYW55LCBhbmQgYSBTZXRWYWx1ZUV2ZW50IGlmIG5lZWRlZC4KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGFyYW1FdmVudD4gbmV3RXZlbnQ7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFBhcmFtRXZlbnQ+IG5ld1NldFZhbHVlRXZlbnQ7CisgICAgT3B0aW9uYWw8UGFyYW1FdmVu
dD4gbmV3RXZlbnQ7CisgICAgT3B0aW9uYWw8UGFyYW1FdmVudD4gbmV3U2V0VmFsdWVFdmVudDsK
IAogICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7CiAgICAgY2FzZSBQYXJhbUV2ZW50OjpMaW5lYXJS
YW1wVG9WYWx1ZToKQEAgLTI1MCw4ICsyNTAsOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb1Bh
cmFtVGltZWxpbmU6OmNhbmNlbEFuZEhvbGRBdFRpbWUoU2Vjb25kcyBjYW5jZWxUaW1lKQogICAg
ICAgICAvLyBGb3IgdGhlc2UgZXZlbnRzIHdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHBhcmFtZXRl
cnMgb2YgdGhlIGV2ZW50CiAgICAgICAgIC8vIGZvciBhIENhbmNlbFZhbHVlcyBldmVudCBzbyB0
aGF0IHdlIGNhbiBwcm9wZXJseSBjYW5jZWwgdGhlIGV2ZW50CiAgICAgICAgIC8vIGFuZCBob2xk
IHRoZSB2YWx1ZS4KLSAgICAgICAgYXV0byBzYXZlZEV2ZW50ID0gbWFrZVVuaXF1ZVJlZjxQYXJh
bUV2ZW50PihldmVudFR5cGUsIGNhbmNlbGxlZEV2ZW50LnZhbHVlKCksIGNhbmNlbGxlZEV2ZW50
LnRpbWUoKSwgY2FuY2VsbGVkRXZlbnQudGltZUNvbnN0YW50KCksIGNhbmNlbGxlZEV2ZW50LmR1
cmF0aW9uKCksIFZlY3RvcjxmbG9hdD4geyBjYW5jZWxsZWRFdmVudC5jdXJ2ZSgpIH0sIGNhbmNl
bGxlZEV2ZW50LmN1cnZlUG9pbnRzUGVyU2Vjb25kKCksIGNhbmNlbGxlZEV2ZW50LmN1cnZlRW5k
VmFsdWUoKSwgbnVsbHB0cik7Ci0gICAgICAgIG5ld0V2ZW50ID0gUGFyYW1FdmVudDo6Y3JlYXRl
Q2FuY2VsVmFsdWVzRXZlbnQoY2FuY2VsVGltZSwgc2F2ZWRFdmVudC5tb3ZlVG9VbmlxdWVQdHIo
KSkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIGF1dG8gc2F2ZWRFdmVudCA9IFBhcmFtRXZl
bnQ6OlNhdmVkRXZlbnQgeyBldmVudFR5cGUsIGNhbmNlbGxlZEV2ZW50LnZhbHVlKCksIGNhbmNl
bGxlZEV2ZW50LnRpbWUoKSB9OworICAgICAgICBuZXdFdmVudCA9IFBhcmFtRXZlbnQ6OmNyZWF0
ZUNhbmNlbFZhbHVlc0V2ZW50KGNhbmNlbFRpbWUsIFdURk1vdmUoc2F2ZWRFdmVudCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBQYXJhbUV2ZW50OjpTZXRUYXJnZXQ6IHsKQEAg
LTI2Miw3ICsyNjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb1BhcmFtVGltZWxpbmU6OmNh
bmNlbEFuZEhvbGRBdFRpbWUoU2Vjb25kcyBjYW5jZWxUaW1lKQogICAgICAgICAgICAgLy8gd2Ug
Z2V0IHRoZXJlLgogICAgICAgICAgICAgKytjYW5jZWxsZWRFdmVudEluZGV4OwogCi0gICAgICAg
ICAgICBuZXdFdmVudCA9IFBhcmFtRXZlbnQ6OmNyZWF0ZUNhbmNlbFZhbHVlc0V2ZW50KGNhbmNl
bFRpbWUsIG51bGxwdHIpLm1vdmVUb1VuaXF1ZVB0cigpOworICAgICAgICAgICAgbmV3RXZlbnQg
PSBQYXJhbUV2ZW50OjpjcmVhdGVDYW5jZWxWYWx1ZXNFdmVudChjYW5jZWxUaW1lLCBXVEY6Om51
bGxvcHQpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI4NSw4ICsyODUs
OCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb1BhcmFtVGltZWxpbmU6OmNhbmNlbEFuZEhvbGRB
dFRpbWUoU2Vjb25kcyBjYW5jZWxUaW1lKQogICAgICAgICAgICAgICAgIGZsb2F0IGVuZFZhbHVl
ID0gdmFsdWVDdXJ2ZUF0VGltZShjYW5jZWxUaW1lLCBjYW5jZWxsZWRFdmVudC50aW1lKCksIGNh
bmNlbGxlZEV2ZW50LmR1cmF0aW9uKCksIGNhbmNlbGxlZEV2ZW50LmN1cnZlKCkuZGF0YSgpLCBj
YW5jZWxsZWRFdmVudC5jdXJ2ZSgpLnNpemUoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBSZXBs
YWNlIHRoZSBleGlzdGluZyBTZXRWYWx1ZUN1cnZlIHdpdGggdGhpcyBuZXcgb25lIHRoYXQgaXMg
aWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhlIGR1cmF0aW9uLgotICAgICAgICAgICAgICAgIG5ld0V2
ZW50ID0gbWFrZVVuaXF1ZVJlZjxQYXJhbUV2ZW50PihldmVudFR5cGUsIGNhbmNlbGxlZEV2ZW50
LnZhbHVlKCksIGNhbmNlbGxlZEV2ZW50LnRpbWUoKSwgY2FuY2VsbGVkRXZlbnQudGltZUNvbnN0
YW50KCksIG5ld0R1cmF0aW9uLCBWZWN0b3I8ZmxvYXQ+IHsgY2FuY2VsbGVkRXZlbnQuY3VydmUo
KSB9LCBjYW5jZWxsZWRFdmVudC5jdXJ2ZVBvaW50c1BlclNlY29uZCgpLCBlbmRWYWx1ZSwgbnVs
bHB0cikubW92ZVRvVW5pcXVlUHRyKCk7Ci0gICAgICAgICAgICAgICAgbmV3U2V0VmFsdWVFdmVu
dCA9IFBhcmFtRXZlbnQ6OmNyZWF0ZVNldFZhbHVlRXZlbnQoZW5kVmFsdWUsIGNhbmNlbGxlZEV2
ZW50LnRpbWUoKSArIG5ld0R1cmF0aW9uKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAgICAg
ICAgICBuZXdFdmVudCA9IFBhcmFtRXZlbnQgeyBldmVudFR5cGUsIGNhbmNlbGxlZEV2ZW50LnZh
bHVlKCksIGNhbmNlbGxlZEV2ZW50LnRpbWUoKSwgY2FuY2VsbGVkRXZlbnQudGltZUNvbnN0YW50
KCksIG5ld0R1cmF0aW9uLCBWZWN0b3I8ZmxvYXQ+IHsgY2FuY2VsbGVkRXZlbnQuY3VydmUoKSB9
LCBjYW5jZWxsZWRFdmVudC5jdXJ2ZVBvaW50c1BlclNlY29uZCgpLCBlbmRWYWx1ZSwgV1RGOjpu
dWxsb3B0IH07CisgICAgICAgICAgICAgICAgbmV3U2V0VmFsdWVFdmVudCA9IFBhcmFtRXZlbnQ6
OmNyZWF0ZVNldFZhbHVlRXZlbnQoZW5kVmFsdWUsIGNhbmNlbGxlZEV2ZW50LnRpbWUoKSArIG5l
d0R1cmF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAg
LTMwNiwxMSArMzA2LDExIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6
Y2FuY2VsQW5kSG9sZEF0VGltZShTZWNvbmRzIGNhbmNlbFRpbWUpCiAKICAgICAvLyBJbnNlcnQg
dGhlIG5ldyBldmVudCwgaWYgYW55LgogICAgIGlmIChuZXdFdmVudCkgewotICAgICAgICBhdXRv
IHJlc3VsdCA9IGluc2VydEV2ZW50KG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihX
VEZNb3ZlKG5ld0V2ZW50KSkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGluc2VydEV2ZW50KFdU
Rk1vdmUoKm5ld0V2ZW50KSk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICAgICAgaWYg
KG5ld1NldFZhbHVlRXZlbnQpIHsKLSAgICAgICAgICAgIGluc2VydEV2ZW50KG1ha2VVbmlxdWVS
ZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKG5ld1NldFZhbHVlRXZlbnQpKSk7CisgICAg
ICAgICAgICBpbnNlcnRFdmVudChXVEZNb3ZlKCpuZXdTZXRWYWx1ZUV2ZW50KSk7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgICAgICB9CkBAIC0zMjgsNyArMzI4LDcgQEAg
T3B0aW9uYWw8ZmxvYXQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250ZXh0VGltZShC
YXNlQXVkaW9Db250ZXh0JiBjb250ZXgKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0g
dHJ5SG9sZExvY2sobV9ldmVudHNMb2NrKTsKLSAgICAgICAgaWYgKCFsb2NrZXIgfHwgIW1fZXZl
bnRzLnNpemUoKSB8fCBTZWNvbmRzIHsgY29udGV4dC5jdXJyZW50VGltZSgpIH0gPCBtX2V2ZW50
c1swXS0+dGltZSgpKQorICAgICAgICBpZiAoIWxvY2tlciB8fCAhbV9ldmVudHMuc2l6ZSgpIHx8
IFNlY29uZHMgeyBjb250ZXh0LmN1cnJlbnRUaW1lKCkgfSA8IG1fZXZlbnRzWzBdLnRpbWUoKSkK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCkBAIC0zNjgsNyArMzY4
LDcgQEAgZmxvYXQgQXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1ZXNGb3JGcmFtZVJhbmdlSW1wbChz
aXplX3Qgc3RhcnRGcmFtZSwgc2l6ZV90IGVuZEYKICAgICBkb3VibGUgc2FtcGxpbmdQZXJpb2Qg
PSAxLiAvIHNhbXBsZVJhdGU7CiAKICAgICAvLyBSZXR1cm4gZGVmYXVsdCB2YWx1ZSBpZiB0aGVy
ZSBhcmUgbm8gZXZlbnRzIG1hdGNoaW5nIHRoZSBkZXNpcmVkIHRpbWUgcmFuZ2UuCi0gICAgaWYg
KCFtX2V2ZW50cy5zaXplKCkgfHwgZW5kRnJhbWUgKiBzYW1wbGluZ1BlcmlvZCA8PSBtX2V2ZW50
c1swXS0+dGltZSgpLnZhbHVlKCkpIHsKKyAgICBpZiAoIW1fZXZlbnRzLnNpemUoKSB8fCBlbmRG
cmFtZSAqIHNhbXBsaW5nUGVyaW9kIDw9IG1fZXZlbnRzWzBdLnRpbWUoKS52YWx1ZSgpKSB7CiAg
ICAgICAgIHN0ZDo6ZmlsbF9uKHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMsIGRlZmF1bHRWYWx1ZSk7
CiAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgICAgfQpAQCAtMzc5LDcgKzM3OSw3IEBA
IGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yRnJhbWVSYW5nZUltcGwoc2l6ZV90
IHN0YXJ0RnJhbWUsIHNpemVfdCBlbmRGCiAKICAgICAvLyBJZiBmaXJzdCBldmVudCBpcyBhZnRl
ciBzdGFydFRpbWUgdGhlbiBmaWxsIGluaXRpYWwgcGFydCBvZiB2YWx1ZXMgYnVmZmVyIHdpdGgg
ZGVmYXVsdFZhbHVlCiAgICAgLy8gdW50aWwgd2UgcmVhY2ggdGhlIGZpcnN0IGV2ZW50IHRpbWUu
Ci0gICAgYXV0byBmaXJzdEV2ZW50VGltZSA9IG1fZXZlbnRzWzBdLT50aW1lKCk7CisgICAgYXV0
byBmaXJzdEV2ZW50VGltZSA9IG1fZXZlbnRzWzBdLnRpbWUoKTsKICAgICBpZiAoZmlyc3RFdmVu
dFRpbWUudmFsdWUoKSA+IHN0YXJ0RnJhbWUgKiBzYW1wbGluZ1BlcmlvZCkgewogICAgICAgICBz
aXplX3QgZmlsbFRvRW5kRnJhbWUgPSBlbmRGcmFtZTsKICAgICAgICAgZG91YmxlIGZpcnN0RXZl
bnRGcmFtZSA9IGNlaWwoZmlyc3RFdmVudFRpbWUudmFsdWUoKSAqIHNhbXBsZVJhdGUpOwpAQCAt
NDAyLDggKzQwMiw4IEBAIGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yRnJhbWVS
YW5nZUltcGwoc2l6ZV90IHN0YXJ0RnJhbWUsIHNpemVfdCBlbmRGCiAgICAgLy8gYW5kIGtlZXBp
bmcgdHJhY2sgb2YgYSAiY3VycmVudCIgZXZlbnQgaW5kZXguCiAgICAgaW50IG4gPSBtX2V2ZW50
cy5zaXplKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuICYmIHdyaXRlSW5kZXggPCBudW1i
ZXJPZlZhbHVlczsgKytpKSB7Ci0gICAgICAgIGF1dG8qIGV2ZW50ID0gJm1fZXZlbnRzW2ldLmdl
dCgpOwotICAgICAgICBhdXRvKiBuZXh0RXZlbnQgPSBpIDwgbiAtIDEgPyAmbV9ldmVudHNbaSAr
IDFdLmdldCgpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0byogZXZlbnQgPSAmbV9ldmVudHNbaV07
CisgICAgICAgIGF1dG8qIG5leHRFdmVudCA9IGkgPCBuIC0gMSA/ICZtX2V2ZW50c1tpICsgMV0g
OiBudWxscHRyOwogCiAgICAgICAgIC8vIFdhaXQgdW50aWwgd2UgZ2V0IGEgbW9yZSByZWNlbnQg
ZXZlbnQuCiAgICAgICAgIGlmICghaXNFdmVudEN1cnJlbnQoKmV2ZW50LCBuZXh0RXZlbnQsIGN1
cnJlbnRGcmFtZSwgc2FtcGxlUmF0ZSkpCkBAIC01ODAsMTAgKzU4MCwxMCBAQCB2b2lkIEF1ZGlv
UGFyYW1UaW1lbGluZTo6cHJvY2Vzc0NhbmNlbFZhbHVlcyhjb25zdCBBdXRvbWF0aW9uU3RhdGUm
IGN1cnJlbnRTdGF0ZQogICAgIGVsc2UgewogICAgICAgICBkb3VibGUgY2FuY2VsRnJhbWUgPSBj
dXJyZW50U3RhdGUudGltZTEudmFsdWUoKSAqIGN1cnJlbnRTdGF0ZS5zYW1wbGVSYXRlOwogICAg
ICAgICBpZiAoY3VycmVudFN0YXRlLmV2ZW50SW5kZXggPj0gMSAmJiBjYW5jZWxGcmFtZSA8PSBj
dXJyZW50RnJhbWUgJiYgY3VycmVudEZyYW1lIDwgY2FuY2VsRnJhbWUgKyAxKSB7Ci0gICAgICAg
ICAgICBhdXRvIGxhc3RFdmVudFR5cGUgPSBtX2V2ZW50c1tjdXJyZW50U3RhdGUuZXZlbnRJbmRl
eCAtIDFdLT50eXBlKCk7CisgICAgICAgICAgICBhdXRvIGxhc3RFdmVudFR5cGUgPSBtX2V2ZW50
c1tjdXJyZW50U3RhdGUuZXZlbnRJbmRleCAtIDFdLnR5cGUoKTsKICAgICAgICAgICAgIGlmIChs
YXN0RXZlbnRUeXBlID09IFBhcmFtRXZlbnQ6OlNldFRhcmdldCkgewotICAgICAgICAgICAgICAg
IGZsb2F0IHRhcmdldCA9IG1fZXZlbnRzW2N1cnJlbnRTdGF0ZS5ldmVudEluZGV4IC0gMV0tPnZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgdGltZUNvbnN0YW50ID0gbV9ldmVudHNbY3Vy
cmVudFN0YXRlLmV2ZW50SW5kZXggLSAxXS0+dGltZUNvbnN0YW50KCk7CisgICAgICAgICAgICAg
ICAgZmxvYXQgdGFyZ2V0ID0gbV9ldmVudHNbY3VycmVudFN0YXRlLmV2ZW50SW5kZXggLSAxXS52
YWx1ZSgpOworICAgICAgICAgICAgICAgIGZsb2F0IHRpbWVDb25zdGFudCA9IG1fZXZlbnRzW2N1
cnJlbnRTdGF0ZS5ldmVudEluZGV4IC0gMV0udGltZUNvbnN0YW50KCk7CiAgICAgICAgICAgICAg
ICAgZmxvYXQgZGlzY3JldGVUaW1lQ29uc3RhbnQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oQXVkaW9V
dGlsaXRpZXM6OmRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZSh0aW1lQ29uc3RhbnQs
IGN1cnJlbnRTdGF0ZS5jb250cm9sUmF0ZSkpOwogICAgICAgICAgICAgICAgIHZhbHVlICs9ICh0
YXJnZXQgLSB2YWx1ZSkgKiBkaXNjcmV0ZVRpbWVDb25zdGFudDsKICAgICAgICAgICAgIH0KQEAg
LTgwMyw3ICs4MDMsNyBAQCB2b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6cHJvY2Vzc1NldFRhcmdl
dEZvbGxvd2VkQnlSYW1wKGludCBldmVudEluZGV4LCBQYXJhbUV2ZQogICAgIG1fZXZlbnRzW2V2
ZW50SW5kZXhdID0gUGFyYW1FdmVudDo6Y3JlYXRlU2V0VmFsdWVFdmVudCh2YWx1ZSwgU2Vjb25k
cyB7IGN1cnJlbnRGcmFtZSAvIHNhbXBsZVJhdGUgfSk7CiAKICAgICAvLyBVcGRhdGUgb3VyIHBv
aW50ZXIgdG8gdGhlIGN1cnJlbnQgZXZlbnQgYmVjYXVzZSB3ZSBqdXN0IGNoYW5nZWQgaXQuCi0g
ICAgZXZlbnQgPSAmbV9ldmVudHNbZXZlbnRJbmRleF0uZ2V0KCk7CisgICAgZXZlbnQgPSAmbV9l
dmVudHNbZXZlbnRJbmRleF07CiB9CiAKIApAQCAtODUwLDcgKzg1MCw3IEBAIHZvaWQgQXVkaW9Q
YXJhbVRpbWVsaW5lOjpoYW5kbGVDYW5jZWxWYWx1ZXMoUGFyYW1FdmVudCYgZXZlbnQsIFBhcmFt
RXZlbnQqIG5leHRFCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZW5kIHRpbWUgYW5kIHR5cGUgdG8g
cHJldGVuZCB0aGF0IHdlJ3JlIHJ1bm5pbmcKICAgICAgICAgLy8gdGhpcyBzYXZlZCBldmVudCB0
eXBlLgogICAgICAgICB0aW1lMiA9IG5leHRFdmVudC0+dGltZSgpOwotICAgICAgICBuZXh0RXZl
bnRUeXBlID0gc2F2ZWRFdmVudC0+dHlwZSgpOworICAgICAgICBuZXh0RXZlbnRUeXBlID0gc2F2
ZWRFdmVudC0+dHlwZTsKIAogICAgICAgICBpZiAobmV4dEV2ZW50LT5oYXNEZWZhdWx0Q2FuY2Vs
bGVkVmFsdWUoKSkgewogICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBlc3RhYmxpc2hlZCBh
IHZhbHVlIGZvciB0aGUgY2FuY2VsbGVkCkBAIC04NjEsMTIgKzg2MSwxMiBAQCB2b2lkIEF1ZGlv
UGFyYW1UaW1lbGluZTo6aGFuZGxlQ2FuY2VsVmFsdWVzKFBhcmFtRXZlbnQmIGV2ZW50LCBQYXJh
bUV2ZW50KiBuZXh0RQogICAgICAgICAgICAgLy8gRXhwb25lbnRpYWxSYW1wLCB3ZSBuZWVkIHRv
IGNvbXB1dGUgYSBuZXcgZW5kIHZhbHVlIGZvcgogICAgICAgICAgICAgLy8gdGhlIGV2ZW50IHNv
IHRoYXQgdGhlIGN1cnZlIHdvcmtzIGNvbnRpbnVlcyBhcyBpZiBpdCB3ZXJlCiAgICAgICAgICAg
ICAvLyBub3QgY2FuY2VsbGVkLgotICAgICAgICAgICAgc3dpdGNoIChzYXZlZEV2ZW50LT50eXBl
KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2F2ZWRFdmVudC0+dHlwZSkgewogICAgICAgICAg
ICAgY2FzZSBQYXJhbUV2ZW50OjpMaW5lYXJSYW1wVG9WYWx1ZToKLSAgICAgICAgICAgICAgICB2
YWx1ZTIgPSBsaW5lYXJSYW1wQXRUaW1lKG5leHRFdmVudC0+dGltZSgpLCB2YWx1ZTEsIHRpbWUx
LCBzYXZlZEV2ZW50LT52YWx1ZSgpLCBzYXZlZEV2ZW50LT50aW1lKCkpOworICAgICAgICAgICAg
ICAgIHZhbHVlMiA9IGxpbmVhclJhbXBBdFRpbWUobmV4dEV2ZW50LT50aW1lKCksIHZhbHVlMSwg
dGltZTEsIHNhdmVkRXZlbnQtPnZhbHVlLCBzYXZlZEV2ZW50LT50aW1lKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6RXhwb25lbnRpYWxSYW1w
VG9WYWx1ZToKLSAgICAgICAgICAgICAgICB2YWx1ZTIgPSBleHBvbmVudGlhbFJhbXBBdFRpbWUo
bmV4dEV2ZW50LT50aW1lKCksIHZhbHVlMSwgdGltZTEsIHNhdmVkRXZlbnQtPnZhbHVlKCksIHNh
dmVkRXZlbnQtPnRpbWUoKSk7CisgICAgICAgICAgICAgICAgdmFsdWUyID0gZXhwb25lbnRpYWxS
YW1wQXRUaW1lKG5leHRFdmVudC0+dGltZSgpLCB2YWx1ZTEsIHRpbWUxLCBzYXZlZEV2ZW50LT52
YWx1ZSwgc2F2ZWRFdmVudC0+dGltZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmU6CiAgICAgICAgICAgICBjYXNlIFBh
cmFtRXZlbnQ6OlNldFZhbHVlOgpAQCAtOTAwLDQyICs5MDAsNDIgQEAgdm9pZCBBdWRpb1BhcmFt
VGltZWxpbmU6OmhhbmRsZUNhbmNlbFZhbHVlcyhQYXJhbUV2ZW50JiBldmVudCwgUGFyYW1FdmVu
dCogbmV4dEUKICAgICB9CiB9CiAKLWF1dG8gQXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50
OjpjcmVhdGVTZXRWYWx1ZUV2ZW50KGZsb2F0IHZhbHVlLCBTZWNvbmRzIHRpbWUpIC0+IFVuaXF1
ZVJlZjxQYXJhbUV2ZW50PgorYXV0byBBdWRpb1BhcmFtVGltZWxpbmU6OlBhcmFtRXZlbnQ6OmNy
ZWF0ZVNldFZhbHVlRXZlbnQoZmxvYXQgdmFsdWUsIFNlY29uZHMgdGltZSkgLT4gUGFyYW1FdmVu
dAogewotICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFBhcmFtRXZlbnQ+KFBhcmFtRXZlbnQ6OlNl
dFZhbHVlLCB2YWx1ZSwgdGltZSwgMCwgU2Vjb25kcyB7IH0sIFZlY3RvcjxmbG9hdD4geyB9LCAw
LCAwLCBudWxscHRyKTsKKyAgICByZXR1cm4gUGFyYW1FdmVudCB7IFBhcmFtRXZlbnQ6OlNldFZh
bHVlLCB2YWx1ZSwgdGltZSwgMCwgU2Vjb25kcyB7IH0sIFZlY3RvcjxmbG9hdD4geyB9LCAwLCAw
LCBXVEY6Om51bGxvcHQgfTsKIH0KIAotYXV0byBBdWRpb1BhcmFtVGltZWxpbmU6OlBhcmFtRXZl
bnQ6OmNyZWF0ZUxpbmVhclJhbXBFdmVudChmbG9hdCB2YWx1ZSwgU2Vjb25kcyB0aW1lKSAtPiBV
bmlxdWVSZWY8UGFyYW1FdmVudD4KK2F1dG8gQXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50
OjpjcmVhdGVMaW5lYXJSYW1wRXZlbnQoZmxvYXQgdmFsdWUsIFNlY29uZHMgdGltZSkgLT4gUGFy
YW1FdmVudAogewotICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFBhcmFtRXZlbnQ+KFBhcmFtRXZl
bnQ6OkxpbmVhclJhbXBUb1ZhbHVlLCB2YWx1ZSwgdGltZSwgMCwgU2Vjb25kcyB7IH0sIFZlY3Rv
cjxmbG9hdD4geyB9LCAwLCAwLCBudWxscHRyKTsKKyAgICByZXR1cm4geyBQYXJhbUV2ZW50OjpM
aW5lYXJSYW1wVG9WYWx1ZSwgdmFsdWUsIHRpbWUsIDAsIFNlY29uZHMgeyB9LCBWZWN0b3I8Zmxv
YXQ+IHsgfSwgMCwgMCwgV1RGOjpudWxsb3B0IH07CiB9CiAKLWF1dG8gQXVkaW9QYXJhbVRpbWVs
aW5lOjpQYXJhbUV2ZW50OjpjcmVhdGVFeHBvbmVudGlhbFJhbXBFdmVudChmbG9hdCB2YWx1ZSwg
U2Vjb25kcyB0aW1lKSAtPiBVbmlxdWVSZWY8UGFyYW1FdmVudD4KK2F1dG8gQXVkaW9QYXJhbVRp
bWVsaW5lOjpQYXJhbUV2ZW50OjpjcmVhdGVFeHBvbmVudGlhbFJhbXBFdmVudChmbG9hdCB2YWx1
ZSwgU2Vjb25kcyB0aW1lKSAtPiBQYXJhbUV2ZW50CiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWVS
ZWY8UGFyYW1FdmVudD4oUGFyYW1FdmVudDo6RXhwb25lbnRpYWxSYW1wVG9WYWx1ZSwgdmFsdWUs
IHRpbWUsIDAsIFNlY29uZHMgeyB9LCBWZWN0b3I8ZmxvYXQ+IHsgfSwgMCwgMCwgbnVsbHB0cik7
CisgICAgcmV0dXJuIHsgUGFyYW1FdmVudDo6RXhwb25lbnRpYWxSYW1wVG9WYWx1ZSwgdmFsdWUs
IHRpbWUsIDAsIFNlY29uZHMgeyB9LCBWZWN0b3I8ZmxvYXQ+IHsgfSwgMCwgMCwgV1RGOjpudWxs
b3B0IH07CiB9CiAKLWF1dG8gQXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50OjpjcmVhdGVT
ZXRUYXJnZXRFdmVudChmbG9hdCB0YXJnZXQsIFNlY29uZHMgdGltZSwgZmxvYXQgdGltZUNvbnN0
YW50KSAtPiBVbmlxdWVSZWY8UGFyYW1FdmVudD4KK2F1dG8gQXVkaW9QYXJhbVRpbWVsaW5lOjpQ
YXJhbUV2ZW50OjpjcmVhdGVTZXRUYXJnZXRFdmVudChmbG9hdCB0YXJnZXQsIFNlY29uZHMgdGlt
ZSwgZmxvYXQgdGltZUNvbnN0YW50KSAtPiBQYXJhbUV2ZW50CiB7CiAgICAgLy8gVGhlIHRpbWUg
bGluZSBjb2RlIGRvZXMgbm90IGV4cGVjdCBhIHRpbWVDb25zdGFudCBvZiAwLiAoSXQgcmV0dXJu
cyBOYU4gb3IgSW5maW5pdHkgZHVlIHRvIGRpdmlzaW9uIGJ5IHplcm8uIFRoZSBjYWxsZXIKICAg
ICAvLyBzaG91bGQgaGF2ZSBjb252ZXJ0ZWQgdGhpcyB0byBhIFNldFZhbHVlRXZlbnQuCiAgICAg
QVNTRVJUKCEhdGltZUNvbnN0YW50KTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxQYXJhbUV2
ZW50PihQYXJhbUV2ZW50OjpTZXRUYXJnZXQsIHRhcmdldCwgdGltZSwgdGltZUNvbnN0YW50LCBT
ZWNvbmRzIHsgfSwgVmVjdG9yPGZsb2F0PiB7IH0sIDAsIDAsIG51bGxwdHIpOworICAgIHJldHVy
biB7IFBhcmFtRXZlbnQ6OlNldFRhcmdldCwgdGFyZ2V0LCB0aW1lLCB0aW1lQ29uc3RhbnQsIFNl
Y29uZHMgeyB9LCBWZWN0b3I8ZmxvYXQ+IHsgfSwgMCwgMCwgV1RGOjpudWxsb3B0IH07CiB9CiAK
LWF1dG8gQXVkaW9QYXJhbVRpbWVsaW5lOjpQYXJhbUV2ZW50OjpjcmVhdGVTZXRWYWx1ZUN1cnZl
RXZlbnQoVmVjdG9yPGZsb2F0PiYmIGN1cnZlLCBTZWNvbmRzIHRpbWUsIFNlY29uZHMgZHVyYXRp
b24pIC0+IFVuaXF1ZVJlZjxQYXJhbUV2ZW50PgorYXV0byBBdWRpb1BhcmFtVGltZWxpbmU6OlBh
cmFtRXZlbnQ6OmNyZWF0ZVNldFZhbHVlQ3VydmVFdmVudChWZWN0b3I8ZmxvYXQ+JiYgY3VydmUs
IFNlY29uZHMgdGltZSwgU2Vjb25kcyBkdXJhdGlvbikgLT4gUGFyYW1FdmVudAogewogICAgIGRv
dWJsZSBjdXJ2ZVBvaW50c1BlclNlY29uZCA9IChjdXJ2ZS5zaXplKCkgLSAxKSAvIGR1cmF0aW9u
LnZhbHVlKCk7CiAgICAgZmxvYXQgY3VydmVFbmRWYWx1ZSA9IGN1cnZlLmxhc3QoKTsKLSAgICBy
ZXR1cm4gbWFrZVVuaXF1ZVJlZjxQYXJhbUV2ZW50PihQYXJhbUV2ZW50OjpTZXRWYWx1ZUN1cnZl
LCAwLCB0aW1lLCAwLCBkdXJhdGlvbiwgV1RGTW92ZShjdXJ2ZSksIGN1cnZlUG9pbnRzUGVyU2Vj
b25kLCBjdXJ2ZUVuZFZhbHVlLCBudWxscHRyKTsKKyAgICByZXR1cm4geyBQYXJhbUV2ZW50OjpT
ZXRWYWx1ZUN1cnZlLCAwLCB0aW1lLCAwLCBkdXJhdGlvbiwgV1RGTW92ZShjdXJ2ZSksIGN1cnZl
UG9pbnRzUGVyU2Vjb25kLCBjdXJ2ZUVuZFZhbHVlLCBXVEY6Om51bGxvcHQgfTsKIH0KIAotYXV0
byBBdWRpb1BhcmFtVGltZWxpbmU6OlBhcmFtRXZlbnQ6OmNyZWF0ZUNhbmNlbFZhbHVlc0V2ZW50
KFNlY29uZHMgY2FuY2VsVGltZSwgc3RkOjp1bmlxdWVfcHRyPFBhcmFtRXZlbnQ+IHNhdmVkRXZl
bnQpIC0+IFVuaXF1ZVJlZjxQYXJhbUV2ZW50PgorYXV0byBBdWRpb1BhcmFtVGltZWxpbmU6OlBh
cmFtRXZlbnQ6OmNyZWF0ZUNhbmNlbFZhbHVlc0V2ZW50KFNlY29uZHMgY2FuY2VsVGltZSwgT3B0
aW9uYWw8U2F2ZWRFdmVudD4mJiBzYXZlZEV2ZW50KSAtPiBQYXJhbUV2ZW50CiB7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKICAgICBpZiAoc2F2ZWRFdmVudCkgewogICAgICAgICAvLyBUaGUgc2F2ZWRF
dmVudCBjYW4gb25seSBoYXZlIGNlcnRhaW4gZXZlbnQgdHlwZXMuIFZlcmlmeSB0aGF0LgotICAg
ICAgICBhdXRvIHNhdmVkRXZlbnRUeXBlID0gc2F2ZWRFdmVudC0+dHlwZSgpOworICAgICAgICBh
dXRvIHNhdmVkRXZlbnRUeXBlID0gc2F2ZWRFdmVudC0+dHlwZTsKIAogICAgICAgICBBU1NFUlQo
c2F2ZWRFdmVudFR5cGUgIT0gUGFyYW1FdmVudDo6TGFzdFR5cGUpOwogICAgICAgICBBU1NFUlQo
c2F2ZWRFdmVudFR5cGUgPT0gUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWUKQEAgLTk0Myw3
ICs5NDMsNyBAQCBhdXRvIEF1ZGlvUGFyYW1UaW1lbGluZTo6UGFyYW1FdmVudDo6Y3JlYXRlQ2Fu
Y2VsVmFsdWVzRXZlbnQoU2Vjb25kcyBjYW5jZWxUaW1lLAogICAgICAgICAgICAgfHwgc2F2ZWRF
dmVudFR5cGUgPT0gUGFyYW1FdmVudDo6U2V0VmFsdWVDdXJ2ZSk7CiAgICAgfQogI2VuZGlmCi0g
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UGFyYW1FdmVudD4oUGFyYW1FdmVudDo6Q2FuY2VsVmFs
dWVzLCAwLCBjYW5jZWxUaW1lLCAwLCBTZWNvbmRzIHsgfSwgVmVjdG9yPGZsb2F0PiB7IH0sIDAs
IDAsIFdURk1vdmUoc2F2ZWRFdmVudCkpOworICAgIHJldHVybiB7IFBhcmFtRXZlbnQ6OkNhbmNl
bFZhbHVlcywgMCwgY2FuY2VsVGltZSwgMCwgU2Vjb25kcyB7IH0sIFZlY3RvcjxmbG9hdD4geyB9
LCAwLCAwLCBXVEZNb3ZlKHNhdmVkRXZlbnQpIH07CiB9CiAKIGJvb2wgQXVkaW9QYXJhbVRpbWVs
aW5lOjppc0V2ZW50Q3VycmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCwgY29uc3QgUGFyYW1F
dmVudCogbmV4dEV2ZW50LCBzaXplX3QgY3VycmVudEZyYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkg
Y29uc3QKQEAgLTk5MCw3ICs5OTAsNyBAQCBib29sIEF1ZGlvUGFyYW1UaW1lbGluZTo6aGFzVmFs
dWVzKHNpemVfdCBzdGFydEZyYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkgY29uc3QKIAogICAgIC8v
IFJldHVybiBmYWxzZSBpZiB0aGVyZSBhcmUgbm8gZXZlbnRzIGluIHRoZSB0aW1lIHJhbmdlLgog
ICAgIGF1dG8gZW5kRnJhbWUgPSBzdGFydEZyYW1lICsgQXVkaW9VdGlsaXRpZXM6OnJlbmRlclF1
YW50dW1TaXplOwotICAgIHJldHVybiAhbV9ldmVudHMuaXNFbXB0eSgpICYmIGVuZEZyYW1lIC8g
c2FtcGxlUmF0ZSA+IG1fZXZlbnRzWzBdLT50aW1lKCkudmFsdWUoKTsKKyAgICByZXR1cm4gIW1f
ZXZlbnRzLmlzRW1wdHkoKSAmJiBlbmRGcmFtZSAvIHNhbXBsZVJhdGUgPiBtX2V2ZW50c1swXS50
aW1lKCkudmFsdWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgKaW5kZXgg
ZmI5MDkyOTRlNzhiOTliNDViNzcxNDExOTA1MTBkYjAzNGRiZWYwNy4uNGNkMWEwZjAxNDFjOTE4
MWI0ZmI2MzBjMTczNDY2MzNmMzgyODc5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oCkBAIC03NiwxNCArNzYsMjAgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIExhc3RUeXBlCiAgICAgICAgIH07CiAKLSAgICAgICAgc3Rh
dGljIFVuaXF1ZVJlZjxQYXJhbUV2ZW50PiBjcmVhdGVTZXRWYWx1ZUV2ZW50KGZsb2F0IHZhbHVl
LCBTZWNvbmRzIHRpbWUpOwotICAgICAgICBzdGF0aWMgVW5pcXVlUmVmPFBhcmFtRXZlbnQ+IGNy
ZWF0ZUxpbmVhclJhbXBFdmVudChmbG9hdCB2YWx1ZSwgU2Vjb25kcyB0aW1lKTsKLSAgICAgICAg
c3RhdGljIFVuaXF1ZVJlZjxQYXJhbUV2ZW50PiBjcmVhdGVFeHBvbmVudGlhbFJhbXBFdmVudChm
bG9hdCB2YWx1ZSwgU2Vjb25kcyB0aW1lKTsKLSAgICAgICAgc3RhdGljIFVuaXF1ZVJlZjxQYXJh
bUV2ZW50PiBjcmVhdGVTZXRUYXJnZXRFdmVudChmbG9hdCB0YXJnZXQsIFNlY29uZHMgdGltZSwg
ZmxvYXQgdGltZUNvbnN0YW50KTsKLSAgICAgICAgc3RhdGljIFVuaXF1ZVJlZjxQYXJhbUV2ZW50
PiBjcmVhdGVTZXRWYWx1ZUN1cnZlRXZlbnQoVmVjdG9yPGZsb2F0PiYmIGN1cnZlLCBTZWNvbmRz
IHRpbWUsIFNlY29uZHMgZHVyYXRpb24pOwotICAgICAgICBzdGF0aWMgVW5pcXVlUmVmPFBhcmFt
RXZlbnQ+IGNyZWF0ZUNhbmNlbFZhbHVlc0V2ZW50KFNlY29uZHMgY2FuY2VsVGltZSwgc3RkOjp1
bmlxdWVfcHRyPFBhcmFtRXZlbnQ+IHNhdmVkRXZlbnQpOwotCi0gICAgICAgIFBhcmFtRXZlbnQo
VHlwZSB0eXBlLCBmbG9hdCB2YWx1ZSwgU2Vjb25kcyB0aW1lLCBmbG9hdCB0aW1lQ29uc3RhbnQs
IFNlY29uZHMgZHVyYXRpb24sIFZlY3RvcjxmbG9hdD4mJiBjdXJ2ZSwgZG91YmxlIGN1cnZlUG9p
bnRzUGVyU2Vjb25kLCBmbG9hdCBjdXJ2ZUVuZFZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8UGFyYW1F
dmVudD4gc2F2ZWRFdmVudCkKKyAgICAgICAgc3RydWN0IFNhdmVkRXZlbnQgeworICAgICAgICAg
ICAgVHlwZSB0eXBlOworICAgICAgICAgICAgZmxvYXQgdmFsdWU7CisgICAgICAgICAgICBTZWNv
bmRzIHRpbWU7CisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIFBhcmFtRXZlbnQgY3JlYXRl
U2V0VmFsdWVFdmVudChmbG9hdCB2YWx1ZSwgU2Vjb25kcyB0aW1lKTsKKyAgICAgICAgc3RhdGlj
IFBhcmFtRXZlbnQgY3JlYXRlTGluZWFyUmFtcEV2ZW50KGZsb2F0IHZhbHVlLCBTZWNvbmRzIHRp
bWUpOworICAgICAgICBzdGF0aWMgUGFyYW1FdmVudCBjcmVhdGVFeHBvbmVudGlhbFJhbXBFdmVu
dChmbG9hdCB2YWx1ZSwgU2Vjb25kcyB0aW1lKTsKKyAgICAgICAgc3RhdGljIFBhcmFtRXZlbnQg
Y3JlYXRlU2V0VGFyZ2V0RXZlbnQoZmxvYXQgdGFyZ2V0LCBTZWNvbmRzIHRpbWUsIGZsb2F0IHRp
bWVDb25zdGFudCk7CisgICAgICAgIHN0YXRpYyBQYXJhbUV2ZW50IGNyZWF0ZVNldFZhbHVlQ3Vy
dmVFdmVudChWZWN0b3I8ZmxvYXQ+JiYgY3VydmUsIFNlY29uZHMgdGltZSwgU2Vjb25kcyBkdXJh
dGlvbik7CisgICAgICAgIHN0YXRpYyBQYXJhbUV2ZW50IGNyZWF0ZUNhbmNlbFZhbHVlc0V2ZW50
KFNlY29uZHMgY2FuY2VsVGltZSwgT3B0aW9uYWw8U2F2ZWRFdmVudD4mJik7CisKKyAgICAgICAg
UGFyYW1FdmVudChUeXBlIHR5cGUsIGZsb2F0IHZhbHVlLCBTZWNvbmRzIHRpbWUsIGZsb2F0IHRp
bWVDb25zdGFudCwgU2Vjb25kcyBkdXJhdGlvbiwgVmVjdG9yPGZsb2F0PiYmIGN1cnZlLCBkb3Vi
bGUgY3VydmVQb2ludHNQZXJTZWNvbmQsIGZsb2F0IGN1cnZlRW5kVmFsdWUsIE9wdGlvbmFsPFNh
dmVkRXZlbnQ+JiYgc2F2ZWRFdmVudCkKICAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAg
ICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgICAgICAgICAsIG1fdGltZSh0aW1lKQpAQCAt
MTAyLDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZsb2F0IHRpbWVDb25zdGFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGltZUNvbnN0YW50OyB9CiAgICAgICAgIFNlY29uZHMgZHVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIGN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJ2ZTsgfQotICAgICAgICBQYXJhbUV2ZW50
KiBzYXZlZEV2ZW50KCkgeyByZXR1cm4gbV9zYXZlZEV2ZW50LmdldCgpOyB9CisgICAgICAgIFNh
dmVkRXZlbnQqIHNhdmVkRXZlbnQoKSB7IHJldHVybiBtX3NhdmVkRXZlbnQgPyAmbV9zYXZlZEV2
ZW50LnZhbHVlKCkgOiBudWxscHRyOyB9CiAKICAgICAgICAgdm9pZCBzZXRDYW5jZWxsZWRWYWx1
ZShmbG9hdCBjYW5jZWxsZWRWYWx1ZSkKICAgICAgICAgewpAQCAtMTQ5LDcgKzE1NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIC8vIGhvbGRzIHRoZSBldmVudCB0aGF0IGlzIGJlaW5nIGNhbmNlbGxl
ZCwgc28gdGhhdCBwcm9jZXNzaW5nIGNhbgogICAgICAgICAvLyBjb250aW51ZSBhcyBpZiB0aGUg
ZXZlbnQgc3RpbGwgZXhpc3RlZCB1cCB1bnRpbCB3ZSByZWFjaCB0aGUgYWN0dWFsCiAgICAgICAg
IC8vIHNjaGVkdWxlZCBjYW5jZWwgdGltZS4KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcmFt
RXZlbnQ+IG1fc2F2ZWRFdmVudDsKKyAgICAgICAgT3B0aW9uYWw8U2F2ZWRFdmVudD4gbV9zYXZl
ZEV2ZW50OwogICAgIH07CiAKICAgICAvLyBTdGF0ZSBvZiB0aGUgdGltZWxpbmUgZm9yIHRoZSBj
dXJyZW50IGV2ZW50LgpAQCAtMTg0LDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAg
IHZvaWQgcmVtb3ZlQ2FuY2VsbGVkRXZlbnRzKHNpemVfdCBmaXJzdEV2ZW50VG9SZW1vdmUpOwot
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGluc2VydEV2ZW50KFVuaXF1ZVJlZjxQYXJhbUV2ZW50Pik7
CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gaW5zZXJ0RXZlbnQoUGFyYW1FdmVudCYmKTsKICAgICBm
bG9hdCB2YWx1ZXNGb3JGcmFtZVJhbmdlSW1wbChzaXplX3Qgc3RhcnRGcmFtZSwgc2l6ZV90IGVu
ZEZyYW1lLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJl
ck9mVmFsdWVzLCBkb3VibGUgc2FtcGxlUmF0ZSwgZG91YmxlIGNvbnRyb2xSYXRlKTsKICAgICBm
bG9hdCBsaW5lYXJSYW1wQXRUaW1lKFNlY29uZHMgdCwgZmxvYXQgdmFsdWUxLCBTZWNvbmRzIHRp
bWUxLCBmbG9hdCB2YWx1ZTIsIFNlY29uZHMgdGltZTIpOwogICAgIGZsb2F0IGV4cG9uZW50aWFs
UmFtcEF0VGltZShTZWNvbmRzIHQsIGZsb2F0IHZhbHVlMSwgU2Vjb25kcyB0aW1lMSwgZmxvYXQg
dmFsdWUyLCBTZWNvbmRzIHRpbWUyKTsKQEAgLTE5OSw3ICsyMDUsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcHJvY2Vzc1NldFZhbHVlQ3VydmUoY29uc3QgQXV0b21hdGlvblN0YXRlJiwgZmxvYXQq
IHZhbHVlcywgc2l6ZV90JiBjdXJyZW50RnJhbWUsIGZsb2F0JiB2YWx1ZSwgdW5zaWduZWQmIHdy
aXRlSW5kZXgpOwogICAgIHZvaWQgcHJvY2Vzc1NldFRhcmdldEZvbGxvd2VkQnlSYW1wKGludCBl
dmVudEluZGV4LCBQYXJhbUV2ZW50KiYsIFBhcmFtRXZlbnQ6OlR5cGUgbmV4dEV2ZW50VHlwZSwg
c2l6ZV90IGN1cnJlbnRGcmFtZSwgZG91YmxlIHNhbXBsaW5nUGVyaW9kLCBkb3VibGUgY29udHJv
bFJhdGUsIGZsb2F0JiB2YWx1ZSk7CiAKLSAgICBWZWN0b3I8VW5pcXVlUmVmPFBhcmFtRXZlbnQ+
PiBtX2V2ZW50czsKKyAgICBWZWN0b3I8UGFyYW1FdmVudD4gbV9ldmVudHM7CiAKICAgICBtdXRh
YmxlIExvY2sgbV9ldmVudHNMb2NrOwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>