<?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>22620</bug_id>
          
          <creation_ts>2008-12-03 00:23:36 -0800</creation_ts>
          <short_desc>Use ActiveDOMObject as base class for DOMTimers</short_desc>
          <delta_ts>2008-12-04 00:42:56 -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>DOM</component>
          <version>528+ (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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101159</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-03 00:23:36 -0800</bug_when>
    <thetext>This allows to consolidate separate calls like clearAllTimeouts/pauseTimeouts/resumeTimeouts into similar calls for ActiveDOMObjects. That removes timeouts-specific clear/pause/resume code.
It also makes it unnecessary to unload timers into PausedTimeout &apos;containers&apos; on pause/resume - they can be paused/resumed in-place now, as ActiveDOMObjects. This makes it possible to get rid of PausedTimeouts as a class.
Finally, the hash table that keeps mapping id-&gt;timeout is moved from JSDOMWindow to Document to match the lifetime of DOMTimers.

This patch is a step (I&apos;m trying to do one change at a time) towards making timeouts available on Workers.
Next steps (preliminary, some need more discussion): 
1. Delete file PausedTimeouts.h,cpp from the build
2. Since there is no JS* objects in DOMTimer anymore, it can be moved from bindings/js/ to lets say dom/
3. DOMTimer::fired() and JSDOMWindowBase::timerFired can be merged into one method on DOMTimer
4. Create/removeTimeout methods can be moved from JSDOMWindowBase to ScriptExecutionContext so they are available of Workers too. Move id-&gt;timer map to SEC at the same time.
5. Make DOMTimer able to post/receive time events on threads different from main UI one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101163</commentid>
    <comment_count>1</comment_count>
      <attachid>25702</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-03 00:34:46 -0800</bug_when>
    <thetext>Created attachment 25702
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101169</commentid>
    <comment_count>2</comment_count>
      <attachid>25705</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-03 01:22:53 -0800</bug_when>
    <thetext>Created attachment 25705
patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101170</commentid>
    <comment_count>3</comment_count>
      <attachid>25706</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-03 01:34:38 -0800</bug_when>
    <thetext>Created attachment 25706
patch v3

Updated ChangeLog too, since ScriptExecutionContext is not modified anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101174</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-03 03:10:15 -0800</bug_when>
    <thetext>This would be easier to review if ChangeLog explained the reasons for JSDOMWindowBase changes, and why making equivalent calls in FrameLoader is indeed equivalent.

+    ScriptExecutionContext* context = scriptExecutionContext();
+    if (context &amp;&amp; context-&gt;isDocument()) {

The check for context being non-zero looks suspicious. Why is is possible for the timer to fire after the context is destroyed? This is wrong for two reasons: (1) DOMTimer::contextDestroyed() deletes the object, and (2) if we needed to check for the context, we should have checked that we are not firing the timer in a window that has replaced our window due to navigation (which would be a security problem).

I don&apos;t know we have any tests for timers and navigation.

-            // An object with pending activity must have a wrapper to mark its listeners, so no null check.
-            if (!wrapper-&gt;marked())
+            // Some ActiveDOMObjects don&apos;t have JS wrappers (timers created by setTimeout is one example).

Maybe you could preserve part of the old comment, explaining that active objects that can have wrappers must have them, because they are needed to mark listeners. This is a rather subtle point, and the code may need to be revised in the future (I don&apos;t believe in protected listeners&apos; correctness).

+    TimeoutsMap timeouts;

I know you just copied the code, but this is a good opportunity to fix the name, making it m_timeouts. It&apos;s sad that we have to track timeouts in Document twice - once as ActiveDOMObject, and again in TimeoutMap - but fixing that is probably out of scope for this patch.

+    if (Document* document = frame-&gt;document()) {
+        if (paused)
+            document-&gt;suspendActiveDOMObjects();
+        else
+            document-&gt;resumeActiveDOMObjects();

It&apos;s not quite obvious that objects that cannot be suspended will still get suspend/resume calls sometimes. I think that this warrants a comment in both ActiveDOMObject.h and ScriptExecutionContext.h.

+                if (Document* document = frame-&gt;document())
+                    document-&gt;suspendActiveDOMObjects();

I don&apos;t think we can have document-less frames now, even though there&apos;s still a lot of code that makes this check.

Keeping the patch for review to give a chance to someone more familiar with timer/loader interaction to weigh in, but this looks very good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101227</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-03 11:09:49 -0800</bug_when>
    <thetext>See also bug 22630 (the existing calls to stopActiveDOMObjects are not sufficient).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101236</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-03 12:24:47 -0800</bug_when>
    <thetext>(In reply to comment #4)
Thanks for review! Upcoming patch addresses all the comments.

&gt; I don&apos;t know we have any tests for timers and navigation.

I&apos;ll add one soon if we don&apos;t - made a note for myself :-)

&gt; +                if (Document* document = frame-&gt;document())
&gt; +                    document-&gt;suspendActiveDOMObjects();
&gt; 
&gt; I don&apos;t think we can have document-less frames now, even though there&apos;s still a
&gt; lot of code that makes this check.

I thought of replacing with ASSERT but there are so many places around that do exactly the same that it feels a blanket change could be done, in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101241</commentid>
    <comment_count>7</comment_count>
      <attachid>25719</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-03 12:35:13 -0800</bug_when>
    <thetext>Created attachment 25719
patch v4 (post-review changes)

Addressed comments by ap. Also sync&apos;ed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101264</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-03 14:32:09 -0800</bug_when>
    <thetext>From IRC:
ap: dimich: your updated patch looks good - but it will need to be updated for bug 22630&apos;s fix

working on it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101290</commentid>
    <comment_count>9</comment_count>
      <attachid>25733</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-03 19:33:44 -0800</bug_when>
    <thetext>Created attachment 25733
patch v5

Reflected the changes for bug 22630, created 2 tests (to be sent as separate patch after a bit of cleanup), debugged through CachedPage suspense/resume and debugger step. Browsed with debug bits. Seems good :-)

Hope someone familiar with timers/loading could take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101299</commentid>
    <comment_count>10</comment_count>
      <attachid>25733</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-03 23:05:54 -0800</bug_when>
    <thetext>Comment on attachment 25733
patch v5

I feel sufficiently confident about this code now, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101301</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-03 23:19:38 -0800</bug_when>
    <thetext>Committed revision 38985.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101305</commentid>
    <comment_count>12</comment_count>
      <attachid>25736</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2008-12-04 00:34:53 -0800</bug_when>
    <thetext>Created attachment 25736
patch to fix non-mac bulid

non-mac builds are broken... need to add couple of brackets..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101306</commentid>
    <comment_count>13</comment_count>
      <attachid>25736</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-04 00:38:21 -0800</bug_when>
    <thetext>Comment on attachment 25736
patch to fix non-mac bulid

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101307</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-04 00:42:56 -0800</bug_when>
    <thetext>Build fix committed revision 38990.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25702</attachid>
            <date>2008-12-03 00:34:46 -0800</date>
            <delta_ts>2008-12-03 01:22:53 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25716</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODkzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMDgtMTItMDMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNpbmcgQWN0aXZlRE9NT2JqZWN0IGFzIGJhc2UgY2xhc3MgZm9yIERPTVRpbWVyLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAKKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVy
OjpET01UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6ZmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVGltZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpET01UaW1lcjo6Y29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpET01U
aW1lcjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6c3VzcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01UaW1lcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRp
bWVyOjpjYW5TdXNwZW5kKTogSW1wbGVtZW50ZWQgQWN0aXZlRE9NT2JqZWN0IG1ldGhvZHMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01UaW1lci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHA6IEFjdGl2ZURPTU9iamVjdCBjYW4gaGF2ZSBudWxsIHVwY2FzdFBv
aW50ZXIKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCk6IAor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6fkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93QmFzZTo6aW5zdGFsbFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpyZW1vdmVUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6
dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmRpc2Nvbm5l
Y3RGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDog
RG9jdW1lbnQgbm93IGhvbGRzIGEgaGFzaCBtYXAgaWQtPnRpbWVvdXQKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjphZGRUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZW1vdmVUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5kVGltZW91dCk6
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
Y3JlYXRlZEFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFBhZ2U6OkNhY2hlZFBhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUGFnZTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQ
YWdlOjpjbGVhcik6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6On5KYXZhU2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2NyaXB0UGF1c2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb21t
aXRQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9wZW4p
OgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91
cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9hZERlZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VHcm91cExvYWREZWZlcnJlcjo6flBhZ2VHcm91cExvYWREZWZlcnJlcik6CisKIDIwMDgt
MTItMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01UaW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5j
cHAJKHJldmlzaW9uIDM4OTMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDE3ICsyNywyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
U2NoZWR1bGVkQWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW50
IERPTVRpbWVyOjptX3RpbWVyTmVzdGluZ0xldmVsID0gMDsKIAotRE9NVGltZXI6OkRPTVRpbWVy
KEpTRE9NV2luZG93QmFzZSogb2JqZWN0LCBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKLSAgICA6
IG1fb2JqZWN0KG9iamVjdCkKK0RPTVRpbWVyOjpET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKKyAgICA6IEFjdGl2ZURPTU9i
amVjdChjb250ZXh0LCAwKQogICAgICwgbV9hY3Rpb24oYWN0aW9uKQorICAgICwgbV9uZXh0Rmly
ZUludGVydmFsKDApCiB7CiAgICAgc3RhdGljIGludCBsYXN0VXNlZFRpbWVvdXRJZCA9IDA7CiAg
ICAgKytsYXN0VXNlZFRpbWVvdXRJZDsKQEAgLTQ5LDE2ICs1Miw2IEBAIERPTVRpbWVyOjpET01U
aW1lcihKU0RPTVdpbmRvd0Jhc2UqIG9iamUKICAgICBtX25lc3RpbmdMZXZlbCA9IG1fdGltZXJO
ZXN0aW5nTGV2ZWwgKyAxOwogfQogCi1ET01UaW1lcjo6RE9NVGltZXIoaW50IHRpbWVvdXRJZCwg
aW50IG5lc3RpbmdMZXZlbCwgSlNET01XaW5kb3dCYXNlKiBvYmplY3QsIFNjaGVkdWxlZEFjdGlv
biogYWN0aW9uKQotICAgIDogbV90aW1lb3V0SWQodGltZW91dElkKQotICAgICwgbV9uZXN0aW5n
TGV2ZWwobmVzdGluZ0xldmVsKQotICAgICwgbV9vYmplY3Qob2JqZWN0KQotICAgICwgbV9hY3Rp
b24oYWN0aW9uKQotewotICAgIEFTU0VSVCh0aW1lb3V0SWQgPiAwKTsKLSAgICBBU1NFUlQobmVz
dGluZ0xldmVsID4gMCk7Ci19Ci0KIERPTVRpbWVyOjp+RE9NVGltZXIoKQogewogICAgIEpTQzo6
SlNMb2NrIGxvY2soZmFsc2UpOwpAQCAtNjcsOSArNjAsNTAgQEAgRE9NVGltZXI6On5ET01UaW1l
cigpCiAKIHZvaWQgRE9NVGltZXI6OmZpcmVkKCkKIHsKLSAgICBtX3RpbWVyTmVzdGluZ0xldmVs
ID0gbV9uZXN0aW5nTGV2ZWw7Ci0gICAgbV9vYmplY3QtPnRpbWVyRmlyZWQodGhpcyk7Ci0gICAg
bV90aW1lck5lc3RpbmdMZXZlbCA9IDA7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dCAmJiBjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5k
b3cgPSB0b0pTRE9NV2luZG93KGRvY3VtZW50LT5mcmFtZSgpKSkgeworICAgICAgICAgIG1fdGlt
ZXJOZXN0aW5nTGV2ZWwgPSBtX25lc3RpbmdMZXZlbDsKKyAgICAgICAgICB3aW5kb3ctPnRpbWVy
RmlyZWQodGhpcyk7CisgICAgICAgICAgbV90aW1lck5lc3RpbmdMZXZlbCA9IDA7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Jvb2wgRE9NVGltZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGlzQWN0aXZlKCk7Cit9CisKK3ZvaWQgRE9NVGltZXI6OmNvbnRleHRE
ZXN0cm95ZWQoKQoreworICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpOwor
ICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lkIERPTVRpbWVyOjpzdG9wKCkKK3sKKyAgICBUaW1l
ckJhc2U6OnN0b3AoKTsKK30KKwordm9pZCBET01UaW1lcjo6c3VzcGVuZCgpIAoreyAKKyAgICBB
U1NFUlQobV9uZXh0RmlyZUludGVydmFsID09IDApOyAKKyAgICBtX25leHRGaXJlSW50ZXJ2YWwg
PSBuZXh0RmlyZUludGVydmFsKCk7CisgICAgVGltZXJCYXNlOjpzdG9wKCk7Cit9IAorIAordm9p
ZCBET01UaW1lcjo6cmVzdW1lKCkgCit7IAorICAgIHN0YXJ0KG1fbmV4dEZpcmVJbnRlcnZhbCwg
cmVwZWF0SW50ZXJ2YWwoKSk7CisgICAgbV9uZXh0RmlyZUludGVydmFsID0gMDsKK30gCisgCisg
Citib29sIERPTVRpbWVyOjpjYW5TdXNwZW5kKCkgY29uc3QgCit7IAorICAgIHJldHVybiB0cnVl
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTVRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5o
CShyZXZpc2lvbiAzODkzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvRE9NVGltZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBET01UaW1lcl9oCiAjZGVmaW5l
IERPTVRpbWVyX2gKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM0LDEyICszNSwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBKU0RPTVdpbmRvd0Jhc2U7CiBjbGFzcyBTY2hlZHVsZWRBY3Rp
b247CiAKLWNsYXNzIERPTVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7CitjbGFzcyBET01UaW1l
ciA6IHB1YmxpYyBUaW1lckJhc2UsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgog
ICAgIC8vIENyZWF0ZXMgYSBuZXcgdGltZXIgd2l0aCB0aGUgbmV4dCBpZCBhbmQgbmVzdGluZyBs
ZXZlbC4KLSAgICBET01UaW1lcihKU0RPTVdpbmRvd0Jhc2UqLCBTY2hlZHVsZWRBY3Rpb24qKTsK
LSAgICAvLyBDcmVhdGVzIGEgdGltZXIgZnJvbSBQYXVzZWRUaW1lb3V0LCB0YWtlcyB0aW1lb3V0
SWQgYW5kIG5lc3RpbmdMZXZlbCBhcyB0aGV5IHdlcmUgcGVyc2lzdGVkLgotICAgIERPTVRpbWVy
KGludCB0aW1lb3V0SWQsIGludCBuZXN0aW5nTGV2ZWwsIEpTRE9NV2luZG93QmFzZSosIFNjaGVk
dWxlZEFjdGlvbiopOworICAgIERPTVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY2hl
ZHVsZWRBY3Rpb24qKTsKICAgICB2aXJ0dWFsIH5ET01UaW1lcigpOwogCiAgICAgaW50IHRpbWVv
dXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZW91dElkOyB9CkBAIC01MCwxNCArNDksMjIgQEAg
cHVibGljOgogICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9h
Y3Rpb247IH0KICAgICBTY2hlZHVsZWRBY3Rpb24qIHRha2VBY3Rpb24oKSB7IFNjaGVkdWxlZEFj
dGlvbiogYSA9IG1fYWN0aW9uOyBtX2FjdGlvbiA9IDA7IHJldHVybiBhOyB9CiAKKyAgICAvLyBB
Y3RpdmVET01PYmplY3QKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RvcCgpOworICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHN1c3BlbmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CisKIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7CiAKICAgICBpbnQgbV90aW1lb3V0SWQ7CiAg
ICAgaW50IG1fbmVzdGluZ0xldmVsOwotICAgIEpTRE9NV2luZG93QmFzZSogbV9vYmplY3Q7CiAg
ICAgU2NoZWR1bGVkQWN0aW9uKiBtX2FjdGlvbjsKICAgICBzdGF0aWMgaW50IG1fdGltZXJOZXN0
aW5nTGV2ZWw7CisgICAgZG91YmxlIG1fbmV4dEZpcmVJbnRlcnZhbDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDM4OTMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0Zv
ckNvbnRleHQoSlNHbG9iYQogICAgIGNvbnN0IEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9p
ZCo+JiBhY3RpdmVPYmplY3RzID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWN0aXZlRE9NT2Jq
ZWN0cygpOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+Ojpjb25zdF9pdGVy
YXRvciBhY3RpdmVPYmplY3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKEhh
c2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYWN0
aXZlT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewot
ICAgICAgICBpZiAoaXRlci0+Zmlyc3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKSB7CisgICAgICAg
IGlmIChpdGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkgJiYgaXRlci0+c2Vjb25kKSB7
CiAgICAgICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFw
cGVyKGdsb2JhbERhdGEsIGl0ZXItPnNlY29uZCk7CiAgICAgICAgICAgICAvLyBBbiBvYmplY3Qg
d2l0aCBwZW5kaW5nIGFjdGl2aXR5IG11c3QgaGF2ZSBhIHdyYXBwZXIgdG8gbWFyayBpdHMgbGlz
dGVuZXJzLCBzbyBubyBudWxsIGNoZWNrLgogICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5tYXJr
ZWQoKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlz
aW9uIDM4OTMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhdXNl
ZFRpbWVvdXRzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJQbHVn
aW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xNTksOCArMTU4LDYg
QEAgSlNET01XaW5kb3dCYXNlOjp+SlNET01XaW5kb3dCYXNlKCkKIHsKICAgICBpZiAoZCgpLT5p
bXBsLT5mcmFtZSgpKQogICAgICAgICBkKCktPmltcGwtPmZyYW1lKCktPnNjcmlwdCgpLT5jbGVh
ckZvcm1lcldpbmRvdyhhc0pTRE9NV2luZG93KHRoaXMpKTsKLQotICAgIGNsZWFyQWxsVGltZW91
dHMoKTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01XaW5kb3dCYXNlOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTcwMCw3ICs2OTcsNiBAQCB2b2lkIEpTRE9N
V2luZG93QmFzZTo6Y2xlYXIoKQogICAgIGlmIChkKCktPnJldHVyblZhbHVlU2xvdCAmJiAhKmQo
KS0+cmV0dXJuVmFsdWVTbG90KQogICAgICAgICAqZCgpLT5yZXR1cm5WYWx1ZVNsb3QgPSBnZXRE
aXJlY3QoSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZXR1cm5WYWx1ZSIpKTsKIAotICAgIGNs
ZWFyQWxsVGltZW91dHMoKTsKICAgICBjbGVhckhlbHBlck9iamVjdFByb3BlcnRpZXMoKTsKIH0K
IApAQCAtODI2LDE4ICs4MjIsMTQgQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnNldFJldHVyblZh
bHVlU2xvdAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vIHRpbWVvdXRzIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwogCi12b2lkIEpTRE9NV2luZG93QmFzZTo6Y2xlYXJBbGxUaW1lb3V0cygpCi17
Ci0gICAgZGVsZXRlQWxsVmFsdWVzKGQoKS0+dGltZW91dHMpOwotICAgIGQoKS0+dGltZW91dHMu
Y2xlYXIoKTsKLX0KLQogaW50IEpTRE9NV2luZG93QmFzZTo6aW5zdGFsbFRpbWVvdXQoU2NoZWR1
bGVkQWN0aW9uKiBhLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQogewotICAgIERPTVRpbWVyKiB0
aW1lciA9IG5ldyBET01UaW1lcih0aGlzLCBhKTsKKyAgICBET01UaW1lciogdGltZXIgPSBuZXcg
RE9NVGltZXIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBhKTsKICAgICBpbnQgdGltZW91dElk
ID0gdGltZXItPnRpbWVvdXRJZCgpOwotICAgIEFTU0VSVCghZCgpLT50aW1lb3V0cy5nZXQodGlt
ZW91dElkKSk7Ci0gICAgZCgpLT50aW1lb3V0cy5zZXQodGltZW91dElkLCB0aW1lcik7CisKKyAg
ICBBU1NFUlQoZCgpLT5pbXBsLT5kb2N1bWVudCgpKTsKKyAgICBkKCktPmltcGwtPmRvY3VtZW50
KCktPmFkZFRpbWVvdXQodGltZW91dElkLCB0aW1lcik7CisgICAgCiAgICAgLy8gVXNlIGEgbWlu
aW11bSBpbnRlcnZhbCBvZiAxMCBtcyB0byBtYXRjaCBvdGhlciBicm93c2VycywgYnV0IG9ubHkg
b25jZSB3ZSd2ZQogICAgIC8vIG5lc3RlZCBlbm91Z2ggdG8gbm90aWNlIHRoYXQgd2UncmUgcmVw
ZWF0aW5nLgogICAgIC8vIEZhc3RlciB0aW1lcnMgbWlnaHQgYmUgImJldHRlciIsIGJ1dCB0aGV5
J3JlIGluY29tcGF0aWJsZS4KQEAgLTg2MSw1MCArODUzLDcgQEAgaW50IEpTRE9NV2luZG93QmFz
ZTo6aW5zdGFsbFRpbWVvdXQoRXhlYwogICAgIHJldHVybiBpbnN0YWxsVGltZW91dChuZXcgU2No
ZWR1bGVkQWN0aW9uKGV4ZWMsIGZ1bmMsIGFyZ3MpLCB0LCBzaW5nbGVTaG90KTsKIH0KIAotdm9p
ZCBKU0RPTVdpbmRvd0Jhc2U6OnBhdXNlVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYg
cmVzdWx0KQotewotICAgIHNpemVfdCB0aW1lb3V0c0NvdW50ID0gZCgpLT50aW1lb3V0cy5zaXpl
KCk7Ci0gICAgaWYgKCF0aW1lb3V0c0NvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5jbGVhcigpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGF1c2VkVGltZW91dCogdCA9IG5ldyBQYXVz
ZWRUaW1lb3V0W3RpbWVvdXRzQ291bnRdOwotICAgIHJlc3VsdC5zZXQobmV3IFBhdXNlZFRpbWVv
dXRzKHQsIHRpbWVvdXRzQ291bnQpKTsKLQotICAgIEpTRE9NV2luZG93QmFzZURhdGE6OlRpbWVv
dXRzTWFwOjppdGVyYXRvciBpdCA9IGQoKS0+dGltZW91dHMuYmVnaW4oKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSAhPSB0aW1lb3V0c0NvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgaW50
IHRpbWVvdXRJZCA9IGl0LT5maXJzdDsKLSAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXQtPnNl
Y29uZDsKLSAgICAgICAgdFtpXS50aW1lb3V0SWQgPSB0aW1lb3V0SWQ7Ci0gICAgICAgIHRbaV0u
bmVzdGluZ0xldmVsID0gdGltZXItPm5lc3RpbmdMZXZlbCgpOwotICAgICAgICB0W2ldLm5leHRG
aXJlSW50ZXJ2YWwgPSB0aW1lci0+bmV4dEZpcmVJbnRlcnZhbCgpOwotICAgICAgICB0W2ldLnJl
cGVhdEludGVydmFsID0gdGltZXItPnJlcGVhdEludGVydmFsKCk7Ci0gICAgICAgIHRbaV0uYWN0
aW9uID0gdGltZXItPnRha2VBY3Rpb24oKTsKLSAgICB9Ci0gICAgQVNTRVJUKGl0ID09IGQoKS0+
dGltZW91dHMuZW5kKCkpOwotCi0gICAgZGVsZXRlQWxsVmFsdWVzKGQoKS0+dGltZW91dHMpOwot
ICAgIGQoKS0+dGltZW91dHMuY2xlYXIoKTsKLX0KLQotdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnJl
c3VtZVRpbWVvdXRzKE93blB0cjxQYXVzZWRUaW1lb3V0cz4mIHRpbWVvdXRzKQotewotICAgIGlm
ICghdGltZW91dHMpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3QgY291bnQgPSB0aW1lb3V0
cy0+bnVtVGltZW91dHMoKTsKLSAgICBQYXVzZWRUaW1lb3V0KiBhcnJheSA9IHRpbWVvdXRzLT50
YWtlVGltZW91dHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7
Ci0gICAgICAgIGludCB0aW1lb3V0SWQgPSBhcnJheVtpXS50aW1lb3V0SWQ7Ci0gICAgICAgIERP
TVRpbWVyKiB0aW1lciA9IG5ldyBET01UaW1lcih0aW1lb3V0SWQsIGFycmF5W2ldLm5lc3RpbmdM
ZXZlbCwgdGhpcywgYXJyYXlbaV0uYWN0aW9uKTsKLSAgICAgICAgZCgpLT50aW1lb3V0cy5zZXQo
dGltZW91dElkLCB0aW1lcik7Ci0gICAgICAgIHRpbWVyLT5zdGFydChhcnJheVtpXS5uZXh0Rmly
ZUludGVydmFsLCBhcnJheVtpXS5yZXBlYXRJbnRlcnZhbCk7Ci0gICAgfQotICAgIGRlbGV0ZSBb
XSBhcnJheTsKLSAgICB0aW1lb3V0cy5jbGVhcigpOwotfQotCi12b2lkIEpTRE9NV2luZG93QmFz
ZTo6cmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkLCBib29sIGRlbEFjdGlvbikKK3ZvaWQgSlNE
T01XaW5kb3dCYXNlOjpyZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpCiB7CiAgICAgLy8gdGlt
ZW91dCBJRHMgaGF2ZSB0byBiZSBwb3NpdGl2ZSwgYW5kIDAgYW5kIC0xIGFyZSB1bnNhZmUgdG8K
ICAgICAvLyBldmVuIGxvb2sgdXAgc2luY2UgdGhleSBhcmUgdGhlIGVtcHR5IGFuZCBkZWxldGVk
IHZhbHVlCkBAIC05MTIsNyArODYxLDggQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnJlbW92ZVRp
bWVvdXQoaW50IAogICAgIGlmICh0aW1lb3V0SWQgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZGVsZXRlIGQoKS0+dGltZW91dHMudGFrZSh0aW1lb3V0SWQpOworICAgIEFTU0VSVChkKCkt
PmltcGwtPmRvY3VtZW50KCkpOworICAgIGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+cmVtb3ZlVGlt
ZW91dCh0aW1lb3V0SWQpOwogfQogCiB2b2lkIEpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJlZChE
T01UaW1lciogdGltZXIpCkBAIC05MjQsNyArODc0LDggQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6
OnRpbWVyRmlyZWQoRE9NVGltZQogICAgICAgICB0aW1lci0+YWN0aW9uKCktPmV4ZWN1dGUoc2hl
bGwoKSk7CiAgICAgICAgIC8vIFRoZSBET01UaW1lciBvYmplY3QgbWF5IGhhdmUgYmVlbiBkZWxl
dGVkIG9yIHJlcGxhY2VkIGR1cmluZyBleGVjdXRpb24sCiAgICAgICAgIC8vIHNvIHdlIHJlLWZl
dGNoIGl0LgotICAgICAgICB0aW1lciA9IGQoKS0+dGltZW91dHMuZ2V0KHRpbWVvdXRJZCk7Cisg
ICAgICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3VtZW50KCkpOworICAgICAgICB0aW1lciA9IGQo
KS0+aW1wbC0+ZG9jdW1lbnQoKS0+ZmluZFRpbWVvdXQodGltZW91dElkKTsKICAgICAgICAgaWYg
KCF0aW1lcikKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtOTM4LDggKzg4OSw3IEBAIHZvaWQg
SlNET01XaW5kb3dCYXNlOjp0aW1lckZpcmVkKERPTVRpbWUKIAogICAgIC8vIERlbGV0ZSB0aW1l
ciBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb24gZm9yIG9uZS1zaG90IHRpbWVycy4KICAgICBT
Y2hlZHVsZWRBY3Rpb24qIGFjdGlvbiA9IHRpbWVyLT50YWtlQWN0aW9uKCk7Ci0gICAgZCgpLT50
aW1lb3V0cy5yZW1vdmUodGltZXItPnRpbWVvdXRJZCgpKTsKLSAgICBkZWxldGUgdGltZXI7Cisg
ICAgcmVtb3ZlVGltZW91dCh0aW1lci0+dGltZW91dElkKCkpOwogICAgIGFjdGlvbi0+ZXhlY3V0
ZShzaGVsbCgpKTsKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKQEAgLTk0OCw3ICs4OTgsNiBA
QCB2b2lkIEpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJlZChET01UaW1lCiAKIHZvaWQgSlNET01X
aW5kb3dCYXNlOjpkaXNjb25uZWN0RnJhbWUoKQogewotICAgIGNsZWFyQWxsVGltZW91dHMoKTsK
IH0KIAogSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBET01XaW5kb3cqIGRvbVdpbmRvdykKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMzg5MzEpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBKU0V2ZW50TGlz
dGVuZXI7CiAgICAgY2xhc3MgSlNMb2NhdGlvbjsKICAgICBjbGFzcyBKU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBQYXVzZWRUaW1lb3V0czsKICAgICBjbGFzcyBTY2hlZHVs
ZWRBY3Rpb247CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKQEAgLTY3LDEwICs2Niw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoY29uc3Qg
SlNDOjpVU3RyaW5nJiBoYW5kbGVyLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKICAgICAgICAg
aW50IGluc3RhbGxUaW1lb3V0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiBmdW5jdGlv
biwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKLSAg
ICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lcklkLCBib29sIGRlbEFjdGlvbiA9IHRy
dWUpOwotCi0gICAgICAgIHZvaWQgcGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+
Jik7Ci0gICAgICAgIHZvaWQgcmVzdW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYp
OworICAgICAgICB2b2lkIHJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAKICAgICAgICAg
dm9pZCB0aW1lckZpcmVkKERPTVRpbWVyKik7CiAKQEAgLTEwMiw4ICs5OCw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgSlNDOjpKU0dsb2JhbERhdGEqIGNvbW1vbkpT
R2xvYmFsRGF0YSgpOwogCi0gICAgICAgIHZvaWQgY2xlYXJBbGxUaW1lb3V0cygpOwotCiAgICAg
cHJpdmF0ZToKICAgICAgICAgc3RydWN0IEpTRE9NV2luZG93QmFzZURhdGEgOiBwdWJsaWMgSlNE
T01HbG9iYWxPYmplY3REYXRhIHsKICAgICAgICAgICAgIEpTRE9NV2luZG93QmFzZURhdGEoUGFz
c1JlZlB0cjxET01XaW5kb3c+LCBKU0RPTVdpbmRvd1NoZWxsKik7CkBAIC0xMTIsOSArMTA2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICBKU0M6OkpTVmFsdWUqKiByZXR1
cm5WYWx1ZVNsb3Q7CiAgICAgICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbDsKLQotICAg
ICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRE9NVGltZXIqPiBUaW1lb3V0c01hcDsKLSAg
ICAgICAgICAgIFRpbWVvdXRzTWFwIHRpbWVvdXRzOwogICAgICAgICB9OwogCiAgICAgICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUqIGNoaWxkRnJhbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzODkzMSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1MSwyNSArMzUxLDQgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9i
amVjdAogICAgIGNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7CiB9CiAKLXZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6cGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+JiByZXN1bHQp
Ci17Ci0gICAgaWYgKCFoYXZlV2luZG93U2hlbGwoKSkgewotICAgICAgICByZXN1bHQuY2xlYXIo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHdpbmRvd1NoZWxsKCktPndpbmRvdygp
LT5wYXVzZVRpbWVvdXRzKHJlc3VsdCk7Ci19Ci0KLXZvaWQgU2NyaXB0Q29udHJvbGxlcjo6cmVz
dW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYgcGF1c2VkVGltZW91dHMpCi17Ci0g
ICAgaWYgKCFoYXZlV2luZG93U2hlbGwoKSkgewotICAgICAgICAvLyBDYWxsZXJzIGNhbiBhc3N1
bWUgd2Ugd2lsbCBhbHdheXMgY2xlYXIgdGhlIHBhc3NlZCBpbiB0aW1lb3V0cwotICAgICAgICBw
YXVzZWRUaW1lb3V0cy5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgd2lu
ZG93U2hlbGwoKS0+d2luZG93KCktPnJlc3VtZVRpbWVvdXRzKHBhdXNlZFRpbWVvdXRzKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmgJKHJldmlzaW9uIDM4OTMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw5ICsxMDMsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjbGVhckZvcm1lcldpbmRvdyhKU0RPTVdpbmRvdyogd2luZG93KSB7IG1fbGl2
ZUZvcm1lcldpbmRvd3MucmVtb3ZlKHdpbmRvdyk7IH0KICAgICB2b2lkIHVwZGF0ZURvY3VtZW50
KCk7CiAKLSAgICB2b2lkIHBhdXNlVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYpOwot
ICAgIHZvaWQgcmVzdW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYpOwotCiAgICAg
dm9pZCBjbGVhclNjcmlwdE9iamVjdHMoKTsKICAgICB2b2lkIGNsZWFudXBTY3JpcHRPYmplY3Rz
Rm9yUGx1Z2luKHZvaWQqKTsKIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzg5MzEpCisrKyBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAK
ICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAi
RE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJET01UaW1lci5oIgogI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJh
Z21lbnQuaCIKQEAgLTQyMzAsNiArNDIzMSwyMyBAQCB2b2lkIERvY3VtZW50OjpwYXJzZUROU1By
ZWZldGNoQ29udHJvbEhlCiAgICAgbV9oYXZlRXhwbGljaXRseURpc2FibGVkRE5TUHJlZmV0Y2gg
PSB0cnVlOwogfQogCit2b2lkIERvY3VtZW50OjphZGRUaW1lb3V0KGludCB0aW1lb3V0SWQsIERP
TVRpbWVyKiB0aW1lcikKK3sKKyAgICBBU1NFUlQoIXRpbWVvdXRzLmdldCh0aW1lb3V0SWQpKTsK
KyAgICB0aW1lb3V0cy5zZXQodGltZW91dElkLCB0aW1lcik7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6
OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCkKK3sKKyAgICBET01UaW1lciogdGltZXIgPSB0
aW1lb3V0cy50YWtlKHRpbWVvdXRJZCk7CisgICAgZGVsZXRlIHRpbWVyOworfQorCitET01UaW1l
ciogRG9jdW1lbnQ6OmZpbmRUaW1lb3V0KGludCB0aW1lb3V0SWQpCit7CisgICAgcmV0dXJuIHRp
bWVvdXRzLmdldCh0aW1lb3V0SWQpOworfQorCiB2b2lkIERvY3VtZW50OjpyZXBvcnRFeGNlcHRp
b24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKIHsKICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBkb21XaW5kb3co
KSkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzg5MzEpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBEYXRhYmFzZTsKICAgICBjbGFzcyBET01JbXBsZW1lbnRhdGlvbjsKICAgICBjbGFz
cyBET01TZWxlY3Rpb247CisgICAgY2xhc3MgRE9NVGltZXI7CiAgICAgY2xhc3MgRE9NV2luZG93
OwogICAgIGNsYXNzIERhdGFiYXNlVGhyZWFkOwogICAgIGNsYXNzIERvY0xvYWRlcjsKQEAgLTc3
Nyw2ICs3NzgsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlv
bihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKTsKIAorICAgIHZvaWQgYWRkVGltZW91dChpbnQgdGltZW91dElkLCBET01U
aW1lciopOworICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKKyAgICBET01U
aW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAg
RG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhUTUwpOwogCkBAIC0xMDgxLDYgKzEwODYsOSBAQCBw
cml2YXRlOgogI2lmIFVTRShMT1dfQkFORFdJRFRIX0RJU1BMQVkpCiAgICAgYm9vbCBtX2luTG93
QmFuZHdpZHRoRGlzcGxheTsKICNlbmRpZgorCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRE9N
VGltZXIqPiBUaW1lb3V0c01hcDsKKyAgICBUaW1lb3V0c01hcCB0aW1lb3V0czsKIH07CiAKIGlu
bGluZSBib29sIERvY3VtZW50OjpoYXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlk
KSBjb25zdApJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHJldmlz
aW9uIDM4OTMxKQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NSwxMCArMTU1LDExIEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6c3RvcEFjdGl2ZUQKICAgICB9CiB9CiAKKy8vIHVwY2FzdFBvaW50ZXIgY2FuIGJlIE5V
TEwgdG8gaW5kaWNhdGUgdGhlcmUgaXMgbm8gRE9NLWV4cG9zZWQgb2JqZWN0IChhbmQgdGhlcmVm
b3JlLCBubyBKUyB3cmFwcGVyKQorLy8gVGhpcyBpcyB0cnVlIGZvciB0aW1lcnMgY3JlYXRlZCBi
eSBzZXRUaW1lb3V0L3NldEludGVydmFsIGZvciBleGFtcGxlLgogdm9pZCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpjcmVhdGVkQWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9iamVjdCogb2JqZWN0
LCB2b2lkKiB1cGNhc3RQb2ludGVyKQogewogICAgIEFTU0VSVChvYmplY3QpOwotICAgIEFTU0VS
VCh1cGNhc3RQb2ludGVyKTsKICAgICBtX2FjdGl2ZURPTU9iamVjdHMuYWRkKG9iamVjdCwgdXBj
YXN0UG9pbnRlcik7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAJKHJldmlzaW9uIDM4
OTMxKQorKysgV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQYXVzZWRUaW1lb3V0cy5oIgogI2lu
Y2x1ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTg2LDcgKzg1LDYgQEAgQ2FjaGVkUGFnZTo6Q2Fj
aGVkUGFnZShQYWdlKiBwYWdlKQogICAgIFNjcmlwdENvbnRyb2xsZXIqIHByb3h5ID0gbWFpbkZy
YW1lLT5zY3JpcHQoKTsKICAgICBpZiAocHJveHktPmhhdmVXaW5kb3dTaGVsbCgpKSB7CiAgICAg
ICAgIG1fd2luZG93ID0gcHJveHktPndpbmRvd1NoZWxsKCktPndpbmRvdygpOwotICAgICAgICBt
X3dpbmRvdy0+cGF1c2VUaW1lb3V0cyhtX3BhdXNlZFRpbWVvdXRzKTsKICAgICB9CiAKICAgICBt
X2RvY3VtZW50LT5zZXRJblBhZ2VDYWNoZSh0cnVlKTsKQEAgLTExNCw3ICsxMTIsNiBAQCB2b2lk
IENhY2hlZFBhZ2U6OnJlc3RvcmUoUGFnZSogcGFnZSkKICAgICAgICAgSlNET01XaW5kb3dTaGVs
bCogd2luZG93U2hlbGwgPSBwcm94eS0+d2luZG93U2hlbGwoKTsKICAgICAgICAgaWYgKG1fd2lu
ZG93KSB7CiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KG1fd2luZG93LmdldCgp
KTsKLSAgICAgICAgICAgIHdpbmRvd1NoZWxsLT53aW5kb3coKS0+cmVzdW1lVGltZW91dHMobV9w
YXVzZWRUaW1lb3V0cyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB3aW5kb3dTaGVs
bC0+c2V0V2luZG93KG1haW5GcmFtZS0+ZG9tV2luZG93KCkpOwogICAgICAgICAgICAgcHJveHkt
PmF0dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2VyKCkpOwpAQCAtMTcwLDcgKzE2Nyw2IEBAIHZv
aWQgQ2FjaGVkUGFnZTo6Y2xlYXIoKQogICAgIG1fVVJMID0gS1VSTCgpOwogCiAgICAgSlNMb2Nr
IGxvY2soZmFsc2UpOwotICAgIG1fcGF1c2VkVGltZW91dHMuY2xlYXIoKTsKICAgICBtX3dpbmRv
dyA9IDA7CiAKICAgICBtX2NhY2hlZFBhZ2VQbGF0Zm9ybURhdGEuY2xlYXIoKTsKSW5kZXg6IFdl
YkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5
L0NhY2hlZFBhZ2UuaAkocmV2aXNpb24gMzg5MzEpCisrKyBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVk
UGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJLVVJM
LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgi
CiAjaW5jbHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQwLDcgKzM5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEpTRE9NV2luZG93
OwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKLSAgICBjbGFzcyBQYXVzZWRUaW1l
b3V0czsKIAogY2xhc3MgQ2FjaGVkUGFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlZFBhZ2U+
IHsKIHB1YmxpYzoKQEAgLTczLDcgKzcxLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4g
bV9tb3VzZVByZXNzTm9kZTsKICAgICBLVVJMIG1fVVJMOwogICAgIEpTQzo6UHJvdGVjdGVkUHRy
PEpTRE9NV2luZG93PiBtX3dpbmRvdzsKLSAgICBPd25QdHI8UGF1c2VkVGltZW91dHM+IG1fcGF1
c2VkVGltZW91dHM7CiAgICAgT3duUHRyPENhY2hlZFBhZ2VQbGF0Zm9ybURhdGE+IG1fY2FjaGVk
UGFnZVBsYXRmb3JtRGF0YTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNj
cmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMzg5MzEpCisrKyBXZWJDb3JlL2luc3BlY3Rv
ci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2
IEBACiAjaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGF1c2VkVGltZW91dHMuaCIK
ICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1
ZGUgIldpZGdldC5oIgpAQCAtNzksNyArNzgsNiBAQCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6On5K
YXZhU2NyaXB0RGVidWdTCiB7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGFnZUxpc3RlbmVyc01h
cCk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fYnJlYWtwb2ludHMpOwotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX3BhdXNlZFRpbWVvdXRzKTsKIH0KIAogdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OmFkZExpc3RlbmVyKEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lcikKQEAgLTM2NSwx
NSArMzYzLDExIEBAIHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2NyaXAKIAog
ICAgIGZyYW1lLT5zY3JpcHQoKS0+c2V0UGF1c2VkKHBhdXNlZCk7CiAKLSAgICBpZiAoSlNET01X
aW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUpKSB7Ci0gICAgICAgIGlmIChwYXVz
ZWQpIHsKLSAgICAgICAgICAgIE93blB0cjxQYXVzZWRUaW1lb3V0cz4gdGltZW91dHM7Ci0gICAg
ICAgICAgICB3aW5kb3ctPnBhdXNlVGltZW91dHModGltZW91dHMpOwotICAgICAgICAgICAgbV9w
YXVzZWRUaW1lb3V0cy5zZXQoZnJhbWUsIHRpbWVvdXRzLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBPd25QdHI8UGF1c2VkVGltZW91dHM+IHRpbWVvdXRzKG1fcGF1
c2VkVGltZW91dHMudGFrZShmcmFtZSkpOwotICAgICAgICAgICAgd2luZG93LT5yZXN1bWVUaW1l
b3V0cyh0aW1lb3V0cyk7Ci0gICAgICAgIH0KKyAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKHBhdXNlZCkKKyAgICAgICAgICAgIGRv
Y3VtZW50LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpOwogICAgIH0KIAogICAgIHNl
dEphdmFTY3JpcHRQYXVzZWQoZnJhbWUtPnZpZXcoKSwgcGF1c2VkKTsKSW5kZXg6IFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAzODkzMSkKKysrIFdl
YkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZVZpZXc7
CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBQYWdlR3JvdXA7Ci0gICAgY2xhc3MgUGF1c2Vk
VGltZW91dHM7CiAgICAgY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKICAgICBjbGFzcyBKYXZh
U2NyaXB0RGVidWdMaXN0ZW5lcjsKIApAQCAtMTIyLDcgKzEyMSw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgYm9vbCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHM7CiAgICAg
ICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIG1fcGF1c2VPbkNhbGxGcmFtZTsKICAgICAgICAgUmVm
UHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY3VycmVudENhbGxGcmFtZTsKLSAgICAgICAgSGFz
aE1hcDxSZWZQdHI8RnJhbWU+LCBQYXVzZWRUaW1lb3V0cyo+IG1fcGF1c2VkVGltZW91dHM7CiAg
ICAgICAgIEhhc2hNYXA8aW50cHRyX3QsIEhhc2hTZXQ8dW5zaWduZWQ+Kj4gbV9icmVha3BvaW50
czsKICAgICAgICAgVGltZXI8SmF2YVNjcmlwdERlYnVnU2VydmVyPiBtX3JlY29tcGlsZVRpbWVy
OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzODkzMSkKKysr
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5MCwx
NiArMjY5MCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgKICAg
ICAgICAgICAgIGRvY3VtZW50LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOwogICAgICAgICBj
YWNoZVBhZ2VGb3JIaXN0b3J5SXRlbShtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lID09IG1fZnJh
bWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBtYWluIGZy
YW1lIGluc3RhbGxzIGEgdGltZW91dCBsYXRlIGVub3VnaCAoZm9yIGV4YW1wbGUgaW4gaXRzIG9u
dW5sb2FkIGhhbmRsZXIpCi0gICAgICAgICAgICAvLyBpdCBjb3VsZCBzb21ldGltZXMgZmlyZSB3
aGVuIHRyYW5zaXRpb25pbmcgdG8gYSBub24tSFRNTCBkb2N1bWVudCByZXByZXNlbnRhdGlvbiAo
c3VjaCBhcyB0aGUgTWFjIGJvb2ttYXJrcyB2aWV3KS4KLSAgICAgICAgICAgIC8vIFRvIGF2b2lk
IHRoaXMsIHdlIGNsZWFyIGFsbCB0aW1lb3V0cyBpZiB0aGUgcGFnZSBpcyBub3QgdG8gYmUgY2Fj
aGVkIGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdC4KLSAgICAgICAgICAgIC8vIENhY2hlZCBwYWdl
cyBoYXZlIHRoZWlyIHRpbWVycyBwYXVzZWQgc28gdGhleSBhcmUgZmluZS4KLSAgICAgICAgICAg
IFNjcmlwdENvbnRyb2xsZXIqIHByb3h5ID0gbV9mcmFtZS0+c2NyaXB0KCk7Ci0gICAgICAgICAg
ICBpZiAocHJveHktPmhhdmVXaW5kb3dTaGVsbCgpKQotICAgICAgICAgICAgICAgIHByb3h5LT53
aW5kb3dTaGVsbCgpLT53aW5kb3coKS0+Y2xlYXJBbGxUaW1lb3V0cygpOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZJWE1FOiBJbnRlZ3JhdGUgY2xlYXJpbmcgdGltZW91dHMgaW50byBzdG9wQWN0
aXZlRE9NT2JqZWN0cygpLgogICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgIGRvY3VtZW50LT5zdG9wQWN0aXZlRE9NT2JqZWN0
cygpOwogICAgIH0KQEAgLTI5NjQsNyArMjk1NCw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6Om9wZW4o
Q2FjaGVkUGFnZSYgY2FjaGUKICAgICB1cGRhdGVQb2xpY3lCYXNlVVJMKCk7CiAKICAgICBjYWNo
ZWRQYWdlLnJlc3RvcmUobV9mcmFtZS0+cGFnZSgpKTsKLQorICAgIGRvY3VtZW50LT5yZXN1bWVB
Y3RpdmVET01PYmplY3RzKCk7CisgICAgCiAgICAgY2hlY2tDb21wbGV0ZWQoKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAJKHJldmlzaW9uIDM4OTMxKQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2NiwxMCArNDY2LDggQEAgUGFnZUdyb3VwTG9hZERlZmVycmVyOjpQ
YWdlR3JvdXBMb2FkRGVmZQogCiAjaWYgIVBMQVRGT1JNKE1BQykKICAgICAgICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gb3RoZXJQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBPd25QdHI8UGF1
c2VkVGltZW91dHM+IHRpbWVvdXRzOwotICAgICAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+
cGF1c2VUaW1lb3V0cyh0aW1lb3V0cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXRzKQot
ICAgICAgICAgICAgICAgICAgICBtX3BhdXNlZFRpbWVvdXRzLmFwcGVuZChtYWtlX3BhaXIoUmVm
UHRyPEZyYW1lPihmcmFtZSksIHRpbWVvdXRzLnJlbGVhc2UoKSkpOworICAgICAgICAgICAgICAg
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQtPnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk7CiAgICAgICAgICAg
ICB9CiAjZW5kaWYKICAgICAgICAgfQpAQCAtNDgzLDE3ICs0ODEsMTcgQEAgUGFnZUdyb3VwTG9h
ZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZQogCiBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6On5Q
YWdlR3JvdXBMb2FkRGVmZXJyZXIoKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9k
ZWZlcnJlZEZyYW1lcy5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZGVmZXJyZWRGcmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBt
X2RlZmVycmVkRnJhbWVzW2ldLT5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5zZXREZWZlcnNM
b2FkaW5nKGZhbHNlKTsKIAogI2lmICFQTEFURk9STShNQUMpCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3BhdXNlZFRpbWVvdXRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEZyYW1lKiBm
cmFtZSA9IG1fcGF1c2VkVGltZW91dHNbaV0uZmlyc3QuZ2V0KCk7Ci0gICAgICAgIE93blB0cjxQ
YXVzZWRUaW1lb3V0cz4gdGltZW91dHMobV9wYXVzZWRUaW1lb3V0c1tpXS5zZWNvbmQpOwotICAg
ICAgICBmcmFtZS0+c2NyaXB0KCktPnJlc3VtZVRpbWVvdXRzKHRpbWVvdXRzKTsKLSAgICB9Cisg
ICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgICAgICBpZiAoRG9j
dW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZG9j
dW1lbnQtPnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKTsKKyAgICAgICAgfQogI2VuZGlmCisgICAg
fQogfQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25705</attachid>
            <date>2008-12-03 01:22:53 -0800</date>
            <delta_ts>2008-12-03 01:34:38 -0800</delta_ts>
            <desc>patch v2</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25237</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMDgtMTItMDMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNpbmcgQWN0aXZlRE9NT2JqZWN0IGFzIGJhc2UgY2xhc3MgZm9yIERPTVRpbWVyLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAKKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVy
OjpET01UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6ZmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVGltZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpET01UaW1lcjo6Y29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpET01U
aW1lcjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6c3VzcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01UaW1lcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRp
bWVyOjpjYW5TdXNwZW5kKTogSW1wbGVtZW50ZWQgQWN0aXZlRE9NT2JqZWN0IG1ldGhvZHMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01UaW1lci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHA6IEFjdGl2ZURPTU9iamVjdCBjYW4gaGF2ZSBudWxsIHVwY2FzdFBv
aW50ZXIKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCk6IAor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6fkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93QmFzZTo6aW5zdGFsbFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpyZW1vdmVUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6
dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmRpc2Nvbm5l
Y3RGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDog
RG9jdW1lbnQgbm93IGhvbGRzIGEgaGFzaCBtYXAgaWQtPnRpbWVvdXQKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjphZGRUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZW1vdmVUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5kVGltZW91dCk6
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
Y3JlYXRlZEFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFBhZ2U6OkNhY2hlZFBhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUGFnZTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQ
YWdlOjpjbGVhcik6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6On5KYXZhU2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2NyaXB0UGF1c2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb21t
aXRQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9wZW4p
OgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91
cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9hZERlZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VHcm91cExvYWREZWZlcnJlcjo6flBhZ2VHcm91cExvYWREZWZlcnJlcik6CisKIDIwMDgt
MTItMDMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRp
bWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcAko
cmV2aXNpb24gMzg5MzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTcgKzI3LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRE9NVGltZXIuaCIKIAotI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJTY2hl
ZHVsZWRBY3Rpb24uaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBpbnQgRE9N
VGltZXI6Om1fdGltZXJOZXN0aW5nTGV2ZWwgPSAwOwogCi1ET01UaW1lcjo6RE9NVGltZXIoSlNE
T01XaW5kb3dCYXNlKiBvYmplY3QsIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKQotICAgIDogbV9v
YmplY3Qob2JqZWN0KQorRE9NVGltZXI6OkRPTVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKQorICAgIDogQWN0aXZlRE9NT2JqZWN0
KGNvbnRleHQsIHRoaXMpCiAgICAgLCBtX2FjdGlvbihhY3Rpb24pCisgICAgLCBtX25leHRGaXJl
SW50ZXJ2YWwoMCkKIHsKICAgICBzdGF0aWMgaW50IGxhc3RVc2VkVGltZW91dElkID0gMDsKICAg
ICArK2xhc3RVc2VkVGltZW91dElkOwpAQCAtNDksMTYgKzUyLDYgQEAgRE9NVGltZXI6OkRPTVRp
bWVyKEpTRE9NV2luZG93QmFzZSogb2JqZQogICAgIG1fbmVzdGluZ0xldmVsID0gbV90aW1lck5l
c3RpbmdMZXZlbCArIDE7CiB9CiAKLURPTVRpbWVyOjpET01UaW1lcihpbnQgdGltZW91dElkLCBp
bnQgbmVzdGluZ0xldmVsLCBKU0RPTVdpbmRvd0Jhc2UqIG9iamVjdCwgU2NoZWR1bGVkQWN0aW9u
KiBhY3Rpb24pCi0gICAgOiBtX3RpbWVvdXRJZCh0aW1lb3V0SWQpCi0gICAgLCBtX25lc3RpbmdM
ZXZlbChuZXN0aW5nTGV2ZWwpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi0gICAgLCBtX2FjdGlv
bihhY3Rpb24pCi17Ci0gICAgQVNTRVJUKHRpbWVvdXRJZCA+IDApOwotICAgIEFTU0VSVChuZXN0
aW5nTGV2ZWwgPiAwKTsKLX0KLQogRE9NVGltZXI6On5ET01UaW1lcigpCiB7CiAgICAgSlNDOjpK
U0xvY2sgbG9jayhmYWxzZSk7CkBAIC02Nyw5ICs2MCw1MCBAQCBET01UaW1lcjo6fkRPTVRpbWVy
KCkKIAogdm9pZCBET01UaW1lcjo6ZmlyZWQoKQogewotICAgIG1fdGltZXJOZXN0aW5nTGV2ZWwg
PSBtX25lc3RpbmdMZXZlbDsKLSAgICBtX29iamVjdC0+dGltZXJGaXJlZCh0aGlzKTsKLSAgICBt
X3RpbWVyTmVzdGluZ0xldmVsID0gMDsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmIChjb250ZXh0ICYmIGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRv
dyA9IHRvSlNET01XaW5kb3coZG9jdW1lbnQtPmZyYW1lKCkpKSB7CisgICAgICAgICAgICBtX3Rp
bWVyTmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2ZWw7CisgICAgICAgICAgICB3aW5kb3ctPnRp
bWVyRmlyZWQodGhpcyk7CisgICAgICAgICAgICBtX3RpbWVyTmVzdGluZ0xldmVsID0gMDsKKyAg
ICAgICAgfQorICAgIH0KK30KKworYm9vbCBET01UaW1lcjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNBY3RpdmUoKTsKK30KKwordm9pZCBET01UaW1lcjo6Y29u
dGV4dERlc3Ryb3llZCgpCit7CisgICAgQWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVk
KCk7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgRE9NVGltZXI6OnN0b3AoKQoreworICAg
IFRpbWVyQmFzZTo6c3RvcCgpOworfQorCit2b2lkIERPTVRpbWVyOjpzdXNwZW5kKCkgCit7IAor
ICAgIEFTU0VSVChtX25leHRGaXJlSW50ZXJ2YWwgPT0gMCk7IAorICAgIG1fbmV4dEZpcmVJbnRl
cnZhbCA9IG5leHRGaXJlSW50ZXJ2YWwoKTsKKyAgICBUaW1lckJhc2U6OnN0b3AoKTsKK30gCisg
Cit2b2lkIERPTVRpbWVyOjpyZXN1bWUoKSAKK3sgCisgICAgc3RhcnQobV9uZXh0RmlyZUludGVy
dmFsLCByZXBlYXRJbnRlcnZhbCgpKTsKKyAgICBtX25leHRGaXJlSW50ZXJ2YWwgPSAwOworfSAK
KyAKKyAKK2Jvb2wgRE9NVGltZXI6OmNhblN1c3BlbmQoKSBjb25zdCAKK3sgCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvRE9NVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRp
bWVyLmgJKHJldmlzaW9uIDM4OTMzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIERPTVRpbWVyX2gKICNk
ZWZpbmUgRE9NVGltZXJfaAogCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzQsMTIgKzM1LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEpTRE9NV2luZG93QmFzZTsKIGNsYXNzIFNjaGVkdWxl
ZEFjdGlvbjsKIAotY2xhc3MgRE9NVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKK2NsYXNzIERP
TVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJs
aWM6CiAgICAgLy8gQ3JlYXRlcyBhIG5ldyB0aW1lciB3aXRoIHRoZSBuZXh0IGlkIGFuZCBuZXN0
aW5nIGxldmVsLgotICAgIERPTVRpbWVyKEpTRE9NV2luZG93QmFzZSosIFNjaGVkdWxlZEFjdGlv
biopOwotICAgIC8vIENyZWF0ZXMgYSB0aW1lciBmcm9tIFBhdXNlZFRpbWVvdXQsIHRha2VzIHRp
bWVvdXRJZCBhbmQgbmVzdGluZ0xldmVsIGFzIHRoZXkgd2VyZSBwZXJzaXN0ZWQuCi0gICAgRE9N
VGltZXIoaW50IHRpbWVvdXRJZCwgaW50IG5lc3RpbmdMZXZlbCwgSlNET01XaW5kb3dCYXNlKiwg
U2NoZWR1bGVkQWN0aW9uKik7CisgICAgRE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFNjaGVkdWxlZEFjdGlvbiopOwogICAgIHZpcnR1YWwgfkRPTVRpbWVyKCk7CiAKICAgICBpbnQg
dGltZW91dElkKCkgY29uc3QgeyByZXR1cm4gbV90aW1lb3V0SWQ7IH0KQEAgLTUwLDE0ICs0OSwy
MiBAQCBwdWJsaWM6CiAgICAgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2FjdGlvbjsgfQogICAgIFNjaGVkdWxlZEFjdGlvbiogdGFrZUFjdGlvbigpIHsgU2NoZWR1
bGVkQWN0aW9uKiBhID0gbV9hY3Rpb247IG1fYWN0aW9uID0gMDsgcmV0dXJuIGE7IH0KIAorICAg
IC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHko
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOworICAgIHZpcnR1
YWwgdm9pZCBzdG9wKCk7CisgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKKwog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKTsKIAogICAgIGludCBtX3RpbWVvdXRJ
ZDsKICAgICBpbnQgbV9uZXN0aW5nTGV2ZWw7Ci0gICAgSlNET01XaW5kb3dCYXNlKiBtX29iamVj
dDsKICAgICBTY2hlZHVsZWRBY3Rpb24qIG1fYWN0aW9uOwogICAgIHN0YXRpYyBpbnQgbV90aW1l
ck5lc3RpbmdMZXZlbDsKKyAgICBkb3VibGUgbV9uZXh0RmlyZUludGVydmFsOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAkocmV2aXNpb24gMzg5MzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NiwxMCArMjk2LDEwIEBAIHZvaWQgbWFya0FjdGl2ZU9i
amVjdHNGb3JDb250ZXh0KEpTR2xvYmEKICAgICBjb25zdCBIYXNoTWFwPEFjdGl2ZURPTU9iamVj
dCosIHZvaWQqPiYgYWN0aXZlT2JqZWN0cyA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFjdGl2
ZURPTU9iamVjdHMoKTsKICAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6Y29u
c3RfaXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IGFjdGl2ZU9iamVjdHMuZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkgewor
ICAgICAgICBpZiAoaXRlci0+Zmlyc3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpICYmIGl0ZXItPnNl
Y29uZCkgewogICAgICAgICAgICAgRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2Jq
ZWN0V3JhcHBlcihnbG9iYWxEYXRhLCBpdGVyLT5zZWNvbmQpOwotICAgICAgICAgICAgLy8gQW4g
b2JqZWN0IHdpdGggcGVuZGluZyBhY3Rpdml0eSBtdXN0IGhhdmUgYSB3cmFwcGVyIHRvIG1hcmsg
aXRzIGxpc3RlbmVycywgc28gbm8gbnVsbCBjaGVjay4KLSAgICAgICAgICAgIGlmICghd3JhcHBl
ci0+bWFya2VkKCkpCisgICAgICAgICAgICAvLyBTb21lIEFjdGl2ZURPTU9iamVjdHMgZG9uJ3Qg
aGF2ZSBKUyB3cmFwcGVycyAodGltZXJzIGNyZWF0ZWQgYnkgc2V0VGltZW91dCBpcyBvbmUgZXhh
bXBsZSkuCisgICAgICAgICAgICBpZiAod3JhcHBlciAmJiAhd3JhcHBlci0+bWFya2VkKCkpCiAg
ICAgICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzg5MzMpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGF1c2VkVGltZW91dHMuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTE1OSw4ICsxNTgsNiBAQCBKU0RPTVdpbmRv
d0Jhc2U6On5KU0RPTVdpbmRvd0Jhc2UoKQogewogICAgIGlmIChkKCktPmltcGwtPmZyYW1lKCkp
CiAgICAgICAgIGQoKS0+aW1wbC0+ZnJhbWUoKS0+c2NyaXB0KCktPmNsZWFyRm9ybWVyV2luZG93
KGFzSlNET01XaW5kb3codGhpcykpOwotCi0gICAgY2xlYXJBbGxUaW1lb3V0cygpOwogfQogCiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTVdpbmRvd0Jhc2U6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdApAQCAtNzAwLDcgKzY5Nyw2IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpj
bGVhcigpCiAgICAgaWYgKGQoKS0+cmV0dXJuVmFsdWVTbG90ICYmICEqZCgpLT5yZXR1cm5WYWx1
ZVNsb3QpCiAgICAgICAgICpkKCktPnJldHVyblZhbHVlU2xvdCA9IGdldERpcmVjdChJZGVudGlm
aWVyKGdsb2JhbEV4ZWMoKSwgInJldHVyblZhbHVlIikpOwogCi0gICAgY2xlYXJBbGxUaW1lb3V0
cygpOwogICAgIGNsZWFySGVscGVyT2JqZWN0UHJvcGVydGllcygpOwogfQogCkBAIC04MjYsMTgg
KzgyMiwxNCBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6c2V0UmV0dXJuVmFsdWVTbG90CiAKIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8gdGltZW91dHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAK
LXZvaWQgSlNET01XaW5kb3dCYXNlOjpjbGVhckFsbFRpbWVvdXRzKCkKLXsKLSAgICBkZWxldGVB
bGxWYWx1ZXMoZCgpLT50aW1lb3V0cyk7Ci0gICAgZCgpLT50aW1lb3V0cy5jbGVhcigpOwotfQot
CiBpbnQgSlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dChTY2hlZHVsZWRBY3Rpb24qIGEs
IGludCB0LCBib29sIHNpbmdsZVNob3QpCiB7Ci0gICAgRE9NVGltZXIqIHRpbWVyID0gbmV3IERP
TVRpbWVyKHRoaXMsIGEpOworICAgIERPTVRpbWVyKiB0aW1lciA9IG5ldyBET01UaW1lcihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIGEpOwogICAgIGludCB0aW1lb3V0SWQgPSB0aW1lci0+dGlt
ZW91dElkKCk7Ci0gICAgQVNTRVJUKCFkKCktPnRpbWVvdXRzLmdldCh0aW1lb3V0SWQpKTsKLSAg
ICBkKCktPnRpbWVvdXRzLnNldCh0aW1lb3V0SWQsIHRpbWVyKTsKKworICAgIEFTU0VSVChkKCkt
PmltcGwtPmRvY3VtZW50KCkpOworICAgIGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+YWRkVGltZW91
dCh0aW1lb3V0SWQsIHRpbWVyKTsKKyAgICAKICAgICAvLyBVc2UgYSBtaW5pbXVtIGludGVydmFs
IG9mIDEwIG1zIHRvIG1hdGNoIG90aGVyIGJyb3dzZXJzLCBidXQgb25seSBvbmNlIHdlJ3ZlCiAg
ICAgLy8gbmVzdGVkIGVub3VnaCB0byBub3RpY2UgdGhhdCB3ZSdyZSByZXBlYXRpbmcuCiAgICAg
Ly8gRmFzdGVyIHRpbWVycyBtaWdodCBiZSAiYmV0dGVyIiwgYnV0IHRoZXkncmUgaW5jb21wYXRp
YmxlLgpAQCAtODYxLDUwICs4NTMsNyBAQCBpbnQgSlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGlt
ZW91dChFeGVjCiAgICAgcmV0dXJuIGluc3RhbGxUaW1lb3V0KG5ldyBTY2hlZHVsZWRBY3Rpb24o
ZXhlYywgZnVuYywgYXJncyksIHQsIHNpbmdsZVNob3QpOwogfQogCi12b2lkIEpTRE9NV2luZG93
QmFzZTo6cGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+JiByZXN1bHQpCi17Ci0g
ICAgc2l6ZV90IHRpbWVvdXRzQ291bnQgPSBkKCktPnRpbWVvdXRzLnNpemUoKTsKLSAgICBpZiAo
IXRpbWVvdXRzQ291bnQpIHsKLSAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBQYXVzZWRUaW1lb3V0KiB0ID0gbmV3IFBhdXNlZFRpbWVvdXRbdGlt
ZW91dHNDb3VudF07Ci0gICAgcmVzdWx0LnNldChuZXcgUGF1c2VkVGltZW91dHModCwgdGltZW91
dHNDb3VudCkpOwotCi0gICAgSlNET01XaW5kb3dCYXNlRGF0YTo6VGltZW91dHNNYXA6Oml0ZXJh
dG9yIGl0ID0gZCgpLT50aW1lb3V0cy5iZWdpbigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
ICE9IHRpbWVvdXRzQ291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBpbnQgdGltZW91dElkID0g
aXQtPmZpcnN0OwotICAgICAgICBET01UaW1lciogdGltZXIgPSBpdC0+c2Vjb25kOwotICAgICAg
ICB0W2ldLnRpbWVvdXRJZCA9IHRpbWVvdXRJZDsKLSAgICAgICAgdFtpXS5uZXN0aW5nTGV2ZWwg
PSB0aW1lci0+bmVzdGluZ0xldmVsKCk7Ci0gICAgICAgIHRbaV0ubmV4dEZpcmVJbnRlcnZhbCA9
IHRpbWVyLT5uZXh0RmlyZUludGVydmFsKCk7Ci0gICAgICAgIHRbaV0ucmVwZWF0SW50ZXJ2YWwg
PSB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKTsKLSAgICAgICAgdFtpXS5hY3Rpb24gPSB0aW1lci0+
dGFrZUFjdGlvbigpOwotICAgIH0KLSAgICBBU1NFUlQoaXQgPT0gZCgpLT50aW1lb3V0cy5lbmQo
KSk7Ci0KLSAgICBkZWxldGVBbGxWYWx1ZXMoZCgpLT50aW1lb3V0cyk7Ci0gICAgZCgpLT50aW1l
b3V0cy5jbGVhcigpOwotfQotCi12b2lkIEpTRE9NV2luZG93QmFzZTo6cmVzdW1lVGltZW91dHMo
T3duUHRyPFBhdXNlZFRpbWVvdXRzPiYgdGltZW91dHMpCi17Ci0gICAgaWYgKCF0aW1lb3V0cykK
LSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBjb3VudCA9IHRpbWVvdXRzLT5udW1UaW1lb3V0
cygpOwotICAgIFBhdXNlZFRpbWVvdXQqIGFycmF5ID0gdGltZW91dHMtPnRha2VUaW1lb3V0cygp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50
IHRpbWVvdXRJZCA9IGFycmF5W2ldLnRpbWVvdXRJZDsKLSAgICAgICAgRE9NVGltZXIqIHRpbWVy
ID0gbmV3IERPTVRpbWVyKHRpbWVvdXRJZCwgYXJyYXlbaV0ubmVzdGluZ0xldmVsLCB0aGlzLCBh
cnJheVtpXS5hY3Rpb24pOwotICAgICAgICBkKCktPnRpbWVvdXRzLnNldCh0aW1lb3V0SWQsIHRp
bWVyKTsKLSAgICAgICAgdGltZXItPnN0YXJ0KGFycmF5W2ldLm5leHRGaXJlSW50ZXJ2YWwsIGFy
cmF5W2ldLnJlcGVhdEludGVydmFsKTsKLSAgICB9Ci0gICAgZGVsZXRlIFtdIGFycmF5OwotICAg
IHRpbWVvdXRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSlNET01XaW5kb3dCYXNlOjpyZW1vdmVUaW1l
b3V0KGludCB0aW1lb3V0SWQsIGJvb2wgZGVsQWN0aW9uKQordm9pZCBKU0RPTVdpbmRvd0Jhc2U6
OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCkKIHsKICAgICAvLyB0aW1lb3V0IElEcyBoYXZl
IHRvIGJlIHBvc2l0aXZlLCBhbmQgMCBhbmQgLTEgYXJlIHVuc2FmZSB0bwogICAgIC8vIGV2ZW4g
bG9vayB1cCBzaW5jZSB0aGV5IGFyZSB0aGUgZW1wdHkgYW5kIGRlbGV0ZWQgdmFsdWUKQEAgLTkx
Miw3ICs4NjEsOCBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6cmVtb3ZlVGltZW91dChpbnQgCiAg
ICAgaWYgKHRpbWVvdXRJZCA8PSAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgZCgp
LT50aW1lb3V0cy50YWtlKHRpbWVvdXRJZCk7CisgICAgQVNTRVJUKGQoKS0+aW1wbC0+ZG9jdW1l
bnQoKSk7CisgICAgZCgpLT5pbXBsLT5kb2N1bWVudCgpLT5yZW1vdmVUaW1lb3V0KHRpbWVvdXRJ
ZCk7CiB9CiAKIHZvaWQgSlNET01XaW5kb3dCYXNlOjp0aW1lckZpcmVkKERPTVRpbWVyKiB0aW1l
cikKQEAgLTkyNCw3ICs4NzQsOCBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJlZChE
T01UaW1lCiAgICAgICAgIHRpbWVyLT5hY3Rpb24oKS0+ZXhlY3V0ZShzaGVsbCgpKTsKICAgICAg
ICAgLy8gVGhlIERPTVRpbWVyIG9iamVjdCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgb3IgcmVwbGFj
ZWQgZHVyaW5nIGV4ZWN1dGlvbiwKICAgICAgICAgLy8gc28gd2UgcmUtZmV0Y2ggaXQuCi0gICAg
ICAgIHRpbWVyID0gZCgpLT50aW1lb3V0cy5nZXQodGltZW91dElkKTsKKyAgICAgICAgQVNTRVJU
KGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHRpbWVyID0gZCgpLT5pbXBsLT5kb2N1
bWVudCgpLT5maW5kVGltZW91dCh0aW1lb3V0SWQpOwogICAgICAgICBpZiAoIXRpbWVyKQogICAg
ICAgICAgICAgcmV0dXJuOwogCkBAIC05MzgsOCArODg5LDcgQEAgdm9pZCBKU0RPTVdpbmRvd0Jh
c2U6OnRpbWVyRmlyZWQoRE9NVGltZQogCiAgICAgLy8gRGVsZXRlIHRpbWVyIGJlZm9yZSBleGVj
dXRpbmcgdGhlIGFjdGlvbiBmb3Igb25lLXNob3QgdGltZXJzLgogICAgIFNjaGVkdWxlZEFjdGlv
biogYWN0aW9uID0gdGltZXItPnRha2VBY3Rpb24oKTsKLSAgICBkKCktPnRpbWVvdXRzLnJlbW92
ZSh0aW1lci0+dGltZW91dElkKCkpOwotICAgIGRlbGV0ZSB0aW1lcjsKKyAgICByZW1vdmVUaW1l
b3V0KHRpbWVyLT50aW1lb3V0SWQoKSk7CiAgICAgYWN0aW9uLT5leGVjdXRlKHNoZWxsKCkpOwog
CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwpAQCAtOTQ4LDcgKzg5OCw2IEBAIHZvaWQgSlNET01X
aW5kb3dCYXNlOjp0aW1lckZpcmVkKERPTVRpbWUKIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmRp
c2Nvbm5lY3RGcmFtZSgpCiB7Ci0gICAgY2xlYXJBbGxUaW1lb3V0cygpOwogfQogCiBKU1ZhbHVl
KiB0b0pTKEV4ZWNTdGF0ZSosIERPTVdpbmRvdyogZG9tV2luZG93KQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEpTRXZlbnRMaXN0ZW5lcjsKICAgICBj
bGFzcyBKU0xvY2F0aW9uOwogICAgIGNsYXNzIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOwot
ICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOwogICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKICAg
ICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIApAQCAtNjcsMTAgKzY2LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIGludCBpbnN0YWxsVGltZW91dChjb25zdCBKU0M6OlVTdHJpbmcm
IGhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwogICAgICAgICBpbnQgaW5zdGFsbFRp
bWVvdXQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqIGZ1bmN0aW9uLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwotICAgICAgICB2b2lkIHJl
bW92ZVRpbWVvdXQoaW50IHRpbWVySWQsIGJvb2wgZGVsQWN0aW9uID0gdHJ1ZSk7Ci0KLSAgICAg
ICAgdm9pZCBwYXVzZVRpbWVvdXRzKE93blB0cjxQYXVzZWRUaW1lb3V0cz4mKTsKLSAgICAgICAg
dm9pZCByZXN1bWVUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+Jik7CisgICAgICAgIHZv
aWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKIAogICAgICAgICB2b2lkIHRpbWVyRmly
ZWQoRE9NVGltZXIqKTsKIApAQCAtMTAyLDggKzk4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHN0YXRpYyBKU0M6OkpTR2xvYmFsRGF0YSogY29tbW9uSlNHbG9iYWxEYXRhKCk7
CiAKLSAgICAgICAgdm9pZCBjbGVhckFsbFRpbWVvdXRzKCk7Ci0KICAgICBwcml2YXRlOgogICAg
ICAgICBzdHJ1Y3QgSlNET01XaW5kb3dCYXNlRGF0YSA6IHB1YmxpYyBKU0RPTUdsb2JhbE9iamVj
dERhdGEgewogICAgICAgICAgICAgSlNET01XaW5kb3dCYXNlRGF0YShQYXNzUmVmUHRyPERPTVdp
bmRvdz4sIEpTRE9NV2luZG93U2hlbGwqKTsKQEAgLTExMiw5ICsxMDYsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSoqIHJldHVyblZhbHVlU2xvdDsK
ICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsOwotCi0gICAgICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50LCBET01UaW1lcio+IFRpbWVvdXRzTWFwOwotICAgICAgICAgICAgVGlt
ZW91dHNNYXAgdGltZW91dHM7CiAgICAgICAgIH07CiAKICAgICAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSogY2hpbGRGcmFtZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM4OTMzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI1ICsz
NTEsNCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0CiAgICAgY2xl
YXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpw
YXVzZVRpbWVvdXRzKE93blB0cjxQYXVzZWRUaW1lb3V0cz4mIHJlc3VsdCkKLXsKLSAgICBpZiAo
IWhhdmVXaW5kb3dTaGVsbCgpKSB7Ci0gICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgd2luZG93U2hlbGwoKS0+d2luZG93KCktPnBhdXNlVGltZW91
dHMocmVzdWx0KTsKLX0KLQotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpyZXN1bWVUaW1lb3V0cyhP
d25QdHI8UGF1c2VkVGltZW91dHM+JiBwYXVzZWRUaW1lb3V0cykKLXsKLSAgICBpZiAoIWhhdmVX
aW5kb3dTaGVsbCgpKSB7Ci0gICAgICAgIC8vIENhbGxlcnMgY2FuIGFzc3VtZSB3ZSB3aWxsIGFs
d2F5cyBjbGVhciB0aGUgcGFzc2VkIGluIHRpbWVvdXRzCi0gICAgICAgIHBhdXNlZFRpbWVvdXRz
LmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB3aW5kb3dTaGVsbCgpLT53
aW5kb3coKS0+cmVzdW1lVGltZW91dHMocGF1c2VkVGltZW91dHMpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMzg5MzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyRm9ybWVyV2luZG93KEpTRE9NV2luZG93KiB3aW5kb3cpIHsgbV9saXZlRm9ybWVyV2luZG93
cy5yZW1vdmUod2luZG93KTsgfQogICAgIHZvaWQgdXBkYXRlRG9jdW1lbnQoKTsKIAotICAgIHZv
aWQgcGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+Jik7Ci0gICAgdm9pZCByZXN1
bWVUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+Jik7Ci0KICAgICB2b2lkIGNsZWFyU2Ny
aXB0T2JqZWN0cygpOwogICAgIHZvaWQgY2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9p
ZCopOwogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkNv
bnNvbGUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRh
dGlvbi5oIgorI2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgpAQCAt
NDIzMCw2ICs0MjMxLDIzIEBAIHZvaWQgRG9jdW1lbnQ6OnBhcnNlRE5TUHJlZmV0Y2hDb250cm9s
SGUKICAgICBtX2hhdmVFeHBsaWNpdGx5RGlzYWJsZWRETlNQcmVmZXRjaCA9IHRydWU7CiB9CiAK
K3ZvaWQgRG9jdW1lbnQ6OmFkZFRpbWVvdXQoaW50IHRpbWVvdXRJZCwgRE9NVGltZXIqIHRpbWVy
KQoreworICAgIEFTU0VSVCghdGltZW91dHMuZ2V0KHRpbWVvdXRJZCkpOworICAgIHRpbWVvdXRz
LnNldCh0aW1lb3V0SWQsIHRpbWVyKTsKK30KKwordm9pZCBEb2N1bWVudDo6cmVtb3ZlVGltZW91
dChpbnQgdGltZW91dElkKQoreworICAgIERPTVRpbWVyKiB0aW1lciA9IHRpbWVvdXRzLnRha2Uo
dGltZW91dElkKTsKKyAgICBkZWxldGUgdGltZXI7Cit9CisKK0RPTVRpbWVyKiBEb2N1bWVudDo6
ZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCkKK3sKKyAgICByZXR1cm4gdGltZW91dHMuZ2V0KHRp
bWVvdXRJZCk7Cit9CisKIHZvaWQgRG9jdW1lbnQ6OnJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KQogewogICAgIGlmIChET01XaW5kb3cqIHdpbmRvdyA9IGRvbVdpbmRvdygpKQpJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDYgKzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERhdGFi
YXNlOwogICAgIGNsYXNzIERPTUltcGxlbWVudGF0aW9uOwogICAgIGNsYXNzIERPTVNlbGVjdGlv
bjsKKyAgICBjbGFzcyBET01UaW1lcjsKICAgICBjbGFzcyBET01XaW5kb3c7CiAgICAgY2xhc3Mg
RGF0YWJhc2VUaHJlYWQ7CiAgICAgY2xhc3MgRG9jTG9hZGVyOwpAQCAtNzc3LDYgKzc3OCwxMCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwp
OwogCisgICAgdm9pZCBhZGRUaW1lb3V0KGludCB0aW1lb3V0SWQsIERPTVRpbWVyKik7CisgICAg
dm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOworICAgIERPTVRpbWVyKiBmaW5kVGlt
ZW91dChpbnQgdGltZW91dElkKTsKKyAgICAKIHByb3RlY3RlZDoKICAgICBEb2N1bWVudChGcmFt
ZSosIGJvb2wgaXNYSFRNTCk7CiAKQEAgLTEwODEsNiArMTA4Niw5IEBAIHByaXZhdGU6CiAjaWYg
VVNFKExPV19CQU5EV0lEVEhfRElTUExBWSkKICAgICBib29sIG1faW5Mb3dCYW5kd2lkdGhEaXNw
bGF5OwogI2VuZGlmCisKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01UaW1lcio+IFRpbWVv
dXRzTWFwOworICAgIFRpbWVvdXRzTWFwIHRpbWVvdXRzOwogfTsKIAogaW5saW5lIGJvb2wgRG9j
dW1lbnQ6Omhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZFBhZ2UuY3BwCShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvaGlzdG9y
eS9DYWNoZWRQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgi
Ci0jaW5jbHVkZSAiUGF1c2VkVGltZW91dHMuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
CkBAIC04Niw3ICs4NSw2IEBAIENhY2hlZFBhZ2U6OkNhY2hlZFBhZ2UoUGFnZSogcGFnZSkKICAg
ICBTY3JpcHRDb250cm9sbGVyKiBwcm94eSA9IG1haW5GcmFtZS0+c2NyaXB0KCk7CiAgICAgaWYg
KHByb3h5LT5oYXZlV2luZG93U2hlbGwoKSkgewogICAgICAgICBtX3dpbmRvdyA9IHByb3h5LT53
aW5kb3dTaGVsbCgpLT53aW5kb3coKTsKLSAgICAgICAgbV93aW5kb3ctPnBhdXNlVGltZW91dHMo
bV9wYXVzZWRUaW1lb3V0cyk7CiAgICAgfQogCiAgICAgbV9kb2N1bWVudC0+c2V0SW5QYWdlQ2Fj
aGUodHJ1ZSk7CkBAIC0xMTQsNyArMTEyLDYgQEAgdm9pZCBDYWNoZWRQYWdlOjpyZXN0b3JlKFBh
Z2UqIHBhZ2UpCiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gcHJveHkt
PndpbmRvd1NoZWxsKCk7CiAgICAgICAgIGlmIChtX3dpbmRvdykgewogICAgICAgICAgICAgd2lu
ZG93U2hlbGwtPnNldFdpbmRvdyhtX3dpbmRvdy5nZXQoKSk7Ci0gICAgICAgICAgICB3aW5kb3dT
aGVsbC0+d2luZG93KCktPnJlc3VtZVRpbWVvdXRzKG1fcGF1c2VkVGltZW91dHMpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyhtYWluRnJhbWUt
PmRvbVdpbmRvdygpKTsKICAgICAgICAgICAgIHByb3h5LT5hdHRhY2hEZWJ1Z2dlcihwYWdlLT5k
ZWJ1Z2dlcigpKTsKQEAgLTE3MCw3ICsxNjcsNiBAQCB2b2lkIENhY2hlZFBhZ2U6OmNsZWFyKCkK
ICAgICBtX1VSTCA9IEtVUkwoKTsKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICBtX3Bh
dXNlZFRpbWVvdXRzLmNsZWFyKCk7CiAgICAgbV93aW5kb3cgPSAwOwogCiAgICAgbV9jYWNoZWRQ
YWdlUGxhdGZvcm1EYXRhLmNsZWFyKCk7CkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmgJKHJldmlzaW9u
IDM4OTMzKQorKysgV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLSNpbmNsdWRlICJQYXVzZWRUaW1lb3V0cy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJv
dGVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCw3ICszOSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBKU0RPTVdpbmRvdzsKICAgICBjbGFzcyBOb2RlOwogICAg
IGNsYXNzIFBhZ2U7Ci0gICAgY2xhc3MgUGF1c2VkVGltZW91dHM7CiAKIGNsYXNzIENhY2hlZFBh
Z2UgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZWRQYWdlPiB7CiBwdWJsaWM6CkBAIC03Myw3ICs3
MSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1fbW91c2VQcmVzc05vZGU7CiAgICAg
S1VSTCBtX1VSTDsKICAgICBKU0M6OlByb3RlY3RlZFB0cjxKU0RPTVdpbmRvdz4gbV93aW5kb3c7
Ci0gICAgT3duUHRyPFBhdXNlZFRpbWVvdXRzPiBtX3BhdXNlZFRpbWVvdXRzOwogICAgIE93blB0
cjxDYWNoZWRQYWdlUGxhdGZvcm1EYXRhPiBtX2NhY2hlZFBhZ2VQbGF0Zm9ybURhdGE7CiB9Owog
CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJl
dmlzaW9uIDM4OTMzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIkphdmFTY3Jp
cHREZWJ1Z0xpc3RlbmVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91
cC5oIgotI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5o
IgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKQEAgLTc5LDcg
Kzc4LDYgQEAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjp+SmF2YVNjcmlwdERlYnVnUwogewogICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX3BhZ2VMaXN0ZW5lcnNNYXApOwogICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX2JyZWFrcG9pbnRzKTsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9wYXVzZWRUaW1lb3V0cyk7
CiB9CiAKIHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lcihKYXZhU2NyaXB0
RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCkBAIC0zNjUsMTUgKzM2MywxMSBAQCB2b2lkIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwCiAKICAgICBmcmFtZS0+c2NyaXB0KCktPnNl
dFBhdXNlZChwYXVzZWQpOwogCi0gICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9N
V2luZG93KGZyYW1lKSkgewotICAgICAgICBpZiAocGF1c2VkKSB7Ci0gICAgICAgICAgICBPd25Q
dHI8UGF1c2VkVGltZW91dHM+IHRpbWVvdXRzOwotICAgICAgICAgICAgd2luZG93LT5wYXVzZVRp
bWVvdXRzKHRpbWVvdXRzKTsKLSAgICAgICAgICAgIG1fcGF1c2VkVGltZW91dHMuc2V0KGZyYW1l
LCB0aW1lb3V0cy5yZWxlYXNlKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgT3du
UHRyPFBhdXNlZFRpbWVvdXRzPiB0aW1lb3V0cyhtX3BhdXNlZFRpbWVvdXRzLnRha2UoZnJhbWUp
KTsKLSAgICAgICAgICAgIHdpbmRvdy0+cmVzdW1lVGltZW91dHModGltZW91dHMpOwotICAgICAg
ICB9CisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7Cisg
ICAgICAgIGlmIChwYXVzZWQpCisgICAgICAgICAgICBkb2N1bWVudC0+c3VzcGVuZEFjdGl2ZURP
TU9iamVjdHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1lbnQtPnJlc3VtZUFj
dGl2ZURPTU9iamVjdHMoKTsKICAgICB9CiAKICAgICBzZXRKYXZhU2NyaXB0UGF1c2VkKGZyYW1l
LT52aWV3KCksIHBhdXNlZCk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVi
dWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVi
dWdTZXJ2ZXIuaAkocmV2aXNpb24gMzg5MzMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2Ny
aXB0RGVidWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIFBhZ2U7CiAgICAg
Y2xhc3MgUGFnZUdyb3VwOwotICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOwogICAgIGNsYXNzIEph
dmFTY3JpcHRDYWxsRnJhbWU7CiAgICAgY2xhc3MgSmF2YVNjcmlwdERlYnVnTGlzdGVuZXI7CiAK
QEAgLTEyMiw3ICsxMjEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9k
b25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzOwogICAgICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1l
KiBtX3BhdXNlT25DYWxsRnJhbWU7CiAgICAgICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1l
PiBtX2N1cnJlbnRDYWxsRnJhbWU7Ci0gICAgICAgIEhhc2hNYXA8UmVmUHRyPEZyYW1lPiwgUGF1
c2VkVGltZW91dHMqPiBtX3BhdXNlZFRpbWVvdXRzOwogICAgICAgICBIYXNoTWFwPGludHB0cl90
LCBIYXNoU2V0PHVuc2lnbmVkPio+IG1fYnJlYWtwb2ludHM7CiAgICAgICAgIFRpbWVyPEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcj4gbV9yZWNvbXBpbGVUaW1lcjsKICAgICB9OwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMzg5MzMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OTAsMTYgKzI2OTAsNiBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoCiAgICAgICAgICAgICBkb2N1bWVudC0+c3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICAgICAgY2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0o
bV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICht
X2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZSA9PSBtX2ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgp
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgbWFpbiBmcmFtZSBpbnN0YWxscyBhIHRpbWVvdXQg
bGF0ZSBlbm91Z2ggKGZvciBleGFtcGxlIGluIGl0cyBvbnVubG9hZCBoYW5kbGVyKQotICAgICAg
ICAgICAgLy8gaXQgY291bGQgc29tZXRpbWVzIGZpcmUgd2hlbiB0cmFuc2l0aW9uaW5nIHRvIGEg
bm9uLUhUTUwgZG9jdW1lbnQgcmVwcmVzZW50YXRpb24gKHN1Y2ggYXMgdGhlIE1hYyBib29rbWFy
a3MgdmlldykuCi0gICAgICAgICAgICAvLyBUbyBhdm9pZCB0aGlzLCB3ZSBjbGVhciBhbGwgdGlt
ZW91dHMgaWYgdGhlIHBhZ2UgaXMgbm90IHRvIGJlIGNhY2hlZCBpbiB0aGUgYmFjayBmb3J3YXJk
IGxpc3QuCi0gICAgICAgICAgICAvLyBDYWNoZWQgcGFnZXMgaGF2ZSB0aGVpciB0aW1lcnMgcGF1
c2VkIHNvIHRoZXkgYXJlIGZpbmUuCi0gICAgICAgICAgICBTY3JpcHRDb250cm9sbGVyKiBwcm94
eSA9IG1fZnJhbWUtPnNjcmlwdCgpOwotICAgICAgICAgICAgaWYgKHByb3h5LT5oYXZlV2luZG93
U2hlbGwoKSkKLSAgICAgICAgICAgICAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+d2luZG93KCkt
PmNsZWFyQWxsVGltZW91dHMoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogSW50ZWdy
YXRlIGNsZWFyaW5nIHRpbWVvdXRzIGludG8gc3RvcEFjdGl2ZURPTU9iamVjdHMoKS4KICAgICAg
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAg
ICAgICBkb2N1bWVudC0+c3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICB9CkBAIC0yOTY0LDcg
KzI5NTQsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpvcGVuKENhY2hlZFBhZ2UmIGNhY2hlCiAgICAg
dXBkYXRlUG9saWN5QmFzZVVSTCgpOwogCiAgICAgY2FjaGVkUGFnZS5yZXN0b3JlKG1fZnJhbWUt
PnBhZ2UoKSk7Ci0KKyAgICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpOworICAg
IAogICAgIGNoZWNrQ29tcGxldGVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAzODkz
MykKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsMTAg
KzQ2Niw4IEBAIFBhZ2VHcm91cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9hZERlZmUKIAogI2lm
ICFQTEFURk9STShNQUMpCiAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG90aGVyUGFn
ZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgICAgICAgICAgT3duUHRyPFBhdXNlZFRpbWVvdXRzPiB0aW1lb3V0czsK
LSAgICAgICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPnBhdXNlVGltZW91dHModGltZW91dHMp
OwotICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0cykKLSAgICAgICAgICAgICAgICAgICAgbV9w
YXVzZWRUaW1lb3V0cy5hcHBlbmQobWFrZV9wYWlyKFJlZlB0cjxGcmFtZT4oZnJhbWUpLCB0aW1l
b3V0cy5yZWxlYXNlKCkpKTsKKyAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5zdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0cygpOwogICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIH0K
QEAgLTQ4MywxNyArNDgxLDE3IEBAIFBhZ2VHcm91cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9h
ZERlZmUKIAogUGFnZUdyb3VwTG9hZERlZmVycmVyOjp+UGFnZUdyb3VwTG9hZERlZmVycmVyKCkK
IHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGVmZXJyZWRGcmFtZXMuc2l6ZSgpOyAr
K2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RlZmVycmVkRnJhbWVzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9kZWZlcnJlZEZyYW1lc1tpXS0+cGFn
ZSgpKQogICAgICAgICAgICAgcGFnZS0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CiAKICNpZiAh
UExBVEZPUk0oTUFDKQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYXVzZWRUaW1lb3V0
cy5zaXplKCk7IGkrKykgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3BhdXNlZFRpbWVvdXRz
W2ldLmZpcnN0LmdldCgpOwotICAgICAgICBPd25QdHI8UGF1c2VkVGltZW91dHM+IHRpbWVvdXRz
KG1fcGF1c2VkVGltZW91dHNbaV0uc2Vjb25kKTsKLSAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT5y
ZXN1bWVUaW1lb3V0cyh0aW1lb3V0cyk7Ci0gICAgfQorICAgICAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2
ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50LT5yZXN1bWVBY3RpdmVET01P
YmplY3RzKCk7CisgICAgICAgIH0KICNlbmRpZgorICAgIH0KIH0KIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25706</attachid>
            <date>2008-12-03 01:34:38 -0800</date>
            <delta_ts>2008-12-03 12:35:13 -0800</delta_ts>
            <desc>patch v3</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>24854</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMDgtMTItMDMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNpbmcgQWN0aXZlRE9NT2JqZWN0IGFzIGJhc2UgY2xhc3MgZm9yIERPTVRpbWVyLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAKKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVy
OjpET01UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6ZmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVGltZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpET01UaW1lcjo6Y29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpET01U
aW1lcjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6c3VzcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01UaW1lcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRp
bWVyOjpjYW5TdXNwZW5kKTogSW1wbGVtZW50ZWQgQWN0aXZlRE9NT2JqZWN0IG1ldGhvZHMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01UaW1lci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHA6IEFjdGl2ZURPTU9iamVjdCBjYW4gaGF2ZSBubyBKUyB3cmFwcGVy
CisgICAgICAgIChXZWJDb3JlOjptYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQpOiAKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvd0Jhc2U6On5KU0RPTVdpbmRvd0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jh
c2U6Omluc3RhbGxUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6
cmVtb3ZlVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OnRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpkaXNjb25uZWN0RnJh
bWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuaDoKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6IERvY3Vt
ZW50IG5vdyBob2xkcyBhIGhhc2ggbWFwIGlkLT50aW1lb3V0CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6YWRkVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3Zl
VGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZmluZFRpbWVvdXQpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQYWdlOjpDYWNoZWRQYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFBhZ2U6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUGFn
ZTo6Y2xlYXIpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkUGFnZS5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SmF2
YVNjcmlwdERlYnVnU2VydmVyOjp+SmF2YVNjcmlwdERlYnVnU2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29tbWl0
UHJvdmlzaW9uYWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpvcGVuKToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBM
b2FkRGVmZXJyZXI6OlBhZ2VHcm91cExvYWREZWZlcnJlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlR3JvdXBMb2FkRGVmZXJyZXI6On5QYWdlR3JvdXBMb2FkRGVmZXJyZXIpOgorCiAyMDA4LTEy
LTAzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1l
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5jcHAJKHJl
dmlzaW9uIDM4OTMzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDE3ICsyNywyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkRPTVRpbWVyLmgiCiAKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiU2NoZWR1
bGVkQWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW50IERPTVRp
bWVyOjptX3RpbWVyTmVzdGluZ0xldmVsID0gMDsKIAotRE9NVGltZXI6OkRPTVRpbWVyKEpTRE9N
V2luZG93QmFzZSogb2JqZWN0LCBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKLSAgICA6IG1fb2Jq
ZWN0KG9iamVjdCkKK0RPTVRpbWVyOjpET01UaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKKyAgICA6IEFjdGl2ZURPTU9iamVjdChj
b250ZXh0LCB0aGlzKQogICAgICwgbV9hY3Rpb24oYWN0aW9uKQorICAgICwgbV9uZXh0RmlyZUlu
dGVydmFsKDApCiB7CiAgICAgc3RhdGljIGludCBsYXN0VXNlZFRpbWVvdXRJZCA9IDA7CiAgICAg
KytsYXN0VXNlZFRpbWVvdXRJZDsKQEAgLTQ5LDE2ICs1Miw2IEBAIERPTVRpbWVyOjpET01UaW1l
cihKU0RPTVdpbmRvd0Jhc2UqIG9iamUKICAgICBtX25lc3RpbmdMZXZlbCA9IG1fdGltZXJOZXN0
aW5nTGV2ZWwgKyAxOwogfQogCi1ET01UaW1lcjo6RE9NVGltZXIoaW50IHRpbWVvdXRJZCwgaW50
IG5lc3RpbmdMZXZlbCwgSlNET01XaW5kb3dCYXNlKiBvYmplY3QsIFNjaGVkdWxlZEFjdGlvbiog
YWN0aW9uKQotICAgIDogbV90aW1lb3V0SWQodGltZW91dElkKQotICAgICwgbV9uZXN0aW5nTGV2
ZWwobmVzdGluZ0xldmVsKQotICAgICwgbV9vYmplY3Qob2JqZWN0KQotICAgICwgbV9hY3Rpb24o
YWN0aW9uKQotewotICAgIEFTU0VSVCh0aW1lb3V0SWQgPiAwKTsKLSAgICBBU1NFUlQobmVzdGlu
Z0xldmVsID4gMCk7Ci19Ci0KIERPTVRpbWVyOjp+RE9NVGltZXIoKQogewogICAgIEpTQzo6SlNM
b2NrIGxvY2soZmFsc2UpOwpAQCAtNjcsOSArNjAsNTAgQEAgRE9NVGltZXI6On5ET01UaW1lcigp
CiAKIHZvaWQgRE9NVGltZXI6OmZpcmVkKCkKIHsKLSAgICBtX3RpbWVyTmVzdGluZ0xldmVsID0g
bV9uZXN0aW5nTGV2ZWw7Ci0gICAgbV9vYmplY3QtPnRpbWVyRmlyZWQodGhpcyk7Ci0gICAgbV90
aW1lck5lc3RpbmdMZXZlbCA9IDA7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cg
PSB0b0pTRE9NV2luZG93KGRvY3VtZW50LT5mcmFtZSgpKSkgeworICAgICAgICAgICAgbV90aW1l
ck5lc3RpbmdMZXZlbCA9IG1fbmVzdGluZ0xldmVsOworICAgICAgICAgICAgd2luZG93LT50aW1l
ckZpcmVkKHRoaXMpOworICAgICAgICAgICAgbV90aW1lck5lc3RpbmdMZXZlbCA9IDA7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRE9NVGltZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlzQWN0aXZlKCk7Cit9CisKK3ZvaWQgRE9NVGltZXI6OmNvbnRl
eHREZXN0cm95ZWQoKQoreworICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgp
OworICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lkIERPTVRpbWVyOjpzdG9wKCkKK3sKKyAgICBU
aW1lckJhc2U6OnN0b3AoKTsKK30KKwordm9pZCBET01UaW1lcjo6c3VzcGVuZCgpIAoreyAKKyAg
ICBBU1NFUlQobV9uZXh0RmlyZUludGVydmFsID09IDApOyAKKyAgICBtX25leHRGaXJlSW50ZXJ2
YWwgPSBuZXh0RmlyZUludGVydmFsKCk7CisgICAgVGltZXJCYXNlOjpzdG9wKCk7Cit9IAorIAor
dm9pZCBET01UaW1lcjo6cmVzdW1lKCkgCit7IAorICAgIHN0YXJ0KG1fbmV4dEZpcmVJbnRlcnZh
bCwgcmVwZWF0SW50ZXJ2YWwoKSk7CisgICAgbV9uZXh0RmlyZUludGVydmFsID0gMDsKK30gCisg
CisgCitib29sIERPTVRpbWVyOjpjYW5TdXNwZW5kKCkgY29uc3QgCit7IAorICAgIHJldHVybiB0
cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0RPTVRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01UaW1l
ci5oCShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvRE9NVGltZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBET01UaW1lcl9oCiAjZGVm
aW5lIERPTVRpbWVyX2gKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM0LDEyICszNSwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBKU0RPTVdpbmRvd0Jhc2U7CiBjbGFzcyBTY2hlZHVsZWRB
Y3Rpb247CiAKLWNsYXNzIERPTVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7CitjbGFzcyBET01U
aW1lciA6IHB1YmxpYyBUaW1lckJhc2UsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGlj
OgogICAgIC8vIENyZWF0ZXMgYSBuZXcgdGltZXIgd2l0aCB0aGUgbmV4dCBpZCBhbmQgbmVzdGlu
ZyBsZXZlbC4KLSAgICBET01UaW1lcihKU0RPTVdpbmRvd0Jhc2UqLCBTY2hlZHVsZWRBY3Rpb24q
KTsKLSAgICAvLyBDcmVhdGVzIGEgdGltZXIgZnJvbSBQYXVzZWRUaW1lb3V0LCB0YWtlcyB0aW1l
b3V0SWQgYW5kIG5lc3RpbmdMZXZlbCBhcyB0aGV5IHdlcmUgcGVyc2lzdGVkLgotICAgIERPTVRp
bWVyKGludCB0aW1lb3V0SWQsIGludCBuZXN0aW5nTGV2ZWwsIEpTRE9NV2luZG93QmFzZSosIFNj
aGVkdWxlZEFjdGlvbiopOworICAgIERPTVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBT
Y2hlZHVsZWRBY3Rpb24qKTsKICAgICB2aXJ0dWFsIH5ET01UaW1lcigpOwogCiAgICAgaW50IHRp
bWVvdXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZW91dElkOyB9CkBAIC01MCwxNCArNDksMjIg
QEAgcHVibGljOgogICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9hY3Rpb247IH0KICAgICBTY2hlZHVsZWRBY3Rpb24qIHRha2VBY3Rpb24oKSB7IFNjaGVkdWxl
ZEFjdGlvbiogYSA9IG1fYWN0aW9uOyBtX2FjdGlvbiA9IDA7IHJldHVybiBhOyB9CiAKKyAgICAv
LyBBY3RpdmVET01PYmplY3QKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RvcCgpOworICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CisKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7CiAKICAgICBpbnQgbV90aW1lb3V0SWQ7
CiAgICAgaW50IG1fbmVzdGluZ0xldmVsOwotICAgIEpTRE9NV2luZG93QmFzZSogbV9vYmplY3Q7
CiAgICAgU2NoZWR1bGVkQWN0aW9uKiBtX2FjdGlvbjsKICAgICBzdGF0aWMgaW50IG1fdGltZXJO
ZXN0aW5nTGV2ZWw7CisgICAgZG91YmxlIG1fbmV4dEZpcmVJbnRlcnZhbDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJ
KHJldmlzaW9uIDM4OTMzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsOCArMjk4LDggQEAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0
c0ZvckNvbnRleHQoSlNHbG9iYQogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2
b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhY3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIg
IT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmIChpdGVyLT5maXJzdC0+
aGFzUGVuZGluZ0FjdGl2aXR5KCkpIHsKICAgICAgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9
IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwgaXRlci0+c2Vjb25kKTsKLSAg
ICAgICAgICAgIC8vIEFuIG9iamVjdCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgbXVzdCBoYXZlIGEg
d3JhcHBlciB0byBtYXJrIGl0cyBsaXN0ZW5lcnMsIHNvIG5vIG51bGwgY2hlY2suCi0gICAgICAg
ICAgICBpZiAoIXdyYXBwZXItPm1hcmtlZCgpKQorICAgICAgICAgICAgLy8gU29tZSBBY3RpdmVE
T01PYmplY3RzIGRvbid0IGhhdmUgSlMgd3JhcHBlcnMgKHRpbWVycyBjcmVhdGVkIGJ5IHNldFRp
bWVvdXQgaXMgb25lIGV4YW1wbGUpLgorICAgICAgICAgICAgaWYgKHdyYXBwZXIgJiYgIXdyYXBw
ZXItPm1hcmtlZCgpKQogICAgICAgICAgICAgICAgIHdyYXBwZXItPm1hcmsoKTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJl
dmlzaW9uIDM4OTMzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBh
dXNlZFRpbWVvdXRzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJQ
bHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xNTksOCArMTU4
LDYgQEAgSlNET01XaW5kb3dCYXNlOjp+SlNET01XaW5kb3dCYXNlKCkKIHsKICAgICBpZiAoZCgp
LT5pbXBsLT5mcmFtZSgpKQogICAgICAgICBkKCktPmltcGwtPmZyYW1lKCktPnNjcmlwdCgpLT5j
bGVhckZvcm1lcldpbmRvdyhhc0pTRE9NV2luZG93KHRoaXMpKTsKLQotICAgIGNsZWFyQWxsVGlt
ZW91dHMoKTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01XaW5kb3dCYXNlOjpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTcwMCw3ICs2OTcsNiBAQCB2b2lkIEpT
RE9NV2luZG93QmFzZTo6Y2xlYXIoKQogICAgIGlmIChkKCktPnJldHVyblZhbHVlU2xvdCAmJiAh
KmQoKS0+cmV0dXJuVmFsdWVTbG90KQogICAgICAgICAqZCgpLT5yZXR1cm5WYWx1ZVNsb3QgPSBn
ZXREaXJlY3QoSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZXR1cm5WYWx1ZSIpKTsKIAotICAg
IGNsZWFyQWxsVGltZW91dHMoKTsKICAgICBjbGVhckhlbHBlck9iamVjdFByb3BlcnRpZXMoKTsK
IH0KIApAQCAtODI2LDE4ICs4MjIsMTQgQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnNldFJldHVy
blZhbHVlU2xvdAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vIHRpbWVvdXRzIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwogCi12b2lkIEpTRE9NV2luZG93QmFzZTo6Y2xlYXJBbGxUaW1lb3V0cygp
Ci17Ci0gICAgZGVsZXRlQWxsVmFsdWVzKGQoKS0+dGltZW91dHMpOwotICAgIGQoKS0+dGltZW91
dHMuY2xlYXIoKTsKLX0KLQogaW50IEpTRE9NV2luZG93QmFzZTo6aW5zdGFsbFRpbWVvdXQoU2No
ZWR1bGVkQWN0aW9uKiBhLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQogewotICAgIERPTVRpbWVy
KiB0aW1lciA9IG5ldyBET01UaW1lcih0aGlzLCBhKTsKKyAgICBET01UaW1lciogdGltZXIgPSBu
ZXcgRE9NVGltZXIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBhKTsKICAgICBpbnQgdGltZW91
dElkID0gdGltZXItPnRpbWVvdXRJZCgpOwotICAgIEFTU0VSVCghZCgpLT50aW1lb3V0cy5nZXQo
dGltZW91dElkKSk7Ci0gICAgZCgpLT50aW1lb3V0cy5zZXQodGltZW91dElkLCB0aW1lcik7CisK
KyAgICBBU1NFUlQoZCgpLT5pbXBsLT5kb2N1bWVudCgpKTsKKyAgICBkKCktPmltcGwtPmRvY3Vt
ZW50KCktPmFkZFRpbWVvdXQodGltZW91dElkLCB0aW1lcik7CisgICAgCiAgICAgLy8gVXNlIGEg
bWluaW11bSBpbnRlcnZhbCBvZiAxMCBtcyB0byBtYXRjaCBvdGhlciBicm93c2VycywgYnV0IG9u
bHkgb25jZSB3ZSd2ZQogICAgIC8vIG5lc3RlZCBlbm91Z2ggdG8gbm90aWNlIHRoYXQgd2UncmUg
cmVwZWF0aW5nLgogICAgIC8vIEZhc3RlciB0aW1lcnMgbWlnaHQgYmUgImJldHRlciIsIGJ1dCB0
aGV5J3JlIGluY29tcGF0aWJsZS4KQEAgLTg2MSw1MCArODUzLDcgQEAgaW50IEpTRE9NV2luZG93
QmFzZTo6aW5zdGFsbFRpbWVvdXQoRXhlYwogICAgIHJldHVybiBpbnN0YWxsVGltZW91dChuZXcg
U2NoZWR1bGVkQWN0aW9uKGV4ZWMsIGZ1bmMsIGFyZ3MpLCB0LCBzaW5nbGVTaG90KTsKIH0KIAot
dm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnBhdXNlVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRz
PiYgcmVzdWx0KQotewotICAgIHNpemVfdCB0aW1lb3V0c0NvdW50ID0gZCgpLT50aW1lb3V0cy5z
aXplKCk7Ci0gICAgaWYgKCF0aW1lb3V0c0NvdW50KSB7Ci0gICAgICAgIHJlc3VsdC5jbGVhcigp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGF1c2VkVGltZW91dCogdCA9IG5ldyBQ
YXVzZWRUaW1lb3V0W3RpbWVvdXRzQ291bnRdOwotICAgIHJlc3VsdC5zZXQobmV3IFBhdXNlZFRp
bWVvdXRzKHQsIHRpbWVvdXRzQ291bnQpKTsKLQotICAgIEpTRE9NV2luZG93QmFzZURhdGE6OlRp
bWVvdXRzTWFwOjppdGVyYXRvciBpdCA9IGQoKS0+dGltZW91dHMuYmVnaW4oKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSAhPSB0aW1lb3V0c0NvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAg
aW50IHRpbWVvdXRJZCA9IGl0LT5maXJzdDsKLSAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gaXQt
PnNlY29uZDsKLSAgICAgICAgdFtpXS50aW1lb3V0SWQgPSB0aW1lb3V0SWQ7Ci0gICAgICAgIHRb
aV0ubmVzdGluZ0xldmVsID0gdGltZXItPm5lc3RpbmdMZXZlbCgpOwotICAgICAgICB0W2ldLm5l
eHRGaXJlSW50ZXJ2YWwgPSB0aW1lci0+bmV4dEZpcmVJbnRlcnZhbCgpOwotICAgICAgICB0W2ld
LnJlcGVhdEludGVydmFsID0gdGltZXItPnJlcGVhdEludGVydmFsKCk7Ci0gICAgICAgIHRbaV0u
YWN0aW9uID0gdGltZXItPnRha2VBY3Rpb24oKTsKLSAgICB9Ci0gICAgQVNTRVJUKGl0ID09IGQo
KS0+dGltZW91dHMuZW5kKCkpOwotCi0gICAgZGVsZXRlQWxsVmFsdWVzKGQoKS0+dGltZW91dHMp
OwotICAgIGQoKS0+dGltZW91dHMuY2xlYXIoKTsKLX0KLQotdm9pZCBKU0RPTVdpbmRvd0Jhc2U6
OnJlc3VtZVRpbWVvdXRzKE93blB0cjxQYXVzZWRUaW1lb3V0cz4mIHRpbWVvdXRzKQotewotICAg
IGlmICghdGltZW91dHMpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3QgY291bnQgPSB0aW1l
b3V0cy0+bnVtVGltZW91dHMoKTsKLSAgICBQYXVzZWRUaW1lb3V0KiBhcnJheSA9IHRpbWVvdXRz
LT50YWtlVGltZW91dHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBjb3VudDsgKytp
KSB7Ci0gICAgICAgIGludCB0aW1lb3V0SWQgPSBhcnJheVtpXS50aW1lb3V0SWQ7Ci0gICAgICAg
IERPTVRpbWVyKiB0aW1lciA9IG5ldyBET01UaW1lcih0aW1lb3V0SWQsIGFycmF5W2ldLm5lc3Rp
bmdMZXZlbCwgdGhpcywgYXJyYXlbaV0uYWN0aW9uKTsKLSAgICAgICAgZCgpLT50aW1lb3V0cy5z
ZXQodGltZW91dElkLCB0aW1lcik7Ci0gICAgICAgIHRpbWVyLT5zdGFydChhcnJheVtpXS5uZXh0
RmlyZUludGVydmFsLCBhcnJheVtpXS5yZXBlYXRJbnRlcnZhbCk7Ci0gICAgfQotICAgIGRlbGV0
ZSBbXSBhcnJheTsKLSAgICB0aW1lb3V0cy5jbGVhcigpOwotfQotCi12b2lkIEpTRE9NV2luZG93
QmFzZTo6cmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkLCBib29sIGRlbEFjdGlvbikKK3ZvaWQg
SlNET01XaW5kb3dCYXNlOjpyZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpCiB7CiAgICAgLy8g
dGltZW91dCBJRHMgaGF2ZSB0byBiZSBwb3NpdGl2ZSwgYW5kIDAgYW5kIC0xIGFyZSB1bnNhZmUg
dG8KICAgICAvLyBldmVuIGxvb2sgdXAgc2luY2UgdGhleSBhcmUgdGhlIGVtcHR5IGFuZCBkZWxl
dGVkIHZhbHVlCkBAIC05MTIsNyArODYxLDggQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnJlbW92
ZVRpbWVvdXQoaW50IAogICAgIGlmICh0aW1lb3V0SWQgPD0gMCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZGVsZXRlIGQoKS0+dGltZW91dHMudGFrZSh0aW1lb3V0SWQpOworICAgIEFTU0VSVChk
KCktPmltcGwtPmRvY3VtZW50KCkpOworICAgIGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+cmVtb3Zl
VGltZW91dCh0aW1lb3V0SWQpOwogfQogCiB2b2lkIEpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJl
ZChET01UaW1lciogdGltZXIpCkBAIC05MjQsNyArODc0LDggQEAgdm9pZCBKU0RPTVdpbmRvd0Jh
c2U6OnRpbWVyRmlyZWQoRE9NVGltZQogICAgICAgICB0aW1lci0+YWN0aW9uKCktPmV4ZWN1dGUo
c2hlbGwoKSk7CiAgICAgICAgIC8vIFRoZSBET01UaW1lciBvYmplY3QgbWF5IGhhdmUgYmVlbiBk
ZWxldGVkIG9yIHJlcGxhY2VkIGR1cmluZyBleGVjdXRpb24sCiAgICAgICAgIC8vIHNvIHdlIHJl
LWZldGNoIGl0LgotICAgICAgICB0aW1lciA9IGQoKS0+dGltZW91dHMuZ2V0KHRpbWVvdXRJZCk7
CisgICAgICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3VtZW50KCkpOworICAgICAgICB0aW1lciA9
IGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+ZmluZFRpbWVvdXQodGltZW91dElkKTsKICAgICAgICAg
aWYgKCF0aW1lcikKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtOTM4LDggKzg4OSw3IEBAIHZv
aWQgSlNET01XaW5kb3dCYXNlOjp0aW1lckZpcmVkKERPTVRpbWUKIAogICAgIC8vIERlbGV0ZSB0
aW1lciBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb24gZm9yIG9uZS1zaG90IHRpbWVycy4KICAg
ICBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbiA9IHRpbWVyLT50YWtlQWN0aW9uKCk7Ci0gICAgZCgp
LT50aW1lb3V0cy5yZW1vdmUodGltZXItPnRpbWVvdXRJZCgpKTsKLSAgICBkZWxldGUgdGltZXI7
CisgICAgcmVtb3ZlVGltZW91dCh0aW1lci0+dGltZW91dElkKCkpOwogICAgIGFjdGlvbi0+ZXhl
Y3V0ZShzaGVsbCgpKTsKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKQEAgLTk0OCw3ICs4OTgs
NiBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJlZChET01UaW1lCiAKIHZvaWQgSlNE
T01XaW5kb3dCYXNlOjpkaXNjb25uZWN0RnJhbWUoKQogewotICAgIGNsZWFyQWxsVGltZW91dHMo
KTsKIH0KIAogSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBET01XaW5kb3cqIGRvbVdpbmRvdykK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMzg5MzMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBKU0V2ZW50
TGlzdGVuZXI7CiAgICAgY2xhc3MgSlNMb2NhdGlvbjsKICAgICBjbGFzcyBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBQYXVzZWRUaW1lb3V0czsKICAgICBjbGFzcyBTY2hl
ZHVsZWRBY3Rpb247CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKQEAgLTY3LDEwICs2Niw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoY29u
c3QgSlNDOjpVU3RyaW5nJiBoYW5kbGVyLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKICAgICAg
ICAgaW50IGluc3RhbGxUaW1lb3V0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiBmdW5j
dGlvbiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsK
LSAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lcklkLCBib29sIGRlbEFjdGlvbiA9
IHRydWUpOwotCi0gICAgICAgIHZvaWQgcGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91
dHM+Jik7Ci0gICAgICAgIHZvaWQgcmVzdW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRz
PiYpOworICAgICAgICB2b2lkIHJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAKICAgICAg
ICAgdm9pZCB0aW1lckZpcmVkKERPTVRpbWVyKik7CiAKQEAgLTEwMiw4ICs5OCw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgSlNDOjpKU0dsb2JhbERhdGEqIGNvbW1v
bkpTR2xvYmFsRGF0YSgpOwogCi0gICAgICAgIHZvaWQgY2xlYXJBbGxUaW1lb3V0cygpOwotCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IEpTRE9NV2luZG93QmFzZURhdGEgOiBwdWJsaWMg
SlNET01HbG9iYWxPYmplY3REYXRhIHsKICAgICAgICAgICAgIEpTRE9NV2luZG93QmFzZURhdGEo
UGFzc1JlZlB0cjxET01XaW5kb3c+LCBKU0RPTVdpbmRvd1NoZWxsKik7CkBAIC0xMTIsOSArMTA2
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICBKU0M6OkpTVmFsdWUqKiBy
ZXR1cm5WYWx1ZVNsb3Q7CiAgICAgICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbDsKLQot
ICAgICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRE9NVGltZXIqPiBUaW1lb3V0c01hcDsK
LSAgICAgICAgICAgIFRpbWVvdXRzTWFwIHRpbWVvdXRzOwogICAgICAgICB9OwogCiAgICAgICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUqIGNoaWxkRnJhbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzODkzMykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1MSwyNSArMzUxLDQgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlw
dE9iamVjdAogICAgIGNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7CiB9CiAKLXZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6cGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+JiByZXN1
bHQpCi17Ci0gICAgaWYgKCFoYXZlV2luZG93U2hlbGwoKSkgewotICAgICAgICByZXN1bHQuY2xl
YXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHdpbmRvd1NoZWxsKCktPndpbmRv
dygpLT5wYXVzZVRpbWVvdXRzKHJlc3VsdCk7Ci19Ci0KLXZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
cmVzdW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYgcGF1c2VkVGltZW91dHMpCi17
Ci0gICAgaWYgKCFoYXZlV2luZG93U2hlbGwoKSkgewotICAgICAgICAvLyBDYWxsZXJzIGNhbiBh
c3N1bWUgd2Ugd2lsbCBhbHdheXMgY2xlYXIgdGhlIHBhc3NlZCBpbiB0aW1lb3V0cwotICAgICAg
ICBwYXVzZWRUaW1lb3V0cy5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
d2luZG93U2hlbGwoKS0+d2luZG93KCktPnJlc3VtZVRpbWVvdXRzKHBhdXNlZFRpbWVvdXRzKTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDM4OTMzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw5ICsxMDMsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjbGVhckZvcm1lcldpbmRvdyhKU0RPTVdpbmRvdyogd2luZG93KSB7IG1f
bGl2ZUZvcm1lcldpbmRvd3MucmVtb3ZlKHdpbmRvdyk7IH0KICAgICB2b2lkIHVwZGF0ZURvY3Vt
ZW50KCk7CiAKLSAgICB2b2lkIHBhdXNlVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYp
OwotICAgIHZvaWQgcmVzdW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYpOwotCiAg
ICAgdm9pZCBjbGVhclNjcmlwdE9iamVjdHMoKTsKICAgICB2b2lkIGNsZWFudXBTY3JpcHRPYmpl
Y3RzRm9yUGx1Z2luKHZvaWQqKTsKIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzg5MzMpCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVk
ZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJET01UaW1lci5oIgogI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKQEAgLTQyMzAsNiArNDIzMSwyMyBAQCB2b2lkIERvY3VtZW50OjpwYXJzZURO
U1ByZWZldGNoQ29udHJvbEhlCiAgICAgbV9oYXZlRXhwbGljaXRseURpc2FibGVkRE5TUHJlZmV0
Y2ggPSB0cnVlOwogfQogCit2b2lkIERvY3VtZW50OjphZGRUaW1lb3V0KGludCB0aW1lb3V0SWQs
IERPTVRpbWVyKiB0aW1lcikKK3sKKyAgICBBU1NFUlQoIXRpbWVvdXRzLmdldCh0aW1lb3V0SWQp
KTsKKyAgICB0aW1lb3V0cy5zZXQodGltZW91dElkLCB0aW1lcik7Cit9CisKK3ZvaWQgRG9jdW1l
bnQ6OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCkKK3sKKyAgICBET01UaW1lciogdGltZXIg
PSB0aW1lb3V0cy50YWtlKHRpbWVvdXRJZCk7CisgICAgZGVsZXRlIHRpbWVyOworfQorCitET01U
aW1lciogRG9jdW1lbnQ6OmZpbmRUaW1lb3V0KGludCB0aW1lb3V0SWQpCit7CisgICAgcmV0dXJu
IHRpbWVvdXRzLmdldCh0aW1lb3V0SWQpOworfQorCiB2b2lkIERvY3VtZW50OjpyZXBvcnRFeGNl
cHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCkKIHsKICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBkb21XaW5k
b3coKSkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzg5MzMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBEYXRhYmFzZTsKICAgICBjbGFzcyBET01JbXBsZW1lbnRhdGlvbjsKICAgICBj
bGFzcyBET01TZWxlY3Rpb247CisgICAgY2xhc3MgRE9NVGltZXI7CiAgICAgY2xhc3MgRE9NV2lu
ZG93OwogICAgIGNsYXNzIERhdGFiYXNlVGhyZWFkOwogICAgIGNsYXNzIERvY0xvYWRlcjsKQEAg
LTc3Nyw2ICs3NzgsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2Vw
dGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMKTsKIAorICAgIHZvaWQgYWRkVGltZW91dChpbnQgdGltZW91dElkLCBE
T01UaW1lciopOworICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKKyAgICBE
T01UaW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CisgICAgCiBwcm90ZWN0ZWQ6CiAg
ICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhUTUwpOwogCkBAIC0xMDgxLDYgKzEwODYsOSBA
QCBwcml2YXRlOgogI2lmIFVTRShMT1dfQkFORFdJRFRIX0RJU1BMQVkpCiAgICAgYm9vbCBtX2lu
TG93QmFuZHdpZHRoRGlzcGxheTsKICNlbmRpZgorCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwg
RE9NVGltZXIqPiBUaW1lb3V0c01hcDsKKyAgICBUaW1lb3V0c01hcCB0aW1lb3V0czsKIH07CiAK
IGlubGluZSBib29sIERvY3VtZW50OjpoYXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwq
IGlkKSBjb25zdApJbmRleDogV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAkocmV2aXNpb24gMzg5MzMpCisr
KyBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5jbHVkZSAi
U3lzdGVtVGltZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgpAQCAtODYsNyArODUsNiBAQCBDYWNoZWRQYWdlOjpDYWNoZWRQYWdl
KFBhZ2UqIHBhZ2UpCiAgICAgU2NyaXB0Q29udHJvbGxlciogcHJveHkgPSBtYWluRnJhbWUtPnNj
cmlwdCgpOwogICAgIGlmIChwcm94eS0+aGF2ZVdpbmRvd1NoZWxsKCkpIHsKICAgICAgICAgbV93
aW5kb3cgPSBwcm94eS0+d2luZG93U2hlbGwoKS0+d2luZG93KCk7Ci0gICAgICAgIG1fd2luZG93
LT5wYXVzZVRpbWVvdXRzKG1fcGF1c2VkVGltZW91dHMpOwogICAgIH0KIAogICAgIG1fZG9jdW1l
bnQtPnNldEluUGFnZUNhY2hlKHRydWUpOwpAQCAtMTE0LDcgKzExMiw2IEBAIHZvaWQgQ2FjaGVk
UGFnZTo6cmVzdG9yZShQYWdlKiBwYWdlKQogICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5k
b3dTaGVsbCA9IHByb3h5LT53aW5kb3dTaGVsbCgpOwogICAgICAgICBpZiAobV93aW5kb3cpIHsK
ICAgICAgICAgICAgIHdpbmRvd1NoZWxsLT5zZXRXaW5kb3cobV93aW5kb3cuZ2V0KCkpOwotICAg
ICAgICAgICAgd2luZG93U2hlbGwtPndpbmRvdygpLT5yZXN1bWVUaW1lb3V0cyhtX3BhdXNlZFRp
bWVvdXRzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHdpbmRvd1NoZWxsLT5zZXRX
aW5kb3cobWFpbkZyYW1lLT5kb21XaW5kb3coKSk7CiAgICAgICAgICAgICBwcm94eS0+YXR0YWNo
RGVidWdnZXIocGFnZS0+ZGVidWdnZXIoKSk7CkBAIC0xNzAsNyArMTY3LDYgQEAgdm9pZCBDYWNo
ZWRQYWdlOjpjbGVhcigpCiAgICAgbV9VUkwgPSBLVVJMKCk7CiAKICAgICBKU0xvY2sgbG9jayhm
YWxzZSk7Ci0gICAgbV9wYXVzZWRUaW1lb3V0cy5jbGVhcigpOwogICAgIG1fd2luZG93ID0gMDsK
IAogICAgIG1fY2FjaGVkUGFnZVBsYXRmb3JtRGF0YS5jbGVhcigpOwpJbmRleDogV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVk
UGFnZS5oCShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIktVUkwuaCIKICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSAiUGF1c2VkVGltZW91dHMuaCIKICNpbmNs
dWRlIDxydW50aW1lL1Byb3RlY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsNyAr
MzksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSlNET01XaW5kb3c7CiAgICAg
Y2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwotICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOwog
CiBjbGFzcyBDYWNoZWRQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVkUGFnZT4gewogcHVi
bGljOgpAQCAtNzMsNyArNzEsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX21vdXNl
UHJlc3NOb2RlOwogICAgIEtVUkwgbV9VUkw7CiAgICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNET01X
aW5kb3c+IG1fd2luZG93OwotICAgIE93blB0cjxQYXVzZWRUaW1lb3V0cz4gbV9wYXVzZWRUaW1l
b3V0czsKICAgICBPd25QdHI8Q2FjaGVkUGFnZVBsYXRmb3JtRGF0YT4gbV9jYWNoZWRQYWdlUGxh
dGZvcm1EYXRhOwogfTsKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVn
U2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFT
Y3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAKICNp
bmNsdWRlICJKYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQYXVzZWRUaW1lb3V0cy5oIgogI2luY2x1
ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiV2lk
Z2V0LmgiCkBAIC03OSw3ICs3OCw2IEBAIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6fkphdmFTY3Jp
cHREZWJ1Z1MKIHsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9wYWdlTGlzdGVuZXJzTWFwKTsKICAg
ICBkZWxldGVBbGxWYWx1ZXMobV9icmVha3BvaW50cyk7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1f
cGF1c2VkVGltZW91dHMpOwogfQogCiB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlz
dGVuZXIoSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyKQpAQCAtMzY1LDE1ICszNjMs
MTEgQEAgdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3JpcAogCiAgICAgZnJh
bWUtPnNjcmlwdCgpLT5zZXRQYXVzZWQocGF1c2VkKTsKIAotICAgIGlmIChKU0RPTVdpbmRvdyog
d2luZG93ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSkpIHsKLSAgICAgICAgaWYgKHBhdXNlZCkgewot
ICAgICAgICAgICAgT3duUHRyPFBhdXNlZFRpbWVvdXRzPiB0aW1lb3V0czsKLSAgICAgICAgICAg
IHdpbmRvdy0+cGF1c2VUaW1lb3V0cyh0aW1lb3V0cyk7Ci0gICAgICAgICAgICBtX3BhdXNlZFRp
bWVvdXRzLnNldChmcmFtZSwgdGltZW91dHMucmVsZWFzZSgpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIE93blB0cjxQYXVzZWRUaW1lb3V0cz4gdGltZW91dHMobV9wYXVzZWRUaW1l
b3V0cy50YWtlKGZyYW1lKSk7Ci0gICAgICAgICAgICB3aW5kb3ctPnJlc3VtZVRpbWVvdXRzKHRp
bWVvdXRzKTsKLSAgICAgICAgfQorICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKSkgeworICAgICAgICBpZiAocGF1c2VkKQorICAgICAgICAgICAgZG9jdW1lbnQt
PnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRv
Y3VtZW50LT5yZXN1bWVBY3RpdmVET01PYmplY3RzKCk7CiAgICAgfQogCiAgICAgc2V0SmF2YVNj
cmlwdFBhdXNlZChmcmFtZS0+dmlldygpLCBwYXVzZWQpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0
b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDM4OTMzKQorKysgV2ViQ29yZS9p
bnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZyYW1lVmlldzsKICAgICBj
bGFzcyBQYWdlOwogICAgIGNsYXNzIFBhZ2VHcm91cDsKLSAgICBjbGFzcyBQYXVzZWRUaW1lb3V0
czsKICAgICBjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lOwogICAgIGNsYXNzIEphdmFTY3JpcHRE
ZWJ1Z0xpc3RlbmVyOwogCkBAIC0xMjIsNyArMTIxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50czsKICAgICAgICAgSmF2
YVNjcmlwdENhbGxGcmFtZSogbV9wYXVzZU9uQ2FsbEZyYW1lOwogICAgICAgICBSZWZQdHI8SmF2
YVNjcmlwdENhbGxGcmFtZT4gbV9jdXJyZW50Q2FsbEZyYW1lOwotICAgICAgICBIYXNoTWFwPFJl
ZlB0cjxGcmFtZT4sIFBhdXNlZFRpbWVvdXRzKj4gbV9wYXVzZWRUaW1lb3V0czsKICAgICAgICAg
SGFzaE1hcDxpbnRwdHJfdCwgSGFzaFNldDx1bnNpZ25lZD4qPiBtX2JyZWFrcG9pbnRzOwogICAg
ICAgICBUaW1lcjxKYXZhU2NyaXB0RGVidWdTZXJ2ZXI+IG1fcmVjb21waWxlVGltZXI7CiAgICAg
fTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM4OTMzKQorKysgV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjkwLDE2ICsyNjkw
LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKAogICAgICAgICAg
ICAgZG9jdW1lbnQtPnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk7CiAgICAgICAgIGNhY2hlUGFn
ZUZvckhpc3RvcnlJdGVtKG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAobV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUgPT0gbV9mcmFtZS0+cGFn
ZSgpLT5tYWluRnJhbWUoKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIG1haW4gZnJhbWUgaW5z
dGFsbHMgYSB0aW1lb3V0IGxhdGUgZW5vdWdoIChmb3IgZXhhbXBsZSBpbiBpdHMgb251bmxvYWQg
aGFuZGxlcikKLSAgICAgICAgICAgIC8vIGl0IGNvdWxkIHNvbWV0aW1lcyBmaXJlIHdoZW4gdHJh
bnNpdGlvbmluZyB0byBhIG5vbi1IVE1MIGRvY3VtZW50IHJlcHJlc2VudGF0aW9uIChzdWNoIGFz
IHRoZSBNYWMgYm9va21hcmtzIHZpZXcpLgotICAgICAgICAgICAgLy8gVG8gYXZvaWQgdGhpcywg
d2UgY2xlYXIgYWxsIHRpbWVvdXRzIGlmIHRoZSBwYWdlIGlzIG5vdCB0byBiZSBjYWNoZWQgaW4g
dGhlIGJhY2sgZm9yd2FyZCBsaXN0LgotICAgICAgICAgICAgLy8gQ2FjaGVkIHBhZ2VzIGhhdmUg
dGhlaXIgdGltZXJzIHBhdXNlZCBzbyB0aGV5IGFyZSBmaW5lLgotICAgICAgICAgICAgU2NyaXB0
Q29udHJvbGxlciogcHJveHkgPSBtX2ZyYW1lLT5zY3JpcHQoKTsKLSAgICAgICAgICAgIGlmIChw
cm94eS0+aGF2ZVdpbmRvd1NoZWxsKCkpCi0gICAgICAgICAgICAgICAgcHJveHktPndpbmRvd1No
ZWxsKCktPndpbmRvdygpLT5jbGVhckFsbFRpbWVvdXRzKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gRklYTUU6IEludGVncmF0ZSBjbGVhcmluZyB0aW1lb3V0cyBpbnRvIHN0b3BBY3RpdmVET01P
YmplY3RzKCkuCiAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1
bWVudCgpKQogICAgICAgICAgICAgZG9jdW1lbnQtPnN0b3BBY3RpdmVET01PYmplY3RzKCk7CiAg
ICAgfQpAQCAtMjk2NCw3ICsyOTU0LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6b3BlbihDYWNoZWRQ
YWdlJiBjYWNoZQogICAgIHVwZGF0ZVBvbGljeUJhc2VVUkwoKTsKIAogICAgIGNhY2hlZFBhZ2Uu
cmVzdG9yZShtX2ZyYW1lLT5wYWdlKCkpOwotCisgICAgZG9jdW1lbnQtPnJlc3VtZUFjdGl2ZURP
TU9iamVjdHMoKTsKKyAgICAKICAgICBjaGVja0NvbXBsZXRlZCgpOwogfQogCkluZGV4OiBXZWJD
b3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNw
cAkocmV2aXNpb24gMzg5MzMpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDY2LDEwICs0NjYsOCBAQCBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91
cExvYWREZWZlCiAKICNpZiAhUExBVEZPUk0oTUFDKQogICAgICAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgICAgIE93blB0cjxQYXVzZWRUaW1l
b3V0cz4gdGltZW91dHM7Ci0gICAgICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT5wYXVzZVRp
bWVvdXRzKHRpbWVvdXRzKTsKLSAgICAgICAgICAgICAgICBpZiAodGltZW91dHMpCi0gICAgICAg
ICAgICAgICAgICAgIG1fcGF1c2VkVGltZW91dHMuYXBwZW5kKG1ha2VfcGFpcihSZWZQdHI8RnJh
bWU+KGZyYW1lKSwgdGltZW91dHMucmVsZWFzZSgpKSk7CisgICAgICAgICAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAgICAg
ICBkb2N1bWVudC0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICAgICAgICAgIH0KICNl
bmRpZgogICAgICAgICB9CkBAIC00ODMsMTcgKzQ4MSwxNyBAQCBQYWdlR3JvdXBMb2FkRGVmZXJy
ZXI6OlBhZ2VHcm91cExvYWREZWZlCiAKIFBhZ2VHcm91cExvYWREZWZlcnJlcjo6flBhZ2VHcm91
cExvYWREZWZlcnJlcigpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RlZmVycmVk
RnJhbWVzLnNpemUoKTsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZWZlcnJl
ZEZyYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZGVmZXJy
ZWRGcmFtZXNbaV0tPnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmco
ZmFsc2UpOwogCiAjaWYgIVBMQVRGT1JNKE1BQykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fcGF1c2VkVGltZW91dHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0g
bV9wYXVzZWRUaW1lb3V0c1tpXS5maXJzdC5nZXQoKTsKLSAgICAgICAgT3duUHRyPFBhdXNlZFRp
bWVvdXRzPiB0aW1lb3V0cyhtX3BhdXNlZFRpbWVvdXRzW2ldLnNlY29uZCk7Ci0gICAgICAgIGZy
YW1lLT5zY3JpcHQoKS0+cmVzdW1lVGltZW91dHModGltZW91dHMpOwotICAgIH0KKyAgICAgICAg
Zm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChEb2N1bWVudCog
ZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+
cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpOworICAgICAgICB9CiAjZW5kaWYKKyAgICB9CiB9CiAK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25719</attachid>
            <date>2008-12-03 12:35:13 -0800</date>
            <delta_ts>2008-12-03 19:33:44 -0800</delta_ts>
            <desc>patch v4 (post-review changes)</desc>
            <filename>patch4.txt</filename>
            <type>text/plain</type>
            <size>28236</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODAgQEAKKzIwMDgtMTItMDMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNpbmcgQWN0aXZlRE9NT2JqZWN0IGFzIGJhc2UgY2xhc3MgZm9yIERPTVRpbWVyLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAKKworICAgICAg
ICBVc2luZyBBY3RpdmVET01PYmplY3Qgc2ltcGxpZmllcyB0aGUgY29kZSBiZWNhdXNlIEFjdGl2
ZURPTU9iamVjdAorICAgICAgICBpcyB3aXJlZCBmb3Igc3RvcC9wYXVzZS9yZXN1bWUgb24gbG9h
ZGluZy91bmxvYWRpbmcvY2FjaGluZyB0aGUgcGFnZSBldGMKKyAgICAgICAgc28gdGhlIHRpbWVy
LXNwZWNpZmljIGNvZGUgdGhhdCBkb2VzIHRoZSBzYW1lIGNhbiBiZSByZW1vdmVkLgorICAgICAg
ICBJbiBhZGRpdGlvbiwgdGltZXJzIGNhbiBiZSBub3cgcGF1c2VkL3Jlc3VtZWQgJ2luIHBsYWNl
JyB3aGljaAorICAgICAgICBtYWtlcyBpdCB1bm5lY2Vzc2FyeSB0byAnc2VyaWFsaXplJyB0aGVt
IGludG8gc3BlY2lhbCBQYXVzZWRUaW1lb3V0cworICAgICAgICBpbnN0YW5jZSwgc28gcGF1c2Uv
cmVzdW1lVGltZW91dHMgaW1wbGVtZW50YXRpb24gaW4gSlNET01XaW5kb3dCYXNlIGNhbiBhbHNv
IGJlIHJlbW92ZWQuCisgICAgICAgIEFsc28sIG1vdmluZyBUaW1lb3V0TWFwIGZyb20gSlNET01X
aW5kb3dCYXNlIHRvIERvY3VtZW50IG1hdGNoZXMgbGlmZXRpbWUKKyAgICAgICAgb2YgdGltZW91
dHMgYW5kIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG5vdCByb3VuZHRyaXAgdGhlbSB2aWEgUGF1c2Vk
VGltZW91dHMgCisgICAgICAgIGV2ZXJ5IHRpbWUgd2hlbiBKU0RPTVdpbmRvdyB3cmFwcGVyIGlz
IGRlc3Ryb3llZCB3aGlsZSB0aGUgcGFnZSBpcyBpbiB0aGUgYi9mIGNhY2hlLgorCisgICAgICAg
IFRpbWVvdXRzIGFyZSBub3cgcGF1c2VkIHdpdGggb3RoZXIgQWN0aXZlRE9NT2JqZWN0czoKKyAg
ICAgICAgLSBiZWZvcmUgY3JlYXRpbmcgQ2FjaGVkUGFnZSBpbiBGcmFtZUxvYWRlcjo6Y29tbWl0
UHJvdmlzaW9uYWxMb2FkKCkKKyAgICAgICAgLSBpbiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNl
dEphdmFTY3JpcHRQYXVzZWQKKyAgICAgICAgLSBkdXJpbmcgbW9kYWwgVUkgb3BlcmF0aW9ucyBp
biBDaHJvbWUKKyAgICAgICAgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHByZXZpb3VzIHVzYWdlIG9m
IEpTRE9NV2luZG93QmFzZTo6cGF1c2VUaW1lb3V0cygpCisKKyAgICAgICAgVGltZW91dHMgYXJl
IHN0b3BwZWQgdG8gcHJldmVudCBmdXR1cmUgZmlyaW5nIGZyb206CisgICAgICAgIC0gRnJhbWVM
b2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpIG9uIG5hdmlnYXRpb24gZnJvbSB0aGUgcGFn
ZQorICAgICAgICAtIEZyYW1lTG9hZGVyOjpmcmFtZURldGFjaGVkKCkgb24gY2xvc2luZworICAg
ICAgICB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gcHJldmlvdXMgdXNhZ2Ugb2YgSlNET01XaW5kb3dC
YXNlOjpjbGVhckFsbFRpbWVvdXRzKCkKKworICAgICAgICBUaGlzIGlzIGFsc28gb25lIG9mIHRo
ZSBzdGVwcyB0byBoYXZpbmcgdGltZXJzIGluIFdvcmtlcnMuIFNlZSB0aGUgcGxhbiBvZgorICAg
ICAgICB0aGUgbmV4dCBzdGVwcyBpbiB0aGUgYnVnIGFib3ZlLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvRE9NVGltZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OkRPTVRpbWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpET01UaW1lcjo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRp
bWVyOjpjb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVRpbWVyOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OmNhblN1
c3BlbmQpOiBJbXBsZW1lbnRlZCBBY3RpdmVET01PYmplY3QgbWV0aG9kcy4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0RPTVRpbWVyLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcDogQWN0aXZlRE9NT2JqZWN0IGNhbiBoYXZlIG5vIEpTIHdyYXBwZXIKKyAgICAgICAg
KFdlYkNvcmU6Om1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCk6IAorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93QmFzZTo6fkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
d0Jhc2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6aW5zdGFs
bFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpyZW1vdmVUaW1l
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5oOgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDogRG9jdW1lbnQgbm93IGhv
bGRzIGEgaGFzaCBtYXAgaWQtPnRpbWVvdXQKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojph
ZGRUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVUaW1lb3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5kVGltZW91dCk6CisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFBhZ2U6OkNhY2hlZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkUGFnZTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQYWdlOjpjbGVhcik6
CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0ph
dmFTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6On5KYXZhU2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SmF2
YVNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2NyaXB0UGF1c2VkKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25h
bExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9wZW4pOgorICAgICAgICAq
IHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cExvYWREZWZlcnJl
cjo6UGFnZUdyb3VwTG9hZERlZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cExv
YWREZWZlcnJlcjo6flBhZ2VHcm91cExvYWREZWZlcnJlcik6CisKIDIwMDgtMTItMDMgIERpcmsg
U2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFz
IFppbW1lcm1hbm4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcAkocmV2aXNpb24gMzg5
NTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTcgKzI3LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NVGlt
ZXIuaCIKIAotI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24u
aCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBpbnQgRE9NVGltZXI6Om1fdGlt
ZXJOZXN0aW5nTGV2ZWwgPSAwOwogCi1ET01UaW1lcjo6RE9NVGltZXIoSlNET01XaW5kb3dCYXNl
KiBvYmplY3QsIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKQotICAgIDogbV9vYmplY3Qob2JqZWN0
KQorRE9NVGltZXI6OkRPTVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNj
aGVkdWxlZEFjdGlvbiogYWN0aW9uKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRo
aXMpCiAgICAgLCBtX2FjdGlvbihhY3Rpb24pCisgICAgLCBtX25leHRGaXJlSW50ZXJ2YWwoMCkK
IHsKICAgICBzdGF0aWMgaW50IGxhc3RVc2VkVGltZW91dElkID0gMDsKICAgICArK2xhc3RVc2Vk
VGltZW91dElkOwpAQCAtNDksMTYgKzUyLDYgQEAgRE9NVGltZXI6OkRPTVRpbWVyKEpTRE9NV2lu
ZG93QmFzZSogb2JqZQogICAgIG1fbmVzdGluZ0xldmVsID0gbV90aW1lck5lc3RpbmdMZXZlbCAr
IDE7CiB9CiAKLURPTVRpbWVyOjpET01UaW1lcihpbnQgdGltZW91dElkLCBpbnQgbmVzdGluZ0xl
dmVsLCBKU0RPTVdpbmRvd0Jhc2UqIG9iamVjdCwgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24pCi0g
ICAgOiBtX3RpbWVvdXRJZCh0aW1lb3V0SWQpCi0gICAgLCBtX25lc3RpbmdMZXZlbChuZXN0aW5n
TGV2ZWwpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi0gICAgLCBtX2FjdGlvbihhY3Rpb24pCi17
Ci0gICAgQVNTRVJUKHRpbWVvdXRJZCA+IDApOwotICAgIEFTU0VSVChuZXN0aW5nTGV2ZWwgPiAw
KTsKLX0KLQogRE9NVGltZXI6On5ET01UaW1lcigpCiB7CiAgICAgSlNDOjpKU0xvY2sgbG9jayhm
YWxzZSk7CkBAIC02Nyw5ICs2MCw1MSBAQCBET01UaW1lcjo6fkRPTVRpbWVyKCkKIAogdm9pZCBE
T01UaW1lcjo6ZmlyZWQoKQogewotICAgIG1fdGltZXJOZXN0aW5nTGV2ZWwgPSBtX25lc3RpbmdM
ZXZlbDsKLSAgICBtX29iamVjdC0+dGltZXJGaXJlZCh0aGlzKTsKLSAgICBtX3RpbWVyTmVzdGlu
Z0xldmVsID0gMDsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIC8vIEZJWE1FOiBtYWtlIGl0IHdvcmsgd2l0aCBXb3Jr
ZXJzIFNFQyB0b28uCisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAg
ICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZG9jdW1lbnQtPmZy
YW1lKCkpKSB7CisgICAgICAgICAgICBtX3RpbWVyTmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2
ZWw7CisgICAgICAgICAgICB3aW5kb3ctPnRpbWVyRmlyZWQodGhpcyk7CisgICAgICAgICAgICBt
X3RpbWVyTmVzdGluZ0xldmVsID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBET01U
aW1lcjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNBY3RpdmUo
KTsKK30KKwordm9pZCBET01UaW1lcjo6Y29udGV4dERlc3Ryb3llZCgpCit7CisgICAgQWN0aXZl
RE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3Zv
aWQgRE9NVGltZXI6OnN0b3AoKQoreworICAgIFRpbWVyQmFzZTo6c3RvcCgpOworfQorCit2b2lk
IERPTVRpbWVyOjpzdXNwZW5kKCkgCit7IAorICAgIEFTU0VSVChtX25leHRGaXJlSW50ZXJ2YWwg
PT0gMCk7IAorICAgIG1fbmV4dEZpcmVJbnRlcnZhbCA9IG5leHRGaXJlSW50ZXJ2YWwoKTsKKyAg
ICBUaW1lckJhc2U6OnN0b3AoKTsKK30gCisgCit2b2lkIERPTVRpbWVyOjpyZXN1bWUoKSAKK3sg
CisgICAgc3RhcnQobV9uZXh0RmlyZUludGVydmFsLCByZXBlYXRJbnRlcnZhbCgpKTsKKyAgICBt
X25leHRGaXJlSW50ZXJ2YWwgPSAwOworfSAKKyAKKyAKK2Jvb2wgRE9NVGltZXI6OmNhblN1c3Bl
bmQoKSBjb25zdCAKK3sgCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvRE9NVGltZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVRpbWVyLmgJKHJldmlzaW9uIDM4OTUyKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01UaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaWZuZGVmIERPTVRpbWVyX2gKICNkZWZpbmUgRE9NVGltZXJfaAogCisjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzQsMTIgKzM1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEpTRE9N
V2luZG93QmFzZTsKIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKIAotY2xhc3MgRE9NVGltZXIgOiBw
dWJsaWMgVGltZXJCYXNlIHsKK2NsYXNzIERPTVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSwgcHVi
bGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlcyBhIG5ldyB0aW1l
ciB3aXRoIHRoZSBuZXh0IGlkIGFuZCBuZXN0aW5nIGxldmVsLgotICAgIERPTVRpbWVyKEpTRE9N
V2luZG93QmFzZSosIFNjaGVkdWxlZEFjdGlvbiopOwotICAgIC8vIENyZWF0ZXMgYSB0aW1lciBm
cm9tIFBhdXNlZFRpbWVvdXQsIHRha2VzIHRpbWVvdXRJZCBhbmQgbmVzdGluZ0xldmVsIGFzIHRo
ZXkgd2VyZSBwZXJzaXN0ZWQuCi0gICAgRE9NVGltZXIoaW50IHRpbWVvdXRJZCwgaW50IG5lc3Rp
bmdMZXZlbCwgSlNET01XaW5kb3dCYXNlKiwgU2NoZWR1bGVkQWN0aW9uKik7CisgICAgRE9NVGlt
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNjaGVkdWxlZEFjdGlvbiopOwogICAgIHZpcnR1
YWwgfkRPTVRpbWVyKCk7CiAKICAgICBpbnQgdGltZW91dElkKCkgY29uc3QgeyByZXR1cm4gbV90
aW1lb3V0SWQ7IH0KQEAgLTUwLDE0ICs0OSwyMiBAQCBwdWJsaWM6CiAgICAgU2NoZWR1bGVkQWN0
aW9uKiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FjdGlvbjsgfQogICAgIFNjaGVkdWxlZEFj
dGlvbiogdGFrZUFjdGlvbigpIHsgU2NoZWR1bGVkQWN0aW9uKiBhID0gbV9hY3Rpb247IG1fYWN0
aW9uID0gMDsgcmV0dXJuIGE7IH0KIAorICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1
YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
dGV4dERlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisgICAgdmlydHVhbCBi
b29sIGNhblN1c3BlbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOworICAg
IHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZmly
ZWQoKTsKIAogICAgIGludCBtX3RpbWVvdXRJZDsKICAgICBpbnQgbV9uZXN0aW5nTGV2ZWw7Ci0g
ICAgSlNET01XaW5kb3dCYXNlKiBtX29iamVjdDsKICAgICBTY2hlZHVsZWRBY3Rpb24qIG1fYWN0
aW9uOwogICAgIHN0YXRpYyBpbnQgbV90aW1lck5lc3RpbmdMZXZlbDsKKyAgICBkb3VibGUgbV9u
ZXh0RmlyZUludGVydmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMzg5NTIpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw4ICsy
OTgsMTAgQEAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoSlNHbG9iYQogICAgIGZv
ciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBhY3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVy
KSB7CiAgICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpIHsKICAg
ICAgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIo
Z2xvYmFsRGF0YSwgaXRlci0+c2Vjb25kKTsKLSAgICAgICAgICAgIC8vIEFuIG9iamVjdCB3aXRo
IHBlbmRpbmcgYWN0aXZpdHkgbXVzdCBoYXZlIGEgd3JhcHBlciB0byBtYXJrIGl0cyBsaXN0ZW5l
cnMsIHNvIG5vIG51bGwgY2hlY2suCi0gICAgICAgICAgICBpZiAoIXdyYXBwZXItPm1hcmtlZCgp
KQorICAgICAgICAgICAgLy8gR2VuZXJhbGx5LCBhbiBhY3RpdmUgb2JqZWN0IHdpdGggcGVuZGlu
ZyBhY3Rpdml0eSBtdXN0IGhhdmUgYSB3cmFwcGVyIHRvIG1hcmsgaXRzIGxpc3RlbmVycy4KKyAg
ICAgICAgICAgIC8vIEhvd2V2ZXIsIHNvbWUgQWN0aXZlRE9NT2JqZWN0cyBkb24ndCBoYXZlIEpT
IHdyYXBwZXJzICh0aW1lcnMgY3JlYXRlZCBieSBzZXRUaW1lb3V0IGlzIG9uZSBleGFtcGxlKS4K
KyAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJoYXBzIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZW4gdGlt
ZXJzIGhhdmUgYSBtYXJrYWJsZSAnd3JhcHBlcicuCisgICAgICAgICAgICBpZiAod3JhcHBlciAm
JiAhd3JhcHBlci0+bWFya2VkKCkpCiAgICAgICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOwog
ICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAkocmV2aXNpb24gMzg5NTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGF1c2VkVGltZW91dHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2lu
Y2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTE1
OSw4ICsxNTgsNiBAQCBKU0RPTVdpbmRvd0Jhc2U6On5KU0RPTVdpbmRvd0Jhc2UoKQogewogICAg
IGlmIChkKCktPmltcGwtPmZyYW1lKCkpCiAgICAgICAgIGQoKS0+aW1wbC0+ZnJhbWUoKS0+c2Ny
aXB0KCktPmNsZWFyRm9ybWVyV2luZG93KGFzSlNET01XaW5kb3codGhpcykpOwotCi0gICAgY2xl
YXJBbGxUaW1lb3V0cygpOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTVdpbmRv
d0Jhc2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApAQCAtNzAwLDcgKzY5Nyw2IEBA
IHZvaWQgSlNET01XaW5kb3dCYXNlOjpjbGVhcigpCiAgICAgaWYgKGQoKS0+cmV0dXJuVmFsdWVT
bG90ICYmICEqZCgpLT5yZXR1cm5WYWx1ZVNsb3QpCiAgICAgICAgICpkKCktPnJldHVyblZhbHVl
U2xvdCA9IGdldERpcmVjdChJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJldHVyblZhbHVlIikp
OwogCi0gICAgY2xlYXJBbGxUaW1lb3V0cygpOwogICAgIGNsZWFySGVscGVyT2JqZWN0UHJvcGVy
dGllcygpOwogfQogCkBAIC04MjYsMTggKzgyMiwxNCBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6
c2V0UmV0dXJuVmFsdWVTbG90CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gdGltZW91dHMgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLXZvaWQgSlNET01XaW5kb3dCYXNlOjpjbGVhckFsbFRp
bWVvdXRzKCkKLXsKLSAgICBkZWxldGVBbGxWYWx1ZXMoZCgpLT50aW1lb3V0cyk7Ci0gICAgZCgp
LT50aW1lb3V0cy5jbGVhcigpOwotfQotCiBpbnQgSlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGlt
ZW91dChTY2hlZHVsZWRBY3Rpb24qIGEsIGludCB0LCBib29sIHNpbmdsZVNob3QpCiB7Ci0gICAg
RE9NVGltZXIqIHRpbWVyID0gbmV3IERPTVRpbWVyKHRoaXMsIGEpOworICAgIERPTVRpbWVyKiB0
aW1lciA9IG5ldyBET01UaW1lcihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGEpOwogICAgIGlu
dCB0aW1lb3V0SWQgPSB0aW1lci0+dGltZW91dElkKCk7Ci0gICAgQVNTRVJUKCFkKCktPnRpbWVv
dXRzLmdldCh0aW1lb3V0SWQpKTsKLSAgICBkKCktPnRpbWVvdXRzLnNldCh0aW1lb3V0SWQsIHRp
bWVyKTsKKworICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3VtZW50KCkpOworICAgIGQoKS0+aW1w
bC0+ZG9jdW1lbnQoKS0+YWRkVGltZW91dCh0aW1lb3V0SWQsIHRpbWVyKTsKKyAgICAKICAgICAv
LyBVc2UgYSBtaW5pbXVtIGludGVydmFsIG9mIDEwIG1zIHRvIG1hdGNoIG90aGVyIGJyb3dzZXJz
LCBidXQgb25seSBvbmNlIHdlJ3ZlCiAgICAgLy8gbmVzdGVkIGVub3VnaCB0byBub3RpY2UgdGhh
dCB3ZSdyZSByZXBlYXRpbmcuCiAgICAgLy8gRmFzdGVyIHRpbWVycyBtaWdodCBiZSAiYmV0dGVy
IiwgYnV0IHRoZXkncmUgaW5jb21wYXRpYmxlLgpAQCAtODYxLDUwICs4NTMsNyBAQCBpbnQgSlNE
T01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dChFeGVjCiAgICAgcmV0dXJuIGluc3RhbGxUaW1l
b3V0KG5ldyBTY2hlZHVsZWRBY3Rpb24oZXhlYywgZnVuYywgYXJncyksIHQsIHNpbmdsZVNob3Qp
OwogfQogCi12b2lkIEpTRE9NV2luZG93QmFzZTo6cGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2Vk
VGltZW91dHM+JiByZXN1bHQpCi17Ci0gICAgc2l6ZV90IHRpbWVvdXRzQ291bnQgPSBkKCktPnRp
bWVvdXRzLnNpemUoKTsKLSAgICBpZiAoIXRpbWVvdXRzQ291bnQpIHsKLSAgICAgICAgcmVzdWx0
LmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQYXVzZWRUaW1lb3V0KiB0
ID0gbmV3IFBhdXNlZFRpbWVvdXRbdGltZW91dHNDb3VudF07Ci0gICAgcmVzdWx0LnNldChuZXcg
UGF1c2VkVGltZW91dHModCwgdGltZW91dHNDb3VudCkpOwotCi0gICAgSlNET01XaW5kb3dCYXNl
RGF0YTo6VGltZW91dHNNYXA6Oml0ZXJhdG9yIGl0ID0gZCgpLT50aW1lb3V0cy5iZWdpbigpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHRpbWVvdXRzQ291bnQ7ICsraSwgKytpdCkgewot
ICAgICAgICBpbnQgdGltZW91dElkID0gaXQtPmZpcnN0OwotICAgICAgICBET01UaW1lciogdGlt
ZXIgPSBpdC0+c2Vjb25kOwotICAgICAgICB0W2ldLnRpbWVvdXRJZCA9IHRpbWVvdXRJZDsKLSAg
ICAgICAgdFtpXS5uZXN0aW5nTGV2ZWwgPSB0aW1lci0+bmVzdGluZ0xldmVsKCk7Ci0gICAgICAg
IHRbaV0ubmV4dEZpcmVJbnRlcnZhbCA9IHRpbWVyLT5uZXh0RmlyZUludGVydmFsKCk7Ci0gICAg
ICAgIHRbaV0ucmVwZWF0SW50ZXJ2YWwgPSB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKTsKLSAgICAg
ICAgdFtpXS5hY3Rpb24gPSB0aW1lci0+dGFrZUFjdGlvbigpOwotICAgIH0KLSAgICBBU1NFUlQo
aXQgPT0gZCgpLT50aW1lb3V0cy5lbmQoKSk7Ci0KLSAgICBkZWxldGVBbGxWYWx1ZXMoZCgpLT50
aW1lb3V0cyk7Ci0gICAgZCgpLT50aW1lb3V0cy5jbGVhcigpOwotfQotCi12b2lkIEpTRE9NV2lu
ZG93QmFzZTo6cmVzdW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYgdGltZW91dHMp
Ci17Ci0gICAgaWYgKCF0aW1lb3V0cykKLSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBjb3Vu
dCA9IHRpbWVvdXRzLT5udW1UaW1lb3V0cygpOwotICAgIFBhdXNlZFRpbWVvdXQqIGFycmF5ID0g
dGltZW91dHMtPnRha2VUaW1lb3V0cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGNv
dW50OyArK2kpIHsKLSAgICAgICAgaW50IHRpbWVvdXRJZCA9IGFycmF5W2ldLnRpbWVvdXRJZDsK
LSAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gbmV3IERPTVRpbWVyKHRpbWVvdXRJZCwgYXJyYXlb
aV0ubmVzdGluZ0xldmVsLCB0aGlzLCBhcnJheVtpXS5hY3Rpb24pOwotICAgICAgICBkKCktPnRp
bWVvdXRzLnNldCh0aW1lb3V0SWQsIHRpbWVyKTsKLSAgICAgICAgdGltZXItPnN0YXJ0KGFycmF5
W2ldLm5leHRGaXJlSW50ZXJ2YWwsIGFycmF5W2ldLnJlcGVhdEludGVydmFsKTsKLSAgICB9Ci0g
ICAgZGVsZXRlIFtdIGFycmF5OwotICAgIHRpbWVvdXRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSlNE
T01XaW5kb3dCYXNlOjpyZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQsIGJvb2wgZGVsQWN0aW9u
KQordm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCkKIHsK
ICAgICAvLyB0aW1lb3V0IElEcyBoYXZlIHRvIGJlIHBvc2l0aXZlLCBhbmQgMCBhbmQgLTEgYXJl
IHVuc2FmZSB0bwogICAgIC8vIGV2ZW4gbG9vayB1cCBzaW5jZSB0aGV5IGFyZSB0aGUgZW1wdHkg
YW5kIGRlbGV0ZWQgdmFsdWUKQEAgLTkxMiw3ICs4NjEsOCBAQCB2b2lkIEpTRE9NV2luZG93QmFz
ZTo6cmVtb3ZlVGltZW91dChpbnQgCiAgICAgaWYgKHRpbWVvdXRJZCA8PSAwKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBkZWxldGUgZCgpLT50aW1lb3V0cy50YWtlKHRpbWVvdXRJZCk7CisgICAg
QVNTRVJUKGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7CisgICAgZCgpLT5pbXBsLT5kb2N1bWVudCgp
LT5yZW1vdmVUaW1lb3V0KHRpbWVvdXRJZCk7CiB9CiAKIHZvaWQgSlNET01XaW5kb3dCYXNlOjp0
aW1lckZpcmVkKERPTVRpbWVyKiB0aW1lcikKQEAgLTkyNCw3ICs4NzQsOCBAQCB2b2lkIEpTRE9N
V2luZG93QmFzZTo6dGltZXJGaXJlZChET01UaW1lCiAgICAgICAgIHRpbWVyLT5hY3Rpb24oKS0+
ZXhlY3V0ZShzaGVsbCgpKTsKICAgICAgICAgLy8gVGhlIERPTVRpbWVyIG9iamVjdCBtYXkgaGF2
ZSBiZWVuIGRlbGV0ZWQgb3IgcmVwbGFjZWQgZHVyaW5nIGV4ZWN1dGlvbiwKICAgICAgICAgLy8g
c28gd2UgcmUtZmV0Y2ggaXQuCi0gICAgICAgIHRpbWVyID0gZCgpLT50aW1lb3V0cy5nZXQodGlt
ZW91dElkKTsKKyAgICAgICAgQVNTRVJUKGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7CisgICAgICAg
IHRpbWVyID0gZCgpLT5pbXBsLT5kb2N1bWVudCgpLT5maW5kVGltZW91dCh0aW1lb3V0SWQpOwog
ICAgICAgICBpZiAoIXRpbWVyKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC05MzgsOCArODg5
LDcgQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnRpbWVyRmlyZWQoRE9NVGltZQogCiAgICAgLy8g
RGVsZXRlIHRpbWVyIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbiBmb3Igb25lLXNob3QgdGlt
ZXJzLgogICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uID0gdGltZXItPnRha2VBY3Rpb24oKTsK
LSAgICBkKCktPnRpbWVvdXRzLnJlbW92ZSh0aW1lci0+dGltZW91dElkKCkpOwotICAgIGRlbGV0
ZSB0aW1lcjsKKyAgICByZW1vdmVUaW1lb3V0KHRpbWVyLT50aW1lb3V0SWQoKSk7CiAgICAgYWN0
aW9uLT5leGVjdXRlKHNoZWxsKCkpOwogCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwpAQCAtOTQ4
LDcgKzg5OCw2IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjp0aW1lckZpcmVkKERPTVRpbWUKIAog
dm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7Ci0gICAgY2xlYXJBbGxU
aW1lb3V0cygpOwogfQogCiBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIERPTVdpbmRvdyogZG9t
V2luZG93KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lv
biAzODk1MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEpTRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBKU0xvY2F0aW9uOwogICAgIGNsYXNzIEpTVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVyOwotICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOwogICAgIGNs
YXNzIFNjaGVkdWxlZEFjdGlvbjsKICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIApAQCAtNjcs
MTAgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGludCBpbnN0YWxsVGlt
ZW91dChjb25zdCBKU0M6OlVTdHJpbmcmIGhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3Qp
OwogICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUqIGZ1bmN0aW9uLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIGludCB0LCBib29sIHNpbmds
ZVNob3QpOwotICAgICAgICB2b2lkIHJlbW92ZVRpbWVvdXQoaW50IHRpbWVySWQsIGJvb2wgZGVs
QWN0aW9uID0gdHJ1ZSk7Ci0KLSAgICAgICAgdm9pZCBwYXVzZVRpbWVvdXRzKE93blB0cjxQYXVz
ZWRUaW1lb3V0cz4mKTsKLSAgICAgICAgdm9pZCByZXN1bWVUaW1lb3V0cyhPd25QdHI8UGF1c2Vk
VGltZW91dHM+Jik7CisgICAgICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsK
IAogICAgICAgICB2b2lkIHRpbWVyRmlyZWQoRE9NVGltZXIqKTsKIApAQCAtMTAyLDggKzk4LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBKU0M6OkpTR2xvYmFsRGF0
YSogY29tbW9uSlNHbG9iYWxEYXRhKCk7CiAKLSAgICAgICAgdm9pZCBjbGVhckFsbFRpbWVvdXRz
KCk7Ci0KICAgICBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgSlNET01XaW5kb3dCYXNlRGF0YSA6
IHB1YmxpYyBKU0RPTUdsb2JhbE9iamVjdERhdGEgewogICAgICAgICAgICAgSlNET01XaW5kb3dC
YXNlRGF0YShQYXNzUmVmUHRyPERPTVdpbmRvdz4sIEpTRE9NV2luZG93U2hlbGwqKTsKQEAgLTEx
Miw5ICsxMDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgICAgIEpTQzo6SlNW
YWx1ZSoqIHJldHVyblZhbHVlU2xvdDsKICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNo
ZWxsOwotCi0gICAgICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01UaW1lcio+IFRpbWVv
dXRzTWFwOwotICAgICAgICAgICAgVGltZW91dHNNYXAgdGltZW91dHM7CiAgICAgICAgIH07CiAK
ICAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSogY2hpbGRGcmFtZUdldHRlcihKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDM4OTUyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUxLDI1ICszNTEsNCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0CiAgICAgY2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKIH0KIAot
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpwYXVzZVRpbWVvdXRzKE93blB0cjxQYXVzZWRUaW1lb3V0
cz4mIHJlc3VsdCkKLXsKLSAgICBpZiAoIWhhdmVXaW5kb3dTaGVsbCgpKSB7Ci0gICAgICAgIHJl
c3VsdC5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgd2luZG93U2hlbGwo
KS0+d2luZG93KCktPnBhdXNlVGltZW91dHMocmVzdWx0KTsKLX0KLQotdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpyZXN1bWVUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+JiBwYXVzZWRUaW1l
b3V0cykKLXsKLSAgICBpZiAoIWhhdmVXaW5kb3dTaGVsbCgpKSB7Ci0gICAgICAgIC8vIENhbGxl
cnMgY2FuIGFzc3VtZSB3ZSB3aWxsIGFsd2F5cyBjbGVhciB0aGUgcGFzc2VkIGluIHRpbWVvdXRz
Ci0gICAgICAgIHBhdXNlZFRpbWVvdXRzLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB3aW5kb3dTaGVsbCgpLT53aW5kb3coKS0+cmVzdW1lVGltZW91dHMocGF1c2VkVGlt
ZW91dHMpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMzg5NTIpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyRm9ybWVyV2luZG93KEpTRE9NV2luZG93KiB3aW5k
b3cpIHsgbV9saXZlRm9ybWVyV2luZG93cy5yZW1vdmUod2luZG93KTsgfQogICAgIHZvaWQgdXBk
YXRlRG9jdW1lbnQoKTsKIAotICAgIHZvaWQgcGF1c2VUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGlt
ZW91dHM+Jik7Ci0gICAgdm9pZCByZXN1bWVUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+
Jik7Ci0KICAgICB2b2lkIGNsZWFyU2NyaXB0T2JqZWN0cygpOwogICAgIHZvaWQgY2xlYW51cFNj
cmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCopOwogCkluZGV4OiBXZWJDb3JlL2RvbS9BY3RpdmVE
T01PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaAko
cmV2aXNpb24gMzg5NTIpCisrKyBXZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAKKyAgICAgICAgLy8gY2FuU3VzcGVu
ZCgpIGlzIHVzZWQgYnkgdGhlIGNhbGxlciBpZiB0aGVyZSBpcyBhIGNob2ljZSBiZXR3ZWVuIHN1
c3BlbmRpbmcgYW5kIHN0b3BwaW5nLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYSBwYWdlIHdv
bid0IGJlIHN1c3BlbmRlZCBhbmQgcGxhY2VkIGluIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUgaWYg
aXQgaGFzCisgICAgICAgIC8vIHRoZSBvYmplY3RzIHRoYXQgY2FuIG5vdCBiZSBzdXNwZW5kZWQu
CisgICAgICAgIC8vIEhvd2V2ZXIsICdzdXNwZW5kJyBjYW4gYmUgY2FsbGVkIGV2ZW4gaWYgY2Fu
U3VzcGVuZCgpIHdvdWxkIHJldHVybiAnZmFsc2UnLiBUaGF0CisgICAgICAgIC8vIGhhcHBlbnMg
aW4gc3RlcC1ieS1zdGVwIEpTIGRlYnVnZ2luZyBmb3IgZXhhbXBsZSAtIGluIHRoaXMgY2FzZSBp
dCB3b3VsZCBiZSBpbmNvcnJlY3QKKyAgICAgICAgLy8gdG8gc3RvcCB0aGUgb2JqZWN0LiBFeGFj
dCBzZW1hbnRpY3Mgb2Ygc3VzcGVuZCBpcyB1cCB0byB0aGUgb2JqZWN0IHRoZW4uCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dXNwZW5kKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKSW5kZXg6IFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDM4OTUyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkNv
b2tpZUphci5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiRE9N
VGltZXIuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCkBAIC00MjMwLDYgKzQyMzEsMjMgQEAgdm9p
ZCBEb2N1bWVudDo6cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZQogICAgIG1faGF2ZUV4cGxpY2l0
bHlEaXNhYmxlZEROU1ByZWZldGNoID0gdHJ1ZTsKIH0KIAordm9pZCBEb2N1bWVudDo6YWRkVGlt
ZW91dChpbnQgdGltZW91dElkLCBET01UaW1lciogdGltZXIpCit7CisgICAgQVNTRVJUKCFtX3Rp
bWVvdXRzLmdldCh0aW1lb3V0SWQpKTsKKyAgICBtX3RpbWVvdXRzLnNldCh0aW1lb3V0SWQsIHRp
bWVyKTsKK30KKwordm9pZCBEb2N1bWVudDo6cmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKQor
eworICAgIERPTVRpbWVyKiB0aW1lciA9IG1fdGltZW91dHMudGFrZSh0aW1lb3V0SWQpOworICAg
IGRlbGV0ZSB0aW1lcjsKK30KKworRE9NVGltZXIqIERvY3VtZW50OjpmaW5kVGltZW91dChpbnQg
dGltZW91dElkKQoreworICAgIHJldHVybiBtX3RpbWVvdXRzLmdldCh0aW1lb3V0SWQpOworfQor
CiB2b2lkIERvY3VtZW50OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAgICBpZiAo
RE9NV2luZG93KiB3aW5kb3cgPSBkb21XaW5kb3coKSkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzg5
NTIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEYXRhYmFzZTsKICAgICBjbGFz
cyBET01JbXBsZW1lbnRhdGlvbjsKICAgICBjbGFzcyBET01TZWxlY3Rpb247CisgICAgY2xhc3Mg
RE9NVGltZXI7CiAgICAgY2xhc3MgRE9NV2luZG93OwogICAgIGNsYXNzIERhdGFiYXNlVGhyZWFk
OwogICAgIGNsYXNzIERvY0xvYWRlcjsKQEAgLTc3Nyw2ICs3NzgsMTAgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIAorICAgIHZvaWQg
YWRkVGltZW91dChpbnQgdGltZW91dElkLCBET01UaW1lciopOworICAgIHZvaWQgcmVtb3ZlVGlt
ZW91dChpbnQgdGltZW91dElkKTsKKyAgICBET01UaW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVv
dXRJZCk7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhU
TUwpOwogCkBAIC0xMDgxLDYgKzEwODYsOSBAQCBwcml2YXRlOgogI2lmIFVTRShMT1dfQkFORFdJ
RFRIX0RJU1BMQVkpCiAgICAgYm9vbCBtX2luTG93QmFuZHdpZHRoRGlzcGxheTsKICNlbmRpZgor
CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRE9NVGltZXIqPiBUaW1lb3V0c01hcDsKKyAgICBU
aW1lb3V0c01hcCBtX3RpbWVvdXRzOwogfTsKIAogaW5saW5lIGJvb2wgRG9jdW1lbnQ6Omhhc0Vs
ZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAzODk1MikKKysrIFdlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gQWN0aXZlIG9iamVjdHMgYXJlIG5vdCBn
YXJiYWdlIGNvbGxlY3RlZCBldmVuIGlmIGluYWNjZXNzaWJsZSwgZS5nLiBiZWNhdXNlIHRoZWly
IGFjdGl2aXR5IG1heSByZXN1bHQgaW4gY2FsbGJhY2tzIGJlaW5nIGludm9rZWQuCiAgICAgICAg
IGJvb2wgY2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKTsKKyAgICAgICAgLy8gQWN0aXZlIG9i
amVjdHMgY2FuIGJlIGFza2VkIHRvIHN1c3BlbmQgZXZlbiBpZiBjYW5TdXNwZW5kQWN0aXZlRE9N
T2JqZWN0cygpIHJldHVybnMgJ2ZhbHNlJyAtCisgICAgICAgIC8vIHN0ZXAtYnktc3RlcCBKUyBk
ZWJ1Z2dpbmcgaXMgb25lIGV4YW1wbGUuCiAgICAgICAgIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMoKTsKICAgICAgICAgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzKCk7CiAgICAgICAg
IHZvaWQgc3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAJ
KHJldmlzaW9uIDM4OTUyKQorKysgV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQYXVzZWRUaW1l
b3V0cy5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTg2LDcgKzg1LDYgQEAgQ2Fj
aGVkUGFnZTo6Q2FjaGVkUGFnZShQYWdlKiBwYWdlKQogICAgIFNjcmlwdENvbnRyb2xsZXIqIHBy
b3h5ID0gbWFpbkZyYW1lLT5zY3JpcHQoKTsKICAgICBpZiAocHJveHktPmhhdmVXaW5kb3dTaGVs
bCgpKSB7CiAgICAgICAgIG1fd2luZG93ID0gcHJveHktPndpbmRvd1NoZWxsKCktPndpbmRvdygp
OwotICAgICAgICBtX3dpbmRvdy0+cGF1c2VUaW1lb3V0cyhtX3BhdXNlZFRpbWVvdXRzKTsKICAg
ICB9CiAKICAgICBtX2RvY3VtZW50LT5zZXRJblBhZ2VDYWNoZSh0cnVlKTsKQEAgLTExNCw3ICsx
MTIsNiBAQCB2b2lkIENhY2hlZFBhZ2U6OnJlc3RvcmUoUGFnZSogcGFnZSkKICAgICAgICAgSlNE
T01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBwcm94eS0+d2luZG93U2hlbGwoKTsKICAgICAg
ICAgaWYgKG1fd2luZG93KSB7CiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KG1f
d2luZG93LmdldCgpKTsKLSAgICAgICAgICAgIHdpbmRvd1NoZWxsLT53aW5kb3coKS0+cmVzdW1l
VGltZW91dHMobV9wYXVzZWRUaW1lb3V0cyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KG1haW5GcmFtZS0+ZG9tV2luZG93KCkpOwogICAgICAg
ICAgICAgcHJveHktPmF0dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2VyKCkpOwpAQCAtMTcwLDcg
KzE2Nyw2IEBAIHZvaWQgQ2FjaGVkUGFnZTo6Y2xlYXIoKQogICAgIG1fVVJMID0gS1VSTCgpOwog
CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIG1fcGF1c2VkVGltZW91dHMuY2xlYXIoKTsK
ICAgICBtX3dpbmRvdyA9IDA7CiAKICAgICBtX2NhY2hlZFBhZ2VQbGF0Zm9ybURhdGEuY2xlYXIo
KTsKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuaAkocmV2aXNpb24gMzg5NTIpCisrKyBXZWJDb3JlL2hp
c3RvcnkvQ2FjaGVkUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgIlBhdXNl
ZFRpbWVvdXRzLmgiCiAjaW5jbHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQwLDcgKzM5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEpTRE9NV2luZG93OwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKLSAgICBjbGFz
cyBQYXVzZWRUaW1lb3V0czsKIAogY2xhc3MgQ2FjaGVkUGFnZSA6IHB1YmxpYyBSZWZDb3VudGVk
PENhY2hlZFBhZ2U+IHsKIHB1YmxpYzoKQEAgLTczLDcgKzcxLDYgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8Tm9kZT4gbV9tb3VzZVByZXNzTm9kZTsKICAgICBLVVJMIG1fVVJMOwogICAgIEpTQzo6
UHJvdGVjdGVkUHRyPEpTRE9NV2luZG93PiBtX3dpbmRvdzsKLSAgICBPd25QdHI8UGF1c2VkVGlt
ZW91dHM+IG1fcGF1c2VkVGltZW91dHM7CiAgICAgT3duUHRyPENhY2hlZFBhZ2VQbGF0Zm9ybURh
dGE+IG1fY2FjaGVkUGFnZVBsYXRmb3JtRGF0YTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVj
dG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMzg5NTIpCisrKyBXZWJD
b3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGF1c2Vk
VGltZW91dHMuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmll
dy5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtNzksNyArNzgsNiBAQCBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6On5KYXZhU2NyaXB0RGVidWdTCiB7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGFn
ZUxpc3RlbmVyc01hcCk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fYnJlYWtwb2ludHMpOwotICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX3BhdXNlZFRpbWVvdXRzKTsKIH0KIAogdm9pZCBKYXZhU2NyaXB0
RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5l
cikKQEAgLTM2NSwxNSArMzYzLDExIEBAIHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzZXRK
YXZhU2NyaXAKIAogICAgIGZyYW1lLT5zY3JpcHQoKS0+c2V0UGF1c2VkKHBhdXNlZCk7CiAKLSAg
ICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUpKSB7Ci0gICAg
ICAgIGlmIChwYXVzZWQpIHsKLSAgICAgICAgICAgIE93blB0cjxQYXVzZWRUaW1lb3V0cz4gdGlt
ZW91dHM7Ci0gICAgICAgICAgICB3aW5kb3ctPnBhdXNlVGltZW91dHModGltZW91dHMpOwotICAg
ICAgICAgICAgbV9wYXVzZWRUaW1lb3V0cy5zZXQoZnJhbWUsIHRpbWVvdXRzLnJlbGVhc2UoKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBPd25QdHI8UGF1c2VkVGltZW91dHM+IHRp
bWVvdXRzKG1fcGF1c2VkVGltZW91dHMudGFrZShmcmFtZSkpOwotICAgICAgICAgICAgd2luZG93
LT5yZXN1bWVUaW1lb3V0cyh0aW1lb3V0cyk7Ci0gICAgICAgIH0KKyAgICBpZiAoRG9jdW1lbnQq
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKHBhdXNlZCkKKyAg
ICAgICAgICAgIGRvY3VtZW50LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpOwogICAg
IH0KIAogICAgIHNldEphdmFTY3JpcHRQYXVzZWQoZnJhbWUtPnZpZXcoKSwgcGF1c2VkKTsKSW5k
ZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAz
ODk1MikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBQYWdlR3JvdXA7Ci0gICAg
Y2xhc3MgUGF1c2VkVGltZW91dHM7CiAgICAgY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKICAg
ICBjbGFzcyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcjsKIApAQCAtMTIyLDcgKzEyMSw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJF
dmVudHM7CiAgICAgICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIG1fcGF1c2VPbkNhbGxGcmFtZTsK
ICAgICAgICAgUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY3VycmVudENhbGxGcmFtZTsK
LSAgICAgICAgSGFzaE1hcDxSZWZQdHI8RnJhbWU+LCBQYXVzZWRUaW1lb3V0cyo+IG1fcGF1c2Vk
VGltZW91dHM7CiAgICAgICAgIEhhc2hNYXA8aW50cHRyX3QsIEhhc2hTZXQ8dW5zaWduZWQ+Kj4g
bV9icmVha3BvaW50czsKICAgICAgICAgVGltZXI8SmF2YVNjcmlwdERlYnVnU2VydmVyPiBtX3Jl
Y29tcGlsZVRpbWVyOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lv
biAzODk1MikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjY5MCwxNiArMjY5MCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lv
bmFsTG9hZCgKICAgICAgICAgICAgIGRvY3VtZW50LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygp
OwogICAgICAgICBjYWNoZVBhZ2VGb3JIaXN0b3J5SXRlbShtX2N1cnJlbnRIaXN0b3J5SXRlbS5n
ZXQoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2Zy
YW1lID09IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgICAgIC8vIElm
IHRoZSBtYWluIGZyYW1lIGluc3RhbGxzIGEgdGltZW91dCBsYXRlIGVub3VnaCAoZm9yIGV4YW1w
bGUgaW4gaXRzIG9udW5sb2FkIGhhbmRsZXIpCi0gICAgICAgICAgICAvLyBpdCBjb3VsZCBzb21l
dGltZXMgZmlyZSB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYSBub24tSFRNTCBkb2N1bWVudCByZXBy
ZXNlbnRhdGlvbiAoc3VjaCBhcyB0aGUgTWFjIGJvb2ttYXJrcyB2aWV3KS4KLSAgICAgICAgICAg
IC8vIFRvIGF2b2lkIHRoaXMsIHdlIGNsZWFyIGFsbCB0aW1lb3V0cyBpZiB0aGUgcGFnZSBpcyBu
b3QgdG8gYmUgY2FjaGVkIGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdC4KLSAgICAgICAgICAgIC8v
IENhY2hlZCBwYWdlcyBoYXZlIHRoZWlyIHRpbWVycyBwYXVzZWQgc28gdGhleSBhcmUgZmluZS4K
LSAgICAgICAgICAgIFNjcmlwdENvbnRyb2xsZXIqIHByb3h5ID0gbV9mcmFtZS0+c2NyaXB0KCk7
Ci0gICAgICAgICAgICBpZiAocHJveHktPmhhdmVXaW5kb3dTaGVsbCgpKQotICAgICAgICAgICAg
ICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT53aW5kb3coKS0+Y2xlYXJBbGxUaW1lb3V0cygpOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBJbnRlZ3JhdGUgY2xlYXJpbmcgdGltZW91dHMg
aW50byBzdG9wQWN0aXZlRE9NT2JqZWN0cygpLgogICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgIGRvY3VtZW50LT5zdG9wQWN0
aXZlRE9NT2JqZWN0cygpOwogICAgIH0KQEAgLTI5NjQsNyArMjk1NCw4IEBAIHZvaWQgRnJhbWVM
b2FkZXI6Om9wZW4oQ2FjaGVkUGFnZSYgY2FjaGUKICAgICB1cGRhdGVQb2xpY3lCYXNlVVJMKCk7
CiAKICAgICBjYWNoZWRQYWdlLnJlc3RvcmUobV9mcmFtZS0+cGFnZSgpKTsKLQorICAgIGRvY3Vt
ZW50LT5yZXN1bWVBY3RpdmVET01PYmplY3RzKCk7CisgICAgCiAgICAgY2hlY2tDb21wbGV0ZWQo
KTsKIH0KIApJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0Nocm9tZS5jcHAJKHJldmlzaW9uIDM4OTUyKQorKysgV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NiwxMCArNDY2LDggQEAgUGFnZUdyb3VwTG9h
ZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZQogCiAjaWYgIVBMQVRGT1JNKE1BQykKICAgICAg
ICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gb3RoZXJQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgICAg
ICBPd25QdHI8UGF1c2VkVGltZW91dHM+IHRpbWVvdXRzOwotICAgICAgICAgICAgICAgIGZyYW1l
LT5zY3JpcHQoKS0+cGF1c2VUaW1lb3V0cyh0aW1lb3V0cyk7Ci0gICAgICAgICAgICAgICAgaWYg
KHRpbWVvdXRzKQotICAgICAgICAgICAgICAgICAgICBtX3BhdXNlZFRpbWVvdXRzLmFwcGVuZCht
YWtlX3BhaXIoUmVmUHRyPEZyYW1lPihmcmFtZSksIHRpbWVvdXRzLnJlbGVhc2UoKSkpOworICAg
ICAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkK
KyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQtPnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk7
CiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQpAQCAtNDgzLDE3ICs0ODEsMTcgQEAg
UGFnZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZQogCiBQYWdlR3JvdXBMb2Fk
RGVmZXJyZXI6On5QYWdlR3JvdXBMb2FkRGVmZXJyZXIoKQogewotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9kZWZlcnJlZEZyYW1lcy5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZGVmZXJyZWRGcmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX2RlZmVycmVkRnJhbWVzW2ldLT5wYWdlKCkpCiAgICAgICAgICAgICBwYWdl
LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKIAogI2lmICFQTEFURk9STShNQUMpCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3BhdXNlZFRpbWVvdXRzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGF1c2VkVGltZW91dHNbaV0uZmlyc3QuZ2V0KCk7Ci0gICAg
ICAgIE93blB0cjxQYXVzZWRUaW1lb3V0cz4gdGltZW91dHMobV9wYXVzZWRUaW1lb3V0c1tpXS5z
ZWNvbmQpOwotICAgICAgICBmcmFtZS0+c2NyaXB0KCktPnJlc3VtZVRpbWVvdXRzKHRpbWVvdXRz
KTsKLSAgICB9CisgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAg
ICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAg
ICAgICAgICAgZG9jdW1lbnQtPnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKTsKKyAgICAgICAgfQog
I2VuZGlmCisgICAgfQogfQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25733</attachid>
            <date>2008-12-03 19:33:44 -0800</date>
            <delta_ts>2008-12-03 23:05:54 -0800</delta_ts>
            <desc>patch v5</desc>
            <filename>patch5.txt</filename>
            <type>text/plain</type>
            <size>28880</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODk2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODcgQEAKKzIwMDgtMTItMDMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNpbmcgQWN0aXZlRE9NT2JqZWN0IGFzIGJhc2UgY2xhc3MgZm9yIERPTVRpbWVyLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAKKworICAgICAg
ICBVc2luZyBBY3RpdmVET01PYmplY3Qgc2ltcGxpZmllcyB0aGUgY29kZSBiZWNhdXNlIEFjdGl2
ZURPTU9iamVjdAorICAgICAgICBpcyB3aXJlZCBmb3Igc3RvcC9wYXVzZS9yZXN1bWUgb24gbG9h
ZGluZy91bmxvYWRpbmcvY2FjaGluZyB0aGUgcGFnZSBldGMKKyAgICAgICAgc28gdGhlIHRpbWVy
LXNwZWNpZmljIGNvZGUgdGhhdCBkb2VzIHRoZSBzYW1lIGNhbiBiZSByZW1vdmVkLgorICAgICAg
ICBJbiBhZGRpdGlvbiwgdGltZXJzIGNhbiBiZSBub3cgcGF1c2VkL3Jlc3VtZWQgJ2luIHBsYWNl
JyB3aGljaAorICAgICAgICBtYWtlcyBpdCB1bm5lY2Vzc2FyeSB0byAnc2VyaWFsaXplJyB0aGVt
IGludG8gc3BlY2lhbCBQYXVzZWRUaW1lb3V0cworICAgICAgICBpbnN0YW5jZSwgc28gcGF1c2Uv
cmVzdW1lVGltZW91dHMgaW1wbGVtZW50YXRpb24gaW4gSlNET01XaW5kb3dCYXNlIGNhbiBhbHNv
IGJlIHJlbW92ZWQuCisgICAgICAgIEFsc28sIG1vdmluZyBUaW1lb3V0TWFwIGZyb20gSlNET01X
aW5kb3dCYXNlIHRvIERvY3VtZW50IG1hdGNoZXMgbGlmZXRpbWUKKyAgICAgICAgb2YgdGltZW91
dHMgYW5kIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG5vdCByb3VuZHRyaXAgdGhlbSB2aWEgUGF1c2Vk
VGltZW91dHMgCisgICAgICAgIGV2ZXJ5IHRpbWUgd2hlbiBKU0RPTVdpbmRvdyB3cmFwcGVyIGlz
IGRlc3Ryb3llZCB3aGlsZSB0aGUgcGFnZSBpcyBpbiB0aGUgYi9mIGNhY2hlLgorCisgICAgICAg
IFRpbWVvdXRzIGFyZSBub3cgcGF1c2VkIHdpdGggb3RoZXIgQWN0aXZlRE9NT2JqZWN0czoKKyAg
ICAgICAgLSBiZWZvcmUgY3JlYXRpbmcgQ2FjaGVkUGFnZSBpbiBGcmFtZUxvYWRlcjo6Y29tbWl0
UHJvdmlzaW9uYWxMb2FkKCkKKyAgICAgICAgLSBpbiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNl
dEphdmFTY3JpcHRQYXVzZWQKKyAgICAgICAgLSBkdXJpbmcgbW9kYWwgVUkgb3BlcmF0aW9ucyBp
biBDaHJvbWU6OioKKyAgICAgICAgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHByZXZpb3VzIHVzYWdl
IG9mIEpTRE9NV2luZG93QmFzZTo6cGF1c2VUaW1lb3V0cygpCisKKyAgICAgICAgVGltZW91dHMg
YXJlIHN0b3BwZWQgdG8gcHJldmVudCBmdXR1cmUgZmlyaW5nIGZyb206CisgICAgICAgIC0gRnJh
bWVMb2FkZXI6OmNsZWFyKCkKKyAgICAgICAgLSBGcmFtZUxvYWRlcjo6ZnJhbWVEZXRhY2hlZCgp
CisgICAgICAgIHRoaXMgaXMgZXF1aXZhbGVudCB0byBwcmV2aW91cyB1c2FnZSBvZiBKU0RPTVdp
bmRvd0Jhc2U6OmNsZWFyQWxsVGltZW91dHMoKQorCisgICAgICAgIFRoaXMgaXMgYWxzbyBvbmUg
b2YgdGhlIHN0ZXBzIHRvIGhhdmluZyB0aW1lcnMgaW4gV29ya2Vycy4gU2VlIHRoZSBwbGFuIG9m
CisgICAgICAgIHRoZSBuZXh0IHN0ZXBzIGluIHRoZSBidWcgYWJvdmUuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9ET01UaW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6RE9N
VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OmZpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVRpbWVyOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NVGltZXI6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6
OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OnN1c3BlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NVGltZXI6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpET01UaW1lcjo6
Y2FuU3VzcGVuZCk6IEltcGxlbWVudGVkIEFjdGl2ZURPTU9iamVjdCBtZXRob2RzLgorCisgICAg
ICAgICogYmluZGluZ3MvanMvRE9NVGltZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwOiBBY3RpdmVET01PYmplY3QgY2FuIGhhdmUgbm8gSlMgd3JhcHBlcgorICAg
ICAgICAoV2ViQ29yZTo6bWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KTogCisKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjp+SlNET01XaW5kb3dCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93QmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpp
bnN0YWxsVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OnJlbW92
ZVRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjp0aW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6ZGlzY29ubmVjdEZyYW1lKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmg6CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOiBEb2N1bWVudCBu
b3cgaG9sZHMgYSBoYXNoIG1hcCBpZC0+dGltZW91dAorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmFkZFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZVRpbWVv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZpbmRUaW1lb3V0KToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUGFnZTo6Q2FjaGVkUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRQYWdlOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFBhZ2U6OmNs
ZWFyKToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2UuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3Jp
cHREZWJ1Z1NlcnZlcjo6fkphdmFTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3JpcHRQYXVzZWQpOgorICAgICAgICAq
IGluc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKworICAgICAgICAqIGxvYWRlci9G
cmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29tbWl0UHJv
dmlzaW9uYWxMb2FkKTogCisgICAgICAgIHJlbW92ZWQgY2xlYXJBbGxUaW1lb3V0cyBzaW5jZSBh
bGwgQWN0aXZlRE9NT2JqZWN0cyB3aWxsIGJlIHN0b3BwZWQgaW4gRnJhbWVMb2FkZXI6OmNsZWFy
KCk7CisgICAgICAgIEkgZG9uJ3Qgc2VlIGhvdyB0aGUgb2xkIGNvbW1lbnQgY2FuIGJlIGNvcnJl
Y3QgLSB0aGUgY29kZSBpbiB0aGUgc2FtZSBtZXRob2QgcHJvY2VlZHMgdG8gaW52b2tlICdvbnVu
bG9hZCcKKyAgICAgICAgYW5kIHRoZW4gY2FsbHMgaW50byBjbGllbnQgd2hpY2ggY2FuIGJlIGV4
dGVybmFsIGNvZGUgYW5kIGNhbiBjYXVzZSBhbnkgYWN0aXZlIG9iamVjdCBjcmVhdGVkIGluIG9u
dW5sb2FkCisgICAgICAgIHRvIGZpcmUuIFdlIGNhbiBzdG9wIHRoZW0gYWxsIGJlZm9yZSBmaXJp
bmcgb251bmxvYWQgYnV0IGl0IGRvZXMgbm90IG1ha2UgYSBsb3Qgb2Ygc2Vuc2UuCisgICAgICAg
IEkgaGF2ZSBhIHRlc3QgdG8gZ28gd2l0aCB0aGUgbmV4dCBwYXRjaCB3aGljaCB2ZXJpZmllcyB0
aGF0IHRpbWVycyBzZXQgaW4gb251bmxvYWQgZG8gbm90IGZpcmUuCisKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpvcGVuKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91cExvYWREZWZlcnJl
cik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXI6On5QYWdlR3JvdXBM
b2FkRGVmZXJyZXIpOgorCiAyMDA4LTEyLTAzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvRE9NVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvRE9NVGltZXIuY3BwCShyZXZpc2lvbiAzODk2NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
RE9NVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNyArMjcsMjEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJET01UaW1lci5oIgogCi0jaW5jbHVkZSAiSlNET01XaW5k
b3dCYXNlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGludCBET01UaW1lcjo6bV90aW1lck5lc3RpbmdMZXZlbCA9IDA7CiAKLURPTVRp
bWVyOjpET01UaW1lcihKU0RPTVdpbmRvd0Jhc2UqIG9iamVjdCwgU2NoZWR1bGVkQWN0aW9uKiBh
Y3Rpb24pCi0gICAgOiBtX29iamVjdChvYmplY3QpCitET01UaW1lcjo6RE9NVGltZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24pCisgICAg
OiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fYWN0aW9uKGFjdGlvbikK
KyAgICAsIG1fbmV4dEZpcmVJbnRlcnZhbCgwKQorICAgICwgbV9yZXBlYXRJbnRlcnZhbCgwKQog
ewogICAgIHN0YXRpYyBpbnQgbGFzdFVzZWRUaW1lb3V0SWQgPSAwOwogICAgICsrbGFzdFVzZWRU
aW1lb3V0SWQ7CkBAIC00OSwxNiArNTMsNiBAQCBET01UaW1lcjo6RE9NVGltZXIoSlNET01XaW5k
b3dCYXNlKiBvYmplCiAgICAgbV9uZXN0aW5nTGV2ZWwgPSBtX3RpbWVyTmVzdGluZ0xldmVsICsg
MTsKIH0KIAotRE9NVGltZXI6OkRPTVRpbWVyKGludCB0aW1lb3V0SWQsIGludCBuZXN0aW5nTGV2
ZWwsIEpTRE9NV2luZG93QmFzZSogb2JqZWN0LCBTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKLSAg
ICA6IG1fdGltZW91dElkKHRpbWVvdXRJZCkKLSAgICAsIG1fbmVzdGluZ0xldmVsKG5lc3RpbmdM
ZXZlbCkKLSAgICAsIG1fb2JqZWN0KG9iamVjdCkKLSAgICAsIG1fYWN0aW9uKGFjdGlvbikKLXsK
LSAgICBBU1NFUlQodGltZW91dElkID4gMCk7Ci0gICAgQVNTRVJUKG5lc3RpbmdMZXZlbCA+IDAp
OwotfQotCiBET01UaW1lcjo6fkRPTVRpbWVyKCkKIHsKICAgICBKU0M6OkpTTG9jayBsb2NrKGZh
bHNlKTsKQEAgLTY3LDkgKzYxLDUzIEBAIERPTVRpbWVyOjp+RE9NVGltZXIoKQogCiB2b2lkIERP
TVRpbWVyOjpmaXJlZCgpCiB7Ci0gICAgbV90aW1lck5lc3RpbmdMZXZlbCA9IG1fbmVzdGluZ0xl
dmVsOwotICAgIG1fb2JqZWN0LT50aW1lckZpcmVkKHRoaXMpOwotICAgIG1fdGltZXJOZXN0aW5n
TGV2ZWwgPSAwOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgLy8gRklYTUU6IG1ha2UgaXQgd29yayB3aXRoIFdvcmtl
cnMgU0VDIHRvby4KKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAg
ICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVudC0+ZnJh
bWUoKSkpIHsKKyAgICAgICAgICAgIG1fdGltZXJOZXN0aW5nTGV2ZWwgPSBtX25lc3RpbmdMZXZl
bDsKKyAgICAgICAgICAgIHdpbmRvdy0+dGltZXJGaXJlZCh0aGlzKTsKKyAgICAgICAgICAgIG1f
dGltZXJOZXN0aW5nTGV2ZWwgPSAwOworICAgICAgICB9CisgICAgfQorfQorCitib29sIERPTVRp
bWVyOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBpc0FjdGl2ZSgp
OworfQorCit2b2lkIERPTVRpbWVyOjpjb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBBY3RpdmVE
T01PYmplY3Q6OmNvbnRleHREZXN0cm95ZWQoKTsKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9p
ZCBET01UaW1lcjo6c3RvcCgpCit7CisgICAgVGltZXJCYXNlOjpzdG9wKCk7Cit9CisKK3ZvaWQg
RE9NVGltZXI6OnN1c3BlbmQoKSAKK3sgCisgICAgQVNTRVJUKG1fbmV4dEZpcmVJbnRlcnZhbCA9
PSAwICYmIG1fcmVwZWF0SW50ZXJ2YWwgPT0gMCk7IAorICAgIG1fbmV4dEZpcmVJbnRlcnZhbCA9
IG5leHRGaXJlSW50ZXJ2YWwoKTsKKyAgICBtX3JlcGVhdEludGVydmFsID0gcmVwZWF0SW50ZXJ2
YWwoKTsKKyAgICBUaW1lckJhc2U6OnN0b3AoKTsKK30gCisgCit2b2lkIERPTVRpbWVyOjpyZXN1
bWUoKSAKK3sgCisgICAgc3RhcnQobV9uZXh0RmlyZUludGVydmFsLCBtX3JlcGVhdEludGVydmFs
KTsKKyAgICBtX25leHRGaXJlSW50ZXJ2YWwgPSAwOworICAgIG1fcmVwZWF0SW50ZXJ2YWwgPSAw
OworfSAKKyAKKyAKK2Jvb2wgRE9NVGltZXI6OmNhblN1c3BlbmQoKSBjb25zdCAKK3sgCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvRE9NVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTVRpbWVyLmgJKHJldmlzaW9uIDM4OTY1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01U
aW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIERPTVRpbWVy
X2gKICNkZWZpbmUgRE9NVGltZXJfaAogCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAj
aW5jbHVkZSAiVGltZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzQsMTIgKzM1LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEpTRE9NV2luZG93QmFzZTsKIGNsYXNzIFNj
aGVkdWxlZEFjdGlvbjsKIAotY2xhc3MgRE9NVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKK2Ns
YXNzIERPTVRpbWVyIDogcHVibGljIFRpbWVyQmFzZSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7
CiBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlcyBhIG5ldyB0aW1lciB3aXRoIHRoZSBuZXh0IGlkIGFu
ZCBuZXN0aW5nIGxldmVsLgotICAgIERPTVRpbWVyKEpTRE9NV2luZG93QmFzZSosIFNjaGVkdWxl
ZEFjdGlvbiopOwotICAgIC8vIENyZWF0ZXMgYSB0aW1lciBmcm9tIFBhdXNlZFRpbWVvdXQsIHRh
a2VzIHRpbWVvdXRJZCBhbmQgbmVzdGluZ0xldmVsIGFzIHRoZXkgd2VyZSBwZXJzaXN0ZWQuCi0g
ICAgRE9NVGltZXIoaW50IHRpbWVvdXRJZCwgaW50IG5lc3RpbmdMZXZlbCwgSlNET01XaW5kb3dC
YXNlKiwgU2NoZWR1bGVkQWN0aW9uKik7CisgICAgRE9NVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFNjaGVkdWxlZEFjdGlvbiopOwogICAgIHZpcnR1YWwgfkRPTVRpbWVyKCk7CiAKICAg
ICBpbnQgdGltZW91dElkKCkgY29uc3QgeyByZXR1cm4gbV90aW1lb3V0SWQ7IH0KQEAgLTUwLDE0
ICs0OSwyMyBAQCBwdWJsaWM6CiAgICAgU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2FjdGlvbjsgfQogICAgIFNjaGVkdWxlZEFjdGlvbiogdGFrZUFjdGlvbigpIHsg
U2NoZWR1bGVkQWN0aW9uKiBhID0gbV9hY3Rpb247IG1fYWN0aW9uID0gMDsgcmV0dXJuIGE7IH0K
IAorICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOworICAg
IHZpcnR1YWwgdm9pZCBzdG9wKCk7CisgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUo
KTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKTsKIAogICAgIGludCBtX3Rp
bWVvdXRJZDsKICAgICBpbnQgbV9uZXN0aW5nTGV2ZWw7Ci0gICAgSlNET01XaW5kb3dCYXNlKiBt
X29iamVjdDsKICAgICBTY2hlZHVsZWRBY3Rpb24qIG1fYWN0aW9uOwogICAgIHN0YXRpYyBpbnQg
bV90aW1lck5lc3RpbmdMZXZlbDsKKyAgICBkb3VibGUgbV9uZXh0RmlyZUludGVydmFsOworICAg
IGRvdWJsZSBtX3JlcGVhdEludGVydmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMzg5NjUpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5OCw4ICsyOTgsMTAgQEAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoSlNHbG9i
YQogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBhY3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0Vu
ZDsgKytpdGVyKSB7CiAgICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5
KCkpIHsKICAgICAgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVj
dFdyYXBwZXIoZ2xvYmFsRGF0YSwgaXRlci0+c2Vjb25kKTsKLSAgICAgICAgICAgIC8vIEFuIG9i
amVjdCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgbXVzdCBoYXZlIGEgd3JhcHBlciB0byBtYXJrIGl0
cyBsaXN0ZW5lcnMsIHNvIG5vIG51bGwgY2hlY2suCi0gICAgICAgICAgICBpZiAoIXdyYXBwZXIt
Pm1hcmtlZCgpKQorICAgICAgICAgICAgLy8gR2VuZXJhbGx5LCBhbiBhY3RpdmUgb2JqZWN0IHdp
dGggcGVuZGluZyBhY3Rpdml0eSBtdXN0IGhhdmUgYSB3cmFwcGVyIHRvIG1hcmsgaXRzIGxpc3Rl
bmVycy4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHNvbWUgQWN0aXZlRE9NT2JqZWN0cyBkb24n
dCBoYXZlIEpTIHdyYXBwZXJzICh0aW1lcnMgY3JlYXRlZCBieSBzZXRUaW1lb3V0IGlzIG9uZSBl
eGFtcGxlKS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJoYXBzIG5lZWQgdG8gbWFrZSBzdXJl
IGV2ZW4gdGltZXJzIGhhdmUgYSBtYXJrYWJsZSAnd3JhcHBlcicuCisgICAgICAgICAgICBpZiAo
d3JhcHBlciAmJiAhd3JhcHBlci0+bWFya2VkKCkpCiAgICAgICAgICAgICAgICAgd3JhcHBlci0+
bWFyaygpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzg5NjUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQYWdl
LmgiCi0jaW5jbHVkZSAiUGF1c2VkVGltZW91dHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVl
bi5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKQEAgLTE1OSw4ICsxNTgsNiBAQCBKU0RPTVdpbmRvd0Jhc2U6On5KU0RPTVdpbmRvd0Jhc2Uo
KQogewogICAgIGlmIChkKCktPmltcGwtPmZyYW1lKCkpCiAgICAgICAgIGQoKS0+aW1wbC0+ZnJh
bWUoKS0+c2NyaXB0KCktPmNsZWFyRm9ybWVyV2luZG93KGFzSlNET01XaW5kb3codGhpcykpOwot
Ci0gICAgY2xlYXJBbGxUaW1lb3V0cygpOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBK
U0RPTVdpbmRvd0Jhc2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApAQCAtNzAwLDcg
KzY5Nyw2IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpjbGVhcigpCiAgICAgaWYgKGQoKS0+cmV0
dXJuVmFsdWVTbG90ICYmICEqZCgpLT5yZXR1cm5WYWx1ZVNsb3QpCiAgICAgICAgICpkKCktPnJl
dHVyblZhbHVlU2xvdCA9IGdldERpcmVjdChJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJldHVy
blZhbHVlIikpOwogCi0gICAgY2xlYXJBbGxUaW1lb3V0cygpOwogICAgIGNsZWFySGVscGVyT2Jq
ZWN0UHJvcGVydGllcygpOwogfQogCkBAIC04MjYsMTggKzgyMiwxNCBAQCB2b2lkIEpTRE9NV2lu
ZG93QmFzZTo6c2V0UmV0dXJuVmFsdWVTbG90CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gdGlt
ZW91dHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLXZvaWQgSlNET01XaW5kb3dCYXNlOjpj
bGVhckFsbFRpbWVvdXRzKCkKLXsKLSAgICBkZWxldGVBbGxWYWx1ZXMoZCgpLT50aW1lb3V0cyk7
Ci0gICAgZCgpLT50aW1lb3V0cy5jbGVhcigpOwotfQotCiBpbnQgSlNET01XaW5kb3dCYXNlOjpp
bnN0YWxsVGltZW91dChTY2hlZHVsZWRBY3Rpb24qIGEsIGludCB0LCBib29sIHNpbmdsZVNob3Qp
CiB7Ci0gICAgRE9NVGltZXIqIHRpbWVyID0gbmV3IERPTVRpbWVyKHRoaXMsIGEpOworICAgIERP
TVRpbWVyKiB0aW1lciA9IG5ldyBET01UaW1lcihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGEp
OwogICAgIGludCB0aW1lb3V0SWQgPSB0aW1lci0+dGltZW91dElkKCk7Ci0gICAgQVNTRVJUKCFk
KCktPnRpbWVvdXRzLmdldCh0aW1lb3V0SWQpKTsKLSAgICBkKCktPnRpbWVvdXRzLnNldCh0aW1l
b3V0SWQsIHRpbWVyKTsKKworICAgIEFTU0VSVChkKCktPmltcGwtPmRvY3VtZW50KCkpOworICAg
IGQoKS0+aW1wbC0+ZG9jdW1lbnQoKS0+YWRkVGltZW91dCh0aW1lb3V0SWQsIHRpbWVyKTsKKyAg
ICAKICAgICAvLyBVc2UgYSBtaW5pbXVtIGludGVydmFsIG9mIDEwIG1zIHRvIG1hdGNoIG90aGVy
IGJyb3dzZXJzLCBidXQgb25seSBvbmNlIHdlJ3ZlCiAgICAgLy8gbmVzdGVkIGVub3VnaCB0byBu
b3RpY2UgdGhhdCB3ZSdyZSByZXBlYXRpbmcuCiAgICAgLy8gRmFzdGVyIHRpbWVycyBtaWdodCBi
ZSAiYmV0dGVyIiwgYnV0IHRoZXkncmUgaW5jb21wYXRpYmxlLgpAQCAtODYxLDUwICs4NTMsNyBA
QCBpbnQgSlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dChFeGVjCiAgICAgcmV0dXJuIGlu
c3RhbGxUaW1lb3V0KG5ldyBTY2hlZHVsZWRBY3Rpb24oZXhlYywgZnVuYywgYXJncyksIHQsIHNp
bmdsZVNob3QpOwogfQogCi12b2lkIEpTRE9NV2luZG93QmFzZTo6cGF1c2VUaW1lb3V0cyhPd25Q
dHI8UGF1c2VkVGltZW91dHM+JiByZXN1bHQpCi17Ci0gICAgc2l6ZV90IHRpbWVvdXRzQ291bnQg
PSBkKCktPnRpbWVvdXRzLnNpemUoKTsKLSAgICBpZiAoIXRpbWVvdXRzQ291bnQpIHsKLSAgICAg
ICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQYXVzZWRU
aW1lb3V0KiB0ID0gbmV3IFBhdXNlZFRpbWVvdXRbdGltZW91dHNDb3VudF07Ci0gICAgcmVzdWx0
LnNldChuZXcgUGF1c2VkVGltZW91dHModCwgdGltZW91dHNDb3VudCkpOwotCi0gICAgSlNET01X
aW5kb3dCYXNlRGF0YTo6VGltZW91dHNNYXA6Oml0ZXJhdG9yIGl0ID0gZCgpLT50aW1lb3V0cy5i
ZWdpbigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHRpbWVvdXRzQ291bnQ7ICsraSwg
KytpdCkgewotICAgICAgICBpbnQgdGltZW91dElkID0gaXQtPmZpcnN0OwotICAgICAgICBET01U
aW1lciogdGltZXIgPSBpdC0+c2Vjb25kOwotICAgICAgICB0W2ldLnRpbWVvdXRJZCA9IHRpbWVv
dXRJZDsKLSAgICAgICAgdFtpXS5uZXN0aW5nTGV2ZWwgPSB0aW1lci0+bmVzdGluZ0xldmVsKCk7
Ci0gICAgICAgIHRbaV0ubmV4dEZpcmVJbnRlcnZhbCA9IHRpbWVyLT5uZXh0RmlyZUludGVydmFs
KCk7Ci0gICAgICAgIHRbaV0ucmVwZWF0SW50ZXJ2YWwgPSB0aW1lci0+cmVwZWF0SW50ZXJ2YWwo
KTsKLSAgICAgICAgdFtpXS5hY3Rpb24gPSB0aW1lci0+dGFrZUFjdGlvbigpOwotICAgIH0KLSAg
ICBBU1NFUlQoaXQgPT0gZCgpLT50aW1lb3V0cy5lbmQoKSk7Ci0KLSAgICBkZWxldGVBbGxWYWx1
ZXMoZCgpLT50aW1lb3V0cyk7Ci0gICAgZCgpLT50aW1lb3V0cy5jbGVhcigpOwotfQotCi12b2lk
IEpTRE9NV2luZG93QmFzZTo6cmVzdW1lVGltZW91dHMoT3duUHRyPFBhdXNlZFRpbWVvdXRzPiYg
dGltZW91dHMpCi17Ci0gICAgaWYgKCF0aW1lb3V0cykKLSAgICAgICAgcmV0dXJuOwotICAgIHNp
emVfdCBjb3VudCA9IHRpbWVvdXRzLT5udW1UaW1lb3V0cygpOwotICAgIFBhdXNlZFRpbWVvdXQq
IGFycmF5ID0gdGltZW91dHMtPnRha2VUaW1lb3V0cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpICE9IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50IHRpbWVvdXRJZCA9IGFycmF5W2ldLnRp
bWVvdXRJZDsKLSAgICAgICAgRE9NVGltZXIqIHRpbWVyID0gbmV3IERPTVRpbWVyKHRpbWVvdXRJ
ZCwgYXJyYXlbaV0ubmVzdGluZ0xldmVsLCB0aGlzLCBhcnJheVtpXS5hY3Rpb24pOwotICAgICAg
ICBkKCktPnRpbWVvdXRzLnNldCh0aW1lb3V0SWQsIHRpbWVyKTsKLSAgICAgICAgdGltZXItPnN0
YXJ0KGFycmF5W2ldLm5leHRGaXJlSW50ZXJ2YWwsIGFycmF5W2ldLnJlcGVhdEludGVydmFsKTsK
LSAgICB9Ci0gICAgZGVsZXRlIFtdIGFycmF5OwotICAgIHRpbWVvdXRzLmNsZWFyKCk7Ci19Ci0K
LXZvaWQgSlNET01XaW5kb3dCYXNlOjpyZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQsIGJvb2wg
ZGVsQWN0aW9uKQordm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVv
dXRJZCkKIHsKICAgICAvLyB0aW1lb3V0IElEcyBoYXZlIHRvIGJlIHBvc2l0aXZlLCBhbmQgMCBh
bmQgLTEgYXJlIHVuc2FmZSB0bwogICAgIC8vIGV2ZW4gbG9vayB1cCBzaW5jZSB0aGV5IGFyZSB0
aGUgZW1wdHkgYW5kIGRlbGV0ZWQgdmFsdWUKQEAgLTkxMiw3ICs4NjEsOCBAQCB2b2lkIEpTRE9N
V2luZG93QmFzZTo6cmVtb3ZlVGltZW91dChpbnQgCiAgICAgaWYgKHRpbWVvdXRJZCA8PSAwKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgZCgpLT50aW1lb3V0cy50YWtlKHRpbWVvdXRJ
ZCk7CisgICAgQVNTRVJUKGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7CisgICAgZCgpLT5pbXBsLT5k
b2N1bWVudCgpLT5yZW1vdmVUaW1lb3V0KHRpbWVvdXRJZCk7CiB9CiAKIHZvaWQgSlNET01XaW5k
b3dCYXNlOjp0aW1lckZpcmVkKERPTVRpbWVyKiB0aW1lcikKQEAgLTkyNCw3ICs4NzQsOCBAQCB2
b2lkIEpTRE9NV2luZG93QmFzZTo6dGltZXJGaXJlZChET01UaW1lCiAgICAgICAgIHRpbWVyLT5h
Y3Rpb24oKS0+ZXhlY3V0ZShzaGVsbCgpKTsKICAgICAgICAgLy8gVGhlIERPTVRpbWVyIG9iamVj
dCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgb3IgcmVwbGFjZWQgZHVyaW5nIGV4ZWN1dGlvbiwKICAg
ICAgICAgLy8gc28gd2UgcmUtZmV0Y2ggaXQuCi0gICAgICAgIHRpbWVyID0gZCgpLT50aW1lb3V0
cy5nZXQodGltZW91dElkKTsKKyAgICAgICAgQVNTRVJUKGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSk7
CisgICAgICAgIHRpbWVyID0gZCgpLT5pbXBsLT5kb2N1bWVudCgpLT5maW5kVGltZW91dCh0aW1l
b3V0SWQpOwogICAgICAgICBpZiAoIXRpbWVyKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC05
MzgsOCArODg5LDcgQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnRpbWVyRmlyZWQoRE9NVGltZQog
CiAgICAgLy8gRGVsZXRlIHRpbWVyIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbiBmb3Igb25l
LXNob3QgdGltZXJzLgogICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uID0gdGltZXItPnRha2VB
Y3Rpb24oKTsKLSAgICBkKCktPnRpbWVvdXRzLnJlbW92ZSh0aW1lci0+dGltZW91dElkKCkpOwot
ICAgIGRlbGV0ZSB0aW1lcjsKKyAgICByZW1vdmVUaW1lb3V0KHRpbWVyLT50aW1lb3V0SWQoKSk7
CiAgICAgYWN0aW9uLT5leGVjdXRlKHNoZWxsKCkpOwogCiAgICAgSlNMb2NrIGxvY2soZmFsc2Up
OwpAQCAtOTQ4LDcgKzg5OCw2IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjp0aW1lckZpcmVkKERP
TVRpbWUKIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7Ci0gICAg
Y2xlYXJBbGxUaW1lb3V0cygpOwogfQogCiBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIERPTVdp
bmRvdyogZG9tV2luZG93KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5o
CShyZXZpc2lvbiAzODk2NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIEpTRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBKU0xvY2F0aW9uOwogICAgIGNs
YXNzIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOwotICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRz
OwogICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsK
IApAQCAtNjcsMTAgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGludCBp
bnN0YWxsVGltZW91dChjb25zdCBKU0M6OlVTdHJpbmcmIGhhbmRsZXIsIGludCB0LCBib29sIHNp
bmdsZVNob3QpOwogICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUqIGZ1bmN0aW9uLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIGludCB0LCBi
b29sIHNpbmdsZVNob3QpOwotICAgICAgICB2b2lkIHJlbW92ZVRpbWVvdXQoaW50IHRpbWVySWQs
IGJvb2wgZGVsQWN0aW9uID0gdHJ1ZSk7Ci0KLSAgICAgICAgdm9pZCBwYXVzZVRpbWVvdXRzKE93
blB0cjxQYXVzZWRUaW1lb3V0cz4mKTsKLSAgICAgICAgdm9pZCByZXN1bWVUaW1lb3V0cyhPd25Q
dHI8UGF1c2VkVGltZW91dHM+Jik7CisgICAgICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGlt
ZW91dElkKTsKIAogICAgICAgICB2b2lkIHRpbWVyRmlyZWQoRE9NVGltZXIqKTsKIApAQCAtMTAy
LDggKzk4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBKU0M6OkpT
R2xvYmFsRGF0YSogY29tbW9uSlNHbG9iYWxEYXRhKCk7CiAKLSAgICAgICAgdm9pZCBjbGVhckFs
bFRpbWVvdXRzKCk7Ci0KICAgICBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgSlNET01XaW5kb3dC
YXNlRGF0YSA6IHB1YmxpYyBKU0RPTUdsb2JhbE9iamVjdERhdGEgewogICAgICAgICAgICAgSlNE
T01XaW5kb3dCYXNlRGF0YShQYXNzUmVmUHRyPERPTVdpbmRvdz4sIEpTRE9NV2luZG93U2hlbGwq
KTsKQEAgLTExMiw5ICsxMDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgICAg
IEpTQzo6SlNWYWx1ZSoqIHJldHVyblZhbHVlU2xvdDsKICAgICAgICAgICAgIEpTRE9NV2luZG93
U2hlbGwqIHNoZWxsOwotCi0gICAgICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01UaW1l
cio+IFRpbWVvdXRzTWFwOwotICAgICAgICAgICAgVGltZW91dHNNYXAgdGltZW91dHM7CiAgICAg
ICAgIH07CiAKICAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSogY2hpbGRGcmFtZUdldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVy
dHlTbG90Jik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDM4OTY1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI1ICszNTEsNCBAQCB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0CiAgICAgY2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMo
KTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpwYXVzZVRpbWVvdXRzKE93blB0cjxQYXVz
ZWRUaW1lb3V0cz4mIHJlc3VsdCkKLXsKLSAgICBpZiAoIWhhdmVXaW5kb3dTaGVsbCgpKSB7Ci0g
ICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgd2lu
ZG93U2hlbGwoKS0+d2luZG93KCktPnBhdXNlVGltZW91dHMocmVzdWx0KTsKLX0KLQotdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpyZXN1bWVUaW1lb3V0cyhPd25QdHI8UGF1c2VkVGltZW91dHM+JiBw
YXVzZWRUaW1lb3V0cykKLXsKLSAgICBpZiAoIWhhdmVXaW5kb3dTaGVsbCgpKSB7Ci0gICAgICAg
IC8vIENhbGxlcnMgY2FuIGFzc3VtZSB3ZSB3aWxsIGFsd2F5cyBjbGVhciB0aGUgcGFzc2VkIGlu
IHRpbWVvdXRzCi0gICAgICAgIHBhdXNlZFRpbWVvdXRzLmNsZWFyKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB3aW5kb3dTaGVsbCgpLT53aW5kb3coKS0+cmVzdW1lVGltZW91dHMo
cGF1c2VkVGltZW91dHMpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMzg5NjUpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTAz
LDkgKzEwMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyRm9ybWVyV2luZG93KEpTRE9NV2lu
ZG93KiB3aW5kb3cpIHsgbV9saXZlRm9ybWVyV2luZG93cy5yZW1vdmUod2luZG93KTsgfQogICAg
IHZvaWQgdXBkYXRlRG9jdW1lbnQoKTsKIAotICAgIHZvaWQgcGF1c2VUaW1lb3V0cyhPd25QdHI8
UGF1c2VkVGltZW91dHM+Jik7Ci0gICAgdm9pZCByZXN1bWVUaW1lb3V0cyhPd25QdHI8UGF1c2Vk
VGltZW91dHM+Jik7Ci0KICAgICB2b2lkIGNsZWFyU2NyaXB0T2JqZWN0cygpOwogICAgIHZvaWQg
Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCopOwogCkluZGV4OiBXZWJDb3JlL2Rv
bS9BY3RpdmVET01PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BY3RpdmVET01P
YmplY3QuaAkocmV2aXNpb24gMzg5NjUpCisrKyBXZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAKKyAgICAgICAgLy8g
Y2FuU3VzcGVuZCgpIGlzIHVzZWQgYnkgdGhlIGNhbGxlciBpZiB0aGVyZSBpcyBhIGNob2ljZSBi
ZXR3ZWVuIHN1c3BlbmRpbmcgYW5kIHN0b3BwaW5nLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSwg
YSBwYWdlIHdvbid0IGJlIHN1c3BlbmRlZCBhbmQgcGxhY2VkIGluIHRoZSBiYWNrL2ZvcndhcmQg
Y2FjaGUgaWYgaXQgaGFzCisgICAgICAgIC8vIHRoZSBvYmplY3RzIHRoYXQgY2FuIG5vdCBiZSBz
dXNwZW5kZWQuCisgICAgICAgIC8vIEhvd2V2ZXIsICdzdXNwZW5kJyBjYW4gYmUgY2FsbGVkIGV2
ZW4gaWYgY2FuU3VzcGVuZCgpIHdvdWxkIHJldHVybiAnZmFsc2UnLiBUaGF0CisgICAgICAgIC8v
IGhhcHBlbnMgaW4gc3RlcC1ieS1zdGVwIEpTIGRlYnVnZ2luZyBmb3IgZXhhbXBsZSAtIGluIHRo
aXMgY2FzZSBpdCB3b3VsZCBiZSBpbmNvcnJlY3QKKyAgICAgICAgLy8gdG8gc3RvcCB0aGUgb2Jq
ZWN0LiBFeGFjdCBzZW1hbnRpY3Mgb2Ygc3VzcGVuZCBpcyB1cCB0byB0aGUgb2JqZWN0IHRoZW4u
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdXNwZW5kKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKSW5kZXg6
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDM4OTY1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5j
bHVkZSAiRE9NVGltZXIuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2NM
b2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCkBAIC00MjMwLDYgKzQyMzEs
MjMgQEAgdm9pZCBEb2N1bWVudDo6cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZQogICAgIG1faGF2
ZUV4cGxpY2l0bHlEaXNhYmxlZEROU1ByZWZldGNoID0gdHJ1ZTsKIH0KIAordm9pZCBEb2N1bWVu
dDo6YWRkVGltZW91dChpbnQgdGltZW91dElkLCBET01UaW1lciogdGltZXIpCit7CisgICAgQVNT
RVJUKCFtX3RpbWVvdXRzLmdldCh0aW1lb3V0SWQpKTsKKyAgICBtX3RpbWVvdXRzLnNldCh0aW1l
b3V0SWQsIHRpbWVyKTsKK30KKwordm9pZCBEb2N1bWVudDo6cmVtb3ZlVGltZW91dChpbnQgdGlt
ZW91dElkKQoreworICAgIERPTVRpbWVyKiB0aW1lciA9IG1fdGltZW91dHMudGFrZSh0aW1lb3V0
SWQpOworICAgIGRlbGV0ZSB0aW1lcjsKK30KKworRE9NVGltZXIqIERvY3VtZW50OjpmaW5kVGlt
ZW91dChpbnQgdGltZW91dElkKQoreworICAgIHJldHVybiBtX3RpbWVvdXRzLmdldCh0aW1lb3V0
SWQpOworfQorCiB2b2lkIERvY3VtZW50OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsK
ICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBkb21XaW5kb3coKSkKSW5kZXg6IFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2
aXNpb24gMzg5NjUpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NSw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEYXRhYmFzZTsK
ICAgICBjbGFzcyBET01JbXBsZW1lbnRhdGlvbjsKICAgICBjbGFzcyBET01TZWxlY3Rpb247Cisg
ICAgY2xhc3MgRE9NVGltZXI7CiAgICAgY2xhc3MgRE9NV2luZG93OwogICAgIGNsYXNzIERhdGFi
YXNlVGhyZWFkOwogICAgIGNsYXNzIERvY0xvYWRlcjsKQEAgLTc3Nyw2ICs3NzgsMTAgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIAor
ICAgIHZvaWQgYWRkVGltZW91dChpbnQgdGltZW91dElkLCBET01UaW1lciopOworICAgIHZvaWQg
cmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKKyAgICBET01UaW1lciogZmluZFRpbWVvdXQo
aW50IHRpbWVvdXRJZCk7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBi
b29sIGlzWEhUTUwpOwogCkBAIC0xMDgxLDYgKzEwODYsOSBAQCBwcml2YXRlOgogI2lmIFVTRShM
T1dfQkFORFdJRFRIX0RJU1BMQVkpCiAgICAgYm9vbCBtX2luTG93QmFuZHdpZHRoRGlzcGxheTsK
ICNlbmRpZgorCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRE9NVGltZXIqPiBUaW1lb3V0c01h
cDsKKyAgICBUaW1lb3V0c01hcCBtX3RpbWVvdXRzOwogfTsKIAogaW5saW5lIGJvb2wgRG9jdW1l
bnQ6Omhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAzODk2NSkKKysrIFdlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiAr
NTYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gQWN0aXZlIG9iamVjdHMg
YXJlIG5vdCBnYXJiYWdlIGNvbGxlY3RlZCBldmVuIGlmIGluYWNjZXNzaWJsZSwgZS5nLiBiZWNh
dXNlIHRoZWlyIGFjdGl2aXR5IG1heSByZXN1bHQgaW4gY2FsbGJhY2tzIGJlaW5nIGludm9rZWQu
CiAgICAgICAgIGJvb2wgY2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKTsKKyAgICAgICAgLy8g
QWN0aXZlIG9iamVjdHMgY2FuIGJlIGFza2VkIHRvIHN1c3BlbmQgZXZlbiBpZiBjYW5TdXNwZW5k
QWN0aXZlRE9NT2JqZWN0cygpIHJldHVybnMgJ2ZhbHNlJyAtCisgICAgICAgIC8vIHN0ZXAtYnkt
c3RlcCBKUyBkZWJ1Z2dpbmcgaXMgb25lIGV4YW1wbGUuCiAgICAgICAgIHZvaWQgc3VzcGVuZEFj
dGl2ZURPTU9iamVjdHMoKTsKICAgICAgICAgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzKCk7
CiAgICAgICAgIHZvaWQgc3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKSW5kZXg6IFdlYkNvcmUvaGlz
dG9yeS9DYWNoZWRQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVk
UGFnZS5jcHAJKHJldmlzaW9uIDM4OTY1KQorKysgV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQ
YXVzZWRUaW1lb3V0cy5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTg2LDcgKzg1
LDYgQEAgQ2FjaGVkUGFnZTo6Q2FjaGVkUGFnZShQYWdlKiBwYWdlKQogICAgIFNjcmlwdENvbnRy
b2xsZXIqIHByb3h5ID0gbWFpbkZyYW1lLT5zY3JpcHQoKTsKICAgICBpZiAocHJveHktPmhhdmVX
aW5kb3dTaGVsbCgpKSB7CiAgICAgICAgIG1fd2luZG93ID0gcHJveHktPndpbmRvd1NoZWxsKCkt
PndpbmRvdygpOwotICAgICAgICBtX3dpbmRvdy0+cGF1c2VUaW1lb3V0cyhtX3BhdXNlZFRpbWVv
dXRzKTsKICAgICB9CiAKICAgICBtX2RvY3VtZW50LT5zZXRJblBhZ2VDYWNoZSh0cnVlKTsKQEAg
LTExNCw3ICsxMTIsNiBAQCB2b2lkIENhY2hlZFBhZ2U6OnJlc3RvcmUoUGFnZSogcGFnZSkKICAg
ICAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBwcm94eS0+d2luZG93U2hlbGwo
KTsKICAgICAgICAgaWYgKG1fd2luZG93KSB7CiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0
V2luZG93KG1fd2luZG93LmdldCgpKTsKLSAgICAgICAgICAgIHdpbmRvd1NoZWxsLT53aW5kb3co
KS0+cmVzdW1lVGltZW91dHMobV9wYXVzZWRUaW1lb3V0cyk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KG1haW5GcmFtZS0+ZG9tV2luZG93KCkp
OwogICAgICAgICAgICAgcHJveHktPmF0dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2VyKCkpOwpA
QCAtMTcwLDcgKzE2Nyw2IEBAIHZvaWQgQ2FjaGVkUGFnZTo6Y2xlYXIoKQogICAgIG1fVVJMID0g
S1VSTCgpOwogCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIG1fcGF1c2VkVGltZW91dHMu
Y2xlYXIoKTsKICAgICBtX3dpbmRvdyA9IDA7CiAKICAgICBtX2NhY2hlZFBhZ2VQbGF0Zm9ybURh
dGEuY2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuaAkocmV2aXNpb24gMzg5NjUpCisrKyBX
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1
ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5jbHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDcgKzM5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIEpTRE9NV2luZG93OwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsK
LSAgICBjbGFzcyBQYXVzZWRUaW1lb3V0czsKIAogY2xhc3MgQ2FjaGVkUGFnZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPENhY2hlZFBhZ2U+IHsKIHB1YmxpYzoKQEAgLTczLDcgKzcxLDYgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9tb3VzZVByZXNzTm9kZTsKICAgICBLVVJMIG1fVVJMOwog
ICAgIEpTQzo6UHJvdGVjdGVkUHRyPEpTRE9NV2luZG93PiBtX3dpbmRvdzsKLSAgICBPd25QdHI8
UGF1c2VkVGltZW91dHM+IG1fcGF1c2VkVGltZW91dHM7CiAgICAgT3duUHRyPENhY2hlZFBhZ2VQ
bGF0Zm9ybURhdGE+IG1fY2FjaGVkUGFnZVBsYXRmb3JtRGF0YTsKIH07CiAKSW5kZXg6IFdlYkNv
cmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMzg5NjUp
CisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnTGlzdGVu
ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVk
ZSAiUGF1c2VkVGltZW91dHMuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtNzksNyArNzgsNiBAQCBKYXZh
U2NyaXB0RGVidWdTZXJ2ZXI6On5KYXZhU2NyaXB0RGVidWdTCiB7CiAgICAgZGVsZXRlQWxsVmFs
dWVzKG1fcGFnZUxpc3RlbmVyc01hcCk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fYnJlYWtwb2lu
dHMpOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BhdXNlZFRpbWVvdXRzKTsKIH0KIAogdm9pZCBK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVy
KiBsaXN0ZW5lcikKQEAgLTM2NSwxNSArMzYzLDExIEBAIHZvaWQgSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjpzZXRKYXZhU2NyaXAKIAogICAgIGZyYW1lLT5zY3JpcHQoKS0+c2V0UGF1c2VkKHBhdXNl
ZCk7CiAKLSAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUp
KSB7Ci0gICAgICAgIGlmIChwYXVzZWQpIHsKLSAgICAgICAgICAgIE93blB0cjxQYXVzZWRUaW1l
b3V0cz4gdGltZW91dHM7Ci0gICAgICAgICAgICB3aW5kb3ctPnBhdXNlVGltZW91dHModGltZW91
dHMpOwotICAgICAgICAgICAgbV9wYXVzZWRUaW1lb3V0cy5zZXQoZnJhbWUsIHRpbWVvdXRzLnJl
bGVhc2UoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBPd25QdHI8UGF1c2VkVGlt
ZW91dHM+IHRpbWVvdXRzKG1fcGF1c2VkVGltZW91dHMudGFrZShmcmFtZSkpOwotICAgICAgICAg
ICAgd2luZG93LT5yZXN1bWVUaW1lb3V0cyh0aW1lb3V0cyk7Ci0gICAgICAgIH0KKyAgICBpZiAo
RG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKHBh
dXNlZCkKKyAgICAgICAgICAgIGRvY3VtZW50LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0
cygpOwogICAgIH0KIAogICAgIHNldEphdmFTY3JpcHRQYXVzZWQoZnJhbWUtPnZpZXcoKSwgcGF1
c2VkKTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCShy
ZXZpc2lvbiAzODk2NSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBQYWdlR3Jv
dXA7Ci0gICAgY2xhc3MgUGF1c2VkVGltZW91dHM7CiAgICAgY2xhc3MgSmF2YVNjcmlwdENhbGxG
cmFtZTsKICAgICBjbGFzcyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcjsKIApAQCAtMTIyLDcgKzEy
MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2RvbmVQcm9jZXNzaW5n
RGVidWdnZXJFdmVudHM7CiAgICAgICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIG1fcGF1c2VPbkNh
bGxGcmFtZTsKICAgICAgICAgUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY3VycmVudENh
bGxGcmFtZTsKLSAgICAgICAgSGFzaE1hcDxSZWZQdHI8RnJhbWU+LCBQYXVzZWRUaW1lb3V0cyo+
IG1fcGF1c2VkVGltZW91dHM7CiAgICAgICAgIEhhc2hNYXA8aW50cHRyX3QsIEhhc2hTZXQ8dW5z
aWduZWQ+Kj4gbV9icmVha3BvaW50czsKICAgICAgICAgVGltZXI8SmF2YVNjcmlwdERlYnVnU2Vy
dmVyPiBtX3JlY29tcGlsZVRpbWVyOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAzODk2NSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjY5MCwxNyArMjY5MCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1p
dFByb3Zpc2lvbmFsTG9hZCgKICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJh
bWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudC0+c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMoKTsKICAgICAgICAgY2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0obV9jdXJyZW50SGlzdG9y
eUl0ZW0uZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkg
JiYgbV9mcmFtZSA9PSBtX2ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpKSB7Ci0gICAgICAgICAg
ICAvLyBJZiB0aGUgbWFpbiBmcmFtZSBpbnN0YWxscyBhIHRpbWVvdXQgbGF0ZSBlbm91Z2ggKGZv
ciBleGFtcGxlIGluIGl0cyBvbnVubG9hZCBoYW5kbGVyKQotICAgICAgICAgICAgLy8gaXQgY291
bGQgc29tZXRpbWVzIGZpcmUgd2hlbiB0cmFuc2l0aW9uaW5nIHRvIGEgbm9uLUhUTUwgZG9jdW1l
bnQgcmVwcmVzZW50YXRpb24gKHN1Y2ggYXMgdGhlIE1hYyBib29rbWFya3MgdmlldykuCi0gICAg
ICAgICAgICAvLyBUbyBhdm9pZCB0aGlzLCB3ZSBjbGVhciBhbGwgdGltZW91dHMgaWYgdGhlIHBh
Z2UgaXMgbm90IHRvIGJlIGNhY2hlZCBpbiB0aGUgYmFjayBmb3J3YXJkIGxpc3QuCi0gICAgICAg
ICAgICAvLyBDYWNoZWQgcGFnZXMgaGF2ZSB0aGVpciB0aW1lcnMgcGF1c2VkIHNvIHRoZXkgYXJl
IGZpbmUuCi0gICAgICAgICAgICAvLyBGSVhNRTogSW50ZWdyYXRlIGNsZWFyaW5nIHRpbWVvdXRz
IGludG8gc3RvcEFjdGl2ZURPTU9iamVjdHMoKS4KLSAgICAgICAgICAgIFNjcmlwdENvbnRyb2xs
ZXIqIHByb3h5ID0gbV9mcmFtZS0+c2NyaXB0KCk7Ci0gICAgICAgICAgICBpZiAocHJveHktPmhh
dmVXaW5kb3dTaGVsbCgpKQotICAgICAgICAgICAgICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT53
aW5kb3coKS0+Y2xlYXJBbGxUaW1lb3V0cygpOwotICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IGlmIChtX2xvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZXBsYWNlKQpAQCAtMjk2Myw3ICsyOTUy
LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6b3BlbihDYWNoZWRQYWdlJiBjYWNoZQogICAgIHVwZGF0
ZVBvbGljeUJhc2VVUkwoKTsKIAogICAgIGNhY2hlZFBhZ2UucmVzdG9yZShtX2ZyYW1lLT5wYWdl
KCkpOwotCisgICAgZG9jdW1lbnQtPnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKTsKKyAgICAKICAg
ICBjaGVja0NvbXBsZXRlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gMzg5NjUpCisr
KyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDEwICs0NjYs
OCBAQCBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91cExvYWREZWZlCiAKICNpZiAhUExB
VEZPUk0oTUFDKQogICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBvdGhlclBhZ2UtPm1h
aW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkg
ewotICAgICAgICAgICAgICAgIE93blB0cjxQYXVzZWRUaW1lb3V0cz4gdGltZW91dHM7Ci0gICAg
ICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT5wYXVzZVRpbWVvdXRzKHRpbWVvdXRzKTsKLSAg
ICAgICAgICAgICAgICBpZiAodGltZW91dHMpCi0gICAgICAgICAgICAgICAgICAgIG1fcGF1c2Vk
VGltZW91dHMuYXBwZW5kKG1ha2VfcGFpcihSZWZQdHI8RnJhbWU+KGZyYW1lKSwgdGltZW91dHMu
cmVsZWFzZSgpKSk7CisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC0+c3VzcGVuZEFj
dGl2ZURPTU9iamVjdHMoKTsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CkBAIC00
ODMsMTcgKzQ4MSwxNyBAQCBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91cExvYWREZWZl
CiAKIFBhZ2VHcm91cExvYWREZWZlcnJlcjo6flBhZ2VHcm91cExvYWREZWZlcnJlcigpCiB7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RlZmVycmVkRnJhbWVzLnNpemUoKTsgKytpKQor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZWZlcnJlZEZyYW1lcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZGVmZXJyZWRGcmFtZXNbaV0tPnBhZ2UoKSkK
ICAgICAgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwogCiAjaWYgIVBMQVRG
T1JNKE1BQykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGF1c2VkVGltZW91dHMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9wYXVzZWRUaW1lb3V0c1tpXS5m
aXJzdC5nZXQoKTsKLSAgICAgICAgT3duUHRyPFBhdXNlZFRpbWVvdXRzPiB0aW1lb3V0cyhtX3Bh
dXNlZFRpbWVvdXRzW2ldLnNlY29uZCk7Ci0gICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+cmVzdW1l
VGltZW91dHModGltZW91dHMpOwotICAgIH0KKyAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBw
YWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VO
ZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0
cygpOworICAgICAgICB9CiAjZW5kaWYKKyAgICB9CiB9CiAKIAo=
</data>
<flag name="review"
          id="12028"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25736</attachid>
            <date>2008-12-04 00:34:53 -0800</date>
            <delta_ts>2008-12-04 00:38:21 -0800</delta_ts>
            <desc>patch to fix non-mac bulid</desc>
            <filename>fix_build.txt</filename>
            <type>text/plain</type>
            <size>1021</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAzODk4OSkKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00ODIsMTUgKzQ4MiwxNiBAQCBQYWdlR3JvdXBMb2FkRGVmZXJy
ZXI6OlBhZ2VHcm91cExvYWREZWZlCiBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6On5QYWdlR3JvdXBM
b2FkRGVmZXJyZXIoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZWZlcnJlZEZy
YW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZGVmZXJyZWRG
cmFtZXNbaV0tPnBhZ2UoKSkKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2RlZmVycmVkRnJh
bWVzW2ldLT5wYWdlKCkpIHsKICAgICAgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmcoZmFs
c2UpOwogCiAjaWYgIVBMQVRGT1JNKE1BQykKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBw
YWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0
cygpOwotICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1h
aW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkg
eworICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQtPnJlc3VtZUFjdGl2ZURPTU9iamVj
dHMoKTsKKyAgICAgICAgICAgIH0KICNlbmRpZgorICAgICAgICB9CiAgICAgfQogfQogCg==
</data>
<flag name="review"
          id="12031"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>