<?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>96697</bug_id>
          
          <creation_ts>2012-09-13 14:45:53 -0700</creation_ts>
          <short_desc>Refactor SMILTimeContainer to maintain animation information instead of recalculating it every frame</short_desc>
          <delta_ts>2012-10-09 10:46:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philip Rogers">pdr</reporter>
          <assigned_to name="Philip Rogers">pdr</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fmalita</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>719967</commentid>
    <comment_count>0</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-13 14:45:53 -0700</bug_when>
    <thetext>SMILTimeContainer::updateAnimations is a hot method and pines for some performance-related refactoring. For example, at the moment we both create a copy of the animations vector and re-create the {SVGElement*, QualifiedName attributeName} -&gt; SVGSMILElement* map on every frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720041</commentid>
    <comment_count>1</comment_count>
      <attachid>163985</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-13 15:42:51 -0700</bug_when>
    <thetext>Created attachment 163985
First pass

Note: in the first comment I specified the wrong kind of map. It should be HashMap&lt;ElementAttributePair, Vector&lt;SVGSMILElement*&gt;* &gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720046</commentid>
    <comment_count>2</comment_count>
      <attachid>163985</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-13 15:50:29 -0700</bug_when>
    <thetext>Comment on attachment 163985
First pass

Attachment 163985 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13850298</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720047</commentid>
    <comment_count>3</comment_count>
      <attachid>163985</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-09-13 15:51:20 -0700</bug_when>
    <thetext>Comment on attachment 163985
First pass

Attachment 163985 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13833962</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720052</commentid>
    <comment_count>4</comment_count>
      <attachid>163985</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-13 15:55:12 -0700</bug_when>
    <thetext>Comment on attachment 163985
First pass

Attachment 163985 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13852199</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720055</commentid>
    <comment_count>5</comment_count>
      <attachid>163985</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-13 15:56:46 -0700</bug_when>
    <thetext>Comment on attachment 163985
First pass

Attachment 163985 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13854188</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720067</commentid>
    <comment_count>6</comment_count>
      <attachid>163990</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-13 16:03:24 -0700</bug_when>
    <thetext>Created attachment 163990
Fix a couple last-minute mistakes that sneaked in.

I guess patches need to compile. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721347</commentid>
    <comment_count>7</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-14 20:25:17 -0700</bug_when>
    <thetext>Some benchmark results: http://philbit.com/results.png (left: without patch, right: with patch)

Overall, 10-15% faster.

Depending on how you organize the benchmark you can highlight different areas this patch speeds up (e.g., by a bunch of animations on one element vs a bunch of animations on a bunch of elements) but in my tests the total time in updateAnimations always dropped. In the traces above I used 70 rects with 50 animations on each.

The important parts of the trace results above are:
1) The total time in updateAnimations drops
2) Because we are sorting smaller and partially-sorted arrays, time spent in sortByPriority drops.
3) Because we no longer rebuild the map every frame, we no longer spend any time in HashTableAddResult

Along with these results, on a complex SVG animation demo by an internal team, CPU usage seems to be about 10% lower with the patch.


@Eseidel, I am a little confused about why the total time in SVGSMILElement::progress seems to go up with this patch. I have instrumented the code and verified that it is called the same number of times. I&apos;ve also examined the individual functions of progress() and they are just higher. Overall the progress() codepaths should not be affected. Could I be misunderstanding the &quot;running time&quot; number?
philbit.com/prepatch_final.trace
philbit.com/postpatch_final.trace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721354</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-14 20:38:20 -0700</bug_when>
    <thetext>Presumably we&apos;re actually rendering more frames now?  Do we have an FPS counter for SVG animation we can turn on?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721355</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-14 20:39:26 -0700</bug_when>
    <thetext>Could you email me the sample files?  I&apos;m happy to take a peak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721356</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-14 20:41:05 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; @Eseidel, I am a little confused about why the total time in SVGSMILElement::progress seems to go up with this patch. I have instrumented the code and verified that it is called the same number of times. I&apos;ve also examined the individual functions of progress() and they are just higher. Overall the progress() codepaths should not be affected. Could I be misunderstanding the &quot;running time&quot; number?
&gt; philbit.com/prepatch_final.trace
&gt; philbit.com/postpatch_final.trace

BAH.  Nm.  I see them there now. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721357</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-14 20:43:48 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; @Eseidel, I am a little confused about why the total time in SVGSMILElement::progress seems to go up with this patch. I have instrumented the code and verified that it is called the same number of times. I&apos;ve also examined the individual functions of progress() and they are just higher. Overall the progress() codepaths should not be affected. Could I be misunderstanding the &quot;running time&quot; number?
&gt; &gt; philbit.com/prepatch_final.trace
&gt; &gt; philbit.com/postpatch_final.trace
&gt; 
&gt; BAH.  Nm.  I see them there now. :)

Actually... I&apos;m not sure how to download a directory from an http listing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721359</commentid>
    <comment_count>12</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-14 20:47:14 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; @Eseidel, I am a little confused about why the total time in SVGSMILElement::progress seems to go up with this patch. I have instrumented the code and verified that it is called the same number of times. I&apos;ve also examined the individual functions of progress() and they are just higher. Overall the progress() codepaths should not be affected. Could I be misunderstanding the &quot;running time&quot; number?
&gt; &gt; &gt; philbit.com/prepatch_final.trace
&gt; &gt; &gt; philbit.com/postpatch_final.trace
&gt; &gt; 
&gt; &gt; BAH.  Nm.  I see them there now. :)
&gt; 
&gt; Actually... I&apos;m not sure how to download a directory from an http listing...

Oops, OSX has gotten so slick I didn&apos;t realize those were directories. Zipped!
philbit.com/traces.zip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721361</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-14 20:50:47 -0700</bug_when>
    <thetext>Wow, the post-patch trace shows a bunch of low-hanging fruit when viewed with inverted callstacks. :)

I&apos;m happy to look at this patch when I&apos;m less tired.  But I&apos;m excited by the idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721366</commentid>
    <comment_count>14</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-14 21:05:07 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Wow, the post-patch trace shows a bunch of low-hanging fruit when viewed with inverted callstacks. :)
&gt; 
&gt; I&apos;m happy to look at this patch when I&apos;m less tired.  But I&apos;m excited by the idea.

The fruit is laying on the ground begging to be picked but I wanted to keep this patch small. Followups forthcoming!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721379</commentid>
    <comment_count>15</comment_count>
      <attachid>163990</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-14 22:34:56 -0700</bug_when>
    <thetext>Comment on attachment 163990
Fix a couple last-minute mistakes that sneaked in.

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

I think I&apos;m too tired to give a real review.  BUt hopefully these nits will help a little.

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:50
&gt; +    #ifndef NDEBUG

I think #ifndef is normally not indented.  We should scold the stylebot for not complaining. :)

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:81
&gt; +    HashMap&lt;ElementAttributePair, Vector&lt;SVGSMILElement*&gt;* &gt;::iterator it = m_scheduledAnimations.find(key);
&gt; +    if (it == m_scheduledAnimations.end()) {
&gt; +        scheduled = new Vector&lt;SVGSMILElement*&gt;();
&gt; +        m_scheduledAnimations.set(key, scheduled);
&gt; +    } else
&gt; +        scheduled = it-&gt;second;

I thought there was already a way to get hashmap to allocate values for you if it didnt&apos; find them?  (Obviously you&apos;d have to tell it how...  I could be misremembering.)

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:193
&gt; +    HashMap&lt;ElementAttributePair, Vector&lt;SVGSMILElement*&gt;* &gt;::iterator end = m_scheduledAnimations.end();

We might need a typedef for this HashMap and Vector to make this more readable. :)

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:270
&gt; +    for (HashMap&lt;ElementAttributePair, Vector&lt;SVGSMILElement*&gt;* &gt;::iterator it = m_scheduledAnimations.begin(); it != end; ++it) {

This is a long block in a long function.  We should probably spend a patch or two making it smaller (splitting out static helper methods, etc.) after this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721537</commentid>
    <comment_count>16</comment_count>
      <attachid>164305</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-15 21:39:14 -0700</bug_when>
    <thetext>Created attachment 164305
Update per reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721540</commentid>
    <comment_count>17</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-15 21:50:24 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 163990 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163990&amp;action=review
&gt; 
&gt; I think I&apos;m too tired to give a real review.  BUt hopefully these nits will help a little.

Thanks!

&gt; 
&gt; &gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:50
&gt; &gt; +    #ifndef NDEBUG
&gt; 
&gt; I think #ifndef is normally not indented.  We should scold the stylebot for not complaining. :)

Fixed indentation in the newest patch.

I have also appropriately scolded the stylechecker. After https://bugs.webkit.org/show_bug.cgi?id=96874 I hope the stylechecker will have learned its lesson.

&gt; 
&gt; &gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:81
&gt; &gt; +    HashMap&lt;ElementAttributePair, Vector&lt;SVGSMILElement*&gt;* &gt;::iterator it = m_scheduledAnimations.find(key);
&gt; &gt; +    if (it == m_scheduledAnimations.end()) {
&gt; &gt; +        scheduled = new Vector&lt;SVGSMILElement*&gt;();
&gt; &gt; +        m_scheduledAnimations.set(key, scheduled);
&gt; &gt; +    } else
&gt; &gt; +        scheduled = it-&gt;second;
&gt; 
&gt; I thought there was already a way to get hashmap to allocate values for you if it didnt&apos; find them?  (Obviously you&apos;d have to tell it how...  I could be misremembering.)

I looked at our other uses of this pattern and they seem to be similar to the approach I used :( For example, FontCacheWin.cpp. Other uses of HashMap&lt; , Vector*&gt; sometimes used OwnPtr but still followed a similar pattern. BTW, because we use deleteAllValues(m_scheduledAnimations) I don&apos;t think OwnPtr is necessary.

I did update the patch to be a little cleaner by using get() instead of find(). This way we check if the returned pointer is null instead of the confusing it == m_scheduledAnimations.end() check.

&gt; 
&gt; &gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:193
&gt; &gt; +    HashMap&lt;ElementAttributePair, Vector&lt;SVGSMILElement*&gt;* &gt;::iterator end = m_scheduledAnimations.end();
&gt; 
&gt; We might need a typedef for this HashMap and Vector to make this more readable. :)

Completely agree and I think it&apos;s much cleaner now :)
I went with the following:
    typedef pair&lt;SVGElement*, QualifiedName&gt; ElementAttributePair;
    typedef Vector&lt;SVGSMILElement*&gt; AnimationsVector;
    typedef HashMap&lt;ElementAttributePair, AnimationsVector* &gt; GroupedAnimationsMap;
    GroupedAnimationsMap m_scheduledAnimations;

Having the type name in the typedef (e.g., xyzPair, xyzVector, xyzMap) seems to be how typedefs are handled elsewhere in the codebase.

&gt; 
&gt; &gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:270
&gt; &gt; +    for (HashMap&lt;ElementAttributePair, Vector&lt;SVGSMILElement*&gt;* &gt;::iterator it = m_scheduledAnimations.begin(); it != end; ++it) {
&gt; 
&gt; This is a long block in a long function.  We should probably spend a patch or two making it smaller (splitting out static helper methods, etc.) after this one.

+1!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725188</commentid>
    <comment_count>18</comment_count>
      <attachid>164305</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-20 23:24:34 -0700</bug_when>
    <thetext>Comment on attachment 164305
Update per reviewer comments

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

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:59
&gt; -    
&gt; +

snuck into the diff.

&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:92
&gt; +    // AnimateMotion does not use attributeName.

... so it&apos;s always valid. (I would have added.) :)

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:572
&gt; -{    
&gt; +{

Snuck in here too.

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:106
&gt; +    startTimer(0);

Why is this done async?

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:278
&gt; +        for (unsigned n = 0; n &lt; size; n++) {
&gt; +            SVGSMILElement* animation = scheduled-&gt;at(n);

None of this loop can cause JS to run, or the SVGSMILElement to go away, right?

And the vector itself is protected by your bool, right?  You might want to note these things.

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:315
&gt; +    for (unsigned i = 0; i &lt; animationsToApplySize; ++i)
&gt; +        animationsToApply[i]-&gt;applyResultsToTarget();

This can run arbitrary JS, I assume?  But we don&apos;t care at this point?  (For example, is the src of an image, script, etc. animateable?  if so, then javascript: urls could execute?)

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:245
&gt; +            resetTargetElement(false);

what does false mean?  Should this be an enum?

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:256
&gt; +bool SVGSMILElement::hasValidAttributeName()
&gt; +{
&gt; +    return attributeName() != anyQName();
&gt; +}

Why are we using anyQName as a sentinal value?  Should we store this out-of-bounds?  Is it possible for real content to use whatever anyQName resolves to, legitimently?

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:610
&gt; +void SVGSMILElement::resetTargetElement(bool resolveNewTarget)

This should be an enum instead of a bool. :)

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:618
&gt; +    // Force resolution of target element
&gt; +    if (resolveNewTarget)
&gt; +        targetElement();

Why is this necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726810</commentid>
    <comment_count>19</comment_count>
      <attachid>165406</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-24 10:21:52 -0700</bug_when>
    <thetext>Created attachment 165406
Address reviewer comments

Thank you for the very detailed review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726811</commentid>
    <comment_count>20</comment_count>
      <attachid>164305</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-24 10:22:32 -0700</bug_when>
    <thetext>Comment on attachment 164305
Update per reviewer comments

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

&gt;&gt; Source/WebCore/svg/SVGAnimateElement.cpp:59
&gt;&gt; +
&gt; 
&gt; snuck into the diff.

Fixed

&gt;&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:92
&gt;&gt; +    // AnimateMotion does not use attributeName.
&gt; 
&gt; ... so it&apos;s always valid. (I would have added.) :)

Fixed

&gt;&gt; Source/WebCore/svg/SVGAnimationElement.cpp:572
&gt;&gt; +{
&gt; 
&gt; Snuck in here too.

Fixed

&gt;&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:106
&gt;&gt; +    startTimer(0);
&gt; 
&gt; Why is this done async?

This is a great question.

We do this async so that we can queue up multiple changes at once before calling updateAnimations(). Consider &quot;&lt;rect&gt;&lt;animate&gt;&lt;animate&gt;&lt;animate&gt;&lt;/rect&gt;&quot;: if you insert that into the document you want to add all 3 animations before calling updateAnimations. Each of the 3 animation inserts will call notifyIntervalsChanged but, because it is deferred, updateAnimations will only get called once.

&gt;&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:278
&gt;&gt; +            SVGSMILElement* animation = scheduled-&gt;at(n);
&gt; 
&gt; None of this loop can cause JS to run, or the SVGSMILElement to go away, right?
&gt; 
&gt; And the vector itself is protected by your bool, right?  You might want to note these things.

I&apos;ve added a comment to this effect.

&gt;&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:315
&gt;&gt; +        animationsToApply[i]-&gt;applyResultsToTarget();
&gt; 
&gt; This can run arbitrary JS, I assume?  But we don&apos;t care at this point?  (For example, is the src of an image, script, etc. animateable?  if so, then javascript: urls could execute?)

A really good point that I missed. m_preventScheduledAnimationsChanges should be moved down (also duplicated right before the return) so that it protects the vector as well.

This should not run JS at all. It looks like we do not support the SMIL onend/onbegin/onrepeat events nor webkit&apos;s css animation events on SVG nodes. If these events were supported they would need to be asynchronous (it looks like the CSS ones for HTML nodes already are). Luckily, for what is animatable, the SVG spec is pretty explicit and it&apos;s mostly x/y/width/height, not src/scripts.

Unfortunately in looking into this I discovered that you can animate xlink:href in a &lt;use&gt; which can create/delete the &lt;use&gt; shadow tree&apos;s associated &lt;animate&gt; elements. This needs to be addressed and I&apos;ve assigned myself to https://bugs.webkit.org/show_bug.cgi?id=84657 to do that.

&gt;&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:245
&gt;&gt; +            resetTargetElement(false);
&gt; 
&gt; what does false mean?  Should this be an enum?

This should be an enum. Fixed.

&gt;&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:256
&gt;&gt; +}
&gt; 
&gt; Why are we using anyQName as a sentinal value?  Should we store this out-of-bounds?  Is it possible for real content to use whatever anyQName resolves to, legitimently?

I think we should store this out-of-bounds for performance reasons. Mind if I do that as a followup?

&gt;&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:610
&gt;&gt; +void SVGSMILElement::resetTargetElement(bool resolveNewTarget)
&gt; 
&gt; This should be an enum instead of a bool. :)

Done

&gt;&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:618
&gt;&gt; +        targetElement();
&gt; 
&gt; Why is this necessary?

This patch requires that we schedule/unschedule if the target or attributeName changes.
targetElement() lazily resolves m_targetElement which complicates this. If we are changing from one target to another, we need to reset the target, unscheduling the animation, and then immediately resolve the target, causing the animation to schedule itself again. If we are removed from the document, we only want to reset the target and unschedule ourselves, but not re-resolve the target and re-schedule; this is why we use the enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726830</commentid>
    <comment_count>21</comment_count>
      <attachid>165406</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-24 10:45:47 -0700</bug_when>
    <thetext>Comment on attachment 165406
Address reviewer comments

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

This seems reasonable.  I think a few more comments could make this clearer for future hackers in this area.

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:106
&gt; +    startTimer(0);

We should comment here as to why this uses a timer. :)

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:187
&gt; +    m_preventScheduledAnimationsChanges = true;

This will eventually become a RAII I figured. :)

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:264
&gt; +    // This boolean protects against these cases.

It doesn&apos;t protect JS from executing, so we should be more clear here. :)  You could set teh eventDispatchForbidden bool if you want that. :)   (that doesn&apos;t prevent event dispatch, but will ASSERT if ti happens).

// This boolean will catch any attempts to modify scheduledAnimations during this critical section.... or some such.

&gt; Source/WebCore/svg/animation/SMILTimeContainer.h:96
&gt; +    bool m_preventScheduledAnimationsChanges;

Should this be a static?  s_ instead?

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:205
&gt; +        setAttributeName(constructQualifiedName(this, fastGetAttribute(SVGNames::attributeNameAttr)));

Why not just do this at the top like before?

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:616
&gt; +    // Force resolution of target element

&quot;Why&quot; is more useful than &quot;what&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727016</commentid>
    <comment_count>22</comment_count>
      <attachid>165449</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-24 14:42:18 -0700</bug_when>
    <thetext>Created attachment 165449
Address reviewer comments (2)

Thank you again for a very thorough review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727019</commentid>
    <comment_count>23</comment_count>
      <attachid>165406</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-24 14:44:35 -0700</bug_when>
    <thetext>Comment on attachment 165406
Address reviewer comments

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

&gt;&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:106
&gt;&gt; +    startTimer(0);
&gt; 
&gt; We should comment here as to why this uses a timer. :)

Done

&gt;&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:187
&gt;&gt; +    m_preventScheduledAnimationsChanges = true;
&gt; 
&gt; This will eventually become a RAII I figured. :)

Yes! I found a similar pattern in rniwa&apos;s eventDispatchForbidden code and helped him land it today :) This should eventually work similarly.

&gt;&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:264
&gt;&gt; +    // This boolean protects against these cases.
&gt; 
&gt; It doesn&apos;t protect JS from executing, so we should be more clear here. :)  You could set teh eventDispatchForbidden bool if you want that. :)   (that doesn&apos;t prevent event dispatch, but will ASSERT if ti happens).
&gt; 
&gt; // This boolean will catch any attempts to modify scheduledAnimations during this critical section.... or some such.

I&apos;ve updated the comment here. PTAL?

&gt;&gt; Source/WebCore/svg/animation/SMILTimeContainer.h:96
&gt;&gt; +    bool m_preventScheduledAnimationsChanges;
&gt; 
&gt; Should this be a static?  s_ instead?

In this case, no. We can have multiple SMILTimeContainers (one for each SVGSVGElement) and these can run sandboxed in svg-as-image. For example, we could have an animation of a xlink:href that kicks off the loading of a base64&apos;ed SVG image that causes animations in the svg-as-image to run. This flag only protects against modifying this time container&apos;s scheduled animations.

&gt;&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:205
&gt;&gt; +        setAttributeName(constructQualifiedName(this, fastGetAttribute(SVGNames::attributeNameAttr)));
&gt; 
&gt; Why not just do this at the top like before?

This is another great catch. When I was originally writing this patch I had to separate these but eventually they should have been re-combined but I missed this case. I&apos;ve fixed this.

&gt;&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:616
&gt;&gt; +    // Force resolution of target element
&gt; 
&gt; &quot;Why&quot; is more useful than &quot;what&quot; here.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728712</commentid>
    <comment_count>24</comment_count>
      <attachid>165449</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-26 10:29:14 -0700</bug_when>
    <thetext>Comment on attachment 165449
Address reviewer comments (2)

Very exciting.  I look forward to the follow-ups. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728735</commentid>
    <comment_count>25</comment_count>
      <attachid>165449</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-26 10:53:10 -0700</bug_when>
    <thetext>Comment on attachment 165449
Address reviewer comments (2)

Clearing flags on attachment: 165449

Committed r129670: &lt;http://trac.webkit.org/changeset/129670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728739</commentid>
    <comment_count>26</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-09-26 10:55:30 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 165449 [details])
&gt; Clearing flags on attachment: 165449
&gt; 
&gt; Committed r129670: &lt;http://trac.webkit.org/changeset/129670&gt;

Thanks for the really excellent reviews Eric.

Now, off to work on the ~5 followups I&apos;ve promised :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163985</attachid>
            <date>2012-09-13 15:42:51 -0700</date>
            <delta_ts>2012-09-13 16:03:24 -0700</delta_ts>
            <desc>First pass</desc>
            <filename>96697.1.patch</filename>
            <type>text/plain</type>
            <size>27050</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODUxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDEyLTA5LTEzICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU01JTFRpbWVDb250
YWluZXIgdG8gbWFpbnRhaW4gYW5pbWF0aW9uIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgcmVjYWxj
dWxhdGluZyBpdCBldmVyeSBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTY2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTVkdUaW1lQ29udGFpbmVyIGNhbiBiZSBpbXByb3ZlZCBieSBtYWludGFp
bmluZyBleHRyYSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICBhbmltYXRpb25zIGR1cmluZyBz
Y2hlZHVsZS91bnNjaGVkdWxlIGluc3RlYWQgb2YgcmUtY2FsY3VsYXRpbmcgaXQKKyAgICAgICAg
ZXZlcnkgZnJhbWUuCisKKyAgICAgICAgVG8gZG8gdGhpcywgU01JTFRpbWVDb250YWluZXIgbm93
IHRyYWNrcyB0aGUgZm9sbG93aW5nIG1hcDoKKyAgICAgICAgSGFzaE1hcDxwYWlyPFNWR0VsZW1l
bnQqLCBRdWFsaWZpZWROYW1lPiwgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4qID4gbV9zY2hlZHVs
ZWRBbmltYXRpb25zOworICAgICAgICBPbiBzY2hlZHVsZS91bnNjaGVkdWxlIHdlIG1vZGlmeSB0
aGlzIG1hcCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGl0IGluCisgICAgICAgIHVwZGF0ZUFuaW1hdGlv
bnMuIEFzIGEgcmVzdWx0IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhbHdheXMKKyAgICAg
ICAgbm90aWZ5aW5nIChvciwgcmUtc2NoZWR1bGluZykgdGhlIHRpbWUgY29udGFpbmVyIHdoZW4g
ZWl0aGVyIHRoZSB0YXJnZXQKKyAgICAgICAgY2hhbmdlcyBvciB0aGUgYXR0cmlidXRlTmFtZSBj
aGFuZ2VzLiBUaGlzIGlzIG1hbmFnZWQgYnkgdHJhY2tpbmcKKyAgICAgICAgY2hhbmdlcyB3aXRo
IHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlIGFuZCBzZXRBdHRyaWJ1dGVOYW1lLgorCisgICAgICAg
IEFmdGVyIHRoaXMgcGF0Y2gsIHVwZGF0ZUFuaW1hdGlvbnMgb25seSBpdGVyYXRlcyBvdmVyIG1f
c2NoZWR1bGVkQW5pbWF0aW9ucy4KKyAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBzb3J0aW5nIG9m
IGFuaW1hdGlvbnMgYnkgcHJpb3JpdHkgaXMgbm93IGRvbmUKKyAgICAgICAgb3ZlciBlYWNoIFZl
Y3RvciBvZiBTVkdTTUlMRWxlbWVudHMgYWZmZWN0aW5nIGEge1NWR0VsZW1lbnQqLCBRdWFsaWZp
ZWROYW1lfQorICAgICAgICBwYWlyIGluc3RlYWQgb2Ygb3ZlciBhbGwgdGhlIFNWR1NNSUxFbGVt
ZW50cyBhdCBvbmNlLgorCisgICAgICAgIExhc3RseSwgYSBndWFyZCAobV9wcmV2ZW50U2NoZWR1
bGVkQW5pbWF0aW9uc0NoYW5nZXMpIGhhcyBiZWVuIGFkZGVkCisgICAgICAgIHRvIHByb3ZlIHRo
YXQgd2UgZG8gbm90IG1vZGlmeSB0aGUgc2NoZWR1bGVkIGFuaW1hdGlvbnMgbWFwIG91dAorICAg
ICAgICBmcm9tIHVuZGVyIG91cnNlbHZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhp
cyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6Omhhc1ZhbGlkQXR0
cmlidXRlVHlwZSk6CisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0
cmlidXRlTmFtZSk6CisKKyAgICAgICAgICAgIFBlciB0aGUgc3BlYywgQW5pbWF0ZU1vdGlvbiBp
cyBub3QgYWZmZWN0ZWQgYnkgYXR0cmlidXRlTmFtZS4gSW5zdGVhZAorICAgICAgICAgICAgb2Yg
aGF2aW5nIGEgc3BlY2lhbCBjYXNlIGZvciB0aGlzIGluIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRh
dGVBbmltYXRpb25zCisgICAgICAgICAgICB3ZSBzaW1wbHkgaW1wbGVtZW50IHRoaXMgbWV0aG9k
LgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuaDoKKyAgICAgICAgKFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRp
b25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb24pOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWVDb250YWluZXI6On5TTUlMVGltZUNvbnRhaW5lcik6CisKKyAgICAgICAgICAg
IFRoaXMgbWV0aG9kIG5vdyBjbGVhbnMgdXAgdGhlIG1hcCBzaW5jZSB3ZSBoYXZlIGR5bmFtaWNh
bGx5IGFsbG9jYXRlZAorICAgICAgICAgICAgVmVjdG9ycyBpbiBpdC4KKworICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWVDb250YWluZXI6OnNjaGVkdWxlKToKKworICAgICAgICAgICAgSGVyZSB3
ZSBhcmUganVzdCBhZGRpbmcgYW4gZW50cnkgdG8gdGhlIG1hcC4gVGhlcmUgaXMgc29tZSBzcGVj
aWFsIGhhbmRsaW5nCisgICAgICAgICAgICBmb3IgY3JlYXRpbmcgdGhlIFZlY3RvciBvZiBvbmUg
ZG9lcyBub3QgZXhpc3QuCisKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1
bnNjaGVkdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpub3RpZnlJ
bnRlcnZhbHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpz
ZXRFbGFwc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpzdGFydFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRp
b25zKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFNNSUxU
aW1lQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVzZXRUYXJnZXRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpyZXNvbHZlRmlyc3RJbnRl
cnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6YmVnaW5MaXN0Q2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6ZW5kTGlzdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnByb2dyZXNzKToKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisgICAgICAgIChTVkdTTUlMRWxlbWVudCk6
CisKIDIwMTItMDktMTMgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CiAKICAgICAg
ICAgVHlwbyBpbiBSZW5kZXJTdHlsZTo6aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpLCBzbWFs
bCByZWZhY3RvcmluZyBwb3NzaWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjg0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wg
U1ZHQW5pbWF0ZUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXQKICAgICBTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0RWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgcmV0dXJuIG1fYW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRVbmtub3duOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyODQyNykK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDYgKzg3LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
Omhhc1ZhbGlkQXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpCit7CisgICAgLy8gQW5pbWF0ZU1vdGlv
biBkb2VzIG5vdCB1c2UgYXR0cmlidXRlTmFtZS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9v
bCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0
PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTI4NDI3
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgcHJpdmF0ZToKICAgICBTVkdBbmltYXRlTW90aW9u
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRB
dHRyaWJ1dGVOYW1lKCk7CiAKICAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgQXR0
cmlidXRlJikgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjg0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2OSw3ICs1NjksNyBAQCB2
b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJCiB9CiAKIHZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJl
cGVhdENvdW50LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKLXsgICAgCit7CiAgICAg
aWYgKCFtX2FuaW1hdGlvblZhbGlkKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCShyZXZp
c2lvbiAxMjg0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29u
dGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBzdGF0aWMgY29uc3QgZG91
YmxlIGFuaW1hdGlvbkZyYW1lRGVsYXkgPSAwLjAyNTsKIAogU01JTFRpbWVDb250YWluZXI6OlNN
SUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIG93bmVyKSAKQEAgLTQ3LDI0ICs0Nyw2NyBA
QCBTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIoU1ZHCiAgICAgLCBtX2RvY3Vt
ZW50T3JkZXJJbmRleGVzRGlydHkoZmFsc2UpCiAgICAgLCBtX3RpbWVyKHRoaXMsICZTTUlMVGlt
ZUNvbnRhaW5lcjo6dGltZXJGaXJlZCkKICAgICAsIG1fb3duZXJTVkdFbGVtZW50KG93bmVyKQor
ICAgICNpZm5kZWYgTkRFQlVHCisgICAgLCBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hh
bmdlcyhmYWxzZSkKKyAgICAjZW5kaWYKK3sKK30KKworU01JTFRpbWVDb250YWluZXI6On5TTUlM
VGltZUNvbnRhaW5lcigpCiB7CisgICAgI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fcHJl
dmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzKTsKKyAgICAjZW5kaWYKKyAgICBkZWxldGVB
bGxWYWx1ZXMobV9zY2hlZHVsZWRBbmltYXRpb25zKTsKIH0KIAotdm9pZCBTTUlMVGltZUNvbnRh
aW5lcjo6c2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbikKK3ZvaWQgU01JTFRpbWVD
b250YWluZXI6OnNjaGVkdWxlKFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24sIFNWR0VsZW1lbnQq
IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsKICAgICBBU1NF
UlQoYW5pbWF0aW9uLT50aW1lQ29udGFpbmVyKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKHRhcmdl
dCk7CisgICAgQVNTRVJUKGFuaW1hdGlvbi0+aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkpOworCisg
ICAgI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlv
bnNDaGFuZ2VzKTsKKyAgICAjZW5kaWYKKworICAgIEVsZW1lbnRBdHRyaWJ1dGVQYWlyIGtleSh0
YXJnZXQsIGF0dHJpYnV0ZU5hbWUpOworICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+KiBzY2hl
ZHVsZWQ7CisgICAgSGFzaE1hcDxFbGVtZW50QXR0cmlidXRlUGFpciwgVmVjdG9yPFNWR1NNSUxF
bGVtZW50Kj4qID46Oml0ZXJhdG9yIGl0ID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmZpbmQoa2V5
KTsKKyAgICBpZiAoaXQgPT0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmVuZCgpKSB7CisgICAgICAg
IHNjaGVkdWxlZCA9IG5ldyBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPigpOworICAgICAgICBtX3Nj
aGVkdWxlZEFuaW1hdGlvbnMuc2V0KGtleSwgc2NoZWR1bGVkKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc2NoZWR1bGVkID0gaXQtPnNlY29uZDsKKyAgICBBU1NFUlQoIXNjaGVkdWxlZC0+Y29udGFp
bnMoYW5pbWF0aW9uKSk7CisgICAgc2NoZWR1bGVkLT5hcHBlbmQoYW5pbWF0aW9uKTsKKwogICAg
IFNNSUxUaW1lIG5leHRGaXJlVGltZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNzVGltZSgpOwot
ICAgIGlmICghbmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X3NjaGVkdWxlZEFuaW1hdGlvbnMuYWRkKGFuaW1hdGlvbik7Ci0gICAgc3RhcnRUaW1lcigwKTsK
KyAgICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCisgICAgICAgIG5vdGlmeUludGVydmFs
c0NoYW5nZWQoKTsKIH0KLSAgICAKLXZvaWQgU01JTFRpbWVDb250YWluZXI6OnVuc2NoZWR1bGUo
U1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbikKKwordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dW5z
Y2hlZHVsZShTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uLCBTVkdFbGVtZW50KiB0YXJnZXQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgQVNTRVJUKGFuaW1hdGlv
bi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOwogCi0gICAgbV9zY2hlZHVsZWRBbmltYXRpb25z
LnJlbW92ZShhbmltYXRpb24pOworICAgICNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFtX3By
ZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdlcyk7CisgICAgI2VuZGlmCisKKyAgICBFbGVt
ZW50QXR0cmlidXRlUGFpciBrZXkodGFyZ2V0LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICBIYXNoTWFw
PEVsZW1lbnRBdHRyaWJ1dGVQYWlyLCBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0
b3IgaXQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZmluZChrZXkpOworICAgIEFTU0VSVChpdCAh
PSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZW5kKCkpOworICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVu
dCo+KiBzY2hlZHVsZWQgPSBpdC0+c2Vjb25kOworICAgIEFTU0VSVChzY2hlZHVsZWQpOworICAg
IHNpemVfdCBpZHggPSBzY2hlZHVsZWQtPmZpbmQoYW5pbWF0aW9uKTsKKyAgICBBU1NFUlQoaWR4
ICE9IG5vdEZvdW5kKTsKKyAgICBzY2hlZHVsZWQtPnJlbW92ZShpZHgpOworfQorCit2b2lkIFNN
SUxUaW1lQ29udGFpbmVyOjpub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCkKK3sKKyAgICBzdGFydFRp
bWVyKDApOwogfQogCiBTTUlMVGltZSBTTUlMVGltZUNvbnRhaW5lcjo6ZWxhcHNlZCgpIGNvbnN0
CkBAIC03MywxMiArMTE2LDEyIEBAIFNNSUxUaW1lIFNNSUxUaW1lQ29udGFpbmVyOjplbGFwc2Vk
KCkgY28KICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGN1cnJlbnRUaW1lKCkgLSBtX2Jl
Z2luVGltZSAtIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWU7CiB9Ci0gICAgCisKIGJvb2wgU01JTFRp
bWVDb250YWluZXI6OmlzQWN0aXZlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9iZWdpblRpbWUg
JiYgIWlzUGF1c2VkKCk7CiB9Ci0gICAgCisKIGJvb2wgU01JTFRpbWVDb250YWluZXI6OmlzUGF1
c2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYXVzZVRpbWU7CkBAIC0xNDQsMTAgKzE4Nywx
OSBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpzZXRFbGFwc2VkKFNNSUxUCiAgICAgaWYgKG1f
cGF1c2VUaW1lKQogICAgICAgICBtX3BhdXNlVGltZSA9IG5vdzsKIAotICAgIFZlY3RvcjxTVkdT
TUlMRWxlbWVudCo+IHRvUmVzZXQ7Ci0gICAgY29weVRvVmVjdG9yKG1fc2NoZWR1bGVkQW5pbWF0
aW9ucywgdG9SZXNldCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHRvUmVzZXQuc2l6
ZSgpOyArK24pCi0gICAgICAgIHRvUmVzZXRbbl0tPnJlc2V0KCk7CisgICAgI2lmbmRlZiBOREVC
VUcKKyAgICBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdlcyA9IHRydWU7CisgICAg
I2VuZGlmCisgICAgSGFzaE1hcDxFbGVtZW50QXR0cmlidXRlUGFpciwgVmVjdG9yPFNWR1NNSUxF
bGVtZW50Kj4qID46Oml0ZXJhdG9yIGVuZCA9IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5lbmQoKTsK
KyAgICBmb3IgKEhhc2hNYXA8RWxlbWVudEF0dHJpYnV0ZVBhaXIsIFZlY3RvcjxTVkdTTUlMRWxl
bWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1h
dGlvbnMgPSBpdC0+c2Vjb25kOworICAgICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPjo6aXRl
cmF0b3IgdmVjdG9yRW5kID0gYW5pbWF0aW9ucy0+ZW5kKCk7CisgICAgICAgIGZvciAoVmVjdG9y
PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIHZlY3Rvckl0ID0gYW5pbWF0aW9ucy0+YmVnaW4o
KTsgdmVjdG9ySXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rvckl0KQorICAgICAgICAgICAgKCp2ZWN0
b3JJdCktPnJlc2V0KCk7CisgICAgfQorICAgICNpZm5kZWYgTkRFQlVHCisgICAgbV9wcmV2ZW50
U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMgPSBmYWxzZTsKKyAgICAjZW5kaWYKIAogICAgIHVw
ZGF0ZUFuaW1hdGlvbnModGltZSwgdHJ1ZSk7CiB9CkBAIC0xNTYsMTAgKzIwOCwxMCBAQCB2b2lk
IFNNSUxUaW1lQ29udGFpbmVyOjpzdGFydFRpbWVyKFNNSUxUCiB7CiAgICAgaWYgKCFtX2JlZ2lu
VGltZSB8fCBpc1BhdXNlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBpZiAoIWZp
cmVUaW1lLmlzRmluaXRlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIFNNSUxUaW1l
IGRlbGF5ID0gbWF4KGZpcmVUaW1lIC0gZWxhcHNlZCgpLCBtaW5pbXVtRGVsYXkpOwogICAgIG1f
dGltZXIuc3RhcnRPbmVTaG90KGRlbGF5LnZhbHVlKCkpOwogfQpAQCAtMjA3LDY4ICsyNTksNjkg
QEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c29ydEJ5UHJpb3JpdHkoVgogCiB2b2lkIFNNSUxU
aW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQsIGJvb2wgc2Vl
a1RvVGltZSkKIHsKLSAgICBTTUlMVGltZSBlYXJsaWVyc0ZpcmVUaW1lID0gU01JTFRpbWU6OnVu
cmVzb2x2ZWQoKTsKLQotICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IHRvQW5pbWF0ZTsKLSAg
ICBjb3B5VG9WZWN0b3IobV9zY2hlZHVsZWRBbmltYXRpb25zLCB0b0FuaW1hdGUpOworICAgIFNN
SUxUaW1lIGVhcmxpZXN0RmlyZVRpbWUgPSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOwogCi0gICAg
Ly8gU29ydCBhY2NvcmRpbmcgdG8gcHJpb3JpdHkuIEVsZW1lbnRzIHdpdGggbGF0ZXIgYmVnaW4g
dGltZSBoYXZlIGhpZ2hlciBwcmlvcml0eS4KLSAgICAvLyBJbiBjYXNlIG9mIGEgdGllLCBkb2N1
bWVudCBvcmRlciBkZWNpZGVzLiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjb25z
aWRlciB0aW1pbmcgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBlbGVtZW50cy4gRGVwZW5kZW50
cwotICAgIC8vIGhhdmUgaGlnaGVyIHByaW9yaXR5LgotICAgIHNvcnRCeVByaW9yaXR5KHRvQW5p
bWF0ZSwgZWxhcHNlZCk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgYW5pbWF0aW9uIGNvbnRyaWJ1dGlv
bnMuCi0gICAgdHlwZWRlZiBwYWlyPFNWR0VsZW1lbnQqLCBRdWFsaWZpZWROYW1lPiBFbGVtZW50
QXR0cmlidXRlUGFpcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8RWxlbWVudEF0dHJpYnV0ZVBhaXIs
IFNWR1NNSUxFbGVtZW50Kj4gUmVzdWx0RWxlbWVudE1hcDsKLSAgICBSZXN1bHRFbGVtZW50TWFw
IHJlc3VsdHNFbGVtZW50czsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdG9BbmltYXRl
LnNpemUoKTsgKytuKSB7Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24gPSB0b0Fu
aW1hdGVbbl07Ci0gICAgICAgIEFTU0VSVChhbmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0
aGlzKTsKLQotICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gYW5pbWF0aW9uLT50
YXJnZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cmlidXRlTmFtZSA9IGFuaW1h
dGlvbi0+YXR0cmlidXRlTmFtZSgpOwotICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBhbnlR
TmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVz
OjphbmltYXRlTW90aW9uVGFnKSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gU1ZH
TmFtZXM6OmFuaW1hdGVNb3Rpb25UYWc7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgI2lmbmRlZiBOREVCVUcKKyAgICBtX3ByZXZlbnRTY2hlZHVsZWRB
bmltYXRpb25zQ2hhbmdlcyA9IHRydWU7CisgICAgI2VuZGlmCisKKyAgICBWZWN0b3I8U1ZHU01J
TEVsZW1lbnQqPiBhbmltYXRpb25zVG9BcHBseTsKKyAgICBIYXNoTWFwPEVsZW1lbnRBdHRyaWJ1
dGVQYWlyLCBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgZW5kID0gbV9zY2hl
ZHVsZWRBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxFbGVtZW50QXR0cmlidXRl
UGFpciwgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4qID46Oml0ZXJhdG9yIGl0ID0gbV9zY2hlZHVs
ZWRBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBWZWN0b3I8
U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7CisKKyAgICAgICAgLy8g
U29ydCBhY2NvcmRpbmcgdG8gcHJpb3JpdHkuIEVsZW1lbnRzIHdpdGggbGF0ZXIgYmVnaW4gdGlt
ZSBoYXZlIGhpZ2hlciBwcmlvcml0eS4KKyAgICAgICAgLy8gSW4gY2FzZSBvZiBhIHRpZSwgZG9j
dW1lbnQgb3JkZXIgZGVjaWRlcy4gCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNv
IGNvbnNpZGVyIHRpbWluZyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGVsZW1lbnRzLiBEZXBl
bmRlbnRzCisgICAgICAgIC8vIGhhdmUgaGlnaGVyIHByaW9yaXR5LgorICAgICAgICBzb3J0QnlQ
cmlvcml0eSgqYW5pbWF0aW9ucywgZWxhcHNlZCk7CisKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQq
IHJlc3VsdEVsZW1lbnQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgYW5p
bWF0aW9ucy0+c2l6ZSgpOyArK24pIHsKKyAgICAgICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmlt
YXRpb24gPSBhbmltYXRpb25zLT5hdChuKTsKKyAgICAgICAgICAgIEFTU0VSVChhbmltYXRpb24t
PnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKworICAgICAgICAgICAgU1ZHRWxlbWVudCogdGFy
Z2V0RWxlbWVudCA9IGFuaW1hdGlvbi0+dGFyZ2V0RWxlbWVudCgpOworICAgICAgICAgICAgQVNT
RVJUKHRhcmdldEVsZW1lbnQpOworCisgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0
ZU5hbWUgPSBhbmltYXRpb24tPmF0dHJpYnV0ZU5hbWUoKTsKKyAgICAgICAgICAgIEFTU0VSVChh
bmltYXRpb24tPmhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKTsKKworICAgICAgICAgICAgLy8gUmVz
dWx0cyBhcmUgYWNjdW11bGF0ZWQgdG8gdGhlIGZpcnN0IGFuaW1hdGlvbiB0aGF0IGFuaW1hdGVz
IGFuZCBjb250cmlidXRlcyB0byBhIHBhcnRpY3VsYXIgZWxlbWVudC9hdHRyaWJ1dGUgcGFpci4K
KyAgICAgICAgICAgIGlmICghcmVzdWx0RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGlmICgh
YW5pbWF0aW9uLT5oYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgcmVzdWx0RWxlbWVudCA9IGFuaW1hdGlvbjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGNhbGN1bGF0ZSB0aGUgY29u
dHJpYnV0aW9uIGZyb20gdGhlIGFuaW1hdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSByZXN1bHRzRWxl
bWVudC4KKyAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLT5wcm9ncmVzcyhlbGFwc2VkLCByZXN1
bHRFbGVtZW50LCBzZWVrVG9UaW1lKSAmJiByZXN1bHRFbGVtZW50ID09IGFuaW1hdGlvbikKKyAg
ICAgICAgICAgICAgICByZXN1bHRFbGVtZW50ID0gMDsKKworICAgICAgICAgICAgU01JTFRpbWUg
bmV4dEZpcmVUaW1lID0gYW5pbWF0aW9uLT5uZXh0UHJvZ3Jlc3NUaW1lKCk7CisgICAgICAgICAg
ICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCisgICAgICAgICAgICAgICAgZWFybGllc3RG
aXJlVGltZSA9IG1pbihuZXh0RmlyZVRpbWUsIGVhcmxpZXN0RmlyZVRpbWUpOwogICAgICAgICB9
CiAKLSAgICAgICAgLy8gUmVzdWx0cyBhcmUgYWNjdW11bGF0ZWQgdG8gdGhlIGZpcnN0IGFuaW1h
dGlvbiB0aGF0IGFuaW1hdGVzIGFuZCBjb250cmlidXRlcyB0byBhIHBhcnRpY3VsYXIgZWxlbWVu
dC9hdHRyaWJ1dGUgcGFpci4KLSAgICAgICAgRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdl
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOyAKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQqIHJlc3Vs
dEVsZW1lbnQgPSByZXN1bHRzRWxlbWVudHMuZ2V0KGtleSk7Ci0gICAgICAgIGlmICghcmVzdWx0
RWxlbWVudCkgewotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPmhhc1ZhbGlkQXR0cmlidXRl
VHlwZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0RWxl
bWVudCA9IGFuaW1hdGlvbjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQocmVz
dWx0RWxlbWVudCAhPSBhbmltYXRpb24pOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBjYWxjdWxh
dGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBhbmltYXRpb24gYW5kIGFkZCBpdCB0byB0aGUg
cmVzdWx0c0VsZW1lbnQuCi0gICAgICAgIGlmIChhbmltYXRpb24tPnByb2dyZXNzKGVsYXBzZWQs
IHJlc3VsdEVsZW1lbnQsIHNlZWtUb1RpbWUpICYmIHJlc3VsdEVsZW1lbnQgPT0gYW5pbWF0aW9u
KQotICAgICAgICAgICAgcmVzdWx0c0VsZW1lbnRzLmFkZChrZXksIHJlc3VsdEVsZW1lbnQpOwot
Ci0gICAgICAgIFNNSUxUaW1lIG5leHRGaXJlVGltZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNz
VGltZSgpOwotICAgICAgICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCi0gICAgICAgICAg
ICBlYXJsaWVyc0ZpcmVUaW1lID0gbWluKG5leHRGaXJlVGltZSwgZWFybGllcnNGaXJlVGltZSk7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcmVzdWx0c1RvQXBwbHlTaXplID0gcmVzdWx0c0VsZW1l
bnRzLnNpemUoKTsKLSAgICBpZiAoIXJlc3VsdHNUb0FwcGx5U2l6ZSkgewotICAgICAgICBzdGFy
dFRpbWVyKGVhcmxpZXJzRmlyZVRpbWUsIGFuaW1hdGlvbkZyYW1lRGVsYXkpOworICAgICAgICBp
ZiAocmVzdWx0RWxlbWVudCkKKyAgICAgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5LmFwcGVuZChy
ZXN1bHRFbGVtZW50KTsKKyAgICB9CisKKyAgICAjaWZuZGVmIE5ERUJVRworICAgIG1fcHJldmVu
dFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gZmFsc2U7CisgICAgI2VuZGlmCisKKyAgICB1
bnNpZ25lZCBhbmltYXRpb25zVG9BcHBseVNpemUgPSBhbmltYXRpb25zVG9BcHBseS5zaXplKCk7
CisgICAgaWYgKCFhbmltYXRpb25zVG9BcHBseVNpemUpIHsKKyAgICAgICAgc3RhcnRUaW1lcihl
YXJsaWVzdEZpcmVUaW1lLCBhbmltYXRpb25GcmFtZURlbGF5KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIC8vIEFwcGx5IHJlc3VsdHMgdG8gdGFyZ2V0IGVsZW1lbnRzLgotICAgIFJl
c3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IHJlc3VsdHNFbGVtZW50cy5lbmQoKTsKLSAg
ICBmb3IgKFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gcmVzdWx0c0VsZW1lbnRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YXBwbHlSZXN1bHRz
VG9UYXJnZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0aW9uc1RvQXBw
bHlTaXplOyArK2kpCisgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5W2ldLT5hcHBseVJlc3VsdHNU
b1RhcmdldCgpOwogCi0gICAgc3RhcnRUaW1lcihlYXJsaWVyc0ZpcmVUaW1lLCBhbmltYXRpb25G
cmFtZURlbGF5KTsKKyAgICBzdGFydFRpbWVyKGVhcmxpZXN0RmlyZVRpbWUsIGFuaW1hdGlvbkZy
YW1lRGVsYXkpOwogICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5oCShyZXZpc2lvbiAxMjg0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwxOSBA
QCBjbGFzcyBTVkdTVkdFbGVtZW50OwogCiBjbGFzcyBTTUlMVGltZUNvbnRhaW5lciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFNNSUxUaW1lQ29udGFpbmVyPiAgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVyPiBjcmVhdGUoU1ZHU1ZHRWxlbWVudCogb3duZXIp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTTUlMVGltZUNvbnRhaW5lcihvd25lcikpOyB9IAorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVyPiBjcmVhdGUoU1ZHU1ZHRWxlbWVu
dCogb3duZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTTUlMVGltZUNvbnRhaW5lcihvd25lcikp
OyB9CisgICAgflNNSUxUaW1lQ29udGFpbmVyKCk7CisKKyAgICB2b2lkIHNjaGVkdWxlKFNWR1NN
SUxFbGVtZW50KiwgU1ZHRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2b2lk
IHVuc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqLCBTVkdFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpOworICAgIHZvaWQgbm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpOwogCi0gICAgdm9pZCBz
Y2hlZHVsZShTVkdTTUlMRWxlbWVudCopOwotICAgIHZvaWQgdW5zY2hlZHVsZShTVkdTTUlMRWxl
bWVudCopOwotICAgIAogICAgIFNNSUxUaW1lIGVsYXBzZWQoKSBjb25zdDsKIAogICAgIGJvb2wg
aXNBY3RpdmUoKSBjb25zdDsKICAgICBib29sIGlzUGF1c2VkKCkgY29uc3Q7CiAgICAgYm9vbCBp
c1N0YXJ0ZWQoKSBjb25zdDsKLSAgICAKKwogICAgIHZvaWQgYmVnaW4oKTsKICAgICB2b2lkIHBh
dXNlKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKQEAgLTY2LDE0ICs2OCwxNCBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgU01JTFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCogb3duZXIpOwot
ICAgIAorCiAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPFNNSUxUaW1lQ29udGFpbmVyPiopOwog
ICAgIHZvaWQgc3RhcnRUaW1lcihTTUlMVGltZSBmaXJlVGltZSwgU01JTFRpbWUgbWluaW11bURl
bGF5ID0gMCk7CiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQsIGJv
b2wgc2Vla1RvVGltZSA9IGZhbHNlKTsKICAgICAKICAgICB2b2lkIHVwZGF0ZURvY3VtZW50T3Jk
ZXJJbmRleGVzKCk7CiAgICAgdm9pZCBzb3J0QnlQcmlvcml0eShWZWN0b3I8U1ZHU01JTEVsZW1l
bnQqPiYgc21pbEVsZW1lbnRzLCBTTUlMVGltZSBlbGFwc2VkKTsKLSAgICAKKwogICAgIGRvdWJs
ZSBtX2JlZ2luVGltZTsKICAgICBkb3VibGUgbV9wYXVzZVRpbWU7CiAgICAgZG91YmxlIG1fYWNj
dW11bGF0ZWRQYXVzZVRpbWU7CkBAIC04MywxMCArODUsMTMgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4gbV90aW1lcjsKIAotICAgIHR5cGVkZWYgSGFzaFNl
dDxTVkdTTUlMRWxlbWVudCo+IFRpbWluZ0VsZW1lbnRTZXQ7Ci0gICAgVGltaW5nRWxlbWVudFNl
dCBtX3NjaGVkdWxlZEFuaW1hdGlvbnM7Ci0KKyAgICB0eXBlZGVmIHBhaXI8U1ZHRWxlbWVudCos
IFF1YWxpZmllZE5hbWU+IEVsZW1lbnRBdHRyaWJ1dGVQYWlyOworICAgIEhhc2hNYXA8RWxlbWVu
dEF0dHJpYnV0ZVBhaXIsIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+KiA+IG1fc2NoZWR1bGVkQW5p
bWF0aW9uczsKICAgICBTVkdTVkdFbGVtZW50KiBtX293bmVyU1ZHRWxlbWVudDsKKworICAgICNp
Zm5kZWYgTkRFQlVHCisgICAgYm9vbCBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdl
czsKKyAgICAjZW5kaWYKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjg0MjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDggKzE0MCw4IEBAIFNWR1NNSUxFbGVtZW50OjpTVkdTTUlMRWxlbWVudChjb25zdCBR
dWEKIFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQogewogICAgIGRpc2Nvbm5lY3RD
b25kaXRpb25zKCk7Ci0gICAgaWYgKG1fdGltZUNvbnRhaW5lcikKLSAgICAgICAgbV90aW1lQ29u
dGFpbmVyLT51bnNjaGVkdWxlKHRoaXMpOworICAgIGlmIChtX3RpbWVDb250YWluZXIgJiYgbV90
YXJnZXRFbGVtZW50ICYmIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKQorICAgICAgICBtX3RpbWVD
b250YWluZXItPnVuc2NoZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50LCBtX2F0dHJpYnV0ZU5h
bWUpOwogICAgIGlmIChtX3RhcmdldEVsZW1lbnQpCiAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQodGhpcywg
bV90YXJnZXRFbGVtZW50KTsKIH0KQEAgLTIwMCwxNCArMjAwLDE3IEBAIE5vZGU6Okluc2VydGlv
bk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU00KICAgICAvLyBWZXJpZnkgd2UgYXJlIG5vdCBpbiA8
dXNlPiBpbnN0YW5jZSB0cmVlLgogICAgIEFTU0VSVCghaXNJblNoYWRvd1RyZWUoKSk7CiAKLSAg
ICBtX2F0dHJpYnV0ZU5hbWUgPSBjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKHRoaXMsIGZhc3RHZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSk7CiAgICAgU1ZHU1ZHRWxlbWVu
dCogb3duZXIgPSBvd25lclNWR0VsZW1lbnQoKTsKLSAgICBpZiAoIW93bmVyKQorICAgIGlmICgh
b3duZXIpIHsKKyAgICAgICAgc2V0QXR0cmlidXRlTmFtZShjb25zdHJ1Y3RRdWFsaWZpZWROYW1l
KHRoaXMsIGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSkpOwog
ICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICB9CiAgICAgbV90aW1lQ29udGFpbmVy
ID0gb3duZXItPnRpbWVDb250YWluZXIoKTsKICAgICBBU1NFUlQobV90aW1lQ29udGFpbmVyKTsK
ICAgICBtX3RpbWVDb250YWluZXItPnNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKTsKIAor
ICAgIHNldEF0dHJpYnV0ZU5hbWUoY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0
QXR0cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpKTsKKwogICAgIC8vICJJZiBu
byBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgYmVnaW4gdmFsdWUgKGFuIG9mZnNl
dC12YWx1ZSBvZiAwKSBtdXN0IGJlIGV2YWx1YXRlZC4iCiAgICAgaWYgKCFmYXN0SGFzQXR0cmli
dXRlKFNWR05hbWVzOjpiZWdpbkF0dHIpKQogICAgICAgICBtX2JlZ2luVGltZXMuYXBwZW5kKFNN
SUxUaW1lV2l0aE9yaWdpbigpKTsKQEAgLTIxNSw3ICsyMTgsMTEgQEAgTm9kZTo6SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTTQogICAgIGlmIChtX2lzV2FpdGluZ0ZvckZpcnN0SW50
ZXJ2YWwpCiAgICAgICAgIHJlc29sdmVGaXJzdEludGVydmFsKCk7CiAKLSAgICByZXNjaGVkdWxl
KCk7CisgICAgLy8gRm9yY2UgcmVzb2x1dGlvbiBvZiB0YXJnZXQgZWxlbWVudAorICAgIGlmICgh
bV90YXJnZXRFbGVtZW50KQorICAgICAgICB0YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKG1fdGlt
ZUNvbnRhaW5lcikKKyAgICAgICAgbV90aW1lQ29udGFpbmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFu
Z2VkKCk7CiAKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KQEAgLTIyNCw3ICsyMzEsOCBA
QCB2b2lkIFNWR1NNSUxFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluCiB7CiAgICAgaWYgKHJv
b3RQYXJlbnQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICBpZiAobV90aW1lQ29udGFpbmVyKSB7
Ci0gICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcyk7CisgICAgICAg
ICAgICBpZiAobV90YXJnZXRFbGVtZW50ICYmIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKQorICAg
ICAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzLCBtX3RhcmdldEVs
ZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICBtX3RpbWVDb250YWluZXIgPSAw
OwogICAgICAgICB9CiAgICAgICAgIC8vIENhbGxpbmcgZGlzY29ubmVjdENvbmRpdGlvbnMoKSBt
YXkga2lsbCB1cyBpZiB0aGVyZSBhcmUgc3luY2Jhc2UgY29uZGl0aW9ucy4KQEAgLTIzNCwxNCAr
MjQyLDE5IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW4KIAogICAg
ICAgICAvLyBDbGVhciB0YXJnZXQgbm93LCBiZWNhdXNlIGRpc2Nvbm5lY3RDb25kaXRpb25zIGNh
bGxzIHRhcmdldEVsZW1lbnQoKSB3aGljaCB3aWxsIHJlY3JlYXRlIHRoZSB0YXJnZXQgaWYgd2Ug
cmVtb3ZlZCBpdCBzb29uZXIuIAogICAgICAgICBpZiAobV90YXJnZXRFbGVtZW50KQotICAgICAg
ICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KCk7CisgICAgICAgICAgICByZXNldFRhcmdldEVsZW1l
bnQoZmFsc2UpOwogCi0gICAgICAgIG1fYXR0cmlidXRlTmFtZSA9IGFueVFOYW1lKCk7CisgICAg
ICAgIG1fYXR0cmlidXRlTmFtZShhbnlRTmFtZSgpKTsKICAgICB9CiAKICAgICBTVkdFbGVtZW50
OjpyZW1vdmVkRnJvbShyb290UGFyZW50KTsKIH0KLSAgIAorCitib29sIFNWR1NNSUxFbGVtZW50
OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKQoreworICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lKCkg
IT0gYW55UU5hbWUoKTsKK30KKwogU01JTFRpbWUgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlT2Zmc2V0
VmFsdWUoY29uc3QgU3RyaW5nJiBkYXRhKQogewogICAgIGJvb2wgb2s7CkBAIC00NjUsMTIgKzQ3
OCwxMyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbmRBdHRyKQogICAgICAgICAgICAgZW5k
TGlzdENoYW5nZWQoZWxhcHNlZCgpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSB7Ci0gICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUg
PSBjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKHRoaXMsIGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmF0dHJpYnV0ZU5hbWVBdHRyKSk7CisgICAgICAgICAgICBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0
cnVjdFF1YWxpZmllZE5hbWUodGhpcywgZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6YXR0cmli
dXRlTmFtZUF0dHIpKSk7CiAgICAgICAgICAgICBpZiAobV90YXJnZXRFbGVtZW50KSB7CiAgICAg
ICAgICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lLm1hdGNoZXMoWExp
bmtOYW1lczo6aHJlZkF0dHIpKSB7CisgICAgICAgICAgICAvLyB0YXJnZXRFbGVtZW50IGlzIHJl
c29sdmVkIGxhemlseSBidXQgdGFyZ2V0RWxlbWVudCgpIHdpbGwgaGFuZGxlIGNhbGxpbmcgdGFy
Z2V0RWxlbWVudFdpbGxDaGFuZ2UoKS4KICAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpKQogICAgICAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNG
cm9tVGFyZ2V0KHRhcmdldEVsZW1lbnQpOwogICAgICAgICB9CkBAIC01NDMsMTAgKzU1NywxNiBA
QCB2b2lkIFNWR1NNSUxFbGVtZW50OjpkaXNjb25uZWN0Q29uZGl0aW9uCiAgICAgfQogfQogCi12
b2lkIFNWR1NNSUxFbGVtZW50OjpyZXNjaGVkdWxlKCkKK3ZvaWQgU1ZHU01JTEVsZW1lbnQ6OnNl
dEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsKLSAg
ICBpZiAobV90aW1lQ29udGFpbmVyKQotICAgICAgICBtX3RpbWVDb250YWluZXItPnNjaGVkdWxl
KHRoaXMpOworICAgIGlmIChtX3RpbWVDb250YWluZXIgJiYgbV90YXJnZXRFbGVtZW50ICYmIG1f
YXR0cmlidXRlTmFtZSAhPSBhdHRyaWJ1dGVOYW1lKSB7CisgICAgICAgIGlmIChoYXNWYWxpZEF0
dHJpYnV0ZU5hbWUoKSkKKyAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0
aGlzLCBtX3RhcmdldEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7CisgICAgICAgIG1fYXR0cmli
dXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7CisgICAgICAgIGlmIChoYXNWYWxpZEF0dHJpYnV0ZU5h
bWUoKSkKKyAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUodGhpcywgbV90YXJn
ZXRFbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUpOworICAgIH0gZWxzZQorICAgICAgICBtX2F0dHJp
YnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lOwogfQogCiBTVkdFbGVtZW50KiBTVkdTTUlMRWxlbWVu
dDo6dGFyZ2V0RWxlbWVudCgpCkBAIC01NjksOCArNTg5LDE1IEBAIFNWR0VsZW1lbnQqIFNWR1NN
SUxFbGVtZW50Ojp0YXJnZXRFbGVtZW4KICAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50OwogfQog
Ci12b2lkIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50
KiBjdXJyZW50VGFyZ2V0LCBTVkdFbGVtZW50KikKK3ZvaWQgU1ZHU01JTEVsZW1lbnQ6OnRhcmdl
dEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQq
IG5ld1RhcmdldCkKIHsKKyAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIGhhc1ZhbGlkQXR0cmli
dXRlTmFtZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50VGFyZ2V0KQorICAgICAgICAgICAgbV90
aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMsIGN1cnJlbnRUYXJnZXQsIG1fYXR0cmlidXRl
TmFtZSk7CisgICAgICAgIGlmIChuZXdUYXJnZXQpCisgICAgICAgICAgICBtX3RpbWVDb250YWlu
ZXItPnNjaGVkdWxlKHRoaXMsIG5ld1RhcmdldCwgbV9hdHRyaWJ1dGVOYW1lKTsKKyAgICB9CisK
ICAgICAvLyBPbmx5IGNsZWFyIHRoZSBhbmltYXRlZCB0eXBlLCBpZiB3ZSBoYWQgYSB0YXJnZXQg
YmVmb3JlLgogICAgIGlmIChjdXJyZW50VGFyZ2V0KQogICAgICAgICBjbGVhckFuaW1hdGVkVHlw
ZShjdXJyZW50VGFyZ2V0KTsKQEAgLTU4MCwxMSArNjA3LDE2IEBAIHZvaWQgU1ZHU01JTEVsZW1l
bnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2gKICAgICAgICAgZW5kZWRBY3RpdmVJbnRlcnZhbCgpOwog
fQogCi12b2lkIFNWR1NNSUxFbGVtZW50OjpyZXNldFRhcmdldEVsZW1lbnQoKQordm9pZCBTVkdT
TUlMRWxlbWVudDo6cmVzZXRUYXJnZXRFbGVtZW50KGJvb2wgcmVzb2x2ZU5ld1RhcmdldCkKIHsK
ICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFuaW1hdGlvbkVs
ZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7CiAgICAgdGFyZ2V0RWxlbWVu
dFdpbGxDaGFuZ2UobV90YXJnZXRFbGVtZW50LCAwKTsKICAgICBtX3RhcmdldEVsZW1lbnQgPSAw
OworCisgICAgLy8gRm9yY2UgcmVzb2x1dGlvbiBvZiB0YXJnZXQgZWxlbWVudAorICAgIGlmIChy
ZXNvbHZlTmV3VGFyZ2V0KQorICAgICAgICB0YXJnZXRFbGVtZW50KCk7CisKICAgICBhbmltYXRp
b25BdHRyaWJ1dGVDaGFuZ2VkKCk7CiB9CiAKQEAgLTgyMyw3ICs4NTUsOSBAQCB2b2lkIFNWR1NN
SUxFbGVtZW50OjpyZXNvbHZlRmlyc3RJbnRlcnZhCiAgICAgICAgIG1faW50ZXJ2YWxFbmQgPSBl
bmQ7CiAgICAgICAgIG5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQod2FzVW5yZXNvbHZl
ZCA/IE5ld0ludGVydmFsIDogRXhpc3RpbmdJbnRlcnZhbCk7CiAgICAgICAgIG1fbmV4dFByb2dy
ZXNzVGltZSA9IG1pbihtX25leHRQcm9ncmVzc1RpbWUsIG1faW50ZXJ2YWxCZWdpbik7Ci0gICAg
ICAgIHJlc2NoZWR1bGUoKTsKKworICAgICAgICBpZiAobV90aW1lQ29udGFpbmVyKQorICAgICAg
ICAgICAgbV90aW1lQ29udGFpbmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCk7CiAgICAgfQog
fQogCkBAIC04NzEsNyArOTA1LDkgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6YmVnaW5MaXN0Q2hh
bmdlZChTTQogICAgICAgICB9CiAgICAgfQogICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVsYXBz
ZWQoKTsKLSAgICByZXNjaGVkdWxlKCk7CisKKyAgICBpZiAobV90aW1lQ29udGFpbmVyKQorICAg
ICAgICBtX3RpbWVDb250YWluZXItPm5vdGlmeUludGVydmFsc0NoYW5nZWQoKTsKIH0KIAogdm9p
ZCBTVkdTTUlMRWxlbWVudDo6ZW5kTGlzdENoYW5nZWQoU01JTFRpbWUpCkBAIC04OTAsNyArOTI2
LDkgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6ZW5kTGlzdENoYW5nZWQoU01JTAogICAgICAgICB9
CiAgICAgfQogICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVsYXBzZWQ7Ci0gICAgcmVzY2hlZHVs
ZSgpOworCisgICAgaWYgKG1fdGltZUNvbnRhaW5lcikKKyAgICAgICAgbV90aW1lQ29udGFpbmVy
LT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmNo
ZWNrUmVzdGFydChTTUlMVGltZSBlbGFwc2VkKQpAQCAtMTAxOCwxMCArMTA1NiwxMCBAQCBib29s
IFNWR1NNSUxFbGVtZW50Ojpwcm9ncmVzcyhTTUlMVGltZSBlCiAgICAgQVNTRVJUKHJlc3VsdEVs
ZW1lbnQpOwogICAgIEFTU0VSVChtX3RpbWVDb250YWluZXIpOwogICAgIEFTU0VSVChtX2lzV2Fp
dGluZ0ZvckZpcnN0SW50ZXJ2YWwgfHwgbV9pbnRlcnZhbEJlZ2luLmlzRmluaXRlKCkpOwotICAg
IAorCiAgICAgaWYgKCFtX2NvbmRpdGlvbnNDb25uZWN0ZWQpCiAgICAgICAgIGNvbm5lY3RDb25k
aXRpb25zKCk7Ci0gICAgCisKICAgICBpZiAoIW1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKSB7
CiAgICAgICAgIEFTU0VSVChtX2FjdGl2ZVN0YXRlID09IEluYWN0aXZlKTsKICAgICAgICAgbV9u
ZXh0UHJvZ3Jlc3NUaW1lID0gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKQEAgLTEwMzUsNyArMTA3
Myw3IEBAIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OnByb2dyZXNzKFNNSUxUaW1lIGUKICAgICAgICAg
bV9uZXh0UHJvZ3Jlc3NUaW1lID0gbV9pbnRlcnZhbEJlZ2luOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIAorCiAgICAgbV9wcmV2aW91c0ludGVydmFsQmVnaW4gPSBtX2ludGVy
dmFsQmVnaW47CiAKICAgICBpZiAobV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCShyZXZp
c2lvbiAxMjg0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKICAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9u
QXR0cmlidXRlQ2hhbmdlZCgpID0gMDsKIAogICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29u
dGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV90aW1lQ29udGFpbmVyLmdldCgpOyB9CiAKICAgICBT
VkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KCk7Ci0gICAgdm9pZCByZXNldFRhcmdldEVsZW1lbnQo
KTsKKyAgICB2b2lkIHJlc2V0VGFyZ2V0RWxlbWVudChib29sIHJlc29sdmVOZXdUYXJnZXQgPSB0
cnVlKTsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdHRyaWJ1dGVOYW1lOyB9CiAKICAgICB2b2lkIGJlZ2luQnlMaW5rQWN0aXZhdGlv
bigpOwpAQCAtMTM4LDcgKzEzOSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjaGVja1Jlc3RhcnQo
U01JTFRpbWUgZWxhcHNlZCk7CiAgICAgdm9pZCBiZWdpbkxpc3RDaGFuZ2VkKFNNSUxUaW1lIGV2
ZW50VGltZSk7CiAgICAgdm9pZCBlbmRMaXN0Q2hhbmdlZChTTUlMVGltZSBldmVudFRpbWUpOwot
ICAgIHZvaWQgcmVzY2hlZHVsZSgpOworCisgICAgdm9pZCBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKIAogICAgIC8vIFRoaXMgcmVwcmVzZW50cyBjb25kaXRpb25zIG9u
IGVsZW1lbnRzIGJlZ2luIG9yIGVuZCBsaXN0IHRoYXQgbmVlZCB0byBiZSByZXNvbHZlZCBvbiBy
dW50aW1lCiAgICAgLy8gZm9yIGV4YW1wbGUgPGFuaW1hdGUgYmVnaW49Im90aGVyRWxlbWVudC5i
ZWdpbiArIDhzOyBidXR0b24uY2xpY2siIC4uLiAvPgo=
</data>
<flag name="commit-queue"
          id="175630"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163990</attachid>
            <date>2012-09-13 16:03:24 -0700</date>
            <delta_ts>2012-09-15 21:39:14 -0700</delta_ts>
            <desc>Fix a couple last-minute mistakes that sneaked in.</desc>
            <filename>96697.2.patch</filename>
            <type>text/plain</type>
            <size>26920</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODUxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDEyLTA5LTEzICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU01JTFRpbWVDb250
YWluZXIgdG8gbWFpbnRhaW4gYW5pbWF0aW9uIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgcmVjYWxj
dWxhdGluZyBpdCBldmVyeSBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTY2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTVkdUaW1lQ29udGFpbmVyIGNhbiBiZSBpbXByb3ZlZCBieSBtYWludGFp
bmluZyBleHRyYSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICBhbmltYXRpb25zIGR1cmluZyBz
Y2hlZHVsZS91bnNjaGVkdWxlIGluc3RlYWQgb2YgcmUtY2FsY3VsYXRpbmcgaXQKKyAgICAgICAg
ZXZlcnkgZnJhbWUuCisKKyAgICAgICAgVG8gZG8gdGhpcywgU01JTFRpbWVDb250YWluZXIgbm93
IHRyYWNrcyB0aGUgZm9sbG93aW5nIG1hcDoKKyAgICAgICAgSGFzaE1hcDxwYWlyPFNWR0VsZW1l
bnQqLCBRdWFsaWZpZWROYW1lPiwgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4qID4gbV9zY2hlZHVs
ZWRBbmltYXRpb25zOworICAgICAgICBPbiBzY2hlZHVsZS91bnNjaGVkdWxlIHdlIG1vZGlmeSB0
aGlzIG1hcCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGl0IGluCisgICAgICAgIHVwZGF0ZUFuaW1hdGlv
bnMuIEFzIGEgcmVzdWx0IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhbHdheXMKKyAgICAg
ICAgbm90aWZ5aW5nIChvciwgcmUtc2NoZWR1bGluZykgdGhlIHRpbWUgY29udGFpbmVyIHdoZW4g
ZWl0aGVyIHRoZSB0YXJnZXQKKyAgICAgICAgY2hhbmdlcyBvciB0aGUgYXR0cmlidXRlTmFtZSBj
aGFuZ2VzLiBUaGlzIGlzIG1hbmFnZWQgYnkgdHJhY2tpbmcKKyAgICAgICAgY2hhbmdlcyB3aXRo
IHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlIGFuZCBzZXRBdHRyaWJ1dGVOYW1lLgorCisgICAgICAg
IEFmdGVyIHRoaXMgcGF0Y2gsIHVwZGF0ZUFuaW1hdGlvbnMgb25seSBpdGVyYXRlcyBvdmVyIG1f
c2NoZWR1bGVkQW5pbWF0aW9ucy4KKyAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBzb3J0aW5nIG9m
IGFuaW1hdGlvbnMgYnkgcHJpb3JpdHkgaXMgbm93IGRvbmUKKyAgICAgICAgb3ZlciBlYWNoIFZl
Y3RvciBvZiBTVkdTTUlMRWxlbWVudHMgYWZmZWN0aW5nIGEge1NWR0VsZW1lbnQqLCBRdWFsaWZp
ZWROYW1lfQorICAgICAgICBwYWlyIGluc3RlYWQgb2Ygb3ZlciBhbGwgdGhlIFNWR1NNSUxFbGVt
ZW50cyBhdCBvbmNlLgorCisgICAgICAgIExhc3RseSwgYSBndWFyZCAobV9wcmV2ZW50U2NoZWR1
bGVkQW5pbWF0aW9uc0NoYW5nZXMpIGhhcyBiZWVuIGFkZGVkCisgICAgICAgIHRvIHByb3ZlIHRo
YXQgd2UgZG8gbm90IG1vZGlmeSB0aGUgc2NoZWR1bGVkIGFuaW1hdGlvbnMgbWFwIG91dAorICAg
ICAgICBmcm9tIHVuZGVyIG91cnNlbHZlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhp
cyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6Omhhc1ZhbGlkQXR0
cmlidXRlVHlwZSk6CisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0
cmlidXRlTmFtZSk6CisKKyAgICAgICAgICAgIFBlciB0aGUgc3BlYywgQW5pbWF0ZU1vdGlvbiBp
cyBub3QgYWZmZWN0ZWQgYnkgYXR0cmlidXRlTmFtZS4gSW5zdGVhZAorICAgICAgICAgICAgb2Yg
aGF2aW5nIGEgc3BlY2lhbCBjYXNlIGZvciB0aGlzIGluIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRh
dGVBbmltYXRpb25zCisgICAgICAgICAgICB3ZSBzaW1wbHkgaW1wbGVtZW50IHRoaXMgbWV0aG9k
LgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuaDoKKyAgICAgICAgKFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRp
b25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb24pOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWVDb250YWluZXI6On5TTUlMVGltZUNvbnRhaW5lcik6CisKKyAgICAgICAgICAg
IFRoaXMgbWV0aG9kIG5vdyBjbGVhbnMgdXAgdGhlIG1hcCBzaW5jZSB3ZSBoYXZlIGR5bmFtaWNh
bGx5IGFsbG9jYXRlZAorICAgICAgICAgICAgVmVjdG9ycyBpbiBpdC4KKworICAgICAgICAoV2Vi
Q29yZTo6U01JTFRpbWVDb250YWluZXI6OnNjaGVkdWxlKToKKworICAgICAgICAgICAgSGVyZSB3
ZSBhcmUganVzdCBhZGRpbmcgYW4gZW50cnkgdG8gdGhlIG1hcC4gVGhlcmUgaXMgc29tZSBzcGVj
aWFsIGhhbmRsaW5nCisgICAgICAgICAgICBmb3IgY3JlYXRpbmcgdGhlIFZlY3RvciBvZiBvbmUg
ZG9lcyBub3QgZXhpc3QuCisKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1
bnNjaGVkdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpub3RpZnlJ
bnRlcnZhbHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpz
ZXRFbGFwc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpzdGFydFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRp
b25zKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFNNSUxU
aW1lQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVzZXRUYXJnZXRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpyZXNvbHZlRmlyc3RJbnRl
cnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6YmVnaW5MaXN0Q2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6ZW5kTGlzdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnByb2dyZXNzKToKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisgICAgICAgIChTVkdTTUlMRWxlbWVudCk6
CisKIDIwMTItMDktMTMgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CiAKICAgICAg
ICAgVHlwbyBpbiBSZW5kZXJTdHlsZTo6aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpLCBzbWFs
bCByZWZhY3RvcmluZyBwb3NzaWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjg0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wg
U1ZHQW5pbWF0ZUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXQKICAgICBTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0RWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgcmV0dXJuIG1fYW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRVbmtub3duOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyODQyNykK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDYgKzg3LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
Omhhc1ZhbGlkQXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpCit7CisgICAgLy8gQW5pbWF0ZU1vdGlv
biBkb2VzIG5vdCB1c2UgYXR0cmlidXRlTmFtZS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9v
bCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0
PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTI4NDI3
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgcHJpdmF0ZToKICAgICBTVkdBbmltYXRlTW90aW9u
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRB
dHRyaWJ1dGVOYW1lKCk7CiAKICAgICBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgQXR0
cmlidXRlJikgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjg0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2OSw3ICs1NjksNyBAQCB2
b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJCiB9CiAKIHZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJl
cGVhdENvdW50LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKLXsgICAgCit7CiAgICAg
aWYgKCFtX2FuaW1hdGlvblZhbGlkKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCShyZXZp
c2lvbiAxMjg0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29u
dGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBzdGF0aWMgY29uc3QgZG91
YmxlIGFuaW1hdGlvbkZyYW1lRGVsYXkgPSAwLjAyNTsKIAogU01JTFRpbWVDb250YWluZXI6OlNN
SUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIG93bmVyKSAKQEAgLTQ3LDI0ICs0Nyw2NyBA
QCBTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIoU1ZHCiAgICAgLCBtX2RvY3Vt
ZW50T3JkZXJJbmRleGVzRGlydHkoZmFsc2UpCiAgICAgLCBtX3RpbWVyKHRoaXMsICZTTUlMVGlt
ZUNvbnRhaW5lcjo6dGltZXJGaXJlZCkKICAgICAsIG1fb3duZXJTVkdFbGVtZW50KG93bmVyKQor
ICAgICNpZm5kZWYgTkRFQlVHCisgICAgLCBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hh
bmdlcyhmYWxzZSkKKyAgICAjZW5kaWYKK3sKK30KKworU01JTFRpbWVDb250YWluZXI6On5TTUlM
VGltZUNvbnRhaW5lcigpCiB7CisgICAgI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fcHJl
dmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzKTsKKyAgICAjZW5kaWYKKyAgICBkZWxldGVB
bGxWYWx1ZXMobV9zY2hlZHVsZWRBbmltYXRpb25zKTsKIH0KIAotdm9pZCBTTUlMVGltZUNvbnRh
aW5lcjo6c2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbikKK3ZvaWQgU01JTFRpbWVD
b250YWluZXI6OnNjaGVkdWxlKFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24sIFNWR0VsZW1lbnQq
IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsKICAgICBBU1NF
UlQoYW5pbWF0aW9uLT50aW1lQ29udGFpbmVyKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKHRhcmdl
dCk7CisgICAgQVNTRVJUKGFuaW1hdGlvbi0+aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkpOworCisg
ICAgI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlv
bnNDaGFuZ2VzKTsKKyAgICAjZW5kaWYKKworICAgIEVsZW1lbnRBdHRyaWJ1dGVQYWlyIGtleSh0
YXJnZXQsIGF0dHJpYnV0ZU5hbWUpOworICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+KiBzY2hl
ZHVsZWQ7CisgICAgSGFzaE1hcDxFbGVtZW50QXR0cmlidXRlUGFpciwgVmVjdG9yPFNWR1NNSUxF
bGVtZW50Kj4qID46Oml0ZXJhdG9yIGl0ID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmZpbmQoa2V5
KTsKKyAgICBpZiAoaXQgPT0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmVuZCgpKSB7CisgICAgICAg
IHNjaGVkdWxlZCA9IG5ldyBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPigpOworICAgICAgICBtX3Nj
aGVkdWxlZEFuaW1hdGlvbnMuc2V0KGtleSwgc2NoZWR1bGVkKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc2NoZWR1bGVkID0gaXQtPnNlY29uZDsKKyAgICBBU1NFUlQoIXNjaGVkdWxlZC0+Y29udGFp
bnMoYW5pbWF0aW9uKSk7CisgICAgc2NoZWR1bGVkLT5hcHBlbmQoYW5pbWF0aW9uKTsKKwogICAg
IFNNSUxUaW1lIG5leHRGaXJlVGltZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNzVGltZSgpOwot
ICAgIGlmICghbmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X3NjaGVkdWxlZEFuaW1hdGlvbnMuYWRkKGFuaW1hdGlvbik7Ci0gICAgc3RhcnRUaW1lcigwKTsK
KyAgICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCisgICAgICAgIG5vdGlmeUludGVydmFs
c0NoYW5nZWQoKTsKIH0KLSAgICAKLXZvaWQgU01JTFRpbWVDb250YWluZXI6OnVuc2NoZWR1bGUo
U1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbikKKwordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dW5z
Y2hlZHVsZShTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uLCBTVkdFbGVtZW50KiB0YXJnZXQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgQVNTRVJUKGFuaW1hdGlv
bi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOwogCi0gICAgbV9zY2hlZHVsZWRBbmltYXRpb25z
LnJlbW92ZShhbmltYXRpb24pOworICAgICNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFtX3By
ZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdlcyk7CisgICAgI2VuZGlmCisKKyAgICBFbGVt
ZW50QXR0cmlidXRlUGFpciBrZXkodGFyZ2V0LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICBIYXNoTWFw
PEVsZW1lbnRBdHRyaWJ1dGVQYWlyLCBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0
b3IgaXQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZmluZChrZXkpOworICAgIEFTU0VSVChpdCAh
PSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZW5kKCkpOworICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVu
dCo+KiBzY2hlZHVsZWQgPSBpdC0+c2Vjb25kOworICAgIEFTU0VSVChzY2hlZHVsZWQpOworICAg
IHNpemVfdCBpZHggPSBzY2hlZHVsZWQtPmZpbmQoYW5pbWF0aW9uKTsKKyAgICBBU1NFUlQoaWR4
ICE9IG5vdEZvdW5kKTsKKyAgICBzY2hlZHVsZWQtPnJlbW92ZShpZHgpOworfQorCit2b2lkIFNN
SUxUaW1lQ29udGFpbmVyOjpub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCkKK3sKKyAgICBzdGFydFRp
bWVyKDApOwogfQogCiBTTUlMVGltZSBTTUlMVGltZUNvbnRhaW5lcjo6ZWxhcHNlZCgpIGNvbnN0
CkBAIC03MywxMiArMTE2LDEyIEBAIFNNSUxUaW1lIFNNSUxUaW1lQ29udGFpbmVyOjplbGFwc2Vk
KCkgY28KICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGN1cnJlbnRUaW1lKCkgLSBtX2Jl
Z2luVGltZSAtIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWU7CiB9Ci0gICAgCisKIGJvb2wgU01JTFRp
bWVDb250YWluZXI6OmlzQWN0aXZlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9iZWdpblRpbWUg
JiYgIWlzUGF1c2VkKCk7CiB9Ci0gICAgCisKIGJvb2wgU01JTFRpbWVDb250YWluZXI6OmlzUGF1
c2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYXVzZVRpbWU7CkBAIC0xNDQsMTAgKzE4Nywx
OSBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpzZXRFbGFwc2VkKFNNSUxUCiAgICAgaWYgKG1f
cGF1c2VUaW1lKQogICAgICAgICBtX3BhdXNlVGltZSA9IG5vdzsKIAotICAgIFZlY3RvcjxTVkdT
TUlMRWxlbWVudCo+IHRvUmVzZXQ7Ci0gICAgY29weVRvVmVjdG9yKG1fc2NoZWR1bGVkQW5pbWF0
aW9ucywgdG9SZXNldCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHRvUmVzZXQuc2l6
ZSgpOyArK24pCi0gICAgICAgIHRvUmVzZXRbbl0tPnJlc2V0KCk7CisgICAgI2lmbmRlZiBOREVC
VUcKKyAgICBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdlcyA9IHRydWU7CisgICAg
I2VuZGlmCisgICAgSGFzaE1hcDxFbGVtZW50QXR0cmlidXRlUGFpciwgVmVjdG9yPFNWR1NNSUxF
bGVtZW50Kj4qID46Oml0ZXJhdG9yIGVuZCA9IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5lbmQoKTsK
KyAgICBmb3IgKEhhc2hNYXA8RWxlbWVudEF0dHJpYnV0ZVBhaXIsIFZlY3RvcjxTVkdTTUlMRWxl
bWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1h
dGlvbnMgPSBpdC0+c2Vjb25kOworICAgICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPjo6aXRl
cmF0b3IgdmVjdG9yRW5kID0gYW5pbWF0aW9ucy0+ZW5kKCk7CisgICAgICAgIGZvciAoVmVjdG9y
PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIHZlY3Rvckl0ID0gYW5pbWF0aW9ucy0+YmVnaW4o
KTsgdmVjdG9ySXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rvckl0KQorICAgICAgICAgICAgKCp2ZWN0
b3JJdCktPnJlc2V0KCk7CisgICAgfQorICAgICNpZm5kZWYgTkRFQlVHCisgICAgbV9wcmV2ZW50
U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMgPSBmYWxzZTsKKyAgICAjZW5kaWYKIAogICAgIHVw
ZGF0ZUFuaW1hdGlvbnModGltZSwgdHJ1ZSk7CiB9CkBAIC0xNTYsMTAgKzIwOCwxMCBAQCB2b2lk
IFNNSUxUaW1lQ29udGFpbmVyOjpzdGFydFRpbWVyKFNNSUxUCiB7CiAgICAgaWYgKCFtX2JlZ2lu
VGltZSB8fCBpc1BhdXNlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBpZiAoIWZp
cmVUaW1lLmlzRmluaXRlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIFNNSUxUaW1l
IGRlbGF5ID0gbWF4KGZpcmVUaW1lIC0gZWxhcHNlZCgpLCBtaW5pbXVtRGVsYXkpOwogICAgIG1f
dGltZXIuc3RhcnRPbmVTaG90KGRlbGF5LnZhbHVlKCkpOwogfQpAQCAtMjA3LDY4ICsyNTksNjUg
QEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c29ydEJ5UHJpb3JpdHkoVgogCiB2b2lkIFNNSUxU
aW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQsIGJvb2wgc2Vl
a1RvVGltZSkKIHsKLSAgICBTTUlMVGltZSBlYXJsaWVyc0ZpcmVUaW1lID0gU01JTFRpbWU6OnVu
cmVzb2x2ZWQoKTsKLQotICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IHRvQW5pbWF0ZTsKLSAg
ICBjb3B5VG9WZWN0b3IobV9zY2hlZHVsZWRBbmltYXRpb25zLCB0b0FuaW1hdGUpOworICAgIFNN
SUxUaW1lIGVhcmxpZXN0RmlyZVRpbWUgPSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOwogCi0gICAg
Ly8gU29ydCBhY2NvcmRpbmcgdG8gcHJpb3JpdHkuIEVsZW1lbnRzIHdpdGggbGF0ZXIgYmVnaW4g
dGltZSBoYXZlIGhpZ2hlciBwcmlvcml0eS4KLSAgICAvLyBJbiBjYXNlIG9mIGEgdGllLCBkb2N1
bWVudCBvcmRlciBkZWNpZGVzLiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjb25z
aWRlciB0aW1pbmcgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBlbGVtZW50cy4gRGVwZW5kZW50
cwotICAgIC8vIGhhdmUgaGlnaGVyIHByaW9yaXR5LgotICAgIHNvcnRCeVByaW9yaXR5KHRvQW5p
bWF0ZSwgZWxhcHNlZCk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgYW5pbWF0aW9uIGNvbnRyaWJ1dGlv
bnMuCi0gICAgdHlwZWRlZiBwYWlyPFNWR0VsZW1lbnQqLCBRdWFsaWZpZWROYW1lPiBFbGVtZW50
QXR0cmlidXRlUGFpcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8RWxlbWVudEF0dHJpYnV0ZVBhaXIs
IFNWR1NNSUxFbGVtZW50Kj4gUmVzdWx0RWxlbWVudE1hcDsKLSAgICBSZXN1bHRFbGVtZW50TWFw
IHJlc3VsdHNFbGVtZW50czsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdG9BbmltYXRl
LnNpemUoKTsgKytuKSB7Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24gPSB0b0Fu
aW1hdGVbbl07Ci0gICAgICAgIEFTU0VSVChhbmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0
aGlzKTsKLQotICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gYW5pbWF0aW9uLT50
YXJnZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cmlidXRlTmFtZSA9IGFuaW1h
dGlvbi0+YXR0cmlidXRlTmFtZSgpOwotICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBhbnlR
TmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVz
OjphbmltYXRlTW90aW9uVGFnKSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gU1ZH
TmFtZXM6OmFuaW1hdGVNb3Rpb25UYWc7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgI2lmbmRlZiBOREVCVUcKKyAgICBtX3ByZXZlbnRTY2hlZHVsZWRB
bmltYXRpb25zQ2hhbmdlcyA9IHRydWU7CisgICAgI2VuZGlmCisKKyAgICBWZWN0b3I8U1ZHU01J
TEVsZW1lbnQqPiBhbmltYXRpb25zVG9BcHBseTsKKyAgICBIYXNoTWFwPEVsZW1lbnRBdHRyaWJ1
dGVQYWlyLCBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgZW5kID0gbV9zY2hl
ZHVsZWRBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxFbGVtZW50QXR0cmlidXRl
UGFpciwgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4qID46Oml0ZXJhdG9yIGl0ID0gbV9zY2hlZHVs
ZWRBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBWZWN0b3I8
U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7CisKKyAgICAgICAgLy8g
U29ydCBhY2NvcmRpbmcgdG8gcHJpb3JpdHkuIEVsZW1lbnRzIHdpdGggbGF0ZXIgYmVnaW4gdGlt
ZSBoYXZlIGhpZ2hlciBwcmlvcml0eS4KKyAgICAgICAgLy8gSW4gY2FzZSBvZiBhIHRpZSwgZG9j
dW1lbnQgb3JkZXIgZGVjaWRlcy4gCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNv
IGNvbnNpZGVyIHRpbWluZyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGVsZW1lbnRzLiBEZXBl
bmRlbnRzCisgICAgICAgIC8vIGhhdmUgaGlnaGVyIHByaW9yaXR5LgorICAgICAgICBzb3J0QnlQ
cmlvcml0eSgqYW5pbWF0aW9ucywgZWxhcHNlZCk7CisKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQq
IHJlc3VsdEVsZW1lbnQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgYW5p
bWF0aW9ucy0+c2l6ZSgpOyArK24pIHsKKyAgICAgICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmlt
YXRpb24gPSBhbmltYXRpb25zLT5hdChuKTsKKyAgICAgICAgICAgIEFTU0VSVChhbmltYXRpb24t
PnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChhbmltYXRpb24t
PnRhcmdldEVsZW1lbnQoKSk7CisgICAgICAgICAgICBBU1NFUlQoYW5pbWF0aW9uLT5oYXNWYWxp
ZEF0dHJpYnV0ZU5hbWUoKSk7CisKKyAgICAgICAgICAgIC8vIFJlc3VsdHMgYXJlIGFjY3VtdWxh
dGVkIHRvIHRoZSBmaXJzdCBhbmltYXRpb24gdGhhdCBhbmltYXRlcyBhbmQgY29udHJpYnV0ZXMg
dG8gYSBwYXJ0aWN1bGFyIGVsZW1lbnQvYXR0cmlidXRlIHBhaXIuCisgICAgICAgICAgICBpZiAo
IXJlc3VsdEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi0+aGFzVmFs
aWRBdHRyaWJ1dGVUeXBlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIHJlc3VsdEVsZW1lbnQgPSBhbmltYXRpb247CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFRoaXMgd2lsbCBjYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRo
ZSBhbmltYXRpb24gYW5kIGFkZCBpdCB0byB0aGUgcmVzdWx0c0VsZW1lbnQuCisgICAgICAgICAg
ICBpZiAoIWFuaW1hdGlvbi0+cHJvZ3Jlc3MoZWxhcHNlZCwgcmVzdWx0RWxlbWVudCwgc2Vla1Rv
VGltZSkgJiYgcmVzdWx0RWxlbWVudCA9PSBhbmltYXRpb24pCisgICAgICAgICAgICAgICAgcmVz
dWx0RWxlbWVudCA9IDA7CisKKyAgICAgICAgICAgIFNNSUxUaW1lIG5leHRGaXJlVGltZSA9IGFu
aW1hdGlvbi0+bmV4dFByb2dyZXNzVGltZSgpOworICAgICAgICAgICAgaWYgKG5leHRGaXJlVGlt
ZS5pc0Zpbml0ZSgpKQorICAgICAgICAgICAgICAgIGVhcmxpZXN0RmlyZVRpbWUgPSBtaW4obmV4
dEZpcmVUaW1lLCBlYXJsaWVzdEZpcmVUaW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFJl
c3VsdHMgYXJlIGFjY3VtdWxhdGVkIHRvIHRoZSBmaXJzdCBhbmltYXRpb24gdGhhdCBhbmltYXRl
cyBhbmQgY29udHJpYnV0ZXMgdG8gYSBwYXJ0aWN1bGFyIGVsZW1lbnQvYXR0cmlidXRlIHBhaXIu
Ci0gICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVQYWlyIGtleSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1
dGVOYW1lKTsgCi0gICAgICAgIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50ID0gcmVzdWx0
c0VsZW1lbnRzLmdldChrZXkpOwotICAgICAgICBpZiAoIXJlc3VsdEVsZW1lbnQpIHsKLSAgICAg
ICAgICAgIGlmICghYW5pbWF0aW9uLT5oYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlc3VsdEVsZW1lbnQgPSBhbmltYXRpb247
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEVsZW1lbnQgIT0gYW5p
bWF0aW9uKTsKLQotICAgICAgICAvLyBUaGlzIHdpbGwgY2FsY3VsYXRlIHRoZSBjb250cmlidXRp
b24gZnJvbSB0aGUgYW5pbWF0aW9uIGFuZCBhZGQgaXQgdG8gdGhlIHJlc3VsdHNFbGVtZW50Lgot
ICAgICAgICBpZiAoYW5pbWF0aW9uLT5wcm9ncmVzcyhlbGFwc2VkLCByZXN1bHRFbGVtZW50LCBz
ZWVrVG9UaW1lKSAmJiByZXN1bHRFbGVtZW50ID09IGFuaW1hdGlvbikKLSAgICAgICAgICAgIHJl
c3VsdHNFbGVtZW50cy5hZGQoa2V5LCByZXN1bHRFbGVtZW50KTsKLQotICAgICAgICBTTUlMVGlt
ZSBuZXh0RmlyZVRpbWUgPSBhbmltYXRpb24tPm5leHRQcm9ncmVzc1RpbWUoKTsKLSAgICAgICAg
aWYgKG5leHRGaXJlVGltZS5pc0Zpbml0ZSgpKQotICAgICAgICAgICAgZWFybGllcnNGaXJlVGlt
ZSA9IG1pbihuZXh0RmlyZVRpbWUsIGVhcmxpZXJzRmlyZVRpbWUpOwotICAgIH0KLQotICAgIHVu
c2lnbmVkIHJlc3VsdHNUb0FwcGx5U2l6ZSA9IHJlc3VsdHNFbGVtZW50cy5zaXplKCk7Ci0gICAg
aWYgKCFyZXN1bHRzVG9BcHBseVNpemUpIHsKLSAgICAgICAgc3RhcnRUaW1lcihlYXJsaWVyc0Zp
cmVUaW1lLCBhbmltYXRpb25GcmFtZURlbGF5KTsKKyAgICAgICAgaWYgKHJlc3VsdEVsZW1lbnQp
CisgICAgICAgICAgICBhbmltYXRpb25zVG9BcHBseS5hcHBlbmQocmVzdWx0RWxlbWVudCk7Cisg
ICAgfQorCisgICAgI2lmbmRlZiBOREVCVUcKKyAgICBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRp
b25zQ2hhbmdlcyA9IGZhbHNlOworICAgICNlbmRpZgorCisgICAgdW5zaWduZWQgYW5pbWF0aW9u
c1RvQXBwbHlTaXplID0gYW5pbWF0aW9uc1RvQXBwbHkuc2l6ZSgpOworICAgIGlmICghYW5pbWF0
aW9uc1RvQXBwbHlTaXplKSB7CisgICAgICAgIHN0YXJ0VGltZXIoZWFybGllc3RGaXJlVGltZSwg
YW5pbWF0aW9uRnJhbWVEZWxheSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBB
cHBseSByZXN1bHRzIHRvIHRhcmdldCBlbGVtZW50cy4KLSAgICBSZXN1bHRFbGVtZW50TWFwOjpp
dGVyYXRvciBlbmQgPSByZXN1bHRzRWxlbWVudHMuZW5kKCk7Ci0gICAgZm9yIChSZXN1bHRFbGVt
ZW50TWFwOjppdGVyYXRvciBpdCA9IHJlc3VsdHNFbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFuaW1hdGlvbnNUb0FwcGx5U2l6ZTsgKytpKQorICAg
ICAgICBhbmltYXRpb25zVG9BcHBseVtpXS0+YXBwbHlSZXN1bHRzVG9UYXJnZXQoKTsKIAotICAg
IHN0YXJ0VGltZXIoZWFybGllcnNGaXJlVGltZSwgYW5pbWF0aW9uRnJhbWVEZWxheSk7CisgICAg
c3RhcnRUaW1lcihlYXJsaWVzdEZpcmVUaW1lLCBhbmltYXRpb25GcmFtZURlbGF5KTsKICAgICBE
b2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1bWVudHMoKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaAkocmV2aXNp
b24gMTI4NDI3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRh
aW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNyArNDYsMTkgQEAgY2xhc3MgU1ZHU1ZHRWxl
bWVudDsKIAogY2xhc3MgU01JTFRpbWVDb250YWluZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlM
VGltZUNvbnRhaW5lcj4gIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTTUlMVGlt
ZUNvbnRhaW5lcj4gY3JlYXRlKFNWR1NWR0VsZW1lbnQqIG93bmVyKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgU01JTFRpbWVDb250YWluZXIob3duZXIpKTsgfSAKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRlKFNWR1NWR0VsZW1lbnQqIG93bmVyKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250YWluZXIob3duZXIpKTsgfQorICAgIH5TTUlMVGlt
ZUNvbnRhaW5lcigpOworCisgICAgdm9pZCBzY2hlZHVsZShTVkdTTUlMRWxlbWVudCosIFNWR0Vs
ZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgdm9pZCB1bnNjaGVkdWxlKFNWR1NN
SUxFbGVtZW50KiwgU1ZHRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2b2lk
IG5vdGlmeUludGVydmFsc0NoYW5nZWQoKTsKIAotICAgIHZvaWQgc2NoZWR1bGUoU1ZHU01JTEVs
ZW1lbnQqKTsKLSAgICB2b2lkIHVuc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKLSAgICAKICAg
ICBTTUlMVGltZSBlbGFwc2VkKCkgY29uc3Q7CiAKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7
CiAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0OwogICAgIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7
Ci0gICAgCisKICAgICB2b2lkIGJlZ2luKCk7CiAgICAgdm9pZCBwYXVzZSgpOwogICAgIHZvaWQg
cmVzdW1lKCk7CkBAIC02NiwxNCArNjgsMTQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFNN
SUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIG93bmVyKTsKLSAgICAKKwogICAgIHZvaWQg
dGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKTsKICAgICB2b2lkIHN0YXJ0VGlt
ZXIoU01JTFRpbWUgZmlyZVRpbWUsIFNNSUxUaW1lIG1pbmltdW1EZWxheSA9IDApOwogICAgIHZv
aWQgdXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkLCBib29sIHNlZWtUb1RpbWUgPSBm
YWxzZSk7CiAgICAgCiAgICAgdm9pZCB1cGRhdGVEb2N1bWVudE9yZGVySW5kZXhlcygpOwogICAg
IHZvaWQgc29ydEJ5UHJpb3JpdHkoVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4mIHNtaWxFbGVtZW50
cywgU01JTFRpbWUgZWxhcHNlZCk7Ci0gICAgCisKICAgICBkb3VibGUgbV9iZWdpblRpbWU7CiAg
ICAgZG91YmxlIG1fcGF1c2VUaW1lOwogICAgIGRvdWJsZSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1l
OwpAQCAtODMsMTAgKzg1LDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgVGltZXI8U01JTFRpbWVD
b250YWluZXI+IG1fdGltZXI7CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiBUaW1pbmdFbGVtZW50U2V0OwotICAgIFRpbWluZ0VsZW1lbnRTZXQgbV9zY2hlZHVsZWRBbmlt
YXRpb25zOwotCisgICAgdHlwZWRlZiBwYWlyPFNWR0VsZW1lbnQqLCBRdWFsaWZpZWROYW1lPiBF
bGVtZW50QXR0cmlidXRlUGFpcjsKKyAgICBIYXNoTWFwPEVsZW1lbnRBdHRyaWJ1dGVQYWlyLCBW
ZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiogPiBtX3NjaGVkdWxlZEFuaW1hdGlvbnM7CiAgICAgU1ZH
U1ZHRWxlbWVudCogbV9vd25lclNWR0VsZW1lbnQ7CisKKyAgICAjaWZuZGVmIE5ERUJVRworICAg
IGJvb2wgbV9wcmV2ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXM7CisgICAgI2VuZGlmCiB9
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcAkocmV2aXNpb24gMTI4NDI3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw4ICsxNDAsOCBA
QCBTVkdTTUlMRWxlbWVudDo6U1ZHU01JTEVsZW1lbnQoY29uc3QgUXVhCiBTVkdTTUlMRWxlbWVu
dDo6flNWR1NNSUxFbGVtZW50KCkKIHsKICAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOwotICAg
IGlmIChtX3RpbWVDb250YWluZXIpCi0gICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVs
ZSh0aGlzKTsKKyAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIG1fdGFyZ2V0RWxlbWVudCAmJiBo
YXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVk
dWxlKHRoaXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKICAgICBpZiAobV90
YXJnZXRFbGVtZW50KQogICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7
CiB9CkBAIC0yMDAsMTQgKzIwMCwxNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IFNWR1NNCiAgICAgLy8gVmVyaWZ5IHdlIGFyZSBub3QgaW4gPHVzZT4gaW5zdGFuY2UgdHJl
ZS4KICAgICBBU1NFUlQoIWlzSW5TaGFkb3dUcmVlKCkpOwogCi0gICAgbV9hdHRyaWJ1dGVOYW1l
ID0gY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVz
OjphdHRyaWJ1dGVOYW1lQXR0cikpOwogICAgIFNWR1NWR0VsZW1lbnQqIG93bmVyID0gb3duZXJT
VkdFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lcikKKyAgICBpZiAoIW93bmVyKSB7CisgICAgICAg
IHNldEF0dHJpYnV0ZU5hbWUoY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0
cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpKTsKICAgICAgICAgcmV0dXJuIElu
c2VydGlvbkRvbmU7CisgICAgfQogICAgIG1fdGltZUNvbnRhaW5lciA9IG93bmVyLT50aW1lQ29u
dGFpbmVyKCk7CiAgICAgQVNTRVJUKG1fdGltZUNvbnRhaW5lcik7CiAgICAgbV90aW1lQ29udGFp
bmVyLT5zZXREb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KCk7CiAKKyAgICBzZXRBdHRyaWJ1dGVO
YW1lKGNvbnN0cnVjdFF1YWxpZmllZE5hbWUodGhpcywgZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1l
czo6YXR0cmlidXRlTmFtZUF0dHIpKSk7CisKICAgICAvLyAiSWYgbm8gYXR0cmlidXRlIGlzIHBy
ZXNlbnQsIHRoZSBkZWZhdWx0IGJlZ2luIHZhbHVlIChhbiBvZmZzZXQtdmFsdWUgb2YgMCkgbXVz
dCBiZSBldmFsdWF0ZWQuIgogICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShTVkdOYW1lczo6YmVn
aW5BdHRyKSkKICAgICAgICAgbV9iZWdpblRpbWVzLmFwcGVuZChTTUlMVGltZVdpdGhPcmlnaW4o
KSk7CkBAIC0yMTUsNyArMjE4LDExIEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgU1ZHU00KICAgICBpZiAobV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsKQogICAgICAgICBy
ZXNvbHZlRmlyc3RJbnRlcnZhbCgpOwogCi0gICAgcmVzY2hlZHVsZSgpOworICAgIC8vIEZvcmNl
IHJlc29sdXRpb24gb2YgdGFyZ2V0IGVsZW1lbnQKKyAgICBpZiAoIW1fdGFyZ2V0RWxlbWVudCkK
KyAgICAgICAgdGFyZ2V0RWxlbWVudCgpOworICAgIGlmIChtX3RpbWVDb250YWluZXIpCisgICAg
ICAgIG1fdGltZUNvbnRhaW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpOwogCiAgICAgcmV0
dXJuIEluc2VydGlvbkRvbmU7CiB9CkBAIC0yMjQsNyArMjMxLDggQEAgdm9pZCBTVkdTTUlMRWxl
bWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbgogewogICAgIGlmIChyb290UGFyZW50LT5pbkRvY3Vt
ZW50KCkpIHsKICAgICAgICAgaWYgKG1fdGltZUNvbnRhaW5lcikgewotICAgICAgICAgICAgbV90
aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMpOworICAgICAgICAgICAgaWYgKG1fdGFyZ2V0
RWxlbWVudCAmJiBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAgICAgICAgICAgICBtX3Rp
bWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50LCBtX2F0dHJpYnV0
ZU5hbWUpOwogICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyID0gMDsKICAgICAgICAgfQogICAg
ICAgICAvLyBDYWxsaW5nIGRpc2Nvbm5lY3RDb25kaXRpb25zKCkgbWF5IGtpbGwgdXMgaWYgdGhl
cmUgYXJlIHN5bmNiYXNlIGNvbmRpdGlvbnMuCkBAIC0yMzQsMTQgKzI0MiwxOSBAQCB2b2lkIFNW
R1NNSUxFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluCiAKICAgICAgICAgLy8gQ2xlYXIgdGFy
Z2V0IG5vdywgYmVjYXVzZSBkaXNjb25uZWN0Q29uZGl0aW9ucyBjYWxscyB0YXJnZXRFbGVtZW50
KCkgd2hpY2ggd2lsbCByZWNyZWF0ZSB0aGUgdGFyZ2V0IGlmIHdlIHJlbW92ZWQgaXQgc29vbmVy
LiAKICAgICAgICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgICAgIHJlc2V0VGFyZ2V0
RWxlbWVudCgpOworICAgICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KGZhbHNlKTsKIAotICAg
ICAgICBtX2F0dHJpYnV0ZU5hbWUgPSBhbnlRTmFtZSgpOworICAgICAgICBzZXRBdHRyaWJ1dGVO
YW1lKGFueVFOYW1lKCkpOwogICAgIH0KIAogICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJv
b3RQYXJlbnQpOwogfQotICAgCisKK2Jvb2wgU1ZHU01JTEVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmli
dXRlTmFtZSgpCit7CisgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWUoKSAhPSBhbnlRTmFtZSgpOwor
fQorCiBTTUlMVGltZSBTVkdTTUlMRWxlbWVudDo6cGFyc2VPZmZzZXRWYWx1ZShjb25zdCBTdHJp
bmcmIGRhdGEpCiB7CiAgICAgYm9vbCBvazsKQEAgLTQ2NSwxMiArNDc4LDEzIEBAIHZvaWQgU1ZH
U01JTEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAgICAgICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmVuZEF0dHIpCiAgICAgICAgICAgICBlbmRMaXN0Q2hhbmdlZChlbGFw
c2VkKCkpOwogICAgICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXR0cmlidXRl
TmFtZUF0dHIpIHsKLSAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZSA9IGNvbnN0cnVjdFF1YWxp
ZmllZE5hbWUodGhpcywgZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0
dHIpKTsKKyAgICAgICAgICAgIHNldEF0dHJpYnV0ZU5hbWUoY29uc3RydWN0UXVhbGlmaWVkTmFt
ZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpKTsK
ICAgICAgICAgICAgIGlmIChtX3RhcmdldEVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICByZXNl
dFRhcmdldEVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUubWF0Y2hlcyhYTGlua05hbWVzOjpocmVmQXR0
cikpIHsKKyAgICAgICAgICAgIC8vIHRhcmdldEVsZW1lbnQgaXMgcmVzb2x2ZWQgbGF6aWx5IGJ1
dCB0YXJnZXRFbGVtZW50KCkgd2lsbCBoYW5kbGUgY2FsbGluZyB0YXJnZXRFbGVtZW50V2lsbENo
YW5nZSgpLgogICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlz
LT50YXJnZXRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQodGFyZ2V0
RWxlbWVudCk7CiAgICAgICAgIH0KQEAgLTU0MywxMCArNTU3LDE2IEBAIHZvaWQgU1ZHU01JTEVs
ZW1lbnQ6OmRpc2Nvbm5lY3RDb25kaXRpb24KICAgICB9CiB9CiAKLXZvaWQgU1ZHU01JTEVsZW1l
bnQ6OnJlc2NoZWR1bGUoKQordm9pZCBTVkdTTUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewotICAgIGlmIChtX3RpbWVDb250
YWluZXIpCi0gICAgICAgIG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUodGhpcyk7CisgICAgaWYg
KG1fdGltZUNvbnRhaW5lciAmJiBtX3RhcmdldEVsZW1lbnQgJiYgbV9hdHRyaWJ1dGVOYW1lICE9
IGF0dHJpYnV0ZU5hbWUpIHsKKyAgICAgICAgaWYgKGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKQor
ICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMsIG1fdGFyZ2V0RWxl
bWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgbV9hdHRyaWJ1dGVOYW1lID0gYXR0cmli
dXRlTmFtZTsKKyAgICAgICAgaWYgKGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKQorICAgICAgICAg
ICAgbV90aW1lQ29udGFpbmVyLT5zY2hlZHVsZSh0aGlzLCBtX3RhcmdldEVsZW1lbnQsIG1fYXR0
cmlidXRlTmFtZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fYXR0cmlidXRlTmFtZSA9IGF0dHJp
YnV0ZU5hbWU7CiB9CiAKIFNWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50
KCkKQEAgLTU2OSw4ICs1ODksMTUgQEAgU1ZHRWxlbWVudCogU1ZHU01JTEVsZW1lbnQ6OnRhcmdl
dEVsZW1lbgogICAgIHJldHVybiBtX3RhcmdldEVsZW1lbnQ7CiB9CiAKLXZvaWQgU1ZHU01JTEVs
ZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQs
IFNWR0VsZW1lbnQqKQordm9pZCBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFu
Z2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZHRWxlbWVudCogbmV3VGFyZ2V0KQogewor
ICAgIGlmIChtX3RpbWVDb250YWluZXIgJiYgaGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkpIHsKKyAg
ICAgICAgaWYgKGN1cnJlbnRUYXJnZXQpCisgICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnVu
c2NoZWR1bGUodGhpcywgY3VycmVudFRhcmdldCwgbV9hdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAg
aWYgKG5ld1RhcmdldCkKKyAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUodGhp
cywgbmV3VGFyZ2V0LCBtX2F0dHJpYnV0ZU5hbWUpOworICAgIH0KKwogICAgIC8vIE9ubHkgY2xl
YXIgdGhlIGFuaW1hdGVkIHR5cGUsIGlmIHdlIGhhZCBhIHRhcmdldCBiZWZvcmUuCiAgICAgaWYg
KGN1cnJlbnRUYXJnZXQpCiAgICAgICAgIGNsZWFyQW5pbWF0ZWRUeXBlKGN1cnJlbnRUYXJnZXQp
OwpAQCAtNTgwLDExICs2MDcsMTYgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVu
dFdpbGxDaAogICAgICAgICBlbmRlZEFjdGl2ZUludGVydmFsKCk7CiB9CiAKLXZvaWQgU1ZHU01J
TEVsZW1lbnQ6OnJlc2V0VGFyZ2V0RWxlbWVudCgpCit2b2lkIFNWR1NNSUxFbGVtZW50OjpyZXNl
dFRhcmdldEVsZW1lbnQoYm9vbCByZXNvbHZlTmV3VGFyZ2V0KQogewogICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQo
dGhpcywgbV90YXJnZXRFbGVtZW50KTsKICAgICB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShtX3Rh
cmdldEVsZW1lbnQsIDApOwogICAgIG1fdGFyZ2V0RWxlbWVudCA9IDA7CisKKyAgICAvLyBGb3Jj
ZSByZXNvbHV0aW9uIG9mIHRhcmdldCBlbGVtZW50CisgICAgaWYgKHJlc29sdmVOZXdUYXJnZXQp
CisgICAgICAgIHRhcmdldEVsZW1lbnQoKTsKKwogICAgIGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5n
ZWQoKTsKIH0KIApAQCAtODIzLDcgKzg1NSw5IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc29s
dmVGaXJzdEludGVydmEKICAgICAgICAgbV9pbnRlcnZhbEVuZCA9IGVuZDsKICAgICAgICAgbm90
aWZ5RGVwZW5kZW50c0ludGVydmFsQ2hhbmdlZCh3YXNVbnJlc29sdmVkID8gTmV3SW50ZXJ2YWwg
OiBFeGlzdGluZ0ludGVydmFsKTsKICAgICAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gbWluKG1f
bmV4dFByb2dyZXNzVGltZSwgbV9pbnRlcnZhbEJlZ2luKTsKLSAgICAgICAgcmVzY2hlZHVsZSgp
OworCisgICAgICAgIGlmIChtX3RpbWVDb250YWluZXIpCisgICAgICAgICAgICBtX3RpbWVDb250
YWluZXItPm5vdGlmeUludGVydmFsc0NoYW5nZWQoKTsKICAgICB9CiB9CiAKQEAgLTg3MSw3ICs5
MDUsOSBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpiZWdpbkxpc3RDaGFuZ2VkKFNNCiAgICAgICAg
IH0KICAgICB9CiAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gZWxhcHNlZCgpOwotICAgIHJlc2No
ZWR1bGUoKTsKKworICAgIGlmIChtX3RpbWVDb250YWluZXIpCisgICAgICAgIG1fdGltZUNvbnRh
aW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpOwogfQogCiB2b2lkIFNWR1NNSUxFbGVtZW50
OjplbmRMaXN0Q2hhbmdlZChTTUlMVGltZSkKQEAgLTg5MCw3ICs5MjYsOSBAQCB2b2lkIFNWR1NN
SUxFbGVtZW50OjplbmRMaXN0Q2hhbmdlZChTTUlMCiAgICAgICAgIH0KICAgICB9CiAgICAgbV9u
ZXh0UHJvZ3Jlc3NUaW1lID0gZWxhcHNlZDsKLSAgICByZXNjaGVkdWxlKCk7CisKKyAgICBpZiAo
bV90aW1lQ29udGFpbmVyKQorICAgICAgICBtX3RpbWVDb250YWluZXItPm5vdGlmeUludGVydmFs
c0NoYW5nZWQoKTsKIH0KIAogdm9pZCBTVkdTTUlMRWxlbWVudDo6Y2hlY2tSZXN0YXJ0KFNNSUxU
aW1lIGVsYXBzZWQpCkBAIC0xMDE4LDEwICsxMDU2LDEwIEBAIGJvb2wgU1ZHU01JTEVsZW1lbnQ6
OnByb2dyZXNzKFNNSUxUaW1lIGUKICAgICBBU1NFUlQocmVzdWx0RWxlbWVudCk7CiAgICAgQVNT
RVJUKG1fdGltZUNvbnRhaW5lcik7CiAgICAgQVNTRVJUKG1faXNXYWl0aW5nRm9yRmlyc3RJbnRl
cnZhbCB8fCBtX2ludGVydmFsQmVnaW4uaXNGaW5pdGUoKSk7Ci0gICAgCisKICAgICBpZiAoIW1f
Y29uZGl0aW9uc0Nvbm5lY3RlZCkKICAgICAgICAgY29ubmVjdENvbmRpdGlvbnMoKTsKLSAgICAK
KwogICAgIGlmICghbV9pbnRlcnZhbEJlZ2luLmlzRmluaXRlKCkpIHsKICAgICAgICAgQVNTRVJU
KG1fYWN0aXZlU3RhdGUgPT0gSW5hY3RpdmUpOwogICAgICAgICBtX25leHRQcm9ncmVzc1RpbWUg
PSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOwpAQCAtMTAzNSw3ICsxMDczLDcgQEAgYm9vbCBTVkdT
TUlMRWxlbWVudDo6cHJvZ3Jlc3MoU01JTFRpbWUgZQogICAgICAgICBtX25leHRQcm9ncmVzc1Rp
bWUgPSBtX2ludGVydmFsQmVnaW47CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
CisKICAgICBtX3ByZXZpb3VzSW50ZXJ2YWxCZWdpbiA9IG1faW50ZXJ2YWxCZWdpbjsKIAogICAg
IGlmIChtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDEyODQyNykKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMTIgKzUxLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
ZEZyb20oQ29udGFpbmVyTm9kZSopIE9WRVJSSURFOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBo
YXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0
cmlidXRlTmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2Vk
KCkgPSAwOwogCiAgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250YWluZXIoKSBjb25zdCB7
IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KIAogICAgIFNWR0VsZW1lbnQqIHRhcmdl
dEVsZW1lbnQoKTsKLSAgICB2b2lkIHJlc2V0VGFyZ2V0RWxlbWVudCgpOworICAgIHZvaWQgcmVz
ZXRUYXJnZXRFbGVtZW50KGJvb2wgcmVzb2x2ZU5ld1RhcmdldCA9IHRydWUpOwogICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZU5hbWU7IH0KIAogICAgIHZvaWQgYmVnaW5CeUxpbmtBY3RpdmF0aW9uKCk7CkBAIC0xMzgsNyAr
MTM5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrUmVzdGFydChTTUlMVGltZSBlbGFwc2Vk
KTsKICAgICB2b2lkIGJlZ2luTGlzdENoYW5nZWQoU01JTFRpbWUgZXZlbnRUaW1lKTsKICAgICB2
b2lkIGVuZExpc3RDaGFuZ2VkKFNNSUxUaW1lIGV2ZW50VGltZSk7Ci0gICAgdm9pZCByZXNjaGVk
dWxlKCk7CisKKyAgICB2b2lkIHNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogCiAgICAgLy8gVGhpcyByZXByZXNlbnRzIGNvbmRpdGlvbnMgb24gZWxlbWVudHMgYmVnaW4g
b3IgZW5kIGxpc3QgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIG9uIHJ1bnRpbWUKICAgICAvLyBm
b3IgZXhhbXBsZSA8YW5pbWF0ZSBiZWdpbj0ib3RoZXJFbGVtZW50LmJlZ2luICsgOHM7IGJ1dHRv
bi5jbGljayIgLi4uIC8+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164305</attachid>
            <date>2012-09-15 21:39:14 -0700</date>
            <delta_ts>2012-09-24 14:42:18 -0700</delta_ts>
            <desc>Update per reviewer comments</desc>
            <filename>96697.3.patch</filename>
            <type>text/plain</type>
            <size>26490</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDEyLTA5LTE1ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU01JTFRpbWVDb250
YWluZXIgdG8gbWFpbnRhaW4gYW5pbWF0aW9uIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgcmVjYWxj
dWxhdGluZyBpdCBldmVyeSBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTY2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTVkdUaW1lQ29udGFpbmVyIGNhbiBiZSBpbXByb3ZlZCBieSBtYWludGFp
bmluZyBleHRyYSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICBhbmltYXRpb25zIGR1cmluZyBz
Y2hlZHVsZS91bnNjaGVkdWxlIGluc3RlYWQgb2YgcmUtY2FsY3VsYXRpbmcgaXQKKyAgICAgICAg
ZXZlcnkgZnJhbWUuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgU01JTFRpbWVDb250YWlu
ZXIgbWFpbnRhaW5zIGEgR3JvdXBlZEFuaW1hdGlvbnNNYXAgaW5zdGVhZCBvZgorICAgICAgICBq
dXN0IGEgVmVjdG9yLiBUaGlzIG1hcCBtYXBzIGEgbGlzdCBvZiBhbmltYXRpb25zIHRvIHRoZSBz
cGVjaWZpYyBFbGVtZW50QXR0cmlidXRlUGFpcgorICAgICAgICB0aGF0IHdpbGwgYmUgYW5pbWF0
ZWQuCisKKyAgICAgICAgT24gc2NoZWR1bGUvdW5zY2hlZHVsZSB3ZSBtb2RpZnkgdGhpcyBtYXAg
aW5zdGVhZCBvZiBjcmVhdGluZyBpdCBpbiB1cGRhdGVBbmltYXRpb25zLgorICAgICAgICBBcyBh
IHJlc3VsdCwgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFsd2F5cyBub3RpZnlpbmcgKG9y
LCByZS1zY2hlZHVsaW5nKSB0aGUKKyAgICAgICAgdGltZSBjb250YWluZXIgd2hlbiBlaXRoZXIg
YW4gYW5pbWF0aW9uJ3MgdGFyZ2V0IGNoYW5nZXMgb3IgYW4gYW5pbWF0aW9uJ3MgYXR0cmlidXRl
TmFtZQorICAgICAgICBjaGFuZ2VzLiBUaGlzIG5vdGlmaWNhdGlvbiBpcyBtYW5hZ2VkIGJ5IHRy
YWNraW5nIGNoYW5nZXMgd2l0aCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZQorICAgICAgICBhbmQg
c2V0QXR0cmlidXRlTmFtZS4KKworICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB1cGRhdGVBbmlt
YXRpb25zIG9ubHkgaXRlcmF0ZXMgb3ZlciBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuCisgICAgICAg
IEZ1cnRoZXJtb3JlLCB0aGUgc29ydGluZyBvZiBhbmltYXRpb25zIGJ5IHByaW9yaXR5IGlzIG5v
dyBkb25lIG92ZXIgZWFjaCBWZWN0b3Igb2YKKyAgICAgICAgU1ZHU01JTEVsZW1lbnRzIGFmZmVj
dGluZyBhIHtTVkdFbGVtZW50KiwgUXVhbGlmaWVkTmFtZX0gcGFpciBpbnN0ZWFkIG9mIG92ZXIg
YWxsIHRoZQorICAgICAgICBTVkdTTUlMRWxlbWVudHMgYXQgb25jZS4KKworICAgICAgICBMYXN0
bHksIGEgZ3VhcmQgKG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzKSBoYXMgYmVl
biBhZGRlZAorICAgICAgICB0byBwcm92ZSB0aGF0IHdlIGRvIG5vdCBtb2RpZnkgdGhlIHNjaGVk
dWxlZCBhbmltYXRpb25zIG1hcCBvdXQKKyAgICAgICAgZnJvbSB1bmRlciBvdXJzZWx2ZXMuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLgorCisg
ICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVFbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUpOgorCisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUpOgorCisgICAgICAgICAgICBQ
ZXIgdGhlIHNwZWMsIEFuaW1hdGVNb3Rpb24gaXMgbm90IGFmZmVjdGVkIGJ5IGF0dHJpYnV0ZU5h
bWUuIEluc3RlYWQKKyAgICAgICAgICAgIG9mIGhhdmluZyBhIHNwZWNpYWwgY2FzZSBmb3IgdGhp
cyBpbiBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucworICAgICAgICAgICAgd2Ug
c2ltcGx5IGltcGxlbWVudCB0aGlzIG1ldGhvZC4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50Lmg6CisgICAgICAgIChTVkdBbmltYXRl
TW90aW9uRWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKToK
KyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OlNNSUxUaW1l
Q29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp+U01JTFRp
bWVDb250YWluZXIpOgorCisgICAgICAgICAgICBUaGlzIG1ldGhvZCBub3cgY2xlYW5zIHVwIHRo
ZSBtYXAgc2luY2Ugd2UgaGF2ZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQKKyAgICAgICAgICAgIFZl
Y3RvcnMgaW4gaXQuCisKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpzY2hl
ZHVsZSk6CisKKyAgICAgICAgICAgIEhlcmUgd2UgYXJlIGp1c3QgYWRkaW5nIGFuIGVudHJ5IHRv
IHRoZSBtYXAuIFRoZXJlIGlzIHNvbWUgc3BlY2lhbCBoYW5kbGluZworICAgICAgICAgICAgZm9y
IGNyZWF0aW5nIHRoZSBWZWN0b3Igb2Ygb25lIGRvZXMgbm90IGV4aXN0LgorCisgICAgICAgIChX
ZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dW5zY2hlZHVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltZUNvbnRhaW5lcjo6bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0RWxhcHNlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltZUNvbnRhaW5lcjo6c3RhcnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlM
VGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZUNvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWlu
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChTTUlMVGltZUNvbnRhaW5lcik6CisgICAgICAgICogc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6flNWR1NNSUxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01J
TEVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQ6OnJlc2V0VGFyZ2V0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6cmVzb2x2ZUZpcnN0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQ6OmJlZ2luTGlzdENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01J
TEVsZW1lbnQ6OmVuZExpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50Ojpwcm9ncmVzcyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
OgorICAgICAgICAoU1ZHU01JTEVsZW1lbnQpOgorCiAyMDEyLTA5LTE1ICBBbmRyZWFzIEtsaW5n
ICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxMjc0MzgpOiBHb29n
bGUgRG9jcyB0byByZW5kZXJzIHRleHQgdG9vIHNtYWxsLgpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjg2OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXQKICAgICBTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwogICAgIGlmICgh
dGFyZ2V0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgcmV0dXJu
IG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRVbmtub3duOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEyODY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpCit7CisgICAgLy8g
QW5pbWF0ZU1vdGlvbiBkb2VzIG5vdCB1c2UgYXR0cmlidXRlTmFtZS4KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBzdXBwb3J0ZWRBdHRyaWJ1dGVzLCAoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2
aXNpb24gMTI4Njk5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgcHJpdmF0ZToKICAgICBTVkdB
bmltYXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCk7CiAKICAgICBib29sIGlzU3VwcG9ydGVkQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgQXR0cmlidXRlJikgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjg2OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2OSw3
ICs1NjksNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJCiB9CiAK
IHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQs
IHVuc2lnbmVkIHJlcGVhdENvdW50LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKLXsg
ICAgCit7CiAgICAgaWYgKCFtX2FuaW1hdGlvblZhbGlkKQogICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwCShyZXZpc2lvbiAxMjg2OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NNSUxUaW1lQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBzdGF0
aWMgY29uc3QgZG91YmxlIGFuaW1hdGlvbkZyYW1lRGVsYXkgPSAwLjAyNTsKIAogU01JTFRpbWVD
b250YWluZXI6OlNNSUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIG93bmVyKSAKQEAgLTQ3
LDI0ICs0Nyw2MyBAQCBTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIoU1ZHCiAg
ICAgLCBtX2RvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoZmFsc2UpCiAgICAgLCBtX3RpbWVyKHRo
aXMsICZTTUlMVGltZUNvbnRhaW5lcjo6dGltZXJGaXJlZCkKICAgICAsIG1fb3duZXJTVkdFbGVt
ZW50KG93bmVyKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fcHJldmVudFNjaGVkdWxlZEFuaW1h
dGlvbnNDaGFuZ2VzKGZhbHNlKQorI2VuZGlmCit7Cit9CisKK1NNSUxUaW1lQ29udGFpbmVyOjp+
U01JTFRpbWVDb250YWluZXIoKQogeworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fcHJl
dmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzKTsKKyNlbmRpZgorICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX3NjaGVkdWxlZEFuaW1hdGlvbnMpOwogfQogCi12b2lkIFNNSUxUaW1lQ29udGFpbmVy
OjpzY2hlZHVsZShTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uKQordm9pZCBTTUlMVGltZUNvbnRh
aW5lcjo6c2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbiwgU1ZHRWxlbWVudCogdGFy
Z2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewogICAgIEFTU0VSVChh
bmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQodGFyZ2V0KTsK
KyAgICBBU1NFUlQoYW5pbWF0aW9uLT5oYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSk7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgQVNTRVJUKCFtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdl
cyk7CisjZW5kaWYKKworICAgIEVsZW1lbnRBdHRyaWJ1dGVQYWlyIGtleSh0YXJnZXQsIGF0dHJp
YnV0ZU5hbWUpOworICAgIEFuaW1hdGlvbnNWZWN0b3IqIHNjaGVkdWxlZCA9IG1fc2NoZWR1bGVk
QW5pbWF0aW9ucy5nZXQoa2V5KTsKKyAgICBpZiAoIXNjaGVkdWxlZCkgeworICAgICAgICBzY2hl
ZHVsZWQgPSBuZXcgQW5pbWF0aW9uc1ZlY3RvcigpOworICAgICAgICBtX3NjaGVkdWxlZEFuaW1h
dGlvbnMuc2V0KGtleSwgc2NoZWR1bGVkKTsKKyAgICB9CisgICAgQVNTRVJUKCFzY2hlZHVsZWQt
PmNvbnRhaW5zKGFuaW1hdGlvbikpOworICAgIHNjaGVkdWxlZC0+YXBwZW5kKGFuaW1hdGlvbik7
CisKICAgICBTTUlMVGltZSBuZXh0RmlyZVRpbWUgPSBhbmltYXRpb24tPm5leHRQcm9ncmVzc1Rp
bWUoKTsKLSAgICBpZiAoIW5leHRGaXJlVGltZS5pc0Zpbml0ZSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zY2hlZHVsZWRBbmltYXRpb25zLmFkZChhbmltYXRpb24pOwotICAgIHN0YXJ0VGlt
ZXIoMCk7CisgICAgaWYgKG5leHRGaXJlVGltZS5pc0Zpbml0ZSgpKQorICAgICAgICBub3RpZnlJ
bnRlcnZhbHNDaGFuZ2VkKCk7CiB9Ci0gICAgCi12b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1bnNj
aGVkdWxlKFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24pCisKK3ZvaWQgU01JTFRpbWVDb250YWlu
ZXI6OnVuc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbiwgU1ZHRWxlbWVudCogdGFy
Z2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewogICAgIEFTU0VSVChh
bmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKIAotICAgIG1fc2NoZWR1bGVkQW5p
bWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFt
X3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdlcyk7CisjZW5kaWYKKworICAgIEVsZW1l
bnRBdHRyaWJ1dGVQYWlyIGtleSh0YXJnZXQsIGF0dHJpYnV0ZU5hbWUpOworICAgIEFuaW1hdGlv
bnNWZWN0b3IqIHNjaGVkdWxlZCA9IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5nZXQoa2V5KTsKKyAg
ICBBU1NFUlQoc2NoZWR1bGVkKTsKKyAgICBzaXplX3QgaWR4ID0gc2NoZWR1bGVkLT5maW5kKGFu
aW1hdGlvbik7CisgICAgQVNTRVJUKGlkeCAhPSBub3RGb3VuZCk7CisgICAgc2NoZWR1bGVkLT5y
ZW1vdmUoaWR4KTsKK30KKwordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6bm90aWZ5SW50ZXJ2YWxz
Q2hhbmdlZCgpCit7CisgICAgc3RhcnRUaW1lcigwKTsKIH0KIAogU01JTFRpbWUgU01JTFRpbWVD
b250YWluZXI6OmVsYXBzZWQoKSBjb25zdApAQCAtNzMsMTIgKzExMiwxMiBAQCBTTUlMVGltZSBT
TUlMVGltZUNvbnRhaW5lcjo6ZWxhcHNlZCgpIGNvCiAgICAgICAgIHJldHVybiAwOwogICAgIHJl
dHVybiBjdXJyZW50VGltZSgpIC0gbV9iZWdpblRpbWUgLSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1l
OwogfQotICAgIAorCiBib29sIFNNSUxUaW1lQ29udGFpbmVyOjppc0FjdGl2ZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fYmVnaW5UaW1lICYmICFpc1BhdXNlZCgpOwogfQotICAgIAorCiBib29s
IFNNSUxUaW1lQ29udGFpbmVyOjppc1BhdXNlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF1
c2VUaW1lOwpAQCAtMTQ0LDEwICsxODMsMTkgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c2V0
RWxhcHNlZChTTUlMVAogICAgIGlmIChtX3BhdXNlVGltZSkKICAgICAgICAgbV9wYXVzZVRpbWUg
PSBub3c7CiAKLSAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiB0b1Jlc2V0OwotICAgIGNvcHlU
b1ZlY3RvcihtX3NjaGVkdWxlZEFuaW1hdGlvbnMsIHRvUmVzZXQpOwotICAgIGZvciAodW5zaWdu
ZWQgbiA9IDA7IG4gPCB0b1Jlc2V0LnNpemUoKTsgKytuKQotICAgICAgICB0b1Jlc2V0W25dLT5y
ZXNldCgpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25z
Q2hhbmdlcyA9IHRydWU7CisjZW5kaWYKKyAgICBHcm91cGVkQW5pbWF0aW9uc01hcDo6aXRlcmF0
b3IgZW5kID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoR3JvdXBlZEFu
aW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBbmltYXRpb25zVmVjdG9yKiBzY2hlZHVsZWQg
PSBpdC0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBzaXplID0gc2NoZWR1bGVkLT5zaXplKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyBuKyspCisgICAgICAgICAg
ICBzY2hlZHVsZWQtPmF0KG4pLT5yZXNldCgpOworICAgIH0KKyNpZm5kZWYgTkRFQlVHCisgICAg
bV9wcmV2ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMgPSBmYWxzZTsKKyNlbmRpZgogCiAg
ICAgdXBkYXRlQW5pbWF0aW9ucyh0aW1lLCB0cnVlKTsKIH0KQEAgLTE1NiwxMCArMjA0LDEwIEBA
IHZvaWQgU01JTFRpbWVDb250YWluZXI6OnN0YXJ0VGltZXIoU01JTFQKIHsKICAgICBpZiAoIW1f
YmVnaW5UaW1lIHx8IGlzUGF1c2VkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlm
ICghZmlyZVRpbWUuaXNGaW5pdGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgU01J
TFRpbWUgZGVsYXkgPSBtYXgoZmlyZVRpbWUgLSBlbGFwc2VkKCksIG1pbmltdW1EZWxheSk7CiAg
ICAgbV90aW1lci5zdGFydE9uZVNob3QoZGVsYXkudmFsdWUoKSk7CiB9CkBAIC0yMDcsNjggKzI1
NSw2NiBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpzb3J0QnlQcmlvcml0eShWCiAKIHZvaWQg
U01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCwgYm9v
bCBzZWVrVG9UaW1lKQogewotICAgIFNNSUxUaW1lIGVhcmxpZXJzRmlyZVRpbWUgPSBTTUlMVGlt
ZTo6dW5yZXNvbHZlZCgpOwotCi0gICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4gdG9BbmltYXRl
OwotICAgIGNvcHlUb1ZlY3RvcihtX3NjaGVkdWxlZEFuaW1hdGlvbnMsIHRvQW5pbWF0ZSk7Cisg
ICAgU01JTFRpbWUgZWFybGllc3RGaXJlVGltZSA9IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CiAK
LSAgICAvLyBTb3J0IGFjY29yZGluZyB0byBwcmlvcml0eS4gRWxlbWVudHMgd2l0aCBsYXRlciBi
ZWdpbiB0aW1lIGhhdmUgaGlnaGVyIHByaW9yaXR5LgotICAgIC8vIEluIGNhc2Ugb2YgYSB0aWUs
IGRvY3VtZW50IG9yZGVyIGRlY2lkZXMuIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNv
IGNvbnNpZGVyIHRpbWluZyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGVsZW1lbnRzLiBEZXBl
bmRlbnRzCi0gICAgLy8gaGF2ZSBoaWdoZXIgcHJpb3JpdHkuCi0gICAgc29ydEJ5UHJpb3JpdHko
dG9BbmltYXRlLCBlbGFwc2VkKTsKLQotICAgIC8vIENhbGN1bGF0ZSBhbmltYXRpb24gY29udHJp
YnV0aW9ucy4KLSAgICB0eXBlZGVmIHBhaXI8U1ZHRWxlbWVudCosIFF1YWxpZmllZE5hbWU+IEVs
ZW1lbnRBdHRyaWJ1dGVQYWlyOwotICAgIHR5cGVkZWYgSGFzaE1hcDxFbGVtZW50QXR0cmlidXRl
UGFpciwgU1ZHU01JTEVsZW1lbnQqPiBSZXN1bHRFbGVtZW50TWFwOwotICAgIFJlc3VsdEVsZW1l
bnRNYXAgcmVzdWx0c0VsZW1lbnRzOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0b0Fu
aW1hdGUuc2l6ZSgpOyArK24pIHsKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbiA9
IHRvQW5pbWF0ZVtuXTsKLSAgICAgICAgQVNTRVJUKGFuaW1hdGlvbi0+dGltZUNvbnRhaW5lcigp
ID09IHRoaXMpOwotCi0gICAgICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhbmltYXRp
b24tPnRhcmdldEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCF0YXJnZXRFbGVtZW50KQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyaWJ1dGVOYW1lID0g
YW5pbWF0aW9uLT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09
IGFueVFOYW1lKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpKQotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUg
PSBTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9wcmV2ZW50U2NoZWR1bGVk
QW5pbWF0aW9uc0NoYW5nZXMgPSB0cnVlOworI2VuZGlmCisKKyAgICBBbmltYXRpb25zVmVjdG9y
IGFuaW1hdGlvbnNUb0FwcGx5OworICAgIEdyb3VwZWRBbmltYXRpb25zTWFwOjppdGVyYXRvciBl
bmQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChHcm91cGVkQW5pbWF0
aW9uc01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIEFuaW1hdGlvbnNWZWN0b3IqIHNjaGVkdWxlZCA9IGl0
LT5zZWNvbmQ7CisKKyAgICAgICAgLy8gU29ydCBhY2NvcmRpbmcgdG8gcHJpb3JpdHkuIEVsZW1l
bnRzIHdpdGggbGF0ZXIgYmVnaW4gdGltZSBoYXZlIGhpZ2hlciBwcmlvcml0eS4KKyAgICAgICAg
Ly8gSW4gY2FzZSBvZiBhIHRpZSwgZG9jdW1lbnQgb3JkZXIgZGVjaWRlcy4gCisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRpbWluZyByZWxhdGlvbnNoaXBzIGJl
dHdlZW4gdGhlIGVsZW1lbnRzLiBEZXBlbmRlbnRzCisgICAgICAgIC8vIGhhdmUgaGlnaGVyIHBy
aW9yaXR5LgorICAgICAgICBzb3J0QnlQcmlvcml0eSgqc2NoZWR1bGVkLCBlbGFwc2VkKTsKKwor
ICAgICAgICBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCA9IDA7CisgICAgICAgIHVuc2ln
bmVkIHNpemUgPSBzY2hlZHVsZWQtPnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IHNpemU7IG4rKykgeworICAgICAgICAgICAgU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlv
biA9IHNjaGVkdWxlZC0+YXQobik7CisgICAgICAgICAgICBBU1NFUlQoYW5pbWF0aW9uLT50aW1l
Q29udGFpbmVyKCkgPT0gdGhpcyk7CisgICAgICAgICAgICBBU1NFUlQoYW5pbWF0aW9uLT50YXJn
ZXRFbGVtZW50KCkpOworICAgICAgICAgICAgQVNTRVJUKGFuaW1hdGlvbi0+aGFzVmFsaWRBdHRy
aWJ1dGVOYW1lKCkpOworCisgICAgICAgICAgICAvLyBSZXN1bHRzIGFyZSBhY2N1bXVsYXRlZCB0
byB0aGUgZmlyc3QgYW5pbWF0aW9uIHRoYXQgYW5pbWF0ZXMgYW5kIGNvbnRyaWJ1dGVzIHRvIGEg
cGFydGljdWxhciBlbGVtZW50L2F0dHJpYnV0ZSBwYWlyLgorICAgICAgICAgICAgaWYgKCFyZXN1
bHRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPmhhc1ZhbGlkQXR0
cmlidXRlVHlwZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICByZXN1bHRFbGVtZW50ID0gYW5pbWF0aW9uOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBUaGlzIHdpbGwgY2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgYW5p
bWF0aW9uIGFuZCBhZGQgaXQgdG8gdGhlIHJlc3VsdHNFbGVtZW50LgorICAgICAgICAgICAgaWYg
KCFhbmltYXRpb24tPnByb2dyZXNzKGVsYXBzZWQsIHJlc3VsdEVsZW1lbnQsIHNlZWtUb1RpbWUp
ICYmIHJlc3VsdEVsZW1lbnQgPT0gYW5pbWF0aW9uKQorICAgICAgICAgICAgICAgIHJlc3VsdEVs
ZW1lbnQgPSAwOworCisgICAgICAgICAgICBTTUlMVGltZSBuZXh0RmlyZVRpbWUgPSBhbmltYXRp
b24tPm5leHRQcm9ncmVzc1RpbWUoKTsKKyAgICAgICAgICAgIGlmIChuZXh0RmlyZVRpbWUuaXNG
aW5pdGUoKSkKKyAgICAgICAgICAgICAgICBlYXJsaWVzdEZpcmVUaW1lID0gbWluKG5leHRGaXJl
VGltZSwgZWFybGllc3RGaXJlVGltZSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBSZXN1bHRz
IGFyZSBhY2N1bXVsYXRlZCB0byB0aGUgZmlyc3QgYW5pbWF0aW9uIHRoYXQgYW5pbWF0ZXMgYW5k
IGNvbnRyaWJ1dGVzIHRvIGEgcGFydGljdWxhciBlbGVtZW50L2F0dHJpYnV0ZSBwYWlyLgotICAg
ICAgICBFbGVtZW50QXR0cmlidXRlUGFpciBrZXkodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFt
ZSk7IAotICAgICAgICBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCA9IHJlc3VsdHNFbGVt
ZW50cy5nZXQoa2V5KTsKLSAgICAgICAgaWYgKCFyZXN1bHRFbGVtZW50KSB7Ci0gICAgICAgICAg
ICBpZiAoIWFuaW1hdGlvbi0+aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHRFbGVtZW50ID0gYW5pbWF0aW9uOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHRFbGVtZW50ICE9IGFuaW1hdGlv
bik7Ci0KLSAgICAgICAgLy8gVGhpcyB3aWxsIGNhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZy
b20gdGhlIGFuaW1hdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSByZXN1bHRzRWxlbWVudC4KLSAgICAg
ICAgaWYgKGFuaW1hdGlvbi0+cHJvZ3Jlc3MoZWxhcHNlZCwgcmVzdWx0RWxlbWVudCwgc2Vla1Rv
VGltZSkgJiYgcmVzdWx0RWxlbWVudCA9PSBhbmltYXRpb24pCi0gICAgICAgICAgICByZXN1bHRz
RWxlbWVudHMuYWRkKGtleSwgcmVzdWx0RWxlbWVudCk7Ci0KLSAgICAgICAgU01JTFRpbWUgbmV4
dEZpcmVUaW1lID0gYW5pbWF0aW9uLT5uZXh0UHJvZ3Jlc3NUaW1lKCk7Ci0gICAgICAgIGlmIChu
ZXh0RmlyZVRpbWUuaXNGaW5pdGUoKSkKLSAgICAgICAgICAgIGVhcmxpZXJzRmlyZVRpbWUgPSBt
aW4obmV4dEZpcmVUaW1lLCBlYXJsaWVyc0ZpcmVUaW1lKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCByZXN1bHRzVG9BcHBseVNpemUgPSByZXN1bHRzRWxlbWVudHMuc2l6ZSgpOwotICAgIGlmICgh
cmVzdWx0c1RvQXBwbHlTaXplKSB7Ci0gICAgICAgIHN0YXJ0VGltZXIoZWFybGllcnNGaXJlVGlt
ZSwgYW5pbWF0aW9uRnJhbWVEZWxheSk7CisgICAgICAgIGlmIChyZXN1bHRFbGVtZW50KQorICAg
ICAgICAgICAgYW5pbWF0aW9uc1RvQXBwbHkuYXBwZW5kKHJlc3VsdEVsZW1lbnQpOworICAgIH0K
KworI2lmbmRlZiBOREVCVUcKKyAgICBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdl
cyA9IGZhbHNlOworI2VuZGlmCisKKyAgICB1bnNpZ25lZCBhbmltYXRpb25zVG9BcHBseVNpemUg
PSBhbmltYXRpb25zVG9BcHBseS5zaXplKCk7CisgICAgaWYgKCFhbmltYXRpb25zVG9BcHBseVNp
emUpIHsKKyAgICAgICAgc3RhcnRUaW1lcihlYXJsaWVzdEZpcmVUaW1lLCBhbmltYXRpb25GcmFt
ZURlbGF5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEFwcGx5IHJlc3VsdHMg
dG8gdGFyZ2V0IGVsZW1lbnRzLgotICAgIFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGVuZCA9
IHJlc3VsdHNFbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJh
dG9yIGl0ID0gcmVzdWx0c0VsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+YXBwbHlSZXN1bHRzVG9UYXJnZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYW5pbWF0aW9uc1RvQXBwbHlTaXplOyArK2kpCisgICAgICAgIGFuaW1hdGlv
bnNUb0FwcGx5W2ldLT5hcHBseVJlc3VsdHNUb1RhcmdldCgpOwogCi0gICAgc3RhcnRUaW1lcihl
YXJsaWVyc0ZpcmVUaW1lLCBhbmltYXRpb25GcmFtZURlbGF5KTsKKyAgICBzdGFydFRpbWVyKGVh
cmxpZXN0RmlyZVRpbWUsIGFuaW1hdGlvbkZyYW1lRGVsYXkpOwogICAgIERvY3VtZW50Ojp1cGRh
dGVTdHlsZUZvckFsbERvY3VtZW50cygpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCShyZXZpc2lvbiAxMjg2OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDE3ICs0NiwxOSBAQCBjbGFzcyBTVkdTVkdFbGVtZW50OwogCiBjbGFz
cyBTTUlMVGltZUNvbnRhaW5lciA6IHB1YmxpYyBSZWZDb3VudGVkPFNNSUxUaW1lQ29udGFpbmVy
PiAgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVyPiBj
cmVhdGUoU1ZHU1ZHRWxlbWVudCogb3duZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTTUlMVGlt
ZUNvbnRhaW5lcihvd25lcikpOyB9IAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNNSUxUaW1lQ29u
dGFpbmVyPiBjcmVhdGUoU1ZHU1ZHRWxlbWVudCogb3duZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTTUlMVGltZUNvbnRhaW5lcihvd25lcikpOyB9CisgICAgflNNSUxUaW1lQ29udGFpbmVyKCk7
CisKKyAgICB2b2lkIHNjaGVkdWxlKFNWR1NNSUxFbGVtZW50KiwgU1ZHRWxlbWVudCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2b2lkIHVuc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqLCBT
VkdFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHZvaWQgbm90aWZ5SW50ZXJ2
YWxzQ2hhbmdlZCgpOwogCi0gICAgdm9pZCBzY2hlZHVsZShTVkdTTUlMRWxlbWVudCopOwotICAg
IHZvaWQgdW5zY2hlZHVsZShTVkdTTUlMRWxlbWVudCopOwotICAgIAogICAgIFNNSUxUaW1lIGVs
YXBzZWQoKSBjb25zdDsKIAogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICBib29sIGlz
UGF1c2VkKCkgY29uc3Q7CiAgICAgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKLSAgICAKKwogICAg
IHZvaWQgYmVnaW4oKTsKICAgICB2b2lkIHBhdXNlKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKQEAg
LTY2LDE0ICs2OCwxNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU01JTFRpbWVDb250YWlu
ZXIoU1ZHU1ZHRWxlbWVudCogb3duZXIpOwotICAgIAorCiAgICAgdm9pZCB0aW1lckZpcmVkKFRp
bWVyPFNNSUxUaW1lQ29udGFpbmVyPiopOwogICAgIHZvaWQgc3RhcnRUaW1lcihTTUlMVGltZSBm
aXJlVGltZSwgU01JTFRpbWUgbWluaW11bURlbGF5ID0gMCk7CiAgICAgdm9pZCB1cGRhdGVBbmlt
YXRpb25zKFNNSUxUaW1lIGVsYXBzZWQsIGJvb2wgc2Vla1RvVGltZSA9IGZhbHNlKTsKICAgICAK
ICAgICB2b2lkIHVwZGF0ZURvY3VtZW50T3JkZXJJbmRleGVzKCk7CiAgICAgdm9pZCBzb3J0QnlQ
cmlvcml0eShWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiYgc21pbEVsZW1lbnRzLCBTTUlMVGltZSBl
bGFwc2VkKTsKLSAgICAKKwogICAgIGRvdWJsZSBtX2JlZ2luVGltZTsKICAgICBkb3VibGUgbV9w
YXVzZVRpbWU7CiAgICAgZG91YmxlIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWU7CkBAIC04MywxMCAr
ODUsMTYgQEAgcHJpdmF0ZToKICAgICAKICAgICBUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4gbV90
aW1lcjsKIAotICAgIHR5cGVkZWYgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+IFRpbWluZ0VsZW1l
bnRTZXQ7Ci0gICAgVGltaW5nRWxlbWVudFNldCBtX3NjaGVkdWxlZEFuaW1hdGlvbnM7CisgICAg
dHlwZWRlZiBwYWlyPFNWR0VsZW1lbnQqLCBRdWFsaWZpZWROYW1lPiBFbGVtZW50QXR0cmlidXRl
UGFpcjsKKyAgICB0eXBlZGVmIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IEFuaW1hdGlvbnNWZWN0
b3I7CisgICAgdHlwZWRlZiBIYXNoTWFwPEVsZW1lbnRBdHRyaWJ1dGVQYWlyLCBBbmltYXRpb25z
VmVjdG9yKiA+IEdyb3VwZWRBbmltYXRpb25zTWFwOworICAgIEdyb3VwZWRBbmltYXRpb25zTWFw
IG1fc2NoZWR1bGVkQW5pbWF0aW9uczsKIAogICAgIFNWR1NWR0VsZW1lbnQqIG1fb3duZXJTVkdF
bGVtZW50OworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgbV9wcmV2ZW50U2NoZWR1bGVkQW5p
bWF0aW9uc0NoYW5nZXM7CisjZW5kaWYKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjg2OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQwLDggKzE0MCw4IEBAIFNWR1NNSUxFbGVtZW50OjpTVkdTTUlMRWxlbWVu
dChjb25zdCBRdWEKIFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQogewogICAgIGRp
c2Nvbm5lY3RDb25kaXRpb25zKCk7Ci0gICAgaWYgKG1fdGltZUNvbnRhaW5lcikKLSAgICAgICAg
bV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMpOworICAgIGlmIChtX3RpbWVDb250YWlu
ZXIgJiYgbV90YXJnZXRFbGVtZW50ICYmIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKQorICAgICAg
ICBtX3RpbWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50LCBtX2F0
dHJpYnV0ZU5hbWUpOwogICAgIGlmIChtX3RhcmdldEVsZW1lbnQpCiAgICAgICAgIGRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJn
ZXQodGhpcywgbV90YXJnZXRFbGVtZW50KTsKIH0KQEAgLTIwMCwxNCArMjAwLDE3IEBAIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU00KICAgICAvLyBWZXJpZnkgd2UgYXJl
IG5vdCBpbiA8dXNlPiBpbnN0YW5jZSB0cmVlLgogICAgIEFTU0VSVCghaXNJblNoYWRvd1RyZWUo
KSk7CiAKLSAgICBtX2F0dHJpYnV0ZU5hbWUgPSBjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKHRoaXMs
IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSk7CiAgICAgU1ZH
U1ZHRWxlbWVudCogb3duZXIgPSBvd25lclNWR0VsZW1lbnQoKTsKLSAgICBpZiAoIW93bmVyKQor
ICAgIGlmICghb3duZXIpIHsKKyAgICAgICAgc2V0QXR0cmlidXRlTmFtZShjb25zdHJ1Y3RRdWFs
aWZpZWROYW1lKHRoaXMsIGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVB
dHRyKSkpOwogICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICB9CiAgICAgbV90aW1l
Q29udGFpbmVyID0gb3duZXItPnRpbWVDb250YWluZXIoKTsKICAgICBBU1NFUlQobV90aW1lQ29u
dGFpbmVyKTsKICAgICBtX3RpbWVDb250YWluZXItPnNldERvY3VtZW50T3JkZXJJbmRleGVzRGly
dHkoKTsKIAorICAgIHNldEF0dHJpYnV0ZU5hbWUoY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlz
LCBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpKTsKKwogICAg
IC8vICJJZiBubyBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgYmVnaW4gdmFsdWUg
KGFuIG9mZnNldC12YWx1ZSBvZiAwKSBtdXN0IGJlIGV2YWx1YXRlZC4iCiAgICAgaWYgKCFmYXN0
SGFzQXR0cmlidXRlKFNWR05hbWVzOjpiZWdpbkF0dHIpKQogICAgICAgICBtX2JlZ2luVGltZXMu
YXBwZW5kKFNNSUxUaW1lV2l0aE9yaWdpbigpKTsKQEAgLTIxNSw3ICsyMTgsMTEgQEAgTm9kZTo6
SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTTQogICAgIGlmIChtX2lzV2FpdGluZ0Zv
ckZpcnN0SW50ZXJ2YWwpCiAgICAgICAgIHJlc29sdmVGaXJzdEludGVydmFsKCk7CiAKLSAgICBy
ZXNjaGVkdWxlKCk7CisgICAgLy8gRm9yY2UgcmVzb2x1dGlvbiBvZiB0YXJnZXQgZWxlbWVudAor
ICAgIGlmICghbV90YXJnZXRFbGVtZW50KQorICAgICAgICB0YXJnZXRFbGVtZW50KCk7CisgICAg
aWYgKG1fdGltZUNvbnRhaW5lcikKKyAgICAgICAgbV90aW1lQ29udGFpbmVyLT5ub3RpZnlJbnRl
cnZhbHNDaGFuZ2VkKCk7CiAKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KQEAgLTIyNCw3
ICsyMzEsOCBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluCiB7CiAg
ICAgaWYgKHJvb3RQYXJlbnQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICBpZiAobV90aW1lQ29u
dGFpbmVyKSB7Ci0gICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcyk7
CisgICAgICAgICAgICBpZiAobV90YXJnZXRFbGVtZW50ICYmIGhhc1ZhbGlkQXR0cmlidXRlTmFt
ZSgpKQorICAgICAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzLCBt
X3RhcmdldEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICBtX3RpbWVDb250
YWluZXIgPSAwOwogICAgICAgICB9CiAgICAgICAgIC8vIENhbGxpbmcgZGlzY29ubmVjdENvbmRp
dGlvbnMoKSBtYXkga2lsbCB1cyBpZiB0aGVyZSBhcmUgc3luY2Jhc2UgY29uZGl0aW9ucy4KQEAg
LTIzNCwxNCArMjQyLDE5IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRh
aW4KIAogICAgICAgICAvLyBDbGVhciB0YXJnZXQgbm93LCBiZWNhdXNlIGRpc2Nvbm5lY3RDb25k
aXRpb25zIGNhbGxzIHRhcmdldEVsZW1lbnQoKSB3aGljaCB3aWxsIHJlY3JlYXRlIHRoZSB0YXJn
ZXQgaWYgd2UgcmVtb3ZlZCBpdCBzb29uZXIuIAogICAgICAgICBpZiAobV90YXJnZXRFbGVtZW50
KQotICAgICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KCk7CisgICAgICAgICAgICByZXNldFRh
cmdldEVsZW1lbnQoZmFsc2UpOwogCi0gICAgICAgIG1fYXR0cmlidXRlTmFtZSA9IGFueVFOYW1l
KCk7CisgICAgICAgIHNldEF0dHJpYnV0ZU5hbWUoYW55UU5hbWUoKSk7CiAgICAgfQogCiAgICAg
U1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CiB9Ci0gICAKKworYm9vbCBTVkdT
TUlMRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkKK3sKKyAgICByZXR1cm4gYXR0cmli
dXRlTmFtZSgpICE9IGFueVFOYW1lKCk7Cit9CisKIFNNSUxUaW1lIFNWR1NNSUxFbGVtZW50Ojpw
YXJzZU9mZnNldFZhbHVlKGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICBib29sIG9rOwpAQCAt
NDY1LDEyICs0NzgsMTMgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZAogICAgICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZW5kQXR0cikKICAgICAg
ICAgICAgIGVuZExpc3RDaGFuZ2VkKGVsYXBzZWQoKSk7CiAgICAgICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikgewotICAgICAgICAgICAgbV9hdHRy
aWJ1dGVOYW1lID0gY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRl
KFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpOworICAgICAgICAgICAgc2V0QXR0cmlidXRl
TmFtZShjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKHRoaXMsIGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSkpOwogICAgICAgICAgICAgaWYgKG1fdGFyZ2V0RWxlbWVu
dCkgewogICAgICAgICAgICAgICAgIHJlc2V0VGFyZ2V0RWxlbWVudCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChhdHRyTmFtZS5t
YXRjaGVzKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSkgeworICAgICAgICAgICAgLy8gdGFyZ2V0RWxl
bWVudCBpcyByZXNvbHZlZCBsYXppbHkgYnV0IHRhcmdldEVsZW1lbnQoKSB3aWxsIGhhbmRsZSBj
YWxsaW5nIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKCkuCiAgICAgICAgICAgICBpZiAoU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKSkKICAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEFuaW1hdGlv
bkVsZW1lbnRzRnJvbVRhcmdldCh0YXJnZXRFbGVtZW50KTsKICAgICAgICAgfQpAQCAtNTQzLDEw
ICs1NTcsMTYgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbgogICAg
IH0KIH0KIAotdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzY2hlZHVsZSgpCit2b2lkIFNWR1NNSUxF
bGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpCiB7Ci0gICAgaWYgKG1fdGltZUNvbnRhaW5lcikKLSAgICAgICAgbV90aW1lQ29udGFpbmVy
LT5zY2hlZHVsZSh0aGlzKTsKKyAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIG1fdGFyZ2V0RWxl
bWVudCAmJiBtX2F0dHJpYnV0ZU5hbWUgIT0gYXR0cmlidXRlTmFtZSkgeworICAgICAgICBpZiAo
aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkpCisgICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnVu
c2NoZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUpOworICAgICAg
ICBtX2F0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lOworICAgICAgICBpZiAoaGFzVmFsaWRB
dHRyaWJ1dGVOYW1lKCkpCisgICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRo
aXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9hdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZTsKIH0KIAogU1ZHRWxlbWVudCogU1ZH
U01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnQoKQpAQCAtNTY5LDggKzU4OSwxNSBAQCBTVkdFbGVt
ZW50KiBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVuCiAgICAgcmV0dXJuIG1fdGFyZ2V0RWxl
bWVudDsKIH0KIAotdm9pZCBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2Uo
U1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZHRWxlbWVudCopCit2b2lkIFNWR1NNSUxFbGVt
ZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBT
VkdFbGVtZW50KiBuZXdUYXJnZXQpCiB7CisgICAgaWYgKG1fdGltZUNvbnRhaW5lciAmJiBoYXNW
YWxpZEF0dHJpYnV0ZU5hbWUoKSkgeworICAgICAgICBpZiAoY3VycmVudFRhcmdldCkKKyAgICAg
ICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzLCBjdXJyZW50VGFyZ2V0LCBt
X2F0dHJpYnV0ZU5hbWUpOworICAgICAgICBpZiAobmV3VGFyZ2V0KQorICAgICAgICAgICAgbV90
aW1lQ29udGFpbmVyLT5zY2hlZHVsZSh0aGlzLCBuZXdUYXJnZXQsIG1fYXR0cmlidXRlTmFtZSk7
CisgICAgfQorCiAgICAgLy8gT25seSBjbGVhciB0aGUgYW5pbWF0ZWQgdHlwZSwgaWYgd2UgaGFk
IGEgdGFyZ2V0IGJlZm9yZS4KICAgICBpZiAoY3VycmVudFRhcmdldCkKICAgICAgICAgY2xlYXJB
bmltYXRlZFR5cGUoY3VycmVudFRhcmdldCk7CkBAIC01ODAsMTEgKzYwNywxNiBAQCB2b2lkIFNW
R1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoCiAgICAgICAgIGVuZGVkQWN0aXZlSW50
ZXJ2YWwoKTsKIH0KIAotdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzZXRUYXJnZXRFbGVtZW50KCkK
K3ZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2V0VGFyZ2V0RWxlbWVudChib29sIHJlc29sdmVOZXdU
YXJnZXQpCiB7CiAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVB
bmltYXRpb25FbGVtZW50RnJvbVRhcmdldCh0aGlzLCBtX3RhcmdldEVsZW1lbnQpOwogICAgIHRh
cmdldEVsZW1lbnRXaWxsQ2hhbmdlKG1fdGFyZ2V0RWxlbWVudCwgMCk7CiAgICAgbV90YXJnZXRF
bGVtZW50ID0gMDsKKworICAgIC8vIEZvcmNlIHJlc29sdXRpb24gb2YgdGFyZ2V0IGVsZW1lbnQK
KyAgICBpZiAocmVzb2x2ZU5ld1RhcmdldCkKKyAgICAgICAgdGFyZ2V0RWxlbWVudCgpOworCiAg
ICAgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdlZCgpOwogfQogCkBAIC04MjMsNyArODU1LDkgQEAg
dm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzb2x2ZUZpcnN0SW50ZXJ2YQogICAgICAgICBtX2ludGVy
dmFsRW5kID0gZW5kOwogICAgICAgICBub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKHdh
c1VucmVzb2x2ZWQgPyBOZXdJbnRlcnZhbCA6IEV4aXN0aW5nSW50ZXJ2YWwpOwogICAgICAgICBt
X25leHRQcm9ncmVzc1RpbWUgPSBtaW4obV9uZXh0UHJvZ3Jlc3NUaW1lLCBtX2ludGVydmFsQmVn
aW4pOwotICAgICAgICByZXNjaGVkdWxlKCk7CisKKyAgICAgICAgaWYgKG1fdGltZUNvbnRhaW5l
cikKKyAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgp
OwogICAgIH0KIH0KIApAQCAtODcxLDcgKzkwNSw5IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmJl
Z2luTGlzdENoYW5nZWQoU00KICAgICAgICAgfQogICAgIH0KICAgICBtX25leHRQcm9ncmVzc1Rp
bWUgPSBlbGFwc2VkKCk7Ci0gICAgcmVzY2hlZHVsZSgpOworCisgICAgaWYgKG1fdGltZUNvbnRh
aW5lcikKKyAgICAgICAgbV90aW1lQ29udGFpbmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCk7
CiB9CiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmVuZExpc3RDaGFuZ2VkKFNNSUxUaW1lKQpAQCAt
ODkwLDcgKzkyNiw5IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmVuZExpc3RDaGFuZ2VkKFNNSUwK
ICAgICAgICAgfQogICAgIH0KICAgICBtX25leHRQcm9ncmVzc1RpbWUgPSBlbGFwc2VkOwotICAg
IHJlc2NoZWR1bGUoKTsKKworICAgIGlmIChtX3RpbWVDb250YWluZXIpCisgICAgICAgIG1fdGlt
ZUNvbnRhaW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpOwogfQogCiB2b2lkIFNWR1NNSUxF
bGVtZW50OjpjaGVja1Jlc3RhcnQoU01JTFRpbWUgZWxhcHNlZCkKQEAgLTEwMTgsMTAgKzEwNTYs
MTAgQEAgYm9vbCBTVkdTTUlMRWxlbWVudDo6cHJvZ3Jlc3MoU01JTFRpbWUgZQogICAgIEFTU0VS
VChyZXN1bHRFbGVtZW50KTsKICAgICBBU1NFUlQobV90aW1lQ29udGFpbmVyKTsKICAgICBBU1NF
UlQobV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsIHx8IG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0
ZSgpKTsKLSAgICAKKwogICAgIGlmICghbV9jb25kaXRpb25zQ29ubmVjdGVkKQogICAgICAgICBj
b25uZWN0Q29uZGl0aW9ucygpOwotICAgIAorCiAgICAgaWYgKCFtX2ludGVydmFsQmVnaW4uaXNG
aW5pdGUoKSkgewogICAgICAgICBBU1NFUlQobV9hY3RpdmVTdGF0ZSA9PSBJbmFjdGl2ZSk7CiAg
ICAgICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CkBAIC0x
MDM1LDcgKzEwNzMsNyBAQCBib29sIFNWR1NNSUxFbGVtZW50Ojpwcm9ncmVzcyhTTUlMVGltZSBl
CiAgICAgICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IG1faW50ZXJ2YWxCZWdpbjsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIG1fcHJldmlvdXNJbnRlcnZhbEJlZ2lu
ID0gbV9pbnRlcnZhbEJlZ2luOwogCiAgICAgaWYgKG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZh
bCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuaAkocmV2aXNpb24gMTI4Njk5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
VkdTTUlMRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMTMgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlKikgT1ZFUlJJREU7
CiAgICAgCiAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCk7CiAgICAgdmlydHVhbCB2b2lk
IGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5nZWQoKSA9IDA7CiAKICAgICBTTUlMVGltZUNvbnRhaW5l
ciogdGltZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRhaW5lci5nZXQoKTsg
fQogCiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpOwotICAgIHZvaWQgcmVzZXRUYXJn
ZXRFbGVtZW50KCk7CisgICAgdm9pZCByZXNldFRhcmdldEVsZW1lbnQoYm9vbCByZXNvbHZlTmV3
VGFyZ2V0ID0gdHJ1ZSk7CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZTsgfQogCiAgICAgdm9pZCBiZWdpbkJ5TGlu
a0FjdGl2YXRpb24oKTsKQEAgLTEzOCw3ICsxMzksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2hl
Y2tSZXN0YXJ0KFNNSUxUaW1lIGVsYXBzZWQpOwogICAgIHZvaWQgYmVnaW5MaXN0Q2hhbmdlZChT
TUlMVGltZSBldmVudFRpbWUpOwogICAgIHZvaWQgZW5kTGlzdENoYW5nZWQoU01JTFRpbWUgZXZl
bnRUaW1lKTsKLSAgICB2b2lkIHJlc2NoZWR1bGUoKTsKKworICAgIHZvaWQgc2V0QXR0cmlidXRl
TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKICAgICAvLyBUaGlzIHJlcHJlc2VudHMgY29u
ZGl0aW9ucyBvbiBlbGVtZW50cyBiZWdpbiBvciBlbmQgbGlzdCB0aGF0IG5lZWQgdG8gYmUgcmVz
b2x2ZWQgb24gcnVudGltZQogICAgIC8vIGZvciBleGFtcGxlIDxhbmltYXRlIGJlZ2luPSJvdGhl
ckVsZW1lbnQuYmVnaW4gKyA4czsgYnV0dG9uLmNsaWNrIiAuLi4gLz4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165406</attachid>
            <date>2012-09-24 10:21:52 -0700</date>
            <delta_ts>2012-09-24 14:44:35 -0700</delta_ts>
            <desc>Address reviewer comments</desc>
            <filename>96697.3.patch</filename>
            <type>text/plain</type>
            <size>26212</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyOTMyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDEyLTA5LTIzICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU01JTFRpbWVDb250
YWluZXIgdG8gbWFpbnRhaW4gYW5pbWF0aW9uIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgcmVjYWxj
dWxhdGluZyBpdCBldmVyeSBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTY2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTVkdUaW1lQ29udGFpbmVyIGNhbiBiZSBpbXByb3ZlZCBieSBtYWludGFp
bmluZyBleHRyYSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICBhbmltYXRpb25zIGR1cmluZyBz
Y2hlZHVsZS91bnNjaGVkdWxlIGluc3RlYWQgb2YgcmUtY2FsY3VsYXRpbmcgaXQKKyAgICAgICAg
ZXZlcnkgZnJhbWUuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgU01JTFRpbWVDb250YWlu
ZXIgbWFpbnRhaW5zIGEgR3JvdXBlZEFuaW1hdGlvbnNNYXAgaW5zdGVhZCBvZgorICAgICAgICBq
dXN0IGEgVmVjdG9yLiBUaGlzIG1hcCBtYXBzIGEgbGlzdCBvZiBhbmltYXRpb25zIHRvIHRoZSBz
cGVjaWZpYyBFbGVtZW50QXR0cmlidXRlUGFpcgorICAgICAgICB0aGF0IHdpbGwgYmUgYW5pbWF0
ZWQuCisKKyAgICAgICAgT24gc2NoZWR1bGUvdW5zY2hlZHVsZSB3ZSBtb2RpZnkgdGhpcyBtYXAg
aW5zdGVhZCBvZiBjcmVhdGluZyBpdCBpbiB1cGRhdGVBbmltYXRpb25zLgorICAgICAgICBBcyBh
IHJlc3VsdCwgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFsd2F5cyBub3RpZnlpbmcgKG9y
LCByZS1zY2hlZHVsaW5nKSB0aGUKKyAgICAgICAgdGltZSBjb250YWluZXIgd2hlbiBlaXRoZXIg
YW4gYW5pbWF0aW9uJ3MgdGFyZ2V0IGNoYW5nZXMgb3IgYW4gYW5pbWF0aW9uJ3MgYXR0cmlidXRl
TmFtZQorICAgICAgICBjaGFuZ2VzLiBUaGlzIG5vdGlmaWNhdGlvbiBpcyBtYW5hZ2VkIGJ5IHRy
YWNraW5nIGNoYW5nZXMgd2l0aCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZQorICAgICAgICBhbmQg
c2V0QXR0cmlidXRlTmFtZS4KKworICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB1cGRhdGVBbmlt
YXRpb25zIG9ubHkgaXRlcmF0ZXMgb3ZlciBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuCisgICAgICAg
IEZ1cnRoZXJtb3JlLCB0aGUgc29ydGluZyBvZiBhbmltYXRpb25zIGJ5IHByaW9yaXR5IGlzIG5v
dyBkb25lIG92ZXIgZWFjaCBWZWN0b3Igb2YKKyAgICAgICAgU1ZHU01JTEVsZW1lbnRzIGFmZmVj
dGluZyBhIHtTVkdFbGVtZW50KiwgUXVhbGlmaWVkTmFtZX0gcGFpciBpbnN0ZWFkIG9mIG92ZXIg
YWxsIHRoZQorICAgICAgICBTVkdTTUlMRWxlbWVudHMgYXQgb25jZS4KKworICAgICAgICBMYXN0
bHksIGEgZ3VhcmQgKG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzKSBoYXMgYmVl
biBhZGRlZAorICAgICAgICB0byBwcm92ZSB0aGF0IHdlIGRvIG5vdCBtb2RpZnkgdGhlIHNjaGVk
dWxlZCBhbmltYXRpb25zIG1hcCBvdXQKKyAgICAgICAgZnJvbSB1bmRlciBvdXJzZWx2ZXMuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLgorCisg
ICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVFbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUpOgorCisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUpOgorCisgICAgICAgICAgICBQ
ZXIgdGhlIHNwZWMsIEFuaW1hdGVNb3Rpb24gaXMgbm90IGFmZmVjdGVkIGJ5IGF0dHJpYnV0ZU5h
bWUuIEluc3RlYWQKKyAgICAgICAgICAgIG9mIGhhdmluZyBhIHNwZWNpYWwgY2FzZSBmb3IgdGhp
cyBpbiBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucworICAgICAgICAgICAgd2Ug
c2ltcGx5IGltcGxlbWVudCB0aGlzIG1ldGhvZC4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50Lmg6CisgICAgICAgIChTVkdBbmltYXRl
TW90aW9uRWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKToK
KyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OlNNSUxUaW1l
Q29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp+U01JTFRp
bWVDb250YWluZXIpOgorCisgICAgICAgICAgICBUaGlzIG1ldGhvZCBub3cgY2xlYW5zIHVwIHRo
ZSBtYXAgc2luY2Ugd2UgaGF2ZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQKKyAgICAgICAgICAgIFZl
Y3RvcnMgaW4gaXQuCisKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpzY2hl
ZHVsZSk6CisKKyAgICAgICAgICAgIEhlcmUgd2UgYXJlIGp1c3QgYWRkaW5nIGFuIGVudHJ5IHRv
IHRoZSBtYXAuIFRoZXJlIGlzIHNvbWUgc3BlY2lhbCBoYW5kbGluZworICAgICAgICAgICAgZm9y
IGNyZWF0aW5nIHRoZSBWZWN0b3Igb2Ygb25lIGRvZXMgbm90IGV4aXN0LgorCisgICAgICAgIChX
ZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dW5zY2hlZHVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltZUNvbnRhaW5lcjo6bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0RWxhcHNlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTTUlMVGltZUNvbnRhaW5lcjo6c3RhcnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlM
VGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZUNvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWlu
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChTTUlMVGltZUNvbnRhaW5lcik6CisgICAgICAgICogc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6flNWR1NNSUxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01J
TEVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQ6OnJlc2V0VGFyZ2V0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6cmVzb2x2ZUZpcnN0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQ6OmJlZ2luTGlzdENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01J
TEVsZW1lbnQ6OmVuZExpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50Ojpwcm9ncmVzcyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
OgorICAgICAgICAoU1ZHU01JTEVsZW1lbnQpOgorCiAyMDEyLTA5LTIzICBCeXVuZ3dvbyBMZWUg
IDxidzgwLmxlZUBnbWFpbC5jb20+CiAKICAgICAgICAgRml4IGJ1aWxkIHdhcm5pbmdzIDogLVd1
bnVzZWQtcGFyYW1ldGVyLCAtV3BhcmVudGhlc2VzLCAtV3VuaW5pdGlhbGl6ZWQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEyOTMyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpCit7CisgICAgLy8g
QW5pbWF0ZU1vdGlvbiBkb2VzIG5vdCB1c2UgYXR0cmlidXRlTmFtZSBzbyBpdCBpcyBhbHdheXMg
dmFsaWQuCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxRdWFsaWZpZWROYW1lPiwgc3VwcG9y
dGVkQXR0cmlidXRlcywgKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDEyOTMyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBAIHByaXZhdGU6CiAgICAgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVU
eXBlKCk7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpOwogCiAgICAg
Ym9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYpIE9WRVJSSURFOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5l
ci5jcHAJKHJldmlzaW9uIDEyOTMyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIHN0YXRp
YyBjb25zdCBkb3VibGUgYW5pbWF0aW9uRnJhbWVEZWxheSA9IDAuMDI1OwogCiBTTUlMVGltZUNv
bnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCogb3duZXIpIApAQCAtNDcs
MjQgKzQ3LDYzIEBAIFNNSUxUaW1lQ29udGFpbmVyOjpTTUlMVGltZUNvbnRhaW5lcihTVkcKICAg
ICAsIG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eShmYWxzZSkKICAgICAsIG1fdGltZXIodGhp
cywgJlNNSUxUaW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKQogICAgICwgbV9vd25lclNWR0VsZW1l
bnQob3duZXIpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9wcmV2ZW50U2NoZWR1bGVkQW5pbWF0
aW9uc0NoYW5nZXMoZmFsc2UpCisjZW5kaWYKK3sKK30KKworU01JTFRpbWVDb250YWluZXI6On5T
TUlMVGltZUNvbnRhaW5lcigpCiB7CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVCghbV9wcmV2
ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMpOworI2VuZGlmCisgICAgZGVsZXRlQWxsVmFs
dWVzKG1fc2NoZWR1bGVkQW5pbWF0aW9ucyk7CiB9CiAKLXZvaWQgU01JTFRpbWVDb250YWluZXI6
OnNjaGVkdWxlKFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24pCit2b2lkIFNNSUxUaW1lQ29udGFp
bmVyOjpzY2hlZHVsZShTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uLCBTVkdFbGVtZW50KiB0YXJn
ZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgQVNTRVJUKGFu
aW1hdGlvbi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOworICAgIEFTU0VSVCh0YXJnZXQpOwor
ICAgIEFTU0VSVChhbmltYXRpb24tPmhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKTsKKworI2lmbmRl
ZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2Vz
KTsKKyNlbmRpZgorCisgICAgRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdldCwgYXR0cmli
dXRlTmFtZSk7CisgICAgQW5pbWF0aW9uc1ZlY3Rvciogc2NoZWR1bGVkID0gbV9zY2hlZHVsZWRB
bmltYXRpb25zLmdldChrZXkpOworICAgIGlmICghc2NoZWR1bGVkKSB7CisgICAgICAgIHNjaGVk
dWxlZCA9IG5ldyBBbmltYXRpb25zVmVjdG9yKCk7CisgICAgICAgIG1fc2NoZWR1bGVkQW5pbWF0
aW9ucy5zZXQoa2V5LCBzY2hlZHVsZWQpOworICAgIH0KKyAgICBBU1NFUlQoIXNjaGVkdWxlZC0+
Y29udGFpbnMoYW5pbWF0aW9uKSk7CisgICAgc2NoZWR1bGVkLT5hcHBlbmQoYW5pbWF0aW9uKTsK
KwogICAgIFNNSUxUaW1lIG5leHRGaXJlVGltZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNzVGlt
ZSgpOwotICAgIGlmICghbmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuYWRkKGFuaW1hdGlvbik7Ci0gICAgc3RhcnRUaW1l
cigwKTsKKyAgICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCisgICAgICAgIG5vdGlmeUlu
dGVydmFsc0NoYW5nZWQoKTsKIH0KLSAgICAKLXZvaWQgU01JTFRpbWVDb250YWluZXI6OnVuc2No
ZWR1bGUoU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbikKKwordm9pZCBTTUlMVGltZUNvbnRhaW5l
cjo6dW5zY2hlZHVsZShTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uLCBTVkdFbGVtZW50KiB0YXJn
ZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgQVNTRVJUKGFu
aW1hdGlvbi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOwogCi0gICAgbV9zY2hlZHVsZWRBbmlt
YXRpb25zLnJlbW92ZShhbmltYXRpb24pOworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1f
cHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzKTsKKyNlbmRpZgorCisgICAgRWxlbWVu
dEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdldCwgYXR0cmlidXRlTmFtZSk7CisgICAgQW5pbWF0aW9u
c1ZlY3Rvciogc2NoZWR1bGVkID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmdldChrZXkpOworICAg
IEFTU0VSVChzY2hlZHVsZWQpOworICAgIHNpemVfdCBpZHggPSBzY2hlZHVsZWQtPmZpbmQoYW5p
bWF0aW9uKTsKKyAgICBBU1NFUlQoaWR4ICE9IG5vdEZvdW5kKTsKKyAgICBzY2hlZHVsZWQtPnJl
bW92ZShpZHgpOworfQorCit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpub3RpZnlJbnRlcnZhbHND
aGFuZ2VkKCkKK3sKKyAgICBzdGFydFRpbWVyKDApOwogfQogCiBTTUlMVGltZSBTTUlMVGltZUNv
bnRhaW5lcjo6ZWxhcHNlZCgpIGNvbnN0CkBAIC03MywxMiArMTEyLDEyIEBAIFNNSUxUaW1lIFNN
SUxUaW1lQ29udGFpbmVyOjplbGFwc2VkKCkgY28KICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0
dXJuIGN1cnJlbnRUaW1lKCkgLSBtX2JlZ2luVGltZSAtIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWU7
CiB9Ci0gICAgCisKIGJvb2wgU01JTFRpbWVDb250YWluZXI6OmlzQWN0aXZlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9iZWdpblRpbWUgJiYgIWlzUGF1c2VkKCk7CiB9Ci0gICAgCisKIGJvb2wg
U01JTFRpbWVDb250YWluZXI6OmlzUGF1c2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYXVz
ZVRpbWU7CkBAIC0xNDQsMTAgKzE4MywxOSBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpzZXRF
bGFwc2VkKFNNSUxUCiAgICAgaWYgKG1fcGF1c2VUaW1lKQogICAgICAgICBtX3BhdXNlVGltZSA9
IG5vdzsKIAotICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IHRvUmVzZXQ7Ci0gICAgY29weVRv
VmVjdG9yKG1fc2NoZWR1bGVkQW5pbWF0aW9ucywgdG9SZXNldCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBuID0gMDsgbiA8IHRvUmVzZXQuc2l6ZSgpOyArK24pCi0gICAgICAgIHRvUmVzZXRbbl0tPnJl
c2V0KCk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnND
aGFuZ2VzID0gdHJ1ZTsKKyNlbmRpZgorICAgIEdyb3VwZWRBbmltYXRpb25zTWFwOjppdGVyYXRv
ciBlbmQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChHcm91cGVkQW5p
bWF0aW9uc01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEFuaW1hdGlvbnNWZWN0b3IqIHNjaGVkdWxlZCA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBzY2hlZHVsZWQtPnNpemUoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7IG4rKykKKyAgICAgICAgICAg
IHNjaGVkdWxlZC0+YXQobiktPnJlc2V0KCk7CisgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICBt
X3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hhbmdlcyA9IGZhbHNlOworI2VuZGlmCiAKICAg
ICB1cGRhdGVBbmltYXRpb25zKHRpbWUsIHRydWUpOwogfQpAQCAtMTU2LDEwICsyMDQsMTAgQEAg
dm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c3RhcnRUaW1lcihTTUlMVAogewogICAgIGlmICghbV9i
ZWdpblRpbWUgfHwgaXNQYXVzZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYg
KCFmaXJlVGltZS5pc0Zpbml0ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBTTUlM
VGltZSBkZWxheSA9IG1heChmaXJlVGltZSAtIGVsYXBzZWQoKSwgbWluaW11bURlbGF5KTsKICAg
ICBtX3RpbWVyLnN0YXJ0T25lU2hvdChkZWxheS52YWx1ZSgpKTsKIH0KQEAgLTIwNyw2OCArMjU1
LDczIEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnNvcnRCeVByaW9yaXR5KFYKIAogdm9pZCBT
TUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFwc2VkLCBib29s
IHNlZWtUb1RpbWUpCiB7Ci0gICAgU01JTFRpbWUgZWFybGllcnNGaXJlVGltZSA9IFNNSUxUaW1l
Ojp1bnJlc29sdmVkKCk7Ci0KLSAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiB0b0FuaW1hdGU7
Ci0gICAgY29weVRvVmVjdG9yKG1fc2NoZWR1bGVkQW5pbWF0aW9ucywgdG9BbmltYXRlKTsKKyAg
ICBTTUlMVGltZSBlYXJsaWVzdEZpcmVUaW1lID0gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKIAot
ICAgIC8vIFNvcnQgYWNjb3JkaW5nIHRvIHByaW9yaXR5LiBFbGVtZW50cyB3aXRoIGxhdGVyIGJl
Z2luIHRpbWUgaGF2ZSBoaWdoZXIgcHJpb3JpdHkuCi0gICAgLy8gSW4gY2FzZSBvZiBhIHRpZSwg
ZG9jdW1lbnQgb3JkZXIgZGVjaWRlcy4gCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28g
Y29uc2lkZXIgdGltaW5nIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZWxlbWVudHMuIERlcGVu
ZGVudHMKLSAgICAvLyBoYXZlIGhpZ2hlciBwcmlvcml0eS4KLSAgICBzb3J0QnlQcmlvcml0eSh0
b0FuaW1hdGUsIGVsYXBzZWQpOwotCi0gICAgLy8gQ2FsY3VsYXRlIGFuaW1hdGlvbiBjb250cmli
dXRpb25zLgotICAgIHR5cGVkZWYgcGFpcjxTVkdFbGVtZW50KiwgUXVhbGlmaWVkTmFtZT4gRWxl
bWVudEF0dHJpYnV0ZVBhaXI7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEVsZW1lbnRBdHRyaWJ1dGVQ
YWlyLCBTVkdTTUlMRWxlbWVudCo+IFJlc3VsdEVsZW1lbnRNYXA7Ci0gICAgUmVzdWx0RWxlbWVu
dE1hcCByZXN1bHRzRWxlbWVudHM7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHRvQW5p
bWF0ZS5zaXplKCk7ICsrbikgewotICAgICAgICBTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uID0g
dG9BbmltYXRlW25dOwotICAgICAgICBBU1NFUlQoYW5pbWF0aW9uLT50aW1lQ29udGFpbmVyKCkg
PT0gdGhpcyk7Ci0KLSAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IGFuaW1hdGlv
bi0+dGFyZ2V0RWxlbWVudCgpOwotICAgICAgICBpZiAoIXRhcmdldEVsZW1lbnQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSBh
bmltYXRpb24tPmF0dHJpYnV0ZU5hbWUoKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0g
YW55UU5hbWUoKSkgewotICAgICAgICAgICAgaWYgKGFuaW1hdGlvbi0+aGFzVGFnTmFtZShTVkdO
YW1lczo6YW5pbWF0ZU1vdGlvblRhZykpCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9
IFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBKYXZhc2NyaXB0IHNob3Vs
ZCBub3QgcnVuIGFzIGEgcmVzdWx0IG9mIGl0ZXJhdGluZyBvdmVyIG1fc2NoZWR1bGVkQW5pbWF0
aW9ucyAoaXQKKyAgICAvLyBjb3VsZCBzY2hlZHVsZS91bnNjaGVkdWxlIGFuZCBjYXVzZSBjb25j
dXJyZW50IG1vZGlmaWNhdGlvbiBpc3N1ZXMpLCBub3IKKyAgICAvLyBzaG91bGQgYXBwbHlSZXN1
bHRzVG9UYXJnZXQgY2F1c2Ugc2NoZWR1bGVkIGFuaW1hdGlvbiBlbGVtZW50cyB0byBiZSBkZWxl
dGVkLgorICAgIC8vIFRoaXMgYm9vbGVhbiBwcm90ZWN0cyBhZ2FpbnN0IHRoZXNlIGNhc2VzLgor
ICAgIG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gdHJ1ZTsKKyNlbmRpZgor
CisgICAgQW5pbWF0aW9uc1ZlY3RvciBhbmltYXRpb25zVG9BcHBseTsKKyAgICBHcm91cGVkQW5p
bWF0aW9uc01hcDo6aXRlcmF0b3IgZW5kID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmVuZCgpOwor
ICAgIGZvciAoR3JvdXBlZEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY2hlZHVsZWRB
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBbmltYXRpb25z
VmVjdG9yKiBzY2hlZHVsZWQgPSBpdC0+c2Vjb25kOworCisgICAgICAgIC8vIFNvcnQgYWNjb3Jk
aW5nIHRvIHByaW9yaXR5LiBFbGVtZW50cyB3aXRoIGxhdGVyIGJlZ2luIHRpbWUgaGF2ZSBoaWdo
ZXIgcHJpb3JpdHkuCisgICAgICAgIC8vIEluIGNhc2Ugb2YgYSB0aWUsIGRvY3VtZW50IG9yZGVy
IGRlY2lkZXMuIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjb25zaWRlciB0
aW1pbmcgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBlbGVtZW50cy4gRGVwZW5kZW50cworICAg
ICAgICAvLyBoYXZlIGhpZ2hlciBwcmlvcml0eS4KKyAgICAgICAgc29ydEJ5UHJpb3JpdHkoKnNj
aGVkdWxlZCwgZWxhcHNlZCk7CisKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1l
bnQgPSAwOworICAgICAgICB1bnNpZ25lZCBzaXplID0gc2NoZWR1bGVkLT5zaXplKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyBuKyspIHsKKyAgICAgICAgICAgIFNW
R1NNSUxFbGVtZW50KiBhbmltYXRpb24gPSBzY2hlZHVsZWQtPmF0KG4pOworICAgICAgICAgICAg
QVNTRVJUKGFuaW1hdGlvbi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOworICAgICAgICAgICAg
QVNTRVJUKGFuaW1hdGlvbi0+dGFyZ2V0RWxlbWVudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChh
bmltYXRpb24tPmhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKTsKKworICAgICAgICAgICAgLy8gUmVz
dWx0cyBhcmUgYWNjdW11bGF0ZWQgdG8gdGhlIGZpcnN0IGFuaW1hdGlvbiB0aGF0IGFuaW1hdGVz
IGFuZCBjb250cmlidXRlcyB0byBhIHBhcnRpY3VsYXIgZWxlbWVudC9hdHRyaWJ1dGUgcGFpci4K
KyAgICAgICAgICAgIGlmICghcmVzdWx0RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGlmICgh
YW5pbWF0aW9uLT5oYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgcmVzdWx0RWxlbWVudCA9IGFuaW1hdGlvbjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGNhbGN1bGF0ZSB0aGUgY29u
dHJpYnV0aW9uIGZyb20gdGhlIGFuaW1hdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSByZXN1bHRzRWxl
bWVudC4KKyAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLT5wcm9ncmVzcyhlbGFwc2VkLCByZXN1
bHRFbGVtZW50LCBzZWVrVG9UaW1lKSAmJiByZXN1bHRFbGVtZW50ID09IGFuaW1hdGlvbikKKyAg
ICAgICAgICAgICAgICByZXN1bHRFbGVtZW50ID0gMDsKKworICAgICAgICAgICAgU01JTFRpbWUg
bmV4dEZpcmVUaW1lID0gYW5pbWF0aW9uLT5uZXh0UHJvZ3Jlc3NUaW1lKCk7CisgICAgICAgICAg
ICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCisgICAgICAgICAgICAgICAgZWFybGllc3RG
aXJlVGltZSA9IG1pbihuZXh0RmlyZVRpbWUsIGVhcmxpZXN0RmlyZVRpbWUpOwogICAgICAgICB9
CiAKLSAgICAgICAgLy8gUmVzdWx0cyBhcmUgYWNjdW11bGF0ZWQgdG8gdGhlIGZpcnN0IGFuaW1h
dGlvbiB0aGF0IGFuaW1hdGVzIGFuZCBjb250cmlidXRlcyB0byBhIHBhcnRpY3VsYXIgZWxlbWVu
dC9hdHRyaWJ1dGUgcGFpci4KLSAgICAgICAgRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdl
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOyAKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQqIHJlc3Vs
dEVsZW1lbnQgPSByZXN1bHRzRWxlbWVudHMuZ2V0KGtleSk7Ci0gICAgICAgIGlmICghcmVzdWx0
RWxlbWVudCkgewotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPmhhc1ZhbGlkQXR0cmlidXRl
VHlwZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0RWxl
bWVudCA9IGFuaW1hdGlvbjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQocmVz
dWx0RWxlbWVudCAhPSBhbmltYXRpb24pOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBjYWxjdWxh
dGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBhbmltYXRpb24gYW5kIGFkZCBpdCB0byB0aGUg
cmVzdWx0c0VsZW1lbnQuCi0gICAgICAgIGlmIChhbmltYXRpb24tPnByb2dyZXNzKGVsYXBzZWQs
IHJlc3VsdEVsZW1lbnQsIHNlZWtUb1RpbWUpICYmIHJlc3VsdEVsZW1lbnQgPT0gYW5pbWF0aW9u
KQotICAgICAgICAgICAgcmVzdWx0c0VsZW1lbnRzLmFkZChrZXksIHJlc3VsdEVsZW1lbnQpOwot
Ci0gICAgICAgIFNNSUxUaW1lIG5leHRGaXJlVGltZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNz
VGltZSgpOwotICAgICAgICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCi0gICAgICAgICAg
ICBlYXJsaWVyc0ZpcmVUaW1lID0gbWluKG5leHRGaXJlVGltZSwgZWFybGllcnNGaXJlVGltZSk7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcmVzdWx0c1RvQXBwbHlTaXplID0gcmVzdWx0c0VsZW1l
bnRzLnNpemUoKTsKLSAgICBpZiAoIXJlc3VsdHNUb0FwcGx5U2l6ZSkgewotICAgICAgICBzdGFy
dFRpbWVyKGVhcmxpZXJzRmlyZVRpbWUsIGFuaW1hdGlvbkZyYW1lRGVsYXkpOworICAgICAgICBp
ZiAocmVzdWx0RWxlbWVudCkKKyAgICAgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5LmFwcGVuZChy
ZXN1bHRFbGVtZW50KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhbmltYXRpb25zVG9BcHBseVNp
emUgPSBhbmltYXRpb25zVG9BcHBseS5zaXplKCk7CisgICAgaWYgKCFhbmltYXRpb25zVG9BcHBs
eVNpemUpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1fcHJldmVudFNjaGVkdWxlZEFuaW1h
dGlvbnNDaGFuZ2VzID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgc3RhcnRUaW1lcihlYXJsaWVz
dEZpcmVUaW1lLCBhbmltYXRpb25GcmFtZURlbGF5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIC8vIEFwcGx5IHJlc3VsdHMgdG8gdGFyZ2V0IGVsZW1lbnRzLgotICAgIFJlc3VsdEVs
ZW1lbnRNYXA6Oml0ZXJhdG9yIGVuZCA9IHJlc3VsdHNFbGVtZW50cy5lbmQoKTsKLSAgICBmb3Ig
KFJlc3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gcmVzdWx0c0VsZW1lbnRzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YXBwbHlSZXN1bHRzVG9UYXJn
ZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0aW9uc1RvQXBwbHlTaXpl
OyArK2kpCisgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5W2ldLT5hcHBseVJlc3VsdHNUb1Rhcmdl
dCgpOworCisjaWZuZGVmIE5ERUJVRworICAgIG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnND
aGFuZ2VzID0gZmFsc2U7CisjZW5kaWYKIAotICAgIHN0YXJ0VGltZXIoZWFybGllcnNGaXJlVGlt
ZSwgYW5pbWF0aW9uRnJhbWVEZWxheSk7CisgICAgc3RhcnRUaW1lcihlYXJsaWVzdEZpcmVUaW1l
LCBhbmltYXRpb25GcmFtZURlbGF5KTsKICAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxE
b2N1bWVudHMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuaAkocmV2aXNpb24gMTI5MzIwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxNyArNDYsMTkgQEAgY2xhc3MgU1ZHU1ZHRWxlbWVudDsKIAogY2xhc3MgU01JTFRpbWVDb250
YWluZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRlKFNWR1NWR0Vs
ZW1lbnQqIG93bmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250YWluZXIob3du
ZXIpKTsgfSAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRl
KFNWR1NWR0VsZW1lbnQqIG93bmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250
YWluZXIob3duZXIpKTsgfQorICAgIH5TTUlMVGltZUNvbnRhaW5lcigpOworCisgICAgdm9pZCBz
Y2hlZHVsZShTVkdTTUlMRWxlbWVudCosIFNWR0VsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1l
Jik7CisgICAgdm9pZCB1bnNjaGVkdWxlKFNWR1NNSUxFbGVtZW50KiwgU1ZHRWxlbWVudCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2b2lkIG5vdGlmeUludGVydmFsc0NoYW5nZWQoKTsK
IAotICAgIHZvaWQgc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKLSAgICB2b2lkIHVuc2NoZWR1
bGUoU1ZHU01JTEVsZW1lbnQqKTsKLSAgICAKICAgICBTTUlMVGltZSBlbGFwc2VkKCkgY29uc3Q7
CiAKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0
OwogICAgIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0gICAgCisKICAgICB2b2lkIGJlZ2luKCk7
CiAgICAgdm9pZCBwYXVzZSgpOwogICAgIHZvaWQgcmVzdW1lKCk7CkBAIC02NiwxNCArNjgsMTQg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFNNSUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1l
bnQqIG93bmVyKTsKLSAgICAKKwogICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNv
bnRhaW5lcj4qKTsKICAgICB2b2lkIHN0YXJ0VGltZXIoU01JTFRpbWUgZmlyZVRpbWUsIFNNSUxU
aW1lIG1pbmltdW1EZWxheSA9IDApOwogICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhTTUlMVGlt
ZSBlbGFwc2VkLCBib29sIHNlZWtUb1RpbWUgPSBmYWxzZSk7CiAgICAgCiAgICAgdm9pZCB1cGRh
dGVEb2N1bWVudE9yZGVySW5kZXhlcygpOwogICAgIHZvaWQgc29ydEJ5UHJpb3JpdHkoVmVjdG9y
PFNWR1NNSUxFbGVtZW50Kj4mIHNtaWxFbGVtZW50cywgU01JTFRpbWUgZWxhcHNlZCk7Ci0gICAg
CisKICAgICBkb3VibGUgbV9iZWdpblRpbWU7CiAgICAgZG91YmxlIG1fcGF1c2VUaW1lOwogICAg
IGRvdWJsZSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lOwpAQCAtODMsMTAgKzg1LDE2IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgVGltZXI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZXI7CiAKLSAgICB0
eXBlZGVmIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiBUaW1pbmdFbGVtZW50U2V0OwotICAgIFRp
bWluZ0VsZW1lbnRTZXQgbV9zY2hlZHVsZWRBbmltYXRpb25zOworICAgIHR5cGVkZWYgcGFpcjxT
VkdFbGVtZW50KiwgUXVhbGlmaWVkTmFtZT4gRWxlbWVudEF0dHJpYnV0ZVBhaXI7CisgICAgdHlw
ZWRlZiBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiBBbmltYXRpb25zVmVjdG9yOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxFbGVtZW50QXR0cmlidXRlUGFpciwgQW5pbWF0aW9uc1ZlY3RvciogPiBHcm91
cGVkQW5pbWF0aW9uc01hcDsKKyAgICBHcm91cGVkQW5pbWF0aW9uc01hcCBtX3NjaGVkdWxlZEFu
aW1hdGlvbnM7CiAKICAgICBTVkdTVkdFbGVtZW50KiBtX293bmVyU1ZHRWxlbWVudDsKKworI2lm
bmRlZiBOREVCVUcKKyAgICBib29sIG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2Vz
OworI2VuZGlmCiB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMTI5MzIwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MCw4ICsxNDAsOCBAQCBTVkdTTUlMRWxlbWVudDo6U1ZHU01JTEVsZW1lbnQoY29uc3QgUXVhCiBT
VkdTTUlMRWxlbWVudDo6flNWR1NNSUxFbGVtZW50KCkKIHsKICAgICBkaXNjb25uZWN0Q29uZGl0
aW9ucygpOwotICAgIGlmIChtX3RpbWVDb250YWluZXIpCi0gICAgICAgIG1fdGltZUNvbnRhaW5l
ci0+dW5zY2hlZHVsZSh0aGlzKTsKKyAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIG1fdGFyZ2V0
RWxlbWVudCAmJiBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAgICAgbV90aW1lQ29udGFp
bmVyLT51bnNjaGVkdWxlKHRoaXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsK
ICAgICBpZiAobV90YXJnZXRFbGVtZW50KQogICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdF
eHRlbnNpb25zKCktPnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFy
Z2V0RWxlbWVudCk7CiB9CkBAIC0yMDAsMTQgKzIwMCwxNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IFNWR1NNCiAgICAgLy8gVmVyaWZ5IHdlIGFyZSBub3QgaW4gPHVzZT4g
aW5zdGFuY2UgdHJlZS4KICAgICBBU1NFUlQoIWlzSW5TaGFkb3dUcmVlKCkpOwogCi0gICAgbV9h
dHRyaWJ1dGVOYW1lID0gY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmli
dXRlKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpOwogICAgIFNWR1NWR0VsZW1lbnQqIG93
bmVyID0gb3duZXJTVkdFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lcikKKyAgICBpZiAoIW93bmVy
KSB7CisgICAgICAgIHNldEF0dHJpYnV0ZU5hbWUoY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlz
LCBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpKTsKICAgICAg
ICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgfQogICAgIG1fdGltZUNvbnRhaW5lciA9IG93
bmVyLT50aW1lQ29udGFpbmVyKCk7CiAgICAgQVNTRVJUKG1fdGltZUNvbnRhaW5lcik7CiAgICAg
bV90aW1lQ29udGFpbmVyLT5zZXREb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KCk7CiAKKyAgICBz
ZXRBdHRyaWJ1dGVOYW1lKGNvbnN0cnVjdFF1YWxpZmllZE5hbWUodGhpcywgZmFzdEdldEF0dHJp
YnV0ZShTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0dHIpKSk7CisKICAgICAvLyAiSWYgbm8gYXR0
cmlidXRlIGlzIHByZXNlbnQsIHRoZSBkZWZhdWx0IGJlZ2luIHZhbHVlIChhbiBvZmZzZXQtdmFs
dWUgb2YgMCkgbXVzdCBiZSBldmFsdWF0ZWQuIgogICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6YmVnaW5BdHRyKSkKICAgICAgICAgbV9iZWdpblRpbWVzLmFwcGVuZChTTUlMVGlt
ZVdpdGhPcmlnaW4oKSk7CkBAIC0yMTUsNyArMjE4LDExIEBAIE5vZGU6Okluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgU1ZHU00KICAgICBpZiAobV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFs
KQogICAgICAgICByZXNvbHZlRmlyc3RJbnRlcnZhbCgpOwogCi0gICAgcmVzY2hlZHVsZSgpOwor
ICAgIC8vIEZvcmNlIHJlc29sdXRpb24gb2YgdGFyZ2V0IGVsZW1lbnQKKyAgICBpZiAoIW1fdGFy
Z2V0RWxlbWVudCkKKyAgICAgICAgdGFyZ2V0RWxlbWVudCgpOworICAgIGlmIChtX3RpbWVDb250
YWluZXIpCisgICAgICAgIG1fdGltZUNvbnRhaW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgp
OwogCiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiB9CkBAIC0yMjQsNyArMjMxLDggQEAgdm9p
ZCBTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbgogewogICAgIGlmIChyb290UGFy
ZW50LT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKG1fdGltZUNvbnRhaW5lcikgewotICAg
ICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMpOworICAgICAgICAgICAg
aWYgKG1fdGFyZ2V0RWxlbWVudCAmJiBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAgICAg
ICAgICAgICBtX3RpbWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50
LCBtX2F0dHJpYnV0ZU5hbWUpOwogICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyID0gMDsKICAg
ICAgICAgfQogICAgICAgICAvLyBDYWxsaW5nIGRpc2Nvbm5lY3RDb25kaXRpb25zKCkgbWF5IGtp
bGwgdXMgaWYgdGhlcmUgYXJlIHN5bmNiYXNlIGNvbmRpdGlvbnMuCkBAIC0yMzQsMTQgKzI0Miwx
OSBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluCiAKICAgICAgICAg
Ly8gQ2xlYXIgdGFyZ2V0IG5vdywgYmVjYXVzZSBkaXNjb25uZWN0Q29uZGl0aW9ucyBjYWxscyB0
YXJnZXRFbGVtZW50KCkgd2hpY2ggd2lsbCByZWNyZWF0ZSB0aGUgdGFyZ2V0IGlmIHdlIHJlbW92
ZWQgaXQgc29vbmVyLiAKICAgICAgICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgICAg
IHJlc2V0VGFyZ2V0RWxlbWVudCgpOworICAgICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KERv
Tm90UmVzb2x2ZU5ld1RhcmdldCk7CiAKLSAgICAgICAgbV9hdHRyaWJ1dGVOYW1lID0gYW55UU5h
bWUoKTsKKyAgICAgICAgc2V0QXR0cmlidXRlTmFtZShhbnlRTmFtZSgpKTsKICAgICB9CiAKICAg
ICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShyb290UGFyZW50KTsKIH0KLSAgIAorCitib29sIFNW
R1NNSUxFbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKQoreworICAgIHJldHVybiBhdHRy
aWJ1dGVOYW1lKCkgIT0gYW55UU5hbWUoKTsKK30KKwogU01JTFRpbWUgU1ZHU01JTEVsZW1lbnQ6
OnBhcnNlT2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBkYXRhKQogewogICAgIGJvb2wgb2s7CkBA
IC00NjUsMTIgKzQ3OCwxMyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkCiAgICAgICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbmRBdHRyKQogICAg
ICAgICAgICAgZW5kTGlzdENoYW5nZWQoZWxhcHNlZCgpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSB7Ci0gICAgICAgICAgICBtX2F0
dHJpYnV0ZU5hbWUgPSBjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKHRoaXMsIGZhc3RHZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSk7CisgICAgICAgICAgICBzZXRBdHRyaWJ1
dGVOYW1lKGNvbnN0cnVjdFF1YWxpZmllZE5hbWUodGhpcywgZmFzdEdldEF0dHJpYnV0ZShTVkdO
YW1lczo6YXR0cmlidXRlTmFtZUF0dHIpKSk7CiAgICAgICAgICAgICBpZiAobV90YXJnZXRFbGVt
ZW50KSB7CiAgICAgICAgICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGF0dHJOYW1l
Lm1hdGNoZXMoWExpbmtOYW1lczo6aHJlZkF0dHIpKSB7CisgICAgICAgICAgICAvLyB0YXJnZXRF
bGVtZW50IGlzIHJlc29sdmVkIGxhemlseSBidXQgdGFyZ2V0RWxlbWVudCgpIHdpbGwgaGFuZGxl
IGNhbGxpbmcgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoKS4KICAgICAgICAgICAgIGlmIChTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpKQogICAgICAgICAg
ICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsQW5pbWF0
aW9uRWxlbWVudHNGcm9tVGFyZ2V0KHRhcmdldEVsZW1lbnQpOwogICAgICAgICB9CkBAIC01NDMs
MTAgKzU1NywxNiBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpkaXNjb25uZWN0Q29uZGl0aW9uCiAg
ICAgfQogfQogCi12b2lkIFNWR1NNSUxFbGVtZW50OjpyZXNjaGVkdWxlKCkKK3ZvaWQgU1ZHU01J
TEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSkKIHsKLSAgICBpZiAobV90aW1lQ29udGFpbmVyKQotICAgICAgICBtX3RpbWVDb250YWlu
ZXItPnNjaGVkdWxlKHRoaXMpOworICAgIGlmIChtX3RpbWVDb250YWluZXIgJiYgbV90YXJnZXRF
bGVtZW50ICYmIG1fYXR0cmlidXRlTmFtZSAhPSBhdHRyaWJ1dGVOYW1lKSB7CisgICAgICAgIGlm
IChoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+
dW5zY2hlZHVsZSh0aGlzLCBtX3RhcmdldEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7CisgICAg
ICAgIG1fYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7CisgICAgICAgIGlmIChoYXNWYWxp
ZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUo
dGhpcywgbV90YXJnZXRFbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUpOworICAgIH0gZWxzZQorICAg
ICAgICBtX2F0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lOwogfQogCiBTVkdFbGVtZW50KiBT
VkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudCgpCkBAIC01NjksOCArNTg5LDE1IEBAIFNWR0Vs
ZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW4KICAgICByZXR1cm4gbV90YXJnZXRF
bGVtZW50OwogfQogCi12b2lkIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5n
ZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBTVkdFbGVtZW50KikKK3ZvaWQgU1ZHU01JTEVs
ZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQs
IFNWR0VsZW1lbnQqIG5ld1RhcmdldCkKIHsKKyAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIGhh
c1ZhbGlkQXR0cmlidXRlTmFtZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50VGFyZ2V0KQorICAg
ICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMsIGN1cnJlbnRUYXJnZXQs
IG1fYXR0cmlidXRlTmFtZSk7CisgICAgICAgIGlmIChuZXdUYXJnZXQpCisgICAgICAgICAgICBt
X3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMsIG5ld1RhcmdldCwgbV9hdHRyaWJ1dGVOYW1l
KTsKKyAgICB9CisKICAgICAvLyBPbmx5IGNsZWFyIHRoZSBhbmltYXRlZCB0eXBlLCBpZiB3ZSBo
YWQgYSB0YXJnZXQgYmVmb3JlLgogICAgIGlmIChjdXJyZW50VGFyZ2V0KQogICAgICAgICBjbGVh
ckFuaW1hdGVkVHlwZShjdXJyZW50VGFyZ2V0KTsKQEAgLTU4MCwxMSArNjA3LDE2IEBAIHZvaWQg
U1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2gKICAgICAgICAgZW5kZWRBY3RpdmVJ
bnRlcnZhbCgpOwogfQogCi12b2lkIFNWR1NNSUxFbGVtZW50OjpyZXNldFRhcmdldEVsZW1lbnQo
KQordm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzZXRUYXJnZXRFbGVtZW50KFJlc29sdmVUYXJnZXQg
cmVzb2x2ZVRhcmdldCkKIHsKICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7
CiAgICAgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UobV90YXJnZXRFbGVtZW50LCAwKTsKICAgICBt
X3RhcmdldEVsZW1lbnQgPSAwOworCisgICAgLy8gRm9yY2UgcmVzb2x1dGlvbiBvZiB0YXJnZXQg
ZWxlbWVudAorICAgIGlmIChyZXNvbHZlVGFyZ2V0ICE9IERvTm90UmVzb2x2ZU5ld1RhcmdldCkK
KyAgICAgICAgdGFyZ2V0RWxlbWVudCgpOworCiAgICAgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdl
ZCgpOwogfQogCkBAIC04MjMsNyArODU1LDkgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzb2x2
ZUZpcnN0SW50ZXJ2YQogICAgICAgICBtX2ludGVydmFsRW5kID0gZW5kOwogICAgICAgICBub3Rp
ZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKHdhc1VucmVzb2x2ZWQgPyBOZXdJbnRlcnZhbCA6
IEV4aXN0aW5nSW50ZXJ2YWwpOwogICAgICAgICBtX25leHRQcm9ncmVzc1RpbWUgPSBtaW4obV9u
ZXh0UHJvZ3Jlc3NUaW1lLCBtX2ludGVydmFsQmVnaW4pOwotICAgICAgICByZXNjaGVkdWxlKCk7
CisKKyAgICAgICAgaWYgKG1fdGltZUNvbnRhaW5lcikKKyAgICAgICAgICAgIG1fdGltZUNvbnRh
aW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpOwogICAgIH0KIH0KIApAQCAtODcxLDcgKzkw
NSw5IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmJlZ2luTGlzdENoYW5nZWQoU00KICAgICAgICAg
fQogICAgIH0KICAgICBtX25leHRQcm9ncmVzc1RpbWUgPSBlbGFwc2VkKCk7Ci0gICAgcmVzY2hl
ZHVsZSgpOworCisgICAgaWYgKG1fdGltZUNvbnRhaW5lcikKKyAgICAgICAgbV90aW1lQ29udGFp
bmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6
OmVuZExpc3RDaGFuZ2VkKFNNSUxUaW1lKQpAQCAtODkwLDcgKzkyNiw5IEBAIHZvaWQgU1ZHU01J
TEVsZW1lbnQ6OmVuZExpc3RDaGFuZ2VkKFNNSUwKICAgICAgICAgfQogICAgIH0KICAgICBtX25l
eHRQcm9ncmVzc1RpbWUgPSBlbGFwc2VkOwotICAgIHJlc2NoZWR1bGUoKTsKKworICAgIGlmICht
X3RpbWVDb250YWluZXIpCisgICAgICAgIG1fdGltZUNvbnRhaW5lci0+bm90aWZ5SW50ZXJ2YWxz
Q2hhbmdlZCgpOwogfQogCiB2b2lkIFNWR1NNSUxFbGVtZW50OjpjaGVja1Jlc3RhcnQoU01JTFRp
bWUgZWxhcHNlZCkKQEAgLTEwMTgsMTAgKzEwNTYsMTAgQEAgYm9vbCBTVkdTTUlMRWxlbWVudDo6
cHJvZ3Jlc3MoU01JTFRpbWUgZQogICAgIEFTU0VSVChyZXN1bHRFbGVtZW50KTsKICAgICBBU1NF
UlQobV90aW1lQ29udGFpbmVyKTsKICAgICBBU1NFUlQobV9pc1dhaXRpbmdGb3JGaXJzdEludGVy
dmFsIHx8IG1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgpKTsKLSAgICAKKwogICAgIGlmICghbV9j
b25kaXRpb25zQ29ubmVjdGVkKQogICAgICAgICBjb25uZWN0Q29uZGl0aW9ucygpOwotICAgIAor
CiAgICAgaWYgKCFtX2ludGVydmFsQmVnaW4uaXNGaW5pdGUoKSkgewogICAgICAgICBBU1NFUlQo
bV9hY3RpdmVTdGF0ZSA9PSBJbmFjdGl2ZSk7CiAgICAgICAgIG1fbmV4dFByb2dyZXNzVGltZSA9
IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CkBAIC0xMDM1LDcgKzEwNzMsNyBAQCBib29sIFNWR1NN
SUxFbGVtZW50Ojpwcm9ncmVzcyhTTUlMVGltZSBlCiAgICAgICAgIG1fbmV4dFByb2dyZXNzVGlt
ZSA9IG1faW50ZXJ2YWxCZWdpbjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAK
KwogICAgIG1fcHJldmlvdXNJbnRlcnZhbEJlZ2luID0gbV9pbnRlcnZhbEJlZ2luOwogCiAgICAg
aWYgKG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbCkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkocmV2aXNpb24gMTI5MzIwKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAorCitlbnVtIFJlc29sdmVUYXJnZXQgeyBEb05vdFJlc29sdmVO
ZXdUYXJnZXQsIFJlc29sdmVOZXdUYXJnZXQgfTsKKwogY2xhc3MgQ29uZGl0aW9uRXZlbnRMaXN0
ZW5lcjsKIGNsYXNzIFNNSUxUaW1lQ29udGFpbmVyOwogCkBAIC01MSwxMiArNTMsMTMgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlKikgT1ZFUlJJ
REU7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCk7CiAgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5nZWQoKSA9IDA7CiAKICAgICBTTUlMVGltZUNvbnRh
aW5lciogdGltZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRhaW5lci5nZXQo
KTsgfQogCiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpOwotICAgIHZvaWQgcmVzZXRU
YXJnZXRFbGVtZW50KCk7CisgICAgdm9pZCByZXNldFRhcmdldEVsZW1lbnQoUmVzb2x2ZVRhcmdl
dCA9IFJlc29sdmVOZXdUYXJnZXQpOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KIAogICAgIHZvaWQgYmVn
aW5CeUxpbmtBY3RpdmF0aW9uKCk7CkBAIC0xMzgsNyArMTQxLDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNoZWNrUmVzdGFydChTTUlMVGltZSBlbGFwc2VkKTsKICAgICB2b2lkIGJlZ2luTGlzdENo
YW5nZWQoU01JTFRpbWUgZXZlbnRUaW1lKTsKICAgICB2b2lkIGVuZExpc3RDaGFuZ2VkKFNNSUxU
aW1lIGV2ZW50VGltZSk7Ci0gICAgdm9pZCByZXNjaGVkdWxlKCk7CisKKyAgICB2b2lkIHNldEF0
dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCiAgICAgLy8gVGhpcyByZXByZXNl
bnRzIGNvbmRpdGlvbnMgb24gZWxlbWVudHMgYmVnaW4gb3IgZW5kIGxpc3QgdGhhdCBuZWVkIHRv
IGJlIHJlc29sdmVkIG9uIHJ1bnRpbWUKICAgICAvLyBmb3IgZXhhbXBsZSA8YW5pbWF0ZSBiZWdp
bj0ib3RoZXJFbGVtZW50LmJlZ2luICsgOHM7IGJ1dHRvbi5jbGljayIgLi4uIC8+Cg==
</data>
<flag name="review"
          id="177448"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165449</attachid>
            <date>2012-09-24 14:42:18 -0700</date>
            <delta_ts>2012-09-26 10:53:10 -0700</delta_ts>
            <desc>Address reviewer comments (2)</desc>
            <filename>96697.4.patch</filename>
            <type>text/plain</type>
            <size>26061</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyOTM5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDEyLTA5LTI0ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU01JTFRpbWVDb250
YWluZXIgdG8gbWFpbnRhaW4gYW5pbWF0aW9uIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgcmVjYWxj
dWxhdGluZyBpdCBldmVyeSBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTY2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
KworICAgICAgICBTVkdUaW1lQ29udGFpbmVyIGNhbiBiZSBpbXByb3ZlZCBieSBtYWludGFpbmlu
ZyBleHRyYSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICBhbmltYXRpb25zIGR1cmluZyBzY2hl
ZHVsZS91bnNjaGVkdWxlIGluc3RlYWQgb2YgcmUtY2FsY3VsYXRpbmcgaXQKKyAgICAgICAgZXZl
cnkgZnJhbWUuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgU01JTFRpbWVDb250YWluZXIg
bWFpbnRhaW5zIGEgR3JvdXBlZEFuaW1hdGlvbnNNYXAgaW5zdGVhZCBvZgorICAgICAgICBqdXN0
IGEgVmVjdG9yLiBUaGlzIG1hcCBtYXBzIGEgbGlzdCBvZiBhbmltYXRpb25zIHRvIHRoZSBzcGVj
aWZpYyBFbGVtZW50QXR0cmlidXRlUGFpcgorICAgICAgICB0aGF0IHdpbGwgYmUgYW5pbWF0ZWQu
CisKKyAgICAgICAgT24gc2NoZWR1bGUvdW5zY2hlZHVsZSB3ZSBtb2RpZnkgdGhpcyBtYXAgaW5z
dGVhZCBvZiBjcmVhdGluZyBpdCBpbiB1cGRhdGVBbmltYXRpb25zLgorICAgICAgICBBcyBhIHJl
c3VsdCwgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFsd2F5cyBub3RpZnlpbmcgKG9yLCBy
ZS1zY2hlZHVsaW5nKSB0aGUKKyAgICAgICAgdGltZSBjb250YWluZXIgd2hlbiBlaXRoZXIgYW4g
YW5pbWF0aW9uJ3MgdGFyZ2V0IGNoYW5nZXMgb3IgYW4gYW5pbWF0aW9uJ3MgYXR0cmlidXRlTmFt
ZQorICAgICAgICBjaGFuZ2VzLiBUaGlzIG5vdGlmaWNhdGlvbiBpcyBtYW5hZ2VkIGJ5IHRyYWNr
aW5nIGNoYW5nZXMgd2l0aCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZQorICAgICAgICBhbmQgc2V0
QXR0cmlidXRlTmFtZS4KKworICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB1cGRhdGVBbmltYXRp
b25zIG9ubHkgaXRlcmF0ZXMgb3ZlciBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuCisgICAgICAgIEZ1
cnRoZXJtb3JlLCB0aGUgc29ydGluZyBvZiBhbmltYXRpb25zIGJ5IHByaW9yaXR5IGlzIG5vdyBk
b25lIG92ZXIgZWFjaCBWZWN0b3Igb2YKKyAgICAgICAgU1ZHU01JTEVsZW1lbnRzIGFmZmVjdGlu
ZyBhIHtTVkdFbGVtZW50KiwgUXVhbGlmaWVkTmFtZX0gcGFpciBpbnN0ZWFkIG9mIG92ZXIgYWxs
IHRoZQorICAgICAgICBTVkdTTUlMRWxlbWVudHMgYXQgb25jZS4KKworICAgICAgICBMYXN0bHks
IGEgZ3VhcmQgKG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzKSBoYXMgYmVlbiBh
ZGRlZAorICAgICAgICB0byBwcm92ZSB0aGF0IHdlIGRvIG5vdCBtb2RpZnkgdGhlIHNjaGVkdWxl
ZCBhbmltYXRpb25zIG1hcCBvdXQKKyAgICAgICAgZnJvbSB1bmRlciBvdXJzZWx2ZXMuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLgorCisgICAg
ICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVFbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUpOgorCisgICAgICAgICogc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUpOgorCisgICAgICAgICAgICBQZXIg
dGhlIHNwZWMsIEFuaW1hdGVNb3Rpb24gaXMgbm90IGFmZmVjdGVkIGJ5IGF0dHJpYnV0ZU5hbWUu
IEluc3RlYWQKKyAgICAgICAgICAgIG9mIGhhdmluZyBhIHNwZWNpYWwgY2FzZSBmb3IgdGhpcyBp
biBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucworICAgICAgICAgICAgd2Ugc2lt
cGx5IGltcGxlbWVudCB0aGlzIG1ldGhvZC4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50Lmg6CisgICAgICAgIChTVkdBbmltYXRlTW90
aW9uRWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OlNNSUxUaW1lQ29u
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp+U01JTFRpbWVD
b250YWluZXIpOgorCisgICAgICAgICAgICBUaGlzIG1ldGhvZCBub3cgY2xlYW5zIHVwIHRoZSBt
YXAgc2luY2Ugd2UgaGF2ZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQKKyAgICAgICAgICAgIFZlY3Rv
cnMgaW4gaXQuCisKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpzY2hlZHVs
ZSk6CisKKyAgICAgICAgICAgIEhlcmUgd2UgYXJlIGp1c3QgYWRkaW5nIGFuIGVudHJ5IHRvIHRo
ZSBtYXAuIFRoZXJlIGlzIHNvbWUgc3BlY2lhbCBoYW5kbGluZworICAgICAgICAgICAgZm9yIGNy
ZWF0aW5nIHRoZSBWZWN0b3Igb2Ygb25lIGRvZXMgbm90IGV4aXN0LgorCisgICAgICAgIChXZWJD
b3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dW5zY2hlZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltZUNvbnRhaW5lcjo6bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0RWxhcHNlZCk6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltZUNvbnRhaW5lcjo6c3RhcnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGlt
ZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZUNvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6
OmNyZWF0ZSk6CisgICAgICAgIChTTUlMVGltZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxl
bWVudDo6flNWR1NNSUxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50
OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVs
ZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxl
bWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01J
TEVsZW1lbnQ6OnJlc2V0VGFyZ2V0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6cmVzb2x2ZUZpcnN0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01J
TEVsZW1lbnQ6OmJlZ2luTGlzdENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVs
ZW1lbnQ6OmVuZExpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50
Ojpwcm9ncmVzcyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oOgor
ICAgICAgICAoU1ZHU01JTEVsZW1lbnQpOgorCiAyMDEyLTA5LTI0ICBUb21teSBXaWRlbmZseWNo
dCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSTogRml4IHRo
ZSBpbmNvcnJlY3RseSBzcGVsbGVkIFJUQ1BlZXJDb25uZWN0aW9uOjpvbm5lZ290aWF0aW9ubmVl
ZGVkIGNhbGxiYWNrCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90
aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyOTM5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDEy
IEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmli
dXRlTmFtZSgpCit7CisgICAgLy8gQW5pbWF0ZU1vdGlvbiBkb2VzIG5vdCB1c2UgYXR0cmlidXRl
TmFtZSBzbyBpdCBpcyBhbHdheXMgdmFsaWQuCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wg
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiwgc3VwcG9ydGVkQXR0cmlidXRlcywgKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDEyOTM5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHByaXZhdGU6CiAgICAgU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCk7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0
cmlidXRlTmFtZSgpOwogCiAgICAgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJp
YnV0ZSYpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDEyOTM5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBACiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgCisKIHN0YXRpYyBjb25zdCBkb3VibGUgYW5pbWF0aW9uRnJhbWVEZWxheSA9
IDAuMDI1OwogCiBTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIoU1ZHU1ZHRWxl
bWVudCogb3duZXIpIApAQCAtNDcsMjQgKzQ3LDY1IEBAIFNNSUxUaW1lQ29udGFpbmVyOjpTTUlM
VGltZUNvbnRhaW5lcihTVkcKICAgICAsIG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eShmYWxz
ZSkKICAgICAsIG1fdGltZXIodGhpcywgJlNNSUxUaW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKQog
ICAgICwgbV9vd25lclNWR0VsZW1lbnQob3duZXIpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9w
cmV2ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMoZmFsc2UpCisjZW5kaWYKK3sKK30KKwor
U01JTFRpbWVDb250YWluZXI6On5TTUlMVGltZUNvbnRhaW5lcigpCiB7CisjaWZuZGVmIE5ERUJV
RworICAgIEFTU0VSVCghbV9wcmV2ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMpOworI2Vu
ZGlmCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2NoZWR1bGVkQW5pbWF0aW9ucyk7CiB9CiAKLXZv
aWQgU01JTFRpbWVDb250YWluZXI6OnNjaGVkdWxlKFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24p
Cit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpzY2hlZHVsZShTVkdTTUlMRWxlbWVudCogYW5pbWF0
aW9uLCBTVkdFbGVtZW50KiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpCiB7CiAgICAgQVNTRVJUKGFuaW1hdGlvbi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOwor
ICAgIEFTU0VSVCh0YXJnZXQpOworICAgIEFTU0VSVChhbmltYXRpb24tPmhhc1ZhbGlkQXR0cmli
dXRlTmFtZSgpKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fcHJldmVudFNjaGVk
dWxlZEFuaW1hdGlvbnNDaGFuZ2VzKTsKKyNlbmRpZgorCisgICAgRWxlbWVudEF0dHJpYnV0ZVBh
aXIga2V5KHRhcmdldCwgYXR0cmlidXRlTmFtZSk7CisgICAgQW5pbWF0aW9uc1ZlY3Rvciogc2No
ZWR1bGVkID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmdldChrZXkpOworICAgIGlmICghc2NoZWR1
bGVkKSB7CisgICAgICAgIHNjaGVkdWxlZCA9IG5ldyBBbmltYXRpb25zVmVjdG9yKCk7CisgICAg
ICAgIG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5zZXQoa2V5LCBzY2hlZHVsZWQpOworICAgIH0KKyAg
ICBBU1NFUlQoIXNjaGVkdWxlZC0+Y29udGFpbnMoYW5pbWF0aW9uKSk7CisgICAgc2NoZWR1bGVk
LT5hcHBlbmQoYW5pbWF0aW9uKTsKKwogICAgIFNNSUxUaW1lIG5leHRGaXJlVGltZSA9IGFuaW1h
dGlvbi0+bmV4dFByb2dyZXNzVGltZSgpOwotICAgIGlmICghbmV4dEZpcmVUaW1lLmlzRmluaXRl
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3NjaGVkdWxlZEFuaW1hdGlvbnMuYWRkKGFuaW1h
dGlvbik7Ci0gICAgc3RhcnRUaW1lcigwKTsKKyAgICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRl
KCkpCisgICAgICAgIG5vdGlmeUludGVydmFsc0NoYW5nZWQoKTsKIH0KLSAgICAKLXZvaWQgU01J
TFRpbWVDb250YWluZXI6OnVuc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbikKKwor
dm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dW5zY2hlZHVsZShTVkdTTUlMRWxlbWVudCogYW5pbWF0
aW9uLCBTVkdFbGVtZW50KiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpCiB7CiAgICAgQVNTRVJUKGFuaW1hdGlvbi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOwog
Ci0gICAgbV9zY2hlZHVsZWRBbmltYXRpb25zLnJlbW92ZShhbmltYXRpb24pOworI2lmbmRlZiBO
REVCVUcKKyAgICBBU1NFUlQoIW1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzKTsK
KyNlbmRpZgorCisgICAgRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdldCwgYXR0cmlidXRl
TmFtZSk7CisgICAgQW5pbWF0aW9uc1ZlY3Rvciogc2NoZWR1bGVkID0gbV9zY2hlZHVsZWRBbmlt
YXRpb25zLmdldChrZXkpOworICAgIEFTU0VSVChzY2hlZHVsZWQpOworICAgIHNpemVfdCBpZHgg
PSBzY2hlZHVsZWQtPmZpbmQoYW5pbWF0aW9uKTsKKyAgICBBU1NFUlQoaWR4ICE9IG5vdEZvdW5k
KTsKKyAgICBzY2hlZHVsZWQtPnJlbW92ZShpZHgpOworfQorCit2b2lkIFNNSUxUaW1lQ29udGFp
bmVyOjpub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCkKK3sKKyAgICAvLyBTY2hlZHVsZSB1cGRhdGVB
bmltYXRpb25zKCkgdG8gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5IHNvIG11bHRpcGxlIGludGVy
dmFscworICAgIC8vIGNhbiBjaGFuZ2Ugd2l0aCB1cGRhdGVBbmltYXRpb25zKCkgb25seSBjYWxs
ZWQgb25jZSBhdCB0aGUgZW5kLgorICAgIHN0YXJ0VGltZXIoMCk7CiB9CiAKIFNNSUxUaW1lIFNN
SUxUaW1lQ29udGFpbmVyOjplbGFwc2VkKCkgY29uc3QKQEAgLTczLDEyICsxMTQsMTIgQEAgU01J
TFRpbWUgU01JTFRpbWVDb250YWluZXI6OmVsYXBzZWQoKSBjbwogICAgICAgICByZXR1cm4gMDsK
ICAgICByZXR1cm4gY3VycmVudFRpbWUoKSAtIG1fYmVnaW5UaW1lIC0gbV9hY2N1bXVsYXRlZFBh
dXNlVGltZTsKIH0KLSAgICAKKwogYm9vbCBTTUlMVGltZUNvbnRhaW5lcjo6aXNBY3RpdmUoKSBj
b25zdAogewogICAgIHJldHVybiBtX2JlZ2luVGltZSAmJiAhaXNQYXVzZWQoKTsKIH0KLSAgICAK
KwogYm9vbCBTTUlMVGltZUNvbnRhaW5lcjo6aXNQYXVzZWQoKSBjb25zdAogewogICAgIHJldHVy
biBtX3BhdXNlVGltZTsKQEAgLTE0NCwxMCArMTg1LDE5IEBAIHZvaWQgU01JTFRpbWVDb250YWlu
ZXI6OnNldEVsYXBzZWQoU01JTFQKICAgICBpZiAobV9wYXVzZVRpbWUpCiAgICAgICAgIG1fcGF1
c2VUaW1lID0gbm93OwogCi0gICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4gdG9SZXNldDsKLSAg
ICBjb3B5VG9WZWN0b3IobV9zY2hlZHVsZWRBbmltYXRpb25zLCB0b1Jlc2V0KTsKLSAgICBmb3Ig
KHVuc2lnbmVkIG4gPSAwOyBuIDwgdG9SZXNldC5zaXplKCk7ICsrbikKLSAgICAgICAgdG9SZXNl
dFtuXS0+cmVzZXQoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9wcmV2ZW50U2NoZWR1bGVkQW5p
bWF0aW9uc0NoYW5nZXMgPSB0cnVlOworI2VuZGlmCisgICAgR3JvdXBlZEFuaW1hdGlvbnNNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKEdy
b3VwZWRBbmltYXRpb25zTWFwOjppdGVyYXRvciBpdCA9IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQW5pbWF0aW9uc1ZlY3Rvciogc2No
ZWR1bGVkID0gaXQtPnNlY29uZDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHNjaGVkdWxlZC0+
c2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgbisrKQorICAg
ICAgICAgICAgc2NoZWR1bGVkLT5hdChuKS0+cmVzZXQoKTsKKyAgICB9CisjaWZuZGVmIE5ERUJV
RworICAgIG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gZmFsc2U7CisjZW5k
aWYKIAogICAgIHVwZGF0ZUFuaW1hdGlvbnModGltZSwgdHJ1ZSk7CiB9CkBAIC0xNTYsMTAgKzIw
NiwxMCBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpzdGFydFRpbWVyKFNNSUxUCiB7CiAgICAg
aWYgKCFtX2JlZ2luVGltZSB8fCBpc1BhdXNlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisK
ICAgICBpZiAoIWZpcmVUaW1lLmlzRmluaXRlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwog
ICAgIFNNSUxUaW1lIGRlbGF5ID0gbWF4KGZpcmVUaW1lIC0gZWxhcHNlZCgpLCBtaW5pbXVtRGVs
YXkpOwogICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGRlbGF5LnZhbHVlKCkpOwogfQpAQCAtMjA3
LDY4ICsyNTcsNzEgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c29ydEJ5UHJpb3JpdHkoVgog
CiB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBz
ZWQsIGJvb2wgc2Vla1RvVGltZSkKIHsKLSAgICBTTUlMVGltZSBlYXJsaWVyc0ZpcmVUaW1lID0g
U01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKLQotICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IHRv
QW5pbWF0ZTsKLSAgICBjb3B5VG9WZWN0b3IobV9zY2hlZHVsZWRBbmltYXRpb25zLCB0b0FuaW1h
dGUpOworICAgIFNNSUxUaW1lIGVhcmxpZXN0RmlyZVRpbWUgPSBTTUlMVGltZTo6dW5yZXNvbHZl
ZCgpOwogCi0gICAgLy8gU29ydCBhY2NvcmRpbmcgdG8gcHJpb3JpdHkuIEVsZW1lbnRzIHdpdGgg
bGF0ZXIgYmVnaW4gdGltZSBoYXZlIGhpZ2hlciBwcmlvcml0eS4KLSAgICAvLyBJbiBjYXNlIG9m
IGEgdGllLCBkb2N1bWVudCBvcmRlciBkZWNpZGVzLiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYWxzbyBjb25zaWRlciB0aW1pbmcgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBlbGVtZW50
cy4gRGVwZW5kZW50cwotICAgIC8vIGhhdmUgaGlnaGVyIHByaW9yaXR5LgotICAgIHNvcnRCeVBy
aW9yaXR5KHRvQW5pbWF0ZSwgZWxhcHNlZCk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgYW5pbWF0aW9u
IGNvbnRyaWJ1dGlvbnMuCi0gICAgdHlwZWRlZiBwYWlyPFNWR0VsZW1lbnQqLCBRdWFsaWZpZWRO
YW1lPiBFbGVtZW50QXR0cmlidXRlUGFpcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8RWxlbWVudEF0
dHJpYnV0ZVBhaXIsIFNWR1NNSUxFbGVtZW50Kj4gUmVzdWx0RWxlbWVudE1hcDsKLSAgICBSZXN1
bHRFbGVtZW50TWFwIHJlc3VsdHNFbGVtZW50czsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBu
IDwgdG9BbmltYXRlLnNpemUoKTsgKytuKSB7Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmlt
YXRpb24gPSB0b0FuaW1hdGVbbl07Ci0gICAgICAgIEFTU0VSVChhbmltYXRpb24tPnRpbWVDb250
YWluZXIoKSA9PSB0aGlzKTsKLQotICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0g
YW5pbWF0aW9uLT50YXJnZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cmlidXRl
TmFtZSA9IGFuaW1hdGlvbi0+YXR0cmlidXRlTmFtZSgpOwotICAgICAgICBpZiAoYXR0cmlidXRl
TmFtZSA9PSBhbnlRTmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5oYXNUYWdO
YW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVOYW1lID0gU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWc7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgY29udGludWU7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIFRoaXMgYm9v
bGVhbiB3aWxsIGNhdGNoIGFueSBhdHRlbXB0cyB0byBzY2hlZHVsZS91bnNjaGVkdWxlIHNjaGVk
dWxlZEFuaW1hdGlvbnMgZHVyaW5nIHRoaXMgY3JpdGljYWwgc2VjdGlvbi4KKyAgICAvLyBTaW1p
bGFybHksIGFueSBlbGVtZW50cyByZW1vdmVkIHdpbGwgdW5zY2hlZHVsZSB0aGVtc2VsdmVzLCBz
byB0aGlzIHdpbGwgY2F0Y2ggbW9kaWZpY2F0aW9uIG9mIGFuaW1hdGlvbnNUb0FwcGx5LgorICAg
IG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gdHJ1ZTsKKyNlbmRpZgorCisg
ICAgQW5pbWF0aW9uc1ZlY3RvciBhbmltYXRpb25zVG9BcHBseTsKKyAgICBHcm91cGVkQW5pbWF0
aW9uc01hcDo6aXRlcmF0b3IgZW5kID0gbV9zY2hlZHVsZWRBbmltYXRpb25zLmVuZCgpOworICAg
IGZvciAoR3JvdXBlZEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY2hlZHVsZWRBbmlt
YXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBbmltYXRpb25zVmVj
dG9yKiBzY2hlZHVsZWQgPSBpdC0+c2Vjb25kOworCisgICAgICAgIC8vIFNvcnQgYWNjb3JkaW5n
IHRvIHByaW9yaXR5LiBFbGVtZW50cyB3aXRoIGxhdGVyIGJlZ2luIHRpbWUgaGF2ZSBoaWdoZXIg
cHJpb3JpdHkuCisgICAgICAgIC8vIEluIGNhc2Ugb2YgYSB0aWUsIGRvY3VtZW50IG9yZGVyIGRl
Y2lkZXMuIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjb25zaWRlciB0aW1p
bmcgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBlbGVtZW50cy4gRGVwZW5kZW50cworICAgICAg
ICAvLyBoYXZlIGhpZ2hlciBwcmlvcml0eS4KKyAgICAgICAgc29ydEJ5UHJpb3JpdHkoKnNjaGVk
dWxlZCwgZWxhcHNlZCk7CisKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQg
PSAwOworICAgICAgICB1bnNpZ25lZCBzaXplID0gc2NoZWR1bGVkLT5zaXplKCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyBuKyspIHsKKyAgICAgICAgICAgIFNWR1NN
SUxFbGVtZW50KiBhbmltYXRpb24gPSBzY2hlZHVsZWQtPmF0KG4pOworICAgICAgICAgICAgQVNT
RVJUKGFuaW1hdGlvbi0+dGltZUNvbnRhaW5lcigpID09IHRoaXMpOworICAgICAgICAgICAgQVNT
RVJUKGFuaW1hdGlvbi0+dGFyZ2V0RWxlbWVudCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChhbmlt
YXRpb24tPmhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKTsKKworICAgICAgICAgICAgLy8gUmVzdWx0
cyBhcmUgYWNjdW11bGF0ZWQgdG8gdGhlIGZpcnN0IGFuaW1hdGlvbiB0aGF0IGFuaW1hdGVzIGFu
ZCBjb250cmlidXRlcyB0byBhIHBhcnRpY3VsYXIgZWxlbWVudC9hdHRyaWJ1dGUgcGFpci4KKyAg
ICAgICAgICAgIGlmICghcmVzdWx0RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGlmICghYW5p
bWF0aW9uLT5oYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgcmVzdWx0RWxlbWVudCA9IGFuaW1hdGlvbjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGNhbGN1bGF0ZSB0aGUgY29udHJp
YnV0aW9uIGZyb20gdGhlIGFuaW1hdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSByZXN1bHRzRWxlbWVu
dC4KKyAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLT5wcm9ncmVzcyhlbGFwc2VkLCByZXN1bHRF
bGVtZW50LCBzZWVrVG9UaW1lKSAmJiByZXN1bHRFbGVtZW50ID09IGFuaW1hdGlvbikKKyAgICAg
ICAgICAgICAgICByZXN1bHRFbGVtZW50ID0gMDsKKworICAgICAgICAgICAgU01JTFRpbWUgbmV4
dEZpcmVUaW1lID0gYW5pbWF0aW9uLT5uZXh0UHJvZ3Jlc3NUaW1lKCk7CisgICAgICAgICAgICBp
ZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCisgICAgICAgICAgICAgICAgZWFybGllc3RGaXJl
VGltZSA9IG1pbihuZXh0RmlyZVRpbWUsIGVhcmxpZXN0RmlyZVRpbWUpOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gUmVzdWx0cyBhcmUgYWNjdW11bGF0ZWQgdG8gdGhlIGZpcnN0IGFuaW1hdGlv
biB0aGF0IGFuaW1hdGVzIGFuZCBjb250cmlidXRlcyB0byBhIHBhcnRpY3VsYXIgZWxlbWVudC9h
dHRyaWJ1dGUgcGFpci4KLSAgICAgICAgRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdldEVs
ZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOyAKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVs
ZW1lbnQgPSByZXN1bHRzRWxlbWVudHMuZ2V0KGtleSk7Ci0gICAgICAgIGlmICghcmVzdWx0RWxl
bWVudCkgewotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPmhhc1ZhbGlkQXR0cmlidXRlVHlw
ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0RWxlbWVu
dCA9IGFuaW1hdGlvbjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0
RWxlbWVudCAhPSBhbmltYXRpb24pOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBjYWxjdWxhdGUg
dGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBhbmltYXRpb24gYW5kIGFkZCBpdCB0byB0aGUgcmVz
dWx0c0VsZW1lbnQuCi0gICAgICAgIGlmIChhbmltYXRpb24tPnByb2dyZXNzKGVsYXBzZWQsIHJl
c3VsdEVsZW1lbnQsIHNlZWtUb1RpbWUpICYmIHJlc3VsdEVsZW1lbnQgPT0gYW5pbWF0aW9uKQot
ICAgICAgICAgICAgcmVzdWx0c0VsZW1lbnRzLmFkZChrZXksIHJlc3VsdEVsZW1lbnQpOwotCi0g
ICAgICAgIFNNSUxUaW1lIG5leHRGaXJlVGltZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNzVGlt
ZSgpOwotICAgICAgICBpZiAobmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCi0gICAgICAgICAgICBl
YXJsaWVyc0ZpcmVUaW1lID0gbWluKG5leHRGaXJlVGltZSwgZWFybGllcnNGaXJlVGltZSk7Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgcmVzdWx0c1RvQXBwbHlTaXplID0gcmVzdWx0c0VsZW1lbnRz
LnNpemUoKTsKLSAgICBpZiAoIXJlc3VsdHNUb0FwcGx5U2l6ZSkgewotICAgICAgICBzdGFydFRp
bWVyKGVhcmxpZXJzRmlyZVRpbWUsIGFuaW1hdGlvbkZyYW1lRGVsYXkpOworICAgICAgICBpZiAo
cmVzdWx0RWxlbWVudCkKKyAgICAgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5LmFwcGVuZChyZXN1
bHRFbGVtZW50KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhbmltYXRpb25zVG9BcHBseVNpemUg
PSBhbmltYXRpb25zVG9BcHBseS5zaXplKCk7CisgICAgaWYgKCFhbmltYXRpb25zVG9BcHBseVNp
emUpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlv
bnNDaGFuZ2VzID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgc3RhcnRUaW1lcihlYXJsaWVzdEZp
cmVUaW1lLCBhbmltYXRpb25GcmFtZURlbGF5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIEFwcGx5IHJlc3VsdHMgdG8gdGFyZ2V0IGVsZW1lbnRzLgotICAgIFJlc3VsdEVsZW1l
bnRNYXA6Oml0ZXJhdG9yIGVuZCA9IHJlc3VsdHNFbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKFJl
c3VsdEVsZW1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gcmVzdWx0c0VsZW1lbnRzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YXBwbHlSZXN1bHRzVG9UYXJnZXQo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0aW9uc1RvQXBwbHlTaXplOyAr
K2kpCisgICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5W2ldLT5hcHBseVJlc3VsdHNUb1RhcmdldCgp
OworCisjaWZuZGVmIE5ERUJVRworICAgIG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFu
Z2VzID0gZmFsc2U7CisjZW5kaWYKIAotICAgIHN0YXJ0VGltZXIoZWFybGllcnNGaXJlVGltZSwg
YW5pbWF0aW9uRnJhbWVEZWxheSk7CisgICAgc3RhcnRUaW1lcihlYXJsaWVzdEZpcmVUaW1lLCBh
bmltYXRpb25GcmFtZURlbGF5KTsKICAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1
bWVudHMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGlt
ZUNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuaAkocmV2aXNpb24gMTI5Mzk4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
NyArNDYsMTkgQEAgY2xhc3MgU1ZHU1ZHRWxlbWVudDsKIAogY2xhc3MgU01JTFRpbWVDb250YWlu
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlMVGltZUNvbnRhaW5lcj4gIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRlKFNWR1NWR0VsZW1l
bnQqIG93bmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250YWluZXIob3duZXIp
KTsgfSAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gY3JlYXRlKFNW
R1NWR0VsZW1lbnQqIG93bmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVDb250YWlu
ZXIob3duZXIpKTsgfQorICAgIH5TTUlMVGltZUNvbnRhaW5lcigpOworCisgICAgdm9pZCBzY2hl
ZHVsZShTVkdTTUlMRWxlbWVudCosIFNWR0VsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7
CisgICAgdm9pZCB1bnNjaGVkdWxlKFNWR1NNSUxFbGVtZW50KiwgU1ZHRWxlbWVudCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2b2lkIG5vdGlmeUludGVydmFsc0NoYW5nZWQoKTsKIAot
ICAgIHZvaWQgc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKLSAgICB2b2lkIHVuc2NoZWR1bGUo
U1ZHU01JTEVsZW1lbnQqKTsKLSAgICAKICAgICBTTUlMVGltZSBlbGFwc2VkKCkgY29uc3Q7CiAK
ICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0Owog
ICAgIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0gICAgCisKICAgICB2b2lkIGJlZ2luKCk7CiAg
ICAgdm9pZCBwYXVzZSgpOwogICAgIHZvaWQgcmVzdW1lKCk7CkBAIC02NiwxNCArNjgsMTQgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIFNNSUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQq
IG93bmVyKTsKLSAgICAKKwogICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNvbnRh
aW5lcj4qKTsKICAgICB2b2lkIHN0YXJ0VGltZXIoU01JTFRpbWUgZmlyZVRpbWUsIFNNSUxUaW1l
IG1pbmltdW1EZWxheSA9IDApOwogICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBl
bGFwc2VkLCBib29sIHNlZWtUb1RpbWUgPSBmYWxzZSk7CiAgICAgCiAgICAgdm9pZCB1cGRhdGVE
b2N1bWVudE9yZGVySW5kZXhlcygpOwogICAgIHZvaWQgc29ydEJ5UHJpb3JpdHkoVmVjdG9yPFNW
R1NNSUxFbGVtZW50Kj4mIHNtaWxFbGVtZW50cywgU01JTFRpbWUgZWxhcHNlZCk7Ci0gICAgCisK
ICAgICBkb3VibGUgbV9iZWdpblRpbWU7CiAgICAgZG91YmxlIG1fcGF1c2VUaW1lOwogICAgIGRv
dWJsZSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lOwpAQCAtODMsMTAgKzg1LDE2IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgVGltZXI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZXI7CiAKLSAgICB0eXBl
ZGVmIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiBUaW1pbmdFbGVtZW50U2V0OwotICAgIFRpbWlu
Z0VsZW1lbnRTZXQgbV9zY2hlZHVsZWRBbmltYXRpb25zOworICAgIHR5cGVkZWYgcGFpcjxTVkdF
bGVtZW50KiwgUXVhbGlmaWVkTmFtZT4gRWxlbWVudEF0dHJpYnV0ZVBhaXI7CisgICAgdHlwZWRl
ZiBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiBBbmltYXRpb25zVmVjdG9yOworICAgIHR5cGVkZWYg
SGFzaE1hcDxFbGVtZW50QXR0cmlidXRlUGFpciwgQW5pbWF0aW9uc1ZlY3RvciogPiBHcm91cGVk
QW5pbWF0aW9uc01hcDsKKyAgICBHcm91cGVkQW5pbWF0aW9uc01hcCBtX3NjaGVkdWxlZEFuaW1h
dGlvbnM7CiAKICAgICBTVkdTVkdFbGVtZW50KiBtX293bmVyU1ZHRWxlbWVudDsKKworI2lmbmRl
ZiBOREVCVUcKKyAgICBib29sIG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzOwor
I2VuZGlmCiB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMTI5Mzk4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw4
ICsxNDAsOCBAQCBTVkdTTUlMRWxlbWVudDo6U1ZHU01JTEVsZW1lbnQoY29uc3QgUXVhCiBTVkdT
TUlMRWxlbWVudDo6flNWR1NNSUxFbGVtZW50KCkKIHsKICAgICBkaXNjb25uZWN0Q29uZGl0aW9u
cygpOwotICAgIGlmIChtX3RpbWVDb250YWluZXIpCi0gICAgICAgIG1fdGltZUNvbnRhaW5lci0+
dW5zY2hlZHVsZSh0aGlzKTsKKyAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIG1fdGFyZ2V0RWxl
bWVudCAmJiBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSkKKyAgICAgICAgbV90aW1lQ29udGFpbmVy
LT51bnNjaGVkdWxlKHRoaXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKICAg
ICBpZiAobV90YXJnZXRFbGVtZW50KQogICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRl
bnNpb25zKCktPnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0
RWxlbWVudCk7CiB9CkBAIC0yMDAsMTAgKzIwMCwxMSBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IFNWR1NNCiAgICAgLy8gVmVyaWZ5IHdlIGFyZSBub3QgaW4gPHVzZT4gaW5z
dGFuY2UgdHJlZS4KICAgICBBU1NFUlQoIWlzSW5TaGFkb3dUcmVlKCkpOwogCi0gICAgbV9hdHRy
aWJ1dGVOYW1lID0gY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRl
KFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpOworICAgIHNldEF0dHJpYnV0ZU5hbWUoY29u
c3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRy
aWJ1dGVOYW1lQXR0cikpKTsKICAgICBTVkdTVkdFbGVtZW50KiBvd25lciA9IG93bmVyU1ZHRWxl
bWVudCgpOwogICAgIGlmICghb3duZXIpCiAgICAgICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwor
CiAgICAgbV90aW1lQ29udGFpbmVyID0gb3duZXItPnRpbWVDb250YWluZXIoKTsKICAgICBBU1NF
UlQobV90aW1lQ29udGFpbmVyKTsKICAgICBtX3RpbWVDb250YWluZXItPnNldERvY3VtZW50T3Jk
ZXJJbmRleGVzRGlydHkoKTsKQEAgLTIxNSw3ICsyMTYsMTEgQEAgTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBTVkdTTQogICAgIGlmIChtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2
YWwpCiAgICAgICAgIHJlc29sdmVGaXJzdEludGVydmFsKCk7CiAKLSAgICByZXNjaGVkdWxlKCk7
CisgICAgLy8gRm9yY2UgcmVzb2x1dGlvbiBvZiB0YXJnZXQgZWxlbWVudAorICAgIGlmICghbV90
YXJnZXRFbGVtZW50KQorICAgICAgICB0YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKG1fdGltZUNv
bnRhaW5lcikKKyAgICAgICAgbV90aW1lQ29udGFpbmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2Vk
KCk7CiAKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KQEAgLTIyNCw3ICsyMjksOCBAQCB2
b2lkIFNWR1NNSUxFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluCiB7CiAgICAgaWYgKHJvb3RQ
YXJlbnQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICBpZiAobV90aW1lQ29udGFpbmVyKSB7Ci0g
ICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcyk7CisgICAgICAgICAg
ICBpZiAobV90YXJnZXRFbGVtZW50ICYmIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKQorICAgICAg
ICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzLCBtX3RhcmdldEVsZW1l
bnQsIG1fYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICBtX3RpbWVDb250YWluZXIgPSAwOwog
ICAgICAgICB9CiAgICAgICAgIC8vIENhbGxpbmcgZGlzY29ubmVjdENvbmRpdGlvbnMoKSBtYXkg
a2lsbCB1cyBpZiB0aGVyZSBhcmUgc3luY2Jhc2UgY29uZGl0aW9ucy4KQEAgLTIzNCwxNCArMjQw
LDE5IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW4KIAogICAgICAg
ICAvLyBDbGVhciB0YXJnZXQgbm93LCBiZWNhdXNlIGRpc2Nvbm5lY3RDb25kaXRpb25zIGNhbGxz
IHRhcmdldEVsZW1lbnQoKSB3aGljaCB3aWxsIHJlY3JlYXRlIHRoZSB0YXJnZXQgaWYgd2UgcmVt
b3ZlZCBpdCBzb29uZXIuIAogICAgICAgICBpZiAobV90YXJnZXRFbGVtZW50KQotICAgICAgICAg
ICAgcmVzZXRUYXJnZXRFbGVtZW50KCk7CisgICAgICAgICAgICByZXNldFRhcmdldEVsZW1lbnQo
RG9Ob3RSZXNvbHZlTmV3VGFyZ2V0KTsKIAotICAgICAgICBtX2F0dHJpYnV0ZU5hbWUgPSBhbnlR
TmFtZSgpOworICAgICAgICBzZXRBdHRyaWJ1dGVOYW1lKGFueVFOYW1lKCkpOwogICAgIH0KIAog
ICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwogfQotICAgCisKK2Jvb2wg
U1ZHU01JTEVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpCit7CisgICAgcmV0dXJuIGF0
dHJpYnV0ZU5hbWUoKSAhPSBhbnlRTmFtZSgpOworfQorCiBTTUlMVGltZSBTVkdTTUlMRWxlbWVu
dDo6cGFyc2VPZmZzZXRWYWx1ZShjb25zdCBTdHJpbmcmIGRhdGEpCiB7CiAgICAgYm9vbCBvazsK
QEAgLTQ2NSwxMiArNDc2LDEzIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQKICAgICAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVuZEF0dHIpCiAg
ICAgICAgICAgICBlbmRMaXN0Q2hhbmdlZChlbGFwc2VkKCkpOwogICAgICAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0dHIpIHsKLSAgICAgICAgICAgIG1f
YXR0cmlidXRlTmFtZSA9IGNvbnN0cnVjdFF1YWxpZmllZE5hbWUodGhpcywgZmFzdEdldEF0dHJp
YnV0ZShTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0dHIpKTsKKyAgICAgICAgICAgIHNldEF0dHJp
YnV0ZU5hbWUoY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRlKFNW
R05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpKTsKICAgICAgICAgICAgIGlmIChtX3RhcmdldEVs
ZW1lbnQpIHsKICAgICAgICAgICAgICAgICByZXNldFRhcmdldEVsZW1lbnQoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoYXR0ck5h
bWUubWF0Y2hlcyhYTGlua05hbWVzOjpocmVmQXR0cikpIHsKKyAgICAgICAgICAgIC8vIHRhcmdl
dEVsZW1lbnQgaXMgcmVzb2x2ZWQgbGF6aWx5IGJ1dCB0YXJnZXRFbGVtZW50KCkgd2lsbCBoYW5k
bGUgY2FsbGluZyB0YXJnZXRFbGVtZW50V2lsbENoYW5nZSgpLgogICAgICAgICAgICAgaWYgKFNW
R0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCkpCiAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmlt
YXRpb25FbGVtZW50c0Zyb21UYXJnZXQodGFyZ2V0RWxlbWVudCk7CiAgICAgICAgIH0KQEAgLTU0
MywxMCArNTU1LDE2IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmRpc2Nvbm5lY3RDb25kaXRpb24K
ICAgICB9CiB9CiAKLXZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2NoZWR1bGUoKQordm9pZCBTVkdT
TUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lKQogewotICAgIGlmIChtX3RpbWVDb250YWluZXIpCi0gICAgICAgIG1fdGltZUNvbnRh
aW5lci0+c2NoZWR1bGUodGhpcyk7CisgICAgaWYgKG1fdGltZUNvbnRhaW5lciAmJiBtX3Rhcmdl
dEVsZW1lbnQgJiYgbV9hdHRyaWJ1dGVOYW1lICE9IGF0dHJpYnV0ZU5hbWUpIHsKKyAgICAgICAg
aWYgKGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKQorICAgICAgICAgICAgbV90aW1lQ29udGFpbmVy
LT51bnNjaGVkdWxlKHRoaXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKKyAg
ICAgICAgbV9hdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZTsKKyAgICAgICAgaWYgKGhhc1Zh
bGlkQXR0cmlidXRlTmFtZSgpKQorICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5zY2hlZHVs
ZSh0aGlzLCBtX3RhcmdldEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7CiB9CiAKIFNWR0VsZW1lbnQq
IFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50KCkKQEAgLTU2OSw4ICs1ODcsMTUgQEAgU1ZH
RWxlbWVudCogU1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbgogICAgIHJldHVybiBtX3Rhcmdl
dEVsZW1lbnQ7CiB9CiAKLXZvaWQgU1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2hh
bmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqKQordm9pZCBTVkdTTUlM
RWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdl
dCwgU1ZHRWxlbWVudCogbmV3VGFyZ2V0KQogeworICAgIGlmIChtX3RpbWVDb250YWluZXIgJiYg
aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQpCisg
ICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcywgY3VycmVudFRhcmdl
dCwgbV9hdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgaWYgKG5ld1RhcmdldCkKKyAgICAgICAgICAg
IG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUodGhpcywgbmV3VGFyZ2V0LCBtX2F0dHJpYnV0ZU5h
bWUpOworICAgIH0KKwogICAgIC8vIE9ubHkgY2xlYXIgdGhlIGFuaW1hdGVkIHR5cGUsIGlmIHdl
IGhhZCBhIHRhcmdldCBiZWZvcmUuCiAgICAgaWYgKGN1cnJlbnRUYXJnZXQpCiAgICAgICAgIGNs
ZWFyQW5pbWF0ZWRUeXBlKGN1cnJlbnRUYXJnZXQpOwpAQCAtNTgwLDExICs2MDUsMTYgQEAgdm9p
ZCBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaAogICAgICAgICBlbmRlZEFjdGl2
ZUludGVydmFsKCk7CiB9CiAKLXZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2V0VGFyZ2V0RWxlbWVu
dCgpCit2b2lkIFNWR1NNSUxFbGVtZW50OjpyZXNldFRhcmdldEVsZW1lbnQoUmVzb2x2ZVRhcmdl
dCByZXNvbHZlVGFyZ2V0KQogewogICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS0+cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQodGhpcywgbV90YXJnZXRFbGVtZW50
KTsKICAgICB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShtX3RhcmdldEVsZW1lbnQsIDApOwogICAg
IG1fdGFyZ2V0RWxlbWVudCA9IDA7CisKKyAgICAvLyBJbW1lZGlhdGVseSByZXNvbHZlIHRoZSBu
ZXcgdGFyZ2V0RWxlbWVudCAoYW5kIGNhbGwgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UgaWYgbmVl
ZGVkKSBpbnN0ZWFkIG9mIGRvaW5nIGl0IGxhemlseS4KKyAgICBpZiAocmVzb2x2ZVRhcmdldCA9
PSBSZXNvbHZlTmV3VGFyZ2V0KQorICAgICAgICB0YXJnZXRFbGVtZW50KCk7CisKICAgICBhbmlt
YXRpb25BdHRyaWJ1dGVDaGFuZ2VkKCk7CiB9CiAKQEAgLTgyMyw3ICs4NTMsOSBAQCB2b2lkIFNW
R1NNSUxFbGVtZW50OjpyZXNvbHZlRmlyc3RJbnRlcnZhCiAgICAgICAgIG1faW50ZXJ2YWxFbmQg
PSBlbmQ7CiAgICAgICAgIG5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQod2FzVW5yZXNv
bHZlZCA/IE5ld0ludGVydmFsIDogRXhpc3RpbmdJbnRlcnZhbCk7CiAgICAgICAgIG1fbmV4dFBy
b2dyZXNzVGltZSA9IG1pbihtX25leHRQcm9ncmVzc1RpbWUsIG1faW50ZXJ2YWxCZWdpbik7Ci0g
ICAgICAgIHJlc2NoZWR1bGUoKTsKKworICAgICAgICBpZiAobV90aW1lQ29udGFpbmVyKQorICAg
ICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCk7CiAgICAg
fQogfQogCkBAIC04NzEsNyArOTAzLDkgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6YmVnaW5MaXN0
Q2hhbmdlZChTTQogICAgICAgICB9CiAgICAgfQogICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVs
YXBzZWQoKTsKLSAgICByZXNjaGVkdWxlKCk7CisKKyAgICBpZiAobV90aW1lQ29udGFpbmVyKQor
ICAgICAgICBtX3RpbWVDb250YWluZXItPm5vdGlmeUludGVydmFsc0NoYW5nZWQoKTsKIH0KIAog
dm9pZCBTVkdTTUlMRWxlbWVudDo6ZW5kTGlzdENoYW5nZWQoU01JTFRpbWUpCkBAIC04OTAsNyAr
OTI0LDkgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6ZW5kTGlzdENoYW5nZWQoU01JTAogICAgICAg
ICB9CiAgICAgfQogICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IGVsYXBzZWQ7Ci0gICAgcmVzY2hl
ZHVsZSgpOworCisgICAgaWYgKG1fdGltZUNvbnRhaW5lcikKKyAgICAgICAgbV90aW1lQ29udGFp
bmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6
OmNoZWNrUmVzdGFydChTTUlMVGltZSBlbGFwc2VkKQpAQCAtMTAxOCwxMCArMTA1NCwxMCBAQCBi
b29sIFNWR1NNSUxFbGVtZW50Ojpwcm9ncmVzcyhTTUlMVGltZSBlCiAgICAgQVNTRVJUKHJlc3Vs
dEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3RpbWVDb250YWluZXIpOwogICAgIEFTU0VSVChtX2lz
V2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwgfHwgbV9pbnRlcnZhbEJlZ2luLmlzRmluaXRlKCkpOwot
ICAgIAorCiAgICAgaWYgKCFtX2NvbmRpdGlvbnNDb25uZWN0ZWQpCiAgICAgICAgIGNvbm5lY3RD
b25kaXRpb25zKCk7Ci0gICAgCisKICAgICBpZiAoIW1faW50ZXJ2YWxCZWdpbi5pc0Zpbml0ZSgp
KSB7CiAgICAgICAgIEFTU0VSVChtX2FjdGl2ZVN0YXRlID09IEluYWN0aXZlKTsKICAgICAgICAg
bV9uZXh0UHJvZ3Jlc3NUaW1lID0gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKQEAgLTEwMzUsNyAr
MTA3MSw3IEBAIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OnByb2dyZXNzKFNNSUxUaW1lIGUKICAgICAg
ICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gbV9pbnRlcnZhbEJlZ2luOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgbV9wcmV2aW91c0ludGVydmFsQmVnaW4gPSBtX2lu
dGVydmFsQmVnaW47CiAKICAgICBpZiAobV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFsKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCShy
ZXZpc2lvbiAxMjkzOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKK2VudW0gUmVzb2x2ZVRh
cmdldCB7IERvTm90UmVzb2x2ZU5ld1RhcmdldCwgUmVzb2x2ZU5ld1RhcmdldCB9OworCiBjbGFz
cyBDb25kaXRpb25FdmVudExpc3RlbmVyOwogY2xhc3MgU01JTFRpbWVDb250YWluZXI7CiAKQEAg
LTUxLDEyICs1MywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENv
bnRhaW5lck5vZGUqKSBPVkVSUklERTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRB
dHRyaWJ1dGVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZU5h
bWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdlZCgpID0gMDsK
IAogICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4g
bV90aW1lQ29udGFpbmVyLmdldCgpOyB9CiAKICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50
KCk7Ci0gICAgdm9pZCByZXNldFRhcmdldEVsZW1lbnQoKTsKKyAgICB2b2lkIHJlc2V0VGFyZ2V0
RWxlbWVudChSZXNvbHZlVGFyZ2V0ID0gUmVzb2x2ZU5ld1RhcmdldCk7CiAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlTmFt
ZTsgfQogCiAgICAgdm9pZCBiZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKQEAgLTEzOCw3ICsxNDEs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2hlY2tSZXN0YXJ0KFNNSUxUaW1lIGVsYXBzZWQpOwog
ICAgIHZvaWQgYmVnaW5MaXN0Q2hhbmdlZChTTUlMVGltZSBldmVudFRpbWUpOwogICAgIHZvaWQg
ZW5kTGlzdENoYW5nZWQoU01JTFRpbWUgZXZlbnRUaW1lKTsKLSAgICB2b2lkIHJlc2NoZWR1bGUo
KTsKKworICAgIHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAK
ICAgICAvLyBUaGlzIHJlcHJlc2VudHMgY29uZGl0aW9ucyBvbiBlbGVtZW50cyBiZWdpbiBvciBl
bmQgbGlzdCB0aGF0IG5lZWQgdG8gYmUgcmVzb2x2ZWQgb24gcnVudGltZQogICAgIC8vIGZvciBl
eGFtcGxlIDxhbmltYXRlIGJlZ2luPSJvdGhlckVsZW1lbnQuYmVnaW4gKyA4czsgYnV0dG9uLmNs
aWNrIiAuLi4gLz4K
</data>

          </attachment>
      

    </bug>

</bugzilla>