<?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>165758</bug_id>
          
          <creation_ts>2016-12-12 09:43:58 -0800</creation_ts>
          <short_desc>GC scheduler should avoid consecutive pauses</short_desc>
          <delta_ts>2016-12-13 13:53:23 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1259075</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 09:43:58 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259076</commentid>
    <comment_count>1</comment_count>
      <attachid>296927</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 09:46:40 -0800</bug_when>
    <thetext>Created attachment 296927
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259094</commentid>
    <comment_count>2</comment_count>
      <attachid>296927</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-12-12 10:04:51 -0800</bug_when>
    <thetext>Comment on attachment 296927
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=296927&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This factors out the scheduler from a bunch of lambdas and closed-over variables in

Should this read &quot;... from the scheduler a bunch ...&quot;?

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        still had time during a mutator timeslice. This greatly splay-latency. I&apos;m still testing

Fix the sentence &quot;This greatly splay-latency.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259096</commentid>
    <comment_count>3</comment_count>
      <attachid>296927</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-12 10:05:22 -0800</bug_when>
    <thetext>Comment on attachment 296927
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=296927&amp;action=review

&gt; Source/JavaScriptCore/heap/SpaceTimeScheduler.cpp:111
&gt; +        std::max(
&gt; +            m_bytesAllocatedThisCycleAtTheBeginning,
&gt; +            static_cast&lt;double&gt;(heap.m_maxEdenSize)))

I like writing it this way:

    std::max&lt;double&gt;( ... &lt;&lt;no static_cast needed here&gt;&gt; heap.m_maxEdenSize))

&gt; Source/JavaScriptCore/heap/SpaceTimeScheduler.h:39
&gt; +        Decision() { }

This isn’t needed. If we leave it out, it gets generated with exactly the same contents as if we write this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259115</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 10:50:58 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 296927 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=296927&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SpaceTimeScheduler.cpp:111
&gt; &gt; +        std::max(
&gt; &gt; +            m_bytesAllocatedThisCycleAtTheBeginning,
&gt; &gt; +            static_cast&lt;double&gt;(heap.m_maxEdenSize)))
&gt; 
&gt; I like writing it this way:
&gt; 
&gt;     std::max&lt;double&gt;( ... &lt;&lt;no static_cast needed here&gt;&gt; heap.m_maxEdenSize))

That&apos;s so much better!  I never thought to specialize max explicitly.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SpaceTimeScheduler.h:39
&gt; &gt; +        Decision() { }
&gt; 
&gt; This isn’t needed. If we leave it out, it gets generated with exactly the
&gt; same contents as if we write this.

Thanks!  I always forget the exact rules.

Maybe I wrote too much Java in a past life.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259194</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 14:05:26 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 296927 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=296927&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; +        This factors out the scheduler from a bunch of lambdas and closed-over variables in
&gt; 
&gt; Should this read &quot;... from the scheduler a bunch ...&quot;?
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:14
&gt; &gt; +        still had time during a mutator timeslice. This greatly splay-latency. I&apos;m still testing
&gt; 
&gt; Fix the sentence &quot;This greatly splay-latency.&quot;

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259195</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 14:07:52 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/209727</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259197</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 14:08:13 -0800</bug_when>
    <thetext>*** Bug 164940 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259521</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-12-13 13:34:40 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Landed in https://trac.webkit.org/changeset/209727

I am still confirming but this was likely a ~4% Speedometer regression on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259522</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-13 13:38:07 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; Landed in https://trac.webkit.org/changeset/209727
&gt; 
&gt; I am still confirming but this was likely a ~4% Speedometer regression on
&gt; Mac.

The policy change in this patch was already rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259523</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-12-13 13:40:47 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; Landed in https://trac.webkit.org/changeset/209727
&gt; &gt; 
&gt; &gt; I am still confirming but this was likely a ~4% Speedometer regression on
&gt; &gt; Mac.
&gt; 
&gt; The policy change in this patch was already rolled out.

Could you point me to the revision of the rollout please so I can confirm the progression then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259525</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-13 13:53:23 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; Landed in https://trac.webkit.org/changeset/209727
&gt; &gt; &gt; 
&gt; &gt; &gt; I am still confirming but this was likely a ~4% Speedometer regression on
&gt; &gt; &gt; Mac.
&gt; &gt; 
&gt; &gt; The policy change in this patch was already rolled out.
&gt; 
&gt; Could you point me to the revision of the rollout please so I can confirm
&gt; the progression then?

https://trac.webkit.org/changeset/209763</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296927</attachid>
            <date>2016-12-12 09:46:40 -0800</date>
            <delta_ts>2016-12-12 10:04:51 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25606</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5NzEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE2LTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2NoZWR1bGVyIHNob3VsZCBhdm9pZCBjb25zZWN1dGl2ZSBwYXVzZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc1OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBmYWN0b3Jz
IG91dCB0aGUgc2NoZWR1bGVyIGZyb20gYSBidW5jaCBvZiBsYW1iZGFzIGFuZCBjbG9zZWQtb3Zl
ciB2YXJpYWJsZXMgaW4KKyAgICAgICAgSGVhcDo6bWFya1RvRml4cG9pbnQgdG8gYW4gYWN0dWFs
IGNsYXNzLiBJdCdzIGNhbGxlZCB0aGUgU3BhY2VUaW1lU2NoZWR1bGVyIGJlY2F1c2UgaXQKKyAg
ICAgICAgaXMgYSBsaW5lYXIgY29udHJvbGxlciB0aGF0IHRpZXMgdGhlIGFtb3VudCBvZiB0aW1l
IHlvdSBzcGVuZCBvbiB0aGluZ3MgdG8gdGhlIGFtb3VudCBvZgorICAgICAgICBzcGFjZSB5b3Ug
YXJlIHVzaW5nLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCB1c2VzIHRoaXMgcmVmYWN0
b3JpbmcgdG8gZml4IGEgYnVnIHdoZXJlIHRoZSBHQyB3b3VsZCBwYXVzZSBldmVuIHRob3VnaCB3
ZQorICAgICAgICBzdGlsbCBoYWQgdGltZSBkdXJpbmcgYSBtdXRhdG9yIHRpbWVzbGljZS4gVGhp
cyBncmVhdGx5IHNwbGF5LWxhdGVuY3kuIEknbSBzdGlsbCB0ZXN0aW5nCisgICAgICAgIGhvdyBp
dCBhZmZlY3RzIG90aGVyIHRoaW5ncy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQpOgor
ICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246
OnRhcmdldE11dGF0b3JVdGlsaXphdGlvbik6CisgICAgICAgIChKU0M6OlNwYWNlVGltZVNjaGVk
dWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6ZWxhcHNlZEluUGVyaW9kKToKKyAgICAg
ICAgKEpTQzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6cGhhc2UpOgorICAgICAgICAo
SlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjpzaG91bGRCZVJlc3VtZWQpOgorICAg
ICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9SZXN1bWUpOgor
ICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKToK
KyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2NoZWR1bGVyOjpTcGFjZVRpbWVTY2hlZHVsZXIpOgor
ICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hlZHVsZXI6OnNuYXBQaGFzZSk6CisgICAgICAgIChK
U0M6OlNwYWNlVGltZVNjaGVkdWxlcjo6Y3VycmVudERlY2lzaW9uKToKKyAgICAgICAgKiBoZWFw
L1NwYWNlVGltZVNjaGVkdWxlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6U3BhY2VUaW1lU2No
ZWR1bGVyOjpEZWNpc2lvbjo6RGVjaXNpb24pOgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVTY2hl
ZHVsZXI6OkRlY2lzaW9uOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKiBydW50aW1lL09wdGlv
bnMuaDoKKwogMjAxNi0xMi0xMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBGVEw6IER1bXBpbmcgZGlzYXNzZW1ibHkgcmVxdWlyZXMgdGhhdCBjb2RlIG9y
aWdpbiBpcyBzZXQgd2hlbiBtYWtpbmcgcG9seW1vcnBoaWMgdGFpbCBjYWxscy4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwOTY5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk3LDYg
KzQ5Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9NYXJrZWRTcGFj
ZS5jcHAKICAgICBoZWFwL011dGF0b3JTdGF0ZS5jcHAKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmNw
cAorICAgIGhlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAogICAgIGhlYXAvU3RvcElmTmVjZXNz
YXJ5VGltZXIuY3BwCiAgICAgaGVhcC9WaXNpdFJhY2VLZXkuY3BwCiAgICAgaGVhcC9XZWFrLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTY5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NTMsNiArNzUzLDggQEAKIAkJMEZEREJGQjUxNjY2
RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIxNjY2RUVENTAwQzU1
RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9OwogCQkwRkREQkZCNjE2
NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1
RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJMEZERTg3RjkxREZE
MEM3NjAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxD
b250YWluZXIuY3BwICovOyB9OworCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VU
aW1lU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lU2NoZWR1bGVyLmggKi87
IH07CisJCTBGREU4N0ZEMURGRTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RkEx
REZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5jcHAgKi87IH07CiAJCTBGREY2
N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQu
aCAqLzsgfTsKIAkJMEZERjY3RDMxRDlDNkQyQTAwMUI5ODI1IC8qIEIzS2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdEMDFEOUM2MDg2
MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLzsgfTsKIAkJMEZERjY3RDYxRDlEQzQ0MDAwMUI5ODI1
IC8qIEFpcktpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuY3BwICovOyB9OwpAQCAt
MzE4MCw2ICszMTgyLDggQEAKIAkJMEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIz
MTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENlbGxDb250YWluZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRFODdGQTFERkU2RTUwMDA2NEMzOTAgLyog
U3BhY2VUaW1lU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNwYWNlVGltZVNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VUaW1lU2NoZWR1bGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREY2N0QwMUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNLaW5kLmNwcDsgcGF0
aCA9IGIzL0IzS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREY2N0Qx
MUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNLaW5kLmg7IHBhdGggPSBiMy9CM0tpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZERjY3RDQxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyS2luZC5jcHA7IHBhdGggPSBiMy9haXIv
QWlyS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NzM0LDYgKzU3Mzgs
OCBAQAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8s
CiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJ
MEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLAorCQkJ
CTBGREU4N0ZBMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuY3BwICovLAor
CQkJCTBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuaCAqLywK
IAkJCQkwRjdDRjk1MDFEQzAyN0Q3MDA5OENDMTIgLyogU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
ICovLAogCQkJCTBGN0NGOTUxMURDMDI3RDcwMDk4Q0MxMiAvKiBTdG9wSWZOZWNlc3NhcnlUaW1l
ci5oICovLAogCQkJCTE0MkUzMTMyMTM0RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCAqLywKQEAg
LTg2MTgsNiArODYyNCw3IEBACiAJCQkJQkMxOEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3Ry
aW5nUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk0M0FCMjZDNjFDMUE1MzU5MDBEODJBRTYgLyog
QjNNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JGMzFEQjU4REFEMDBCM0U3
MzYgLyogV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZVNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVmQ0YuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzNTA3MDhBMURDNDlCQkYwMDg5QkNENiAvKiBET01KSVRTaWdu
YXR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjhENEE4MTc3QjcxQzgwMDA3RkEzQyAvKiBK
U1N0cmluZ1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTc4OCw2ICs5Nzk1LDcgQEAK
IAkJCQkwRkQ4QTMyNTE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3OTExNDZBNkY3MTAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRUIxNzE3OEU3MzAwNjkw
QzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGREU4N0ZEMURG
RTZFNTQwMDY0QzM5MCAvKiBTcGFjZVRpbWVTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDMDk3OTIxNDZBNkY3MzAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjRERTFEMTFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmlnaW5EdW1w
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFM0EwNkIxMUMxMENCODQwMDM5MEZERCAvKiBKSVRC
aXRBbmRHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA5Njk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRl
ICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5o
IgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKKyNpbmNsdWRlICJTcGFjZVRpbWVTY2hlZHVs
ZXIuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3Nh
cnlUaW1lci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgpAQCAtNTYwLDEwMCArNTYx
LDExIEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKIAogICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwogCi0gICAgTW9ub3Rvbmlj
VGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIAotICAgIGNvbnN0
IFNlY29uZHMgcGVyaW9kID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhPcHRpb25zOjpjb25j
dXJyZW50R0NQZXJpb2RNUygpKTsKLSAgICAKLSAgICBjb25zdCBkb3VibGUgYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyA9IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0g
ICAgY29uc3QgZG91YmxlIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQgPQotICAgICAg
ICBPcHRpb25zOjpjb25jdXJyZW50R0NNYXhIZWFkcm9vbSgpICoKLSAgICAgICAgc3RkOjptYXgo
Ci0gICAgICAgICAgICBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX21heEVkZW5TaXplKSk7Ci0gICAgZG91Ymxl
IGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgIE1vbm90b25pY1RpbWUgbm93Rm9yU2NoZWR1
bGluZzsKLSAgICAKLSAgICBhdXRvIGNhY2hlU2NoZWR1bGluZ1N0YXRzID0gWyZdICgpIHsKLSAg
ICAgICAgYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
OwotICAgICAgICBub3dGb3JTY2hlZHVsaW5nID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAg
fTsKLSAgICAKLSAgICBjYWNoZVNjaGVkdWxpbmdTdGF0cygpOwotICAgIAotICAgIGF1dG8gdGFy
Z2V0TXV0YXRvclV0aWxpemF0aW9uID0gWyZdICgpIC0+IGRvdWJsZSB7Ci0gICAgICAgIGRvdWJs
ZSBoZWFkcm9vbUZ1bGxuZXNzID0KLSAgICAgICAgICAgIChieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZSAtIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcpIC8KLSAgICAgICAgICAg
IChieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kIC0gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3lj
bGVBdFRoZUJlZ2lubmluZyk7Ci0gICAgICAgIAotICAgICAgICAvLyBoZWFkcm9vbUZ1bGxuZXNz
IGNhbiBiZSBOYU4gYW5kIG90aGVyIGludGVyZXN0aW5nIHRoaW5ncyBpZgotICAgICAgICAvLyBi
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNlZSB0aGF0
IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKLSAgICAgICAgLy8gZGVmZW5kcyBhZ2FpbnN0IGFs
bCBmbG9hdGluZyBwb2ludCBkcmFnb25zLgotICAgICAgICAKLSAgICAgICAgaWYgKCEoaGVhZHJv
b21GdWxsbmVzcyA+PSAwKSkKLSAgICAgICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAwOwotICAg
ICAgICBpZiAoIShoZWFkcm9vbUZ1bGxuZXNzIDw9IDEpKQotICAgICAgICAgICAgaGVhZHJvb21G
dWxsbmVzcyA9IDE7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbXV0YXRvclV0aWxpemF0aW9u
ID0gMSAtIGhlYWRyb29tRnVsbG5lc3M7Ci0gICAgICAgIAotICAgICAgICAvLyBTY2FsZSB0aGUg
bXV0YXRvciB1dGlsaXphdGlvbiBpbnRvIHRoZSBwZXJtaXR0ZWQgd2luZG93LgotICAgICAgICBt
dXRhdG9yVXRpbGl6YXRpb24gPQotICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JV
dGlsaXphdGlvbigpICsKLSAgICAgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiAqICgKLSAgICAg
ICAgICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgLQotICAgICAg
ICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gbXV0YXRvclV0aWxpemF0aW9uOwotICAgIH07Ci0gICAgCi0gICAg
YXV0byB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbiA9IFsmXSAoKSAtPiBkb3VibGUgewotICAg
ICAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOwotICAgIH07Ci0gICAg
Ci0gICAgYXV0byBlbGFwc2VkSW5QZXJpb2QgPSBbJl0gKCkgLT4gU2Vjb25kcyB7Ci0gICAgICAg
IHJldHVybiAobm93Rm9yU2NoZWR1bGluZyAtIGluaXRpYWxUaW1lKSAlIHBlcmlvZDsKLSAgICB9
OwotICAgIAotICAgIGF1dG8gcGhhc2UgPSBbJl0gKCkgLT4gZG91YmxlIHsKLSAgICAgICAgcmV0
dXJuIGVsYXBzZWRJblBlcmlvZCgpIC8gcGVyaW9kOwotICAgIH07Ci0gICAgCi0gICAgYXV0byBz
aG91bGRCZVJlc3VtZWQgPSBbJl0gKCkgLT4gYm9vbCB7Ci0gICAgICAgIGlmIChPcHRpb25zOjpj
b2xsZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQotICAgICAgICAgICAgcmV0dXJuIHBoYXNlKCkg
PD0gdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgICAgIHJldHVybiBwaGFzZSgpID4g
dGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKLSAgICB9OwotICAgIAotICAgIGF1dG8gdGlt
ZVRvUmVzdW1lID0gWyZdICgpIC0+IE1vbm90b25pY1RpbWUgewotICAgICAgICBBU1NFUlQoIXNo
b3VsZEJlUmVzdW1lZCgpKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJl
c3VtZUZpcnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gbm93Rm9yU2NoZWR1bGluZyAtIGVsYXBz
ZWRJblBlcmlvZCgpICsgcGVyaW9kOwotICAgICAgICByZXR1cm4gbm93Rm9yU2NoZWR1bGluZyAt
IGVsYXBzZWRJblBlcmlvZCgpICsgcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24o
KTsKLSAgICB9OwotICAgIAotICAgIGF1dG8gdGltZVRvU3RvcCA9IFsmXSAoKSAtPiBNb25vdG9u
aWNUaW1lIHsKLSAgICAgICAgQVNTRVJUKHNob3VsZEJlUmVzdW1lZCgpKTsKLSAgICAgICAgaWYg
KE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCi0gICAgICAgICAgICByZXR1
cm4gbm93Rm9yU2NoZWR1bGluZyAtIGVsYXBzZWRJblBlcmlvZCgpICsgcGVyaW9kICogdGFyZ2V0
TXV0YXRvclV0aWxpemF0aW9uKCk7Ci0gICAgICAgIHJldHVybiBub3dGb3JTY2hlZHVsaW5nIC0g
ZWxhcHNlZEluUGVyaW9kKCkgKyBwZXJpb2Q7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBBZGp1c3Qg
dGhlIHRhcmdldCBleHRyYSBwYXVzZSByYXRpbyBhcyBuZWNlc3NhcnkuCi0gICAgZG91YmxlIHJh
dGVPZkNvbGxlY3Rpb24gPQotICAgICAgICAobV9sYXN0R0NFbmRUaW1lIC0gbV9sYXN0R0NTdGFy
dFRpbWUpIC8KLSAgICAgICAgKG1fY3VycmVudEdDU3RhcnRUaW1lIC0gbV9sYXN0R0NTdGFydFRp
bWUpOwotICAgIAotICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICBkYXRhTG9nKCJj
cj0iLCByYXRlT2ZDb2xsZWN0aW9uLCAiICIpOwotICAgIAotICAgIC8vIEZJWE1FOiBEZXRlcm1p
bmUgaWYgdGhpcyBpcyB1c2VmdWwgb3IgZ2V0IHJpZCBvZiBpdC4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0OTQwCi0gICAgZG91YmxlIGV4dHJhUGF1
c2VSYXRpbyA9IE9wdGlvbnM6OmluaXRpYWxFeHRyYVBhdXNlUmF0aW8oKTsKKyAgICBTcGFjZVRp
bWVTY2hlZHVsZXIgc2NoZWR1bGVyKCp0aGlzKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGl0
ZXJhdGlvbiA9IDE7IDsgKytpdGVyYXRpb24pIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJpIyIsIGl0ZXJhdGlvbiwgIiAiKTsKLSAgICAgICAg
TW9ub3RvbmljVGltZSB0b3BPZkxvb3AgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICAgICAg
ewogICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAg
ICBtX29iamVjdFNwYWNlLnByZXBhcmVGb3JDb25zZXJ2YXRpdmVTY2FuKCk7CkBAIC03MTYsOCAr
NjI4LDcgQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgICAg
ICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmlzRW1wdHko
KSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgICAgICBjYWNoZVNjaGVkdWxpbmdTdGF0cygp
OwotICAgICAgICAgICAgZGF0YUxvZyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jb2xsZWN0b3JN
YXJrU3RhY2soKS5zaXplKCksICIrIiwgbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiLCBhPSIsIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLyAxMDI0LCAiIGtiLCBiPSIsIG1fYmFycmllcnNFeGVj
dXRlZCwgIiwgbXU9IiwgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAg
ICAgICBkYXRhTG9nKG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNvbGxlY3Rvck1hcmtTdGFjaygp
LnNpemUoKSwgIisiLCBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIsIGE9IiwgbV9ieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZSAvIDEwMjQsICIga2IsIGI9IiwgbV9iYXJyaWVyc0V4ZWN1dGVkLCAiLCBt
dT0iLCBzY2hlZHVsZXIuY3VycmVudERlY2lzaW9uKCkudGFyZ2V0TXV0YXRvclV0aWxpemF0aW9u
KCksICIgIik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8g
dGhpcyB0byBjb25zZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxv
Y2tzIHRoYXQgYXJlCkBAIC03MzksMzEgKzY1MCwzMSBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBv
aW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9n
Z2luZzo6VmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVzOlxu
IiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgICAgICAKLSAgICAgICAgTW9ub3Rvbmlj
VGltZSBiZWZvcmVDb252ZXJnZW5jZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgICAgICAK
ICAgICAgICAgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKICAgICAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb2xsZWN0b3JUaW1lc2xpY2luZygpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdlIHlpZWxkIHRvIHRoZSBtdXRhdG9yLCB3ZSBz
aG91bGQgZG8gR0Mgd29yayBwcm9wb3J0aW9uYWwgdG8gdGhlIHRpbWUgd2UKLSAgICAgICAgICAg
ICAgICAvLyBzcGVudCBwYXVzZWQuIFdlIGluaXRpYWxpemUgdGhlIHRpbWVzbGljZXIgdG8gc3Rh
cnQgYWZ0ZXIgdGhpcyAibWFuZGF0b3J5IiBwYXVzZQotICAgICAgICAgICAgICAgIC8vIGNvbXBs
ZXRlcy4KKyAgICAgICAgICAgICAgICBzY2hlZHVsZXIuc25hcFBoYXNlKCk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRy
YWluUmVzdWx0OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNlY29uZHMgZXh0
cmFQYXVzZSA9IChiZWZvcmVDb252ZXJnZW5jZSAtIHRvcE9mTG9vcCkgKiBleHRyYVBhdXNlUmF0
aW87Ci0gICAgICAgICAgICAgICAgaW5pdGlhbFRpbWUgPSBiZWZvcmVDb252ZXJnZW5jZSArIGV4
dHJhUGF1c2U7Ci0gICAgICAgICAgICAgICAgZHJhaW5SZXN1bHQgPSBtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5kcmFpbkluUGFyYWxsZWwoaW5pdGlhbFRpbWUpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHdoaWxlIChkcmFpblJlc3VsdCAhPSBTbG90VmlzaXRvcjo6U2hhcmVk
RHJhaW5SZXN1bHQ6OkRvbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FjaGVTY2hlZHVsaW5n
U3RhdHMoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEJlUmVzdW1lZCgpKSB7Cisg
ICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBhdXRvIGRlY2lzaW9uID0g
c2NoZWR1bGVyLmN1cnJlbnREZWNpc2lvbigpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVj
aXNpb24uc2hvdWxkQmVSZXN1bWVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3Vt
ZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkcmFpblJlc3VsdCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluSW5Q
YXJhbGxlbFBhc3NpdmVseSh0aW1lVG9TdG9wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZHJhaW5SZXN1bHQgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkluUGFyYWxsZWxQYXNz
aXZlbHkoZGVjaXNpb24udGltZVRvU3RvcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChkcmFpblJlc3VsdCA9PSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgc3Rv
cC4gQnV0IG1heWJlIHRoZSBzY2hlZHVsZXIgZG9lcyBub3Qgd2FudAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoYXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25k
cyBzY2hlZHVsZWRJZGxlID0gZGVjaXNpb24udGltZVRvU3RvcCgpIC0gTW9ub3RvbmljVGltZTo6
bm93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyB0b3RhbGx5IHVuY2xl
YXIgd2hhdCB0aGUgdmFsdWUgb2YgY29sbGVjdFBlcm1pdHRlZElkbGVSYXRpbworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSwgb3RoZXIgdGhhbiBpdCBzaG91bGQgYmUg
Z3JlYXRlciB0aGFuIDAuIFlvdSBjb3VsZCBldmVuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXJndWUgZm9yIGl0IGJlaW5nIGdyZWF0ZXIgdGhhbiAxLiBXZSBzaG91bGQgdHVuZSBp
dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcChzY2hlZHVsZWRJZGxlICogT3B0
aW9uczo6Y29sbGVjdG9yUGVybWl0dGVkSWRsZVJhdGlvKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRyYWluUmVzdWx0ID0gbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5JblBhcmFsbGVs
KHRpbWVUb1Jlc3VtZSgpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBkcmFpblJlc3VsdCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluSW5QYXJhbGxl
bChkZWNpc2lvbi50aW1lVG9SZXN1bWUoKSk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoZHJh
aW5SZXN1bHQgIT0gU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gRGlzYWJsaW5nIGNvbGxlY3RvciB0
aW1lc2xpY2luZyBpcyBtZWFudCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAgICAgICAgICAg
ICAgICAvLyAtLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSB0byBtYXhpbWl6ZSB0aGUgb3Bwb3J0
dW5pdHkgZm9yIGhhcm1mdWwgcmFjZXMuCkBAIC03NzEsOCArNjgyLDYgQEAgdm9pZCBIZWFwOjpt
YXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgICAgICAgICAgICAgIG1fY29sbGVjdG9y
U2xvdFZpc2l0b3ItPmRyYWluSW5QYXJhbGxlbCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBleHRyYVBhdXNlUmF0aW8gKj0gT3B0aW9uczo6ZXh0cmFQYXVz
ZVJhdGlvSXRlcmF0aW9uR3Jvd3RoUmF0ZSgpOwogICAgIH0KIAogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwOTY5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1h
cmtlZEFyZ3VtZW50QnVmZmVyOwogY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBTcGFjZVRpbWVT
Y2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFZNOwogCkBAIC0z
NzYsNiArMzc3LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQWxsb2NhdG9y
OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZp
c2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFNwYWNlVGltZVNjaGVkdWxlcjsKICAgICBmcmllbmQg
Y2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwU3RhdGlzdGlj
czsKICAgICBmcmllbmQgY2xhc3MgVk07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TcGFjZVRpbWVTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1NwYWNlVGltZVNjaGVkdWxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BhY2VUaW1lU2NoZWR1
bGVyLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitk
b3VibGUgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lvbjo6dGFyZ2V0TXV0YXRvclV0aWxpemF0
aW9uKCkgY29uc3QKK3sKKyAgICBkb3VibGUgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUgPQor
ICAgICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZzsKKyAgICAKKyAgICBkb3VibGUgbWF4SGVh
ZHJvb20gPQorICAgICAgICBtX3NjaGVkdWxlci0+bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlRW5kIC0gbV9zY2hlZHVsZXItPm1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lu
bmluZzsKKyAgICAKKyAgICBkb3VibGUgaGVhZHJvb21GdWxsbmVzcyA9CisgICAgICAgIGJ5dGVz
U2luY2VCZWdpbm5pbmdPZkN5Y2xlIC8gbWF4SGVhZHJvb207CisgICAgCisgICAgLy8gaGVhZHJv
b21GdWxsbmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAg
ICAvLyBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIGlzIHplcm8uIFdlIHNl
ZSB0aGF0IGluIGRlYnVnIHRlc3RzLiBUaGlzIGNvZGUKKyAgICAvLyBkZWZlbmRzIGFnYWluc3Qg
YWxsIGZsb2F0aW5nIHBvaW50IGRyYWdvbnMuCisgICAgCisgICAgaWYgKCEoaGVhZHJvb21GdWxs
bmVzcyA+PSAwKSkKKyAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDA7CisgICAgaWYgKCEoaGVh
ZHJvb21GdWxsbmVzcyA8PSAxKSkKKyAgICAgICAgaGVhZHJvb21GdWxsbmVzcyA9IDE7CisgICAg
CisgICAgZG91YmxlIG11dGF0b3JVdGlsaXphdGlvbiA9IDEgLSBoZWFkcm9vbUZ1bGxuZXNzOwor
ICAgIAorICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1p
dHRlZCB3aW5kb3cuCisgICAgbXV0YXRvclV0aWxpemF0aW9uID0KKyAgICAgICAgT3B0aW9uczo6
bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpICsKKyAgICAgICAgbXV0YXRvclV0aWxpemF0aW9u
ICogKAorICAgICAgICAgICAgT3B0aW9uczo6bWF4aW11bU11dGF0b3JVdGlsaXphdGlvbigpIC0K
KyAgICAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSk7CisgICAg
CisgICAgcmV0dXJuIG11dGF0b3JVdGlsaXphdGlvbjsKK30KKworZG91YmxlIFNwYWNlVGltZVNj
aGVkdWxlcjo6RGVjaXNpb246OnRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gMSAtIHRhcmdldE11dGF0b3JVdGlsaXphdGlvbigpOworfQorCitTZWNvbmRz
IFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNpb246OmVsYXBzZWRJblBlcmlvZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIChtX25vdyAtIG1fc2NoZWR1bGVyLT5tX2luaXRpYWxUaW1lKSAlIG1fc2No
ZWR1bGVyLT5tX3BlcmlvZDsKK30KKworZG91YmxlIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVjaXNp
b246OnBoYXNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZWxhcHNlZEluUGVyaW9kKCkgLyBtX3Nj
aGVkdWxlci0+bV9wZXJpb2Q7Cit9CisKK2Jvb2wgU3BhY2VUaW1lU2NoZWR1bGVyOjpEZWNpc2lv
bjo6c2hvdWxkQmVSZXN1bWVkKCkgY29uc3QKK3sKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdG9y
U2hvdWxkUmVzdW1lRmlyc3QoKSkKKyAgICAgICAgcmV0dXJuIHBoYXNlKCkgPD0gdGFyZ2V0TXV0
YXRvclV0aWxpemF0aW9uKCk7CisgICAgcmV0dXJuIHBoYXNlKCkgPiB0YXJnZXRDb2xsZWN0b3JV
dGlsaXphdGlvbigpOworfQorCitNb25vdG9uaWNUaW1lIFNwYWNlVGltZVNjaGVkdWxlcjo6RGVj
aXNpb246OnRpbWVUb1Jlc3VtZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzaG91bGRCZVJlc3Vt
ZWQoKSk7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisg
ICAgICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVsZXItPm1f
cGVyaW9kOworICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVs
ZXItPm1fcGVyaW9kICogdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKTsKK30KKworTW9ub3Rv
bmljVGltZSBTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uOjp0aW1lVG9TdG9wKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoc2hvdWxkQmVSZXN1bWVkKCkpOworICAgIGlmIChPcHRpb25zOjpjb2xs
ZWN0b3JTaG91bGRSZXN1bWVGaXJzdCgpKQorICAgICAgICByZXR1cm4gbV9ub3cgLSBlbGFwc2Vk
SW5QZXJpb2QoKSArIG1fc2NoZWR1bGVyLT5tX3BlcmlvZCAqIHRhcmdldE11dGF0b3JVdGlsaXph
dGlvbigpOworICAgIHJldHVybiBtX25vdyAtIGVsYXBzZWRJblBlcmlvZCgpICsgbV9zY2hlZHVs
ZXItPm1fcGVyaW9kOworfQorCitTcGFjZVRpbWVTY2hlZHVsZXI6OlNwYWNlVGltZVNjaGVkdWxl
cihIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX3BlcmlvZChTZWNvbmRz
Ojpmcm9tTWlsbGlzZWNvbmRzKE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkpKQorICAg
ICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKGhlYXAubV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVu
ZCgKKyAgICAgICAgT3B0aW9uczo6Y29uY3VycmVudEdDTWF4SGVhZHJvb20oKSAqCisgICAgICAg
IHN0ZDo6bWF4KAorICAgICAgICAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVn
aW5uaW5nLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihoZWFwLm1fbWF4RWRlblNp
emUpKSkKK3sKKyAgICBzbmFwUGhhc2UoKTsKK30KKwordm9pZCBTcGFjZVRpbWVTY2hlZHVsZXI6
OnNuYXBQaGFzZSgpCit7CisgICAgbV9pbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygp
OworfQorCitTcGFjZVRpbWVTY2hlZHVsZXI6OkRlY2lzaW9uIFNwYWNlVGltZVNjaGVkdWxlcjo6
Y3VycmVudERlY2lzaW9uKCkKK3sKKyAgICBEZWNpc2lvbiByZXN1bHQ7CisgICAgcmVzdWx0Lm1f
c2NoZWR1bGVyID0gdGhpczsKKyAgICByZXN1bHQubV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9
IG1faGVhcC5tX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIHJlc3VsdC5tX25vdyA9IE1v
bm90b25pY1RpbWU6Om5vdygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVTY2hl
ZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRp
bWVTY2hlZHVsZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TcGFjZVRpbWVTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25k
cy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsKKworY2xhc3MgU3BhY2VUaW1l
U2NoZWR1bGVyIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBEZWNpc2lvbiB7CisgICAgcHVibGljOgor
ICAgICAgICBEZWNpc2lvbigpIHsgfQorICAgICAgICAKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY2hlZHVsZXI7IH0KKyAgICAgICAgCisgICAg
ICAgIGRvdWJsZSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKSBjb25zdDsKKyAgICAgICAgZG91
YmxlIHRhcmdldENvbGxlY3RvclV0aWxpemF0aW9uKCkgY29uc3Q7CisgICAgICAgIFNlY29uZHMg
ZWxhcHNlZEluUGVyaW9kKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSBwaGFzZSgpIGNvbnN0Owor
ICAgICAgICBib29sIHNob3VsZEJlUmVzdW1lZCgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNU
aW1lIHRpbWVUb1Jlc3VtZSgpIGNvbnN0OworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1N0
b3AoKSBjb25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNz
IFNwYWNlVGltZVNjaGVkdWxlcjsKKworICAgICAgICBTcGFjZVRpbWVTY2hlZHVsZXIqIG1fc2No
ZWR1bGVyIHsgbnVsbHB0ciB9OworICAgICAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZSB7IDAgfTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBtX25vdzsKKyAgICB9OworICAgIAor
ICAgIC8vIENvbnN0cnVjdCB0aGUgc2NoZWR1bGVyIGF0IHRoZSBzdGFydCBvZiBhIEdDIGN5Y2xl
LgorICAgIFNwYWNlVGltZVNjaGVkdWxlcihIZWFwJik7CisgICAgCisgICAgLy8gRm9yY2VzIHRo
ZSBuZXh0IHBoYXNlIHRvIHN0YXJ0IG5vdy4KKyAgICB2b2lkIHNuYXBQaGFzZSgpOworICAgIAor
ICAgIC8vIFJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzY2hlZHVsaW5nIGRlY2lz
aW9uLCB3aGljaCB3aWxsIGJlIHZhbGlkIHNvIGxvbmcgYXMKKyAgICAvLyBTcGFjZVRpbWVTY2hl
ZHVsZXIgaXMgbGl2ZSBhbmQgeW91IGhhdmVuJ3QgY2FsbGVkIHNuYXBQaGFzZSgpLgorICAgIERl
Y2lzaW9uIGN1cnJlbnREZWNpc2lvbigpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgRGVjaXNpb247CisKKyAgICBIZWFwJiBtX2hlYXA7CisgICAgU2Vjb25kcyBtX3BlcmlvZDsK
KyAgICBkb3VibGUgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nOworICAg
IGRvdWJsZSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVFbmQ7CisgICAgTW9ub3Rvbmlj
VGltZSBtX2luaXRpYWxUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwOTY5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjAyLDkgKzIwMiw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAg
IHYoZG91YmxlLCBtYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uLCAwLjcsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoZG91YmxlLCBjb25jdXJyZW50R0NNYXhIZWFkcm9vbSwgMS41LCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgY29uY3VycmVudEdDUGVyaW9kTVMsIDIsIE5vcm1h
bCwgbnVsbHB0cikgXAotICAgIHYoZG91YmxlLCBpbml0aWFsRXh0cmFQYXVzZVJhdGlvLCAwLCBO
b3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGRvdWJsZSwgZXh0cmFQYXVzZVJhdGlvSXRlcmF0aW9u
R3Jvd3RoUmF0ZSwgMS4xLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGNvbGxlY3Rv
clNob3VsZFJlc3VtZUZpcnN0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihkb3Vi
bGUsIGNvbGxlY3RvclBlcm1pdHRlZElkbGVSYXRpbywgMSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KHVuc2lnbmVkLCBsYXJnZUFsbG9jYXRpb25DdXRvZmYsIDEwMDAwMCwgTm9ybWFs
LCBudWxscHRyKSBcCg==
</data>
<flag name="review"
          id="319291"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>