<?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>106750</bug_id>
          
          <creation_ts>2013-01-13 19:13:47 -0800</creation_ts>
          <short_desc>String(new Date(2010,10,1)) is wrong in KRAT, YAKT</short_desc>
          <delta_ts>2024-12-01 19:11:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.8</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</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>0</everconfirmed>
          <reporter name="john">john.th507</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>john.th507</cc>
    
    <cc>karlcow</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>806047</commentid>
    <comment_count>0</comment_count>
    <who name="john">john.th507</who>
    <bug_when>2013-01-13 19:13:47 -0800</bug_when>
    <thetext>I&apos;ve tested on Safari 6.0.2 and latest Webkit nightly in Mountain Lion.
I&apos;m using Krasnoyarsk Standard Time (KRAT). I&apos;ve tested in China Standard Time (CST), the bug still exists.

new Date(2010, 10, 1) returns
Sun Oct 31 2010 01:00:00 GMT+0800 (KRAT)

This is not the date(Nov 1, 2010) I want.


When the year is not 2010, everything&apos;s fine. Like

new Date(2011, 10, 1) returns
Tue Nov 01 2011 00:00:00 GMT+0800 (KRAT)

new Date(2012, 10, 1) returns
Thu Nov 01 2012 00:00:00 GMT+0800 (KRAT)


I&apos;ve tested on Google Chrome 24.0.1312.45 beta (Mac) and Safari 5.1.5 (Windows), new Date(2010, 10, 1) returns Nov 1 as expected.
So I assume it&apos;s a JavaScriptCore bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806050</commentid>
    <comment_count>1</comment_count>
    <who name="john">john.th507</who>
    <bug_when>2013-01-13 19:24:59 -0800</bug_when>
    <thetext>I changed time zone a couple of times, in KRAT, the bug still exists. But in CST, I could no longer reproduce this bug on Safari 6.0.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806081</commentid>
    <comment_count>2</comment_count>
    <who name="john">john.th507</who>
    <bug_when>2013-01-13 22:08:42 -0800</bug_when>
    <thetext>According to
http://www.timeanddate.com/worldclock/timezone.html?n=372&amp;syear=2000
http://www.timeanddate.com/worldclock/timezone.html?n=372&amp;syear=2010

KRAT uses daylight saving time in 2000~2009, then after Sunday, 31 October, 03:00 of 2010, KRAT sets to UTC+8h permanently.

So if I set the hour to anything larger that 2, then
new Date(2010,10,1,2)

yields correct result
Mon Nov 01 2010 02:00:00 GMT+3100 (KRAST)

A big thank to @fossilet for pointing it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806093</commentid>
    <comment_count>3</comment_count>
    <who name="john">john.th507</who>
    <bug_when>2013-01-13 22:41:27 -0800</bug_when>
    <thetext>Perhaps, the Date function treats KRAT time differently before and after the DST change.
So when the time is before the Sunday, 31 October, 02:00 of 2010, like,
new Date(2010,10,1,1,59,59)

it returns
Sun Oct 31 2010 02:59:59 GMT+0800 (KRAT)

when adding one second to the previous example
new Date(2010,10,2)

it returns
Mon Nov 01 2010 02:00:00 GMT+3100 (KRAST)

While the date is right,
the timezone (GMT+3100) is not quite right (maybe), it should be GMT+0800.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893424</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-05-24 13:43:47 -0700</bug_when>
    <thetext>Updated the title – the Date object itself is fine, it&apos;s the toString conversion that is going wrong.

There are many things going wrong here.  ECMA requires that we do not take historically accurate timezone information into account, and to apply present DST rules to dates in the past.

In retrieving timezone information for a date, the system will provide historically accurate timezone information, which is not what we want.  So we try to extract timezone information from an &quot;equivalent&quot; year – a year that present timezone rules will be applied to, but where key characteristics match the year in question (specifically the equivalent year should have the same leap-year-ness, and should start on the same weekday since DST rules often key off this).

Here comes the first bug.  In trying to find an equivalent year, we assume that there is a leap year every four years, and based on this that adding 28 to the year will map to an equivalent year.  This is broken.

The second bug relates to the fact that the world ends in 2038 (for 32-bit machines).  As such we&apos;ll look for an equivalent year no later than the 28 year span 2010-2037.  Since 2010 is in the past, this restriction means that for timezones (including KRAT, YAKT) that have made DST changes since 2010, we&apos;ll fail to map to an equivalent date that follows present DST rules, and will incorrectly incorporate historically accurate information.

Third bug, in calculateDSTOffsetSimple, we do: &quot;if (diff &lt; 0) diff += secondsPerDay;&quot;.  This is converting the timezone offset -01:00 to +23:00, which is what makes the date leap forwards from just after midnight Oct 31 to just after midnight Nov 01, wham only an hour has passed.

Finally, in the YAKT timezone I notice that the dates pre the timezone change are shown as being YAKT, and the dates post the timezone change are shown as being YAKST - which is backwards.  I haven&apos;t yet debugged this last issue further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894201</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-05-27 19:49:28 -0700</bug_when>
    <thetext>Okay, the last two issues are closely related, and also ultimately rise from the 2038 problem.

In determining the local time offset, we separately calculate the offset from UTC to local standard time, and from standard time to DST.  We check for the DST offset being non-zero to indicate daylight saving being in affect.

The code does the &quot;+= secondsPerDay&quot; because in calculating the offset from standard to DST it sloppily just calculates the difference in hours/minutes/seconds – ignoring days/months/years, and assumes that if the clock has moved backwards that is because we&apos;ve rolled around past midnight.  This is probably usually true, but makes the code pretty fragile.

Since UTC calculation is not dependent on finding an &quot;equivalent year&quot; we always use the current year (assuming, as the spec does, that UTC offset for a given timezone never changes – which is of course wrong).  Since the DST offset should also be calculated using current data these should always be in sync – however the 2038 bug means that for years from 2010 we can&apos;t find an equivalent year, so we&apos;ll stick with the historic data.  This means we can end up using a mix of current (UTC) and historic (DST) data.

In 2010 KRAT summertime was at +8, and standard time was at +7.  Since mid 2011 standard time has been at +8 (and there has been no DST).  Comparing these values, we see the summer of 2010 as being standard time since +8 == +8 (whereas in reality it was DST), and the period that should be standard time we treat as being DST with an offset of -1 (resulting in the YAKT/YAKST timezone names being backwards).  The DST offset of -1 trips over the fragile &quot;+= secondsPerDay&quot;, and gets converted into a DST offset of +23.

The really crazy thing here is that we basically don&apos;t need to be doing any of this.  We&apos;re calculating the UTC-to-standard and standard-to-DST offsets separately, but they&apos;re always just added together to calculated the offset from UTC to local time – we just need to know this combined offset, and whether DST is in force at a given time.  But (on most systems) we can just get these values straight from localtime_r  – much of the work done to calculate these values is completely unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894210</commentid>
    <comment_count>6</comment_count>
      <attachid>203020</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-05-27 20:39:14 -0700</bug_when>
    <thetext>Created attachment 203020
Fix part 1 - simplify handling of local time offsets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894211</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-27 20:41:30 -0700</bug_when>
    <thetext>Attachment 203020 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/runtime/JSDateMath.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/DateMath.cpp&apos;, u&apos;Source/WTF/wtf/DateMath.h&apos;, u&apos;Source/WTF/wtf/GregorianDateTime.cpp&apos;]&quot; exit_code: 1
Source/WTF/wtf/DateMath.cpp:481:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WTF/wtf/DateMath.cpp:485:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WTF/wtf/DateMath.h:114:  Please declare integral type bitfields with either signed or unsigned.  [runtime/bitfields] [5]
Source/WTF/wtf/DateMath.h:115:  Please declare integral type bitfields with either signed or unsigned.  [runtime/bitfields] [5]
Total errors found: 4 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894217</commentid>
    <comment_count>8</comment_count>
      <attachid>203020</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-27 21:10:50 -0700</bug_when>
    <thetext>Comment on attachment 203020
Fix part 1 - simplify handling of local time offsets

Attachment 203020 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/703205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894231</commentid>
    <comment_count>9</comment_count>
      <attachid>203024</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-05-27 23:48:51 -0700</bug_when>
    <thetext>Created attachment 203024
Fix part 1 v2 - fix style issues, windows build fix pt 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894235</commentid>
    <comment_count>10</comment_count>
      <attachid>203024</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-28 00:13:57 -0700</bug_when>
    <thetext>Comment on attachment 203024
Fix part 1 v2 - fix style issues, windows build fix pt 1.

Attachment 203024 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/724144</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894243</commentid>
    <comment_count>11</comment_count>
      <attachid>203026</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-05-28 00:25:54 -0700</bug_when>
    <thetext>Created attachment 203026
Fix part 1 v3 - more windows build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894382</commentid>
    <comment_count>12</comment_count>
      <attachid>203026</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-28 09:26:52 -0700</bug_when>
    <thetext>Comment on attachment 203026
Fix part 1 v3 - more windows build fix

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

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        (JSC):

Please remove bogus lines like this one when buggy prepare-ChangeLog adds them.

&gt; Source/JavaScriptCore/ChangeLog:21
&gt; +        (JSC::VM::VM):

Please remove bogus lines like this one when buggy prepare-ChangeLog adds them.

&gt; Source/JavaScriptCore/runtime/JSDateMath.cpp:135
&gt; +static LocalTimeOffset getLocalTimeOffset(ExecState* exec, double ms)

WebKit coding style would call this localTimeOffset, not getLocalTimeOffset. By convention, we aim to use get exclusively for functions that use out arguments.

&gt; Source/JavaScriptCore/runtime/JSDateMath.cpp:197
&gt; +    // convert to UTC

Probably should dump this comment. The other function doesn’t have this.

&gt; Source/JavaScriptCore/runtime/JSDateMath.cpp:207
&gt; +    LocalTimeOffset localTimeOffset(false, 0);

Would be nicer to just have the LocalTimeOffset default constructor start with these values so that the (false, 0) can be omitted.

&gt; Source/JavaScriptCore/runtime/VM.h:107
&gt; +            : offset(false, 0)

This explicit initializer would not be needed if the default constructor for LocalTimeOffset existed, and I do suggest adding that. Also, this constructor sets the offset twice, because the reset function sets the offset.

&gt; Source/JavaScriptCore/runtime/VM.h:114
&gt; +            offset = LocalTimeOffset(false, 0);

It would be more readable to reset the two members individually.

If you do want to use struct assignment, I’d suggest using the default constructor here instead of the “false, 0”.

I’m not sure what members the reset function needs to affect; are these ever inspected without writing values into them? It seems that to invalidate the cache, only the key would need to be overwritten.

&gt; Source/WTF/ChangeLog:13
&gt; +        (WTF):

More bogus prepare-ChangeLog unhappiness.

&gt; Source/WTF/ChangeLog:28
&gt; +        (WTF):

More.

&gt; Source/WTF/wtf/DateMath.cpp:473
&gt; +    else if (localTimeSeconds &lt; 0) // Go ahead a day to make localtime work (does not work with 0)

Would be idiomatic to put a period on this comment.

&gt; Source/WTF/wtf/DateMath.cpp:475
&gt; +    // FIXME: time_t has a potential problem in 2038

Would be idiomatic to put a period on this comment.

&gt; Source/WTF/wtf/DateMath.cpp:476
&gt; +    time_t localTime = static_cast&lt;time_t&gt;(localTimeSeconds);

Seems unnecessary to involve time_t at all in the !HAVE(TM_GMTOFF) case; can we isolate this type cast to that side of the #if branch?

&gt; Source/WTF/wtf/DateMath.h:102
&gt; +struct LocalTimeOffset {

It would be better to have the struct at the top of the file rather than right before the function that returns it.

&gt; Source/WTF/wtf/DateMath.h:103
&gt; +    LocalTimeOffset(bool isDST, int offset)

Could just put &quot;= false&quot; and &quot;= 0&quot; here and make this a default constructor too.

&gt; Source/WTF/wtf/DateMath.h:109
&gt; +    bool operator==(const LocalTimeOffset&amp; other)

Typically we do != as well as ==, but I suppose it would be dead code.

&gt; Source/WTF/wtf/DateMath.h:118
&gt; +WTF_EXPORT_PRIVATE LocalTimeOffset calculateLocalTimeOffset(double);

Needs an argument name. I suggest “localTimeInMilliseconds” if that is accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894523</commentid>
    <comment_count>13</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-05-28 14:38:34 -0700</bug_when>
    <thetext>&gt; I’m not sure what members the reset function needs to affect; are these ever inspected without writing values into them? It seems that to invalidate the cache, only the key would need to be overwritten.

Since the cache covers a date range, I think the key is effectively formed by all of start, end and increment.  We could probably avoid resetting offset, but since this is set by the constructor it would be asymmetric not to reset it in the reset method.  I&apos;m inclined to leave as is...

&gt; &gt; Source/WTF/wtf/DateMath.cpp:476
&gt; &gt; +    time_t localTime = static_cast&lt;time_t&gt;(localTimeSeconds);
&gt; 
&gt; Seems unnecessary to involve time_t at all in the !HAVE(TM_GMTOFF) case; can we isolate this type cast to that side of the #if branch?

The time_t is actually necessary in the !HAVE(TM_GMTOFF) branch - if HAVE(TM_GMTOFF) we call getLocalTime directly, !HAVE(TM_GMTOFF) we call indirectly via calculateDSTOffset.  Structuring the code this way was deliberate to enable part 2 of this fix - which is to change how we 

&gt; &gt; Source/WTF/wtf/DateMath.h:103
&gt; &gt; +    LocalTimeOffset(bool isDST, int offset)
&gt; 
&gt; Could just put &quot;= false&quot; and &quot;= 0&quot; here and make this a default constructor too.

I added a default constructor.  Default parameters can led to bugs with implicit constructor calls. :-(

&gt; &gt; Source/WTF/wtf/DateMath.h:118
&gt; &gt; +WTF_EXPORT_PRIVATE LocalTimeOffset calculateLocalTimeOffset(double);
&gt; 
&gt; Needs an argument name. I suggest “localTimeInMilliseconds” if that is accurate.

*nod.  utcInMilliseconds.

All other issues fixed – committed revision 150833.
This should addresses the latter two issues outlined above, but does not yet fix the equivalent year calculation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894526</commentid>
    <comment_count>14</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-05-28 14:41:55 -0700</bug_when>
    <thetext>I don&apos;t think the version you landed had that last Windows build fix: http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/49132/steps/compile-webkit/logs/stdio and http://trac.webkit.org/changeset/150833/trunk/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894563</commentid>
    <comment_count>15</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-05-28 15:19:45 -0700</bug_when>
    <thetext>Also, you seem to have broken a test: http://build.webkit.org/results/Apple%20MountainLion%20Release%20WK1%20(Tests)/r150833%20(10397)/fast/js/date-DST-time-cusps-pretty-diff.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894568</commentid>
    <comment_count>16</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-05-28 15:23:12 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Also, you seem to have broken a test: http://build.webkit.org/results/Apple%20MountainLion%20Release%20WK1%20(Tests)/r150833%20(10397)/fast/js/date-DST-time-cusps-pretty-diff.html

I filed https://bugs.webkit.org/show_bug.cgi?id=116895 about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2078389</commentid>
    <comment_count>17</comment_count>
    <who name="Karl Dubost">karlcow</who>
    <bug_when>2024-12-01 19:03:35 -0800</bug_when>
    <thetext>new Date(2010, 10, 1)

Safari:     Mon Nov 01 2010 00:00:00 GMT+0900 (Japan Standard Time)
Firefox:   Mon Nov 01 2010 00:00:00 GMT+0900 (Japan Standard Time)
Chrome: Mon Nov 01 2010 00:00:00 GMT+0900 (Japan Standard Time)

This has been fixed elsewhere probably.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2078390</commentid>
    <comment_count>18</comment_count>
    <who name="Karl Dubost">karlcow</who>
    <bug_when>2024-12-01 19:04:22 -0800</bug_when>
    <thetext>Oh not tested in KRAT, or YAKT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2078391</commentid>
    <comment_count>19</comment_count>
    <who name="Karl Dubost">karlcow</who>
    <bug_when>2024-12-01 19:11:16 -0800</bug_when>
    <thetext>Ok tested with KRAT and still working.
All browsers are sending. 
Mon Nov 01 2010 00:00:00 GMT+0700 (Krasnoyarsk Standard Time)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2078392</commentid>
    <comment_count>20</comment_count>
    <who name="Karl Dubost">karlcow</who>
    <bug_when>2024-12-01 19:11:33 -0800</bug_when>
    <thetext>Ok tested with KRAT and still working.
All browsers are sending. 
Mon Nov 01 2010 00:00:00 GMT+0700 (Krasnoyarsk Standard Time)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203020</attachid>
            <date>2013-05-27 20:39:14 -0700</date>
            <delta_ts>2013-05-27 23:48:51 -0700</delta_ts>
            <desc>Fix part 1 - simplify handling of local time offsets</desc>
            <filename>106750.1.patch</filename>
            <type>text/plain</type>
            <size>18410</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEzLTA1LTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBTdHJpbmcobmV3IERhdGUoMjAxMCwxMCwxKSkgaXMgd3JvbmcgaW4gS1JBVCwg
WUFLVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2
NzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmly
c3QgcGFydCBvZiBhIGZpeCwgc2ltcGxmeSBkYXRlIGhhbmRsaW5nIGNvZGUsIGluc3RlYWQgb2Yg
b3BlcmF0aW5nIHNlcGFyYXRlbHkKKyAgICAgICAgb24gdGhlIFVUQy1zdGFuZGFyZCBhbmQgc3Rh
bmRhcmQtRFNUIG9mZnNldHMsIGp1c3QgZ2VuZXJhdGUgYSBjb21iaW5lZCBVVEMtbG9jYWwKKyAg
ICAgICAgb2Zmc2V0ICh0aGlzIGlzIHdoYXQgd2UgYWN0dWFsbHkgbmVlZCwgYW5kIHdoYXQgdGhl
IE9TIGdpdmVzIHVzKS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHA6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpnZXRMb2NhbFRpbWVPZmZzZXQpOgorICAgICAgICAg
ICAgLSByZW1vdmVkIGdldFVUQ09mZnNldCwgY29udmVydGVkIGdldERTVE9mZnNldCAtPiBnZXRM
b2NhbFRpbWVPZmZzZXQKKyAgICAgICAgKEpTQzo6Z3JlZ29yaWFuRGF0ZVRpbWVUb01TKToKKyAg
ICAgICAgKEpTQzo6bXNUb0dyZWdvcmlhbkRhdGVUaW1lKToKKyAgICAgICAgKEpTQzo6cGFyc2VE
YXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyk6CisgICAgICAgICAgICAtIGNhbGwgZ2V0
TG9jYWxUaW1lT2Zmc2V0IGluc3RlYWQgb2YgZ2V0VVRDT2Zmc2V0L2dldERTVE9mZnNldAorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAo
SlNDOjpWTTo6cmVzZXREYXRlQ2FjaGUpOgorICAgICAgICAgICAgLSByZW1vdmVkIGNhY2hlZFVU
Q09mZnNldCwgY29udmVydGVkIERTVE9mZnNldENhY2hlIC0+IExvY2FsVGltZU9mZnNldENhY2hl
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpMb2NhbFRpbWVPZmZzZXRD
YWNoZTo6TG9jYWxUaW1lT2Zmc2V0Q2FjaGUpOgorICAgICAgICAoSlNDOjpMb2NhbFRpbWVPZmZz
ZXRDYWNoZTo6cmVzZXQpOgorICAgICAgICAoTG9jYWxUaW1lT2Zmc2V0Q2FjaGUpOgorICAgICAg
ICAgICAgLSByZW1vdmVkIGNhY2hlZFVUQ09mZnNldCwgY29udmVydGVkIERTVE9mZnNldENhY2hl
IC0+IExvY2FsVGltZU9mZnNldENhY2hlCisKIDIwMTMtMDUtMjcgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNlIElDVV9JTkNMVURFX0RJUlMgaW4g
QmxhY2tCZXJyeSBDTWFrZSBmaWxlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNEYXRlTWF0aC5jcHAJKHJldmlzaW9uIDE1MDU5NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTQg
KzEyNywxNCBAQCBzdGF0aWMgaW5saW5lIGludCBtc1RvV2Vla0RheShkb3VibGUgbXMpCiAgICAg
cmV0dXJuIHdkOwogfQogCi0vLyBHZXQgdGhlIERTVCBvZmZzZXQgZm9yIHRoZSB0aW1lIHBhc3Nl
ZCBpbi4KKy8vIEdldCB0aGUgY29tYmluZWQgVVRDICsgRFNUIG9mZnNldCBmb3IgdGhlIHRpbWUg
cGFzc2VkIGluLgogLy8KIC8vIE5PVEU6IFRoZSBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhl
IGZhY3QgdGhhdCBubyB0aW1lIHpvbmVzIGhhdmUKIC8vIG1vcmUgdGhhbiBvbmUgZGF5bGlnaHQg
c2F2aW5ncyBvZmZzZXQgY2hhbmdlIHBlciBtb250aC4KIC8vIElmIHRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIHdpdGggTmFOIGl0IHJldHVybnMgTmFOLgotc3RhdGljIGRvdWJsZSBnZXREU1RPZmZz
ZXQoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgbXMsIGRvdWJsZSB1dGNPZmZzZXQpCitzdGF0aWMg
TG9jYWxUaW1lT2Zmc2V0IGdldExvY2FsVGltZU9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJs
ZSBtcykKIHsKLSAgICBEU1RPZmZzZXRDYWNoZSYgY2FjaGUgPSBleGVjLT52bSgpLmRzdE9mZnNl
dENhY2hlOworICAgIExvY2FsVGltZU9mZnNldENhY2hlJiBjYWNoZSA9IGV4ZWMtPnZtKCkubG9j
YWxUaW1lT2Zmc2V0Q2FjaGU7CiAgICAgZG91YmxlIHN0YXJ0ID0gY2FjaGUuc3RhcnQ7CiAgICAg
ZG91YmxlIGVuZCA9IGNhY2hlLmVuZDsKIApAQCAtMTQ2LDcgKzE0Niw3IEBAIHN0YXRpYyBkb3Vi
bGUgZ2V0RFNUT2Zmc2V0KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgZG91YmxlIG5ld0VuZCA9IGVu
ZCArIGNhY2hlLmluY3JlbWVudDsKIAogICAgICAgICBpZiAobXMgPD0gbmV3RW5kKSB7Ci0gICAg
ICAgICAgICBkb3VibGUgZW5kT2Zmc2V0ID0gY2FsY3VsYXRlRFNUT2Zmc2V0KG5ld0VuZCwgdXRj
T2Zmc2V0KTsKKyAgICAgICAgICAgIExvY2FsVGltZU9mZnNldCBlbmRPZmZzZXQgPSBjYWxjdWxh
dGVMb2NhbFRpbWVPZmZzZXQobmV3RW5kKTsKICAgICAgICAgICAgIGlmIChjYWNoZS5vZmZzZXQg
PT0gZW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9mZnNldCBhdCB0aGUg
ZW5kIG9mIHRoZSBuZXcgaW50ZXJ2YWwgc3RpbGwgbWF0Y2hlcwogICAgICAgICAgICAgICAgIC8v
IHRoZSBvZmZzZXQgaW4gdGhlIGNhY2hlLCB3ZSBncm93IHRoZSBjYWNoZWQgdGltZSBpbnRlcnZh
bApAQCAtMTU0LDM0ICsxNTQsMzMgQEAgc3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXQoRXhlY1N0
YXRlKiBleAogICAgICAgICAgICAgICAgIGNhY2hlLmVuZCA9IG5ld0VuZDsKICAgICAgICAgICAg
ICAgICBjYWNoZS5pbmNyZW1lbnQgPSBtc1Blck1vbnRoOwogICAgICAgICAgICAgICAgIHJldHVy
biBlbmRPZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBMb2NhbFRpbWVPZmZzZXQg
b2Zmc2V0ID0gY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KG1zKTsKKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgPT0gZW5kT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIG9mZnNldCBhdCB0
aGUgZ2l2ZW4gdGltZSBpcyBlcXVhbCB0byB0aGUgb2Zmc2V0IGF0IHRoZQorICAgICAgICAgICAg
ICAgIC8vIG5ldyBlbmQgb2YgdGhlIGludGVydmFsLCBzbyB0aGF0IG1lYW5zIHRoYXQgd2UndmUg
anVzdCBza2lwcGVkCisgICAgICAgICAgICAgICAgLy8gdGhlIHBvaW50IGluIHRpbWUgd2hlcmUg
dGhlIERTVCBvZmZzZXQgY2hhbmdlIG9jY3VycmVkLiBVcGRhdGVkCisgICAgICAgICAgICAgICAg
Ly8gdGhlIGludGVydmFsIHRvIHJlZmxlY3QgdGhpcyBhbmQgcmVzZXQgdGhlIGluY3JlbWVudC4K
KyAgICAgICAgICAgICAgICBjYWNoZS5zdGFydCA9IG1zOworICAgICAgICAgICAgICAgIGNhY2hl
LmVuZCA9IG5ld0VuZDsKKyAgICAgICAgICAgICAgICBjYWNoZS5pbmNyZW1lbnQgPSBtc1Blck1v
bnRoOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkb3VibGUgb2Zmc2V0
ID0gY2FsY3VsYXRlRFNUT2Zmc2V0KG1zLCB1dGNPZmZzZXQpOwotICAgICAgICAgICAgICAgIGlm
IChvZmZzZXQgPT0gZW5kT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvZmZz
ZXQgYXQgdGhlIGdpdmVuIHRpbWUgaXMgZXF1YWwgdG8gdGhlIG9mZnNldCBhdCB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gbmV3IGVuZCBvZiB0aGUgaW50ZXJ2YWwsIHNvIHRoYXQgbWVhbnMg
dGhhdCB3ZSd2ZSBqdXN0IHNraXBwZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHBvaW50
IGluIHRpbWUgd2hlcmUgdGhlIERTVCBvZmZzZXQgY2hhbmdlIG9jY3VycmVkLiBVcGRhdGVkCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSBpbnRlcnZhbCB0byByZWZsZWN0IHRoaXMgYW5kIHJl
c2V0IHRoZSBpbmNyZW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlLnN0YXJ0ID0gbXM7
Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlLmVuZCA9IG5ld0VuZDsKLSAgICAgICAgICAgICAg
ICAgICAgY2FjaGUuaW5jcmVtZW50ID0gbXNQZXJNb250aDsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW50ZXJ2YWwgY29udGFpbnMgYSBEU1Qg
b2Zmc2V0IGNoYW5nZSBhbmQgdGhlIGdpdmVuIHRpbWUgaXMKLSAgICAgICAgICAgICAgICAgICAg
Ly8gYmVmb3JlIGl0LiBBZGp1c3QgdGhlIGluY3JlbWVudCB0byBhdm9pZCBhIGxpbmVhciBzZWFy
Y2ggZm9yCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvZmZzZXQgY2hhbmdlIHBvaW50IGFu
ZCBjaGFuZ2UgdGhlIGVuZCBvZiB0aGUgaW50ZXJ2YWwuCi0gICAgICAgICAgICAgICAgICAgIGNh
Y2hlLmluY3JlbWVudCAvPSAzOwotICAgICAgICAgICAgICAgICAgICBjYWNoZS5lbmQgPSBtczsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBvZmZzZXQg
aW4gdGhlIGNhY2hlIGFuZCByZXR1cm4gaXQuCi0gICAgICAgICAgICAgICAgY2FjaGUub2Zmc2V0
ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICAg
ICAgLy8gVGhlIGludGVydmFsIGNvbnRhaW5zIGEgRFNUIG9mZnNldCBjaGFuZ2UgYW5kIHRoZSBn
aXZlbiB0aW1lIGlzCisgICAgICAgICAgICAgICAgLy8gYmVmb3JlIGl0LiBBZGp1c3QgdGhlIGlu
Y3JlbWVudCB0byBhdm9pZCBhIGxpbmVhciBzZWFyY2ggZm9yCisgICAgICAgICAgICAgICAgLy8g
dGhlIG9mZnNldCBjaGFuZ2UgcG9pbnQgYW5kIGNoYW5nZSB0aGUgZW5kIG9mIHRoZSBpbnRlcnZh
bC4KKyAgICAgICAgICAgICAgICBjYWNoZS5pbmNyZW1lbnQgLz0gMzsKKyAgICAgICAgICAgICAg
ICBjYWNoZS5lbmQgPSBtczsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0
aGUgb2Zmc2V0IGluIHRoZSBjYWNoZSBhbmQgcmV0dXJuIGl0LgorICAgICAgICAgICAgY2FjaGUu
b2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIC8vIENvbXB1dGUgdGhlIERTVCBvZmZzZXQgZm9yIHRoZSB0aW1lIGFuZCBz
aHJpbmsgdGhlIGNhY2hlIGludGVydmFsCiAgICAgLy8gdG8gb25seSBjb250YWluIHRoZSB0aW1l
LiBUaGlzIGFsbG93cyBmYXN0IHJlcGVhdGVkIERTVCBvZmZzZXQKICAgICAvLyBjb21wdXRhdGlv
bnMgZm9yIHRoZSBzYW1lIHRpbWUuCi0gICAgZG91YmxlIG9mZnNldCA9IGNhbGN1bGF0ZURTVE9m
ZnNldChtcywgdXRjT2Zmc2V0KTsKKyAgICBMb2NhbFRpbWVPZmZzZXQgb2Zmc2V0ID0gY2FsY3Vs
YXRlTG9jYWxUaW1lT2Zmc2V0KG1zKTsKICAgICBjYWNoZS5vZmZzZXQgPSBvZmZzZXQ7CiAgICAg
Y2FjaGUuc3RhcnQgPSBtczsKICAgICBjYWNoZS5lbmQgPSBtczsKQEAgLTE4OSwzMCArMTg4LDE1
IEBAIHN0YXRpYyBkb3VibGUgZ2V0RFNUT2Zmc2V0KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4g
b2Zmc2V0OwogfQogCi0vKgotICogR2V0IHRoZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcyBi
ZXR3ZWVuIHRoaXMgdGltZSB6b25lIGFuZCBVVEMgKEdNVCkKLSAqIE5PVCBpbmNsdWRpbmcgRFNU
LgotICovCi1kb3VibGUgZ2V0VVRDT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBkb3Vi
bGUgdXRjT2Zmc2V0ID0gZXhlYy0+dm0oKS5jYWNoZWRVVENPZmZzZXQ7Ci0gICAgaWYgKCFzdGQ6
OmlzbmFuKHV0Y09mZnNldCkpCi0gICAgICAgIHJldHVybiB1dGNPZmZzZXQ7Ci0gICAgZXhlYy0+
dm0oKS5jYWNoZWRVVENPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKLSAgICByZXR1cm4g
ZXhlYy0+dm0oKS5jYWNoZWRVVENPZmZzZXQ7Ci19Ci0KIGRvdWJsZSBncmVnb3JpYW5EYXRlVGlt
ZVRvTVMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYgdCwgZG91Ymxl
IG1pbGxpU2Vjb25kcywgYm9vbCBpbnB1dElzVVRDKQogewogICAgIGRvdWJsZSBkYXkgPSBkYXRl
VG9EYXlzRnJvbTE5NzAodC55ZWFyKCksIHQubW9udGgoKSwgdC5tb250aERheSgpKTsKICAgICBk
b3VibGUgbXMgPSB0aW1lVG9NUyh0LmhvdXIoKSwgdC5taW51dGUoKSwgdC5zZWNvbmQoKSwgbWls
bGlTZWNvbmRzKTsKICAgICBkb3VibGUgcmVzdWx0ID0gKGRheSAqIFdURjo6bXNQZXJEYXkpICsg
bXM7CiAKLSAgICBpZiAoIWlucHV0SXNVVEMpIHsgLy8gY29udmVydCB0byBVVEMKLSAgICAgICAg
ZG91YmxlIHV0Y09mZnNldCA9IGdldFVUQ09mZnNldChleGVjKTsKLSAgICAgICAgcmVzdWx0IC09
IHV0Y09mZnNldDsKLSAgICAgICAgcmVzdWx0IC09IGdldERTVE9mZnNldChleGVjLCByZXN1bHQs
IHV0Y09mZnNldCk7Ci0gICAgfQorICAgIC8vIGNvbnZlcnQgdG8gVVRDCisgICAgaWYgKCFpbnB1
dElzVVRDKQorICAgICAgICByZXN1bHQgLT0gZ2V0TG9jYWxUaW1lT2Zmc2V0KGV4ZWMsIHJlc3Vs
dCkub2Zmc2V0OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIyMCwxMiArMjA0LDEwIEBA
IGRvdWJsZSBncmVnb3JpYW5EYXRlVGltZVRvTVMoRXhlY1N0YXRlKiAKIC8vIGlucHV0IGlzIFVU
Qwogdm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgbXMs
IGJvb2wgb3V0cHV0SXNVVEMsIEdyZWdvcmlhbkRhdGVUaW1lJiB0bSkKIHsKLSAgICBkb3VibGUg
ZHN0T2ZmID0gMC4wOwotICAgIGRvdWJsZSB1dGNPZmYgPSAwLjA7CisgICAgTG9jYWxUaW1lT2Zm
c2V0IGxvY2FsVGltZU9mZnNldChmYWxzZSwgMCk7CiAgICAgaWYgKCFvdXRwdXRJc1VUQykgewot
ICAgICAgICB1dGNPZmYgPSBnZXRVVENPZmZzZXQoZXhlYyk7Ci0gICAgICAgIGRzdE9mZiA9IGdl
dERTVE9mZnNldChleGVjLCBtcywgdXRjT2ZmKTsKLSAgICAgICAgbXMgKz0gZHN0T2ZmICsgdXRj
T2ZmOworICAgICAgICBsb2NhbFRpbWVPZmZzZXQgPSBnZXRMb2NhbFRpbWVPZmZzZXQoZXhlYywg
bXMpOworICAgICAgICBtcyArPSBsb2NhbFRpbWVPZmZzZXQub2Zmc2V0OwogICAgIH0KIAogICAg
IGNvbnN0IGludCB5ZWFyID0gbXNUb1llYXIobXMpOwpAQCAtMjM3LDggKzIxOSw4IEBAIHZvaWQg
bXNUb0dyZWdvcmlhbkRhdGVUaW1lKEV4ZWNTdGF0ZSogZXgKICAgICB0bS5zZXRNb250aERheShk
YXlJbk1vbnRoRnJvbURheUluWWVhcih0bS55ZWFyRGF5KCksIGlzTGVhcFllYXIoeWVhcikpKTsK
ICAgICB0bS5zZXRNb250aChtb250aEZyb21EYXlJblllYXIodG0ueWVhckRheSgpLCBpc0xlYXBZ
ZWFyKHllYXIpKSk7CiAgICAgdG0uc2V0WWVhcih5ZWFyKTsKLSAgICB0bS5zZXRJc0RTVChkc3RP
ZmYgIT0gMC4wKTsKLSAgICB0bS5zZXRVdGNPZmZzZXQoc3RhdGljX2Nhc3Q8bG9uZz4oKGRzdE9m
ZiArIHV0Y09mZikgLyBXVEY6Om1zUGVyU2Vjb25kKSk7CisgICAgdG0uc2V0SXNEU1QobG9jYWxU
aW1lT2Zmc2V0LmlzRFNUKTsKKyAgICB0bS5zZXRVdGNPZmZzZXQobG9jYWxUaW1lT2Zmc2V0Lm9m
ZnNldCAvIFdURjo6bXNQZXJTZWNvbmQpOwogfQogCiBkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxU
ZXJtaW5hdGVkQ2hhcmFjdGVycyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGRhdGVTdHJp
bmcpCkBAIC0yNTEsMTEgKzIzMyw5IEBAIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0
ZWRDaGFyYWMKICAgICAgICAgcmV0dXJuIFFOYU47CiAKICAgICAvLyBmYWxsIGJhY2sgdG8gbG9j
YWwgdGltZXpvbmUKLSAgICBpZiAoIWhhdmVUWikgewotICAgICAgICBkb3VibGUgdXRjT2Zmc2V0
ID0gZ2V0VVRDT2Zmc2V0KGV4ZWMpOwotICAgICAgICBkb3VibGUgZHN0T2Zmc2V0ID0gZ2V0RFNU
T2Zmc2V0KGV4ZWMsIG1zLCB1dGNPZmZzZXQpOwotICAgICAgICBvZmZzZXQgPSAodXRjT2Zmc2V0
ICsgZHN0T2Zmc2V0KSAvIFdURjo6bXNQZXJNaW51dGU7Ci0gICAgfQorICAgIGlmICghaGF2ZVRa
KQorICAgICAgICBvZmZzZXQgPSBnZXRMb2NhbFRpbWVPZmZzZXQoZXhlYywgbXMpLm9mZnNldCAv
IFdURjo6bXNQZXJNaW51dGU7CisKICAgICByZXR1cm4gbXMgLSAob2Zmc2V0ICogV1RGOjptc1Bl
ck1pbnV0ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE1MDU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTcxLDcgKzE3MSw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKDApCiAjZW5k
aWYKICAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkKLSAgICAsIGNhY2hlZFVUQ09mZnNldChR
TmFOKQogICAgICwgbV9lbmFibGVkUHJvZmlsZXIoMCkKICAgICAsIG1fcmVnRXhwQ2FjaGUobmV3
IFJlZ0V4cENhY2hlKHRoaXMpKQogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTQyNSw4
ICs0MjQsNyBAQCBWTTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEoKQogCiB2b2lkIFZNOjpyZXNl
dERhdGVDYWNoZSgpCiB7Ci0gICAgY2FjaGVkVVRDT2Zmc2V0ID0gUU5hTjsKLSAgICBkc3RPZmZz
ZXRDYWNoZS5yZXNldCgpOworICAgIGxvY2FsVGltZU9mZnNldENhY2hlLnJlc2V0KCk7CiAgICAg
Y2FjaGVkRGF0ZVN0cmluZyA9IFN0cmluZygpOwogICAgIGNhY2hlZERhdGVTdHJpbmdWYWx1ZSA9
IFFOYU47CiAgICAgZGF0ZUluc3RhbmNlQ2FjaGUucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTUwNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1
ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9C
dW1wUG9pbnRlckFsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZEFycmF5Lmg+CkBAIC0xMDEsMjEgKzEwMiwyMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBzdHJ1Y3QgSGFzaFRhYmxlOwogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKIAotICAg
IHN0cnVjdCBEU1RPZmZzZXRDYWNoZSB7Ci0gICAgICAgIERTVE9mZnNldENhY2hlKCkKKyAgICBz
dHJ1Y3QgTG9jYWxUaW1lT2Zmc2V0Q2FjaGUgeworICAgICAgICBMb2NhbFRpbWVPZmZzZXRDYWNo
ZSgpCisgICAgICAgICAgICA6IG9mZnNldChmYWxzZSwgMCkKICAgICAgICAgewogICAgICAgICAg
ICAgcmVzZXQoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldCgpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG9mZnNldCA9IDAuMDsKKyAgICAgICAgICAgIG9mZnNldCA9
IExvY2FsVGltZU9mZnNldChmYWxzZSwgMCk7CiAgICAgICAgICAgICBzdGFydCA9IDAuMDsKICAg
ICAgICAgICAgIGVuZCA9IC0xLjA7CiAgICAgICAgICAgICBpbmNyZW1lbnQgPSAwLjA7CiAgICAg
ICAgIH0KIAotICAgICAgICBkb3VibGUgb2Zmc2V0OworICAgICAgICBMb2NhbFRpbWVPZmZzZXQg
b2Zmc2V0OwogICAgICAgICBkb3VibGUgc3RhcnQ7CiAgICAgICAgIGRvdWJsZSBlbmQ7CiAgICAg
ICAgIGRvdWJsZSBpbmNyZW1lbnQ7CkBAIC0zNzAsOCArMzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRl
ZE9iamVjdHM7CiAKLSAgICAgICAgZG91YmxlIGNhY2hlZFVUQ09mZnNldDsKLSAgICAgICAgRFNU
T2Zmc2V0Q2FjaGUgZHN0T2Zmc2V0Q2FjaGU7CisgICAgICAgIExvY2FsVGltZU9mZnNldENhY2hl
IGxvY2FsVGltZU9mZnNldENhY2hlOwogICAgICAgICAKICAgICAgICAgU3RyaW5nIGNhY2hlZERh
dGVTdHJpbmc7CiAgICAgICAgIGRvdWJsZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7CkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMTUwNzg1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzNiBAQAorMjAxMy0wNS0yNyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNs
b3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgU3RyaW5nKG5ldyBEYXRlKDIwMTAsMTAsMSkpIGlz
IHdyb25nIGluIEtSQVQsIFlBS1QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwNjc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpcnN0IHBhcnQgb2YgYSBmaXgsIHNpbXBsZnkgZGF0ZSBoYW5kbGluZyBj
b2RlLCBpbnN0ZWFkIG9mIG9wZXJhdGluZyBzZXBhcmF0ZWx5CisgICAgICAgIG9uIHRoZSBVVEMt
c3RhbmRhcmQgYW5kIHN0YW5kYXJkLURTVCBvZmZzZXRzLCBqdXN0IGdlbmVyYXRlIGEgY29tYmlu
ZWQgVVRDLWxvY2FsCisgICAgICAgIG9mZnNldCAodGhpcyBpcyB3aGF0IHdlIGFjdHVhbGx5IG5l
ZWQsIGFuZCB3aGF0IHRoZSBPUyBnaXZlcyB1cykuCisKKyAgICAgICAgKiB3dGYvRGF0ZU1hdGgu
Y3BwOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0KToK
KyAgICAgICAgKFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0KToKKyAgICAgICAgICAgIC0gbWFkZSBz
dGF0aWMsIG5vdyBub3QgY2FsbGVkIGZyb20gb3V0c2lkZSBvZiB0aGlzIGZpbGUuCisgICAgICAg
IChXVEY6OmNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldCk6CisgICAgICAgICAgICAtIFRoaXMgY29t
YmluZXMgdGhlIDIwMzggcmVsYXRlZCBhZGp1c3RtZW50IGZyb20gY2FsY3VsYXRlRFNUT2Zmc2V0
IHdpdGggdGhlCisgICAgICAgICAgICAgIG1heFVuaXhUaW1lIGFkanVzdG1lbnQgZnJvbSBjYWxj
dWxhdGVEU1RPZmZzZXRTaW1wbGUuIFRoZW4sIGlmIEhBVkUoVE1fR01UT0ZGKQorICAgICAgICAg
ICAgICBqdXN0IGNhbGwgZ2V0TG9jYWxUaW1lLCBpZiBub3QgdXNlIGNhbGN1bGF0ZVVUQ09mZnNl
dC9jYWxjdWxhdGVEU1RPZmZzZXQuCisgICAgICAgIChXVEY6OnBhcnNlRGF0ZUZyb21OdWxsVGVy
bWluYXRlZENoYXJhY3RlcnMpOgorICAgICAgICAgICAgLSBjYWxsIGNhbGN1bGF0ZUxvY2FsVGlt
ZU9mZnNldCBpbnN0ZWFkIG9mIGNhbGN1bGF0ZVVUQ09mZnNldC9jYWxjdWxhdGVEU1RPZmZzZXQK
KyAgICAgICAgKiB3dGYvRGF0ZU1hdGguaDoKKyAgICAgICAgKFdURjo6TG9jYWxUaW1lT2Zmc2V0
OjpMb2NhbFRpbWVPZmZzZXQpOgorICAgICAgICAoTG9jYWxUaW1lT2Zmc2V0KToKKyAgICAgICAg
KFdURjo6TG9jYWxUaW1lT2Zmc2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgICAgIC0gbmV3IHN0
cnVjdCB0eXBlLCBhIHR1cGxlIG9mIFVUQy1sb2NhbCBvZmZzZXQgJiBpc0RTVCBmbGFnLgorICAg
ICAgICAoV1RGKToKKyAgICAgICAgICAgIC0gcmVwbGFjZWQgY2FsY3VsYXRlVVRDT2Zmc2V0L2Nh
bGN1bGF0ZURTVE9mZnNldCB3aXRoIGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldAorICAgICAgICAq
IHd0Zi9HcmVnb3JpYW5EYXRlVGltZS5jcHA6CisgICAgICAgIChXVEY6OkdyZWdvcmlhbkRhdGVU
aW1lOjpzZXRUb0N1cnJlbnRMb2NhbFRpbWUpOgorICAgICAgICAgICAgLSBjYWxsIGNhbGN1bGF0
ZUxvY2FsVGltZU9mZnNldCBpbnN0ZWFkIG9mIGNhbGN1bGF0ZVVUQ09mZnNldC9jYWxjdWxhdGVE
U1RPZmZzZXQKKwogMjAxMy0wNS0yNyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBVc2UgSUNVX0lOQ0xVREVfRElSUyBpbiBCbGFja0JlcnJ5IENNYWtl
IGZpbGVzCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwCShyZXZpc2lvbiAxNTA1OTQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9EYXRlTWF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NCw3ICszNzQsOSBAQCBp
bnQgZXF1aXZhbGVudFllYXJGb3JEU1QoaW50IHllYXIpCiAgICAgcmV0dXJuIHllYXI7CiB9CiAK
LWludDMyX3QgY2FsY3VsYXRlVVRDT2Zmc2V0KCkKKyNpZiAhSEFWRShUTV9HTVRPRkYpCisKK3N0
YXRpYyBpbnQzMl90IGNhbGN1bGF0ZVVUQ09mZnNldCgpCiB7CiAjaWYgT1MoV0lORE9XUykKICAg
ICBUSU1FX1pPTkVfSU5GT1JNQVRJT04gdGltZVpvbmVJbmZvcm1hdGlvbjsKQEAgLTQxOCwyOCAr
NDIwLDIwIEBAIGludDMyX3QgY2FsY3VsYXRlVVRDT2Zmc2V0KCkKIC8qCiAgKiBHZXQgdGhlIERT
VCBvZmZzZXQgZm9yIHRoZSB0aW1lIHBhc3NlZCBpbi4KICAqLwotc3RhdGljIGRvdWJsZSBjYWxj
dWxhdGVEU1RPZmZzZXRTaW1wbGUoZG91YmxlIGxvY2FsVGltZVNlY29uZHMsIGRvdWJsZSB1dGNP
ZmZzZXQpCitzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZURTVE9mZnNldCh0aW1lX3QgbG9jYWxUaW1l
LCBkb3VibGUgdXRjT2Zmc2V0KQogewogI2lmIE9TKFdJTkNFKQogICAgIFVOVVNFRF9QQVJBTShs
b2NhbFRpbWVTZWNvbmRzKTsKICAgICBVTlVTRURfUEFSQU0odXRjT2Zmc2V0KTsKICAgICByZXR1
cm4gMDsKICNlbHNlCi0gICAgaWYgKGxvY2FsVGltZVNlY29uZHMgPiBtYXhVbml4VGltZSkKLSAg
ICAgICAgbG9jYWxUaW1lU2Vjb25kcyA9IG1heFVuaXhUaW1lOwotICAgIGVsc2UgaWYgKGxvY2Fs
VGltZVNlY29uZHMgPCAwKSAvLyBHbyBhaGVhZCBhIGRheSB0byBtYWtlIGxvY2FsdGltZSB3b3Jr
IChkb2VzIG5vdCB3b3JrIHdpdGggMCkKLSAgICAgICAgbG9jYWxUaW1lU2Vjb25kcyArPSBzZWNv
bmRzUGVyRGF5OwotCiAgICAgLy9pbnB1dCBpcyBVVEMgc28gd2UgaGF2ZSB0byBzaGlmdCBiYWNr
IHRvIGxvY2FsIHRpbWUgdG8gZGV0ZXJtaW5lIERTVCB0aHVzIHRoZSArIGdldFVUQ09mZnNldCgp
Ci0gICAgZG91YmxlIG9mZnNldFRpbWUgPSAobG9jYWxUaW1lU2Vjb25kcyAqIG1zUGVyU2Vjb25k
KSArIHV0Y09mZnNldDsKKyAgICBkb3VibGUgb2Zmc2V0VGltZSA9IChsb2NhbFRpbWUgKiBtc1Bl
clNlY29uZCkgKyB1dGNPZmZzZXQ7CiAKICAgICAvLyBPZmZzZXQgZnJvbSBVVEMgYnV0IGRvZXNu
J3QgaW5jbHVkZSBEU1Qgb2J2aW91c2x5CiAgICAgaW50IG9mZnNldEhvdXIgPSAgbXNUb0hvdXJz
KG9mZnNldFRpbWUpOwogICAgIGludCBvZmZzZXRNaW51dGUgPSAgbXNUb01pbnV0ZXMob2Zmc2V0
VGltZSk7CiAKLSAgICAvLyBGSVhNRTogdGltZV90IGhhcyBhIHBvdGVudGlhbCBwcm9ibGVtIGlu
IDIwMzgKLSAgICB0aW1lX3QgbG9jYWxUaW1lID0gc3RhdGljX2Nhc3Q8dGltZV90Pihsb2NhbFRp
bWVTZWNvbmRzKTsKLQogICAgIHRtIGxvY2FsVE07CiAgICAgZ2V0TG9jYWxUaW1lKCZsb2NhbFRp
bWUsICZsb2NhbFRNKTsKIApAQCAtNDUyLDEwICs0NDYsMTIgQEAgc3RhdGljIGRvdWJsZSBjYWxj
dWxhdGVEU1RPZmZzZXRTaW1wbGUoZAogI2VuZGlmCiB9CiAKLS8vIEdldCB0aGUgRFNUIG9mZnNl
dCwgZ2l2ZW4gYSB0aW1lIGluIFVUQwotZG91YmxlIGNhbGN1bGF0ZURTVE9mZnNldChkb3VibGUg
bXMsIGRvdWJsZSB1dGNPZmZzZXQpCisjZW5kaWYKKworLy8gUmV0dXJucyBjb21iaW5lZCBvZmZz
ZXQgaW4gbWlsbGlzZWNvbmQgKFVUQyArIERTVCkuCitMb2NhbFRpbWVPZmZzZXQgY2FsY3VsYXRl
TG9jYWxUaW1lT2Zmc2V0KGRvdWJsZSBtcykKIHsKLSAgICAvLyBPbiBNYWMgT1MgWCwgdGhlIGNh
bGwgdG8gbG9jYWx0aW1lIChzZWUgY2FsY3VsYXRlRFNUT2Zmc2V0U2ltcGxlKSB3aWxsIHJldHVy
biBoaXN0b3JpY2FsbHkgYWNjdXJhdGUKKyAgICAvLyBPbiBNYWMgT1MgWCwgdGhlIGNhbGwgdG8g
bG9jYWx0aW1lIChzZWUgY2FsY3VsYXRlRFNUT2Zmc2V0KSB3aWxsIHJldHVybiBoaXN0b3JpY2Fs
bHkgYWNjdXJhdGUKICAgICAvLyBEU1QgaW5mb3JtYXRpb24gKGUuZy4gTmV3IFplYWxhbmQgZGlk
IG5vdCBoYXZlIERTVCBmcm9tIDE5NDYgdG8gMTk3NCkgaG93ZXZlciB0aGUgSmF2YVNjcmlwdAog
ICAgIC8vIHN0YW5kYXJkIGV4cGxpY2l0bHkgZGljdGF0ZXMgdGhhdCBoaXN0b3JpY2FsIGluZm9y
bWF0aW9uIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCB3aGVuCiAgICAgLy8gZGV0ZXJtaW5pbmcg
RFNULiBGb3IgdGhpcyByZWFzb24gd2Ugc2hpZnQgYXdheSBmcm9tIHllYXJzIHRoYXQgbG9jYWx0
aW1lIGNhbiBoYW5kbGUgYnV0IHdvdWxkCkBAIC00NzEsNyArNDY3LDIzIEBAIGRvdWJsZSBjYWxj
dWxhdGVEU1RPZmZzZXQoZG91YmxlIG1zLCBkb3UKICAgICAgICAgbXMgPSAoZGF5ICogbXNQZXJE
YXkpICsgbXNUb01pbGxpc2Vjb25kcyhtcyk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNhbGN1bGF0
ZURTVE9mZnNldFNpbXBsZShtcyAvIG1zUGVyU2Vjb25kLCB1dGNPZmZzZXQpOworICAgIGRvdWJs
ZSBsb2NhbFRpbWVTZWNvbmRzID0gbXMgLyBtc1BlclNlY29uZDsKKyAgICBpZiAobG9jYWxUaW1l
U2Vjb25kcyA+IG1heFVuaXhUaW1lKQorICAgICAgICBsb2NhbFRpbWVTZWNvbmRzID0gbWF4VW5p
eFRpbWU7CisgICAgZWxzZSBpZiAobG9jYWxUaW1lU2Vjb25kcyA8IDApIC8vIEdvIGFoZWFkIGEg
ZGF5IHRvIG1ha2UgbG9jYWx0aW1lIHdvcmsgKGRvZXMgbm90IHdvcmsgd2l0aCAwKQorICAgICAg
ICBsb2NhbFRpbWVTZWNvbmRzICs9IHNlY29uZHNQZXJEYXk7CisgICAgLy8gRklYTUU6IHRpbWVf
dCBoYXMgYSBwb3RlbnRpYWwgcHJvYmxlbSBpbiAyMDM4CisgICAgdGltZV90IGxvY2FsVGltZSA9
IHN0YXRpY19jYXN0PHRpbWVfdD4obG9jYWxUaW1lU2Vjb25kcyk7CisKKyNpZiBIQVZFKFRNX0dN
VE9GRikKKyAgICB0bSBsb2NhbFRNOworICAgIGdldExvY2FsVGltZSgmbG9jYWxUaW1lLCAmbG9j
YWxUTSk7CisgICAgcmV0dXJuIExvY2FsVGltZU9mZnNldChsb2NhbFRNLnRtX2lzZHN0ICE9IDAs
IGxvY2FsVE0udG1fZ210b2ZmICogbXNQZXJTZWNvbmQpOworI2Vsc2UKKyAgICBkb3VibGUgdXRj
T2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7CisgICAgZG91YmxlIGRzdE9mZnNldCA9IGNh
bGN1bGF0ZURTVE9mZnNldChsb2NhbFRpbWUsIHV0Y09mZnNldCk7CisgICAgcmV0dXJuIExvY2Fs
VGltZU9mZnNldChkc3RPZmZzZXQgIT0gMCwgdXRjT2Zmc2V0ICsgZHN0T2Zmc2V0KTsKKyNlbmRp
ZgogfQogCiB2b2lkIGluaXRpYWxpemVEYXRlcygpCkBAIC0xMDYyLDExICsxMDc0LDkgQEAgZG91
YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhYwogICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKIAogICAgIC8vIGZhbGwgYmFj
ayB0byBsb2NhbCB0aW1lem9uZQotICAgIGlmICghaGF2ZVRaKSB7Ci0gICAgICAgIGRvdWJsZSB1
dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKLSAgICAgICAgZG91YmxlIGRzdE9mZnNl
dCA9IGNhbGN1bGF0ZURTVE9mZnNldChtcywgdXRjT2Zmc2V0KTsKLSAgICAgICAgb2Zmc2V0ID0g
KHV0Y09mZnNldCArIGRzdE9mZnNldCkgLyBtc1Blck1pbnV0ZTsKLSAgICB9CisgICAgaWYgKCFo
YXZlVFopCisgICAgICAgIG9mZnNldCA9IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChtcykub2Zm
c2V0IC8gbXNQZXJNaW51dGU7CisKICAgICByZXR1cm4gbXMgLSAob2Zmc2V0ICogbXNQZXJNaW51
dGUpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDE1MDU5NCkKKysrIFNvdXJjZS9X
VEYvd3RmL0RhdGVNYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDkgKzk5LDIzIEBAIFdURl9F
WFBPUlRfUFJJVkFURSBpbnQgZGF5SW5ZZWFyKGRvdWJsZSAKIFdURl9FWFBPUlRfUFJJVkFURSBp
bnQgbW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIsIGJvb2wgbGVhcFllYXIpOwogV1RG
X0VYUE9SVF9QUklWQVRFIGludCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihpbnQgZGF5SW5ZZWFy
LCBib29sIGxlYXBZZWFyKTsKIAotLy8gUmV0dXJucyBvZmZzZXQgbWlsbGlzZWNvbmRzIGZvciBV
VEMgYW5kIERTVC4KLVdURl9FWFBPUlRfUFJJVkFURSBpbnQzMl90IGNhbGN1bGF0ZVVUQ09mZnNl
dCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBjYWxjdWxhdGVEU1RPZmZzZXQoZG91Ymxl
IG1zLCBkb3VibGUgdXRjT2Zmc2V0KTsKK3N0cnVjdCBMb2NhbFRpbWVPZmZzZXQgeworICAgIExv
Y2FsVGltZU9mZnNldChib29sIGlzRFNULCBpbnQgb2Zmc2V0KQorICAgICAgICA6IGlzRFNUKGlz
RFNUKQorICAgICAgICAsIG9mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBMb2NhbFRpbWVPZmZzZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzRFNUID09IG90aGVyLmlzRFNUICYmIG9mZnNldCA9PSBvdGhlci5vZmZzZXQ7Cisg
ICAgfQorCisgICAgaW50IGlzRFNUIDogMTsKKyAgICBpbnQgb2Zmc2V0IDogMzE7Cit9OworLy8g
UmV0dXJucyBjb21iaW5lZCBvZmZzZXQgaW4gbWlsbGlzZWNvbmQgKFVUQyArIERTVCkuCitXVEZf
RVhQT1JUX1BSSVZBVEUgTG9jYWxUaW1lT2Zmc2V0IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChk
b3VibGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApAQCAtMTIyLDcgKzEzNiw3IEBAIHVzaW5n
IFdURjo6bXNUb0hvdXJzOwogdXNpbmcgV1RGOjpzZWNvbmRzUGVyTWludXRlOwogdXNpbmcgV1RG
OjpwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzOwogdXNpbmcgV1RGOjptYWtl
UkZDMjgyMkRhdGVTdHJpbmc7Ci11c2luZyBXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldDsKLXVzaW5n
IFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0OwordXNpbmcgV1RGOjpMb2NhbFRpbWVPZmZzZXQ7Cit1
c2luZyBXVEY6OmNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldDsKIAogI2VuZGlmIC8vIERhdGVNYXRo
X2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dyZWdvcmlhbkRhdGVUaW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HcmVnb3JpYW5EYXRlVGltZS5jcHAJKHJldmlzaW9uIDE1MDU5
NCkKKysrIFNvdXJjZS9XVEYvd3RmL0dyZWdvcmlhbkRhdGVUaW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsOSArNzgsNyBAQCB2b2lkIEdyZWdvcmlhbkRhdGVUaW1lOjpzZXRUb0N1cnJlbnRM
b2NhCiAjaWYgSEFWRShUTV9HTVRPRkYpCiAgICAgbV91dGNPZmZzZXQgPSBsb2NhbFRNLnRtX2dt
dG9mZjsKICNlbHNlCi0gICAgaW50IHV0Y09mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgpOwot
ICAgIHV0Y09mZnNldCArPSBjYWxjdWxhdGVEU1RPZmZzZXQobG9jYWxUaW1lICogbXNQZXJTZWNv
bmQsIHV0Y09mZnNldCk7Ci0gICAgbV91dGNPZmZzZXQgPSB1dGNPZmZzZXQgLyBtc1BlclNlY29u
ZDsKKyAgICBtX3V0Y09mZnNldCA9IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChsb2NhbFRpbWUg
KiBtc1BlclNlY29uZCkub2Zmc2V0IC8gbXNQZXJTZWNvbmQ7CiAjZW5kaWYKICNlbmRpZgogfQo=
</data>
<flag name="commit-queue"
          id="224476"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203024</attachid>
            <date>2013-05-27 23:48:51 -0700</date>
            <delta_ts>2013-05-28 00:25:54 -0700</delta_ts>
            <desc>Fix part 1 v2 - fix style issues, windows build fix pt 1.</desc>
            <filename>106750.2.patch</filename>
            <type>text/plain</type>
            <size>19489</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEzLTA1LTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBTdHJpbmcobmV3IERhdGUoMjAxMCwxMCwxKSkgaXMgd3JvbmcgaW4gS1JBVCwg
WUFLVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2
NzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmly
c3QgcGFydCBvZiBhIGZpeCwgc2ltcGxmeSBkYXRlIGhhbmRsaW5nIGNvZGUsIGluc3RlYWQgb2Yg
b3BlcmF0aW5nIHNlcGFyYXRlbHkKKyAgICAgICAgb24gdGhlIFVUQy1zdGFuZGFyZCBhbmQgc3Rh
bmRhcmQtRFNUIG9mZnNldHMsIGp1c3QgZ2VuZXJhdGUgYSBjb21iaW5lZCBVVEMtbG9jYWwKKyAg
ICAgICAgb2Zmc2V0ICh0aGlzIGlzIHdoYXQgd2UgYWN0dWFsbHkgbmVlZCwgYW5kIHdoYXQgdGhl
IE9TIGdpdmVzIHVzKS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHA6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpnZXRMb2NhbFRpbWVPZmZzZXQpOgorICAgICAgICAg
ICAgLSByZW1vdmVkIGdldFVUQ09mZnNldCwgY29udmVydGVkIGdldERTVE9mZnNldCAtPiBnZXRM
b2NhbFRpbWVPZmZzZXQKKyAgICAgICAgKEpTQzo6Z3JlZ29yaWFuRGF0ZVRpbWVUb01TKToKKyAg
ICAgICAgKEpTQzo6bXNUb0dyZWdvcmlhbkRhdGVUaW1lKToKKyAgICAgICAgKEpTQzo6cGFyc2VE
YXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyk6CisgICAgICAgICAgICAtIGNhbGwgZ2V0
TG9jYWxUaW1lT2Zmc2V0IGluc3RlYWQgb2YgZ2V0VVRDT2Zmc2V0L2dldERTVE9mZnNldAorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAo
SlNDOjpWTTo6cmVzZXREYXRlQ2FjaGUpOgorICAgICAgICAgICAgLSByZW1vdmVkIGNhY2hlZFVU
Q09mZnNldCwgY29udmVydGVkIERTVE9mZnNldENhY2hlIC0+IExvY2FsVGltZU9mZnNldENhY2hl
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpMb2NhbFRpbWVPZmZzZXRD
YWNoZTo6TG9jYWxUaW1lT2Zmc2V0Q2FjaGUpOgorICAgICAgICAoSlNDOjpMb2NhbFRpbWVPZmZz
ZXRDYWNoZTo6cmVzZXQpOgorICAgICAgICAoTG9jYWxUaW1lT2Zmc2V0Q2FjaGUpOgorICAgICAg
ICAgICAgLSByZW1vdmVkIGNhY2hlZFVUQ09mZnNldCwgY29udmVydGVkIERTVE9mZnNldENhY2hl
IC0+IExvY2FsVGltZU9mZnNldENhY2hlCisKIDIwMTMtMDUtMjcgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNlIElDVV9JTkNMVURFX0RJUlMgaW4g
QmxhY2tCZXJyeSBDTWFrZSBmaWxlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmVFeHBvcnRHZW5lcmF0b3IvSmF2YVNjcmlw
dENvcmVFeHBvcnRzLmRlZi5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRvci9KYXZh
U2NyaXB0Q29yZUV4cG9ydHMuZGVmLmluCShyZXZpc2lvbiAxNTA1OTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdl
bmVyYXRvci9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTksOSArMTE5LDcgQEAgRVhQT1JUUwogICAgID9idWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFs
QERlY2ltYWxOdW1iZXJAV1RGQEBRQkVJWFoKICAgICA/YnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhw
b25lbnRpYWxARGVjaW1hbE51bWJlckBXVEZAQFFCRUlYWgogICAgID9ieXRlQ29tcGlsZUBZYXJy
QEpTQ0BAWUE/QVY/JFBhc3NPd25QdHJAVUJ5dGVjb2RlUGF0dGVybkBZYXJyQEpTQ0BAQFdURkBA
QUFVWWFyclBhdHRlcm5AMTJAUEFWQnVtcFBvaW50ZXJBbGxvY2F0b3JANEBAWgotICAgID9jYWxj
dWxhdGVEU1RPZmZzZXRAV1RGQEBZQU5OTkBaCiAgICAgP2NhbGN1bGF0ZVN0cmluZ0hhc2hBbmRM
ZW5ndGhGcm9tVVRGOE1hc2tpbmdUb3A4Qml0c0BVbmljb2RlQFdURkBAWUFJUEJEMEFBSTFAWgot
ICAgID9jYWxjdWxhdGVVVENPZmZzZXRAV1RGQEBZQUhYWgogICAgID9jYWxjdWxhdGVkRnVuY3Rp
b25OYW1lQERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWU3RyaW5nQFdURkBAWFoKICAgICA/
Y2FsbEBKU0NAQFlBP0FWSlNWYWx1ZUAxQFBBVkV4ZWNTdGF0ZUAxQFYyMUBXNENhbGxUeXBlQDFA
QUJUQ2FsbERhdGFAMUAxQUJWQXJnTGlzdEAxQEBaCiAgICAgP2NhbGxIb3N0RnVuY3Rpb25Bc0Nv
bnN0cnVjdG9yQEpTQ0BAWUlfSlBBVkV4ZWNTdGF0ZUAxQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAkocmV2aXNpb24gMTUwNTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNywxNCArMTI3LDE0IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1zVG9XZWVrRGF5KGRv
dWJsZSBtcykKICAgICByZXR1cm4gd2Q7CiB9CiAKLS8vIEdldCB0aGUgRFNUIG9mZnNldCBmb3Ig
dGhlIHRpbWUgcGFzc2VkIGluLgorLy8gR2V0IHRoZSBjb21iaW5lZCBVVEMgKyBEU1Qgb2Zmc2V0
IGZvciB0aGUgdGltZSBwYXNzZWQgaW4uCiAvLwogLy8gTk9URTogVGhlIGltcGxlbWVudGF0aW9u
IHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG5vIHRpbWUgem9uZXMgaGF2ZQogLy8gbW9yZSB0aGFu
IG9uZSBkYXlsaWdodCBzYXZpbmdzIG9mZnNldCBjaGFuZ2UgcGVyIG1vbnRoLgogLy8gSWYgdGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBOYU4gaXQgcmV0dXJucyBOYU4uCi1zdGF0aWMgZG91
YmxlIGdldERTVE9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBtcywgZG91YmxlIHV0Y09m
ZnNldCkKK3N0YXRpYyBMb2NhbFRpbWVPZmZzZXQgZ2V0TG9jYWxUaW1lT2Zmc2V0KEV4ZWNTdGF0
ZSogZXhlYywgZG91YmxlIG1zKQogewotICAgIERTVE9mZnNldENhY2hlJiBjYWNoZSA9IGV4ZWMt
PnZtKCkuZHN0T2Zmc2V0Q2FjaGU7CisgICAgTG9jYWxUaW1lT2Zmc2V0Q2FjaGUmIGNhY2hlID0g
ZXhlYy0+dm0oKS5sb2NhbFRpbWVPZmZzZXRDYWNoZTsKICAgICBkb3VibGUgc3RhcnQgPSBjYWNo
ZS5zdGFydDsKICAgICBkb3VibGUgZW5kID0gY2FjaGUuZW5kOwogCkBAIC0xNDYsNyArMTQ2LDcg
QEAgc3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXQoRXhlY1N0YXRlKiBleAogICAgICAgICBkb3Vi
bGUgbmV3RW5kID0gZW5kICsgY2FjaGUuaW5jcmVtZW50OwogCiAgICAgICAgIGlmIChtcyA8PSBu
ZXdFbmQpIHsKLSAgICAgICAgICAgIGRvdWJsZSBlbmRPZmZzZXQgPSBjYWxjdWxhdGVEU1RPZmZz
ZXQobmV3RW5kLCB1dGNPZmZzZXQpOworICAgICAgICAgICAgTG9jYWxUaW1lT2Zmc2V0IGVuZE9m
ZnNldCA9IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChuZXdFbmQpOwogICAgICAgICAgICAgaWYg
KGNhY2hlLm9mZnNldCA9PSBlbmRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
b2Zmc2V0IGF0IHRoZSBlbmQgb2YgdGhlIG5ldyBpbnRlcnZhbCBzdGlsbCBtYXRjaGVzCiAgICAg
ICAgICAgICAgICAgLy8gdGhlIG9mZnNldCBpbiB0aGUgY2FjaGUsIHdlIGdyb3cgdGhlIGNhY2hl
ZCB0aW1lIGludGVydmFsCkBAIC0xNTQsMzQgKzE1NCwzMyBAQCBzdGF0aWMgZG91YmxlIGdldERT
VE9mZnNldChFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAgY2FjaGUuZW5kID0gbmV3RW5k
OwogICAgICAgICAgICAgICAgIGNhY2hlLmluY3JlbWVudCA9IG1zUGVyTW9udGg7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVuZE9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExv
Y2FsVGltZU9mZnNldCBvZmZzZXQgPSBjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQobXMpOworICAg
ICAgICAgICAgaWYgKG9mZnNldCA9PSBlbmRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGUgb2Zmc2V0IGF0IHRoZSBnaXZlbiB0aW1lIGlzIGVxdWFsIHRvIHRoZSBvZmZzZXQgYXQgdGhl
CisgICAgICAgICAgICAgICAgLy8gbmV3IGVuZCBvZiB0aGUgaW50ZXJ2YWwsIHNvIHRoYXQgbWVh
bnMgdGhhdCB3ZSd2ZSBqdXN0IHNraXBwZWQKKyAgICAgICAgICAgICAgICAvLyB0aGUgcG9pbnQg
aW4gdGltZSB3aGVyZSB0aGUgRFNUIG9mZnNldCBjaGFuZ2Ugb2NjdXJyZWQuIFVwZGF0ZWQKKyAg
ICAgICAgICAgICAgICAvLyB0aGUgaW50ZXJ2YWwgdG8gcmVmbGVjdCB0aGlzIGFuZCByZXNldCB0
aGUgaW5jcmVtZW50LgorICAgICAgICAgICAgICAgIGNhY2hlLnN0YXJ0ID0gbXM7CisgICAgICAg
ICAgICAgICAgY2FjaGUuZW5kID0gbmV3RW5kOworICAgICAgICAgICAgICAgIGNhY2hlLmluY3Jl
bWVudCA9IG1zUGVyTW9udGg7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGRvdWJsZSBvZmZzZXQgPSBjYWxjdWxhdGVEU1RPZmZzZXQobXMsIHV0Y09mZnNldCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBlbmRPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIG9mZnNldCBhdCB0aGUgZ2l2ZW4gdGltZSBpcyBlcXVhbCB0byB0aGUgb2Zmc2V0
IGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBuZXcgZW5kIG9mIHRoZSBpbnRlcnZhbCwg
c28gdGhhdCBtZWFucyB0aGF0IHdlJ3ZlIGp1c3Qgc2tpcHBlZAotICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgcG9pbnQgaW4gdGltZSB3aGVyZSB0aGUgRFNUIG9mZnNldCBjaGFuZ2Ugb2NjdXJy
ZWQuIFVwZGF0ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGludGVydmFsIHRvIHJlZmxl
Y3QgdGhpcyBhbmQgcmVzZXQgdGhlIGluY3JlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgY2Fj
aGUuc3RhcnQgPSBtczsKLSAgICAgICAgICAgICAgICAgICAgY2FjaGUuZW5kID0gbmV3RW5kOwot
ICAgICAgICAgICAgICAgICAgICBjYWNoZS5pbmNyZW1lbnQgPSBtc1Blck1vbnRoOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpbnRlcnZhbCBj
b250YWlucyBhIERTVCBvZmZzZXQgY2hhbmdlIGFuZCB0aGUgZ2l2ZW4gdGltZSBpcwotICAgICAg
ICAgICAgICAgICAgICAvLyBiZWZvcmUgaXQuIEFkanVzdCB0aGUgaW5jcmVtZW50IHRvIGF2b2lk
IGEgbGluZWFyIHNlYXJjaCBmb3IKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG9mZnNldCBj
aGFuZ2UgcG9pbnQgYW5kIGNoYW5nZSB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbC4KLSAgICAgICAg
ICAgICAgICAgICAgY2FjaGUuaW5jcmVtZW50IC89IDM7Ci0gICAgICAgICAgICAgICAgICAgIGNh
Y2hlLmVuZCA9IG1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBVcGRh
dGUgdGhlIG9mZnNldCBpbiB0aGUgY2FjaGUgYW5kIHJldHVybiBpdC4KLSAgICAgICAgICAgICAg
ICBjYWNoZS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsK
KyAgICAgICAgICAgICAgICAvLyBUaGUgaW50ZXJ2YWwgY29udGFpbnMgYSBEU1Qgb2Zmc2V0IGNo
YW5nZSBhbmQgdGhlIGdpdmVuIHRpbWUgaXMKKyAgICAgICAgICAgICAgICAvLyBiZWZvcmUgaXQu
IEFkanVzdCB0aGUgaW5jcmVtZW50IHRvIGF2b2lkIGEgbGluZWFyIHNlYXJjaCBmb3IKKyAgICAg
ICAgICAgICAgICAvLyB0aGUgb2Zmc2V0IGNoYW5nZSBwb2ludCBhbmQgY2hhbmdlIHRoZSBlbmQg
b2YgdGhlIGludGVydmFsLgorICAgICAgICAgICAgICAgIGNhY2hlLmluY3JlbWVudCAvPSAzOwor
ICAgICAgICAgICAgICAgIGNhY2hlLmVuZCA9IG1zOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gVXBkYXRlIHRoZSBvZmZzZXQgaW4gdGhlIGNhY2hlIGFuZCByZXR1cm4gaXQuCisgICAg
ICAgICAgICBjYWNoZS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ29tcHV0ZSB0aGUgRFNUIG9mZnNldCBmb3Ig
dGhlIHRpbWUgYW5kIHNocmluayB0aGUgY2FjaGUgaW50ZXJ2YWwKICAgICAvLyB0byBvbmx5IGNv
bnRhaW4gdGhlIHRpbWUuIFRoaXMgYWxsb3dzIGZhc3QgcmVwZWF0ZWQgRFNUIG9mZnNldAogICAg
IC8vIGNvbXB1dGF0aW9ucyBmb3IgdGhlIHNhbWUgdGltZS4KLSAgICBkb3VibGUgb2Zmc2V0ID0g
Y2FsY3VsYXRlRFNUT2Zmc2V0KG1zLCB1dGNPZmZzZXQpOworICAgIExvY2FsVGltZU9mZnNldCBv
ZmZzZXQgPSBjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQobXMpOwogICAgIGNhY2hlLm9mZnNldCA9
IG9mZnNldDsKICAgICBjYWNoZS5zdGFydCA9IG1zOwogICAgIGNhY2hlLmVuZCA9IG1zOwpAQCAt
MTg5LDMwICsxODgsMTUgQEAgc3RhdGljIGRvdWJsZSBnZXREU1RPZmZzZXQoRXhlY1N0YXRlKiBl
eAogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLS8qCi0gKiBHZXQgdGhlIGRpZmZlcmVuY2UgaW4g
bWlsbGlzZWNvbmRzIGJldHdlZW4gdGhpcyB0aW1lIHpvbmUgYW5kIFVUQyAoR01UKQotICogTk9U
IGluY2x1ZGluZyBEU1QuCi0gKi8KLWRvdWJsZSBnZXRVVENPZmZzZXQoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBleGVjLT52bSgpLmNhY2hlZFVUQ09mZnNldDsK
LSAgICBpZiAoIXN0ZDo6aXNuYW4odXRjT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIHV0Y09mZnNl
dDsKLSAgICBleGVjLT52bSgpLmNhY2hlZFVUQ09mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgp
OwotICAgIHJldHVybiBleGVjLT52bSgpLmNhY2hlZFVUQ09mZnNldDsKLX0KLQogZG91YmxlIGdy
ZWdvcmlhbkRhdGVUaW1lVG9NUyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lJiB0LCBkb3VibGUgbWlsbGlTZWNvbmRzLCBib29sIGlucHV0SXNVVEMpCiB7CiAgICAgZG91
YmxlIGRheSA9IGRhdGVUb0RheXNGcm9tMTk3MCh0LnllYXIoKSwgdC5tb250aCgpLCB0Lm1vbnRo
RGF5KCkpOwogICAgIGRvdWJsZSBtcyA9IHRpbWVUb01TKHQuaG91cigpLCB0Lm1pbnV0ZSgpLCB0
LnNlY29uZCgpLCBtaWxsaVNlY29uZHMpOwogICAgIGRvdWJsZSByZXN1bHQgPSAoZGF5ICogV1RG
Ojptc1BlckRheSkgKyBtczsKIAotICAgIGlmICghaW5wdXRJc1VUQykgeyAvLyBjb252ZXJ0IHRv
IFVUQwotICAgICAgICBkb3VibGUgdXRjT2Zmc2V0ID0gZ2V0VVRDT2Zmc2V0KGV4ZWMpOwotICAg
ICAgICByZXN1bHQgLT0gdXRjT2Zmc2V0OwotICAgICAgICByZXN1bHQgLT0gZ2V0RFNUT2Zmc2V0
KGV4ZWMsIHJlc3VsdCwgdXRjT2Zmc2V0KTsKLSAgICB9CisgICAgLy8gY29udmVydCB0byBVVEMK
KyAgICBpZiAoIWlucHV0SXNVVEMpCisgICAgICAgIHJlc3VsdCAtPSBnZXRMb2NhbFRpbWVPZmZz
ZXQoZXhlYywgcmVzdWx0KS5vZmZzZXQ7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjIw
LDEyICsyMDQsMTAgQEAgZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhFeGVjU3RhdGUqIAog
Ly8gaW5wdXQgaXMgVVRDCiB2b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGltZShFeGVjU3RhdGUqIGV4
ZWMsIGRvdWJsZSBtcywgYm9vbCBvdXRwdXRJc1VUQywgR3JlZ29yaWFuRGF0ZVRpbWUmIHRtKQog
ewotICAgIGRvdWJsZSBkc3RPZmYgPSAwLjA7Ci0gICAgZG91YmxlIHV0Y09mZiA9IDAuMDsKKyAg
ICBMb2NhbFRpbWVPZmZzZXQgbG9jYWxUaW1lT2Zmc2V0KGZhbHNlLCAwKTsKICAgICBpZiAoIW91
dHB1dElzVVRDKSB7Ci0gICAgICAgIHV0Y09mZiA9IGdldFVUQ09mZnNldChleGVjKTsKLSAgICAg
ICAgZHN0T2ZmID0gZ2V0RFNUT2Zmc2V0KGV4ZWMsIG1zLCB1dGNPZmYpOwotICAgICAgICBtcyAr
PSBkc3RPZmYgKyB1dGNPZmY7CisgICAgICAgIGxvY2FsVGltZU9mZnNldCA9IGdldExvY2FsVGlt
ZU9mZnNldChleGVjLCBtcyk7CisgICAgICAgIG1zICs9IGxvY2FsVGltZU9mZnNldC5vZmZzZXQ7
CiAgICAgfQogCiAgICAgY29uc3QgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7CkBAIC0yMzcsOCAr
MjE5LDggQEAgdm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoRXhlY1N0YXRlKiBleAogICAgIHRt
LnNldE1vbnRoRGF5KGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHRtLnllYXJEYXkoKSwgaXNMZWFw
WWVhcih5ZWFyKSkpOwogICAgIHRtLnNldE1vbnRoKG1vbnRoRnJvbURheUluWWVhcih0bS55ZWFy
RGF5KCksIGlzTGVhcFllYXIoeWVhcikpKTsKICAgICB0bS5zZXRZZWFyKHllYXIpOwotICAgIHRt
LnNldElzRFNUKGRzdE9mZiAhPSAwLjApOwotICAgIHRtLnNldFV0Y09mZnNldChzdGF0aWNfY2Fz
dDxsb25nPigoZHN0T2ZmICsgdXRjT2ZmKSAvIFdURjo6bXNQZXJTZWNvbmQpKTsKKyAgICB0bS5z
ZXRJc0RTVChsb2NhbFRpbWVPZmZzZXQuaXNEU1QpOworICAgIHRtLnNldFV0Y09mZnNldChsb2Nh
bFRpbWVPZmZzZXQub2Zmc2V0IC8gV1RGOjptc1BlclNlY29uZCk7CiB9CiAKIGRvdWJsZSBwYXJz
ZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
Y2hhciogZGF0ZVN0cmluZykKQEAgLTI1MSwxMSArMjMzLDkgQEAgZG91YmxlIHBhcnNlRGF0ZUZy
b21OdWxsVGVybWluYXRlZENoYXJhYwogICAgICAgICByZXR1cm4gUU5hTjsKIAogICAgIC8vIGZh
bGwgYmFjayB0byBsb2NhbCB0aW1lem9uZQotICAgIGlmICghaGF2ZVRaKSB7Ci0gICAgICAgIGRv
dWJsZSB1dGNPZmZzZXQgPSBnZXRVVENPZmZzZXQoZXhlYyk7Ci0gICAgICAgIGRvdWJsZSBkc3RP
ZmZzZXQgPSBnZXREU1RPZmZzZXQoZXhlYywgbXMsIHV0Y09mZnNldCk7Ci0gICAgICAgIG9mZnNl
dCA9ICh1dGNPZmZzZXQgKyBkc3RPZmZzZXQpIC8gV1RGOjptc1Blck1pbnV0ZTsKLSAgICB9Cisg
ICAgaWYgKCFoYXZlVFopCisgICAgICAgIG9mZnNldCA9IGdldExvY2FsVGltZU9mZnNldChleGVj
LCBtcykub2Zmc2V0IC8gV1RGOjptc1Blck1pbnV0ZTsKKwogICAgIHJldHVybiBtcyAtIChvZmZz
ZXQgKiBXVEY6Om1zUGVyTWludXRlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUwNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDYgQEAgVk06OlZNKFZN
VHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgc2l6ZU9mTGFzdFNjcmF0Y2hC
dWZmZXIoMCkKICNlbmRpZgogICAgICwgZHluYW1pY0dsb2JhbE9iamVjdCgwKQotICAgICwgY2Fj
aGVkVVRDT2Zmc2V0KFFOYU4pCiAgICAgLCBtX2VuYWJsZWRQcm9maWxlcigwKQogICAgICwgbV9y
ZWdFeHBDYWNoZShuZXcgUmVnRXhwQ2FjaGUodGhpcykpCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQpAQCAtNDI1LDggKzQyNCw3IEBAIFZNOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCiAK
IHZvaWQgVk06OnJlc2V0RGF0ZUNhY2hlKCkKIHsKLSAgICBjYWNoZWRVVENPZmZzZXQgPSBRTmFO
OwotICAgIGRzdE9mZnNldENhY2hlLnJlc2V0KCk7CisgICAgbG9jYWxUaW1lT2Zmc2V0Q2FjaGUu
cmVzZXQoKTsKICAgICBjYWNoZWREYXRlU3RyaW5nID0gU3RyaW5nKCk7CiAgICAgY2FjaGVkRGF0
ZVN0cmluZ1ZhbHVlID0gUU5hTjsKICAgICBkYXRlSW5zdGFuY2VDYWNoZS5yZXNldCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTA1OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1
MSw3IEBACiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAj
aW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL0RhdGVN
YXRoLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KQEAgLTEwMSwyMSArMTAyLDIyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBIYXNoVGFibGU7CiAgICAgc3RydWN0IEluc3Ry
dWN0aW9uOwogCi0gICAgc3RydWN0IERTVE9mZnNldENhY2hlIHsKLSAgICAgICAgRFNUT2Zmc2V0
Q2FjaGUoKQorICAgIHN0cnVjdCBMb2NhbFRpbWVPZmZzZXRDYWNoZSB7CisgICAgICAgIExvY2Fs
VGltZU9mZnNldENhY2hlKCkKKyAgICAgICAgICAgIDogb2Zmc2V0KGZhbHNlLCAwKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXNldCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2
b2lkIHJlc2V0KCkKICAgICAgICAgewotICAgICAgICAgICAgb2Zmc2V0ID0gMC4wOworICAgICAg
ICAgICAgb2Zmc2V0ID0gTG9jYWxUaW1lT2Zmc2V0KGZhbHNlLCAwKTsKICAgICAgICAgICAgIHN0
YXJ0ID0gMC4wOwogICAgICAgICAgICAgZW5kID0gLTEuMDsKICAgICAgICAgICAgIGluY3JlbWVu
dCA9IDAuMDsKICAgICAgICAgfQogCi0gICAgICAgIGRvdWJsZSBvZmZzZXQ7CisgICAgICAgIExv
Y2FsVGltZU9mZnNldCBvZmZzZXQ7CiAgICAgICAgIGRvdWJsZSBzdGFydDsKICAgICAgICAgZG91
YmxlIGVuZDsKICAgICAgICAgZG91YmxlIGluY3JlbWVudDsKQEAgLTM3MCw4ICszNzIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gc3RyaW5nUmVjdXJz
aW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKIAotICAgICAgICBkb3VibGUgY2FjaGVkVVRDT2Zmc2V0
OwotICAgICAgICBEU1RPZmZzZXRDYWNoZSBkc3RPZmZzZXRDYWNoZTsKKyAgICAgICAgTG9jYWxU
aW1lT2Zmc2V0Q2FjaGUgbG9jYWxUaW1lT2Zmc2V0Q2FjaGU7CiAgICAgICAgIAogICAgICAgICBT
dHJpbmcgY2FjaGVkRGF0ZVN0cmluZzsKICAgICAgICAgZG91YmxlIGNhY2hlZERhdGVTdHJpbmdW
YWx1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTA3ODUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEzLTA1LTI3ICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJpbmcobmV3IERhdGUo
MjAxMCwxMCwxKSkgaXMgd3JvbmcgaW4gS1JBVCwgWUFLVAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgcGFydCBvZiBhIGZpeCwgc2ltcGxmeSBk
YXRlIGhhbmRsaW5nIGNvZGUsIGluc3RlYWQgb2Ygb3BlcmF0aW5nIHNlcGFyYXRlbHkKKyAgICAg
ICAgb24gdGhlIFVUQy1zdGFuZGFyZCBhbmQgc3RhbmRhcmQtRFNUIG9mZnNldHMsIGp1c3QgZ2Vu
ZXJhdGUgYSBjb21iaW5lZCBVVEMtbG9jYWwKKyAgICAgICAgb2Zmc2V0ICh0aGlzIGlzIHdoYXQg
d2UgYWN0dWFsbHkgbmVlZCwgYW5kIHdoYXQgdGhlIE9TIGdpdmVzIHVzKS4KKworICAgICAgICAq
IHd0Zi9EYXRlTWF0aC5jcHA6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpjYWxjdWxh
dGVVVENPZmZzZXQpOgorICAgICAgICAoV1RGOjpjYWxjdWxhdGVEU1RPZmZzZXQpOgorICAgICAg
ICAgICAgLSBtYWRlIHN0YXRpYywgbm93IG5vdCBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoaXMg
ZmlsZS4KKyAgICAgICAgKFdURjo6Y2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KToKKyAgICAgICAg
ICAgIC0gVGhpcyBjb21iaW5lcyB0aGUgMjAzOCByZWxhdGVkIGFkanVzdG1lbnQgZnJvbSBjYWxj
dWxhdGVEU1RPZmZzZXQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgbWF4VW5peFRpbWUgYWRqdXN0
bWVudCBmcm9tIGNhbGN1bGF0ZURTVE9mZnNldFNpbXBsZS4gVGhlbiwgaWYgSEFWRShUTV9HTVRP
RkYpCisgICAgICAgICAgICAgIGp1c3QgY2FsbCBnZXRMb2NhbFRpbWUsIGlmIG5vdCB1c2UgY2Fs
Y3VsYXRlVVRDT2Zmc2V0L2NhbGN1bGF0ZURTVE9mZnNldC4KKyAgICAgICAgKFdURjo6cGFyc2VE
YXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyk6CisgICAgICAgICAgICAtIGNhbGwgY2Fs
Y3VsYXRlTG9jYWxUaW1lT2Zmc2V0IGluc3RlYWQgb2YgY2FsY3VsYXRlVVRDT2Zmc2V0L2NhbGN1
bGF0ZURTVE9mZnNldAorICAgICAgICAqIHd0Zi9EYXRlTWF0aC5oOgorICAgICAgICAoV1RGOjpM
b2NhbFRpbWVPZmZzZXQ6OkxvY2FsVGltZU9mZnNldCk6CisgICAgICAgIChMb2NhbFRpbWVPZmZz
ZXQpOgorICAgICAgICAoV1RGOjpMb2NhbFRpbWVPZmZzZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAgICAgLSBuZXcgc3RydWN0IHR5cGUsIGEgdHVwbGUgb2YgVVRDLWxvY2FsIG9mZnNldCAmIGlz
RFNUIGZsYWcuCisgICAgICAgIChXVEYpOgorICAgICAgICAgICAgLSByZXBsYWNlZCBjYWxjdWxh
dGVVVENPZmZzZXQvY2FsY3VsYXRlRFNUT2Zmc2V0IHdpdGggY2FsY3VsYXRlTG9jYWxUaW1lT2Zm
c2V0CisgICAgICAgICogd3RmL0dyZWdvcmlhbkRhdGVUaW1lLmNwcDoKKyAgICAgICAgKFdURjo6
R3JlZ29yaWFuRGF0ZVRpbWU6OnNldFRvQ3VycmVudExvY2FsVGltZSk6CisgICAgICAgICAgICAt
IGNhbGwgY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0IGluc3RlYWQgb2YgY2FsY3VsYXRlVVRDT2Zm
c2V0L2NhbGN1bGF0ZURTVE9mZnNldAorCiAyMDEzLTA1LTI3ICBQYXRyaWNrIEdhbnN0ZXJlciAg
PHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVzZSBJQ1VfSU5DTFVERV9ESVJTIGluIEJs
YWNrQmVycnkgQ01ha2UgZmlsZXMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAJKHJldmlzaW9uIDE1MDU5
NCkKKysrIFNvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc0
LDcgKzM3NCw5IEBAIGludCBlcXVpdmFsZW50WWVhckZvckRTVChpbnQgeWVhcikKICAgICByZXR1
cm4geWVhcjsKIH0KIAotaW50MzJfdCBjYWxjdWxhdGVVVENPZmZzZXQoKQorI2lmICFIQVZFKFRN
X0dNVE9GRikKKworc3RhdGljIGludDMyX3QgY2FsY3VsYXRlVVRDT2Zmc2V0KCkKIHsKICNpZiBP
UyhXSU5ET1dTKQogICAgIFRJTUVfWk9ORV9JTkZPUk1BVElPTiB0aW1lWm9uZUluZm9ybWF0aW9u
OwpAQCAtNDE4LDI4ICs0MjAsMjAgQEAgaW50MzJfdCBjYWxjdWxhdGVVVENPZmZzZXQoKQogLyoK
ICAqIEdldCB0aGUgRFNUIG9mZnNldCBmb3IgdGhlIHRpbWUgcGFzc2VkIGluLgogICovCi1zdGF0
aWMgZG91YmxlIGNhbGN1bGF0ZURTVE9mZnNldFNpbXBsZShkb3VibGUgbG9jYWxUaW1lU2Vjb25k
cywgZG91YmxlIHV0Y09mZnNldCkKK3N0YXRpYyBkb3VibGUgY2FsY3VsYXRlRFNUT2Zmc2V0KHRp
bWVfdCBsb2NhbFRpbWUsIGRvdWJsZSB1dGNPZmZzZXQpCiB7CiAjaWYgT1MoV0lOQ0UpCiAgICAg
VU5VU0VEX1BBUkFNKGxvY2FsVGltZVNlY29uZHMpOwogICAgIFVOVVNFRF9QQVJBTSh1dGNPZmZz
ZXQpOwogICAgIHJldHVybiAwOwogI2Vsc2UKLSAgICBpZiAobG9jYWxUaW1lU2Vjb25kcyA+IG1h
eFVuaXhUaW1lKQotICAgICAgICBsb2NhbFRpbWVTZWNvbmRzID0gbWF4VW5peFRpbWU7Ci0gICAg
ZWxzZSBpZiAobG9jYWxUaW1lU2Vjb25kcyA8IDApIC8vIEdvIGFoZWFkIGEgZGF5IHRvIG1ha2Ug
bG9jYWx0aW1lIHdvcmsgKGRvZXMgbm90IHdvcmsgd2l0aCAwKQotICAgICAgICBsb2NhbFRpbWVT
ZWNvbmRzICs9IHNlY29uZHNQZXJEYXk7Ci0KICAgICAvL2lucHV0IGlzIFVUQyBzbyB3ZSBoYXZl
IHRvIHNoaWZ0IGJhY2sgdG8gbG9jYWwgdGltZSB0byBkZXRlcm1pbmUgRFNUIHRodXMgdGhlICsg
Z2V0VVRDT2Zmc2V0KCkKLSAgICBkb3VibGUgb2Zmc2V0VGltZSA9IChsb2NhbFRpbWVTZWNvbmRz
ICogbXNQZXJTZWNvbmQpICsgdXRjT2Zmc2V0OworICAgIGRvdWJsZSBvZmZzZXRUaW1lID0gKGxv
Y2FsVGltZSAqIG1zUGVyU2Vjb25kKSArIHV0Y09mZnNldDsKIAogICAgIC8vIE9mZnNldCBmcm9t
IFVUQyBidXQgZG9lc24ndCBpbmNsdWRlIERTVCBvYnZpb3VzbHkKICAgICBpbnQgb2Zmc2V0SG91
ciA9ICBtc1RvSG91cnMob2Zmc2V0VGltZSk7CiAgICAgaW50IG9mZnNldE1pbnV0ZSA9ICBtc1Rv
TWludXRlcyhvZmZzZXRUaW1lKTsKIAotICAgIC8vIEZJWE1FOiB0aW1lX3QgaGFzIGEgcG90ZW50
aWFsIHByb2JsZW0gaW4gMjAzOAotICAgIHRpbWVfdCBsb2NhbFRpbWUgPSBzdGF0aWNfY2FzdDx0
aW1lX3Q+KGxvY2FsVGltZVNlY29uZHMpOwotCiAgICAgdG0gbG9jYWxUTTsKICAgICBnZXRMb2Nh
bFRpbWUoJmxvY2FsVGltZSwgJmxvY2FsVE0pOwogCkBAIC00NTIsMTAgKzQ0NiwxMiBAQCBzdGF0
aWMgZG91YmxlIGNhbGN1bGF0ZURTVE9mZnNldFNpbXBsZShkCiAjZW5kaWYKIH0KIAotLy8gR2V0
IHRoZSBEU1Qgb2Zmc2V0LCBnaXZlbiBhIHRpbWUgaW4gVVRDCi1kb3VibGUgY2FsY3VsYXRlRFNU
T2Zmc2V0KGRvdWJsZSBtcywgZG91YmxlIHV0Y09mZnNldCkKKyNlbmRpZgorCisvLyBSZXR1cm5z
IGNvbWJpbmVkIG9mZnNldCBpbiBtaWxsaXNlY29uZCAoVVRDICsgRFNUKS4KK0xvY2FsVGltZU9m
ZnNldCBjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQoZG91YmxlIG1zKQogewotICAgIC8vIE9uIE1h
YyBPUyBYLCB0aGUgY2FsbCB0byBsb2NhbHRpbWUgKHNlZSBjYWxjdWxhdGVEU1RPZmZzZXRTaW1w
bGUpIHdpbGwgcmV0dXJuIGhpc3RvcmljYWxseSBhY2N1cmF0ZQorICAgIC8vIE9uIE1hYyBPUyBY
LCB0aGUgY2FsbCB0byBsb2NhbHRpbWUgKHNlZSBjYWxjdWxhdGVEU1RPZmZzZXQpIHdpbGwgcmV0
dXJuIGhpc3RvcmljYWxseSBhY2N1cmF0ZQogICAgIC8vIERTVCBpbmZvcm1hdGlvbiAoZS5nLiBO
ZXcgWmVhbGFuZCBkaWQgbm90IGhhdmUgRFNUIGZyb20gMTk0NiB0byAxOTc0KSBob3dldmVyIHRo
ZSBKYXZhU2NyaXB0CiAgICAgLy8gc3RhbmRhcmQgZXhwbGljaXRseSBkaWN0YXRlcyB0aGF0IGhp
c3RvcmljYWwgaW5mb3JtYXRpb24gc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4KICAgICAv
LyBkZXRlcm1pbmluZyBEU1QuIEZvciB0aGlzIHJlYXNvbiB3ZSBzaGlmdCBhd2F5IGZyb20geWVh
cnMgdGhhdCBsb2NhbHRpbWUgY2FuIGhhbmRsZSBidXQgd291bGQKQEAgLTQ3MSw3ICs0NjcsMjMg
QEAgZG91YmxlIGNhbGN1bGF0ZURTVE9mZnNldChkb3VibGUgbXMsIGRvdQogICAgICAgICBtcyA9
IChkYXkgKiBtc1BlckRheSkgKyBtc1RvTWlsbGlzZWNvbmRzKG1zKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gY2FsY3VsYXRlRFNUT2Zmc2V0U2ltcGxlKG1zIC8gbXNQZXJTZWNvbmQsIHV0Y09mZnNl
dCk7CisgICAgZG91YmxlIGxvY2FsVGltZVNlY29uZHMgPSBtcyAvIG1zUGVyU2Vjb25kOworICAg
IGlmIChsb2NhbFRpbWVTZWNvbmRzID4gbWF4VW5peFRpbWUpCisgICAgICAgIGxvY2FsVGltZVNl
Y29uZHMgPSBtYXhVbml4VGltZTsKKyAgICBlbHNlIGlmIChsb2NhbFRpbWVTZWNvbmRzIDwgMCkg
Ly8gR28gYWhlYWQgYSBkYXkgdG8gbWFrZSBsb2NhbHRpbWUgd29yayAoZG9lcyBub3Qgd29yayB3
aXRoIDApCisgICAgICAgIGxvY2FsVGltZVNlY29uZHMgKz0gc2Vjb25kc1BlckRheTsKKyAgICAv
LyBGSVhNRTogdGltZV90IGhhcyBhIHBvdGVudGlhbCBwcm9ibGVtIGluIDIwMzgKKyAgICB0aW1l
X3QgbG9jYWxUaW1lID0gc3RhdGljX2Nhc3Q8dGltZV90Pihsb2NhbFRpbWVTZWNvbmRzKTsKKwor
I2lmIEhBVkUoVE1fR01UT0ZGKQorICAgIHRtIGxvY2FsVE07CisgICAgZ2V0TG9jYWxUaW1lKCZs
b2NhbFRpbWUsICZsb2NhbFRNKTsKKyAgICByZXR1cm4gTG9jYWxUaW1lT2Zmc2V0KGxvY2FsVE0u
dG1faXNkc3QsIGxvY2FsVE0udG1fZ210b2ZmICogbXNQZXJTZWNvbmQpOworI2Vsc2UKKyAgICBk
b3VibGUgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7CisgICAgZG91YmxlIGRzdE9m
ZnNldCA9IGNhbGN1bGF0ZURTVE9mZnNldChsb2NhbFRpbWUsIHV0Y09mZnNldCk7CisgICAgcmV0
dXJuIExvY2FsVGltZU9mZnNldChkc3RPZmZzZXQsIHV0Y09mZnNldCArIGRzdE9mZnNldCk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBpbml0aWFsaXplRGF0ZXMoKQpAQCAtMTA2MiwxMSArMTA3NCw5IEBA
IGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWMKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CiAKICAgICAvLyBmYWxs
IGJhY2sgdG8gbG9jYWwgdGltZXpvbmUKLSAgICBpZiAoIWhhdmVUWikgewotICAgICAgICBkb3Vi
bGUgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7Ci0gICAgICAgIGRvdWJsZSBkc3RP
ZmZzZXQgPSBjYWxjdWxhdGVEU1RPZmZzZXQobXMsIHV0Y09mZnNldCk7Ci0gICAgICAgIG9mZnNl
dCA9ICh1dGNPZmZzZXQgKyBkc3RPZmZzZXQpIC8gbXNQZXJNaW51dGU7Ci0gICAgfQorICAgIGlm
ICghaGF2ZVRaKQorICAgICAgICBvZmZzZXQgPSBjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQobXMp
Lm9mZnNldCAvIG1zUGVyTWludXRlOworCiAgICAgcmV0dXJuIG1zIC0gKG9mZnNldCAqIG1zUGVy
TWludXRlKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvRGF0ZU1hdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5oCShyZXZpc2lvbiAxNTA1OTQpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9EYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw5ICs5OSwyMyBAQCBX
VEZfRVhQT1JUX1BSSVZBVEUgaW50IGRheUluWWVhcihkb3VibGUgCiBXVEZfRVhQT1JUX1BSSVZB
VEUgaW50IG1vbnRoRnJvbURheUluWWVhcihpbnQgZGF5SW5ZZWFyLCBib29sIGxlYXBZZWFyKTsK
IFdURl9FWFBPUlRfUFJJVkFURSBpbnQgZGF5SW5Nb250aEZyb21EYXlJblllYXIoaW50IGRheUlu
WWVhciwgYm9vbCBsZWFwWWVhcik7CiAKLS8vIFJldHVybnMgb2Zmc2V0IG1pbGxpc2Vjb25kcyBm
b3IgVVRDIGFuZCBEU1QuCi1XVEZfRVhQT1JUX1BSSVZBVEUgaW50MzJfdCBjYWxjdWxhdGVVVENP
ZmZzZXQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSBkb3VibGUgY2FsY3VsYXRlRFNUT2Zmc2V0KGRv
dWJsZSBtcywgZG91YmxlIHV0Y09mZnNldCk7CitzdHJ1Y3QgTG9jYWxUaW1lT2Zmc2V0IHsKKyAg
ICBMb2NhbFRpbWVPZmZzZXQoYm9vbCBpc0RTVCwgaW50IG9mZnNldCkKKyAgICAgICAgOiBpc0RT
VChpc0RTVCkKKyAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTG9jYWxUaW1lT2Zmc2V0JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc0RTVCA9PSBvdGhlci5pc0RTVCAmJiBvZmZzZXQgPT0gb3RoZXIub2Zmc2V0
OworICAgIH0KKworICAgIGJvb2wgaXNEU1Q7CisgICAgaW50IG9mZnNldDsKK307CisvLyBSZXR1
cm5zIGNvbWJpbmVkIG9mZnNldCBpbiBtaWxsaXNlY29uZCAoVVRDICsgRFNUKS4KK1dURl9FWFBP
UlRfUFJJVkFURSBMb2NhbFRpbWVPZmZzZXQgY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KGRvdWJs
ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkBAIC0xMjIsNyArMTM2LDcgQEAgdXNpbmcgV1RG
Ojptc1RvSG91cnM7CiB1c2luZyBXVEY6OnNlY29uZHNQZXJNaW51dGU7CiB1c2luZyBXVEY6OnBh
cnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnM7CiB1c2luZyBXVEY6Om1ha2VSRkMy
ODIyRGF0ZVN0cmluZzsKLXVzaW5nIFdURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0OwotdXNpbmcgV1RG
OjpjYWxjdWxhdGVEU1RPZmZzZXQ7Cit1c2luZyBXVEY6OkxvY2FsVGltZU9mZnNldDsKK3VzaW5n
IFdURjo6Y2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0OwogCiAjZW5kaWYgLy8gRGF0ZU1hdGhfaApJ
bmRleDogU291cmNlL1dURi93dGYvR3JlZ29yaWFuRGF0ZVRpbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0dyZWdvcmlhbkRhdGVUaW1lLmNwcAkocmV2aXNpb24gMTUwNTk0KQor
KysgU291cmNlL1dURi93dGYvR3JlZ29yaWFuRGF0ZVRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw5ICs3OCw3IEBAIHZvaWQgR3JlZ29yaWFuRGF0ZVRpbWU6OnNldFRvQ3VycmVudExvY2EK
ICNpZiBIQVZFKFRNX0dNVE9GRikKICAgICBtX3V0Y09mZnNldCA9IGxvY2FsVE0udG1fZ210b2Zm
OwogI2Vsc2UKLSAgICBpbnQgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7Ci0gICAg
dXRjT2Zmc2V0ICs9IGNhbGN1bGF0ZURTVE9mZnNldChsb2NhbFRpbWUgKiBtc1BlclNlY29uZCwg
dXRjT2Zmc2V0KTsKLSAgICBtX3V0Y09mZnNldCA9IHV0Y09mZnNldCAvIG1zUGVyU2Vjb25kOwor
ICAgIG1fdXRjT2Zmc2V0ID0gY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KGxvY2FsVGltZSAqIG1z
UGVyU2Vjb25kKS5vZmZzZXQgLyBtc1BlclNlY29uZDsKICNlbmRpZgogI2VuZGlmCiB9Cg==
</data>
<flag name="commit-queue"
          id="224481"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203026</attachid>
            <date>2013-05-28 00:25:54 -0700</date>
            <delta_ts>2013-05-28 09:26:52 -0700</delta_ts>
            <desc>Fix part 1 v3 - more windows build fix</desc>
            <filename>106750.3.patch</filename>
            <type>text/plain</type>
            <size>21201</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEzLTA1LTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBTdHJpbmcobmV3IERhdGUoMjAxMCwxMCwxKSkgaXMgd3JvbmcgaW4gS1JBVCwg
WUFLVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2
NzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmly
c3QgcGFydCBvZiBhIGZpeCwgc2ltcGxmeSBkYXRlIGhhbmRsaW5nIGNvZGUsIGluc3RlYWQgb2Yg
b3BlcmF0aW5nIHNlcGFyYXRlbHkKKyAgICAgICAgb24gdGhlIFVUQy1zdGFuZGFyZCBhbmQgc3Rh
bmRhcmQtRFNUIG9mZnNldHMsIGp1c3QgZ2VuZXJhdGUgYSBjb21iaW5lZCBVVEMtbG9jYWwKKyAg
ICAgICAgb2Zmc2V0ICh0aGlzIGlzIHdoYXQgd2UgYWN0dWFsbHkgbmVlZCwgYW5kIHdoYXQgdGhl
IE9TIGdpdmVzIHVzKS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHA6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpnZXRMb2NhbFRpbWVPZmZzZXQpOgorICAgICAgICAg
ICAgLSByZW1vdmVkIGdldFVUQ09mZnNldCwgY29udmVydGVkIGdldERTVE9mZnNldCAtPiBnZXRM
b2NhbFRpbWVPZmZzZXQKKyAgICAgICAgKEpTQzo6Z3JlZ29yaWFuRGF0ZVRpbWVUb01TKToKKyAg
ICAgICAgKEpTQzo6bXNUb0dyZWdvcmlhbkRhdGVUaW1lKToKKyAgICAgICAgKEpTQzo6cGFyc2VE
YXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyk6CisgICAgICAgICAgICAtIGNhbGwgZ2V0
TG9jYWxUaW1lT2Zmc2V0IGluc3RlYWQgb2YgZ2V0VVRDT2Zmc2V0L2dldERTVE9mZnNldAorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAo
SlNDOjpWTTo6cmVzZXREYXRlQ2FjaGUpOgorICAgICAgICAgICAgLSByZW1vdmVkIGNhY2hlZFVU
Q09mZnNldCwgY29udmVydGVkIERTVE9mZnNldENhY2hlIC0+IExvY2FsVGltZU9mZnNldENhY2hl
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpMb2NhbFRpbWVPZmZzZXRD
YWNoZTo6TG9jYWxUaW1lT2Zmc2V0Q2FjaGUpOgorICAgICAgICAoSlNDOjpMb2NhbFRpbWVPZmZz
ZXRDYWNoZTo6cmVzZXQpOgorICAgICAgICAoTG9jYWxUaW1lT2Zmc2V0Q2FjaGUpOgorICAgICAg
ICAgICAgLSByZW1vdmVkIGNhY2hlZFVUQ09mZnNldCwgY29udmVydGVkIERTVE9mZnNldENhY2hl
IC0+IExvY2FsVGltZU9mZnNldENhY2hlCisKIDIwMTMtMDUtMjcgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNlIElDVV9JTkNMVURFX0RJUlMgaW4g
QmxhY2tCZXJyeSBDTWFrZSBmaWxlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5vcmRlcgkocmV2aXNpb24gMTUwNTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc1LDcgKzE3NzUs
NiBAQCBfX1pOM0pTQ0wyMWRhdGVQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4CiBfX1pOSzNKU0Mx
MkRhdGVJbnN0YW5jZTI2Y2FsY3VsYXRlR3JlZ29yaWFuRGF0ZVRpbWVFUE5TXzlFeGVjU3RhdGVF
CiBfX1pOM0pTQzIxbXNUb0dyZWdvcmlhbkRhdGVUaW1lRVBOU185RXhlY1N0YXRlRWRiUk5TXzE3
R3JlZ29yaWFuRGF0ZVRpbWVFCiBfX1pOM0pTQ0wxMmdldERTVE9mZnNldEVQTlNfOUV4ZWNTdGF0
ZUVkZAotX19aTjNXVEYxOGNhbGN1bGF0ZURTVE9mZnNldEVkZAogX19aTjNXVEYxOGRhdGVUb0Rh
eXNGcm9tMTk3MEVpaWkKIF9fWk4zSlNDMTBmb3JtYXREYXRlRVJLTlNfMTdHcmVnb3JpYW5EYXRl
VGltZUVSQTEwMF9jCiBfX1pOM0pTQzEwZm9ybWF0VGltZUVSS05TXzE3R3JlZ29yaWFuRGF0ZVRp
bWVFUkExMDBfYwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRlZgkocmV2aXNpb24gMTUwNTk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOSArMTIwLDcg
QEAgRVhQT1JUUwogICAgID9idWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsQERlY2ltYWxOdW1i
ZXJAV1RGQEBRQkVJWFoKICAgICA/YnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25lbnRpYWxARGVj
aW1hbE51bWJlckBXVEZAQFFCRUlYWgogICAgID9ieXRlQ29tcGlsZUBZYXJyQEpTQ0BAWUE/QVY/
JFBhc3NPd25QdHJAVUJ5dGVjb2RlUGF0dGVybkBZYXJyQEpTQ0BAQFdURkBAQUFVWWFyclBhdHRl
cm5AMTJAUEFWQnVtcFBvaW50ZXJBbGxvY2F0b3JANEBAWgotICAgID9jYWxjdWxhdGVEU1RPZmZz
ZXRAV1RGQEBZQU5OTkBaCiAgICAgP2NhbGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhGcm9tVVRG
OE1hc2tpbmdUb3A4Qml0c0BVbmljb2RlQFdURkBAWUFJUEJEMEFBSTFAWgotICAgID9jYWxjdWxh
dGVVVENPZmZzZXRAV1RGQEBZQUhYWgogICAgID9jYWxjdWxhdGVkRnVuY3Rpb25OYW1lQERlYnVn
Z2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWU3RyaW5nQFdURkBAWFoKICAgICA/Y2FsbEBKU0NAQFlB
P0FWSlNWYWx1ZUAxQFBBVkV4ZWNTdGF0ZUAxQFYyMUBXNENhbGxUeXBlQDFAQUJUQ2FsbERhdGFA
MUAxQUJWQXJnTGlzdEAxQEBaCiAgICAgP2NhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yQEpT
Q0BAWUlfSlBBVkV4ZWNTdGF0ZUAxQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRvci9KYXZhU2Ny
aXB0Q29yZUV4cG9ydHMuZGVmLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlRXhwb3J0R2VuZXJhdG9yL0ph
dmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW4JKHJldmlzaW9uIDE1MDU5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlRXhwb3J0
R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTExOSw5ICsxMTksNyBAQCBFWFBPUlRTCiAgICAgP2J1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2lt
YWxARGVjaW1hbE51bWJlckBXVEZAQFFCRUlYWgogICAgID9idWZmZXJMZW5ndGhGb3JTdHJpbmdF
eHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVhaCiAgICAgP2J5dGVDb21waWxlQFlh
cnJASlNDQEBZQT9BVj8kUGFzc093blB0ckBVQnl0ZWNvZGVQYXR0ZXJuQFlhcnJASlNDQEBAV1RG
QEBBQVVZYXJyUGF0dGVybkAxMkBQQVZCdW1wUG9pbnRlckFsbG9jYXRvckA0QEBaCi0gICAgP2Nh
bGN1bGF0ZURTVE9mZnNldEBXVEZAQFlBTk5OQFoKICAgICA/Y2FsY3VsYXRlU3RyaW5nSGFzaEFu
ZExlbmd0aEZyb21VVEY4TWFza2luZ1RvcDhCaXRzQFVuaWNvZGVAV1RGQEBZQUlQQkQwQUFJMUBa
Ci0gICAgP2NhbGN1bGF0ZVVUQ09mZnNldEBXVEZAQFlBSFhaCiAgICAgP2NhbGN1bGF0ZWRGdW5j
dGlvbk5hbWVARGVidWdnZXJDYWxsRnJhbWVASlNDQEBRQkU/QVZTdHJpbmdAV1RGQEBYWgogICAg
ID9jYWxsQEpTQ0BAWUE/QVZKU1ZhbHVlQDFAUEFWRXhlY1N0YXRlQDFAVjIxQFc0Q2FsbFR5cGVA
MUBBQlRDYWxsRGF0YUAxQDFBQlZBcmdMaXN0QDFAQFoKICAgICA/Y2FsbEhvc3RGdW5jdGlvbkFz
Q29uc3RydWN0b3JASlNDQEBZSV9KUEFWRXhlY1N0YXRlQDFAQFoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCShyZXZpc2lvbiAxNTA1OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI3LDE0ICsxMjcsMTQgQEAgc3RhdGljIGlubGluZSBpbnQgbXNUb1dlZWtEYXko
ZG91YmxlIG1zKQogICAgIHJldHVybiB3ZDsKIH0KIAotLy8gR2V0IHRoZSBEU1Qgb2Zmc2V0IGZv
ciB0aGUgdGltZSBwYXNzZWQgaW4uCisvLyBHZXQgdGhlIGNvbWJpbmVkIFVUQyArIERTVCBvZmZz
ZXQgZm9yIHRoZSB0aW1lIHBhc3NlZCBpbi4KIC8vCiAvLyBOT1RFOiBUaGUgaW1wbGVtZW50YXRp
b24gcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgbm8gdGltZSB6b25lcyBoYXZlCiAvLyBtb3JlIHRo
YW4gb25lIGRheWxpZ2h0IHNhdmluZ3Mgb2Zmc2V0IGNoYW5nZSBwZXIgbW9udGguCiAvLyBJZiB0
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIE5hTiBpdCByZXR1cm5zIE5hTi4KLXN0YXRpYyBk
b3VibGUgZ2V0RFNUT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIG1zLCBkb3VibGUgdXRj
T2Zmc2V0KQorc3RhdGljIExvY2FsVGltZU9mZnNldCBnZXRMb2NhbFRpbWVPZmZzZXQoRXhlY1N0
YXRlKiBleGVjLCBkb3VibGUgbXMpCiB7Ci0gICAgRFNUT2Zmc2V0Q2FjaGUmIGNhY2hlID0gZXhl
Yy0+dm0oKS5kc3RPZmZzZXRDYWNoZTsKKyAgICBMb2NhbFRpbWVPZmZzZXRDYWNoZSYgY2FjaGUg
PSBleGVjLT52bSgpLmxvY2FsVGltZU9mZnNldENhY2hlOwogICAgIGRvdWJsZSBzdGFydCA9IGNh
Y2hlLnN0YXJ0OwogICAgIGRvdWJsZSBlbmQgPSBjYWNoZS5lbmQ7CiAKQEAgLTE0Niw3ICsxNDYs
NyBAQCBzdGF0aWMgZG91YmxlIGdldERTVE9mZnNldChFeGVjU3RhdGUqIGV4CiAgICAgICAgIGRv
dWJsZSBuZXdFbmQgPSBlbmQgKyBjYWNoZS5pbmNyZW1lbnQ7CiAKICAgICAgICAgaWYgKG1zIDw9
IG5ld0VuZCkgewotICAgICAgICAgICAgZG91YmxlIGVuZE9mZnNldCA9IGNhbGN1bGF0ZURTVE9m
ZnNldChuZXdFbmQsIHV0Y09mZnNldCk7CisgICAgICAgICAgICBMb2NhbFRpbWVPZmZzZXQgZW5k
T2Zmc2V0ID0gY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KG5ld0VuZCk7CiAgICAgICAgICAgICBp
ZiAoY2FjaGUub2Zmc2V0ID09IGVuZE9mZnNldCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBvZmZzZXQgYXQgdGhlIGVuZCBvZiB0aGUgbmV3IGludGVydmFsIHN0aWxsIG1hdGNoZXMKICAg
ICAgICAgICAgICAgICAvLyB0aGUgb2Zmc2V0IGluIHRoZSBjYWNoZSwgd2UgZ3JvdyB0aGUgY2Fj
aGVkIHRpbWUgaW50ZXJ2YWwKQEAgLTE1NCwzNCArMTU0LDMzIEBAIHN0YXRpYyBkb3VibGUgZ2V0
RFNUT2Zmc2V0KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgICAgICAgICBjYWNoZS5lbmQgPSBuZXdF
bmQ7CiAgICAgICAgICAgICAgICAgY2FjaGUuaW5jcmVtZW50ID0gbXNQZXJNb250aDsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZW5kT2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
TG9jYWxUaW1lT2Zmc2V0IG9mZnNldCA9IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChtcyk7Cisg
ICAgICAgICAgICBpZiAob2Zmc2V0ID09IGVuZE9mZnNldCkgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBvZmZzZXQgYXQgdGhlIGdpdmVuIHRpbWUgaXMgZXF1YWwgdG8gdGhlIG9mZnNldCBhdCB0
aGUKKyAgICAgICAgICAgICAgICAvLyBuZXcgZW5kIG9mIHRoZSBpbnRlcnZhbCwgc28gdGhhdCBt
ZWFucyB0aGF0IHdlJ3ZlIGp1c3Qgc2tpcHBlZAorICAgICAgICAgICAgICAgIC8vIHRoZSBwb2lu
dCBpbiB0aW1lIHdoZXJlIHRoZSBEU1Qgb2Zmc2V0IGNoYW5nZSBvY2N1cnJlZC4gVXBkYXRlZAor
ICAgICAgICAgICAgICAgIC8vIHRoZSBpbnRlcnZhbCB0byByZWZsZWN0IHRoaXMgYW5kIHJlc2V0
IHRoZSBpbmNyZW1lbnQuCisgICAgICAgICAgICAgICAgY2FjaGUuc3RhcnQgPSBtczsKKyAgICAg
ICAgICAgICAgICBjYWNoZS5lbmQgPSBuZXdFbmQ7CisgICAgICAgICAgICAgICAgY2FjaGUuaW5j
cmVtZW50ID0gbXNQZXJNb250aDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgZG91YmxlIG9mZnNldCA9IGNhbGN1bGF0ZURTVE9mZnNldChtcywgdXRjT2Zmc2V0KTsKLSAg
ICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IGVuZE9mZnNldCkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgb2Zmc2V0IGF0IHRoZSBnaXZlbiB0aW1lIGlzIGVxdWFsIHRvIHRoZSBvZmZz
ZXQgYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIG5ldyBlbmQgb2YgdGhlIGludGVydmFs
LCBzbyB0aGF0IG1lYW5zIHRoYXQgd2UndmUganVzdCBza2lwcGVkCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSBwb2ludCBpbiB0aW1lIHdoZXJlIHRoZSBEU1Qgb2Zmc2V0IGNoYW5nZSBvY2N1
cnJlZC4gVXBkYXRlZAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW50ZXJ2YWwgdG8gcmVm
bGVjdCB0aGlzIGFuZCByZXNldCB0aGUgaW5jcmVtZW50LgotICAgICAgICAgICAgICAgICAgICBj
YWNoZS5zdGFydCA9IG1zOwotICAgICAgICAgICAgICAgICAgICBjYWNoZS5lbmQgPSBuZXdFbmQ7
Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlLmluY3JlbWVudCA9IG1zUGVyTW9udGg7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGludGVydmFs
IGNvbnRhaW5zIGEgRFNUIG9mZnNldCBjaGFuZ2UgYW5kIHRoZSBnaXZlbiB0aW1lIGlzCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBpdC4gQWRqdXN0IHRoZSBpbmNyZW1lbnQgdG8gYXZv
aWQgYSBsaW5lYXIgc2VhcmNoIGZvcgotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb2Zmc2V0
IGNoYW5nZSBwb2ludCBhbmQgY2hhbmdlIHRoZSBlbmQgb2YgdGhlIGludGVydmFsLgotICAgICAg
ICAgICAgICAgICAgICBjYWNoZS5pbmNyZW1lbnQgLz0gMzsKLSAgICAgICAgICAgICAgICAgICAg
Y2FjaGUuZW5kID0gbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFVw
ZGF0ZSB0aGUgb2Zmc2V0IGluIHRoZSBjYWNoZSBhbmQgcmV0dXJuIGl0LgotICAgICAgICAgICAg
ICAgIGNhY2hlLm9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0
OworICAgICAgICAgICAgICAgIC8vIFRoZSBpbnRlcnZhbCBjb250YWlucyBhIERTVCBvZmZzZXQg
Y2hhbmdlIGFuZCB0aGUgZ2l2ZW4gdGltZSBpcworICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBp
dC4gQWRqdXN0IHRoZSBpbmNyZW1lbnQgdG8gYXZvaWQgYSBsaW5lYXIgc2VhcmNoIGZvcgorICAg
ICAgICAgICAgICAgIC8vIHRoZSBvZmZzZXQgY2hhbmdlIHBvaW50IGFuZCBjaGFuZ2UgdGhlIGVu
ZCBvZiB0aGUgaW50ZXJ2YWwuCisgICAgICAgICAgICAgICAgY2FjaGUuaW5jcmVtZW50IC89IDM7
CisgICAgICAgICAgICAgICAgY2FjaGUuZW5kID0gbXM7CiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBVcGRhdGUgdGhlIG9mZnNldCBpbiB0aGUgY2FjaGUgYW5kIHJldHVybiBpdC4KKyAg
ICAgICAgICAgIGNhY2hlLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgIHJldHVybiBvZmZz
ZXQ7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBDb21wdXRlIHRoZSBEU1Qgb2Zmc2V0IGZv
ciB0aGUgdGltZSBhbmQgc2hyaW5rIHRoZSBjYWNoZSBpbnRlcnZhbAogICAgIC8vIHRvIG9ubHkg
Y29udGFpbiB0aGUgdGltZS4gVGhpcyBhbGxvd3MgZmFzdCByZXBlYXRlZCBEU1Qgb2Zmc2V0CiAg
ICAgLy8gY29tcHV0YXRpb25zIGZvciB0aGUgc2FtZSB0aW1lLgotICAgIGRvdWJsZSBvZmZzZXQg
PSBjYWxjdWxhdGVEU1RPZmZzZXQobXMsIHV0Y09mZnNldCk7CisgICAgTG9jYWxUaW1lT2Zmc2V0
IG9mZnNldCA9IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChtcyk7CiAgICAgY2FjaGUub2Zmc2V0
ID0gb2Zmc2V0OwogICAgIGNhY2hlLnN0YXJ0ID0gbXM7CiAgICAgY2FjaGUuZW5kID0gbXM7CkBA
IC0xODksMzAgKzE4OCwxNSBAQCBzdGF0aWMgZG91YmxlIGdldERTVE9mZnNldChFeGVjU3RhdGUq
IGV4CiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotLyoKLSAqIEdldCB0aGUgZGlmZmVyZW5jZSBp
biBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGlzIHRpbWUgem9uZSBhbmQgVVRDIChHTVQpCi0gKiBO
T1QgaW5jbHVkaW5nIERTVC4KLSAqLwotZG91YmxlIGdldFVUQ09mZnNldChFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgZG91YmxlIHV0Y09mZnNldCA9IGV4ZWMtPnZtKCkuY2FjaGVkVVRDT2Zmc2V0
OwotICAgIGlmICghc3RkOjppc25hbih1dGNPZmZzZXQpKQotICAgICAgICByZXR1cm4gdXRjT2Zm
c2V0OwotICAgIGV4ZWMtPnZtKCkuY2FjaGVkVVRDT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0
KCk7Ci0gICAgcmV0dXJuIGV4ZWMtPnZtKCkuY2FjaGVkVVRDT2Zmc2V0OwotfQotCiBkb3VibGUg
Z3JlZ29yaWFuRGF0ZVRpbWVUb01TKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUmIHQsIGRvdWJsZSBtaWxsaVNlY29uZHMsIGJvb2wgaW5wdXRJc1VUQykKIHsKICAgICBk
b3VibGUgZGF5ID0gZGF0ZVRvRGF5c0Zyb20xOTcwKHQueWVhcigpLCB0Lm1vbnRoKCksIHQubW9u
dGhEYXkoKSk7CiAgICAgZG91YmxlIG1zID0gdGltZVRvTVModC5ob3VyKCksIHQubWludXRlKCks
IHQuc2Vjb25kKCksIG1pbGxpU2Vjb25kcyk7CiAgICAgZG91YmxlIHJlc3VsdCA9IChkYXkgKiBX
VEY6Om1zUGVyRGF5KSArIG1zOwogCi0gICAgaWYgKCFpbnB1dElzVVRDKSB7IC8vIGNvbnZlcnQg
dG8gVVRDCi0gICAgICAgIGRvdWJsZSB1dGNPZmZzZXQgPSBnZXRVVENPZmZzZXQoZXhlYyk7Ci0g
ICAgICAgIHJlc3VsdCAtPSB1dGNPZmZzZXQ7Ci0gICAgICAgIHJlc3VsdCAtPSBnZXREU1RPZmZz
ZXQoZXhlYywgcmVzdWx0LCB1dGNPZmZzZXQpOwotICAgIH0KKyAgICAvLyBjb252ZXJ0IHRvIFVU
QworICAgIGlmICghaW5wdXRJc1VUQykKKyAgICAgICAgcmVzdWx0IC09IGdldExvY2FsVGltZU9m
ZnNldChleGVjLCByZXN1bHQpLm9mZnNldDsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0y
MjAsMTIgKzIwNCwxMCBAQCBkb3VibGUgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKEV4ZWNTdGF0ZSog
CiAvLyBpbnB1dCBpcyBVVEMKIHZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKEV4ZWNTdGF0ZSog
ZXhlYywgZG91YmxlIG1zLCBib29sIG91dHB1dElzVVRDLCBHcmVnb3JpYW5EYXRlVGltZSYgdG0p
CiB7Ci0gICAgZG91YmxlIGRzdE9mZiA9IDAuMDsKLSAgICBkb3VibGUgdXRjT2ZmID0gMC4wOwor
ICAgIExvY2FsVGltZU9mZnNldCBsb2NhbFRpbWVPZmZzZXQoZmFsc2UsIDApOwogICAgIGlmICgh
b3V0cHV0SXNVVEMpIHsKLSAgICAgICAgdXRjT2ZmID0gZ2V0VVRDT2Zmc2V0KGV4ZWMpOwotICAg
ICAgICBkc3RPZmYgPSBnZXREU1RPZmZzZXQoZXhlYywgbXMsIHV0Y09mZik7Ci0gICAgICAgIG1z
ICs9IGRzdE9mZiArIHV0Y09mZjsKKyAgICAgICAgbG9jYWxUaW1lT2Zmc2V0ID0gZ2V0TG9jYWxU
aW1lT2Zmc2V0KGV4ZWMsIG1zKTsKKyAgICAgICAgbXMgKz0gbG9jYWxUaW1lT2Zmc2V0Lm9mZnNl
dDsKICAgICB9CiAKICAgICBjb25zdCBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKQEAgLTIzNyw4
ICsyMTksOCBAQCB2b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGltZShFeGVjU3RhdGUqIGV4CiAgICAg
dG0uc2V0TW9udGhEYXkoZGF5SW5Nb250aEZyb21EYXlJblllYXIodG0ueWVhckRheSgpLCBpc0xl
YXBZZWFyKHllYXIpKSk7CiAgICAgdG0uc2V0TW9udGgobW9udGhGcm9tRGF5SW5ZZWFyKHRtLnll
YXJEYXkoKSwgaXNMZWFwWWVhcih5ZWFyKSkpOwogICAgIHRtLnNldFllYXIoeWVhcik7Ci0gICAg
dG0uc2V0SXNEU1QoZHN0T2ZmICE9IDAuMCk7Ci0gICAgdG0uc2V0VXRjT2Zmc2V0KHN0YXRpY19j
YXN0PGxvbmc+KChkc3RPZmYgKyB1dGNPZmYpIC8gV1RGOjptc1BlclNlY29uZCkpOworICAgIHRt
LnNldElzRFNUKGxvY2FsVGltZU9mZnNldC5pc0RTVCk7CisgICAgdG0uc2V0VXRjT2Zmc2V0KGxv
Y2FsVGltZU9mZnNldC5vZmZzZXQgLyBXVEY6Om1zUGVyU2Vjb25kKTsKIH0KIAogZG91YmxlIHBh
cnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBjaGFyKiBkYXRlU3RyaW5nKQpAQCAtMjUxLDExICsyMzMsOSBAQCBkb3VibGUgcGFyc2VEYXRl
RnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjCiAgICAgICAgIHJldHVybiBRTmFOOwogCiAgICAgLy8g
ZmFsbCBiYWNrIHRvIGxvY2FsIHRpbWV6b25lCi0gICAgaWYgKCFoYXZlVFopIHsKLSAgICAgICAg
ZG91YmxlIHV0Y09mZnNldCA9IGdldFVUQ09mZnNldChleGVjKTsKLSAgICAgICAgZG91YmxlIGRz
dE9mZnNldCA9IGdldERTVE9mZnNldChleGVjLCBtcywgdXRjT2Zmc2V0KTsKLSAgICAgICAgb2Zm
c2V0ID0gKHV0Y09mZnNldCArIGRzdE9mZnNldCkgLyBXVEY6Om1zUGVyTWludXRlOwotICAgIH0K
KyAgICBpZiAoIWhhdmVUWikKKyAgICAgICAgb2Zmc2V0ID0gZ2V0TG9jYWxUaW1lT2Zmc2V0KGV4
ZWMsIG1zKS5vZmZzZXQgLyBXVEY6Om1zUGVyTWludXRlOworCiAgICAgcmV0dXJuIG1zIC0gKG9m
ZnNldCAqIFdURjo6bXNQZXJNaW51dGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTA1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNiBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBzaXplT2ZMYXN0U2NyYXRj
aEJ1ZmZlcigwKQogI2VuZGlmCiAgICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCi0gICAgLCBj
YWNoZWRVVENPZmZzZXQoUU5hTikKICAgICAsIG1fZW5hYmxlZFByb2ZpbGVyKDApCiAgICAgLCBt
X3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBDYWNoZSh0aGlzKSkKICNpZiBFTkFCTEUoUkVHRVhQX1RS
QUNJTkcpCkBAIC00MjUsOCArNDI0LDcgQEAgVk06OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkK
IAogdm9pZCBWTTo6cmVzZXREYXRlQ2FjaGUoKQogewotICAgIGNhY2hlZFVUQ09mZnNldCA9IFFO
YU47Ci0gICAgZHN0T2Zmc2V0Q2FjaGUucmVzZXQoKTsKKyAgICBsb2NhbFRpbWVPZmZzZXRDYWNo
ZS5yZXNldCgpOwogICAgIGNhY2hlZERhdGVTdHJpbmcgPSBTdHJpbmcoKTsKICAgICBjYWNoZWRE
YXRlU3RyaW5nVmFsdWUgPSBRTmFOOwogICAgIGRhdGVJbnN0YW5jZUNhY2hlLnJlc2V0KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1MDU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYg
KzUxLDcgQEAKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtSYW5kb20uaCIK
ICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDx3dGYvRGF0
ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgpAQCAtMTAxLDIxICsxMDIsMjIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IEhhc2hUYWJsZTsKICAgICBzdHJ1Y3QgSW5z
dHJ1Y3Rpb247CiAKLSAgICBzdHJ1Y3QgRFNUT2Zmc2V0Q2FjaGUgewotICAgICAgICBEU1RPZmZz
ZXRDYWNoZSgpCisgICAgc3RydWN0IExvY2FsVGltZU9mZnNldENhY2hlIHsKKyAgICAgICAgTG9j
YWxUaW1lT2Zmc2V0Q2FjaGUoKQorICAgICAgICAgICAgOiBvZmZzZXQoZmFsc2UsIDApCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHZvaWQgcmVzZXQoKQogICAgICAgICB7Ci0gICAgICAgICAgICBvZmZzZXQgPSAwLjA7CisgICAg
ICAgICAgICBvZmZzZXQgPSBMb2NhbFRpbWVPZmZzZXQoZmFsc2UsIDApOwogICAgICAgICAgICAg
c3RhcnQgPSAwLjA7CiAgICAgICAgICAgICBlbmQgPSAtMS4wOwogICAgICAgICAgICAgaW5jcmVt
ZW50ID0gMC4wOwogICAgICAgICB9CiAKLSAgICAgICAgZG91YmxlIG9mZnNldDsKKyAgICAgICAg
TG9jYWxUaW1lT2Zmc2V0IG9mZnNldDsKICAgICAgICAgZG91YmxlIHN0YXJ0OwogICAgICAgICBk
b3VibGUgZW5kOwogICAgICAgICBkb3VibGUgaW5jcmVtZW50OwpAQCAtMzcwLDggKzM3Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEhhc2hTZXQ8SlNPYmplY3QqPiBzdHJpbmdSZWN1
cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzOwogCi0gICAgICAgIGRvdWJsZSBjYWNoZWRVVENPZmZz
ZXQ7Ci0gICAgICAgIERTVE9mZnNldENhY2hlIGRzdE9mZnNldENhY2hlOworICAgICAgICBMb2Nh
bFRpbWVPZmZzZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRDYWNoZTsKICAgICAgICAgCiAgICAgICAg
IFN0cmluZyBjYWNoZWREYXRlU3RyaW5nOwogICAgICAgICBkb3VibGUgY2FjaGVkRGF0ZVN0cmlu
Z1ZhbHVlOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDc4NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTMtMDUtMjcgIEdhdmluIEJhcnJh
Y2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZyhuZXcgRGF0
ZSgyMDEwLDEwLDEpKSBpcyB3cm9uZyBpbiBLUkFULCBZQUtUCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY3NTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXJzdCBwYXJ0IG9mIGEgZml4LCBzaW1wbGZ5
IGRhdGUgaGFuZGxpbmcgY29kZSwgaW5zdGVhZCBvZiBvcGVyYXRpbmcgc2VwYXJhdGVseQorICAg
ICAgICBvbiB0aGUgVVRDLXN0YW5kYXJkIGFuZCBzdGFuZGFyZC1EU1Qgb2Zmc2V0cywganVzdCBn
ZW5lcmF0ZSBhIGNvbWJpbmVkIFVUQy1sb2NhbAorICAgICAgICBvZmZzZXQgKHRoaXMgaXMgd2hh
dCB3ZSBhY3R1YWxseSBuZWVkLCBhbmQgd2hhdCB0aGUgT1MgZ2l2ZXMgdXMpLgorCisgICAgICAg
ICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OmNhbGN1
bGF0ZVVUQ09mZnNldCk6CisgICAgICAgIChXVEY6OmNhbGN1bGF0ZURTVE9mZnNldCk6CisgICAg
ICAgICAgICAtIG1hZGUgc3RhdGljLCBub3cgbm90IGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhp
cyBmaWxlLgorICAgICAgICAoV1RGOjpjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQpOgorICAgICAg
ICAgICAgLSBUaGlzIGNvbWJpbmVzIHRoZSAyMDM4IHJlbGF0ZWQgYWRqdXN0bWVudCBmcm9tIGNh
bGN1bGF0ZURTVE9mZnNldCB3aXRoIHRoZQorICAgICAgICAgICAgICBtYXhVbml4VGltZSBhZGp1
c3RtZW50IGZyb20gY2FsY3VsYXRlRFNUT2Zmc2V0U2ltcGxlLiBUaGVuLCBpZiBIQVZFKFRNX0dN
VE9GRikKKyAgICAgICAgICAgICAganVzdCBjYWxsIGdldExvY2FsVGltZSwgaWYgbm90IHVzZSBj
YWxjdWxhdGVVVENPZmZzZXQvY2FsY3VsYXRlRFNUT2Zmc2V0LgorICAgICAgICAoV1RGOjpwYXJz
ZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKToKKyAgICAgICAgICAgIC0gY2FsbCBj
YWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQgaW5zdGVhZCBvZiBjYWxjdWxhdGVVVENPZmZzZXQvY2Fs
Y3VsYXRlRFNUT2Zmc2V0CisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisgICAgICAgIChXVEY6
OkxvY2FsVGltZU9mZnNldDo6TG9jYWxUaW1lT2Zmc2V0KToKKyAgICAgICAgKExvY2FsVGltZU9m
ZnNldCk6CisgICAgICAgIChXVEY6OkxvY2FsVGltZU9mZnNldDo6b3BlcmF0b3I9PSk6CisgICAg
ICAgICAgICAtIG5ldyBzdHJ1Y3QgdHlwZSwgYSB0dXBsZSBvZiBVVEMtbG9jYWwgb2Zmc2V0ICYg
aXNEU1QgZmxhZy4KKyAgICAgICAgKFdURik6CisgICAgICAgICAgICAtIHJlcGxhY2VkIGNhbGN1
bGF0ZVVUQ09mZnNldC9jYWxjdWxhdGVEU1RPZmZzZXQgd2l0aCBjYWxjdWxhdGVMb2NhbFRpbWVP
ZmZzZXQKKyAgICAgICAgKiB3dGYvR3JlZ29yaWFuRGF0ZVRpbWUuY3BwOgorICAgICAgICAoV1RG
OjpHcmVnb3JpYW5EYXRlVGltZTo6c2V0VG9DdXJyZW50TG9jYWxUaW1lKToKKyAgICAgICAgICAg
IC0gY2FsbCBjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQgaW5zdGVhZCBvZiBjYWxjdWxhdGVVVENP
ZmZzZXQvY2FsY3VsYXRlRFNUT2Zmc2V0CisKIDIwMTMtMDUtMjcgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNlIElDVV9JTkNMVURFX0RJUlMgaW4g
QmxhY2tCZXJyeSBDTWFrZSBmaWxlcwpJbmRleDogU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcAkocmV2aXNpb24gMTUw
NTk0KQorKysgU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NzQsNyArMzc0LDkgQEAgaW50IGVxdWl2YWxlbnRZZWFyRm9yRFNUKGludCB5ZWFyKQogICAgIHJl
dHVybiB5ZWFyOwogfQogCi1pbnQzMl90IGNhbGN1bGF0ZVVUQ09mZnNldCgpCisjaWYgIUhBVkUo
VE1fR01UT0ZGKQorCitzdGF0aWMgaW50MzJfdCBjYWxjdWxhdGVVVENPZmZzZXQoKQogewogI2lm
IE9TKFdJTkRPV1MpCiAgICAgVElNRV9aT05FX0lORk9STUFUSU9OIHRpbWVab25lSW5mb3JtYXRp
b247CkBAIC00MTgsMjggKzQyMCwyMCBAQCBpbnQzMl90IGNhbGN1bGF0ZVVUQ09mZnNldCgpCiAv
KgogICogR2V0IHRoZSBEU1Qgb2Zmc2V0IGZvciB0aGUgdGltZSBwYXNzZWQgaW4uCiAgKi8KLXN0
YXRpYyBkb3VibGUgY2FsY3VsYXRlRFNUT2Zmc2V0U2ltcGxlKGRvdWJsZSBsb2NhbFRpbWVTZWNv
bmRzLCBkb3VibGUgdXRjT2Zmc2V0KQorc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVEU1RPZmZzZXQo
dGltZV90IGxvY2FsVGltZSwgZG91YmxlIHV0Y09mZnNldCkKIHsKICNpZiBPUyhXSU5DRSkKICAg
ICBVTlVTRURfUEFSQU0obG9jYWxUaW1lU2Vjb25kcyk7CiAgICAgVU5VU0VEX1BBUkFNKHV0Y09m
ZnNldCk7CiAgICAgcmV0dXJuIDA7CiAjZWxzZQotICAgIGlmIChsb2NhbFRpbWVTZWNvbmRzID4g
bWF4VW5peFRpbWUpCi0gICAgICAgIGxvY2FsVGltZVNlY29uZHMgPSBtYXhVbml4VGltZTsKLSAg
ICBlbHNlIGlmIChsb2NhbFRpbWVTZWNvbmRzIDwgMCkgLy8gR28gYWhlYWQgYSBkYXkgdG8gbWFr
ZSBsb2NhbHRpbWUgd29yayAoZG9lcyBub3Qgd29yayB3aXRoIDApCi0gICAgICAgIGxvY2FsVGlt
ZVNlY29uZHMgKz0gc2Vjb25kc1BlckRheTsKLQogICAgIC8vaW5wdXQgaXMgVVRDIHNvIHdlIGhh
dmUgdG8gc2hpZnQgYmFjayB0byBsb2NhbCB0aW1lIHRvIGRldGVybWluZSBEU1QgdGh1cyB0aGUg
KyBnZXRVVENPZmZzZXQoKQotICAgIGRvdWJsZSBvZmZzZXRUaW1lID0gKGxvY2FsVGltZVNlY29u
ZHMgKiBtc1BlclNlY29uZCkgKyB1dGNPZmZzZXQ7CisgICAgZG91YmxlIG9mZnNldFRpbWUgPSAo
bG9jYWxUaW1lICogbXNQZXJTZWNvbmQpICsgdXRjT2Zmc2V0OwogCiAgICAgLy8gT2Zmc2V0IGZy
b20gVVRDIGJ1dCBkb2Vzbid0IGluY2x1ZGUgRFNUIG9idmlvdXNseQogICAgIGludCBvZmZzZXRI
b3VyID0gIG1zVG9Ib3VycyhvZmZzZXRUaW1lKTsKICAgICBpbnQgb2Zmc2V0TWludXRlID0gIG1z
VG9NaW51dGVzKG9mZnNldFRpbWUpOwogCi0gICAgLy8gRklYTUU6IHRpbWVfdCBoYXMgYSBwb3Rl
bnRpYWwgcHJvYmxlbSBpbiAyMDM4Ci0gICAgdGltZV90IGxvY2FsVGltZSA9IHN0YXRpY19jYXN0
PHRpbWVfdD4obG9jYWxUaW1lU2Vjb25kcyk7Ci0KICAgICB0bSBsb2NhbFRNOwogICAgIGdldExv
Y2FsVGltZSgmbG9jYWxUaW1lLCAmbG9jYWxUTSk7CiAKQEAgLTQ1MiwxMCArNDQ2LDEyIEBAIHN0
YXRpYyBkb3VibGUgY2FsY3VsYXRlRFNUT2Zmc2V0U2ltcGxlKGQKICNlbmRpZgogfQogCi0vLyBH
ZXQgdGhlIERTVCBvZmZzZXQsIGdpdmVuIGEgdGltZSBpbiBVVEMKLWRvdWJsZSBjYWxjdWxhdGVE
U1RPZmZzZXQoZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zmc2V0KQorI2VuZGlmCisKKy8vIFJldHVy
bnMgY29tYmluZWQgb2Zmc2V0IGluIG1pbGxpc2Vjb25kIChVVEMgKyBEU1QpLgorTG9jYWxUaW1l
T2Zmc2V0IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChkb3VibGUgbXMpCiB7Ci0gICAgLy8gT24g
TWFjIE9TIFgsIHRoZSBjYWxsIHRvIGxvY2FsdGltZSAoc2VlIGNhbGN1bGF0ZURTVE9mZnNldFNp
bXBsZSkgd2lsbCByZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlCisgICAgLy8gT24gTWFjIE9T
IFgsIHRoZSBjYWxsIHRvIGxvY2FsdGltZSAoc2VlIGNhbGN1bGF0ZURTVE9mZnNldCkgd2lsbCBy
ZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlCiAgICAgLy8gRFNUIGluZm9ybWF0aW9uIChlLmcu
IE5ldyBaZWFsYW5kIGRpZCBub3QgaGF2ZSBEU1QgZnJvbSAxOTQ2IHRvIDE5NzQpIGhvd2V2ZXIg
dGhlIEphdmFTY3JpcHQKICAgICAvLyBzdGFuZGFyZCBleHBsaWNpdGx5IGRpY3RhdGVzIHRoYXQg
aGlzdG9yaWNhbCBpbmZvcm1hdGlvbiBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgd2hlbgogICAg
IC8vIGRldGVybWluaW5nIERTVC4gRm9yIHRoaXMgcmVhc29uIHdlIHNoaWZ0IGF3YXkgZnJvbSB5
ZWFycyB0aGF0IGxvY2FsdGltZSBjYW4gaGFuZGxlIGJ1dCB3b3VsZApAQCAtNDcxLDcgKzQ2Nywy
MyBAQCBkb3VibGUgY2FsY3VsYXRlRFNUT2Zmc2V0KGRvdWJsZSBtcywgZG91CiAgICAgICAgIG1z
ID0gKGRheSAqIG1zUGVyRGF5KSArIG1zVG9NaWxsaXNlY29uZHMobXMpOwogICAgIH0KIAotICAg
IHJldHVybiBjYWxjdWxhdGVEU1RPZmZzZXRTaW1wbGUobXMgLyBtc1BlclNlY29uZCwgdXRjT2Zm
c2V0KTsKKyAgICBkb3VibGUgbG9jYWxUaW1lU2Vjb25kcyA9IG1zIC8gbXNQZXJTZWNvbmQ7Cisg
ICAgaWYgKGxvY2FsVGltZVNlY29uZHMgPiBtYXhVbml4VGltZSkKKyAgICAgICAgbG9jYWxUaW1l
U2Vjb25kcyA9IG1heFVuaXhUaW1lOworICAgIGVsc2UgaWYgKGxvY2FsVGltZVNlY29uZHMgPCAw
KSAvLyBHbyBhaGVhZCBhIGRheSB0byBtYWtlIGxvY2FsdGltZSB3b3JrIChkb2VzIG5vdCB3b3Jr
IHdpdGggMCkKKyAgICAgICAgbG9jYWxUaW1lU2Vjb25kcyArPSBzZWNvbmRzUGVyRGF5OworICAg
IC8vIEZJWE1FOiB0aW1lX3QgaGFzIGEgcG90ZW50aWFsIHByb2JsZW0gaW4gMjAzOAorICAgIHRp
bWVfdCBsb2NhbFRpbWUgPSBzdGF0aWNfY2FzdDx0aW1lX3Q+KGxvY2FsVGltZVNlY29uZHMpOwor
CisjaWYgSEFWRShUTV9HTVRPRkYpCisgICAgdG0gbG9jYWxUTTsKKyAgICBnZXRMb2NhbFRpbWUo
JmxvY2FsVGltZSwgJmxvY2FsVE0pOworICAgIHJldHVybiBMb2NhbFRpbWVPZmZzZXQobG9jYWxU
TS50bV9pc2RzdCwgbG9jYWxUTS50bV9nbXRvZmYgKiBtc1BlclNlY29uZCk7CisjZWxzZQorICAg
IGRvdWJsZSB1dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKKyAgICBkb3VibGUgZHN0
T2Zmc2V0ID0gY2FsY3VsYXRlRFNUT2Zmc2V0KGxvY2FsVGltZSwgdXRjT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gTG9jYWxUaW1lT2Zmc2V0KGRzdE9mZnNldCwgdXRjT2Zmc2V0ICsgZHN0T2Zmc2V0KTsK
KyNlbmRpZgogfQogCiB2b2lkIGluaXRpYWxpemVEYXRlcygpCkBAIC0xMDYyLDExICsxMDc0LDkg
QEAgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhYwogICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKIAogICAgIC8vIGZh
bGwgYmFjayB0byBsb2NhbCB0aW1lem9uZQotICAgIGlmICghaGF2ZVRaKSB7Ci0gICAgICAgIGRv
dWJsZSB1dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKLSAgICAgICAgZG91YmxlIGRz
dE9mZnNldCA9IGNhbGN1bGF0ZURTVE9mZnNldChtcywgdXRjT2Zmc2V0KTsKLSAgICAgICAgb2Zm
c2V0ID0gKHV0Y09mZnNldCArIGRzdE9mZnNldCkgLyBtc1Blck1pbnV0ZTsKLSAgICB9CisgICAg
aWYgKCFoYXZlVFopCisgICAgICAgIG9mZnNldCA9IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldCht
cykub2Zmc2V0IC8gbXNQZXJNaW51dGU7CisKICAgICByZXR1cm4gbXMgLSAob2Zmc2V0ICogbXNQ
ZXJNaW51dGUpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDE1MDU5NCkKKysrIFNv
dXJjZS9XVEYvd3RmL0RhdGVNYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDkgKzk5LDIzIEBA
IFdURl9FWFBPUlRfUFJJVkFURSBpbnQgZGF5SW5ZZWFyKGRvdWJsZSAKIFdURl9FWFBPUlRfUFJJ
VkFURSBpbnQgbW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblllYXIsIGJvb2wgbGVhcFllYXIp
OwogV1RGX0VYUE9SVF9QUklWQVRFIGludCBkYXlJbk1vbnRoRnJvbURheUluWWVhcihpbnQgZGF5
SW5ZZWFyLCBib29sIGxlYXBZZWFyKTsKIAotLy8gUmV0dXJucyBvZmZzZXQgbWlsbGlzZWNvbmRz
IGZvciBVVEMgYW5kIERTVC4KLVdURl9FWFBPUlRfUFJJVkFURSBpbnQzMl90IGNhbGN1bGF0ZVVU
Q09mZnNldCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBjYWxjdWxhdGVEU1RPZmZzZXQo
ZG91YmxlIG1zLCBkb3VibGUgdXRjT2Zmc2V0KTsKK3N0cnVjdCBMb2NhbFRpbWVPZmZzZXQgewor
ICAgIExvY2FsVGltZU9mZnNldChib29sIGlzRFNULCBpbnQgb2Zmc2V0KQorICAgICAgICA6IGlz
RFNUKGlzRFNUKQorICAgICAgICAsIG9mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBMb2NhbFRpbWVPZmZzZXQmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRFNUID09IG90aGVyLmlzRFNUICYmIG9mZnNldCA9PSBvdGhlci5vZmZz
ZXQ7CisgICAgfQorCisgICAgYm9vbCBpc0RTVDsKKyAgICBpbnQgb2Zmc2V0OworfTsKKy8vIFJl
dHVybnMgY29tYmluZWQgb2Zmc2V0IGluIG1pbGxpc2Vjb25kIChVVEMgKyBEU1QpLgorV1RGX0VY
UE9SVF9QUklWQVRFIExvY2FsVGltZU9mZnNldCBjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQoZG91
YmxlKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKQEAgLTEyMiw3ICsxMzYsNyBAQCB1c2luZyBX
VEY6Om1zVG9Ib3VyczsKIHVzaW5nIFdURjo6c2Vjb25kc1Blck1pbnV0ZTsKIHVzaW5nIFdURjo6
cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVyczsKIHVzaW5nIFdURjo6bWFrZVJG
QzI4MjJEYXRlU3RyaW5nOwotdXNpbmcgV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQ7Ci11c2luZyBX
VEY6OmNhbGN1bGF0ZURTVE9mZnNldDsKK3VzaW5nIFdURjo6TG9jYWxUaW1lT2Zmc2V0OwordXNp
bmcgV1RGOjpjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQ7CiAKICNlbmRpZiAvLyBEYXRlTWF0aF9o
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HcmVnb3JpYW5EYXRlVGltZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvR3JlZ29yaWFuRGF0ZVRpbWUuY3BwCShyZXZpc2lvbiAxNTA1OTQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9HcmVnb3JpYW5EYXRlVGltZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDkgKzc4LDcgQEAgdm9pZCBHcmVnb3JpYW5EYXRlVGltZTo6c2V0VG9DdXJyZW50TG9j
YQogI2lmIEhBVkUoVE1fR01UT0ZGKQogICAgIG1fdXRjT2Zmc2V0ID0gbG9jYWxUTS50bV9nbXRv
ZmY7CiAjZWxzZQotICAgIGludCB1dGNPZmZzZXQgPSBjYWxjdWxhdGVVVENPZmZzZXQoKTsKLSAg
ICB1dGNPZmZzZXQgKz0gY2FsY3VsYXRlRFNUT2Zmc2V0KGxvY2FsVGltZSAqIG1zUGVyU2Vjb25k
LCB1dGNPZmZzZXQpOwotICAgIG1fdXRjT2Zmc2V0ID0gdXRjT2Zmc2V0IC8gbXNQZXJTZWNvbmQ7
CisgICAgbV91dGNPZmZzZXQgPSBjYWxjdWxhdGVMb2NhbFRpbWVPZmZzZXQobG9jYWxUaW1lICog
bXNQZXJTZWNvbmQpLm9mZnNldCAvIG1zUGVyU2Vjb25kOwogI2VuZGlmCiAjZW5kaWYKIH0K
</data>
<flag name="review"
          id="224486"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>