<?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>92960</bug_id>
          
          <creation_ts>2012-08-02 02:07:51 -0700</creation_ts>
          <short_desc>[Forms] Introduce shadow elements for multiple fields time input UI</short_desc>
          <delta_ts>2012-08-10 02:25:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>93428</dependson>
          <blocked>88970</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>haraken</cc>
    
    <cc>morrita</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>685120</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-02 02:07:51 -0700</bug_when>
    <thetext>This bug is a port of multiple fields time UI, bug 88970.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686215</commentid>
    <comment_count>1</comment_count>
      <attachid>156257</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-02 21:56:22 -0700</bug_when>
    <thetext>Created attachment 156257
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686216</commentid>
    <comment_count>2</comment_count>
      <attachid>156257</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-02 21:57:33 -0700</bug_when>
    <thetext>Comment on attachment 156257
Patch 1

Could you review this patch?
Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686226</commentid>
    <comment_count>3</comment_count>
      <attachid>156257</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 22:14:05 -0700</bug_when>
    <thetext>Comment on attachment 156257
Patch 1

Attachment 156257 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13417774</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686229</commentid>
    <comment_count>4</comment_count>
      <attachid>156257</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-02 22:19:33 -0700</bug_when>
    <thetext>Comment on attachment 156257
Patch 1

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

&gt; Source/WebCore/html/shadow/DateTimeEditElement.h:116
&gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_AMPMField;
&gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_hour11Field;
&gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_hour12Field;
&gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_hour24Field;
&gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_hour23Field;
&gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_millisecondField;
&gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_minuteField;
&gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_secondField;
&gt; +    RefPtr&lt;SpinButtonElement&gt; m_spinButton;

Do these need to be RefPtrs? As far as I read your implementation, these RefPtrs are guaranteed to point to Elements in the (shadow) subtree of this object. If that&apos;s true, please use raw pointers. The lifetime of these Elements should be managed by the DOM tree (i.e. the DOM lifetime semantics guarantees that &quot;if X is alive, all the nodes under X are kept alive&quot;).

Context: RefPtr&lt;*(Element|Node)&gt; in Element|Node objects can generate reference cycles, which is causing memory leak. I&apos;m removing those unnecessary RefPtrs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686246</commentid>
    <comment_count>5</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-02 22:54:37 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 156257 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156257&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.h:116
&gt; &gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_AMPMField;
&gt; &gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_hour11Field;
&gt; &gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_hour12Field;
&gt; &gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_hour24Field;
&gt; &gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_hour23Field;
&gt; &gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_millisecondField;
&gt; &gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_minuteField;
&gt; &gt; +    RefPtr&lt;DateTimeFieldElement&gt; m_secondField;
&gt; &gt; +    RefPtr&lt;SpinButtonElement&gt; m_spinButton;
&gt; 
&gt; Do these need to be RefPtrs? As far as I read your implementation, these RefPtrs are guaranteed to point to Elements in the (shadow) subtree of this object. If that&apos;s true, please use raw pointers. The lifetime of these Elements should be managed by the DOM tree (i.e. the DOM lifetime semantics guarantees that &quot;if X is alive, all the nodes under X are kept alive&quot;).
&gt; 
&gt; Context: RefPtr&lt;*(Element|Node)&gt; in Element|Node objects can generate reference cycles, which is causing memory leak. I&apos;m removing those unnecessary RefPtrs.

Yes, they should be ref counted.

Here is scenario:
1. Create shadow elements for &lt;input type=time step=1 value=&quot;12:34:56&quot;&gt;
  hour, minute, second fields are created and inserted into DOM.
2. Change step to 60
  second field is removed from DOM
3. GC
  DateTimeEditElement keeps second field
4. Change step to 1
  second field is inserted again into DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686249</commentid>
    <comment_count>6</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-02 23:06:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Yes, they should be ref counted.
&gt; 
&gt; Here is scenario:
&gt; (1) Create shadow elements for &lt;input type=time step=1 value=&quot;12:34:56&quot;&gt;
&gt;   hour, minute, second fields are created and inserted into DOM.
&gt; (2) Change step to 60
&gt;   second field is removed from DOM
&gt; (3) GC
&gt;   DateTimeEditElement keeps second field
&gt; (4) Change step to 1
&gt;   second field is inserted again into DOM.

(Although I don&apos;t know much about the semantics of DateTimeEditElement,) what happens if GC reclaims the second field in (3) and DateTimeEditElement recreates the second field in (4). (You might need to retain the value of the second field somewhere.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686254</commentid>
    <comment_count>7</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-02 23:13:09 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Yes, they should be ref counted.
&gt; &gt; 
&gt; &gt; Here is scenario:
&gt; &gt; (1) Create shadow elements for &lt;input type=time step=1 value=&quot;12:34:56&quot;&gt;
&gt; &gt;   hour, minute, second fields are created and inserted into DOM.
&gt; &gt; (2) Change step to 60
&gt; &gt;   second field is removed from DOM
&gt; &gt; (3) GC
&gt; &gt;   DateTimeEditElement keeps second field
&gt; &gt; (4) Change step to 1
&gt; &gt;   second field is inserted again into DOM.
&gt; 
&gt; (Although I don&apos;t know much about the semantics of DateTimeEditElement,) what happens if GC reclaims the second field in (3) and DateTimeEditElement recreates the second field in (4). (You might need to retain the value of the second field somewhere.)

Each field keeps numeric/symbolic value or empty value of time component rather than DateTimeEditElement keeps value for representing empty field, e.g. &quot;12:--:34&quot;, where &quot;--&quot; represents empty value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686256</commentid>
    <comment_count>8</comment_count>
      <attachid>156265</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-02 23:22:24 -0700</bug_when>
    <thetext>Created attachment 156265
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686258</commentid>
    <comment_count>9</comment_count>
      <attachid>156265</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-02 23:23:59 -0700</bug_when>
    <thetext>Comment on attachment 156265
Patch 2

Could you review this patch?
Thanks in advance.

= Changes since the last patch =
* Remove displaySizeOfNumber() from DateTimeFieldElement.cpp
** Failed on CR-Linux build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686466</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-03 02:19:44 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; Here is scenario:
&gt; &gt; &gt; (1) Create shadow elements for &lt;input type=time step=1 value=&quot;12:34:56&quot;&gt;
&gt; &gt; &gt;   hour, minute, second fields are created and inserted into DOM.
&gt; &gt; &gt; (2) Change step to 60
&gt; &gt; &gt;   second field is removed from DOM
&gt; &gt; &gt; (3) GC
&gt; &gt; &gt;   DateTimeEditElement keeps second field
&gt; &gt; &gt; (4) Change step to 1
&gt; &gt; &gt;   second field is inserted again into DOM.
&gt; &gt; 
&gt; &gt; what happens if GC reclaims the second field in (3) and DateTimeEditElement recreates the second field in (4). 
&gt; 
&gt; Each field keeps numeric/symbolic value or empty value of time component rather than DateTimeEditElement keeps value for representing empty field, e.g. &quot;12:--:34&quot;, where &quot;--&quot; represents empty value.

What is your concern about recreating Elements before insertion? Would you elaborate on why you need to keep once-removed Elements?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686480</commentid>
    <comment_count>11</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-03 02:31:09 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; Here is scenario:
&gt; &gt; &gt; &gt; (1) Create shadow elements for &lt;input type=time step=1 value=&quot;12:34:56&quot;&gt;
&gt; &gt; &gt; &gt;   hour, minute, second fields are created and inserted into DOM.
&gt; &gt; &gt; &gt; (2) Change step to 60
&gt; &gt; &gt; &gt;   second field is removed from DOM
&gt; &gt; &gt; &gt; (3) GC
&gt; &gt; &gt; &gt;   DateTimeEditElement keeps second field
&gt; &gt; &gt; &gt; (4) Change step to 1
&gt; &gt; &gt; &gt;   second field is inserted again into DOM.
&gt; &gt; &gt; 
&gt; &gt; &gt; what happens if GC reclaims the second field in (3) and DateTimeEditElement recreates the second field in (4). 
&gt; &gt; 
&gt; &gt; Each field keeps numeric/symbolic value or empty value of time component rather than DateTimeEditElement keeps value for representing empty field, e.g. &quot;12:--:34&quot;, where &quot;--&quot; represents empty value.
&gt; 
&gt; What is your concern about recreating Elements before insertion? Would you elaborate on why you need to keep once-removed Elements?

I&apos;m trying to keep value before/after step change, e.g.
(1) step=1  display=12:34:56
(2) step=60 display=12:34
(3) step=1 display=12:34:56

Although, it may be acceptable that (3) displaying &quot;12:34:--&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686494</commentid>
    <comment_count>12</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-03 02:48:31 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; What is your concern about recreating Elements before insertion? Would you elaborate on why you need to keep once-removed Elements?
&gt; 
&gt; I&apos;m trying to keep value before/after step change, e.g.
&gt; (1) step=1  display=12:34:56
&gt; (2) step=60 display=12:34
&gt; (3) step=1 display=12:34:56
&gt; 
&gt; Although, it may be acceptable that (3) displaying &quot;12:34:--&quot;.

If you want to keep the value, I guess that keeping the value on a DateTimeFieldElement object would be reasonable. Shadow DOM Elements are just for displaying values managed by the DateTimeFieldElement object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686522</commentid>
    <comment_count>13</comment_count>
      <attachid>156309</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-03 03:39:42 -0700</bug_when>
    <thetext>Created attachment 156309
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686523</commentid>
    <comment_count>14</comment_count>
      <attachid>156309</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-03 03:41:02 -0700</bug_when>
    <thetext>Comment on attachment 156309
Patch 3

Could you review this patch?
Thanks in advance.

= Changes since the last patch =
* Use raw pointer for fields in DateTimeEdit class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686528</commentid>
    <comment_count>15</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-03 03:45:52 -0700</bug_when>
    <thetext>Thanks for the update. (I&apos;m not familiar with the area, and I&apos;d like to delegate the rest of review to other reviewers.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688955</commentid>
    <comment_count>16</comment_count>
      <attachid>156309</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-07 01:41:09 -0700</bug_when>
    <thetext>Comment on attachment 156309
Patch 3

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

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:29
&gt; +
&gt; +#if ENABLE(INPUT_TYPE_TIME_MULTIPLE_FIELDS)
&gt; +

nit: These blank lines are unnecessary.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:52
&gt; +static const int hourInMillisecond = 3600 * 1000;
&gt; +static const int minuteInMillisecond = 60 * 1000;
&gt; +static const int secondInMillisecond = 1000;

Please remove them.  We have WTF::msPerHour, WTF::msPerMinute, WTF::msPerSecond.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:62
&gt; +    bool build(const String&amp;);

This class is &apos;Layouter.&apos; So this function should be &apos;layout()&apos;.
Or you had better rename the class to *Builder.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:159
&gt; +        m_editElement-&gt;m_hour11Field = DateTimeHourFieldElement::create(m_editElement-&gt;document(), *m_editElement, hourPsuedoId, 0, 11).leakRef();

nit: Please add a local copy of m_editElement-&gt;document() to clean the code.

This .leakRef() is a real memory leak bug. The codes should be:

RefPtr&lt;DateTimeFieldElement&gt; prpElement = DateTimeHourFieldElement::create(document, ...);
m_editElement-&gt;m_hour11Field = prpElement.get();
addField(prpElement.release());

addField() should take PassRefPtr&lt;DateTimeFieldElement&gt;.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:201
&gt; +        if (needSecondField() || m_formatDetail.hasSecondField) {

Is m_formatDetail.hasSecondField needed?  Here is a case block for DateTimeFormat::FieldTypeSecond. So m_formatDetail.hasSecondField is always true, right?

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:260
&gt; +    m_spinButton = SpinButtonElement::create(document, *this).leakRef();

No one does deref() for m_spinButton.
You should create a SpinButtonElement in setLayout().

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:287
&gt; +    if (m_hour11Field)
&gt; +        m_hour11Field-&gt;removeEventHandler();
&gt; +
&gt; +    if (m_hour12Field)
&gt; +        m_hour12Field-&gt;removeEventHandler();
&gt; +
&gt; +    if (m_hour23Field)
&gt; +        m_hour23Field-&gt;removeEventHandler();
&gt; +
&gt; +    if (m_hour24Field)
&gt; +        m_hour24Field-&gt;removeEventHandler();
&gt; +
&gt; +    if (m_millisecondField)
&gt; +        m_millisecondField-&gt;removeEventHandler();
&gt; +
&gt; +    if (m_minuteField)
&gt; +        m_minuteField-&gt;removeEventHandler();
&gt; +
&gt; +    if (m_AMPMField)
&gt; +        m_AMPMField-&gt;removeEventHandler();
&gt; +
&gt; +    if (m_secondField)
&gt; +        m_secondField-&gt;removeEventHandler();

for (int i = 0; i &lt; m_numberOfFields; ++i) {
         m_fields[i]-&gt;removeEventHandler();

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:296
&gt; +    return container;

should be container.release()

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:316
&gt; +    if (keyboardEvent-&gt;type() == eventNames().keydownEvent &amp;&amp; fieldAt(m_focusFieldIndex) &amp;&amp; !disabled() &amp; !readOnly()) {

We prefer early-return

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:335
&gt; +        if (keyIdentifier == &quot;Left&quot;) {
&gt; +            keyboardEvent-&gt;setDefaultHandled();
&gt; +            const int fieldIndex = previousFieldIndex();
&gt; +            if (fieldAt(fieldIndex))
&gt; +                setFocusField(fieldIndex);
&gt; +            return;
&gt; +        }
&gt; +
&gt; +        if (keyIdentifier == &quot;Right&quot;) {
&gt; +            keyboardEvent-&gt;setDefaultHandled();
&gt; +            const int fieldIndex = nextFieldIndex();
&gt; +            if (fieldAt(fieldIndex))
&gt; +                setFocusField(fieldIndex);
&gt; +            return;
&gt; +        }
&gt; +
&gt; +        if (keyIdentifier == &quot;U+0009&quot;) {

What&apos;s the expectation for key operations with m_focusFieldIndex == InvalidFieldIndex?

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:354
&gt; +    if (mouseEvent-&gt;type() == eventNames().mousedownEvent &amp;&amp; mouseEvent-&gt;button() == LeftButton &amp;&amp; !disabled() &amp;&amp; !readOnly()) {

We prefer early-return.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:368
&gt; +void DateTimeEditElement::moveToNextField()

Move what?
Probably focusOnNextField() is better.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:392
&gt; +bool DateTimeEditElement::readOnly() const

should be isReadOnly()

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:405
&gt; +    while (Node* node = firstChild())
&gt; +        removeChild(node);

You can use ContainerNode::removeChildren() or removeAllChildren().

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:415
&gt; +}

m_focusFieldIndex is not cleared.  Why?

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:417
&gt; +void DateTimeEditElement::setFocusField(int newFocusFieldIndex)

The function name should be focusFieldAt() or setFocusFieldIndex().   I think the former is good because this function is not a simple setter.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:440
&gt; +void DateTimeEditElement::setLayout(const StepRange&amp; stepRange)

The function name sounds a setter for &apos;layout&apos; field.  probably just &apos;layout()&apos; is ok.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:514
&gt; +    if (m_AMPMField)
&gt; +        m_AMPMField-&gt;setValueAsInteger(date.hour() &gt;= 12 ? 1 : 0);
&gt; +
&gt; +    if (m_hour11Field)
&gt; +        m_hour11Field-&gt;setValueAsInteger(date.hour());
&gt; +
&gt; +    if (m_hour12Field)
&gt; +        m_hour12Field-&gt;setValueAsInteger(date.hour());
&gt; +
&gt; +    if (m_hour23Field)
&gt; +        m_hour23Field-&gt;setValueAsInteger(date.hour());
&gt; +
&gt; +    if (m_hour24Field)
&gt; +        m_hour24Field-&gt;setValueAsInteger(date.hour());
&gt; +
&gt; +    if (m_millisecondField)
&gt; +        m_millisecondField-&gt;setValueAsInteger(date.millisecond());
&gt; +
&gt; +    if (m_minuteField)
&gt; +        m_minuteField-&gt;setValueAsInteger(date.minute());
&gt; +
&gt; +    if (m_secondField)
&gt; +        m_secondField-&gt;setValueAsInteger(date.second());

This is not a good design.  Each of fields should know what it wants, and it should be handled by themselves. They should have setValueAsDate(const DateComponents&amp;).

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:540
&gt; +      setFocusField(InvalidFieldIndex);

wrong indentation

&gt; Source/WebCore/html/shadow/DateTimeEditElement.h:69
&gt; +    void removeEventHandler() { m_editControlOwner = 0; }

The function name should be removeEditControlOwner.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.h:76
&gt; +    static const int InvalidFieldIndex = -1;

should be start with a lowercase letter.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.h:83
&gt; +    // Time can be represent at most five fields, such as
&gt; +    //  1. hour
&gt; +    //  2. minute
&gt; +    //  3. second
&gt; +    //  4. millisecond
&gt; +    //  5. AM/PM

You assume this class is for type=time? If so, the class name should be TimeEditElement?

&gt; Source/WebCore/html/shadow/DateTimeEditElement.h:88
&gt; +    virtual bool disabled() const OVERRIDE;

Why do you need to override disabled()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688966</commentid>
    <comment_count>17</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-07 02:05:24 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:159
&gt; &gt; +        m_editElement-&gt;m_hour11Field = DateTimeHourFieldElement::create(m_editElement-&gt;document(), *m_editElement, hourPsuedoId, 0, 11).leakRef();
&gt; 
&gt; nit: Please add a local copy of m_editElement-&gt;document() to clean the code.
&gt; 
&gt; This .leakRef() is a real memory leak bug. The codes should be:
&gt; 
&gt; RefPtr&lt;DateTimeFieldElement&gt; prpElement = DateTimeHourFieldElement::create(document, ...);
&gt; m_editElement-&gt;m_hour11Field = prpElement.get();
&gt; addField(prpElement.release());

Ah, prpElement is a wrong name.  prp prefix is for PassRefPtr variables.
http://www.webkit.org/coding/RefPtr.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690051</commentid>
    <comment_count>18</comment_count>
      <attachid>157149</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-08 01:40:35 -0700</bug_when>
    <thetext>Created attachment 157149
Patch 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690057</commentid>
    <comment_count>19</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-08 01:48:43 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 156309 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156309&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:29
&gt; &gt; +
&gt; &gt; +#if ENABLE(INPUT_TYPE_TIME_MULTIPLE_FIELDS)
&gt; &gt; +
&gt; 
&gt; nit: These blank lines are unnecessary.
&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:52
&gt; &gt; +static const int hourInMillisecond = 3600 * 1000;
&gt; &gt; +static const int minuteInMillisecond = 60 * 1000;
&gt; &gt; +static const int secondInMillisecond = 1000;
&gt; 
&gt; Please remove them.  We have WTF::msPerHour, WTF::msPerMinute, WTF::msPerSecond.

Removed and replaced to msPerXXX.

&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:62
&gt; &gt; +    bool build(const String&amp;);
&gt; 
&gt; This class is &apos;Layouter.&apos; So this function should be &apos;layout()&apos;.
&gt; Or you had better rename the class to *Builder.

Rename to DateTimeEditBuilder.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:159
&gt; &gt; +        m_editElement-&gt;m_hour11Field = DateTimeHourFieldElement::create(m_editElement-&gt;document(), *m_editElement, hourPsuedoId, 0, 11).leakRef();
&gt; 
&gt; nit: Please add a local copy of m_editElement-&gt;document() to clean the code.
&gt; 
&gt; This .leakRef() is a real memory leak bug. The codes should be:

* Rewrite to pass PassRef&lt;DateTimeField&gt; to addField.
* Remove m_*Field fields.
&gt; 
&gt; RefPtr&lt;DateTimeFieldElement&gt; prpElement = DateTimeHourFieldElement::create(document, ...);
&gt; m_editElement-&gt;m_hour11Field = prpElement.get();
&gt; addField(prpElement.release());
&gt; 
&gt; addField() should take PassRefPtr&lt;DateTimeFieldElement&gt;.
Done.

&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:201
&gt; &gt; +        if (needSecondField() || m_formatDetail.hasSecondField) {
&gt; 
&gt; Is m_formatDetail.hasSecondField needed?  Here is a case block for DateTimeFormat::FieldTypeSecond. So m_formatDetail.hasSecondField is always true, right?

Yes. Removed m_formatDetail and hasSecondField.

&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:260
&gt; &gt; +    m_spinButton = SpinButtonElement::create(document, *this).leakRef();
&gt; 
&gt; No one does deref() for m_spinButton.
&gt; You should create a SpinButtonElement in setLayout().
Done

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:287
&gt; &gt; +    if (m_hour11Field)
&gt; &gt; +        m_hour11Field-&gt;removeEventHandler();
&gt; &gt; +
&gt; &gt; +    if (m_hour12Field)
&gt; &gt; +        m_hour12Field-&gt;removeEventHandler();
&gt; &gt; +
&gt; &gt; +    if (m_hour23Field)
&gt; &gt; +        m_hour23Field-&gt;removeEventHandler();
&gt; &gt; +
&gt; &gt; +    if (m_hour24Field)
&gt; &gt; +        m_hour24Field-&gt;removeEventHandler();
&gt; &gt; +
&gt; &gt; +    if (m_millisecondField)
&gt; &gt; +        m_millisecondField-&gt;removeEventHandler();
&gt; &gt; +
&gt; &gt; +    if (m_minuteField)
&gt; &gt; +        m_minuteField-&gt;removeEventHandler();
&gt; &gt; +
&gt; &gt; +    if (m_AMPMField)
&gt; &gt; +        m_AMPMField-&gt;removeEventHandler();
&gt; &gt; +
&gt; &gt; +    if (m_secondField)
&gt; &gt; +        m_secondField-&gt;removeEventHandler();
&gt; 

Introduced DateTimeField::setValueAsDate() and DateTimeMillisedondField, DateTImeSecondField, and DateTimeAMPMField.

&gt; for (int i = 0; i &lt; m_numberOfFields; ++i) {
&gt;          m_fields[i]-&gt;removeEventHandler();
&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:296
&gt; &gt; +    return container;
&gt; 
&gt; should be container.release()
Done


&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:316
&gt; &gt; +    if (keyboardEvent-&gt;type() == eventNames().keydownEvent &amp;&amp; fieldAt(m_focusFieldIndex) &amp;&amp; !disabled() &amp; !readOnly()) {
&gt; 
&gt; We prefer early-return
&gt;
Done

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:335
&gt; &gt; +        if (keyIdentifier == &quot;Left&quot;) {
&gt; &gt; +            keyboardEvent-&gt;setDefaultHandled();
&gt; &gt; +            const int fieldIndex = previousFieldIndex();
&gt; &gt; +            if (fieldAt(fieldIndex))
&gt; &gt; +                setFocusField(fieldIndex);
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        if (keyIdentifier == &quot;Right&quot;) {
&gt; &gt; +            keyboardEvent-&gt;setDefaultHandled();
&gt; &gt; +            const int fieldIndex = nextFieldIndex();
&gt; &gt; +            if (fieldAt(fieldIndex))
&gt; &gt; +                setFocusField(fieldIndex);
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        if (keyIdentifier == &quot;U+0009&quot;) {
&gt; 
&gt; What&apos;s the expectation for key operations with m_focusFieldIndex == InvalidFieldIndex?
&gt; 

This function doe nothing if m_focusFieldIndex == invliadFieldIndex.
It is checked by !fieldAt(m_folcusFieldIndex)

Note: Tab key is handled by base class event handler to move focus to next/previous focus-sable element.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:354
&gt; &gt; +    if (mouseEvent-&gt;type() == eventNames().mousedownEvent &amp;&amp; mouseEvent-&gt;button() == LeftButton &amp;&amp; !disabled() &amp;&amp; !readOnly()) {
&gt; 
&gt; We prefer early-return.
&gt; 
Done

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:368
&gt; &gt; +void DateTimeEditElement::moveToNextField()
&gt; 
&gt; Move what?
&gt; Probably focusOnNextField() is better.
Renamed.

&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:392
&gt; &gt; +bool DateTimeEditElement::readOnly() const
&gt; 
&gt; should be isReadOnly()
Done.

&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:405
&gt; &gt; +    while (Node* node = firstChild())
&gt; &gt; +        removeChild(node);
&gt; 
&gt; You can use ContainerNode::removeChildren() or removeAllChildren().
&gt; 
Done.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:415
&gt; &gt; +}
&gt; 
&gt; m_focusFieldIndex is not cleared.  Why?
Reset m_focusFieldIndex to invalidFocusIndex.

&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:417
&gt; &gt; +void DateTimeEditElement::setFocusField(int newFocusFieldIndex)
&gt; 
&gt; The function name should be focusFieldAt() or setFocusFieldIndex().   I think the former is good because this function is not a simple setter.
&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:440
&gt; &gt; +void DateTimeEditElement::setLayout(const StepRange&amp; stepRange)
&gt; 
&gt; The function name sounds a setter for &apos;layout&apos; field.  probably just &apos;layout()&apos; is ok.
&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:514
&gt; &gt; +    if (m_AMPMField)
&gt; &gt; +        m_AMPMField-&gt;setValueAsInteger(date.hour() &gt;= 12 ? 1 : 0);
&gt; &gt; +
&gt; &gt; +    if (m_hour11Field)
&gt; &gt; +        m_hour11Field-&gt;setValueAsInteger(date.hour());
&gt; &gt; +
&gt; &gt; +    if (m_hour12Field)
&gt; &gt; +        m_hour12Field-&gt;setValueAsInteger(date.hour());
&gt; &gt; +
&gt; &gt; +    if (m_hour23Field)
&gt; &gt; +        m_hour23Field-&gt;setValueAsInteger(date.hour());
&gt; &gt; +
&gt; &gt; +    if (m_hour24Field)
&gt; &gt; +        m_hour24Field-&gt;setValueAsInteger(date.hour());
&gt; &gt; +
&gt; &gt; +    if (m_millisecondField)
&gt; &gt; +        m_millisecondField-&gt;setValueAsInteger(date.millisecond());
&gt; &gt; +
&gt; &gt; +    if (m_minuteField)
&gt; &gt; +        m_minuteField-&gt;setValueAsInteger(date.minute());
&gt; &gt; +
&gt; &gt; +    if (m_secondField)
&gt; &gt; +        m_secondField-&gt;setValueAsInteger(date.second());
&gt; 
&gt; This is not a good design.  Each of fields should know what it wants, and it should be handled by themselves. They should have setValueAsDate(const DateComponents&amp;).
&gt;
Done.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:540
&gt; &gt; +      setFocusField(InvalidFieldIndex);
&gt; 
&gt; wrong indentation
&gt; 
Fixed.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.h:69
&gt; &gt; +    void removeEventHandler() { m_editControlOwner = 0; }
&gt; 
&gt; The function name should be removeEditControlOwner.
&gt; 
Done.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.h:76
&gt; &gt; +    static const int InvalidFieldIndex = -1;
&gt; 
&gt; should be start with a lowercase letter.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.h:83
&gt; &gt; +    // Time can be represent at most five fields, such as
&gt; &gt; +    //  1. hour
&gt; &gt; +    //  2. minute
&gt; &gt; +    //  3. second
&gt; &gt; +    //  4. millisecond
&gt; &gt; +    //  5. AM/PM
&gt; 
&gt; You assume this class is for type=time? If so, the class name should be TimeEditElement?
&gt;

I assume this class will handle datetime. Update comment.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.h:88
&gt; &gt; +    virtual bool disabled() const OVERRIDE;
&gt; 
&gt; Why do you need to override disabled()?

Renamed to isDisabled().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690058</commentid>
    <comment_count>20</comment_count>
      <attachid>157149</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-08 01:51:13 -0700</bug_when>
    <thetext>Comment on attachment 157149
Patch 4

Could you review this patch?
Thanks in advance.

= Changes since the last review =
* Introduce DateTimeAMPMField, DateTimeMillisecondField, DateTimeSecondField in DateTimeFiledElements.h
** for setValueAsDate to remove m_XXXField and switch-like if statements.
** for simplify construction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690059</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-08 01:53:54 -0700</bug_when>
    <thetext>Attachment 157149 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/html/shadow/DateTimeEditElement.cpp:84:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 12 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>690099</commentid>
    <comment_count>22</comment_count>
      <attachid>157149</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-08 02:56:48 -0700</bug_when>
    <thetext>Comment on attachment 157149
Patch 4

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

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:67
&gt; +    class DateTimeFormatAnalyzer : private DateTimeFormat::TokenHandler {

The class name DateTimeFormatAnalyzer sounds overkill.  It is MilliSecondFieldChecker or something.
We have no much benefit to make it an inner class of DateTimeEditBuilder. I think moving this class to the top level improves the code readability.

BTW, do we really need to respect FieldTypeFractionalSecond in the format? Ignoring it and checking StepRange would reduce the code size and the code complexity.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:69
&gt; +    public:
&gt; +        DateTimeFormatAnalyzer()

The constructor should be private.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:139
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, hourPsuedoId, (&quot;-webkit-datetime-edit-hour-field&quot;));
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, millisecondPsuedoId, (&quot;-webkit-datetime-edit-millisecond-field&quot;));
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, minutePsuedoId, (&quot;-webkit-datetime-edit-minute-field&quot;));
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, ampmPsuedoId, (&quot;-webkit-datetime-edit-ampm-field&quot;));
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, secondPsuedoId, (&quot;-webkit-datetime-edit-second-field&quot;));

Now we have dedicated classes for these types. The constructor of each types can set its pseudo ID and we don&apos;t need to pass them in this function.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:208
&gt; +}
&gt; +
&gt; +DateTimeEditElement::EditControlOwner::~EditControlOwner()
&gt; +{
&gt; +}
&gt; +
&gt; +DateTimeEditElement::DateTimeEditElement(Document* document, EditControlOwner&amp; editControlOwner)

nit: This file has multiple classes. Adding delimiter comments improves code readability.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:375
&gt; +    for (int fieldIndex = m_focusFieldIndex + 1; fieldIndex &lt; m_numberOfFields; ++fieldIndex) {

Need ASSERT(m_focusFieldIndex != invalidFieldIndex) ?

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:384
&gt; +    for (int fieldIndex = m_focusFieldIndex - 1; fieldIndex &gt;= 0; --fieldIndex) {

ditto.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:440
&gt; +void DateTimeEditElement::setValueAsEmpty()

The function name looks strange. It should be setEmptyValue() or clearValue().  setValueAs* has been used for types such as setValueAsNumber and setValueAsDate().

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:473
&gt; +           return std::numeric_limits&lt;double&gt;::quiet_NaN();

wrong indentation

&gt; Source/WebCore/html/shadow/DateTimeEditElement.h:113
&gt; +    DateTimeFieldElement* m_fields[maximumNumberOfFields];
&gt; +    int m_focusFieldIndex;
&gt; +    int m_numberOfFields;

Why don&apos;t you use Vector&lt;DateTimeFieldElement, maximumNumberOfFields&gt;?

&gt; Source/WebCore/html/shadow/DateTimeFieldElement.cpp:51
&gt; +    if (event-&gt;isKeyboardEvent() &amp;&amp; event-&gt;type() == eventNames().keydownEvent) {

We prefer early-return

&gt; Source/WebCore/html/shadow/DateTimeFieldElement.cpp:92
&gt; +    setAttribute(readonlyAttr, emptyString());

should use setBooleanAttribute()

&gt; Source/WebCore/html/shadow/DateTimeFieldElement.cpp:99
&gt; +    removeAttribute(readonlyAttr);

should use setBooleanAttribute()

&gt; Source/WebCore/html/shadow/DateTimeFieldElement.cpp:113
&gt; +    ExceptionCode ec;
&gt; +    textNode-&gt;replaceWholeText(newVisibleValue, ec);

should be textNode-&gt;replaceWholeText(newVisibleValue, ASSERT_NO_EXCEPTION);

&gt; Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp:77
&gt; +    return static_cast&lt;KeyboardEvent*&gt;(event)-&gt;keyCode() - &apos;0&apos;;

How to support localized digits?

&gt; Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp:154
&gt; +        return String::number(m_value);
&gt; +
&gt; +    if (m_range.maximum &gt; 99)
&gt; +        return String::format(&quot;%03d&quot;, m_value);
&gt; +
&gt; +    return String::format(&quot;%02d&quot;, m_value);

Need number localization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690106</commentid>
    <comment_count>23</comment_count>
      <attachid>157149</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-08 03:21:33 -0700</bug_when>
    <thetext>Comment on attachment 157149
Patch 4

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

&gt;&gt; Source/WebCore/html/shadow/DateTimeFieldElement.cpp:92
&gt;&gt; +    setAttribute(readonlyAttr, emptyString());
&gt; 
&gt; should use setBooleanAttribute()

This is a real bug.  Setting emptyString() doesn&apos;t remove the attribute. fastHasAttribute(readonlyAttr) still returns true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692056</commentid>
    <comment_count>24</comment_count>
      <attachid>157601</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-09 18:05:32 -0700</bug_when>
    <thetext>Created attachment 157601
Patch 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692070</commentid>
    <comment_count>25</comment_count>
      <attachid>157604</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-09 18:22:27 -0700</bug_when>
    <thetext>Created attachment 157604
Patch 6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692072</commentid>
    <comment_count>26</comment_count>
      <attachid>157604</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-09 18:24:40 -0700</bug_when>
    <thetext>Comment on attachment 157604
Patch 6

Could you review this patch?
Thanks in advance.

= Changes since the last review =
* Use convert{From,To}LocalizedNumber for localized digit input and localized number display
* Use Vector&lt;DateTimeFieldElement*&gt;
* Changes follow comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692121</commentid>
    <comment_count>27</comment_count>
      <attachid>157604</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-09 19:37:54 -0700</bug_when>
    <thetext>Comment on attachment 157604
Patch 6

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

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:81
&gt; +void DateTimeEditBuilder::addField(PassRefPtr&lt;DateTimeFieldElement&gt; field) const
&gt; +{
&gt; +    if (m_editElement-&gt;m_fields.size() == m_editElement-&gt;m_fields.capacity())
&gt; +        return;
&gt; +    m_editElement-&gt;m_fields.append(field.get());
&gt; +    m_editElement-&gt;appendChild(field);
&gt; +}

This should be a member function of DateTimeEditElement, and we can remove a &quot;friend&quot; declaration of DateTimeEditElement.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:160
&gt; +bool DateTimeEditBuilder::needSecondField() const

This function is similar to other needFooField() functions. Let&apos;s move this definition to the next to them.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:369
&gt; +    m_fields.clear();

Use shrink(0) instead of clear(), which deallocates the buffer.

&gt; Source/WebCore/html/shadow/DateTimeFieldElement.cpp:130
&gt; +    return hasValue() ? static_cast&lt;double&gt;(valueAsInteger()) * unitInMillisecond() : std::numeric_limits&lt;double&gt;::quiet_NaN();

static_cast is not needed beucase unitInMillisecond() returns double.

&gt; Source/WebCore/html/shadow/DateTimeFieldElement.h:56
&gt; +    virtual void defaultEventHandler(Event*);

OVERRIDE

&gt; Source/WebCore/html/shadow/DateTimeFieldElement.h:81
&gt; +    FieldEventHandler* m_fieldEventHandler;

nit: add a blank line before the first data member.

&gt; Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp:61
&gt; +int DateTimeNumericFieldElement::Range::ensureInRange(int value) const

We use the word &apos;clamp&apos; for such operation.

&gt; Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp:111
&gt; +    m_hasValue = isReadOnly();

Why?

&gt; Source/WebCore/html/shadow/DateTimeSymbolicFieldElement.cpp:54
&gt; +        if (WTF::Unicode::toLower(m_symbols[index][0]) == charCode) {

We had better check m_symbols[index].length() &gt; 0.

&gt; Source/WebCore/html/shadow/DateTimeSymbolicFieldElement.h:48
&gt; +    virtual bool hasValue() const;

OVERRIDE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692223</commentid>
    <comment_count>28</comment_count>
      <attachid>157640</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-09 22:35:08 -0700</bug_when>
    <thetext>Created attachment 157640
Patch 7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692226</commentid>
    <comment_count>29</comment_count>
      <attachid>157640</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-09 22:37:17 -0700</bug_when>
    <thetext>Comment on attachment 157640
Patch 7

Could you review this patch?
Thanks in advance.

= Changes since the last review =
* Move DateTimeEditBuilder::addField to DateTimeEditElement.
* Changes for comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692243</commentid>
    <comment_count>30</comment_count>
      <attachid>157640</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-09 23:26:47 -0700</bug_when>
    <thetext>Comment on attachment 157640
Patch 7

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

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:212
&gt; +    return fieldIndex &gt;= 0 &amp;&amp; static_cast&lt;size_t&gt;(fieldIndex) &lt; m_fields.size() ? m_fields[fieldIndex] : 0;

nit:
If we define invalidFieldIndex as static_cast&lt;size_t&gt;(-1), and make m_focusFieldIndex size_t, this code would be much simpler.

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:360
&gt; +    return -1;

return invalidFieldIndex; ?

&gt; Source/WebCore/html/shadow/DateTimeFieldElement.cpp:61
&gt; +}

nit: We had better support wheel events.  It&apos;s ok to address it in a separated patch.

&gt; Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp:111
&gt; +    // For read-only field, empty value means value 0.
&gt; +    m_hasValue = isReadOnly();

I see.
However, we should make a second field read-only with value=30 if &lt;input type=time min=&quot;00:00:30&quot; step=&quot;60&quot;&gt;, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692330</commentid>
    <comment_count>31</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-10 01:17:48 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 157640 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=157640&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:212
&gt; &gt; +    return fieldIndex &gt;= 0 &amp;&amp; static_cast&lt;size_t&gt;(fieldIndex) &lt; m_fields.size() ? m_fields[fieldIndex] : 0;
&gt; 
&gt; nit:
&gt; If we define invalidFieldIndex as static_cast&lt;size_t&gt;(-1), and make m_focusFieldIndex size_t, this code would be much simpler.
&gt; 
Done.

&gt; &gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:360
&gt; &gt; +    return -1;
&gt; 
&gt; return invalidFieldIndex; ?
&gt; 
Done.


&gt; &gt; Source/WebCore/html/shadow/DateTimeFieldElement.cpp:61
&gt; &gt; +}
&gt; 
&gt; nit: We had better support wheel events.  It&apos;s ok to address it in a separated patch.
&gt; 
I&apos;ll have another patch.

&gt; &gt; Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp:111
&gt; &gt; +    // For read-only field, empty value means value 0.
&gt; &gt; +    m_hasValue = isReadOnly();
&gt; 
&gt; I see.
&gt; However, we should make a second field read-only with value=30 if &lt;input type=time min=&quot;00:00:30&quot; step=&quot;60&quot;&gt;, right?
Yes, you&apos;re right. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692335</commentid>
    <comment_count>32</comment_count>
      <attachid>157669</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 01:24:18 -0700</bug_when>
    <thetext>Created attachment 157669
Patch 8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692337</commentid>
    <comment_count>33</comment_count>
      <attachid>157669</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 01:27:17 -0700</bug_when>
    <thetext>Comment on attachment 157669
Patch 8

Could you review this patch?
Thanks in advance.

= Changes since the last review =
* Make DateTimeEditElement::m_focusFieldIndex to size_t
* Add DateComponents parameter to setEmptyValue for read-only fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692338</commentid>
    <comment_count>34</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-10 01:30:45 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 157669 [details])
&gt; Could you review this patch?

Please set r? flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692339</commentid>
    <comment_count>35</comment_count>
      <attachid>157671</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 01:30:47 -0700</bug_when>
    <thetext>Created attachment 157671
Patch 9</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692341</commentid>
    <comment_count>36</comment_count>
      <attachid>157671</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 01:31:34 -0700</bug_when>
    <thetext>Comment on attachment 157671
Patch 9

Could you review this patch?
Thanks in advance.

= Changes since the last patch =
* Updates ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692344</commentid>
    <comment_count>37</comment_count>
      <attachid>157671</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-10 01:37:36 -0700</bug_when>
    <thetext>Comment on attachment 157671
Patch 9

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

&gt; Source/WebCore/html/shadow/DateTimeEditElement.cpp:376
&gt; +      --fieldIndex;

wrong indentation

&gt; Source/WebCore/html/shadow/DateTimeEditElement.h:70
&gt; +    void setEmptyValue(const DateComponents&amp;);

it&apos;s unclear that what is passed by this DateComponents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692353</commentid>
    <comment_count>38</comment_count>
      <attachid>157676</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 01:53:13 -0700</bug_when>
    <thetext>Created attachment 157676
Patch 11</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692354</commentid>
    <comment_count>39</comment_count>
      <attachid>157676</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 01:55:44 -0700</bug_when>
    <thetext>Comment on attachment 157676
Patch 11

Could you review this patch?
Thanks in advance.

= Changes since the last review =
* Rename a parameter of setEmptyValue to dateForReadOnlyField and put it into function declarations.
* Fix indentation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692359</commentid>
    <comment_count>40</comment_count>
      <attachid>157676</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-10 02:01:27 -0700</bug_when>
    <thetext>Comment on attachment 157676
Patch 11

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

ok.

&gt; Source/WebCore/html/shadow/DateTimeNumericFieldElement.h:45
&gt; +public:
&gt; +    struct Range {

should be protected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692363</commentid>
    <comment_count>41</comment_count>
      <attachid>157680</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 02:06:46 -0700</bug_when>
    <thetext>Created attachment 157680
Patch 12</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692377</commentid>
    <comment_count>42</comment_count>
      <attachid>157687</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 02:23:30 -0700</bug_when>
    <thetext>Created attachment 157687
Patch 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692380</commentid>
    <comment_count>43</comment_count>
      <attachid>157687</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-10 02:25:05 -0700</bug_when>
    <thetext>Comment on attachment 157687
Patch 13

Clearing flags on attachment: 157687

Committed r125263: &lt;http://trac.webkit.org/changeset/125263&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692381</commentid>
    <comment_count>44</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-10 02:25:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156257</attachid>
            <date>2012-08-02 21:56:22 -0700</date>
            <delta_ts>2012-08-02 23:22:19 -0700</delta_ts>
            <desc>Patch 1</desc>
            <filename>bug-92960-20120803135602.patch</filename>
            <type>text/plain</type>
            <size>65137</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWExMDZkMTU4M2M4MzM1
NGM0OGZhMGU4ZmQ1OTI0ZWRiMjE2NmFjZi4uMDc4NDRlZmYwZGM5ZDI2MTg2YTdiNjZiNmU0ZGRh
NjNjNDVmMGYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNSBAQAorMjAxMi0wOC0wMiAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lRWRpdEVsZW1lbnQgLSBjb250YWluZXIgb2Yg
bXVsdGlwbGUgRGF0ZVRpbWVGaWVsZEVsZW1lbnQKKyAgICAgICAgICAgIC0gRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQgLSBiYXNlIGNsYXNzIG9mIGZpZWxkIFVJCisgICAgICAgICAgICAtIERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudCAtIGZpZWxkIFVJIGZvciBudW1lcmljIHZhbHVlLCB1c2VkCisg
ICAgICAgICAgICAgICAgZm9yIG1pbnV0ZSwgc2Vjb25kLCBhbmQgbWlsbGlzZWNvbmQKKyAgICAg
ICAgICAgIC0gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIGhvdXIKKyAg
ICAgICAgICAgIC0gRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCAtIGZpZWxkIFVJIGZvciBz
eW1ib2xjIHZhbHVlLCB1c2VkCisgICAgICAgICAgICAgICAgZm9yIEFNL1BNLgorICAgICAgICBp
bnNpZGUgb2YgRU5BQkxFX0lOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMgYnVpbGQgZmxh
Zy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYmVo
YXZpb3IuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IENoYW5nZWQgdG8gaW5jbHVkZSBodG1s
L3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0
ZVRpbWVFZGRpdEVsZW1lbnQuaCwgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3Bw
LAorICAgICAgICBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oLCBodG1sL3NoYWRv
dy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuY3BwLAorICAgICAgICBodG1sL3NoYWRvdy9EYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQuaCwgaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwLAorICAg
ICAgICBhbmQgaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oLgorICAg
ICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERhdGVUaW1lRWRpdExheW91dGVyKTogTGF5b3V0IERhdGVUaW1lRmllbGRFbGVtZW50IGJh
c2VkIG9uIERhdGVUaW1lRm9ybWF0IHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdExheW91dGVyOjpEYXRlVGltZUVkaXRMYXlvdXRlcik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRMYXlvdXRlcjo6bmVlZFNlY29uZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdERldGFpbDo6RGF0ZVRpbWVGb3Jt
YXREZXRhaWwpOgorICAgICAgICAoRGF0ZVRpbWVGb3JtYXREZXRhaWwpOgorICAgICAgICAoRGF0
ZVRpbWVGb3JtYXRBbmFseXplcik6IENoZWNrZXMgRGF0ZVRpbWVGb3JtYXQgc3RyaW5nIGhhcyBz
ZWNvbmQgZmllbGQgYW5kIG1pbGxpc2Vjb25kIGZpZWxkCisgICAgICAgIGZvciBhZGRpbmcgdGhl
bSBpZiBvd25lciBvZiBEYXRlVGltZUVkaXRFbGVtZW50IHdhbnRzIHRvIGhhdmUgdGhlbSBidXQg
RGF0ZVRpbWVGb3JtYXQgc3RyaW5nIGRvZXNuJ3QgaGF2ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdEFuYWx5emVyOjphbmFseXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdEFuYWx5
emVyOjp2aXNpdEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVy
OjpEYXRlVGltZUZvcm1hdEFuYWx5emVyOjp2aXNpdExpdGVyYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OmFkZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdExheW91dGVyOjpuZWVkTWlsbGlzZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRMYXlvdXRlcjo6dmlzaXRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRMYXlvdXRlcjo6dmlzaXRMaXRlcmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTog
Q2FsbGVkIHdoZW4gb3duZXIncyBkaXNhYmxlZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkVmFsdWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6bW92ZVRvTmV4dEZpZWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6Om5leHRGaWVsZEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnByZXZpb3VzRmllbGRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCk6ICBD
YWxsZWQgd2hlbiBvd25lcidzIGRpc2FibGVkIHN0YXRlIGlzIGNoYW5nZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRGb2N1c0ZpZWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcERvd24pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBVcCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojp1cGRhdGVVSVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnZhbHVlQXNEb3VibGUpOgorICAgICAgICAq
IGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChEYXRl
VGltZUVkaXRFbGVtZW50KToKKyAgICAgICAgKEVkaXRDb250cm9sT3duZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwbGF5U2l6ZU9mTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlcjo6
fkZpZWxkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVt
ZW50OjpEYXRlVGltZUZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZp
ZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUZpZWxkRWxlbWVudDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6cmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OnNldFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRF
bGVtZW50OjpzZXRSZWFkV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVs
ZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZp
ZWxkRWxlbWVudDo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRp
bWVGaWVsZEVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChEYXRlVGltZUZpZWxkRWxlbWVudCk6
CisgICAgICAgIChGaWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRl
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6dmFsdWVB
c0ludGVnZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudCk6CisgICAgICAg
ICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpkaXNwbGF5U2l6ZU9mTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUluUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6bWFwRXZlbnRUb0RpZ2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6Omhhc1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6aXNDb250aW51b3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24pOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwVXApOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZh
bHVlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQu
aDogQWRkZWQuCisgICAgICAgIChEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQpOgorICAgICAg
ICAoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
OjplbnN1cmVJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6cmFuZ2UpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNG
aWVsZEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9s
aWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6aGFz
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6
c2V0VmFsdWVBc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVs
ZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6OnN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUpOgorICAgICAg
ICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KToKKwogMjAxMi0wOC0wMiAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IGNyYXNoZXMgZm9y
IDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2l0aCBkaXNwbGF5OnJ1bi1pbi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAzMTliMmFkZTk1MzkyNDk0MmQ3MTYzMDYzOGM2MzZlZTVmMjJlZjhmLi4zN2FlYWUy
NmM5YmJmNzc0ODkyMWQyNWNiNTZmZDhjMTQ3OTljN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01
NzQzLDYgKzU3NDMsMTYgQEAKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50RGlzdHJp
YnV0b3IuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnku
Y3BwJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oJywK
KyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oJywKKyAgICAgICAgICAg
ICdodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2h0
bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hh
ZG93L0RhdGVUaW1lSG91ckZpZWxkRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvc2hh
ZG93L0RhdGVUaW1lSG91ckZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRv
dy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3No
YWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRtbC9z
aGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2h0
bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAn
aHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwJywKICAgICAgICAgICAgICdodG1s
L3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRv
dy9IVE1MQ29udGVudEVsZW1lbnQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzk3ZWFmN2Y5NWZkMmYy
OGY4YzJmY2ZjM2ZlNThiZGU0YmE4NmMxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNTQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElO
UFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZUVkaXRF
bGVtZW50LmgiCisKKyNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkRhdGVU
aW1lRm9ybWF0LmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50LmgiCisjaW5j
bHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKKyNpbmNsdWRlICJMb2NhbGl6ZWREYXRlLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVy
LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2lu
Y2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworc3RhdGlj
IGNvbnN0IGludCBob3VySW5NaWxsaXNlY29uZCA9IDM2MDAgKiAxMDAwOworc3RhdGljIGNvbnN0
IGludCBtaW51dGVJbk1pbGxpc2Vjb25kID0gNjAgKiAxMDAwOworc3RhdGljIGNvbnN0IGludCBz
ZWNvbmRJbk1pbGxpc2Vjb25kID0gMTAwMDsKKworY2xhc3MgRGF0ZVRpbWVFZGl0TGF5b3V0ZXIg
OiBwcml2YXRlIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgeworcHVibGljOgorICAgIERh
dGVUaW1lRWRpdExheW91dGVyKERhdGVUaW1lRWRpdEVsZW1lbnQqIGVsZW1udCwgY29uc3QgU3Rl
cFJhbmdlJiBzdGVwUmFuZ2UpCisgICAgICAgIDogbV9lZGl0RWxlbWVudChlbGVtbnQpCisgICAg
ICAgICwgbV9zdGVwUmFuZ2Uoc3RlcFJhbmdlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGJ1
aWxkKGNvbnN0IFN0cmluZyYpOworCisgICAgYm9vbCBuZWVkU2Vjb25kRmllbGQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKG1p
bnV0ZUluTWlsbGlzZWNvbmQpLmlzWmVybygpCisgICAgICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uu
c3RlcCgpLnJlbWFpbmRlcihtaW51dGVJbk1pbGxpc2Vjb25kKS5pc1plcm8oKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgc3RydWN0IERhdGVUaW1lRm9ybWF0RGV0YWlsIHsKKyAgICAgICAgRGF0
ZVRpbWVGb3JtYXREZXRhaWwoKQorICAgICAgICAgICAgOiBoYXNNaWxsaXNlY29uZEZpZWxkKGZh
bHNlKQorICAgICAgICAgICAgLCBoYXNTZWNvbmRGaWVsZChmYWxzZSkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBoYXNNaWxsaXNlY29uZEZpZWxkOworICAgICAgICBib29s
IGhhc1NlY29uZEZpZWxkOworICAgIH07CisKKyAgICBjbGFzcyBEYXRlVGltZUZvcm1hdEFuYWx5
emVyIDogcHJpdmF0ZSBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBEYXRlVGltZUZvcm1hdERldGFpbCBhbmFseXplKGNvbnN0IFN0cmlu
ZyYgZm9ybWF0U3RyaW5nKQorICAgICAgICB7CisgICAgICAgICAgICBEYXRlVGltZUZvcm1hdEFu
YWx5emVyIGFuYWx5emVyOworICAgICAgICAgICAgRGF0ZVRpbWVGb3JtYXQ6OnBhcnNlKGZvcm1h
dFN0cmluZywgYW5hbHl6ZXIpOworICAgICAgICAgICAgcmV0dXJuIGFuYWx5emVyLm1fZm9ybWF0
RGV0YWlsOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBEYXRlVGltZUZv
cm1hdDo6VG9rZW5IYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgdm9pZCB2aXNpdEZpZWxkKERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChmaWVsZFR5cGUgPT0gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9u
YWxTZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBtX2Zvcm1hdERldGFpbC5oYXNNaWxsaXNlY29u
ZEZpZWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT0gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNl
Y29uZCkgeworICAgICAgICAgICAgICAgIG1fZm9ybWF0RGV0YWlsLmhhc1NlY29uZEZpZWxkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmKSB7IH0KKworICAgICAg
ICBEYXRlVGltZUZvcm1hdERldGFpbCBtX2Zvcm1hdERldGFpbDsKKyAgICB9OworCisgICAgdm9p
ZCBhZGRGaWVsZChEYXRlVGltZUZpZWxkRWxlbWVudCogZmllbGQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2VkaXRFbGVtZW50LT5tX251bWJlck9mRmll
bGRzKSA+PSBXVEZfQVJSQVlfTEVOR1RIKG1fZWRpdEVsZW1lbnQtPm1fZmllbGRzKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgbV9lZGl0RWxlbWVudC0+YXBwZW5kQ2hpbGQoZmllbGQp
OworICAgICAgICBtX2VkaXRFbGVtZW50LT5tX2ZpZWxkc1ttX2VkaXRFbGVtZW50LT5tX251bWJl
ck9mRmllbGRzXSA9IGZpZWxkOworICAgICAgICArK21fZWRpdEVsZW1lbnQtPm1fbnVtYmVyT2ZG
aWVsZHM7CisgICAgfQorCisgICAgYm9vbCBuZWVkTWlsbGlzZWNvbmRGaWVsZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc2Vj
b25kSW5NaWxsaXNlY29uZCkuaXNaZXJvKCkKKyAgICAgICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5z
dGVwKCkucmVtYWluZGVyKHNlY29uZEluTWlsbGlzZWNvbmQpLmlzWmVybygpOworICAgIH0KKwor
ICAgIGJvb2wgbmVlZE1pbnV0ZUZpZWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
bV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihob3VySW5NaWxsaXNlY29uZCkuaXNaZXJv
KCkKKyAgICAgICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVyKGhvdXJJbk1p
bGxpc2Vjb25kKS5pc1plcm8oKTsKKyAgICB9CisKKyAgICAvLyBEYXRlVGltZUZvcm1hdDo6VG9r
ZW5IYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2b2lkIHZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZSwgaW50KTsKKyAgICB2b2lkIHZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmKTsK
KworICAgIERhdGVUaW1lRm9ybWF0RGV0YWlsIG1fZm9ybWF0RGV0YWlsOworICAgIERhdGVUaW1l
RWRpdEVsZW1lbnQqIG1fZWRpdEVsZW1lbnQ7CisgICAgY29uc3QgU3RlcFJhbmdlJiBtX3N0ZXBS
YW5nZTsKK307CisKK2Jvb2wgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OmJ1aWxkKGNvbnN0IFN0cmlu
ZyYgZm9ybWF0U3RyaW5nKQoreworICAgIG1fZm9ybWF0RGV0YWlsID0gRGF0ZVRpbWVGb3JtYXRB
bmFseXplcjo6YW5hbHl6ZShmb3JtYXRTdHJpbmcpOworICAgIG1fZWRpdEVsZW1lbnQtPnJlc2V0
TGF5b3V0KCk7CisgICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0OjpwYXJzZShmb3JtYXRTdHJpbmcs
ICp0aGlzKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRMYXlvdXRlcjo6dmlzaXRGaWVsZChEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50KQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBob3VyUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1l
ZGl0LWhvdXItZmllbGQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IG1pbGxpc2Vjb25kUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25k
LWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBtaW51dGVQ
c3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLWZpZWxkIikpOworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBhbXBtUHN1ZWRvSWQsICgiLXdlYmtpdC1k
YXRldGltZS1lZGl0LWFtcG0tZmllbGQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIHNlY29uZFBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQt
ZmllbGQiKSk7CisKKyAgICBzd2l0Y2ggKGZpZWxkVHlwZSkgeworICAgIGNhc2UgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUhvdXIxMToKKyAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5tX2hv
dXIxMUZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9ob3VyMTFGaWVsZCA9IERh
dGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCks
ICptX2VkaXRFbGVtZW50LCBob3VyUHN1ZWRvSWQsIDAsIDExKTsKKyAgICAgICAgYWRkRmllbGQo
bV9lZGl0RWxlbWVudC0+bV9ob3VyMTFGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMjoKKyAgICAgICAgaWYgKCFt
X2VkaXRFbGVtZW50LT5tX2hvdXIxMkZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+
bV9ob3VyMTJGaWVsZCA9IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVs
ZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50LCBob3VyUHN1ZWRvSWQsIDEsIDEyKTsK
KyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxlbWVudC0+bV9ob3VyMTJGaWVsZC5nZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIy
MzoKKyAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5tX2hvdXIyM0ZpZWxkKQorICAgICAgICAg
ICAgbV9lZGl0RWxlbWVudC0+bV9ob3VyMjNGaWVsZCA9IERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50LCBob3Vy
UHN1ZWRvSWQsIDAsIDIzKTsKKyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxlbWVudC0+bV9ob3Vy
MjNGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUhvdXIyNDoKKyAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5tX2hvdXIy
NEZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9ob3VyMjRGaWVsZCA9IERhdGVU
aW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICpt
X2VkaXRFbGVtZW50LCBob3VyUHN1ZWRvSWQsIDEsIDI0KTsKKyAgICAgICAgYWRkRmllbGQobV9l
ZGl0RWxlbWVudC0+bV9ob3VyMjRGaWVsZC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZToKKyAgICAgICAgaWYgKCFtX2Vk
aXRFbGVtZW50LT5tX21pbnV0ZUZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9t
aW51dGVGaWVsZCA9IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVs
ZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50LCBtaW51dGVQc3VlZG9JZCwgbWludXRl
SW5NaWxsaXNlY29uZCwgMCwgNTkpOworICAgICAgICBpZiAobmVlZE1pbnV0ZUZpZWxkKCkpCisg
ICAgICAgICAgICBtX2VkaXRFbGVtZW50LT5tX21pbnV0ZUZpZWxkLT5zZXRSZWFkV3JpdGUoKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2VkaXRFbGVtZW50LT5tX21pbnV0ZUZpZWxk
LT5zZXRSZWFkT25seSgpOworICAgICAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5tX21pbnV0
ZUZpZWxkLT5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1fbWlu
dXRlRmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKDAsIERhdGVUaW1lRmllbGRFbGVtZW50OjpEaXNw
YXRjaE5vRXZlbnQpOworICAgICAgICB9CisgICAgICAgIGFkZEZpZWxkKG1fZWRpdEVsZW1lbnQt
Pm1fbWludXRlRmllbGQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVQZXJpb2Q6CisgICAgICAgIGlmICghbV9lZGl0RWxlbWVudC0+
bV9BTVBNRmllbGQpCisgICAgICAgICAgICBtX2VkaXRFbGVtZW50LT5tX0FNUE1GaWVsZCA9IERh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LT5kb2N1bWVu
dCgpLCAqbV9lZGl0RWxlbWVudCwgYW1wbVBzdWVkb0lkLCBob3VySW5NaWxsaXNlY29uZCAqIDEy
LCB0aW1lQU1QTUxhYmVscygpKTsKKyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxlbWVudC0+bV9B
TVBNRmllbGQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVTZWNvbmQ6CisgICAgICAgIGlmIChuZWVkU2Vjb25kRmllbGQoKSB8fCBt
X2Zvcm1hdERldGFpbC5oYXNTZWNvbmRGaWVsZCkgeworICAgICAgICAgICAgaWYgKCFtX2VkaXRF
bGVtZW50LT5tX3NlY29uZEZpZWxkKQorICAgICAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1f
c2Vjb25kRmllbGQgPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VkaXRF
bGVtZW50LT5kb2N1bWVudCgpLCAqbV9lZGl0RWxlbWVudCwgc2Vjb25kUHN1ZWRvSWQsIHNlY29u
ZEluTWlsbGlzZWNvbmQsIDAsIDU5KTsKKyAgICAgICAgICAgIGlmIChuZWVkU2Vjb25kRmllbGQo
KSkKKyAgICAgICAgICAgICAgICBtX2VkaXRFbGVtZW50LT5tX3NlY29uZEZpZWxkLT5zZXRSZWFk
V3JpdGUoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fZWRpdEVsZW1l
bnQtPm1fc2Vjb25kRmllbGQtPnNldFJlYWRPbmx5KCk7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2VkaXRFbGVtZW50LT5tX3NlY29uZEZpZWxkLT5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgICAg
ICAgICBtX2VkaXRFbGVtZW50LT5tX3NlY29uZEZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcigwLCBE
YXRlVGltZUZpZWxkRWxlbWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGFkZEZpZWxkKG1fZWRpdEVsZW1lbnQtPm1fc2Vjb25kRmllbGQuZ2V0KCkpOwor
CisgICAgICAgICAgICBpZiAobmVlZE1pbGxpc2Vjb25kRmllbGQoKSAmJiAhbV9mb3JtYXREZXRh
aWwuaGFzTWlsbGlzZWNvbmRGaWVsZCkgeworICAgICAgICAgICAgICAgIHZpc2l0TGl0ZXJhbChs
b2NhbGl6ZWREZWNpbWFsU2VwYXJhdG9yKCkpOworICAgICAgICAgICAgICAgIHZpc2l0RmllbGQo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQsIDMpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQ6CisgICAgICAgIGlmIChuZWVkTWlsbGlzZWNv
bmRGaWVsZCgpKSB7CisgICAgICAgICAgICBpZiAoIW1fZWRpdEVsZW1lbnQtPm1fbWlsbGlzZWNv
bmRGaWVsZCkKKyAgICAgICAgICAgICAgICBtX2VkaXRFbGVtZW50LT5tX21pbGxpc2Vjb25kRmll
bGQgPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LT5k
b2N1bWVudCgpLCAqbV9lZGl0RWxlbWVudCwgbWlsbGlzZWNvbmRQc3VlZG9JZCwgMSwgMCwgOTk5
KTsKKyAgICAgICAgICAgIGFkZEZpZWxkKG1fZWRpdEVsZW1lbnQtPm1fbWlsbGlzZWNvbmRGaWVs
ZC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRMYXlvdXRlcjo6dmlz
aXRMaXRlcmFsKGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBBU1NFUlQodGV4dC5sZW5ndGgo
KSk7CisgICAgbV9lZGl0RWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZWRpdEVs
ZW1lbnQtPmRvY3VtZW50KCksIHRleHQpKTsKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RWRp
dENvbnRyb2xPd25lcjo6fkVkaXRDb250cm9sT3duZXIoKQoreworfQorCitEYXRlVGltZUVkaXRF
bGVtZW50OjpEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRWRpdENvbnRy
b2xPd25lciYgZWRpdENvbnRyb2xPd25lcikKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywg
ZG9jdW1lbnQpCisgICAgLCBtX2VkaXRDb250cm9sT3duZXIoJmVkaXRDb250cm9sT3duZXIpCisg
ICAgLCBtX2ZvY3VzRmllbGRJbmRleChJbnZhbGlkRmllbGRJbmRleCkKKyAgICAsIG1fbnVtYmVy
T2ZGaWVsZHMoMCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZGF0
ZVRpbWVFZGl0UHNldWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0IikpOworICAgIHNldFNo
YWRvd1BzZXVkb0lkKGRhdGVUaW1lRWRpdFBzZXVkb0lkKTsKKworICAgIG1fc3BpbkJ1dHRvbiA9
IFNwaW5CdXR0b25FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsICp0aGlzKTsKK30KKworRGF0ZVRp
bWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQoKQoreworICAgIGlmIChtX2hvdXIx
MUZpZWxkKQorICAgICAgICBtX2hvdXIxMUZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKwor
ICAgIGlmIChtX2hvdXIxMkZpZWxkKQorICAgICAgICBtX2hvdXIxMkZpZWxkLT5yZW1vdmVFdmVu
dEhhbmRsZXIoKTsKKworICAgIGlmIChtX2hvdXIyM0ZpZWxkKQorICAgICAgICBtX2hvdXIyM0Zp
ZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX2hvdXIyNEZpZWxkKQorICAg
ICAgICBtX2hvdXIyNEZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX21p
bGxpc2Vjb25kRmllbGQpCisgICAgICAgIG1fbWlsbGlzZWNvbmRGaWVsZC0+cmVtb3ZlRXZlbnRI
YW5kbGVyKCk7CisKKyAgICBpZiAobV9taW51dGVGaWVsZCkKKyAgICAgICAgbV9taW51dGVGaWVs
ZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9BTVBNRmllbGQpCisgICAgICAg
IG1fQU1QTUZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX3NlY29uZEZp
ZWxkKQorICAgICAgICBtX3NlY29uZEZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAg
IGlmIChtX3NwaW5CdXR0b24pCisgICAgICAgIG1fc3BpbkJ1dHRvbi0+cmVtb3ZlU3RlcEFjdGlv
bkhhbmRsZXIoKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50PiBEYXRlVGlt
ZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFZGl0Q29udHJvbE93bmVy
JiBlZGl0Q29udHJvbE93bmVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKK3sKKyAgICBS
ZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRSZWYobmV3IERhdGVU
aW1lRWRpdEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sT3duZXIpKTsKKyAgICBjb250YWlu
ZXItPnNldExheW91dChzdGVwUmFuZ2UpOworICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK2Jv
b2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2VkaXRDb250cm9sT3duZXIgJiYgbV9lZGl0Q29udHJvbE93bmVyLT5pc0VkaXRDb250cm9sT3du
ZXJEaXNhYmxlZCgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3Rh
dGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK0RhdGVUaW1lRmllbGRF
bGVtZW50KiBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEF0KGludCBpbmRleCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaW5kZXggPj0gMCAmJiBpbmRleCA8IG1fbnVtYmVyT2ZGaWVsZHMgPyBtX2Zp
ZWxkc1tpbmRleF0gOiAwOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAgICBpZiAoa2V5
Ym9hcmRFdmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZmllbGRB
dChtX2ZvY3VzRmllbGRJbmRleCkgJiYgIWRpc2FibGVkKCkgJiAhcmVhZE9ubHkoKSkgeworICAg
ICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBrZXlib2FyZEV2ZW50LT5rZXlJZGVu
dGlmaWVyKCk7CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkxlZnQiKSB7CisgICAg
ICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
Y29uc3QgaW50IGZpZWxkSW5kZXggPSBwcmV2aW91c0ZpZWxkSW5kZXgoKTsKKyAgICAgICAgICAg
IGlmIChmaWVsZEF0KGZpZWxkSW5kZXgpKQorICAgICAgICAgICAgICAgIHNldEZvY3VzRmllbGQo
ZmllbGRJbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoa2V5SWRlbnRpZmllciA9PSAiUmlnaHQiKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgY29uc3QgaW50IGZpZWxkSW5kZXgg
PSBuZXh0RmllbGRJbmRleCgpOworICAgICAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkp
CisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChmaWVsZEluZGV4KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJVKzAw
MDkiKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgZmllbGRJbmRleCA9IGtleWJvYXJkRXZlbnQt
PmdldE1vZGlmaWVyU3RhdGUoIlNoaWZ0IikgPyBwcmV2aW91c0ZpZWxkSW5kZXgoKSA6IG5leHRG
aWVsZEluZGV4KCk7CisgICAgICAgICAgICBpZiAoZmllbGRBdChmaWVsZEluZGV4KSkgeworICAg
ICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAg
ICAgICAgICAgc2V0Rm9jdXNGaWVsZChmaWVsZEluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVF
ZGl0RWxlbWVudDo6ZmllbGRWYWx1ZUNoYW5nZWQoKQoreworICAgIGlmIChtX2VkaXRDb250cm9s
T3duZXIpCisgICAgICAgIG1fZWRpdENvbnRyb2xPd25lci0+ZWRpdENvbnRyb2xWYWx1ZUNoYW5n
ZWQoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVNb3VzZUV2ZW50KE1v
dXNlRXZlbnQqIG1vdXNlRXZlbnQpCit7CisgICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbiAmJiAhZGlzYWJsZWQoKSAmJiAhcmVhZE9ubHkoKSkgeworICAgICAgICBOb2RlKiBj
b25zdCByZWxhdGVkVGFyZ2V0ID0gbW91c2VFdmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOworICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytpbmRl
eCkgeworICAgICAgICAgICAgaWYgKG1fZmllbGRzW2luZGV4XSA9PSByZWxhdGVkVGFyZ2V0KSB7
CisgICAgICAgICAgICAgICAgbW91c2VFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAg
ICAgICAgICAgICBzZXRGb2N1c0ZpZWxkKGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobV9l
ZGl0Q29udHJvbE93bmVyKQorICAgICAgICAgICAgICAgICAgICBtX2VkaXRDb250cm9sT3duZXIt
PmVkaXRDb250cm9sTW91c2VGb2N1cygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
Om1vdmVUb05leHRGaWVsZCgpCit7CisgICAgaWYgKG1fZm9jdXNGaWVsZEluZGV4ICE9IEludmFs
aWRGaWVsZEluZGV4KQorICAgICAgICBzZXRGb2N1c0ZpZWxkKG5leHRGaWVsZEluZGV4KCkpOwor
fQorCitpbnQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6bmV4dEZpZWxkSW5kZXgoKSBjb25zdAorewor
ICAgIGZvciAoaW50IGluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXggKyAxOyBpbmRleCA8IG1fbnVt
YmVyT2ZGaWVsZHM7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX2ZpZWxkc1tpbmRleF0tPnJl
YWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIHJldHVybiBt
X251bWJlck9mRmllbGRzOworfQorCitpbnQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cHJldmlvdXNG
aWVsZEluZGV4KCkgY29uc3QKK3sKKyAgICBmb3IgKGludCBpbmRleCA9IG1fZm9jdXNGaWVsZElu
ZGV4IC0gMTsgaW5kZXggPj0gMDsgLS1pbmRleCkgeworICAgICAgICBpZiAoIW1fZmllbGRzW2lu
ZGV4XS0+cmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAg
cmV0dXJuIC0xOworfQorCitib29sIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJvbE93bmVyICYmIG1fZWRpdENvbnRyb2xPd25l
ci0+aXNFZGl0Q29udHJvbE93bmVyUmVhZE9ubHkoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRF
bGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCgpCit7CisgICAgdXBkYXRlVUlTdGF0ZSgpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5b3V0KCkKK3sKKyAgICB3aGls
ZSAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmVtb3ZlQ2hpbGQobm9kZSk7
CisgICAgbV9udW1iZXJPZkZpZWxkcyA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVu
dDo6c2V0Rm9jdXNGaWVsZChpbnQgbmV3Rm9jdXNGaWVsZEluZGV4KQoreworICAgIGlmIChtX2Zv
Y3VzRmllbGRJbmRleCA9PSBuZXdGb2N1c0ZpZWxkSW5kZXgpCisgICAgICAgIHJldHVybjsKKwor
ICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBuZXdGb2N1c0ZpZWxkID0gZmllbGRBdChu
ZXdGb2N1c0ZpZWxkSW5kZXgpOworICAgIGlmIChuZXdGb2N1c0ZpZWxkICYmIG5ld0ZvY3VzRmll
bGQtPnJlYWRPbmx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIERhdGVUaW1lRmllbGRFbGVt
ZW50KiBjb25zdCBjdXJyZW50Rm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgp
OworCisgICAgaWYgKGN1cnJlbnRGb2N1c0ZpZWxkKQorICAgICAgICBjdXJyZW50Rm9jdXNGaWVs
ZC0+c2V0Rm9jdXMoZmFsc2UpOworCisgICAgaWYgKCFuZXdGb2N1c0ZpZWxkKSB7CisgICAgICAg
IG1fZm9jdXNGaWVsZEluZGV4ID0gSW52YWxpZEZpZWxkSW5kZXg7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2ZvY3VzRmllbGRJbmRleCA9IG5ld0ZvY3VzRmllbGRJbmRleDsKKyAg
ICBuZXdGb2N1c0ZpZWxkLT5zZXRGb2N1cyh0cnVlKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRF
bGVtZW50OjpzZXRMYXlvdXQoY29uc3QgU3RlcFJhbmdlJiBzdGVwUmFuZ2UpCit7CisgICAgRGF0
ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVs
ZEluZGV4KTsKKyAgICBzZXRGb2N1c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKworICAgIERh
dGVUaW1lRWRpdExheW91dGVyIGJ1aWxkZXIodGhpcywgc3RlcFJhbmdlKTsKKyAgICBjb25zdCBT
dHJpbmcgZGF0ZVRpbWVGb3JtYXQgPSBidWlsZGVyLm5lZWRTZWNvbmRGaWVsZCgpID8gbG9jYWxp
emVkVGltZUZvcm1hdFRleHQoKSA6IGxvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQoKTsKKyAg
ICBpZiAoIWJ1aWxkZXIuYnVpbGQoZGF0ZVRpbWVGb3JtYXQpIHx8ICFtX251bWJlck9mRmllbGRz
KQorICAgICAgICBidWlsZGVyLmJ1aWxkKGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyAiSEg6
bW06c3MiIDogIkhIOm1tIik7CisKKyAgICBhcHBlbmRDaGlsZChtX3NwaW5CdXR0b24pOworCisg
ICAgaWYgKGZvY3VzRmllbGQpIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IG1fbnVtYmVyT2ZGaWVsZHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChmb2N1c0ZpZWxk
ID09IGZpZWxkQXQoaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChpbmRl
eCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3VzRXZlbnQpIHsKKyAgICAgICAgaWYgKCFkaXNhYmxlZCgpICYmICFyZWFkT25seSgpICYmIG1f
Zm9jdXNGaWVsZEluZGV4ID09IEludmFsaWRGaWVsZEluZGV4KQorICAgICAgICAgICAgc2V0Rm9j
dXNGaWVsZCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsKKyAgICAgICAgc2V0Rm9jdXNGaWVsZChJ
bnZhbGlkRmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZl
bnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nh
c3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7CisgICAgfSBlbHNlIGlmIChldmVudC0+aXNLZXlib2Fy
ZEV2ZW50KCkpCisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9h
cmRFdmVudCo+KGV2ZW50KSk7CisKKyAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0Zp
ZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7CisgICAgaWYgKCFmb2N1c0ZpZWxkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmb2N1c0ZpZWxkLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2
ZW50KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25z
dCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAgICBpZiAobV9BTVBNRmllbGQpCisgICAgICAg
IG1fQU1QTUZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSA+PSAxMiA/IDEgOiAw
KTsKKworICAgIGlmIChtX2hvdXIxMUZpZWxkKQorICAgICAgICBtX2hvdXIxMUZpZWxkLT5zZXRW
YWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7CisKKyAgICBpZiAobV9ob3VyMTJGaWVsZCkKKyAg
ICAgICAgbV9ob3VyMTJGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworCisg
ICAgaWYgKG1faG91cjIzRmllbGQpCisgICAgICAgIG1faG91cjIzRmllbGQtPnNldFZhbHVlQXNJ
bnRlZ2VyKGRhdGUuaG91cigpKTsKKworICAgIGlmIChtX2hvdXIyNEZpZWxkKQorICAgICAgICBt
X2hvdXIyNEZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7CisKKyAgICBpZiAo
bV9taWxsaXNlY29uZEZpZWxkKQorICAgICAgICBtX21pbGxpc2Vjb25kRmllbGQtPnNldFZhbHVl
QXNJbnRlZ2VyKGRhdGUubWlsbGlzZWNvbmQoKSk7CisKKyAgICBpZiAobV9taW51dGVGaWVsZCkK
KyAgICAgICAgbV9taW51dGVGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5taW51dGUoKSk7
CisKKyAgICBpZiAobV9zZWNvbmRGaWVsZCkKKyAgICAgICAgbV9zZWNvbmRGaWVsZC0+c2V0VmFs
dWVBc0ludGVnZXIoZGF0ZS5zZWNvbmQoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVu
dDo6c2V0VmFsdWVBc0VtcHR5KCkKK3sKKyAgICBmb3IgKGludCBmaWVsZEluZGV4ID0gMDsgZmll
bGRJbmRleCA8IG1fbnVtYmVyT2ZGaWVsZHM7ICsrZmllbGRJbmRleCkKKyAgICAgICAgZmllbGRB
dChmaWVsZEluZGV4KS0+c2V0VmFsdWVBc0VtcHR5KERhdGVUaW1lRmllbGRFbGVtZW50OjpEaXNw
YXRjaE5vRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25T
dGVwRG93bigpCit7CisgICAgaWYgKERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0Zp
ZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0
ZXBEb3duKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBV
cCgpCit7CisgICAgaWYgKERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0g
ZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0ZXBVcCgp
OworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnVwZGF0ZVVJU3RhdGUoKQoreworICAg
IGlmIChkaXNhYmxlZCgpIHx8IHJlYWRPbmx5KCkpIHsKKyAgICAgIGlmIChtX3NwaW5CdXR0b24p
CisgICAgICAgICAgbV9zcGluQnV0dG9uLT5yZWxlYXNlQ2FwdHVyZSgpOworCisgICAgICBzZXRG
b2N1c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKyAgICB9Cit9CisKK2RvdWJsZSBEYXRlVGlt
ZUVkaXRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBkb3VibGUgdmFsdWUg
PSAwOworCisgICAgZm9yIChpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX251bWJl
ck9mRmllbGRzOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgY29uc3QgRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQqIGNvbnN0IGZpZWxkID0gZmllbGRBdChmaWVsZEluZGV4KTsKKyAgICAgICAgaWYgKCFm
aWVsZC0+aGFzVmFsdWUoKSkKKyAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIHZhbHVlICs9IGZpZWxkLT52YWx1ZUFzRG91
YmxlKCk7CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
RGF0ZVRpbWVFZGl0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRp
bWVFZGl0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5OTE3ZjhiNzQ4MmEyN2Y5YTY3ZTBmY2FlNDAy
YTEyZmU0YmIxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9EYXRlVGltZUVkaXRFbGVtZW50LmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERhdGVUaW1lRWRpdEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZUVkaXRF
bGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQor
CisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJv
bElubmVyRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRlQ29t
cG9uZW50czsKK2NsYXNzIERhdGVUaW1lRWRpdExheW91dGVyOworY2xhc3MgS2V5Ym9hcmRFdmVu
dDsKK2NsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBTdGVwUmFuZ2U7CisKKy8vIERhdGVUaW1lRWRp
dEVsZW1lbnQgY2xhc3MgY29udGFpbnMgbnVtYmVyaWMgZmllbGQgYW5kIHN5bWJvbGMgZmllbGQg
Zm9yCisvLyByZXByZXNlbnRpbmcgZGF0ZSBhbmQgdGltZSwgc3VjaCBhcworLy8gIC0gWWVhciwg
TW9udGgsIERheSBPZiBNb250aAorLy8gIC0gSG91ciwgTWludXRlLCBTZWNvbmQsIE1pbGxpc2Vj
b25kLCBBTS9QTQorY2xhc3MgRGF0ZVRpbWVFZGl0RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxl
bWVudCwgcHJpdmF0ZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6RmllbGRFdmVudEhhbmRsZXIsIHBy
aXZhdGUgU3BpbkJ1dHRvbkVsZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEYXRlVGltZUVkaXRFbGVtZW50KTsKKworcHVibGljOgorICAgIGZyaWVu
ZCBjbGFzcyBEYXRlVGltZUVkaXRMYXlvdXRlcjsKKworICAgIC8vIEVkaXRDb250cm9sT3duZXIg
aW1wbGVtZW50ZXIgbXVzdCBjYWxsIHJlbW92ZUV2ZW50SGFuZGxlciB3aGVuCisgICAgLy8gaXQg
ZG9lc24ndCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgRWRp
dENvbnRyb2xPd25lciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5FZGl0Q29udHJv
bE93bmVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29udHJvbE1vdXNlRm9jdXMoKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpID0gMDsK
KyAgICAgICAgdmlydHVhbCBib29sIGlzRWRpdENvbnRyb2xPd25lckRpc2FibGVkKCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29udHJvbE93bmVyUmVhZE9ubHkoKSBj
b25zdCA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lRWRpdEVs
ZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEVkaXRDb250cm9sT3duZXImLCBjb25zdCBTdGVwUmFu
Z2UmKTsKKworICAgIHZpcnR1YWwgfkRhdGVUaW1lRWRpdEVsZW1lbnQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURFOworICAgIHZvaWQgZGlz
YWJsZWRTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHJlYWRPbmx5U3RhdGVDaGFuZ2VkKCk7Cisg
ICAgdm9pZCByZW1vdmVFdmVudEhhbmRsZXIoKSB7IG1fZWRpdENvbnRyb2xPd25lciA9IDA7IH0K
KyAgICB2b2lkIHNldExheW91dChjb25zdCBTdGVwUmFuZ2UmKTsKKyAgICB2b2lkIHNldFZhbHVl
QXNFbXB0eSgpOworICAgIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
KTsKKyAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0
YXRpYyBjb25zdCBpbnQgSW52YWxpZEZpZWxkSW5kZXggPSAtMTsKKworICAgIC8vIFRpbWUgY2Fu
IGJlIHJlcHJlc2VudCBhdCBtb3N0IGZpdmUgZmllbGRzLCBzdWNoIGFzCisgICAgLy8gIDEuIGhv
dXIKKyAgICAvLyAgMi4gbWludXRlCisgICAgLy8gIDMuIHNlY29uZAorICAgIC8vICA0LiBtaWxs
aXNlY29uZAorICAgIC8vICA1LiBBTS9QTQorICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bU51
bWJlck9mRmllbGRzID0gNTsKKworICAgIERhdGVUaW1lRWRpdEVsZW1lbnQoRG9jdW1lbnQqLCBF
ZGl0Q29udHJvbE93bmVyJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCBP
VkVSUklERTsKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogZmllbGRBdChpbnQpIGNvbnN0Owor
ICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBo
YW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKyAgICBpbnQgbmV4dEZpZWxkSW5kZXgoKSBj
b25zdDsKKyAgICBpbnQgcHJldmlvdXNGaWVsZEluZGV4KCkgY29uc3Q7CisgICAgYm9vbCByZWFk
T25seSgpIGNvbnN0OworICAgIHZvaWQgcmVzZXRMYXlvdXQoKTsKKyAgICB2b2lkIHNldEZvY3Vz
RmllbGQoaW50KTsKKyAgICB2b2lkIHVwZGF0ZVVJU3RhdGUoKTsKKworICAgIC8vIERhdGVUaW1l
RmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2
b2lkIG1vdmVUb05leHRGaWVsZCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBm
aWVsZFZhbHVlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOworCisgICAgLy8gU3BpbkJ1dHRvbkVs
ZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc3Bp
bkJ1dHRvblN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNwaW5C
dXR0b25TdGVwVXAoKSBPVkVSUklERSBGSU5BTDsKKworICAgIEVkaXRDb250cm9sT3duZXIqIG1f
ZWRpdENvbnRyb2xPd25lcjsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1fQU1Q
TUZpZWxkOworICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9ob3VyMTFGaWVsZDsK
KyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1faG91cjEyRmllbGQ7CisgICAgUmVm
UHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBtX2hvdXIyNEZpZWxkOworICAgIFJlZlB0cjxEYXRl
VGltZUZpZWxkRWxlbWVudD4gbV9ob3VyMjNGaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ+IG1fbWlsbGlzZWNvbmRGaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVs
ZW1lbnQ+IG1fbWludXRlRmllbGQ7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBt
X3NlY29uZEZpZWxkOworICAgIFJlZlB0cjxTcGluQnV0dG9uRWxlbWVudD4gbV9zcGluQnV0dG9u
OworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBtX2ZpZWxkc1ttYXhpbXVtTnVtYmVyT2ZGaWVs
ZHNdOworICAgIGludCBtX2ZvY3VzRmllbGRJbmRleDsKKyAgICBpbnQgbV9udW1iZXJPZkZpZWxk
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hNDU5MWViOGM3N2U4MDNiNjA4ODVmOWMwNTY3ZjE1YWIxODExZTk1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMp
CisKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudC5oIgorCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitzdGF0
aWMgc2l6ZV90IGRpc3BsYXlTaXplT2ZOdW1iZXIoaW50IHZhbHVlKQoreworICAgIEFTU0VSVCh2
YWx1ZSA+PSAwKTsKKworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAxOworCisgICAg
aW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAgICB3aGlsZSAodmFsdWUpIHsKKyAgICAgICAgdmFs
dWUgLz0gMTA7CisgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7CisgICAgfQorCisgICAgcmV0dXJu
IG51bWJlck9mRGlnaXRzOworfQorCitEYXRlVGltZUZpZWxkRWxlbWVudDo6RmllbGRFdmVudEhh
bmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcigpCit7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVtZW50
OjpEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5k
bGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9J
ZCwgaW50IHVuaXRJbk1pbGxpc2Vjb25kICkKKyAgICA6IEhUTUxFbGVtZW50KHNwYW5UYWcsIGRv
Y3VtZW50KQorICAgICwgbV9maWVsZEV2ZW50SGFuZGxlcigmZmllbGRFdmVudEhhbmRsZXIpCisg
ICAgLCBtX3VuaXRJbk1pbGxpc2Vjb25kKHVuaXRJbk1pbGxpc2Vjb25kKQoreworICAgIHNldFNo
YWRvd1BzZXVkb0lkKHNoYWRvd1BzZXVkb0lkKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50
LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlk
b3duRXZlbnQpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHN0YXRp
Y19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCk7CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBr
ZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmllcigpOworCisgICAgICAg
IGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHN0ZXBEb3duKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAi
VXAiKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
ICAgICAgICAgICAgc3RlcFVwKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVSswMDA4IikgeworICAgICAgICAgICAga2V5
Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHNldFZhbHVlQXNF
bXB0eShEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIEhUTUxFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxk
RWxlbWVudDo6aW5pdGlhbGl6ZSgpCit7CisgICAgYXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRv
Y3VtZW50KCksIHZpc2libGVWYWx1ZSgpKSk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6OnJlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShyZWFk
b25seUF0dHIpOworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50OjpzZXRSZWFkT25seSgp
Cit7CisgICAgLy8gU2V0IEhUTUwgYXR0cmlidXRlIHJlYWRvbmx5IHRvIGNoYW5nZSBhcHBlcmFu
Y2UuCisgICAgc2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0ciwgZW1wdHlTdHJpbmcoKSk7CisgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50Ojpz
ZXRSZWFkV3JpdGUoKQoreworICAgIC8vIFJlbW92ZSBIVE1MIGF0dHJpYnV0ZSByZWFkb25seSB0
byBjaGFuZ2UgYXBwZXJhbmNlLgorICAgIHJlbW92ZUF0dHJpYnV0ZShyZWFkb25seUF0dHIpOwor
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVu
dDo6dXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAg
ICBUZXh0KiBjb25zdCB0ZXh0Tm9kZSA9IHRvVGV4dChmaXJzdENoaWxkKCkpOworICAgIGNvbnN0
IFN0cmluZyBuZXdWaXNpYmxlVmFsdWUgPSB2aXNpYmxlVmFsdWUoKTsKKyAgICBBU1NFUlQobmV3
VmlzaWJsZVZhbHVlLmxlbmd0aCgpID4gMCk7CisKKyAgICBpZiAodGV4dE5vZGUtPndob2xlVGV4
dCgpID09IG5ld1Zpc2libGVWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9u
Q29kZSBlYzsKKyAgICB0ZXh0Tm9kZS0+cmVwbGFjZVdob2xlVGV4dChuZXdWaXNpYmxlVmFsdWUs
IGVjKTsKKworICAgIGlmIChldmVudEJlaGF2aW9yID09IERpc3BhdGNoRXZlbnQgJiYgbV9maWVs
ZEV2ZW50SGFuZGxlcikKKyAgICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+ZmllbGRWYWx1ZUNo
YW5nZWQoKTsKK30KKworZG91YmxlIERhdGVUaW1lRmllbGRFbGVtZW50Ojp2YWx1ZUFzRG91Ymxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IHN0YXRpY19jYXN0PGRvdWJsZT4o
dmFsdWVBc0ludGVnZXIoKSkgKiBtX3VuaXRJbk1pbGxpc2Vjb25kIDogc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
RmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxk
RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYzlmMjJhZTg2MzdjNzE0MTU3MWVlNmIyM2I5ZmQyMTdk
OTk0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRl
VGltZUZpZWxkRWxlbWVudC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERhdGVUaW1lRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVGaWVsZEVsZW1l
bnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNp
bmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERh
dGVUaW1lRmllbGRFbGVtZW50IGlzIGJhc2UgY2xhc3Mgb2YgZGF0ZSB0aW1lIGZpZWxkIGVsZW1l
bnQuCitjbGFzcyBEYXRlVGltZUZpZWxkRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVGaWVsZEVsZW1lbnQpOworCitwdWJsaWM6
CisgICAgZW51bSBFdmVudEJlaGF2aW9yIHsKKyAgICAgICAgRGlzcGF0Y2hOb0V2ZW50LAorICAg
ICAgICBEaXNwYXRjaEV2ZW50LAorICAgIH07CisKKyAgICAvLyBGaWVsZEV2ZW50SGFuZGxlciBp
bXBsZW1lbnRlciBtdXN0IGNhbGwgcmVtb3ZlRXZlbnRIYW5kbGVyIHdoZW4KKyAgICAvLyBpdCBk
b2Vzbid0IGhhbmRsZSBldmVudCwgZS5nLiBhdCBkZXN0cnVjdGlvbi4KKyAgICBjbGFzcyBGaWVs
ZEV2ZW50SGFuZGxlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5GaWVsZEV2ZW50
SGFuZGxlcigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmllbGRWYWx1ZUNoYW5nZWQoKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG9OZXh0RmllbGQoKSA9IDA7CisgICAgfTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVh
bCBib29sIGhhc1ZhbHVlKCkgY29uc3QgPSAwOworICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdDsK
KyAgICB2b2lkIHJlbW92ZUV2ZW50SGFuZGxlcigpIHsgbV9maWVsZEV2ZW50SGFuZGxlciA9IDA7
IH0KKyAgICB2b2lkIHNldFJlYWRPbmx5KCk7CisgICAgdm9pZCBzZXRSZWFkV3JpdGUoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5v
RXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVu
dEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBE
b3duKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSA9IDA7CisgICAgdmlydHVhbCBT
dHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7CisgICAgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBE
YXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiwgaW50KTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIGludCB1
bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pdEluTWlsbGlzZWNvbmQ7IH0K
KyAgICB2b2lkIHVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9yKTsKKworICAgIEZpZWxk
RXZlbnRIYW5kbGVyKiBtX2ZpZWxkRXZlbnRIYW5kbGVyOworICAgIGNvbnN0IGludCBtX3VuaXRJ
bk1pbGxpc2Vjb25kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVIb3Vy
RmllbGRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lSG91
ckZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc1OTdmMTlmN2NkMjhkOTlkNjhlYmU5NGQy
N2Q4YzhkMjg2YjFmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lSG91ckZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlBVVF9UWVBF
X1RJTUVfTVVMVElQTEVfRklFTERTKQorCisjaW5jbHVkZSAiRGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGludCBob3VySW5N
aWxsaXNlY29uZCA9IDM2MDAgKiAxMDAwOworCitEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OkRh
dGVUaW1lSG91ckZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5k
bGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9J
ZCwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgc2hhZG93UHNldWRvSWQsIGhvdXJJ
bk1pbGxpc2Vjb25kLCBtaW5pbXVtLCBtYXhpbXVtKQorICAgICwgbV9hbGlnbm1lbnQobWF4aW11
bSArIG1heGltdW0gJSAyKQoreworICAgIEFTU0VSVCgoIW1pbmltdW0gJiYgKG1heGltdW0gPT0g
MTEgfHwgbWF4aW11bSA9PSAyMykpIHx8IChtaW5pbXVtID09IDEgJiYgKG1heGltdW0gPT0gMTIg
fHwgbWF4aW11bSA9PSAyNCkpKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVs
ZW1lbnQ+IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJp
bmcmIHNoYWRvd1BzZXVkb0lkLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCit7CisgICAgUmVm
UHRyPERhdGVUaW1lSG91ckZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRp
bWVIb3VyRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgc2hhZG93UHNl
dWRvSWQsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZSgpOworICAg
IHJldHVybiBmaWVsZDsKK30KKwordm9pZCBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZh
bHVlQXNJbnRlZ2VyKGludCB2YWx1ZUFzSG91cjIzLCBFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZp
b3IpCit7CisgICAgY29uc3QgaW50IHZhbHVlID0gUmFuZ2UoMCwgMjMpLmVuc3VyZUluUmFuZ2Uo
dmFsdWVBc0hvdXIyMykgJSBtX2FsaWdubWVudDsKKyAgICBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKHJhbmdlKCkubWluaW11bSAmJiAhdmFsdWUgPyBtX2Fs
aWdubWVudCA6IHZhbHVlLCBldmVudEJlaGF2aW9yKTsKK30KKworaW50IERhdGVUaW1lSG91ckZp
ZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBoYXNWYWx1
ZSgpID8gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpICUgbV9h
bGlnbm1lbnQgOiAtMTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lSG91ckZpZWxkRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODc5YmExYWU3MmYwOWM0YTE3NDY0ZDQ3ZThiYjIxYWE3OWQ3ZmFm
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
SG91ckZpZWxkRWxlbWVudC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lSG91ckZp
ZWxkRWxlbWVudF9oCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxE
UykKKworI2luY2x1ZGUgIkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudCBpcyB1c2VkIGZvciBo
b3VyIGZpZWxkIG9mIGRhdGUgdGltZSBmb3JtYXQKKy8vIHN1cHBvcnRpbmcgZm9sbG93aW5nIHBh
dHRlcm5zOgorLy8gIC0gMCB0byAxMQorLy8gIC0gMSB0byAxMgorLy8gIC0gMCB0byAyMworLy8g
IC0gMSB0byAyNAorY2xhc3MgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IDogcHVibGljIERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRp
bWVIb3VyRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGVUaW1lSG91ckZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRs
ZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworCitw
cml2YXRlOgorICAgIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZl
bnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVt
KTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yKSBPVkVSUklERSBGSU5B
TDsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0IE9WRVJSSURFIEZJTkFM
OworCisgICAgY29uc3QgaW50IG1fYWxpZ25tZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODEz
MDBmZGMyMDJlZWFhZTRlYjdhNDBmMzQ1YTczNDI1OWI3ODFjNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5j
cHAKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKworI2lu
Y2x1ZGUgIkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIgorCisjaW5jbHVkZSAiS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgc2l6ZV90IGRpc3BsYXlTaXplT2ZOdW1iZXIoaW50IHZh
bHVlKQoreworICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsKKworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiAxOworCisgICAgaW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAgICB3aGlsZSAo
dmFsdWUpIHsKKyAgICAgICAgdmFsdWUgLz0gMTA7CisgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7
CisgICAgfQorCisgICAgcmV0dXJuIG51bWJlck9mRGlnaXRzOworfQorCitEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQ6OlJhbmdlOjpSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisg
ICAgOiBtYXhpbXVtKG1heGltdW0pCisgICAgLCBtaW5pbXVtKG1pbmltdW0pCit7CisgICAgQVNT
RVJUKG1pbmltdW0gPD0gbWF4aW11bSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OlJhbmdlOjplbnN1cmVJblJhbmdlKGludCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RkOjptaW4oc3RkOjptYXgodmFsdWUsIG1pbmltdW0pLCBtYXhpbXVtKTsKK30KKworRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNv
bnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1bml0SW5NaWxsaXNlY29uZCwg
aW50IG1pbmltdW0sIGludCBtYXhpbXVtKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9j
dW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNv
bmQpCisgICAgLCBtX2xhc3REaWdpdENoYXJUaW1lKDApCisgICAgLCBtX3JhbmdlKG1pbmltdW0s
IG1heGltdW0pCisgICAgLCBtX3ZhbHVlKDApCisgICAgLCBtX2hhc1ZhbHVlKGZhbHNlKQorewor
fQorCitQYXNzUmVmUHRyPERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudD4gRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFu
ZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRv
SWQsIGludCB1bml0SW5NaWxsaXNlY29uZCwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQorewor
ICAgIFJlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYo
bmV3IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRs
ZXIsIHNoYWRvd1BzZXVkb0lkLCB1bml0SW5NaWxsaXNlY29uZCwgbWluaW11bSwgbWF4aW11bSkp
OworICAgIGZpZWxkLT5pbml0aWFsaXplKCk7CisgICAgcmV0dXJuIGZpZWxkOworfQorCitzdGF0
aWMgaW50IG1hcEV2ZW50VG9EaWdpdChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFldmVudC0+
aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpLT5rZXlDb2RlKCkgLSAnMCc7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKK3sKKyAgICBjb25zdCBpbnQgZGlnaXQgPSBtYXBFdmVudFRvRGlnaXQoZXZlbnQp
OworICAgIGlmIChkaWdpdCA+PSAwICYmIGRpZ2l0IDw9IDkpIHsKKyAgICAgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlciht
X2hhc1ZhbHVlICYmIGlzQ29udGludW9zRXZlbnQoKmV2ZW50KSA/IG1fdmFsdWUgKiAxMCArIGRp
Z2l0IDogZGlnaXQsIERpc3BhdGNoRXZlbnQpOworICAgICAgICAgICAgaWYgKG1fdmFsdWUgKiAx
MCA+IG1fcmFuZ2UubWF4aW11bSAmJiBtX2ZpZWxkRXZlbnRIYW5kbGVyKSB7CisgICAgICAgICAg
ICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+bW92ZVRvTmV4dEZpZWxkKCk7CisgICAgICAgICAg
ICAgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2xhc3REaWdpdENoYXJUaW1l
ID0gMDsKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVu
dCk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faGFzVmFsdWU7Cit9CisKK2Jvb2wgRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50Ojppc0NvbnRpbnVvc0V2ZW50KGNvbnN0IEV2ZW50JiBldmVudCkgY29uc3QK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCBDb250aW51b3VzRXZlbnRUaHJlc2hvbGQgPSA3MDA7Cisg
ICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCgpIC0gbV9sYXN0RGlnaXRDaGFyVGltZSA8IENvbnRp
bnVvdXNFdmVudFRocmVzaG9sZDsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OnNldFZhbHVlQXNFbXB0eShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAg
bV92YWx1ZSA9IDA7CisgICAgbV9oYXNWYWx1ZSA9IHJlYWRPbmx5KCk7CisgICAgdXBkYXRlVmlz
aWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUgPSAwOwor
fQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIo
aW50IHZhbHVlLCBFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV92YWx1ZSA9
IGVuc3VyZUluUmFuZ2UodmFsdWUpOworICAgIG1faGFzVmFsdWUgPSB0cnVlOworICAgIHVwZGF0
ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0g
MDsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBEb3duKCkKK3sK
KyAgICBpZiAobV9oYXNWYWx1ZSkKKyAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV92YWx1ZSA9
PSBtX3JhbmdlLm1pbmltdW0gPyBtX3JhbmdlLm1heGltdW0gOiBlbnN1cmVJblJhbmdlKG1fdmFs
dWUgLSAxKSwgRGlzcGF0Y2hFdmVudCk7CisgICAgZWxzZQorICAgICAgICBzZXRWYWx1ZUFzSW50
ZWdlcihtX3JhbmdlLm1heGltdW0sIERpc3BhdGNoRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKCkKK3sKKyAgICBpZiAobV9oYXNWYWx1ZSkKKyAg
ICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV92YWx1ZSA9PSBtX3JhbmdlLm1heGltdW0gPyBtX3Jh
bmdlLm1pbmltdW0gOiBlbnN1cmVJblJhbmdlKG1fdmFsdWUgKyAxKSwgRGlzcGF0Y2hFdmVudCk7
CisgICAgZWxzZQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3JhbmdlLm1pbmltdW0sIERp
c3BhdGNoRXZlbnQpOworfQorCitTdHJpbmcgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2
YWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hhc1ZhbHVlKQorICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKKworICAgIGlmIChtX3JhbmdlLm1heGltdW0gPiA5OTkpCisgICAgICAgIHJl
dHVybiBTdHJpbmc6Om51bWJlcihtX3ZhbHVlKTsKKworICAgIGlmIChtX3JhbmdlLm1heGltdW0g
PiA5OSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDNkIiwgbV92YWx1ZSk7CisK
KyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUwMmQiLCBtX3ZhbHVlKTsKK30KKworaW50IERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2hhc1ZhbHVlID8gbV92YWx1ZSA6IC0xOworfQorCitTdHJpbmcgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUoKSBjb25zdAoreworICAgIGlmIChtX2hh
c1ZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKKyAgICBmb3IgKGludCBudW1iZXJPZkRhc2hzID0gc3RkOjptYXgoZGlzcGxheVNpemVP
Zk51bWJlcihtX3JhbmdlLm1heGltdW0pLCBkaXNwbGF5U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWlu
aW11bSkpOyBudW1iZXJPZkRhc2hzOyAtLW51bWJlck9mRGFzaHMpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCctJyk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWFl
MTUxOGUzMmQzZDdmNzUxNWExOTY4ZTY4YWI2NzEyNjA4MDE0OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5o
CkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudF9o
CisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1
ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHJlcHJlc2VudHMgbnVtZXJpYyBmaWVsZCBvZiBk
YXRlIHRpbWUgZm9ybWF0LgorLy8gVGhpcyBjbGFzcyBtYXkgYmUgdXNlZCBmb3I6CisvLyAgLSBt
aW51dGUKKy8vICAtIG1pbGxpc2Vjb25kCisvLyAgLSBtb250aAorLy8gIC0gc2Vjb25kCisvLyAg
LSB5ZWFyCitjbGFzcyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgUmFuZ2UgeworICAgICAgICBS
YW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworICAgICAgICBpbnQgZW5zdXJlSW5SYW5n
ZShpbnQpIGNvbnN0OworCisgICAgICAgIGludCBtYXhpbXVtOworICAgICAgICBpbnQgbWluaW11
bTsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGludCB1bml0SW5NaWxsaXNlY29uZCwgaW50IG1pbmltdW0sIGludCBtYXhpbXVt
KTsKKworcHJvdGVjdGVkOgorICAgIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1bWVu
dCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50IHVuaXRJbk1p
bGxpc2Vjb25kLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworCisgICAgaW50IGVuc3VyZUlu
UmFuZ2UoaW50IHZhbHVlKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmVuc3VyZUluUmFuZ2UodmFs
dWUpOyB9CisgICAgY29uc3QgUmFuZ2UmIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsg
fQorCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwg
Ym9vbCBoYXNWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJp
bmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBpc0NvbnRpbnVvc0V2ZW50KGNvbnN0IEV2ZW50JikgY29uc3Q7CisKKyAgICAvLyBEYXRl
VGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9p
ZCBzdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOworCisgICAgRE9NVGltZVN0YW1wIG1fbGFzdERpZ2l0Q2hhclRpbWU7CisgICAgY29u
c3QgUmFuZ2UgbV9yYW5nZTsKKyAgICBpbnQgbV92YWx1ZTsKKyAgICBib29sIG1faGFzVmFsdWU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVs
ZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZDIxNGRkZWU4YTdlZmFmN2JlMTA0ZDc0ZDc3ZmRk
NGM0ZmIzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlBVVF9UWVBF
X1RJTUVfTVVMVElQTEVfRklFTERTKQorCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudC5oIgorCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lU3ltYm9saWNG
aWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRF
dmVudEhhbmRsZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1bml0
SW5NaWxsaXNlY29uZCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN5bWJvbHMpCisgICAgOiBEYXRl
VGltZUZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVk
b0lkLCB1bml0SW5NaWxsaXNlY29uZCkKKyAgICAsIG1fc3ltYm9scyhzeW1ib2xzKQorICAgICwg
bV9zZWxlY3RlZEluZGV4KC0xKQoreworICAgIEFTU0VSVCghc3ltYm9scy5pc0VtcHR5KCkpOwor
fQorCitQYXNzUmVmUHRyPERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ+IERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRI
YW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1
ZG9JZCwgaW50IHVuaXRJbk1pbGxpc2Vjb25kLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3ltYm9s
cykKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudD4gZmllbGQgPSBh
ZG9wdFJlZihuZXcgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRF
dmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCB1bml0SW5NaWxsaXNlY29uZCwgc3ltYm9scykp
OworICAgIGZpZWxkLT5pbml0aWFsaXplKCk7CisgICAgcmV0dXJuIGZpZWxkOworfQorCit2b2lk
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
IGV2ZW50KQoreworICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgICAgICBLZXlib2FyZEV2
ZW50KiBrZXlib2FyZEV2ZW50ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KTsK
KyAgICAgICAgY29uc3QgaW50IHJhd0NoYXJDb2RlID0ga2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUo
KTsKKyAgICAgICAgY29uc3QgaW50IGNoYXJDb2RlID0gcmF3Q2hhckNvZGUgPj0gJ2EnICYmIHJh
d0NoYXJDb2RlIDw9ICd6JyA/IHJhd0NoYXJDb2RlICsgJ0EnIC0gJ2EnIDogcmF3Q2hhckNvZGU7
CisgICAgICAgIGlmIChjaGFyQ29kZSA+PSAnQScgJiYgY2hhckNvZGUgPD0gJ1onKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3N5bWJvbHMuc2l6ZSgp
OyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc3ltYm9sc1tpbmRleF1bMF0gPT0g
Y2hhckNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKGluZGV4LCBEaXNwYXRj
aEV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIERhdGVUaW1lRmllbGRFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKworYm9vbCBEYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0
ZWRJbmRleCA+PSAwOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnNl
dFZhbHVlQXNFbXB0eShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV9zZWxl
Y3RlZEluZGV4ID0gSW52YWxpZEluZGV4OworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJl
aGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRWYWx1
ZUFzSW50ZWdlcihpbnQgbmV3U2VsZWN0ZWRJbmRleCwgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2
aW9yKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKG5ld1Nl
bGVjdGVkSW5kZXgsIHN0YXRpY19jYXN0PGludD4obV9zeW1ib2xzLnNpemUoKSAtIDEpKSk7Cisg
ICAgdXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6OnN0ZXBEb3duKCkKK3sKKyAgICBjb25zdCBpbnQgc2l6ZSA9
IG1fc3ltYm9scy5zaXplKCk7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/ICht
X3NlbGVjdGVkSW5kZXggKyBzaXplIC0gMSkgJSBzaXplIDogc2l6ZSAtIDE7CisgICAgdXBkYXRl
VmlzaWJsZVZhbHVlKERpc3BhdGNoRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNG
aWVsZEVsZW1lbnQ6OnN0ZXBVcCgpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUo
KSA/IChtX3NlbGVjdGVkSW5kZXggKyAxKSAlIG1fc3ltYm9scy5zaXplKCkgOiAwOworICAgIHVw
ZGF0ZVZpc2libGVWYWx1ZShEaXNwYXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUo
KSA/IG1fc3ltYm9sc1ttX3NlbGVjdGVkSW5kZXhdIDogZW1wdHlTdHJpbmcoKTsKK30KKworaW50
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zZWxlY3RlZEluZGV4OworfQorCitTdHJpbmcgRGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFs
dWUoKSA/IG1fc3ltYm9sc1ttX3NlbGVjdGVkSW5kZXhdIDogIi0tIjsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTAw
NjFlYWFmOWNjZWJjOTE2N2JjYzY2NWVkZmI2ZTI3NzQ1ZTc4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5o
CkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50
X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCisjaW5j
bHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IGlzIHVzZWQgZm9yIHBlcmlvZCBmaWVsZCBv
ZiBkYXRhIHRpbWUgZm9ybWF0LgorY2xhc3MgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCA6
IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBG
aWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGludCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRJbmRl
eCA9IC0xOworCisgICAgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudChEb2N1bWVudCosIEZp
ZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50LCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAg
IHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlQXNFbXB0eShFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2
aW9yKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSBPVkVSUklE
RSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisgICAg
dmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
U3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworCisgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4gbV9zeW1ib2xzOworICAgIGludCBtX3NlbGVjdGVkSW5kZXg7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156265</attachid>
            <date>2012-08-02 23:22:24 -0700</date>
            <delta_ts>2012-08-03 02:39:57 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-92960-20120803152204.patch</filename>
            <type>text/plain</type>
            <size>64829</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBlODdiOTFkNzY0ODNh
NDJiYmI2ZmEwNDM3OGZkN2Y1ODQyN2E4Zi4uMmY5ZTFlOWZjNzk3NzVjOGE2ZDkyNDBlMmRjN2Jl
OGY3YTIyYmE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMyBAQAorMjAxMi0wOC0wMiAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lRWRpdEVsZW1lbnQgLSBjb250YWluZXIgb2Yg
bXVsdGlwbGUgRGF0ZVRpbWVGaWVsZEVsZW1lbnQKKyAgICAgICAgICAgIC0gRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQgLSBiYXNlIGNsYXNzIG9mIGZpZWxkIFVJCisgICAgICAgICAgICAtIERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudCAtIGZpZWxkIFVJIGZvciBudW1lcmljIHZhbHVlLCB1c2VkCisg
ICAgICAgICAgICAgICAgZm9yIG1pbnV0ZSwgc2Vjb25kLCBhbmQgbWlsbGlzZWNvbmQKKyAgICAg
ICAgICAgIC0gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIGhvdXIKKyAg
ICAgICAgICAgIC0gRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCAtIGZpZWxkIFVJIGZvciBz
eW1ib2xjIHZhbHVlLCB1c2VkCisgICAgICAgICAgICAgICAgZm9yIEFNL1BNLgorICAgICAgICBp
bnNpZGUgb2YgRU5BQkxFX0lOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMgYnVpbGQgZmxh
Zy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYmVo
YXZpb3IuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IENoYW5nZWQgdG8gaW5jbHVkZSBodG1s
L3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0
ZVRpbWVFZGRpdEVsZW1lbnQuaCwgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3Bw
LAorICAgICAgICBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oLCBodG1sL3NoYWRv
dy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuY3BwLAorICAgICAgICBodG1sL3NoYWRvdy9EYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQuaCwgaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwLAorICAg
ICAgICBhbmQgaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oLgorICAg
ICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERhdGVUaW1lRWRpdExheW91dGVyKTogTGF5b3V0IERhdGVUaW1lRmllbGRFbGVtZW50IGJh
c2VkIG9uIERhdGVUaW1lRm9ybWF0IHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdExheW91dGVyOjpEYXRlVGltZUVkaXRMYXlvdXRlcik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRMYXlvdXRlcjo6bmVlZFNlY29uZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdERldGFpbDo6RGF0ZVRpbWVGb3Jt
YXREZXRhaWwpOgorICAgICAgICAoRGF0ZVRpbWVGb3JtYXREZXRhaWwpOgorICAgICAgICAoRGF0
ZVRpbWVGb3JtYXRBbmFseXplcik6IENoZWNrZXMgRGF0ZVRpbWVGb3JtYXQgc3RyaW5nIGhhcyBz
ZWNvbmQgZmllbGQgYW5kIG1pbGxpc2Vjb25kIGZpZWxkCisgICAgICAgIGZvciBhZGRpbmcgdGhl
bSBpZiBvd25lciBvZiBEYXRlVGltZUVkaXRFbGVtZW50IHdhbnRzIHRvIGhhdmUgdGhlbSBidXQg
RGF0ZVRpbWVGb3JtYXQgc3RyaW5nIGRvZXNuJ3QgaGF2ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdEFuYWx5emVyOjphbmFseXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdEFuYWx5
emVyOjp2aXNpdEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVy
OjpEYXRlVGltZUZvcm1hdEFuYWx5emVyOjp2aXNpdExpdGVyYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OmFkZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdExheW91dGVyOjpuZWVkTWlsbGlzZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRMYXlvdXRlcjo6dmlzaXRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRMYXlvdXRlcjo6dmlzaXRMaXRlcmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTog
Q2FsbGVkIHdoZW4gb3duZXIncyBkaXNhYmxlZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkVmFsdWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6bW92ZVRvTmV4dEZpZWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6Om5leHRGaWVsZEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnByZXZpb3VzRmllbGRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCk6ICBD
YWxsZWQgd2hlbiBvd25lcidzIGRpc2FibGVkIHN0YXRlIGlzIGNoYW5nZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRGb2N1c0ZpZWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcERvd24pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBVcCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojp1cGRhdGVVSVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnZhbHVlQXNEb3VibGUpOgorICAgICAgICAq
IGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChEYXRl
VGltZUVkaXRFbGVtZW50KToKKyAgICAgICAgKEVkaXRDb250cm9sT3duZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+Rmll
bGRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OkRhdGVUaW1lRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RmllbGRFbGVtZW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmll
bGRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxl
bWVudDo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6OnNldFJlYWRXcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6dXBkYXRlVmlzaWJsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRF
bGVtZW50Ojp2YWx1ZUFzRG91YmxlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZp
ZWxkRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lRmllbGRFbGVtZW50KToKKyAg
ICAgICAgKEZpZWxkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmll
bGRFbGVtZW50OjpyZW1vdmVFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50
ZWdlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Lmg6
IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmRpc3BsYXlTaXplT2ZOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6UmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6ZW5zdXJlSW5SYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjptYXBFdmVudFRvRGlnaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dDo6aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50Ojppc0NvbnRpbnVvc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUp
OgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmVu
c3VyZUluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50OjpyYW5nZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpoYXNWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRW
YWx1ZUFzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4KKyAgICAg
ICAgKERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQpOgorCiAyMDEyLTA4LTAyICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ3Jhc2ggZHVlIHRvIGxh
eWVyIG5vdCByZW1vdmVkIGZyb20gcGFyZW50IGZvciBhbm9ueW1vdXMgYmxvY2suCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggMzE5YjJhZGU5NTM5MjQ5NDJkNzE2MzA2MzhjNjM2ZWU1ZjIyZWY4Zi4uMzdh
ZWFlMjZjOWJiZjc3NDg5MjFkMjVjYjU2ZmQ4YzE0Nzk5YzdmZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNTc0Myw2ICs1NzQzLDE2IEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudERp
c3RyaWJ1dG9yLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1
ZXJ5LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnku
aCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAnLAor
ICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCcsCisgICAgICAg
ICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAg
ICdodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1s
L3NoYWRvdy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1s
L3NoYWRvdy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRtbC9z
aGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRt
bC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmgnLAorICAgICAgICAgICAgJ2h0
bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAg
ICdodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgnLAogICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcCcsCiAgICAgICAgICAgICAn
aHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuaCcsCiAgICAgICAgICAgICAnaHRtbC9z
aGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5N2VhZjdmOTVm
ZDJmMjhmOGMyZmNmYzNmZTU4YmRlNGJhODZjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDU0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
KyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCisjaW5jbHVkZSAiRGF0ZVRpbWVF
ZGl0RWxlbWVudC5oIgorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJE
YXRlVGltZUZvcm1hdC5oIgorI2luY2x1ZGUgIkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudC5oIgor
I2luY2x1ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVu
dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkRGF0ZS5oIgorI2luY2x1ZGUgIkxvY2FsaXplZE51
bWJlci5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJTdGVwUmFuZ2UuaCIK
KyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK3N0
YXRpYyBjb25zdCBpbnQgaG91ckluTWlsbGlzZWNvbmQgPSAzNjAwICogMTAwMDsKK3N0YXRpYyBj
b25zdCBpbnQgbWludXRlSW5NaWxsaXNlY29uZCA9IDYwICogMTAwMDsKK3N0YXRpYyBjb25zdCBp
bnQgc2Vjb25kSW5NaWxsaXNlY29uZCA9IDEwMDA7CisKK2NsYXNzIERhdGVUaW1lRWRpdExheW91
dGVyIDogcHJpdmF0ZSBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKK3B1YmxpYzoKKyAg
ICBEYXRlVGltZUVkaXRMYXlvdXRlcihEYXRlVGltZUVkaXRFbGVtZW50KiBlbGVtbnQsIGNvbnN0
IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQorICAgICAgICA6IG1fZWRpdEVsZW1lbnQoZWxlbW50KQor
ICAgICAgICAsIG1fc3RlcFJhbmdlKHN0ZXBSYW5nZSkKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBidWlsZChjb25zdCBTdHJpbmcmKTsKKworICAgIGJvb2wgbmVlZFNlY29uZEZpZWxkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRl
cihtaW51dGVJbk1pbGxpc2Vjb25kKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3RlcFJh
bmdlLnN0ZXAoKS5yZW1haW5kZXIobWludXRlSW5NaWxsaXNlY29uZCkuaXNaZXJvKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIHN0cnVjdCBEYXRlVGltZUZvcm1hdERldGFpbCB7CisgICAgICAg
IERhdGVUaW1lRm9ybWF0RGV0YWlsKCkKKyAgICAgICAgICAgIDogaGFzTWlsbGlzZWNvbmRGaWVs
ZChmYWxzZSkKKyAgICAgICAgICAgICwgaGFzU2Vjb25kRmllbGQoZmFsc2UpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaGFzTWlsbGlzZWNvbmRGaWVsZDsKKyAgICAgICAg
Ym9vbCBoYXNTZWNvbmRGaWVsZDsKKyAgICB9OworCisgICAgY2xhc3MgRGF0ZVRpbWVGb3JtYXRB
bmFseXplciA6IHByaXZhdGUgRGF0ZVRpbWVGb3JtYXQ6OlRva2VuSGFuZGxlciB7CisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgRGF0ZVRpbWVGb3JtYXREZXRhaWwgYW5hbHl6ZShjb25zdCBT
dHJpbmcmIGZvcm1hdFN0cmluZykKKyAgICAgICAgeworICAgICAgICAgICAgRGF0ZVRpbWVGb3Jt
YXRBbmFseXplciBhbmFseXplcjsKKyAgICAgICAgICAgIERhdGVUaW1lRm9ybWF0OjpwYXJzZShm
b3JtYXRTdHJpbmcsIGFuYWx5emVyKTsKKyAgICAgICAgICAgIHJldHVybiBhbmFseXplci5tX2Zv
cm1hdERldGFpbDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gRGF0ZVRp
bWVGb3JtYXQ6OlRva2VuSGFuZGxlciBmdW5jdGlvbnMuCisgICAgICAgIHZvaWQgdmlzaXRGaWVs
ZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFj
dGlvbmFsU2Vjb25kKSB7CisgICAgICAgICAgICAgICAgbV9mb3JtYXREZXRhaWwuaGFzTWlsbGlz
ZWNvbmRGaWVsZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVTZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBtX2Zvcm1hdERldGFpbC5oYXNTZWNvbmRGaWVs
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCB2aXNpdExpdGVyYWwoY29uc3QgU3RyaW5nJikgeyB9CisKKyAg
ICAgICAgRGF0ZVRpbWVGb3JtYXREZXRhaWwgbV9mb3JtYXREZXRhaWw7CisgICAgfTsKKworICAg
IHZvaWQgYWRkRmllbGQoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGZpZWxkKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4obV9lZGl0RWxlbWVudC0+bV9udW1iZXJP
ZkZpZWxkcykgPj0gV1RGX0FSUkFZX0xFTkdUSChtX2VkaXRFbGVtZW50LT5tX2ZpZWxkcykpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZWRpdEVsZW1lbnQtPmFwcGVuZENoaWxkKGZp
ZWxkKTsKKyAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9maWVsZHNbbV9lZGl0RWxlbWVudC0+bV9u
dW1iZXJPZkZpZWxkc10gPSBmaWVsZDsKKyAgICAgICAgKyttX2VkaXRFbGVtZW50LT5tX251bWJl
ck9mRmllbGRzOworICAgIH0KKworICAgIGJvb2wgbmVlZE1pbGxpc2Vjb25kRmllbGQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVy
KHNlY29uZEluTWlsbGlzZWNvbmQpLmlzWmVybygpCisgICAgICAgICAgICB8fCAhbV9zdGVwUmFu
Z2Uuc3RlcCgpLnJlbWFpbmRlcihzZWNvbmRJbk1pbGxpc2Vjb25kKS5pc1plcm8oKTsKKyAgICB9
CisKKyAgICBib29sIG5lZWRNaW51dGVGaWVsZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoaG91ckluTWlsbGlzZWNvbmQpLmlz
WmVybygpCisgICAgICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3RlcCgpLnJlbWFpbmRlcihob3Vy
SW5NaWxsaXNlY29uZCkuaXNaZXJvKCk7CisgICAgfQorCisgICAgLy8gRGF0ZVRpbWVGb3JtYXQ6
OlRva2VuSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdm9pZCB2aXNpdEZpZWxkKERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGUsIGludCk7CisgICAgdm9pZCB2aXNpdExpdGVyYWwoY29uc3QgU3RyaW5n
Jik7CisKKyAgICBEYXRlVGltZUZvcm1hdERldGFpbCBtX2Zvcm1hdERldGFpbDsKKyAgICBEYXRl
VGltZUVkaXRFbGVtZW50KiBtX2VkaXRFbGVtZW50OworICAgIGNvbnN0IFN0ZXBSYW5nZSYgbV9z
dGVwUmFuZ2U7Cit9OworCitib29sIERhdGVUaW1lRWRpdExheW91dGVyOjpidWlsZChjb25zdCBT
dHJpbmcmIGZvcm1hdFN0cmluZykKK3sKKyAgICBtX2Zvcm1hdERldGFpbCA9IERhdGVUaW1lRm9y
bWF0QW5hbHl6ZXI6OmFuYWx5emUoZm9ybWF0U3RyaW5nKTsKKyAgICBtX2VkaXRFbGVtZW50LT5y
ZXNldExheW91dCgpOworICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9ybWF0U3Ry
aW5nLCAqdGhpcyk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OnZpc2l0RmllbGQo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaG91clBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRp
bWUtZWRpdC1ob3VyLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3Ry
aW5nLCBtaWxsaXNlY29uZFBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNl
Y29uZC1maWVsZCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbWlu
dXRlUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZCIpKTsKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgYW1wbVBzdWVkb0lkLCAoIi13ZWJr
aXQtZGF0ZXRpbWUtZWRpdC1hbXBtLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QXRvbWljU3RyaW5nLCBzZWNvbmRQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vj
b25kLWZpZWxkIikpOworCisgICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKKyAgICBjYXNlIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTE6CisgICAgICAgIGlmICghbV9lZGl0RWxlbWVudC0+
bV9ob3VyMTFGaWVsZCkKKyAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1faG91cjExRmllbGQg
PSBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LT5kb2N1bWVu
dCgpLCAqbV9lZGl0RWxlbWVudCwgaG91clBzdWVkb0lkLCAwLCAxMSk7CisgICAgICAgIGFkZEZp
ZWxkKG1fZWRpdEVsZW1lbnQtPm1faG91cjExRmllbGQuZ2V0KCkpOworICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTI6CisgICAgICAgIGlm
ICghbV9lZGl0RWxlbWVudC0+bV9ob3VyMTJGaWVsZCkKKyAgICAgICAgICAgIG1fZWRpdEVsZW1l
bnQtPm1faG91cjEyRmllbGQgPSBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2Vk
aXRFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9lZGl0RWxlbWVudCwgaG91clBzdWVkb0lkLCAxLCAx
Mik7CisgICAgICAgIGFkZEZpZWxkKG1fZWRpdEVsZW1lbnQtPm1faG91cjEyRmllbGQuZ2V0KCkp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVI
b3VyMjM6CisgICAgICAgIGlmICghbV9lZGl0RWxlbWVudC0+bV9ob3VyMjNGaWVsZCkKKyAgICAg
ICAgICAgIG1fZWRpdEVsZW1lbnQtPm1faG91cjIzRmllbGQgPSBEYXRlVGltZUhvdXJGaWVsZEVs
ZW1lbnQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9lZGl0RWxlbWVudCwg
aG91clBzdWVkb0lkLCAwLCAyMyk7CisgICAgICAgIGFkZEZpZWxkKG1fZWRpdEVsZW1lbnQtPm1f
aG91cjIzRmllbGQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CisgICAgICAgIGlmICghbV9lZGl0RWxlbWVudC0+bV9o
b3VyMjRGaWVsZCkKKyAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1faG91cjI0RmllbGQgPSBE
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LT5kb2N1bWVudCgp
LCAqbV9lZGl0RWxlbWVudCwgaG91clBzdWVkb0lkLCAxLCAyNCk7CisgICAgICAgIGFkZEZpZWxk
KG1fZWRpdEVsZW1lbnQtPm1faG91cjI0RmllbGQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNaW51dGU6CisgICAgICAgIGlmICgh
bV9lZGl0RWxlbWVudC0+bV9taW51dGVGaWVsZCkKKyAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQt
Pm1fbWludXRlRmllbGQgPSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2Vk
aXRFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9lZGl0RWxlbWVudCwgbWludXRlUHN1ZWRvSWQsIG1p
bnV0ZUluTWlsbGlzZWNvbmQsIDAsIDU5KTsKKyAgICAgICAgaWYgKG5lZWRNaW51dGVGaWVsZCgp
KQorICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9taW51dGVGaWVsZC0+c2V0UmVhZFdyaXRl
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9taW51dGVG
aWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAgICAgICAgICAgIGlmICghbV9lZGl0RWxlbWVudC0+bV9t
aW51dGVGaWVsZC0+aGFzVmFsdWUoKSkKKyAgICAgICAgICAgICAgICBtX2VkaXRFbGVtZW50LT5t
X21pbnV0ZUZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcigwLCBEYXRlVGltZUZpZWxkRWxlbWVudDo6
RGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgfQorICAgICAgICBhZGRGaWVsZChtX2VkaXRFbGVt
ZW50LT5tX21pbnV0ZUZpZWxkLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVyaW9kOgorICAgICAgICBpZiAoIW1fZWRpdEVsZW1l
bnQtPm1fQU1QTUZpZWxkKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9BTVBNRmllbGQg
PSBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVhdGUobV9lZGl0RWxlbWVudC0+ZG9j
dW1lbnQoKSwgKm1fZWRpdEVsZW1lbnQsIGFtcG1Qc3VlZG9JZCwgaG91ckluTWlsbGlzZWNvbmQg
KiAxMiwgdGltZUFNUE1MYWJlbHMoKSk7CisgICAgICAgIGFkZEZpZWxkKG1fZWRpdEVsZW1lbnQt
Pm1fQU1QTUZpZWxkLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25kOgorICAgICAgICBpZiAobmVlZFNlY29uZEZpZWxkKCkg
fHwgbV9mb3JtYXREZXRhaWwuaGFzU2Vjb25kRmllbGQpIHsKKyAgICAgICAgICAgIGlmICghbV9l
ZGl0RWxlbWVudC0+bV9zZWNvbmRGaWVsZCkKKyAgICAgICAgICAgICAgICBtX2VkaXRFbGVtZW50
LT5tX3NlY29uZEZpZWxkID0gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpjcmVhdGUobV9l
ZGl0RWxlbWVudC0+ZG9jdW1lbnQoKSwgKm1fZWRpdEVsZW1lbnQsIHNlY29uZFBzdWVkb0lkLCBz
ZWNvbmRJbk1pbGxpc2Vjb25kLCAwLCA1OSk7CisgICAgICAgICAgICBpZiAobmVlZFNlY29uZEZp
ZWxkKCkpCisgICAgICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9zZWNvbmRGaWVsZC0+c2V0
UmVhZFdyaXRlKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2VkaXRF
bGVtZW50LT5tX3NlY29uZEZpZWxkLT5zZXRSZWFkT25seSgpOworICAgICAgICAgICAgICAgIGlm
ICghbV9lZGl0RWxlbWVudC0+bV9zZWNvbmRGaWVsZC0+aGFzVmFsdWUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9zZWNvbmRGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIo
MCwgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRpc3BhdGNoTm9FdmVudCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBhZGRGaWVsZChtX2VkaXRFbGVtZW50LT5tX3NlY29uZEZpZWxkLmdldCgp
KTsKKworICAgICAgICAgICAgaWYgKG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgJiYgIW1fZm9ybWF0
RGV0YWlsLmhhc01pbGxpc2Vjb25kRmllbGQpIHsKKyAgICAgICAgICAgICAgICB2aXNpdExpdGVy
YWwobG9jYWxpemVkRGVjaW1hbFNlcGFyYXRvcigpKTsKKyAgICAgICAgICAgICAgICB2aXNpdEZp
ZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kOgorICAgICAgICBpZiAobmVlZE1pbGxp
c2Vjb25kRmllbGQoKSkgeworICAgICAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5tX21pbGxp
c2Vjb25kRmllbGQpCisgICAgICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9taWxsaXNlY29u
ZEZpZWxkID0gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpjcmVhdGUobV9lZGl0RWxlbWVu
dC0+ZG9jdW1lbnQoKSwgKm1fZWRpdEVsZW1lbnQsIG1pbGxpc2Vjb25kUHN1ZWRvSWQsIDEsIDAs
IDk5OSk7CisgICAgICAgICAgICBhZGRGaWVsZChtX2VkaXRFbGVtZW50LT5tX21pbGxpc2Vjb25k
RmllbGQuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI6
OnZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgQVNTRVJUKHRleHQubGVu
Z3RoKCkpOworICAgIG1fZWRpdEVsZW1lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShtX2Vk
aXRFbGVtZW50LT5kb2N1bWVudCgpLCB0ZXh0KSk7Cit9CisKK0RhdGVUaW1lRWRpdEVsZW1lbnQ6
OkVkaXRDb250cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKCkKK3sKK30KKworRGF0ZVRpbWVF
ZGl0RWxlbWVudDo6RGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRD
b250cm9sT3duZXImIGVkaXRDb250cm9sT3duZXIpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZU
YWcsIGRvY3VtZW50KQorICAgICwgbV9lZGl0Q29udHJvbE93bmVyKCZlZGl0Q29udHJvbE93bmVy
KQorICAgICwgbV9mb2N1c0ZpZWxkSW5kZXgoSW52YWxpZEZpZWxkSW5kZXgpCisgICAgLCBtX251
bWJlck9mRmllbGRzKDApCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IGRhdGVUaW1lRWRpdFBzZXVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdCIpKTsKKyAgICBz
ZXRTaGFkb3dQc2V1ZG9JZChkYXRlVGltZUVkaXRQc2V1ZG9JZCk7CisKKyAgICBtX3NwaW5CdXR0
b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqdGhpcyk7Cit9CisKK0Rh
dGVUaW1lRWRpdEVsZW1lbnQ6On5EYXRlVGltZUVkaXRFbGVtZW50KCkKK3sKKyAgICBpZiAobV9o
b3VyMTFGaWVsZCkKKyAgICAgICAgbV9ob3VyMTFGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7
CisKKyAgICBpZiAobV9ob3VyMTJGaWVsZCkKKyAgICAgICAgbV9ob3VyMTJGaWVsZC0+cmVtb3Zl
RXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9ob3VyMjNGaWVsZCkKKyAgICAgICAgbV9ob3Vy
MjNGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9ob3VyMjRGaWVsZCkK
KyAgICAgICAgbV9ob3VyMjRGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAo
bV9taWxsaXNlY29uZEZpZWxkKQorICAgICAgICBtX21pbGxpc2Vjb25kRmllbGQtPnJlbW92ZUV2
ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1fbWludXRlRmllbGQpCisgICAgICAgIG1fbWludXRl
RmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1fQU1QTUZpZWxkKQorICAg
ICAgICBtX0FNUE1GaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBpZiAobV9zZWNv
bmRGaWVsZCkKKyAgICAgICAgbV9zZWNvbmRGaWVsZC0+cmVtb3ZlRXZlbnRIYW5kbGVyKCk7CisK
KyAgICBpZiAobV9zcGluQnV0dG9uKQorICAgICAgICBtX3NwaW5CdXR0b24tPnJlbW92ZVN0ZXBB
Y3Rpb25IYW5kbGVyKCk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gRGF0
ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRWRpdENvbnRyb2xP
d25lciYgZWRpdENvbnRyb2xPd25lciwgY29uc3QgU3RlcFJhbmdlJiBzdGVwUmFuZ2UpCit7Cisg
ICAgUmVmUHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IGNvbnRhaW5lciA9IGFkb3B0UmVmKG5ldyBE
YXRlVGltZUVkaXRFbGVtZW50KGRvY3VtZW50LCBlZGl0Q29udHJvbE93bmVyKSk7CisgICAgY29u
dGFpbmVyLT5zZXRMYXlvdXQoc3RlcFJhbmdlKTsKKyAgICByZXR1cm4gY29udGFpbmVyOworfQor
Citib29sIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9lZGl0Q29udHJvbE93bmVyICYmIG1fZWRpdENvbnRyb2xPd25lci0+aXNFZGl0Q29udHJv
bE93bmVyRGlzYWJsZWQoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkaXNhYmxl
ZFN0YXRlQ2hhbmdlZCgpCit7CisgICAgdXBkYXRlVUlTdGF0ZSgpOworfQorCitEYXRlVGltZUZp
ZWxkRWxlbWVudCogRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRBdChpbnQgaW5kZXgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGluZGV4ID49IDAgJiYgaW5kZXggPCBtX251bWJlck9mRmllbGRzID8g
bV9maWVsZHNbaW5kZXhdIDogMDsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYg
KGtleWJvYXJkRXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGZp
ZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpICYmICFkaXNhYmxlZCgpICYgIXJlYWRPbmx5KCkpIHsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5
SWRlbnRpZmllcigpOworCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJMZWZ0Iikgewor
ICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAg
ICAgIGNvbnN0IGludCBmaWVsZEluZGV4ID0gcHJldmlvdXNGaWVsZEluZGV4KCk7CisgICAgICAg
ICAgICBpZiAoZmllbGRBdChmaWVsZEluZGV4KSkKKyAgICAgICAgICAgICAgICBzZXRGb2N1c0Zp
ZWxkKGZpZWxkSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlJpZ2h0IikgeworICAgICAgICAgICAga2V5Ym9hcmRF
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBmaWVsZElu
ZGV4ID0gbmV4dEZpZWxkSW5kZXgoKTsKKyAgICAgICAgICAgIGlmIChmaWVsZEF0KGZpZWxkSW5k
ZXgpKQorICAgICAgICAgICAgICAgIHNldEZvY3VzRmllbGQoZmllbGRJbmRleCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAi
VSswMDA5IikgeworICAgICAgICAgICAgY29uc3QgaW50IGZpZWxkSW5kZXggPSBrZXlib2FyZEV2
ZW50LT5nZXRNb2RpZmllclN0YXRlKCJTaGlmdCIpID8gcHJldmlvdXNGaWVsZEluZGV4KCkgOiBu
ZXh0RmllbGRJbmRleCgpOworICAgICAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpIHsK
KyAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICAgICAgICAgIHNldEZvY3VzRmllbGQoZmllbGRJbmRleCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERhdGVU
aW1lRWRpdEVsZW1lbnQ6OmZpZWxkVmFsdWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9lZGl0Q29u
dHJvbE93bmVyKQorICAgICAgICBtX2VkaXRDb250cm9sT3duZXItPmVkaXRDb250cm9sVmFsdWVD
aGFuZ2VkKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFuZGxlTW91c2VFdmVu
dChNb3VzZUV2ZW50KiBtb3VzZUV2ZW50KQoreworICAgIGlmIChtb3VzZUV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigpID09
IExlZnRCdXR0b24gJiYgIWRpc2FibGVkKCkgJiYgIXJlYWRPbmx5KCkpIHsKKyAgICAgICAgTm9k
ZSogY29uc3QgcmVsYXRlZFRhcmdldCA9IG1vdXNlRXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsK
KyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1fbnVtYmVyT2ZGaWVsZHM7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChtX2ZpZWxkc1tpbmRleF0gPT0gcmVsYXRlZFRhcmdl
dCkgeworICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KG1fZWRpdENvbnRyb2xPd25lcikKKyAgICAgICAgICAgICAgICAgICAgbV9lZGl0Q29udHJvbE93
bmVyLT5lZGl0Q29udHJvbE1vdXNlRm9jdXMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVt
ZW50Ojptb3ZlVG9OZXh0RmllbGQoKQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJbmRleCAhPSBJ
bnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAgc2V0Rm9jdXNGaWVsZChuZXh0RmllbGRJbmRleCgp
KTsKK30KKworaW50IERhdGVUaW1lRWRpdEVsZW1lbnQ6Om5leHRGaWVsZEluZGV4KCkgY29uc3QK
K3sKKyAgICBmb3IgKGludCBpbmRleCA9IG1fZm9jdXNGaWVsZEluZGV4ICsgMTsgaW5kZXggPCBt
X251bWJlck9mRmllbGRzOyArK2luZGV4KSB7CisgICAgICAgIGlmICghbV9maWVsZHNbaW5kZXhd
LT5yZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1
cm4gbV9udW1iZXJPZkZpZWxkczsKK30KKworaW50IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnByZXZp
b3VzRmllbGRJbmRleCgpIGNvbnN0Cit7CisgICAgZm9yIChpbnQgaW5kZXggPSBtX2ZvY3VzRmll
bGRJbmRleCAtIDE7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX2ZpZWxk
c1tpbmRleF0tPnJlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQor
ICAgIHJldHVybiAtMTsKK30KKworYm9vbCBEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWRpdENvbnRyb2xPd25lciAmJiBtX2VkaXRDb250cm9s
T3duZXItPmlzRWRpdENvbnRyb2xPd25lclJlYWRPbmx5KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVF
ZGl0RWxlbWVudDo6cmVhZE9ubHlTdGF0ZUNoYW5nZWQoKQoreworICAgIHVwZGF0ZVVJU3RhdGUo
KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExheW91dCgpCit7CisgICAg
d2hpbGUgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCkpCisgICAgICAgIHJlbW92ZUNoaWxkKG5v
ZGUpOworICAgIG1fbnVtYmVyT2ZGaWVsZHMgPSAwOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVs
ZW1lbnQ6OnNldEZvY3VzRmllbGQoaW50IG5ld0ZvY3VzRmllbGRJbmRleCkKK3sKKyAgICBpZiAo
bV9mb2N1c0ZpZWxkSW5kZXggPT0gbmV3Rm9jdXNGaWVsZEluZGV4KQorICAgICAgICByZXR1cm47
CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgbmV3Rm9jdXNGaWVsZCA9IGZpZWxk
QXQobmV3Rm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAobmV3Rm9jdXNGaWVsZCAmJiBuZXdGb2N1
c0ZpZWxkLT5yZWFkT25seSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxk
RWxlbWVudCogY29uc3QgY3VycmVudEZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZElu
ZGV4KTsKKworICAgIGlmIChjdXJyZW50Rm9jdXNGaWVsZCkKKyAgICAgICAgY3VycmVudEZvY3Vz
RmllbGQtPnNldEZvY3VzKGZhbHNlKTsKKworICAgIGlmICghbmV3Rm9jdXNGaWVsZCkgeworICAg
ICAgICBtX2ZvY3VzRmllbGRJbmRleCA9IEludmFsaWRGaWVsZEluZGV4OworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9mb2N1c0ZpZWxkSW5kZXggPSBuZXdGb2N1c0ZpZWxkSW5kZXg7
CisgICAgbmV3Rm9jdXNGaWVsZC0+c2V0Rm9jdXModHJ1ZSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVF
ZGl0RWxlbWVudDo6c2V0TGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQoreworICAg
IERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3Vz
RmllbGRJbmRleCk7CisgICAgc2V0Rm9jdXNGaWVsZChJbnZhbGlkRmllbGRJbmRleCk7CisKKyAg
ICBEYXRlVGltZUVkaXRMYXlvdXRlciBidWlsZGVyKHRoaXMsIHN0ZXBSYW5nZSk7CisgICAgY29u
c3QgU3RyaW5nIGRhdGVUaW1lRm9ybWF0ID0gYnVpbGRlci5uZWVkU2Vjb25kRmllbGQoKSA/IGxv
Y2FsaXplZFRpbWVGb3JtYXRUZXh0KCkgOiBsb2NhbGl6ZWRTaG9ydFRpbWVGb3JtYXRUZXh0KCk7
CisgICAgaWYgKCFidWlsZGVyLmJ1aWxkKGRhdGVUaW1lRm9ybWF0KSB8fCAhbV9udW1iZXJPZkZp
ZWxkcykKKyAgICAgICAgYnVpbGRlci5idWlsZChidWlsZGVyLm5lZWRTZWNvbmRGaWVsZCgpID8g
IkhIOm1tOnNzIiA6ICJISDptbSIpOworCisgICAgYXBwZW5kQ2hpbGQobV9zcGluQnV0dG9uKTsK
KworICAgIGlmIChmb2N1c0ZpZWxkKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBtX251bWJlck9mRmllbGRzOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAoZm9jdXNG
aWVsZCA9PSBmaWVsZEF0KGluZGV4KSkgeworICAgICAgICAgICAgICAgIHNldEZvY3VzRmllbGQo
aW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5mb2N1c0V2ZW50KSB7CisgICAgICAgIGlmICghZGlzYWJsZWQoKSAmJiAhcmVhZE9ubHkoKSAm
JiBtX2ZvY3VzRmllbGRJbmRleCA9PSBJbnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAgICAgIHNl
dEZvY3VzRmllbGQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSB7CisgICAgICAgIHNldEZvY3VzRmll
bGQoSW52YWxpZEZpZWxkSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPmlzS2V5
Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldmVudCkpOworCisgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9j
dXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpOworICAgIGlmICghZm9jdXNGaWVs
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9jdXNGaWVsZC0+ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgaWYgKG1fQU1QTUZpZWxkKQorICAg
ICAgICBtX0FNUE1GaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkgPj0gMTIgPyAx
IDogMCk7CisKKyAgICBpZiAobV9ob3VyMTFGaWVsZCkKKyAgICAgICAgbV9ob3VyMTFGaWVsZC0+
c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworCisgICAgaWYgKG1faG91cjEyRmllbGQp
CisgICAgICAgIG1faG91cjEyRmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigpKTsK
KworICAgIGlmIChtX2hvdXIyM0ZpZWxkKQorICAgICAgICBtX2hvdXIyM0ZpZWxkLT5zZXRWYWx1
ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7CisKKyAgICBpZiAobV9ob3VyMjRGaWVsZCkKKyAgICAg
ICAgbV9ob3VyMjRGaWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworCisgICAg
aWYgKG1fbWlsbGlzZWNvbmRGaWVsZCkKKyAgICAgICAgbV9taWxsaXNlY29uZEZpZWxkLT5zZXRW
YWx1ZUFzSW50ZWdlcihkYXRlLm1pbGxpc2Vjb25kKCkpOworCisgICAgaWYgKG1fbWludXRlRmll
bGQpCisgICAgICAgIG1fbWludXRlRmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUubWludXRl
KCkpOworCisgICAgaWYgKG1fc2Vjb25kRmllbGQpCisgICAgICAgIG1fc2Vjb25kRmllbGQtPnNl
dFZhbHVlQXNJbnRlZ2VyKGRhdGUuc2Vjb25kKCkpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVs
ZW1lbnQ6OnNldFZhbHVlQXNFbXB0eSgpCit7CisgICAgZm9yIChpbnQgZmllbGRJbmRleCA9IDA7
IGZpZWxkSW5kZXggPCBtX251bWJlck9mRmllbGRzOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIGZp
ZWxkQXQoZmllbGRJbmRleCktPnNldFZhbHVlQXNFbXB0eShEYXRlVGltZUZpZWxkRWxlbWVudDo6
RGlzcGF0Y2hOb0V2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0
dG9uU3RlcERvd24oKQoreworICAgIGlmIChEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9j
dXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpKQorICAgICAgICBmb2N1c0ZpZWxk
LT5zdGVwRG93bigpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25T
dGVwVXAoKQoreworICAgIGlmIChEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVs
ZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpKQorICAgICAgICBmb2N1c0ZpZWxkLT5zdGVw
VXAoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50Ojp1cGRhdGVVSVN0YXRlKCkKK3sK
KyAgICBpZiAoZGlzYWJsZWQoKSB8fCByZWFkT25seSgpKSB7CisgICAgICBpZiAobV9zcGluQnV0
dG9uKQorICAgICAgICAgIG1fc3BpbkJ1dHRvbi0+cmVsZWFzZUNhcHR1cmUoKTsKKworICAgICAg
c2V0Rm9jdXNGaWVsZChJbnZhbGlkRmllbGRJbmRleCk7CisgICAgfQorfQorCitkb3VibGUgRGF0
ZVRpbWVFZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgZG91YmxlIHZh
bHVlID0gMDsKKworICAgIGZvciAoaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9u
dW1iZXJPZkZpZWxkczsgKytmaWVsZEluZGV4KSB7CisgICAgICAgIGNvbnN0IERhdGVUaW1lRmll
bGRFbGVtZW50KiBjb25zdCBmaWVsZCA9IGZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgIGlm
ICghZmllbGQtPmhhc1ZhbHVlKCkpCisgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICB2YWx1ZSArPSBmaWVsZC0+dmFsdWVB
c0RvdWJsZSgpOworICAgIH0KKworICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Rh
dGVUaW1lRWRpdEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTkxN2Y4Yjc0ODJhMjdmOWE2N2UwZmNh
ZTQwMmExMmZlNGJiMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBEYXRlVGltZUVkaXRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVF
ZGl0RWxlbWVudF9oCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxE
UykKKworI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0
ZUNvbXBvbmVudHM7CitjbGFzcyBEYXRlVGltZUVkaXRMYXlvdXRlcjsKK2NsYXNzIEtleWJvYXJk
RXZlbnQ7CitjbGFzcyBNb3VzZUV2ZW50OworY2xhc3MgU3RlcFJhbmdlOworCisvLyBEYXRlVGlt
ZUVkaXRFbGVtZW50IGNsYXNzIGNvbnRhaW5zIG51bWJlcmljIGZpZWxkIGFuZCBzeW1ib2xjIGZp
ZWxkIGZvcgorLy8gcmVwcmVzZW50aW5nIGRhdGUgYW5kIHRpbWUsIHN1Y2ggYXMKKy8vICAtIFll
YXIsIE1vbnRoLCBEYXkgT2YgTW9udGgKKy8vICAtIEhvdXIsIE1pbnV0ZSwgU2Vjb25kLCBNaWxs
aXNlY29uZCwgQU0vUE0KK2NsYXNzIERhdGVUaW1lRWRpdEVsZW1lbnQgOiBwdWJsaWMgSFRNTERp
dkVsZW1lbnQsIHByaXZhdGUgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVy
LCBwcml2YXRlIFNwaW5CdXR0b25FbGVtZW50OjpTdGVwQWN0aW9uSGFuZGxlciB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0RWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBm
cmllbmQgY2xhc3MgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI7CisKKyAgICAvLyBFZGl0Q29udHJvbE93
bmVyIGltcGxlbWVudGVyIG11c3QgY2FsbCByZW1vdmVFdmVudEhhbmRsZXIgd2hlbgorICAgIC8v
IGl0IGRvZXNuJ3QgaGFuZGxlIGV2ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNz
IEVkaXRDb250cm9sT3duZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RWRpdENv
bnRyb2xPd25lcigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZWRpdENvbnRyb2xNb3VzZUZvY3Vz
KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZWRpdENvbnRyb2xWYWx1ZUNoYW5nZWQoKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRDb250cm9sT3duZXJEaXNhYmxlZCgpIGNv
bnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzRWRpdENvbnRyb2xPd25lclJlYWRPbmx5
KCkgY29uc3QgPSAwOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZUVk
aXRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBFZGl0Q29udHJvbE93bmVyJiwgY29uc3QgU3Rl
cFJhbmdlJik7CisKKyAgICB2aXJ0dWFsIH5EYXRlVGltZUVkaXRFbGVtZW50KCk7CisgICAgdmly
dHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAgICB2b2lk
IGRpc2FibGVkU3RhdGVDaGFuZ2VkKCk7CisgICAgdm9pZCByZWFkT25seVN0YXRlQ2hhbmdlZCgp
OworICAgIHZvaWQgcmVtb3ZlRXZlbnRIYW5kbGVyKCkgeyBtX2VkaXRDb250cm9sT3duZXIgPSAw
OyB9CisgICAgdm9pZCBzZXRMYXlvdXQoY29uc3QgU3RlcFJhbmdlJik7CisgICAgdm9pZCBzZXRW
YWx1ZUFzRW1wdHkoKTsKKyAgICB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25l
bnRzJik7CisgICAgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRGaWVsZEluZGV4ID0gLTE7CisKKyAgICAvLyBUaW1l
IGNhbiBiZSByZXByZXNlbnQgYXQgbW9zdCBmaXZlIGZpZWxkcywgc3VjaCBhcworICAgIC8vICAx
LiBob3VyCisgICAgLy8gIDIuIG1pbnV0ZQorICAgIC8vICAzLiBzZWNvbmQKKyAgICAvLyAgNC4g
bWlsbGlzZWNvbmQKKyAgICAvLyAgNS4gQU0vUE0KKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGlt
dW1OdW1iZXJPZkZpZWxkcyA9IDU7CisKKyAgICBEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50
KiwgRWRpdENvbnRyb2xPd25lciYpOworCisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGZpZWxkQXQoaW50KSBjb25z
dDsKKyAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZv
aWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisgICAgaW50IG5leHRGaWVsZEluZGV4
KCkgY29uc3Q7CisgICAgaW50IHByZXZpb3VzRmllbGRJbmRleCgpIGNvbnN0OworICAgIGJvb2wg
cmVhZE9ubHkoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0TGF5b3V0KCk7CisgICAgdm9pZCBzZXRG
b2N1c0ZpZWxkKGludCk7CisgICAgdm9pZCB1cGRhdGVVSVN0YXRlKCk7CisKKyAgICAvLyBEYXRl
VGltZUZpZWxkRWxlbWVudDo6RmllbGRFdmVudEhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1
YWwgdm9pZCBtb3ZlVG9OZXh0RmllbGQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZv
aWQgZmllbGRWYWx1ZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKworICAgIC8vIFNwaW5CdXR0
b25FbGVtZW50OjpTdGVwQWN0aW9uSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lk
IHNwaW5CdXR0b25TdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBz
cGluQnV0dG9uU3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICBFZGl0Q29udHJvbE93bmVy
KiBtX2VkaXRDb250cm9sT3duZXI7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBt
X0FNUE1GaWVsZDsKKyAgICBSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1faG91cjExRmll
bGQ7CisgICAgUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBtX2hvdXIxMkZpZWxkOworICAg
IFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gbV9ob3VyMjRGaWVsZDsKKyAgICBSZWZQdHI8
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IG1faG91cjIzRmllbGQ7CisgICAgUmVmUHRyPERhdGVUaW1l
RmllbGRFbGVtZW50PiBtX21pbGxpc2Vjb25kRmllbGQ7CisgICAgUmVmUHRyPERhdGVUaW1lRmll
bGRFbGVtZW50PiBtX21pbnV0ZUZpZWxkOworICAgIFJlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVu
dD4gbV9zZWNvbmRGaWVsZDsKKyAgICBSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IG1fc3BpbkJ1
dHRvbjsKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogbV9maWVsZHNbbWF4aW11bU51bWJlck9m
RmllbGRzXTsKKyAgICBpbnQgbV9mb2N1c0ZpZWxkSW5kZXg7CisgICAgaW50IG1fbnVtYmVyT2ZG
aWVsZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTczNDNmYWM0OWZhODE5ZWRiYWU2ZmY2MTEwNWZlZDQ3NDJhNTI1Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50LmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklF
TERTKQorCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwor
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhhbmRs
ZXIoKQoreworfQorCitEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQo
RG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1bml0SW5NaWxsaXNlY29u
ZCApCisgICAgOiBIVE1MRWxlbWVudChzcGFuVGFnLCBkb2N1bWVudCkKKyAgICAsIG1fZmllbGRF
dmVudEhhbmRsZXIoJmZpZWxkRXZlbnRIYW5kbGVyKQorICAgICwgbV91bml0SW5NaWxsaXNlY29u
ZCh1bml0SW5NaWxsaXNlY29uZCkKK3sKKyAgICBzZXRTaGFkb3dQc2V1ZG9JZChzaGFkb3dQc2V1
ZG9JZCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkgJiYg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAgICAgIEtl
eWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4o
ZXZlbnQpOworCisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9IGtleWJvYXJk
RXZlbnQtPmtleUlkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAi
RG93biIpIHsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgICAgICAgICBzdGVwRG93bigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlVwIikgeworICAgICAgICAgICAga2V5
Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHN0ZXBVcCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZp
ZXIgPT0gIlUrMDAwOCIpIHsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgICAgICBzZXRWYWx1ZUFzRW1wdHkoRGlzcGF0Y2hFdmVudCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWV2ZW50LT5k
ZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmluaXRpYWxpemUoKQor
eworICAgIGFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB2aXNpYmxlVmFsdWUo
KSkpOworfQorCitib29sIERhdGVUaW1lRmllbGRFbGVtZW50OjpyZWFkT25seSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKTsKK30KKwordm9pZCBE
YXRlVGltZUZpZWxkRWxlbWVudDo6c2V0UmVhZE9ubHkoKQoreworICAgIC8vIFNldCBIVE1MIGF0
dHJpYnV0ZSByZWFkb25seSB0byBjaGFuZ2UgYXBwZXJhbmNlLgorICAgIHNldEF0dHJpYnV0ZShy
ZWFkb25seUF0dHIsIGVtcHR5U3RyaW5nKCkpOworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
K30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0UmVhZFdyaXRlKCkKK3sKKyAgICAv
LyBSZW1vdmUgSFRNTCBhdHRyaWJ1dGUgcmVhZG9ubHkgdG8gY2hhbmdlIGFwcGVyYW5jZS4KKyAg
ICByZW1vdmVBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWx1ZShF
dmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgVGV4dCogY29uc3QgdGV4dE5vZGUg
PSB0b1RleHQoZmlyc3RDaGlsZCgpKTsKKyAgICBjb25zdCBTdHJpbmcgbmV3VmlzaWJsZVZhbHVl
ID0gdmlzaWJsZVZhbHVlKCk7CisgICAgQVNTRVJUKG5ld1Zpc2libGVWYWx1ZS5sZW5ndGgoKSA+
IDApOworCisgICAgaWYgKHRleHROb2RlLT53aG9sZVRleHQoKSA9PSBuZXdWaXNpYmxlVmFsdWUp
CisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGV4dE5vZGUt
PnJlcGxhY2VXaG9sZVRleHQobmV3VmlzaWJsZVZhbHVlLCBlYyk7CisKKyAgICBpZiAoZXZlbnRC
ZWhhdmlvciA9PSBEaXNwYXRjaEV2ZW50ICYmIG1fZmllbGRFdmVudEhhbmRsZXIpCisgICAgICAg
IG1fZmllbGRFdmVudEhhbmRsZXItPmZpZWxkVmFsdWVDaGFuZ2VkKCk7Cit9CisKK2RvdWJsZSBE
YXRlVGltZUZpZWxkRWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc1ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlQXNJbnRlZ2VyKCkpICogbV91
bml0SW5NaWxsaXNlY29uZCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
MWM5ZjIyYWU4NjM3YzcxNDE1NzFlZTZiMjNiOWZkMjE3ZDk5NDZmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApAQCAt
MCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxl
bWVudF9oCisjZGVmaW5lIERhdGVUaW1lRmllbGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBV
VF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBpcyBi
YXNlIGNsYXNzIG9mIGRhdGUgdGltZSBmaWVsZCBlbGVtZW50LgorY2xhc3MgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KERhdGVUaW1lRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIGVudW0gRXZlbnRCZWhhdmlv
ciB7CisgICAgICAgIERpc3BhdGNoTm9FdmVudCwKKyAgICAgICAgRGlzcGF0Y2hFdmVudCwKKyAg
ICB9OworCisgICAgLy8gRmllbGRFdmVudEhhbmRsZXIgaW1wbGVtZW50ZXIgbXVzdCBjYWxsIHJl
bW92ZUV2ZW50SGFuZGxlciB3aGVuCisgICAgLy8gaXQgZG9lc24ndCBoYW5kbGUgZXZlbnQsIGUu
Zy4gYXQgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgRmllbGRFdmVudEhhbmRsZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RmllbGRFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2VkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQg
bW92ZVRvTmV4dEZpZWxkKCkgPSAwOworICAgIH07CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0
ID0gMDsKKyAgICBib29sIHJlYWRPbmx5KCkgY29uc3Q7CisgICAgdm9pZCByZW1vdmVFdmVudEhh
bmRsZXIoKSB7IG1fZmllbGRFdmVudEhhbmRsZXIgPSAwOyB9CisgICAgdm9pZCBzZXRSZWFkT25s
eSgpOworICAgIHZvaWQgc2V0UmVhZFdyaXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
QXNFbXB0eShFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9F
dmVudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RlcFVwKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAw
OworICAgIGRvdWJsZSB2YWx1ZUFzRG91YmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmFs
dWVBc0ludGVnZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVl
KCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9j
dW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGludCk7CisK
KyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBpbnQgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25z
dCB7IHJldHVybiBtX3VuaXRJbk1pbGxpc2Vjb25kOyB9CisgICAgdm9pZCB1cGRhdGVWaXNpYmxl
VmFsdWUoRXZlbnRCZWhhdmlvcik7CisKKyAgICBGaWVsZEV2ZW50SGFuZGxlciogbV9maWVsZEV2
ZW50SGFuZGxlcjsKKyAgICBjb25zdCBpbnQgbV91bml0SW5NaWxsaXNlY29uZDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lSG91ckZpZWxkRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY3NTk3ZjE5ZjdjZDI4ZDk5ZDY4ZWJlOTRkMjdkOGM4ZDI4NmIxZjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUhvdXJGaWVsZEVs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykK
KworI2luY2x1ZGUgIkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdCBpbnQgaG91ckluTWlsbGlzZWNvbmQgPSAzNjAwICogMTAw
MDsKKworRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQo
RG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCBtaW5pbXVtLCBpbnQgbWF4
aW11bSkKKyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRF
dmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCBob3VySW5NaWxsaXNlY29uZCwgbWluaW11bSwg
bWF4aW11bSkKKyAgICAsIG1fYWxpZ25tZW50KG1heGltdW0gKyBtYXhpbXVtICUgMikKK3sKKyAg
ICBBU1NFUlQoKCFtaW5pbXVtICYmIChtYXhpbXVtID09IDExIHx8IG1heGltdW0gPT0gMjMpKSB8
fCAobWluaW11bSA9PSAxICYmIChtYXhpbXVtID09IDEyIHx8IG1heGltdW0gPT0gMjQpKSk7Cit9
CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBEYXRlVGltZUhvdXJGaWVs
ZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBm
aWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCwgaW50
IG1pbmltdW0sIGludCBtYXhpbXVtKQoreworICAgIFJlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVs
ZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChkb2N1
bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCBtaW5pbXVtLCBtYXhpbXVt
KSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gZmllbGQ7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFsdWVB
c0hvdXIyMywgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIGNvbnN0IGludCB2
YWx1ZSA9IFJhbmdlKDAsIDIzKS5lbnN1cmVJblJhbmdlKHZhbHVlQXNIb3VyMjMpICUgbV9hbGln
bm1lbnQ7CisgICAgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdl
cihyYW5nZSgpLm1pbmltdW0gJiYgIXZhbHVlID8gbV9hbGlnbm1lbnQgOiB2YWx1ZSwgZXZlbnRC
ZWhhdmlvcik7Cit9CisKK2ludCBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRl
Z2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSAlIG1fYWxpZ25tZW50IDogLTE7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0RhdGVUaW1lSG91ckZpZWxkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3OWJh
MWFlNzJmMDljNGExNzQ2NGQ0N2U4YmIyMWFhNzlkN2ZhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuaApAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUhvdXJGaWVs
ZEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5B
QkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgaXMgdXNlZCBmb3IgaG91ciBmaWVsZCBvZiBkYXRlIHRpbWUg
Zm9ybWF0CisvLyBzdXBwb3J0aW5nIGZvbGxvd2luZyBwYXR0ZXJuczoKKy8vICAtIDAgdG8gMTEK
Ky8vICAtIDEgdG8gMTIKKy8vICAtIDAgdG8gMjMKKy8vICAtIDEgdG8gMjQKK2NsYXNzIERhdGVU
aW1lSG91ckZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudCk7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5n
JiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKKyAgICAvLyBEYXRlVGltZUZp
ZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2Vy
KGludCwgRXZlbnRCZWhhdmlvcikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFs
dWVBc0ludGVnZXIoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IGludCBtX2Fs
aWdubWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxMzAwZmRjMjAyZWVhYWU0ZWI3YTQwZjM0
NWE3MzQyNTliNzgxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAq
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElOUFVU
X1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IHNpemVfdCBkaXNwbGF5U2l6ZU9mTnVtYmVyKGludCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFs
dWUgPj0gMCk7CisKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlu
dCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgd2hpbGUgKHZhbHVlKSB7CisgICAgICAgIHZhbHVl
IC89IDEwOworICAgICAgICArK251bWJlck9mRGlnaXRzOworICAgIH0KKworICAgIHJldHVybiBu
dW1iZXJPZkRpZ2l0czsKK30KKworRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6
UmFuZ2UoaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQorICAgIDogbWF4aW11bShtYXhpbXVtKQor
ICAgICwgbWluaW11bShtaW5pbXVtKQoreworICAgIEFTU0VSVChtaW5pbXVtIDw9IG1heGltdW0p
OworfQorCitpbnQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6ZW5zdXJlSW5S
YW5nZShpbnQgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KHZh
bHVlLCBtaW5pbXVtKSwgbWF4aW11bSk7Cit9CisKK0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dDo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRF
dmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRv
d1BzZXVkb0lkLCBpbnQgdW5pdEluTWlsbGlzZWNvbmQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11
bSkKKyAgICA6IERhdGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxl
ciwgc2hhZG93UHNldWRvSWQsIHVuaXRJbk1pbGxpc2Vjb25kKQorICAgICwgbV9sYXN0RGlnaXRD
aGFyVGltZSgwKQorICAgICwgbV9yYW5nZShtaW5pbXVtLCBtYXhpbXVtKQorICAgICwgbV92YWx1
ZSgwKQorICAgICwgbV9oYXNWYWx1ZShmYWxzZSkKK3sKK30KKworUGFzc1JlZlB0cjxEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ+IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVy
LCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkLCBpbnQgdW5pdEluTWlsbGlzZWNv
bmQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5p
dEluTWlsbGlzZWNvbmQsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6
ZSgpOworICAgIHJldHVybiBmaWVsZDsKK30KKworc3RhdGljIGludCBtYXBFdmVudFRvRGlnaXQo
RXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+
KGV2ZW50KS0+a2V5Q29kZSgpIC0gJzAnOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgY29uc3Qg
aW50IGRpZ2l0ID0gbWFwRXZlbnRUb0RpZ2l0KGV2ZW50KTsKKyAgICBpZiAoZGlnaXQgPj0gMCAm
JiBkaWdpdCA8PSA5KSB7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OworICAgICAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9oYXNWYWx1ZSAmJiBpc0NvbnRpbnVv
c0V2ZW50KCpldmVudCkgPyBtX3ZhbHVlICogMTAgKyBkaWdpdCA6IGRpZ2l0LCBEaXNwYXRjaEV2
ZW50KTsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlICogMTAgPiBtX3JhbmdlLm1heGltdW0gJiYg
bV9maWVsZEV2ZW50SGFuZGxlcikgeworICAgICAgICAgICAgICAgIG1fZmllbGRFdmVudEhhbmRs
ZXItPm1vdmVUb05leHRGaWVsZCgpOworICAgICAgICAgICAgICAgIG1fbGFzdERpZ2l0Q2hhclRp
bWUgPSAwOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9sYXN0RGlnaXRD
aGFyVGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7CisgICAgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitib29sIERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudDo6aGFzVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2hh
c1ZhbHVlOworfQorCitib29sIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6aXNDb250aW51
b3NFdmVudChjb25zdCBFdmVudCYgZXZlbnQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQg
Q29udGludW91c0V2ZW50VGhyZXNob2xkID0gNzAwOworICAgIHJldHVybiBldmVudC50aW1lU3Rh
bXAoKSAtIG1fbGFzdERpZ2l0Q2hhclRpbWUgPCBDb250aW51b3VzRXZlbnRUaHJlc2hvbGQ7Cit9
CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHkoRXZl
bnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fdmFsdWUgPSAwOworICAgIG1faGFz
VmFsdWUgPSByZWFkT25seSgpOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9y
KTsKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKK30KKwordm9pZCBEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKGludCB2YWx1ZSwgRXZlbnRCZWhhdmlv
ciBldmVudEJlaGF2aW9yKQoreworICAgIG1fdmFsdWUgPSBlbnN1cmVJblJhbmdlKHZhbHVlKTsK
KyAgICBtX2hhc1ZhbHVlID0gdHJ1ZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhh
dmlvcik7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50OjpzdGVwRG93bigpCit7CisgICAgaWYgKG1faGFzVmFsdWUpCisg
ICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fdmFsdWUgPT0gbV9yYW5nZS5taW5pbXVtID8gbV9y
YW5nZS5tYXhpbXVtIDogZW5zdXJlSW5SYW5nZShtX3ZhbHVlIC0gMSksIERpc3BhdGNoRXZlbnQp
OworICAgIGVsc2UKKyAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9yYW5nZS5tYXhpbXVtLCBE
aXNwYXRjaEV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0
ZXBVcCgpCit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2Vy
KG1fdmFsdWUgPT0gbV9yYW5nZS5tYXhpbXVtID8gbV9yYW5nZS5taW5pbXVtIDogZW5zdXJlSW5S
YW5nZShtX3ZhbHVlICsgMSksIERpc3BhdGNoRXZlbnQpOworICAgIGVsc2UKKyAgICAgICAgc2V0
VmFsdWVBc0ludGVnZXIobV9yYW5nZS5taW5pbXVtLCBEaXNwYXRjaEV2ZW50KTsKK30KKworU3Ry
aW5nIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25zdAoreworICAgIGlm
ICghbV9oYXNWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBpZiAo
bV9yYW5nZS5tYXhpbXVtID4gOTk5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobV92
YWx1ZSk7CisKKyAgICBpZiAobV9yYW5nZS5tYXhpbXVtID4gOTkpCisgICAgICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiJTAzZCIsIG1fdmFsdWUpOworCisgICAgcmV0dXJuIFN0cmluZzo6Zm9y
bWF0KCIlMDJkIiwgbV92YWx1ZSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNWYWx1ZSA/IG1f
dmFsdWUgOiAtMTsKK30KKworU3RyaW5nIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmlz
aWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAobV9oYXNWYWx1ZSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChpbnQgbnVt
YmVyT2ZEYXNocyA9IHN0ZDo6bWF4KGRpc3BsYXlTaXplT2ZOdW1iZXIobV9yYW5nZS5tYXhpbXVt
KSwgZGlzcGxheVNpemVPZk51bWJlcihtX3JhbmdlLm1pbmltdW0pKTsgbnVtYmVyT2ZEYXNoczsg
LS1udW1iZXJPZkRhc2hzKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhZTE1MThlMzJkM2Q3Zjc1MTVhMTk2OGU2
OGFiNjcxMjYwODAxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDg3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnRfaAorI2Rl
ZmluZSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudCByZXByZXNlbnRzIG51bWVyaWMgZmllbGQgb2YgZGF0ZSB0aW1lIGZvcm1hdC4KKy8vIFRo
aXMgY2xhc3MgbWF5IGJlIHVzZWQgZm9yOgorLy8gIC0gbWludXRlCisvLyAgLSBtaWxsaXNlY29u
ZAorLy8gIC0gbW9udGgKKy8vICAtIHNlY29uZAorLy8gIC0geWVhcgorY2xhc3MgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQpOworCitwdWJs
aWM6CisgICAgc3RydWN0IFJhbmdlIHsKKyAgICAgICAgUmFuZ2UoaW50IG1pbmltdW0sIGludCBt
YXhpbXVtKTsKKyAgICAgICAgaW50IGVuc3VyZUluUmFuZ2UoaW50KSBjb25zdDsKKworICAgICAg
ICBpbnQgbWF4aW11bTsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgfTsKKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQgdW5pdEluTWls
bGlzZWNvbmQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKK3Byb3RlY3RlZDoKKyAgICBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIGludCB1bml0SW5NaWxsaXNlY29uZCwgaW50IG1pbmltdW0s
IGludCBtYXhpbXVtKTsKKworICAgIGludCBlbnN1cmVJblJhbmdlKGludCB2YWx1ZSkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZS5lbnN1cmVJblJhbmdlKHZhbHVlKTsgfQorICAgIGNvbnN0IFJhbmdl
JiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KKworICAgIC8vIERhdGVUaW1lRmll
bGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdCBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBF
dmVudEJlaGF2aW9yKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0
IE9WRVJSSURFIEZJTkFMOworCitwcml2YXRlOgorICAgIGJvb2wgaXNDb250aW51b3NFdmVudChj
b25zdCBFdmVudCYpIGNvbnN0OworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rp
b25zLgorICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNFbXB0eShFdmVudEJlaGF2aW9y
KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworICAgIERPTVRpbWVT
dGFtcCBtX2xhc3REaWdpdENoYXJUaW1lOworICAgIGNvbnN0IFJhbmdlIG1fcmFuZ2U7CisgICAg
aW50IG1fdmFsdWU7CisgICAgYm9vbCBtX2hhc1ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41MmQyMTRkZGVlOGE3ZWZhZjdiZTEwNGQ3NGQ3N2ZkZDRjNGZiMzkyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudC5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykK
KworI2luY2x1ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiBk
b2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkLCBpbnQgdW5pdEluTWlsbGlzZWNvbmQsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBzeW1ib2xzKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1l
bnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQp
CisgICAgLCBtX3N5bWJvbHMoc3ltYm9scykKKyAgICAsIG1fc2VsZWN0ZWRJbmRleCgtMSkKK3sK
KyAgICBBU1NFUlQoIXN5bWJvbHMuaXNFbXB0eSgpKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50PiBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRs
ZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCB1bml0SW5NaWxsaXNl
Y29uZCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN5bWJvbHMpCit7CisgICAgUmVmUHRyPERhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1
ZG9JZCwgdW5pdEluTWlsbGlzZWNvbmQsIHN5bWJvbHMpKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6
ZSgpOworICAgIHJldHVybiBmaWVsZDsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZl
bnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eXByZXNzRXZlbnQpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHN0
YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCk7CisgICAgICAgIGNvbnN0IGludCByYXdD
aGFyQ29kZSA9IGtleWJvYXJkRXZlbnQtPmNoYXJDb2RlKCk7CisgICAgICAgIGNvbnN0IGludCBj
aGFyQ29kZSA9IHJhd0NoYXJDb2RlID49ICdhJyAmJiByYXdDaGFyQ29kZSA8PSAneicgPyByYXdD
aGFyQ29kZSArICdBJyAtICdhJyA6IHJhd0NoYXJDb2RlOworICAgICAgICBpZiAoY2hhckNvZGUg
Pj0gJ0EnICYmIGNoYXJDb2RlIDw9ICdaJykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgbV9zeW1ib2xzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAg
ICAgICAgIGlmIChtX3N5bWJvbHNbaW5kZXhdWzBdID09IGNoYXJDb2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgICAg
ICBzZXRWYWx1ZUFzSW50ZWdlcihpbmRleCwgRGlzcGF0Y2hFdmVudCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6aGFzVmFs
dWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW5kZXggPj0gMDsKK30KKwordm9p
ZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhh
dmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IEludmFsaWRJbmRl
eDsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9CisKK3ZvaWQgRGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IG5ld1NlbGVj
dGVkSW5kZXgsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3NlbGVjdGVk
SW5kZXggPSBzdGQ6Om1heCgwLCBzdGQ6Om1pbihuZXdTZWxlY3RlZEluZGV4LCBzdGF0aWNfY2Fz
dDxpbnQ+KG1fc3ltYm9scy5zaXplKCkgLSAxKSkpOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShl
dmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojpz
dGVwRG93bigpCit7CisgICAgY29uc3QgaW50IHNpemUgPSBtX3N5bWJvbHMuc2l6ZSgpOworICAg
IG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9zZWxlY3RlZEluZGV4ICsgc2l6ZSAt
IDEpICUgc2l6ZSA6IHNpemUgLSAxOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShEaXNwYXRjaEV2
ZW50KTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwVXAoKQor
eworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9zZWxlY3RlZEluZGV4ICsg
MSkgJSBtX3N5bWJvbHMuc2l6ZSgpIDogMDsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0
Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2YWx1
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5bWJvbHNbbV9zZWxlY3Rl
ZEluZGV4XSA6IGVtcHR5U3RyaW5nKCk7Cit9CisKK2ludCBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJ
bmRleDsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZpc2libGVW
YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5bWJvbHNbbV9zZWxl
Y3RlZEluZGV4XSA6ICItLSI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGlj
RmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzEwMDYxZWFhZjljY2ViYzkxNjdiY2M2NjVl
ZGZiNmUyNzc0NWU3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50X2gKKyNk
ZWZpbmUgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudF9oCisKKyNpZiBFTkFCTEUoSU5QVVRf
VFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudCBpcyB1c2VkIGZvciBwZXJpb2QgZmllbGQgb2YgZGF0YSB0aW1lIGZvcm1hdC4KK2Ns
YXNzIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25z
dCBBdG9taWNTdHJpbmcmLCBpbnQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGNvbnN0IGludCBJbnZhbGlkSW5kZXggPSAtMTsKKworICAgIERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIGludCwgY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKworICAgIC8vIERh
dGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBoYXNW
YWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhh
dmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lk
IHNldFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvcikgT1ZFUlJJREUgRklOQUw7Cisg
ICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2
b2lkIHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBj
b25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBj
b25zdCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1fc3ltYm9s
czsKKyAgICBpbnQgbV9zZWxlY3RlZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156309</attachid>
            <date>2012-08-03 03:39:42 -0700</date>
            <delta_ts>2012-08-08 01:40:29 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-92960-20120803193921.patch</filename>
            <type>text/plain</type>
            <size>65148</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NTllZTJiMTgyY2Nh
ZWY0ZDVmNjQ1YTA5NjM1ZDM0ZDYyMWNkOS4uZDA0NjE4ZWU5ODM2MjhiMmU3YTJkNTRmZjY0YzY0
OTQ5MDRiMDEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMyBAQAorMjAxMi0wOC0wMiAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lRWRpdEVsZW1lbnQgLSBjb250YWluZXIgb2Yg
bXVsdGlwbGUgRGF0ZVRpbWVGaWVsZEVsZW1lbnQKKyAgICAgICAgICAgIC0gRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQgLSBiYXNlIGNsYXNzIG9mIGZpZWxkIFVJCisgICAgICAgICAgICAtIERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudCAtIGZpZWxkIFVJIGZvciBudW1lcmljIHZhbHVlLCB1c2VkCisg
ICAgICAgICAgICAgICAgZm9yIG1pbnV0ZSwgc2Vjb25kLCBhbmQgbWlsbGlzZWNvbmQKKyAgICAg
ICAgICAgIC0gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIGhvdXIKKyAg
ICAgICAgICAgIC0gRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCAtIGZpZWxkIFVJIGZvciBz
eW1ib2xjIHZhbHVlLCB1c2VkCisgICAgICAgICAgICAgICAgZm9yIEFNL1BNLgorICAgICAgICBp
bnNpZGUgb2YgRU5BQkxFX0lOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMgYnVpbGQgZmxh
Zy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYmVo
YXZpb3IuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IENoYW5nZWQgdG8gaW5jbHVkZSBodG1s
L3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0
ZVRpbWVFZGRpdEVsZW1lbnQuaCwgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3Bw
LAorICAgICAgICBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oLCBodG1sL3NoYWRv
dy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuY3BwLAorICAgICAgICBodG1sL3NoYWRvdy9EYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQuaCwgaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwLAorICAg
ICAgICBhbmQgaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oLgorICAg
ICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERhdGVUaW1lRWRpdExheW91dGVyKTogTGF5b3V0IERhdGVUaW1lRmllbGRFbGVtZW50IGJh
c2VkIG9uIERhdGVUaW1lRm9ybWF0IHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdExheW91dGVyOjpEYXRlVGltZUVkaXRMYXlvdXRlcik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRMYXlvdXRlcjo6bmVlZFNlY29uZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdERldGFpbDo6RGF0ZVRpbWVGb3Jt
YXREZXRhaWwpOgorICAgICAgICAoRGF0ZVRpbWVGb3JtYXREZXRhaWwpOgorICAgICAgICAoRGF0
ZVRpbWVGb3JtYXRBbmFseXplcik6IENoZWNrZXMgRGF0ZVRpbWVGb3JtYXQgc3RyaW5nIGhhcyBz
ZWNvbmQgZmllbGQgYW5kIG1pbGxpc2Vjb25kIGZpZWxkCisgICAgICAgIGZvciBhZGRpbmcgdGhl
bSBpZiBvd25lciBvZiBEYXRlVGltZUVkaXRFbGVtZW50IHdhbnRzIHRvIGhhdmUgdGhlbSBidXQg
RGF0ZVRpbWVGb3JtYXQgc3RyaW5nIGRvZXNuJ3QgaGF2ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdEFuYWx5emVyOjphbmFseXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjpEYXRlVGltZUZvcm1hdEFuYWx5
emVyOjp2aXNpdEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVy
OjpEYXRlVGltZUZvcm1hdEFuYWx5emVyOjp2aXNpdExpdGVyYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OmFkZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdExheW91dGVyOjpuZWVkTWlsbGlzZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRMYXlvdXRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdExheW91dGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRMYXlvdXRlcjo6dmlzaXRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRMYXlvdXRlcjo6dmlzaXRMaXRlcmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTog
Q2FsbGVkIHdoZW4gb3duZXIncyBkaXNhYmxlZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkVmFsdWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6bW92ZVRvTmV4dEZpZWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6Om5leHRGaWVsZEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnByZXZpb3VzRmllbGRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCk6ICBD
YWxsZWQgd2hlbiBvd25lcidzIGRpc2FibGVkIHN0YXRlIGlzIGNoYW5nZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRGb2N1c0ZpZWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcERvd24pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBVcCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojp1cGRhdGVVSVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnZhbHVlQXNEb3VibGUpOgorICAgICAgICAq
IGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChEYXRl
VGltZUVkaXRFbGVtZW50KToKKyAgICAgICAgKEVkaXRDb250cm9sT3duZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+Rmll
bGRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OkRhdGVUaW1lRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RmllbGRFbGVtZW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmll
bGRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxl
bWVudDo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6OnNldFJlYWRXcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6dXBkYXRlVmlzaWJsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRF
bGVtZW50Ojp2YWx1ZUFzRG91YmxlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZp
ZWxkRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lRmllbGRFbGVtZW50KToKKyAg
ICAgICAgKEZpZWxkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmll
bGRFbGVtZW50OjpyZW1vdmVFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9EYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50
ZWdlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Lmg6
IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmRpc3BsYXlTaXplT2ZOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6UmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6ZW5zdXJlSW5SYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjptYXBFdmVudFRvRGlnaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dDo6aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50Ojppc0NvbnRpbnVvc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUp
OgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmVu
c3VyZUluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50OjpyYW5nZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpoYXNWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRW
YWx1ZUFzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4KKyAgICAg
ICAgKERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQpOgorCiAyMDEyLTA4LTAzICBFdWdlbmUg
S2x5dWNobmlrb3YgIDxldXN0YXMuYmlnQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBQcm9maWxlczogZXh0cmFjdCBzYXZlIHRvIGZpbGUgLyBsb2FkIGZyb20gY29kZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IGQwYThlMGM5NWNhOTdmMTBlZTAyYzZiOWYwOTNkNDM4YWVmYjA0NzYu
LmI2M2QzYzNjZjkxYjEyZWY0NzU1NzczNWFlMzUzNjUxZDgxYTAyOWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTU3NDMsNiArNTc0MywxNiBAQAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRl
bnREaXN0cmlidXRvci5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1
ZXJ5LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3Bw
JywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmgnLAorICAg
ICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAg
ICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCcsCisgICAgICAgICAgICAn
aHRtbC9zaGFkb3cvRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAn
aHRtbC9zaGFkb3cvRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50LmgnLAorICAgICAgICAgICAgJ2h0
bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAnLAorICAgICAgICAgICAg
J2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAg
ICdodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAg
ICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oJywKICAgICAg
ICAgICAgICdodG1sL3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmgnLAogICAgICAgICAgICAgJ2h0
bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NDRmYjJj
YTcwOWZhZjVlNGVjZTVmZWIyZDgxOWU4MDhhOWIwZTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKQEAgLTAsMCAr
MSw1NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1ZGUgIkRhdGVU
aW1lRWRpdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVk
ZSAiRGF0ZVRpbWVGb3JtYXQuaCIKKyNpbmNsdWRlICJEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAi
RXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZERhdGUuaCIKKyNpbmNsdWRlICJMb2NhbGl6
ZWROdW1iZXIuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU3RlcFJhbmdl
LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwor
CitzdGF0aWMgY29uc3QgaW50IGhvdXJJbk1pbGxpc2Vjb25kID0gMzYwMCAqIDEwMDA7CitzdGF0
aWMgY29uc3QgaW50IG1pbnV0ZUluTWlsbGlzZWNvbmQgPSA2MCAqIDEwMDA7CitzdGF0aWMgY29u
c3QgaW50IHNlY29uZEluTWlsbGlzZWNvbmQgPSAxMDAwOworCitjbGFzcyBEYXRlVGltZUVkaXRM
YXlvdXRlciA6IHByaXZhdGUgRGF0ZVRpbWVGb3JtYXQ6OlRva2VuSGFuZGxlciB7CitwdWJsaWM6
CisgICAgRGF0ZVRpbWVFZGl0TGF5b3V0ZXIoRGF0ZVRpbWVFZGl0RWxlbWVudCogZWxlbW50LCBj
b25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKKyAgICAgICAgOiBtX2VkaXRFbGVtZW50KGVsZW1u
dCkKKyAgICAgICAgLCBtX3N0ZXBSYW5nZShzdGVwUmFuZ2UpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgYnVpbGQoY29uc3QgU3RyaW5nJik7CisKKyAgICBib29sIG5lZWRTZWNvbmRGaWVsZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1h
aW5kZXIobWludXRlSW5NaWxsaXNlY29uZCkuaXNaZXJvKCkKKyAgICAgICAgICAgIHx8ICFtX3N0
ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVyKG1pbnV0ZUluTWlsbGlzZWNvbmQpLmlzWmVybygpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRGF0ZVRpbWVGb3JtYXREZXRhaWwgeworICAg
ICAgICBEYXRlVGltZUZvcm1hdERldGFpbCgpCisgICAgICAgICAgICA6IGhhc01pbGxpc2Vjb25k
RmllbGQoZmFsc2UpCisgICAgICAgICAgICAsIGhhc1NlY29uZEZpZWxkKGZhbHNlKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGhhc01pbGxpc2Vjb25kRmllbGQ7CisgICAg
ICAgIGJvb2wgaGFzU2Vjb25kRmllbGQ7CisgICAgfTsKKworICAgIGNsYXNzIERhdGVUaW1lRm9y
bWF0QW5hbHl6ZXIgOiBwcml2YXRlIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVUaW1lRm9ybWF0RGV0YWlsIGFuYWx5emUoY29u
c3QgU3RyaW5nJiBmb3JtYXRTdHJpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIERhdGVUaW1l
Rm9ybWF0QW5hbHl6ZXIgYW5hbHl6ZXI7CisgICAgICAgICAgICBEYXRlVGltZUZvcm1hdDo6cGFy
c2UoZm9ybWF0U3RyaW5nLCBhbmFseXplcik7CisgICAgICAgICAgICByZXR1cm4gYW5hbHl6ZXIu
bV9mb3JtYXREZXRhaWw7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIC8vIERh
dGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgICAgICB2b2lkIHZpc2l0
RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
RnJhY3Rpb25hbFNlY29uZCkgeworICAgICAgICAgICAgICAgIG1fZm9ybWF0RGV0YWlsLmhhc01p
bGxpc2Vjb25kRmllbGQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlU2Vjb25kKSB7CisgICAgICAgICAgICAgICAgbV9mb3JtYXREZXRhaWwuaGFzU2Vjb25k
RmllbGQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0cmluZyYpIHsgfQor
CisgICAgICAgIERhdGVUaW1lRm9ybWF0RGV0YWlsIG1fZm9ybWF0RGV0YWlsOworICAgIH07CisK
KyAgICB2b2lkIGFkZEZpZWxkKERhdGVUaW1lRmllbGRFbGVtZW50KiBmaWVsZCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZWRpdEVsZW1lbnQtPm1fbnVt
YmVyT2ZGaWVsZHMpID49IFdURl9BUlJBWV9MRU5HVEgobV9lZGl0RWxlbWVudC0+bV9maWVsZHMp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2VkaXRFbGVtZW50LT5hcHBlbmRDaGls
ZChmaWVsZCk7CisgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1fZmllbGRzW21fZWRpdEVsZW1lbnQt
Pm1fbnVtYmVyT2ZGaWVsZHNdID0gZmllbGQ7CisgICAgICAgICsrbV9lZGl0RWxlbWVudC0+bV9u
dW1iZXJPZkZpZWxkczsKKyAgICB9CisKKyAgICBib29sIG5lZWRNaWxsaXNlY29uZEZpZWxkKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFp
bmRlcihzZWNvbmRJbk1pbGxpc2Vjb25kKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3Rl
cFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc2Vjb25kSW5NaWxsaXNlY29uZCkuaXNaZXJvKCk7Cisg
ICAgfQorCisgICAgYm9vbCBuZWVkTWludXRlRmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKGhvdXJJbk1pbGxpc2Vjb25k
KS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIo
aG91ckluTWlsbGlzZWNvbmQpLmlzWmVybygpOworICAgIH0KKworICAgIC8vIERhdGVUaW1lRm9y
bWF0OjpUb2tlbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZvaWQgdmlzaXRGaWVsZChEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlLCBpbnQpOworICAgIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0
cmluZyYpOworCisgICAgRGF0ZVRpbWVGb3JtYXREZXRhaWwgbV9mb3JtYXREZXRhaWw7CisgICAg
RGF0ZVRpbWVFZGl0RWxlbWVudCogbV9lZGl0RWxlbWVudDsKKyAgICBjb25zdCBTdGVwUmFuZ2Um
IG1fc3RlcFJhbmdlOworfTsKKworYm9vbCBEYXRlVGltZUVkaXRMYXlvdXRlcjo6YnVpbGQoY29u
c3QgU3RyaW5nJiBmb3JtYXRTdHJpbmcpCit7CisgICAgbV9mb3JtYXREZXRhaWwgPSBEYXRlVGlt
ZUZvcm1hdEFuYWx5emVyOjphbmFseXplKGZvcm1hdFN0cmluZyk7CisgICAgbV9lZGl0RWxlbWVu
dC0+cmVzZXRMYXlvdXQoKTsKKyAgICByZXR1cm4gRGF0ZVRpbWVGb3JtYXQ6OnBhcnNlKGZvcm1h
dFN0cmluZywgKnRoaXMpOworfQorCit2b2lkIERhdGVUaW1lRWRpdExheW91dGVyOjp2aXNpdEZp
ZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGhvdXJQc3VlZG9JZCwgKCItd2Via2l0LWRh
dGV0aW1lLWVkaXQtaG91ci1maWVsZCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21p
Y1N0cmluZywgbWlsbGlzZWNvbmRQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWls
bGlzZWNvbmQtZmllbGQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IG1pbnV0ZVBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGQiKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGFtcG1Qc3VlZG9JZCwgKCIt
d2Via2l0LWRhdGV0aW1lLWVkaXQtYW1wbS1maWVsZCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgc2Vjb25kUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0
LXNlY29uZC1maWVsZCIpKTsKKworICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7CisgICAgY2FzZSBE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExOgorICAgICAgICBBU1NFUlQoIW1fZWRpdEVs
ZW1lbnQtPm1faG91cjExRmllbGQpOworICAgICAgICBtX2VkaXRFbGVtZW50LT5tX2hvdXIxMUZp
ZWxkID0gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUobV9lZGl0RWxlbWVudC0+ZG9j
dW1lbnQoKSwgKm1fZWRpdEVsZW1lbnQsIGhvdXJQc3VlZG9JZCwgMCwgMTEpLmxlYWtSZWYoKTsK
KyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxlbWVudC0+bV9ob3VyMTFGaWVsZCk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMjoKKyAg
ICAgICAgQVNTRVJUKCFtX2VkaXRFbGVtZW50LT5tX2hvdXIxMkZpZWxkKTsKKyAgICAgICAgbV9l
ZGl0RWxlbWVudC0+bV9ob3VyMTJGaWVsZCA9IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3Jl
YXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50LCBob3VyUHN1ZWRv
SWQsIDEsIDEyKS5sZWFrUmVmKCk7CisgICAgICAgIGFkZEZpZWxkKG1fZWRpdEVsZW1lbnQtPm1f
aG91cjEyRmllbGQpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgICAgIEFTU0VSVCghbV9lZGl0RWxlbWVudC0+bV9ob3Vy
MjNGaWVsZCk7CisgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1faG91cjIzRmllbGQgPSBEYXRlVGlt
ZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9l
ZGl0RWxlbWVudCwgaG91clBzdWVkb0lkLCAwLCAyMykubGVha1JlZigpOworICAgICAgICBhZGRG
aWVsZChtX2VkaXRFbGVtZW50LT5tX2hvdXIyM0ZpZWxkKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0OgorICAgICAgICBBU1NFUlQo
IW1fZWRpdEVsZW1lbnQtPm1faG91cjI0RmllbGQpOworICAgICAgICBtX2VkaXRFbGVtZW50LT5t
X2hvdXIyNEZpZWxkID0gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUobV9lZGl0RWxl
bWVudC0+ZG9jdW1lbnQoKSwgKm1fZWRpdEVsZW1lbnQsIGhvdXJQc3VlZG9JZCwgMSwgMjQpLmxl
YWtSZWYoKTsKKyAgICAgICAgYWRkRmllbGQobV9lZGl0RWxlbWVudC0+bV9ob3VyMjRGaWVsZCk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1p
bnV0ZToKKyAgICAgICAgQVNTRVJUKCFtX2VkaXRFbGVtZW50LT5tX21pbnV0ZUZpZWxkKTsKKyAg
ICAgICAgbV9lZGl0RWxlbWVudC0+bV9taW51dGVGaWVsZCA9IERhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2VkaXRFbGVtZW50
LCBtaW51dGVQc3VlZG9JZCwgbWludXRlSW5NaWxsaXNlY29uZCwgMCwgNTkpLmxlYWtSZWYoKTsK
KyAgICAgICAgaWYgKG5lZWRNaW51dGVGaWVsZCgpKQorICAgICAgICAgICAgbV9lZGl0RWxlbWVu
dC0+bV9taW51dGVGaWVsZC0+c2V0UmVhZFdyaXRlKCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgbV9lZGl0RWxlbWVudC0+bV9taW51dGVGaWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAgICAg
ICAgICAgIGlmICghbV9lZGl0RWxlbWVudC0+bV9taW51dGVGaWVsZC0+aGFzVmFsdWUoKSkKKyAg
ICAgICAgICAgICAgICBtX2VkaXRFbGVtZW50LT5tX21pbnV0ZUZpZWxkLT5zZXRWYWx1ZUFzSW50
ZWdlcigwLCBEYXRlVGltZUZpZWxkRWxlbWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAg
fQorICAgICAgICBhZGRGaWVsZChtX2VkaXRFbGVtZW50LT5tX21pbnV0ZUZpZWxkKTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVyaW9kOgor
ICAgICAgICBBU1NFUlQoIW1fZWRpdEVsZW1lbnQtPm1fQU1QTUZpZWxkKTsKKyAgICAgICAgbV9l
ZGl0RWxlbWVudC0+bV9BTVBNRmllbGQgPSBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojpj
cmVhdGUobV9lZGl0RWxlbWVudC0+ZG9jdW1lbnQoKSwgKm1fZWRpdEVsZW1lbnQsIGFtcG1Qc3Vl
ZG9JZCwgaG91ckluTWlsbGlzZWNvbmQgKiAxMiwgdGltZUFNUE1MYWJlbHMoKSkubGVha1JlZigp
OworICAgICAgICBhZGRGaWVsZChtX2VkaXRFbGVtZW50LT5tX0FNUE1GaWVsZCk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDoKKyAg
ICAgICAgaWYgKG5lZWRTZWNvbmRGaWVsZCgpIHx8IG1fZm9ybWF0RGV0YWlsLmhhc1NlY29uZEZp
ZWxkKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fZWRpdEVsZW1lbnQtPm1fc2Vjb25kRmllbGQp
OworICAgICAgICAgICAgbV9lZGl0RWxlbWVudC0+bV9zZWNvbmRGaWVsZCA9IERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKG1fZWRpdEVsZW1lbnQtPmRvY3VtZW50KCksICptX2Vk
aXRFbGVtZW50LCBzZWNvbmRQc3VlZG9JZCwgc2Vjb25kSW5NaWxsaXNlY29uZCwgMCwgNTkpLmxl
YWtSZWYoKTsKKyAgICAgICAgICAgIGlmIChuZWVkU2Vjb25kRmllbGQoKSkKKyAgICAgICAgICAg
ICAgICBtX2VkaXRFbGVtZW50LT5tX3NlY29uZEZpZWxkLT5zZXRSZWFkV3JpdGUoKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQtPm1fc2Vjb25kRmll
bGQtPnNldFJlYWRPbmx5KCk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2VkaXRFbGVtZW50LT5t
X3NlY29uZEZpZWxkLT5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2VkaXRFbGVt
ZW50LT5tX3NlY29uZEZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcigwLCBEYXRlVGltZUZpZWxkRWxl
bWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFkZEZp
ZWxkKG1fZWRpdEVsZW1lbnQtPm1fc2Vjb25kRmllbGQpOworCisgICAgICAgICAgICBpZiAobmVl
ZE1pbGxpc2Vjb25kRmllbGQoKSAmJiAhbV9mb3JtYXREZXRhaWwuaGFzTWlsbGlzZWNvbmRGaWVs
ZCkgeworICAgICAgICAgICAgICAgIHZpc2l0TGl0ZXJhbChsb2NhbGl6ZWREZWNpbWFsU2VwYXJh
dG9yKCkpOworICAgICAgICAgICAgICAgIHZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUZyYWN0aW9uYWxTZWNvbmQsIDMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9u
YWxTZWNvbmQ6CisgICAgICAgIGlmIChuZWVkTWlsbGlzZWNvbmRGaWVsZCgpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoIW1fZWRpdEVsZW1lbnQtPm1fbWlsbGlzZWNvbmRGaWVsZCk7CisgICAgICAg
ICAgICBtX2VkaXRFbGVtZW50LT5tX21pbGxpc2Vjb25kRmllbGQgPSBEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LT5kb2N1bWVudCgpLCAqbV9lZGl0RWxl
bWVudCwgbWlsbGlzZWNvbmRQc3VlZG9JZCwgMSwgMCwgOTk5KS5sZWFrUmVmKCk7CisgICAgICAg
ICAgICBhZGRGaWVsZChtX2VkaXRFbGVtZW50LT5tX21pbGxpc2Vjb25kRmllbGQpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI6OnZpc2l0TGl0ZXJhbChjb25zdCBT
dHJpbmcmIHRleHQpCit7CisgICAgQVNTRVJUKHRleHQubGVuZ3RoKCkpOworICAgIG1fZWRpdEVs
ZW1lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LT5kb2N1bWVudCgp
LCB0ZXh0KSk7Cit9CisKK0RhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5F
ZGl0Q29udHJvbE93bmVyKCkKK3sKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRpbWVF
ZGl0RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRDb250
cm9sT3duZXIpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwg
bV9lZGl0Q29udHJvbE93bmVyKCZlZGl0Q29udHJvbE93bmVyKQorICAgICwgbV9BTVBNRmllbGQo
MCkKKyAgICAsIG1faG91cjExRmllbGQoMCkKKyAgICAsIG1faG91cjEyRmllbGQoMCkKKyAgICAs
IG1faG91cjI0RmllbGQoMCkKKyAgICAsIG1faG91cjIzRmllbGQoMCkKKyAgICAsIG1fbWlsbGlz
ZWNvbmRGaWVsZCgwKQorICAgICwgbV9taW51dGVGaWVsZCgwKQorICAgICwgbV9zZWNvbmRGaWVs
ZCgwKQorICAgICwgbV9mb2N1c0ZpZWxkSW5kZXgoSW52YWxpZEZpZWxkSW5kZXgpCisgICAgLCBt
X251bWJlck9mRmllbGRzKDApCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIGRhdGVUaW1lRWRpdFBzZXVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdCIpKTsKKyAg
ICBzZXRTaGFkb3dQc2V1ZG9JZChkYXRlVGltZUVkaXRQc2V1ZG9JZCk7CisKKyAgICBtX3NwaW5C
dXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqdGhpcykubGVha1Jl
ZigpOworfQorCitEYXRlVGltZUVkaXRFbGVtZW50Ojp+RGF0ZVRpbWVFZGl0RWxlbWVudCgpCit7
CisgICAgaWYgKG1faG91cjExRmllbGQpCisgICAgICAgIG1faG91cjExRmllbGQtPnJlbW92ZUV2
ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1faG91cjEyRmllbGQpCisgICAgICAgIG1faG91cjEy
RmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1faG91cjIzRmllbGQpCisg
ICAgICAgIG1faG91cjIzRmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1f
aG91cjI0RmllbGQpCisgICAgICAgIG1faG91cjI0RmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigp
OworCisgICAgaWYgKG1fbWlsbGlzZWNvbmRGaWVsZCkKKyAgICAgICAgbV9taWxsaXNlY29uZEZp
ZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX21pbnV0ZUZpZWxkKQorICAg
ICAgICBtX21pbnV0ZUZpZWxkLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX0FN
UE1GaWVsZCkKKyAgICAgICAgbV9BTVBNRmllbGQtPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisg
ICAgaWYgKG1fc2Vjb25kRmllbGQpCisgICAgICAgIG1fc2Vjb25kRmllbGQtPnJlbW92ZUV2ZW50
SGFuZGxlcigpOworCisgICAgbV9zcGluQnV0dG9uLT5yZW1vdmVTdGVwQWN0aW9uSGFuZGxlcigp
OworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IERhdGVUaW1lRWRpdEVsZW1l
bnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRDb250
cm9sT3duZXIsIGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQoreworICAgIFJlZlB0cjxEYXRl
VGltZUVkaXRFbGVtZW50PiBjb250YWluZXIgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVFZGl0RWxl
bWVudChkb2N1bWVudCwgZWRpdENvbnRyb2xPd25lcikpOworICAgIGNvbnRhaW5lci0+c2V0TGF5
b3V0KHN0ZXBSYW5nZSk7CisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKworYm9vbCBEYXRlVGlt
ZUVkaXRFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWRpdENvbnRy
b2xPd25lciAmJiBtX2VkaXRDb250cm9sT3duZXItPmlzRWRpdENvbnRyb2xPd25lckRpc2FibGVk
KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQo
KQoreworICAgIHVwZGF0ZVVJU3RhdGUoKTsKK30KKworRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIERh
dGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkQXQoaW50IGluZGV4KSBjb25zdAoreworICAgIHJldHVy
biBpbmRleCA+PSAwICYmIGluZGV4IDwgbV9udW1iZXJPZkZpZWxkcyA/IG1fZmllbGRzW2luZGV4
XSA6IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50KQoreworICAgIGlmIChrZXlib2FyZEV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBmaWVsZEF0KG1fZm9jdXNG
aWVsZEluZGV4KSAmJiAhZGlzYWJsZWQoKSAmICFyZWFkT25seSgpKSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyYga2V5SWRlbnRpZmllciA9IGtleWJvYXJkRXZlbnQtPmtleUlkZW50aWZpZXIoKTsK
KworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiTGVmdCIpIHsKKyAgICAgICAgICAgIGtl
eWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBjb25zdCBpbnQg
ZmllbGRJbmRleCA9IHByZXZpb3VzRmllbGRJbmRleCgpOworICAgICAgICAgICAgaWYgKGZpZWxk
QXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICAgICAgc2V0Rm9jdXNGaWVsZChmaWVsZEluZGV4
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlJZGVu
dGlmaWVyID09ICJSaWdodCIpIHsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBjb25zdCBpbnQgZmllbGRJbmRleCA9IG5leHRGaWVs
ZEluZGV4KCk7CisgICAgICAgICAgICBpZiAoZmllbGRBdChmaWVsZEluZGV4KSkKKyAgICAgICAg
ICAgICAgICBzZXRGb2N1c0ZpZWxkKGZpZWxkSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOSIpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBmaWVsZEluZGV4ID0ga2V5Ym9hcmRFdmVudC0+Z2V0TW9kaWZp
ZXJTdGF0ZSgiU2hpZnQiKSA/IHByZXZpb3VzRmllbGRJbmRleCgpIDogbmV4dEZpZWxkSW5kZXgo
KTsKKyAgICAgICAgICAgIGlmIChmaWVsZEF0KGZpZWxkSW5kZXgpKSB7CisgICAgICAgICAgICAg
ICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAgICBz
ZXRGb2N1c0ZpZWxkKGZpZWxkSW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
OjpmaWVsZFZhbHVlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fZWRpdENvbnRyb2xPd25lcikKKyAg
ICAgICAgbV9lZGl0Q29udHJvbE93bmVyLT5lZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpOworfQor
Cit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCog
bW91c2VFdmVudCkKK3sKKyAgICBpZiAobW91c2VFdmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uICYm
ICFkaXNhYmxlZCgpICYmICFyZWFkT25seSgpKSB7CisgICAgICAgIE5vZGUqIGNvbnN0IHJlbGF0
ZWRUYXJnZXQgPSBtb3VzZUV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7CisgICAgICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBtX251bWJlck9mRmllbGRzOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBpZiAobV9maWVsZHNbaW5kZXhdID09IHJlbGF0ZWRUYXJnZXQpIHsKKyAgICAgICAg
ICAgICAgICBtb3VzZUV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAg
IHNldEZvY3VzRmllbGQoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChtX2VkaXRDb250cm9s
T3duZXIpCisgICAgICAgICAgICAgICAgICAgIG1fZWRpdENvbnRyb2xPd25lci0+ZWRpdENvbnRy
b2xNb3VzZUZvY3VzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6bW92ZVRvTmV4
dEZpZWxkKCkKK3sKKyAgICBpZiAobV9mb2N1c0ZpZWxkSW5kZXggIT0gSW52YWxpZEZpZWxkSW5k
ZXgpCisgICAgICAgIHNldEZvY3VzRmllbGQobmV4dEZpZWxkSW5kZXgoKSk7Cit9CisKK2ludCBE
YXRlVGltZUVkaXRFbGVtZW50OjpuZXh0RmllbGRJbmRleCgpIGNvbnN0Cit7CisgICAgZm9yIChp
bnQgaW5kZXggPSBtX2ZvY3VzRmllbGRJbmRleCArIDE7IGluZGV4IDwgbV9udW1iZXJPZkZpZWxk
czsgKytpbmRleCkgeworICAgICAgICBpZiAoIW1fZmllbGRzW2luZGV4XS0+cmVhZE9ubHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgcmV0dXJuIG1fbnVtYmVyT2ZG
aWVsZHM7Cit9CisKK2ludCBEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0ZpZWxkSW5kZXgo
KSBjb25zdAoreworICAgIGZvciAoaW50IGluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXggLSAxOyBp
bmRleCA+PSAwOyAtLWluZGV4KSB7CisgICAgICAgIGlmICghbV9maWVsZHNbaW5kZXhdLT5yZWFk
T25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4gLTE7
Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVhZE9ubHkoKSBjb25zdAoreworICAg
IHJldHVybiBtX2VkaXRDb250cm9sT3duZXIgJiYgbV9lZGl0Q29udHJvbE93bmVyLT5pc0VkaXRD
b250cm9sT3duZXJSZWFkT25seSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJl
YWRPbmx5U3RhdGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK3ZvaWQg
RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVzZXRMYXlvdXQoKQoreworICAgIHdoaWxlIChOb2RlKiBu
b2RlID0gZmlyc3RDaGlsZCgpKQorICAgICAgICByZW1vdmVDaGlsZChub2RlKTsKKyAgICBtX0FN
UE1GaWVsZCA9IDA7CisgICAgbV9ob3VyMTFGaWVsZCA9IDA7CisgICAgbV9ob3VyMTJGaWVsZCA9
IDA7CisgICAgbV9ob3VyMjRGaWVsZCA9IDA7CisgICAgbV9ob3VyMjNGaWVsZCA9IDA7CisgICAg
bV9taWxsaXNlY29uZEZpZWxkID0gMDsKKyAgICBtX21pbnV0ZUZpZWxkID0gMDsKKyAgICBtX3Nl
Y29uZEZpZWxkID0gMDsKKyAgICBtX251bWJlck9mRmllbGRzID0gMDsKK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjpzZXRGb2N1c0ZpZWxkKGludCBuZXdGb2N1c0ZpZWxkSW5kZXgpCit7
CisgICAgaWYgKG1fZm9jdXNGaWVsZEluZGV4ID09IG5ld0ZvY3VzRmllbGRJbmRleCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IG5ld0ZvY3VzRmll
bGQgPSBmaWVsZEF0KG5ld0ZvY3VzRmllbGRJbmRleCk7CisgICAgaWYgKG5ld0ZvY3VzRmllbGQg
JiYgbmV3Rm9jdXNGaWVsZC0+cmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0
ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGN1cnJlbnRGb2N1c0ZpZWxkID0gZmllbGRBdChtX2Zv
Y3VzRmllbGRJbmRleCk7CisKKyAgICBpZiAoY3VycmVudEZvY3VzRmllbGQpCisgICAgICAgIGN1
cnJlbnRGb2N1c0ZpZWxkLT5zZXRGb2N1cyhmYWxzZSk7CisKKyAgICBpZiAoIW5ld0ZvY3VzRmll
bGQpIHsKKyAgICAgICAgbV9mb2N1c0ZpZWxkSW5kZXggPSBJbnZhbGlkRmllbGRJbmRleDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gbmV3Rm9jdXNG
aWVsZEluZGV4OworICAgIG5ld0ZvY3VzRmllbGQtPnNldEZvY3VzKHRydWUpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldExheW91dChjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5n
ZSkKK3sKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxk
QXQobV9mb2N1c0ZpZWxkSW5kZXgpOworICAgIHNldEZvY3VzRmllbGQoSW52YWxpZEZpZWxkSW5k
ZXgpOworCisgICAgRGF0ZVRpbWVFZGl0TGF5b3V0ZXIgYnVpbGRlcih0aGlzLCBzdGVwUmFuZ2Up
OworICAgIGNvbnN0IFN0cmluZyBkYXRlVGltZUZvcm1hdCA9IGJ1aWxkZXIubmVlZFNlY29uZEZp
ZWxkKCkgPyBsb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpIDogbG9jYWxpemVkU2hvcnRUaW1lRm9y
bWF0VGV4dCgpOworICAgIGlmICghYnVpbGRlci5idWlsZChkYXRlVGltZUZvcm1hdCkgfHwgIW1f
bnVtYmVyT2ZGaWVsZHMpCisgICAgICAgIGJ1aWxkZXIuYnVpbGQoYnVpbGRlci5uZWVkU2Vjb25k
RmllbGQoKSA/ICJISDptbTpzcyIgOiAiSEg6bW0iKTsKKworICAgIGFwcGVuZENoaWxkKG1fc3Bp
bkJ1dHRvbik7CisKKyAgICBpZiAoZm9jdXNGaWVsZCkgeworICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytpbmRleCkgeworICAgICAgICAgICAg
aWYgKGZvY3VzRmllbGQgPT0gZmllbGRBdChpbmRleCkpIHsKKyAgICAgICAgICAgICAgICBzZXRG
b2N1c0ZpZWxkKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuZm9jdXNFdmVudCkgeworICAgICAgICBpZiAoIWRpc2FibGVkKCkgJiYgIXJl
YWRPbmx5KCkgJiYgbV9mb2N1c0ZpZWxkSW5kZXggPT0gSW52YWxpZEZpZWxkSW5kZXgpCisgICAg
ICAgICAgICBzZXRGb2N1c0ZpZWxkKDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkgeworICAgICAgICBz
ZXRGb2N1c0ZpZWxkKEludmFsaWRGaWVsZEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaGFuZGxlTW91c2VF
dmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2
ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0
aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKworICAgIGlmIChldmVudC0+ZGVmYXVs
dEhhbmRsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQq
IGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAo
IWZvY3VzRmllbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvY3VzRmllbGQtPmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZh
bHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIGlmIChtX0FNUE1G
aWVsZCkKKyAgICAgICAgbV9BTVBNRmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigp
ID49IDEyID8gMSA6IDApOworCisgICAgaWYgKG1faG91cjExRmllbGQpCisgICAgICAgIG1faG91
cjExRmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigpKTsKKworICAgIGlmIChtX2hv
dXIxMkZpZWxkKQorICAgICAgICBtX2hvdXIxMkZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRl
LmhvdXIoKSk7CisKKyAgICBpZiAobV9ob3VyMjNGaWVsZCkKKyAgICAgICAgbV9ob3VyMjNGaWVs
ZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworCisgICAgaWYgKG1faG91cjI0Rmll
bGQpCisgICAgICAgIG1faG91cjI0RmllbGQtPnNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigp
KTsKKworICAgIGlmIChtX21pbGxpc2Vjb25kRmllbGQpCisgICAgICAgIG1fbWlsbGlzZWNvbmRG
aWVsZC0+c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5taWxsaXNlY29uZCgpKTsKKworICAgIGlmICht
X21pbnV0ZUZpZWxkKQorICAgICAgICBtX21pbnV0ZUZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihk
YXRlLm1pbnV0ZSgpKTsKKworICAgIGlmIChtX3NlY29uZEZpZWxkKQorICAgICAgICBtX3NlY29u
ZEZpZWxkLT5zZXRWYWx1ZUFzSW50ZWdlcihkYXRlLnNlY29uZCgpKTsKK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRW1wdHkoKQoreworICAgIGZvciAoaW50IGZpZWxk
SW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytmaWVsZEluZGV4KQor
ICAgICAgICBmaWVsZEF0KGZpZWxkSW5kZXgpLT5zZXRWYWx1ZUFzRW1wdHkoRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OkRpc3BhdGNoTm9FdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVu
dDo6c3BpbkJ1dHRvblN0ZXBEb3duKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQq
IGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAg
Zm9jdXNGaWVsZC0+c3RlcERvd24oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50Ojpz
cGluQnV0dG9uU3RlcFVwKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0
IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNG
aWVsZC0+c3RlcFVwKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6dXBkYXRlVUlT
dGF0ZSgpCit7CisgICAgaWYgKGRpc2FibGVkKCkgfHwgcmVhZE9ubHkoKSkgeworICAgICAgICBt
X3NwaW5CdXR0b24tPnJlbGVhc2VDYXB0dXJlKCk7CisKKyAgICAgIHNldEZvY3VzRmllbGQoSW52
YWxpZEZpZWxkSW5kZXgpOworICAgIH0KK30KKworZG91YmxlIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OnZhbHVlQXNEb3VibGUoKSBjb25zdAoreworICAgIGRvdWJsZSB2YWx1ZSA9IDA7CisKKyAgICBm
b3IgKGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fbnVtYmVyT2ZGaWVsZHM7ICsr
ZmllbGRJbmRleCkgeworICAgICAgICBjb25zdCBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3Qg
ZmllbGQgPSBmaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICBpZiAoIWZpZWxkLT5oYXNWYWx1
ZSgpKQorICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKTsKKyAgICAgICAgdmFsdWUgKz0gZmllbGQtPnZhbHVlQXNEb3VibGUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGU2Yjk4YjllOWZiMmE0YjNhZjFiM2RmOWFhZWNkNjIzYTNhNzQzMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRp
dEVsZW1lbnQuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RGF0ZVRpbWVFZGl0RWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lRWRpdEVsZW1lbnRfaAorCisj
aWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJE
YXRlVGltZUZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVDb21wb25lbnRzOworY2xh
c3MgRGF0ZVRpbWVFZGl0TGF5b3V0ZXI7CitjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91
c2VFdmVudDsKK2NsYXNzIFN0ZXBSYW5nZTsKKworLy8gRGF0ZVRpbWVFZGl0RWxlbWVudCBjbGFz
cyBjb250YWlucyBudW1iZXJpYyBmaWVsZCBhbmQgc3ltYm9sYyBmaWVsZCBmb3IKKy8vIHJlcHJl
c2VudGluZyBkYXRlIGFuZCB0aW1lLCBzdWNoIGFzCisvLyAgLSBZZWFyLCBNb250aCwgRGF5IE9m
IE1vbnRoCisvLyAgLSBIb3VyLCBNaW51dGUsIFNlY29uZCwgTWlsbGlzZWNvbmQsIEFNL1BNCitj
bGFzcyBEYXRlVGltZUVkaXRFbGVtZW50IDogcHVibGljIEhUTUxEaXZFbGVtZW50LCBwcml2YXRl
IERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciwgcHJpdmF0ZSBTcGluQnV0
dG9uRWxlbWVudDo6U3RlcEFjdGlvbkhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KERhdGVUaW1lRWRpdEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIERhdGVU
aW1lRWRpdExheW91dGVyOworCisgICAgLy8gRWRpdENvbnRyb2xPd25lciBpbXBsZW1lbnRlciBt
dXN0IGNhbGwgcmVtb3ZlRXZlbnRIYW5kbGVyIHdoZW4KKyAgICAvLyBpdCBkb2Vzbid0IGhhbmRs
ZSBldmVudCwgZS5nLiBhdCBkZXN0cnVjdGlvbi4KKyAgICBjbGFzcyBFZGl0Q29udHJvbE93bmVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkVkaXRDb250cm9sT3duZXIoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGVkaXRDb250cm9sTW91c2VGb2N1cygpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCkgPSAwOworICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNFZGl0Q29udHJvbE93bmVyRGlzYWJsZWQoKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0VkaXRDb250cm9sT3duZXJSZWFkT25seSgpIGNvbnN0ID0gMDsKKyAg
ICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY3JlYXRl
KERvY3VtZW50KiwgRWRpdENvbnRyb2xPd25lciYsIGNvbnN0IFN0ZXBSYW5nZSYpOworCisgICAg
dmlydHVhbCB+RGF0ZVRpbWVFZGl0RWxlbWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7CisgICAgdm9pZCBkaXNhYmxlZFN0YXRlQ2hh
bmdlZCgpOworICAgIHZvaWQgcmVhZE9ubHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHJlbW92
ZUV2ZW50SGFuZGxlcigpIHsgbV9lZGl0Q29udHJvbE93bmVyID0gMDsgfQorICAgIHZvaWQgc2V0
TGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYpOworICAgIHZvaWQgc2V0VmFsdWVBc0VtcHR5KCk7Cisg
ICAgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpOworICAgIGRvdWJs
ZSB2YWx1ZUFzRG91YmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGlu
dCBJbnZhbGlkRmllbGRJbmRleCA9IC0xOworCisgICAgLy8gVGltZSBjYW4gYmUgcmVwcmVzZW50
IGF0IG1vc3QgZml2ZSBmaWVsZHMsIHN1Y2ggYXMKKyAgICAvLyAgMS4gaG91cgorICAgIC8vICAy
LiBtaW51dGUKKyAgICAvLyAgMy4gc2Vjb25kCisgICAgLy8gIDQuIG1pbGxpc2Vjb25kCisgICAg
Ly8gIDUuIEFNL1BNCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtTnVtYmVyT2ZGaWVsZHMg
PSA1OworCisgICAgRGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCosIEVkaXRDb250cm9sT3du
ZXImKTsKKworICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFOworICAg
IERhdGVUaW1lRmllbGRFbGVtZW50KiBmaWVsZEF0KGludCkgY29uc3Q7CisgICAgdm9pZCBoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZU1vdXNlRXZl
bnQoTW91c2VFdmVudCopOworICAgIGludCBuZXh0RmllbGRJbmRleCgpIGNvbnN0OworICAgIGlu
dCBwcmV2aW91c0ZpZWxkSW5kZXgoKSBjb25zdDsKKyAgICBib29sIHJlYWRPbmx5KCkgY29uc3Q7
CisgICAgdm9pZCByZXNldExheW91dCgpOworICAgIHZvaWQgc2V0Rm9jdXNGaWVsZChpbnQpOwor
ICAgIHZvaWQgdXBkYXRlVUlTdGF0ZSgpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OkZpZWxkRXZlbnRIYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvTmV4
dEZpZWxkKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFu
Z2VkKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICAvLyBTcGluQnV0dG9uRWxlbWVudDo6U3RlcEFj
dGlvbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzcGluQnV0dG9uU3RlcERv
d24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3BpbkJ1dHRvblN0ZXBVcCgp
IE9WRVJSSURFIEZJTkFMOworCisgICAgRWRpdENvbnRyb2xPd25lciogbV9lZGl0Q29udHJvbE93
bmVyOworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBtX0FNUE1GaWVsZDsKKyAgICBEYXRlVGlt
ZUZpZWxkRWxlbWVudCogbV9ob3VyMTFGaWVsZDsKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCog
bV9ob3VyMTJGaWVsZDsKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogbV9ob3VyMjRGaWVsZDsK
KyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogbV9ob3VyMjNGaWVsZDsKKyAgICBEYXRlVGltZUZp
ZWxkRWxlbWVudCogbV9taWxsaXNlY29uZEZpZWxkOworICAgIERhdGVUaW1lRmllbGRFbGVtZW50
KiBtX21pbnV0ZUZpZWxkOworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBtX3NlY29uZEZpZWxk
OworICAgIFNwaW5CdXR0b25FbGVtZW50KiBtX3NwaW5CdXR0b247CisgICAgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQqIG1fZmllbGRzW21heGltdW1OdW1iZXJPZkZpZWxkc107CisgICAgaW50IG1fZm9j
dXNGaWVsZEluZGV4OworICAgIGludCBtX251bWJlck9mRmllbGRzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3MzQzZmFj
NDlmYTgxOWVkYmFlNmZmNjExMDVmZWQ0NzQyYTUyNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCAr
MSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKworI2luY2x1ZGUgIkRhdGVU
aW1lRmllbGRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJL
ZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0RhdGVUaW1lRmllbGRFbGVtZW50OjpG
aWVsZEV2ZW50SGFuZGxlcjo6fkZpZWxkRXZlbnRIYW5kbGVyKCkKK3sKK30KKworRGF0ZVRpbWVG
aWVsZEVsZW1lbnQ6OkRhdGVUaW1lRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmll
bGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNo
YWRvd1BzZXVkb0lkLCBpbnQgdW5pdEluTWlsbGlzZWNvbmQgKQorICAgIDogSFRNTEVsZW1lbnQo
c3BhblRhZywgZG9jdW1lbnQpCisgICAgLCBtX2ZpZWxkRXZlbnRIYW5kbGVyKCZmaWVsZEV2ZW50
SGFuZGxlcikKKyAgICAsIG1fdW5pdEluTWlsbGlzZWNvbmQodW5pdEluTWlsbGlzZWNvbmQpCit7
CisgICAgc2V0U2hhZG93UHNldWRvSWQoc2hhZG93UHNldWRvSWQpOworfQorCit2b2lkIERhdGVU
aW1lRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAg
ICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2
ZW50ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KTsKKworICAgICAgICBjb25z
dCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBrZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCk7
CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iKSB7CisgICAgICAgICAgICBr
ZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgc3RlcERvd24o
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlJZGVu
dGlmaWVyID09ICJVcCIpIHsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgICAgICBzdGVwVXAoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJVKzAwMDgiKSB7CisgICAg
ICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
c2V0VmFsdWVBc0VtcHR5KERpc3BhdGNoRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAg
ICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2b2lkIERh
dGVUaW1lRmllbGRFbGVtZW50Ojppbml0aWFsaXplKCkKK3sKKyAgICBhcHBlbmRDaGlsZChUZXh0
OjpjcmVhdGUoZG9jdW1lbnQoKSwgdmlzaWJsZVZhbHVlKCkpKTsKK30KKworYm9vbCBEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6cmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBmYXN0SGFzQXR0
cmlidXRlKHJlYWRvbmx5QXR0cik7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnNl
dFJlYWRPbmx5KCkKK3sKKyAgICAvLyBTZXQgSFRNTCBhdHRyaWJ1dGUgcmVhZG9ubHkgdG8gY2hh
bmdlIGFwcGVyYW5jZS4KKyAgICBzZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyLCBlbXB0eVN0cmlu
ZygpKTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OnNldFJlYWRXcml0ZSgpCit7CisgICAgLy8gUmVtb3ZlIEhUTUwgYXR0cmlidXRl
IHJlYWRvbmx5IHRvIGNoYW5nZSBhcHBlcmFuY2UuCisgICAgcmVtb3ZlQXR0cmlidXRlKHJlYWRv
bmx5QXR0cik7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworfQorCit2b2lkIERhdGVUaW1l
RmllbGRFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsdWUoRXZlbnRCZWhhdmlvciBldmVudEJlaGF2
aW9yKQoreworICAgIFRleHQqIGNvbnN0IHRleHROb2RlID0gdG9UZXh0KGZpcnN0Q2hpbGQoKSk7
CisgICAgY29uc3QgU3RyaW5nIG5ld1Zpc2libGVWYWx1ZSA9IHZpc2libGVWYWx1ZSgpOworICAg
IEFTU0VSVChuZXdWaXNpYmxlVmFsdWUubGVuZ3RoKCkgPiAwKTsKKworICAgIGlmICh0ZXh0Tm9k
ZS0+d2hvbGVUZXh0KCkgPT0gbmV3VmlzaWJsZVZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBFeGNlcHRpb25Db2RlIGVjOworICAgIHRleHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KG5ld1Zp
c2libGVWYWx1ZSwgZWMpOworCisgICAgaWYgKGV2ZW50QmVoYXZpb3IgPT0gRGlzcGF0Y2hFdmVu
dCAmJiBtX2ZpZWxkRXZlbnRIYW5kbGVyKQorICAgICAgICBtX2ZpZWxkRXZlbnRIYW5kbGVyLT5m
aWVsZFZhbHVlQ2hhbmdlZCgpOworfQorCitkb3VibGUgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnZh
bHVlQXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBoYXNWYWx1ZSgpID8gc3RhdGljX2Nh
c3Q8ZG91YmxlPih2YWx1ZUFzSW50ZWdlcigpKSAqIG1fdW5pdEluTWlsbGlzZWNvbmQgOiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Rh
dGVUaW1lRmllbGRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTFjOWYyMmFlODYzN2M3MTQxNTcxZWU2
YjIzYjlmZDIxN2Q5OTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVGaWVsZEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGlt
ZUZpZWxkRWxlbWVudF9oCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJ
RUxEUykKKworI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgaXMgYmFzZSBjbGFzcyBvZiBkYXRlIHRpbWUg
ZmllbGQgZWxlbWVudC4KK2NsYXNzIERhdGVUaW1lRmllbGRFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUZpZWxkRWxlbWVudCk7
CisKK3B1YmxpYzoKKyAgICBlbnVtIEV2ZW50QmVoYXZpb3IgeworICAgICAgICBEaXNwYXRjaE5v
RXZlbnQsCisgICAgICAgIERpc3BhdGNoRXZlbnQsCisgICAgfTsKKworICAgIC8vIEZpZWxkRXZl
bnRIYW5kbGVyIGltcGxlbWVudGVyIG11c3QgY2FsbCByZW1vdmVFdmVudEhhbmRsZXIgd2hlbgor
ICAgIC8vIGl0IGRvZXNuJ3QgaGFuZGxlIGV2ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAg
IGNsYXNzIEZpZWxkRXZlbnRIYW5kbGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
fkZpZWxkRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaWVsZFZhbHVlQ2hh
bmdlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1vdmVUb05leHRGaWVsZCgpID0gMDsK
KyAgICB9OworCisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdCA9IDA7CisgICAgYm9vbCByZWFkT25s
eSgpIGNvbnN0OworICAgIHZvaWQgcmVtb3ZlRXZlbnRIYW5kbGVyKCkgeyBtX2ZpZWxkRXZlbnRI
YW5kbGVyID0gMDsgfQorICAgIHZvaWQgc2V0UmVhZE9ubHkoKTsKKyAgICB2b2lkIHNldFJlYWRX
cml0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlvciA9
IERpc3BhdGNoTm9FdmVudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdl
cihpbnQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RlcERvd24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICBkb3VibGUgdmFsdWVBc0Rv
dWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0ID0gMDsKKworcHJvdGVj
dGVkOgorICAgIERhdGVUaW1lRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRs
ZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQpOworCisgICAgdm9pZCBpbml0aWFsaXplKCk7
CisgICAgaW50IHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gbV91bml0SW5NaWxs
aXNlY29uZDsgfQorICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50QmVoYXZpb3IpOwor
CisgICAgRmllbGRFdmVudEhhbmRsZXIqIG1fZmllbGRFdmVudEhhbmRsZXI7CisgICAgY29uc3Qg
aW50IG1fdW5pdEluTWlsbGlzZWNvbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzU5N2YxOWY3Y2QyOGQ5
OWQ2OGViZTk0ZDI3ZDhjOGQyODZiMWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50LmNwcApAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3Qg
aW50IGhvdXJJbk1pbGxpc2Vjb25kID0gMzYwMCAqIDEwMDA7CisKK0RhdGVUaW1lSG91ckZpZWxk
RWxlbWVudDo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmll
bGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNo
YWRvd1BzZXVkb0lkLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1
ZG9JZCwgaG91ckluTWlsbGlzZWNvbmQsIG1pbmltdW0sIG1heGltdW0pCisgICAgLCBtX2FsaWdu
bWVudChtYXhpbXVtICsgbWF4aW11bSAlIDIpCit7CisgICAgQVNTRVJUKCghbWluaW11bSAmJiAo
bWF4aW11bSA9PSAxMSB8fCBtYXhpbXVtID09IDIzKSkgfHwgKG1pbmltdW0gPT0gMSAmJiAobWF4
aW11bSA9PSAxMiB8fCBtYXhpbXVtID09IDI0KSkpOworfQorCitQYXNzUmVmUHRyPERhdGVUaW1l
SG91ckZpZWxkRWxlbWVudD4gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkK
K3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVm
KG5ldyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
LCBzaGFkb3dQc2V1ZG9JZCwgbWluaW11bSwgbWF4aW11bSkpOworICAgIGZpZWxkLT5pbml0aWFs
aXplKCk7CisgICAgcmV0dXJuIGZpZWxkOworfQorCit2b2lkIERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlQXNIb3VyMjMsIEV2ZW50QmVoYXZpb3Ig
ZXZlbnRCZWhhdmlvcikKK3sKKyAgICBjb25zdCBpbnQgdmFsdWUgPSBSYW5nZSgwLCAyMykuZW5z
dXJlSW5SYW5nZSh2YWx1ZUFzSG91cjIzKSAlIG1fYWxpZ25tZW50OworICAgIERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIocmFuZ2UoKS5taW5pbXVtICYmICF2
YWx1ZSA/IG1fYWxpZ25tZW50IDogdmFsdWUsIGV2ZW50QmVoYXZpb3IpOworfQorCitpbnQgRGF0
ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc1ZhbHVlKCkgPyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRl
Z2VyKCkgJSBtX2FsaWdubWVudCA6IC0xOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVI
b3VyRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzliYTFhZTcyZjA5YzRhMTc0NjRkNDdlOGJi
MjFhYTc5ZDdmYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50LmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0
ZVRpbWVIb3VyRmllbGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVM
VElQTEVfRklFTERTKQorCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IGlz
IHVzZWQgZm9yIGhvdXIgZmllbGQgb2YgZGF0ZSB0aW1lIGZvcm1hdAorLy8gc3VwcG9ydGluZyBm
b2xsb3dpbmcgcGF0dGVybnM6CisvLyAgLSAwIHRvIDExCisvLyAgLSAxIHRvIDEyCisvLyAgLSAw
IHRvIDIzCisvLyAgLSAxIHRvIDI0CitjbGFzcyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQgOiBw
dWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVs
ZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGludCBtaW5pbXVtLCBpbnQgbWF4
aW11bSk7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KERvY3VtZW50
KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQgbWluaW11bSwg
aW50IG1heGltdW0pOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IpIE9W
RVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZF
UlJJREUgRklOQUw7CisKKyAgICBjb25zdCBpbnQgbV9hbGlnbm1lbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MTMwMGZkYzIwMmVlYWFlNGViN2E0MGYzNDVhNzM0MjU5Yjc4MWM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50LmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklF
TERTKQorCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmgiCisKKyNpbmNs
dWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBzaXplX3QgZGlzcGxheVNpemVPZk51
bWJlcihpbnQgdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlID49IDApOworCisgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpbnQgbnVtYmVyT2ZEaWdpdHMgPSAwOwor
ICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICB2YWx1ZSAvPSAxMDsKKyAgICAgICAgKytudW1i
ZXJPZkRpZ2l0czsKKyAgICB9CisKKyAgICByZXR1cm4gbnVtYmVyT2ZEaWdpdHM7Cit9CisKK0Rh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKGludCBtaW5pbXVtLCBpbnQg
bWF4aW11bSkKKyAgICA6IG1heGltdW0obWF4aW11bSkKKyAgICAsIG1pbmltdW0obWluaW11bSkK
K3sKKyAgICBBU1NFUlQobWluaW11bSA8PSBtYXhpbXVtKTsKK30KKworaW50IERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUluUmFuZ2UoaW50IHZhbHVlKSBjb25zdAor
eworICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heCh2YWx1ZSwgbWluaW11bSksIG1heGltdW0p
OworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50
SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCwgaW50IHVuaXRJbk1p
bGxpc2Vjb25kLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBEYXRlVGltZUZpZWxk
RWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCB1bml0
SW5NaWxsaXNlY29uZCkKKyAgICAsIG1fbGFzdERpZ2l0Q2hhclRpbWUoMCkKKyAgICAsIG1fcmFu
Z2UobWluaW11bSwgbWF4aW11bSkKKyAgICAsIG1fdmFsdWUoMCkKKyAgICAsIG1faGFzVmFsdWUo
ZmFsc2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50PiBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZp
ZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBz
aGFkb3dQc2V1ZG9JZCwgaW50IHVuaXRJbk1pbGxpc2Vjb25kLCBpbnQgbWluaW11bSwgaW50IG1h
eGltdW0pCit7CisgICAgUmVmUHRyPERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudD4gZmllbGQg
PSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVs
ZEV2ZW50SGFuZGxlciwgc2hhZG93UHNldWRvSWQsIHVuaXRJbk1pbGxpc2Vjb25kLCBtaW5pbXVt
LCBtYXhpbXVtKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gZmllbGQ7
Cit9CisKK3N0YXRpYyBpbnQgbWFwRXZlbnRUb0RpZ2l0KEV2ZW50KiBldmVudCkKK3sKKyAgICBp
ZiAoIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCktPmtleUNvZGUoKSAtICcw
JzsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGNvbnN0IGludCBkaWdpdCA9IG1hcEV2ZW50VG9E
aWdpdChldmVudCk7CisgICAgaWYgKGRpZ2l0ID49IDAgJiYgZGlnaXQgPD0gOSkgeworICAgICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAg
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHNldFZhbHVl
QXNJbnRlZ2VyKG1faGFzVmFsdWUgJiYgaXNDb250aW51b3NFdmVudCgqZXZlbnQpID8gbV92YWx1
ZSAqIDEwICsgZGlnaXQgOiBkaWdpdCwgRGlzcGF0Y2hFdmVudCk7CisgICAgICAgICAgICBpZiAo
bV92YWx1ZSAqIDEwID4gbV9yYW5nZS5tYXhpbXVtICYmIG1fZmllbGRFdmVudEhhbmRsZXIpIHsK
KyAgICAgICAgICAgICAgICBtX2ZpZWxkRXZlbnRIYW5kbGVyLT5tb3ZlVG9OZXh0RmllbGQoKTsK
KyAgICAgICAgICAgICAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUgPSBldmVudC0+dGltZVN0
YW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbGFzdERp
Z2l0Q2hhclRpbWUgPSAwOworICAgIERhdGVUaW1lRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKGV2ZW50KTsKK30KKworYm9vbCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6Omhh
c1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNWYWx1ZTsKK30KKworYm9vbCBEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmlzQ29udGludW9zRXZlbnQoY29uc3QgRXZlbnQmIGV2
ZW50KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIENvbnRpbnVvdXNFdmVudFRocmVzaG9s
ZCA9IDcwMDsKKyAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wKCkgLSBtX2xhc3REaWdpdENoYXJU
aW1lIDwgQ29udGludW91c0V2ZW50VGhyZXNob2xkOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlv
cikKK3sKKyAgICBtX3ZhbHVlID0gMDsKKyAgICBtX2hhc1ZhbHVlID0gcmVhZE9ubHkoKTsKKyAg
ICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7CisgICAgbV9sYXN0RGlnaXRDaGFy
VGltZSA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1
ZUFzSW50ZWdlcihpbnQgdmFsdWUsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAg
ICBtX3ZhbHVlID0gZW5zdXJlSW5SYW5nZSh2YWx1ZSk7CisgICAgbV9oYXNWYWx1ZSA9IHRydWU7
CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworICAgIG1fbGFzdERpZ2l0
Q2hhclRpbWUgPSAwOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3Rl
cERvd24oKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdl
cihtX3ZhbHVlID09IG1fcmFuZ2UubWluaW11bSA/IG1fcmFuZ2UubWF4aW11bSA6IGVuc3VyZUlu
UmFuZ2UobV92YWx1ZSAtIDEpLCBEaXNwYXRjaEV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHNl
dFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWF4aW11bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwVXAoKQoreworICAgIGlmIChtX2hh
c1ZhbHVlKQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3ZhbHVlID09IG1fcmFuZ2UubWF4
aW11bSA/IG1fcmFuZ2UubWluaW11bSA6IGVuc3VyZUluUmFuZ2UobV92YWx1ZSArIDEpLCBEaXNw
YXRjaEV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2Uu
bWluaW11bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGFzVmFsdWUpCisgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgaWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5OSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG1fdmFsdWUpOworCisgICAgaWYgKG1fcmFu
Z2UubWF4aW11bSA+IDk5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUwM2QiLCBt
X3ZhbHVlKTsKKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJTAyZCIsIG1fdmFsdWUpOwor
fQorCitpbnQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faGFzVmFsdWUgPyBtX3ZhbHVlIDogLTE7Cit9CisKK1N0cmlu
ZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZSgpOworCisgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworICAgIGZvciAoaW50IG51bWJlck9mRGFzaHMgPSBzdGQ6Om1heChk
aXNwbGF5U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWF4aW11bSksIGRpc3BsYXlTaXplT2ZOdW1iZXIo
bV9yYW5nZS5taW5pbXVtKSk7IG51bWJlck9mRGFzaHM7IC0tbnVtYmVyT2ZEYXNocykKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lYWUxNTE4ZTMyZDNkN2Y3NTE1YTE5NjhlNjhhYjY3MTI2MDgwMTQ4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
KQorCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgcmVwcmVzZW50cyBudW1lcmlj
IGZpZWxkIG9mIGRhdGUgdGltZSBmb3JtYXQuCisvLyBUaGlzIGNsYXNzIG1heSBiZSB1c2VkIGZv
cjoKKy8vICAtIG1pbnV0ZQorLy8gIC0gbWlsbGlzZWNvbmQKKy8vICAtIG1vbnRoCisvLyAgLSBz
ZWNvbmQKKy8vICAtIHllYXIKK2NsYXNzIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCA6IHB1
YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0cnVjdCBSYW5nZSB7
CisgICAgICAgIFJhbmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisgICAgICAgIGludCBl
bnN1cmVJblJhbmdlKGludCkgY29uc3Q7CisKKyAgICAgICAgaW50IG1heGltdW07CisgICAgICAg
IGludCBtaW5pbXVtOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiwgaW50IHVuaXRJbk1pbGxpc2Vjb25kLCBpbnQgbWluaW11bSwg
aW50IG1heGltdW0pOworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBp
bnQgdW5pdEluTWlsbGlzZWNvbmQsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKKyAgICBp
bnQgZW5zdXJlSW5SYW5nZShpbnQgdmFsdWUpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UuZW5zdXJl
SW5SYW5nZSh2YWx1ZSk7IH0KKyAgICBjb25zdCBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVy
biBtX3JhbmdlOyB9CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisg
ICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvcikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworcHJp
dmF0ZToKKyAgICBib29sIGlzQ29udGludW9zRXZlbnQoY29uc3QgRXZlbnQmKSBjb25zdDsKKwor
ICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQg
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
dm9pZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlvcikgT1ZFUlJJREUgRklOQUw7CisgICAg
dmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lk
IHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBET01UaW1lU3RhbXAgbV9sYXN0RGlnaXRDaGFyVGlt
ZTsKKyAgICBjb25zdCBSYW5nZSBtX3JhbmdlOworICAgIGludCBtX3ZhbHVlOworICAgIGJvb2wg
bV9oYXNWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9s
aWNGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJkMjE0ZGRlZThhN2VmYWY3YmUx
MDRkNzRkNzdmZGQ0YzRmYjM5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTE4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5k
bGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9J
ZCwgaW50IHVuaXRJbk1pbGxpc2Vjb25kLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3ltYm9scykK
KyAgICA6IERhdGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwg
c2hhZG93UHNldWRvSWQsIHVuaXRJbk1pbGxpc2Vjb25kKQorICAgICwgbV9zeW1ib2xzKHN5bWJv
bHMpCisgICAgLCBtX3NlbGVjdGVkSW5kZXgoLTEpCit7CisgICAgQVNTRVJUKCFzeW1ib2xzLmlz
RW1wdHkoKSk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudD4g
RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwg
RmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcm
IHNoYWRvd1BzZXVkb0lkLCBpbnQgdW5pdEluTWlsbGlzZWNvbmQsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBzeW1ib2xzKQoreworICAgIFJlZlB0cjxEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50
PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KGRvY3Vt
ZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgc2hhZG93UHNldWRvSWQsIHVuaXRJbk1pbGxpc2Vjb25k
LCBzeW1ib2xzKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gZmllbGQ7
Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAm
JiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAg
IEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50
Kj4oZXZlbnQpOworICAgICAgICBjb25zdCBpbnQgcmF3Q2hhckNvZGUgPSBrZXlib2FyZEV2ZW50
LT5jaGFyQ29kZSgpOworICAgICAgICBjb25zdCBpbnQgY2hhckNvZGUgPSByYXdDaGFyQ29kZSA+
PSAnYScgJiYgcmF3Q2hhckNvZGUgPD0gJ3onID8gcmF3Q2hhckNvZGUgKyAnQScgLSAnYScgOiBy
YXdDaGFyQ29kZTsKKyAgICAgICAgaWYgKGNoYXJDb2RlID49ICdBJyAmJiBjaGFyQ29kZSA8PSAn
WicpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fc3lt
Ym9scy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zeW1ib2xzW2lu
ZGV4XVswXSA9PSBjaGFyQ29kZSkgeworICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIoaW5k
ZXgsIERpc3BhdGNoRXZlbnQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitib29sIERh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zZWxlY3RlZEluZGV4ID49IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudDo6c2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sK
KyAgICBtX3NlbGVjdGVkSW5kZXggPSBJbnZhbGlkSW5kZXg7CisgICAgdXBkYXRlVmlzaWJsZVZh
bHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQ6OnNldFZhbHVlQXNJbnRlZ2VyKGludCBuZXdTZWxlY3RlZEluZGV4LCBFdmVudEJlaGF2aW9y
IGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gc3RkOjptYXgoMCwgc3Rk
OjptaW4obmV3U2VsZWN0ZWRJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihtX3N5bWJvbHMuc2l6ZSgp
IC0gMSkpKTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGNvbnN0
IGludCBzaXplID0gbV9zeW1ib2xzLnNpemUoKTsKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBoYXNW
YWx1ZSgpID8gKG1fc2VsZWN0ZWRJbmRleCArIHNpemUgLSAxKSAlIHNpemUgOiBzaXplIC0gMTsK
KyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKCkKK3sKKyAgICBtX3NlbGVjdGVkSW5kZXgg
PSBoYXNWYWx1ZSgpID8gKG1fc2VsZWN0ZWRJbmRleCArIDEpICUgbV9zeW1ib2xzLnNpemUoKSA6
IDA7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKERpc3BhdGNoRXZlbnQpOworfQorCitTdHJpbmcg
RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVy
biBoYXNWYWx1ZSgpID8gbV9zeW1ib2xzW21fc2VsZWN0ZWRJbmRleF0gOiBlbXB0eVN0cmluZygp
OworfQorCitpbnQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIo
KSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW5kZXg7Cit9CisKK1N0cmluZyBEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUoKSBjb25zdAoreworICAgIHJl
dHVybiBoYXNWYWx1ZSgpID8gbV9zeW1ib2xzW21fc2VsZWN0ZWRJbmRleF0gOiAiLS0iOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMxMDA2MWVhYWY5Y2NlYmM5MTY3YmNjNjY1ZWRmYjZlMjc3NDVlNzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lU3ltYm9saWNG
aWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVM
RFMpCisKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgaXMgdXNlZCBmb3IgcGVy
aW9kIGZpZWxkIG9mIGRhdGEgdGltZSBmb3JtYXQuCitjbGFzcyBEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ+IGNyZWF0ZShE
b2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50LCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQg
SW52YWxpZEluZGV4ID0gLTE7CisKKyAgICBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERv
Y3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbnQsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5j
dGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVS
UklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQp
IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQs
IEV2ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93
bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwor
ICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cisg
ICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisK
KyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBtX3N5bWJvbHM7CisgICAgaW50IG1fc2VsZWN0ZWRJ
bmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157149</attachid>
            <date>2012-08-08 01:40:35 -0700</date>
            <delta_ts>2012-08-09 18:05:26 -0700</delta_ts>
            <desc>Patch 4</desc>
            <filename>bug-92960-20120808174008.patch</filename>
            <type>text/plain</type>
            <size>67679</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQyYTg0NDM1NTg4YWQ2
YTZhMDQ0ZTkwMGYzNWM5NjJhNTk5MDdkMS4uMDMxOTM2MjNlNWVlNGRlZTI4Mjk4ZjAyYTU5Nzg2
NjVhNzY0YTBkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxMi0wOC0wOCAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJ
IGZvciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVy
IG9mIG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1l
RmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25k
CisgICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9y
IG1pbnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNl
IGNsYXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkK
KyAgICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
IGJ1aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3Qg
Y2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGlu
Y2x1ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwv
c2hhZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwg
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwK
KyAgICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKTogQnVpbGQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQg
YmFzZWQgb24gRGF0ZVRpbWVGb3JtYXQgc3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0QnVpbGRlcjo6RGF0ZVRpbWVFZGl0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRCdWlsZGVyOjpuZWVkU2Vjb25kRmllbGQpOgorICAgICAgICAoRGF0ZVRpbWVG
b3JtYXRBbmFseXplcik6IENoZWNrZXMgRGF0ZVRpbWVGb3JtYXQgc3RyaW5nIGhhcyBtaWxsaXNl
Y29uZCBmaWVsZAorICAgICAgICBmb3IgYWRkaW5nIHRoZW0gaWYgb3duZXIgb2YgRGF0ZVRpbWVF
ZGl0RWxlbWVudCB3YW50cyB0byBoYXZlIHRoZW0gYnV0IERhdGVUaW1lRm9ybWF0IHN0cmluZyBk
b2Vzbid0IGhhdmUuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRCdWlsZGVyOjpEYXRl
VGltZUZvcm1hdEFuYWx5emVyOjpEYXRlVGltZUZvcm1hdEFuYWx5emVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdEJ1aWxkZXI6OkRhdGVUaW1lRm9ybWF0QW5hbHl6ZXI6Omhhc01p
bGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6
YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZE1p
bGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6
bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1aWxkZXI6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0Rmll
bGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRMaXRlcmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3du
ZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVs
ZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIncyBkaXNh
YmxlZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxl
bWVudDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpm
b2N1c0ZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
OjpmaWVsZFZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojpmb2N1c09uTmV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6aXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0Rmll
bGRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91
c0ZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVh
ZE9ubHlTdGF0ZUNoYW5nZWQpOiBDYWxsZWQgd2hlbiBvd25lcidzIHJlYWRPbHkgc3RhdGUgaXMg
Y2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0VmFs
dWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0VmFs
dWVBc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5C
dXR0b25TdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpz
cGluQnV0dG9uU3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6
OnVwZGF0ZVVJU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6
dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVu
dC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoRWRp
dENvbnRyb2xPd25lcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpy
ZW1vdmVFZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZp
ZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVs
ZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lRmllbGRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50Ojppbml0aWFsaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50Ojppc1JlYWRPbmx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50OjpzZXRSZWFkT25seSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0UmVhZFdyaXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnZhbHVlQXNEb3VibGUpOgor
ICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAg
ICAgICAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQpOgorICAgICAgICAoRmllbGRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnJlbW92ZUV2ZW50SGFu
ZGxlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OkRhdGVU
aW1lQU1QTUZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVs
ZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVsZEVs
ZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZp
ZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVIb3VyRmllbGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlz
ZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1
ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRF
bGVtZW50OjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50Ojp1bml0
SW5NaWxsaXNlY29uZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxl
bWVudDo6RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZVNlY29uZEZp
ZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50
OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVNlY29uZEZpZWxk
RWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVU
aW1lRmllbGRFbGVtZW50cy5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lQU1QTUZpZWxkRWxl
bWVudCk6CisgICAgICAgIChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoRGF0
ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudCk6CisgICAgICAgIChEYXRlVGltZU1pbnV0ZUZp
ZWxkRWxlbWVudCk6CisgICAgICAgIChEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpkaXNwbGF5U2l6ZU9mTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUluUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFwRXZlbnRUb0Rp
Z2l0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6Omhhc1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6aXNDb250aW51b3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNFbXB0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24pOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwVXApOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmlzaWJs
ZVZhbHVlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQuaDogQWRkZWQuCisgICAgICAgIChEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQpOgorICAg
ICAgICAoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50OjplbnN1cmVJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6cmFuZ2UpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9s
aWNGaWVsZEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojpo
YXNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50
OjpzZXRWYWx1ZUFzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVu
dCk6CisKIDIwMTItMDgtMDggIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJlbW92ZSBhbiB1bnVzZWQgbWVtYmVyIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IDkxYmFhZGU0NzhlNDU0NjdmMjZmNzVlZjYxYzRkMGZhMGMxNDhkNWYuLjk2YmIyMjRl
YzdhYzQ5ZWQwZTA1Mzg5MTQ1YThlMThhOTE2YzAxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU3
NTUsNiArNTc1NSwxNiBAQAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmli
dXRvci5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5j
cHAnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgnLAor
ICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwJywKKyAgICAg
ICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmgnLAorICAgICAgICAgICAg
J2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cv
RGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0Rh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9E
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFk
b3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1sL3No
YWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0RldGFpbHNNYXJrZXJDb250cm9sLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0hUTUxD
b250ZW50RWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUVkaXRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWQ0ZGM1ODBmYWYxY2NmOGI1MTZi
MWNkYTNkNzVlYTJjYTNhMjNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVf
VElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVFZGl0RWxlbWVudC5oIgor
CisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxl
bWVudHMuaCIKKyNpbmNsdWRlICJEYXRlVGltZUZvcm1hdC5oIgorI2luY2x1ZGUgIkRhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAi
TG9jYWxpemVkRGF0ZS5oIgorI2luY2x1ZGUgIkxvY2FsaXplZE51bWJlci5oIgorI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJTdGVwUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0Lmgi
CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CisKK2NsYXNzIERhdGVUaW1lRWRpdEJ1aWxkZXIgOiBwcml2YXRlIERhdGVUaW1lRm9ybWF0
OjpUb2tlbkhhbmRsZXIgeworcHVibGljOgorICAgIERhdGVUaW1lRWRpdEJ1aWxkZXIoRGF0ZVRp
bWVFZGl0RWxlbWVudCogZWxlbW50LCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKKyAgICAg
ICAgOiBtX2VkaXRFbGVtZW50KGVsZW1udCkKKyAgICAgICAgLCBtX3N0ZXBSYW5nZShzdGVwUmFu
Z2UpCisgICAgICAgICwgbV9oYXNNaWxsaXNlY29uZEZpZWxkKGZhbHNlKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGJ1aWxkKGNvbnN0IFN0cmluZyYpOworCisgICAgYm9vbCBuZWVkU2Vjb25k
RmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVt
KCkucmVtYWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJNaW51dGUpKS5pc1plcm8oKQorICAg
ICAgICAgICAgfHwgIW1fc3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50
Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBE
YXRlVGltZUZvcm1hdEFuYWx5emVyIDogcHJpdmF0ZSBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5k
bGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERhdGVUaW1lRm9ybWF0QW5hbHl6ZXIoKQorICAg
ICAgICAgICAgOiBtX2hhc01pbGxpc2Vjb25kRmllbGQoZmFsc2UpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGhhc01pbGxpc2Vjb25kRmllbGQoY29uc3QgU3Ry
aW5nJiBmb3JtYXRTdHJpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIERhdGVUaW1lRm9ybWF0
QW5hbHl6ZXIgYW5hbHl6ZXI7CisgICAgICAgICAgICBEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9y
bWF0U3RyaW5nLCBhbmFseXplcik7CisgICAgICAgICAgICByZXR1cm4gYW5hbHl6ZXIubV9oYXNN
aWxsaXNlY29uZEZpZWxkOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBE
YXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgdmlydHVhbCB2
b2lkIHZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludCkg
T1ZFUlJJREUgRklOQUwKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZCkgeworICAgICAgICAgICAg
ICAgIG1faGFzTWlsbGlzZWNvbmRGaWVsZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0
TGl0ZXJhbChjb25zdCBTdHJpbmcmKSBPVkVSUklERSBGSU5BTCB7IH0KKworICAgICAgICBib29s
IG1faGFzTWlsbGlzZWNvbmRGaWVsZDsKKyAgICB9OworCisgICAgdm9pZCBhZGRGaWVsZChQYXNz
UmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50PiBmaWVsZCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZWRpdEVsZW1lbnQtPm1fbnVtYmVyT2ZGaWVsZHMp
ID49IFdURl9BUlJBWV9MRU5HVEgobV9lZGl0RWxlbWVudC0+bV9maWVsZHMpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBtX2VkaXRFbGVtZW50LT5tX2ZpZWxkc1ttX2VkaXRFbGVtZW50
LT5tX251bWJlck9mRmllbGRzXSA9IGZpZWxkLmdldCgpOworICAgICAgICBtX2VkaXRFbGVtZW50
LT5hcHBlbmRDaGlsZChmaWVsZCk7CisgICAgICAgICsrbV9lZGl0RWxlbWVudC0+bV9udW1iZXJP
ZkZpZWxkczsKKyAgICB9CisKKyAgICBib29sIG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihz
dGF0aWNfY2FzdDxpbnQ+KG1zUGVyU2Vjb25kKSkuaXNaZXJvKCkKKyAgICAgICAgICAgIHx8ICFt
X3N0ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJTZWNvbmQp
KS5pc1plcm8oKTsKKyAgICB9CisKKyAgICBib29sIG5lZWRNaW51dGVGaWVsZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc3Rh
dGljX2Nhc3Q8aW50Pihtc1BlckhvdXIpKS5pc1plcm8oKQorICAgICAgICAgICAgfHwgIW1fc3Rl
cFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlckhvdXIpKS5pc1pl
cm8oKTsKKyAgICB9CisKKyAgICAvLyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIGZ1bmN0
aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlLCBpbnQpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExpdGVyYWwo
Y29uc3QgU3RyaW5nJikgT1ZFUlJJREUgRklOQUw7CisKKyAgICBEYXRlVGltZUVkaXRFbGVtZW50
KiBtX2VkaXRFbGVtZW50OworICAgIGNvbnN0IFN0ZXBSYW5nZSYgbV9zdGVwUmFuZ2U7CisgICAg
Ym9vbCBtX2hhc01pbGxpc2Vjb25kRmllbGQ7Cit9OworCitib29sIERhdGVUaW1lRWRpdEJ1aWxk
ZXI6OmJ1aWxkKGNvbnN0IFN0cmluZyYgZm9ybWF0U3RyaW5nKQoreworICAgIG1faGFzTWlsbGlz
ZWNvbmRGaWVsZCA9IERhdGVUaW1lRm9ybWF0QW5hbHl6ZXI6Omhhc01pbGxpc2Vjb25kRmllbGQo
Zm9ybWF0U3RyaW5nKTsKKyAgICBtX2VkaXRFbGVtZW50LT5yZXNldExheW91dCgpOworICAgIHJl
dHVybiBEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9ybWF0U3RyaW5nLCAqdGhpcyk7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlIGZpZWxkVHlwZSwgaW50KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3Ry
aW5nLCBob3VyUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWhvdXItZmllbGQiKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG1pbGxpc2Vjb25kUHN1ZWRv
SWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxkIikpOworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBtaW51dGVQc3VlZG9JZCwgKCItd2Via2l0
LWRhdGV0aW1lLWVkaXQtbWludXRlLWZpZWxkIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QXRvbWljU3RyaW5nLCBhbXBtUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWFtcG0t
ZmllbGQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHNlY29uZFBz
dWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQiKSk7CisKKyAgICBE
b2N1bWVudCogY29uc3QgZG9jdW1lbnQgPSBtX2VkaXRFbGVtZW50LT5kb2N1bWVudCgpOworCisg
ICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVIb3VyMTE6CisgICAgICAgIGFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50LCAqbV9lZGl0RWxlbWVudCwgaG91clBzdWVkb0lkLCAwLCAxMSkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTI6
CisgICAgICAgIGFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50LCAqbV9lZGl0RWxlbWVudCwgaG91clBzdWVkb0lkLCAxLCAxMikpOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgICAg
IGFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqbV9l
ZGl0RWxlbWVudCwgaG91clBzdWVkb0lkLCAwLCAyMykpOworICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CisgICAgICAgIGFkZEZpZWxk
KERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqbV9lZGl0RWxlbWVu
dCwgaG91clBzdWVkb0lkLCAxLCAyNCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNaW51dGU6IHsKKyAgICAgICAgUmVmUHRyPERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudD4gZmllbGQgPSBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50LCAqbV9lZGl0RWxlbWVudCwgbWludXRlUHN1ZWRvSWQpOworICAgICAg
ICBhZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmICghbmVlZE1pbnV0ZUZpZWxkKCkpCisgICAg
ICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDoKKyAgICAgICAgYWRkRmll
bGQoRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsICptX2VkaXRFbGVt
ZW50LCBhbXBtUHN1ZWRvSWQsIHRpbWVBTVBNTGFiZWxzKCkpKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25kOiB7CisgICAgICAgIFJl
ZlB0cjxEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudD4gZmllbGQgPSBEYXRlVGltZVNlY29uZEZp
ZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqbV9lZGl0RWxlbWVudCwgc2Vjb25kUHN1ZWRv
SWQpOworICAgICAgICBhZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmICghbmVlZFNlY29uZEZp
ZWxkKCkpCisgICAgICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKworICAgICAgICBpZiAo
bmVlZE1pbGxpc2Vjb25kRmllbGQoKSAmJiAhbV9oYXNNaWxsaXNlY29uZEZpZWxkKSB7CisgICAg
ICAgICAgICB2aXNpdExpdGVyYWwobG9jYWxpemVkRGVjaW1hbFNlcGFyYXRvcigpKTsKKyAgICAg
ICAgICAgIHZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNv
bmQsIDMpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kOiB7CisgICAgICAgIFJlZlB0
cjxEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50PiBmaWVsZCA9IERhdGVUaW1lTWlsbGlz
ZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgKm1fZWRpdEVsZW1lbnQsIG1pbGxp
c2Vjb25kUHN1ZWRvSWQpOworICAgICAgICBhZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmICgh
bmVlZE1pbGxpc2Vjb25kRmllbGQoKSkKKyAgICAgICAgICAgIGZpZWxkLT5zZXRSZWFkT25seSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
OworICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdExpdGVyYWwoY29u
c3QgU3RyaW5nJiB0ZXh0KQoreworICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpKTsKKyAgICBtX2Vk
aXRFbGVtZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUobV9lZGl0RWxlbWVudC0+ZG9jdW1l
bnQoKSwgdGV4dCkpOworfQorCitEYXRlVGltZUVkaXRFbGVtZW50OjpFZGl0Q29udHJvbE93bmVy
Ojp+RWRpdENvbnRyb2xPd25lcigpCit7Cit9CisKK0RhdGVUaW1lRWRpdEVsZW1lbnQ6OkRhdGVU
aW1lRWRpdEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBFZGl0Q29udHJvbE93bmVyJiBlZGl0
Q29udHJvbE93bmVyKQorICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKKyAg
ICAsIG1fZWRpdENvbnRyb2xPd25lcigmZWRpdENvbnRyb2xPd25lcikKKyAgICAsIG1fc3BpbkJ1
dHRvbigwKQorICAgICwgbV9mb2N1c0ZpZWxkSW5kZXgoaW52YWxpZEZpZWxkSW5kZXgpCisgICAg
LCBtX251bWJlck9mRmllbGRzKDApCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGRhdGVUaW1lRWRpdFBzZXVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdCIpKTsK
KyAgICBzZXRTaGFkb3dQc2V1ZG9JZChkYXRlVGltZUVkaXRQc2V1ZG9JZCk7Cit9CisKK0RhdGVU
aW1lRWRpdEVsZW1lbnQ6On5EYXRlVGltZUVkaXRFbGVtZW50KCkKK3sKKyAgICBmb3IgKGludCBm
aWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fbnVtYmVyT2ZGaWVsZHM7ICsrZmllbGRJbmRl
eCkKKyAgICAgICAgbV9maWVsZHNbZmllbGRJbmRleF0tPnJlbW92ZUV2ZW50SGFuZGxlcigpOwor
CisgICAgaWYgKG1fc3BpbkJ1dHRvbikKKyAgICAgICAgbV9zcGluQnV0dG9uLT5yZW1vdmVTdGVw
QWN0aW9uSGFuZGxlcigpOworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IERh
dGVUaW1lRWRpdEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRDb250cm9s
T3duZXImIGVkaXRDb250cm9sT3duZXIsIGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQorewor
ICAgIFJlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50PiBjb250YWluZXIgPSBhZG9wdFJlZihuZXcg
RGF0ZVRpbWVFZGl0RWxlbWVudChkb2N1bWVudCwgZWRpdENvbnRyb2xPd25lcikpOworICAgIGNv
bnRhaW5lci0+bGF5b3V0KHN0ZXBSYW5nZSk7CisgICAgcmV0dXJuIGNvbnRhaW5lci5yZWxlYXNl
KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQo
KQoreworICAgIHVwZGF0ZVVJU3RhdGUoKTsKK30KKworRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIERh
dGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkQXQoaW50IGZpZWxkSW5kZXgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZpZWxkSW5kZXggPj0gMCAmJiBmaWVsZEluZGV4IDwgbV9udW1iZXJPZkZpZWxkcyA/
IG1fZmllbGRzW2ZpZWxkSW5kZXhdIDogMDsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
Ojpmb2N1c0ZpZWxkQXQoaW50IG5ld0ZvY3VzRmllbGRJbmRleCkKK3sKKyAgICBpZiAobV9mb2N1
c0ZpZWxkSW5kZXggPT0gbmV3Rm9jdXNGaWVsZEluZGV4KQorICAgICAgICByZXR1cm47CisKKyAg
ICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgbmV3Rm9jdXNGaWVsZCA9IGZpZWxkQXQobmV3
Rm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAobmV3Rm9jdXNGaWVsZCAmJiBuZXdGb2N1c0ZpZWxk
LT5pc1JlYWRPbmx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIERhdGVUaW1lRmllbGRFbGVt
ZW50KiBjb25zdCBjdXJyZW50Rm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgp
OworCisgICAgaWYgKGN1cnJlbnRGb2N1c0ZpZWxkKQorICAgICAgICBjdXJyZW50Rm9jdXNGaWVs
ZC0+c2V0Rm9jdXMoZmFsc2UpOworCisgICAgaWYgKCFuZXdGb2N1c0ZpZWxkKSB7CisgICAgICAg
IG1fZm9jdXNGaWVsZEluZGV4ID0gaW52YWxpZEZpZWxkSW5kZXg7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2ZvY3VzRmllbGRJbmRleCA9IG5ld0ZvY3VzRmllbGRJbmRleDsKKyAg
ICBuZXdGb2N1c0ZpZWxkLT5zZXRGb2N1cyh0cnVlKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRF
bGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQp
Cit7CisgICAgaWYgKGlzRGlzYWJsZWQoKSB8fCBpc1JlYWRPbmx5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlm
aWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmllcigpOworCisgICAgaWYgKGtleUlkZW50
aWZpZXIgPT0gIkxlZnQiKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgIGNvbnN0IGludCBmaWVsZEluZGV4ID0gcHJldmlvdXNGaWVsZEluZGV4
KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZpZWxkSW5kZXgpKQorICAgICAgICAgICAgZm9jdXNG
aWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtl
eUlkZW50aWZpZXIgPT0gIlJpZ2h0IikgeworICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgICAgICBjb25zdCBpbnQgZmllbGRJbmRleCA9IG5leHRGaWVsZElu
ZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZpZWxkSW5kZXgpKQorICAgICAgICAgICAgZm9j
dXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOSIpIHsKKyAgICAgICAgY29uc3QgaW50IGZpZWxkSW5k
ZXggPSBrZXlib2FyZEV2ZW50LT5nZXRNb2RpZmllclN0YXRlKCJTaGlmdCIpID8gcHJldmlvdXNG
aWVsZEluZGV4KCkgOiBuZXh0RmllbGRJbmRleCgpOworICAgICAgICBpZiAoZmllbGRBdChmaWVs
ZEluZGV4KSkgeworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyAgICAgICAgICAgIGZvY3VzRmllbGRBdChmaWVsZEluZGV4KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50Ojpm
aWVsZFZhbHVlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fZWRpdENvbnRyb2xPd25lcikKKyAgICAg
ICAgbV9lZGl0Q29udHJvbE93bmVyLT5lZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpOworfQorCit2
b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3VzT25OZXh0RmllbGQoKQoreworICAgIGlmICht
X2ZvY3VzRmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAgZm9jdXNGaWVs
ZEF0KG5leHRGaWVsZEluZGV4KCkpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6Omhh
bmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogbW91c2VFdmVudCkKK3sKKyAgICBpZiAoaXNEaXNh
YmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1vdXNl
RXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgbW91c2VFdmVu
dC0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSog
Y29uc3QgcmVsYXRlZFRhcmdldCA9IG1vdXNlRXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAg
ICBmb3IgKGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fbnVtYmVyT2ZGaWVsZHM7
ICsrZmllbGRJbmRleCkgeworICAgICAgICBpZiAobV9maWVsZHNbZmllbGRJbmRleF0gPT0gcmVs
YXRlZFRhcmdldCkgeworICAgICAgICAgICAgbW91c2VFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyAgICAgICAgICAgIGZvY3VzRmllbGRBdChmaWVsZEluZGV4KTsKKyAgICAgICAgICAgIGlm
IChtX2VkaXRDb250cm9sT3duZXIpCisgICAgICAgICAgICAgICAgbV9lZGl0Q29udHJvbE93bmVy
LT5lZGl0Q29udHJvbE1vdXNlRm9jdXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorfQorCitib29sIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmlzRGlzYWJsZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2VkaXRDb250cm9sT3duZXIgJiYgbV9lZGl0Q29udHJvbE93bmVy
LT5pc0VkaXRDb250cm9sT3duZXJEaXNhYmxlZCgpOworfQorCitib29sIERhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmlzUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2VkaXRDb250cm9sT3du
ZXIgJiYgbV9lZGl0Q29udHJvbE93bmVyLT5pc0VkaXRDb250cm9sT3duZXJSZWFkT25seSgpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmxheW91dChjb25zdCBTdGVwUmFuZ2UmIHN0
ZXBSYW5nZSkKK3sKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9
IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpOworICAgIGZvY3VzRmllbGRBdChpbnZhbGlkRmll
bGRJbmRleCk7CisKKyAgICBEYXRlVGltZUVkaXRCdWlsZGVyIGJ1aWxkZXIodGhpcywgc3RlcFJh
bmdlKTsKKyAgICBjb25zdCBTdHJpbmcgZGF0ZVRpbWVGb3JtYXQgPSBidWlsZGVyLm5lZWRTZWNv
bmRGaWVsZCgpID8gbG9jYWxpemVkVGltZUZvcm1hdFRleHQoKSA6IGxvY2FsaXplZFNob3J0VGlt
ZUZvcm1hdFRleHQoKTsKKyAgICBpZiAoIWJ1aWxkZXIuYnVpbGQoZGF0ZVRpbWVGb3JtYXQpIHx8
ICFtX251bWJlck9mRmllbGRzKQorICAgICAgICBidWlsZGVyLmJ1aWxkKGJ1aWxkZXIubmVlZFNl
Y29uZEZpZWxkKCkgPyAiSEg6bW06c3MiIDogIkhIOm1tIik7CisKKyAgICBSZWZQdHI8U3BpbkJ1
dHRvbkVsZW1lbnQ+IHNwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KCksICp0aGlzKTsKKyAgICBtX3NwaW5CdXR0b24gPSBzcGluQnV0dG9uLmdldCgpOworICAg
IGFwcGVuZENoaWxkKHNwaW5CdXR0b24pOworCisgICAgaWYgKGZvY3VzRmllbGQpIHsKKyAgICAg
ICAgZm9yIChpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX251bWJlck9mRmllbGRz
OyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChmb2N1c0ZpZWxkID09IG1fZmllbGRz
W2ZpZWxkSW5kZXhdKSB7CisgICAgICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCitpbnQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6bmV4dEZpZWxkSW5kZXgoKSBjb25zdAor
eworICAgIGZvciAoaW50IGZpZWxkSW5kZXggPSBtX2ZvY3VzRmllbGRJbmRleCArIDE7IGZpZWxk
SW5kZXggPCBtX251bWJlck9mRmllbGRzOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKCFt
X2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGZp
ZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiBtX251bWJlck9mRmllbGRzOworfQorCitpbnQg
RGF0ZVRpbWVFZGl0RWxlbWVudDo6cHJldmlvdXNGaWVsZEluZGV4KCkgY29uc3QKK3sKKyAgICBm
b3IgKGludCBmaWVsZEluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXggLSAxOyBmaWVsZEluZGV4ID49
IDA7IC0tZmllbGRJbmRleCkgeworICAgICAgICBpZiAoIW1fZmllbGRzW2ZpZWxkSW5kZXhdLT5p
c1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gZmllbGRJbmRleDsKKyAgICB9CisgICAg
cmV0dXJuIC0xOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5U3RhdGVD
aGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0
RWxlbWVudDo6cmVzZXRMYXlvdXQoKQoreworICAgIGZvciAoaW50IGZpZWxkSW5kZXggPSAwOyBm
aWVsZEluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytmaWVsZEluZGV4KQorICAgICAgICBtX2Zp
ZWxkc1tmaWVsZEluZGV4XSA9IDA7CisgICAgbV9udW1iZXJPZkZpZWxkcyA9IDA7CisgICAgbV9z
cGluQnV0dG9uID0gMDsKKyAgICBtX2ZvY3VzRmllbGRJbmRleCA9IGludmFsaWRGaWVsZEluZGV4
OworICAgIHJlbW92ZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpIHsKKyAgICAgICAgaWYgKCFpc0Rpc2FibGVk
KCkgJiYgIWlzUmVhZE9ubHkoKSAmJiBtX2ZvY3VzRmllbGRJbmRleCA9PSBpbnZhbGlkRmllbGRJ
bmRleCkKKyAgICAgICAgICAgIGZvY3VzRmllbGRBdCgwKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsK
KyAgICAgICAgZm9jdXNGaWVsZEF0KGludmFsaWRGaWVsZEluZGV4KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaGFu
ZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVs
c2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRF
dmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKworICAgIGlmIChldmVu
dC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsK
KyAgICBpZiAoIWZvY3VzRmllbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvY3VzRmllbGQt
PmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1l
bnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIGZv
ciAoaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytm
aWVsZEluZGV4KQorICAgICAgICBtX2ZpZWxkc1tmaWVsZEluZGV4XS0+c2V0VmFsdWVBc0RhdGUo
ZGF0ZSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0VmFsdWVBc0VtcHR5KCkK
K3sKKyAgICBmb3IgKGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fbnVtYmVyT2ZG
aWVsZHM7ICsrZmllbGRJbmRleCkKKyAgICAgICAgbV9maWVsZHNbZmllbGRJbmRleF0tPnNldFZh
bHVlQXNFbXB0eShEYXRlVGltZUZpZWxkRWxlbWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcERvd24oKQoreworICAgIGlm
IChEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1
c0ZpZWxkSW5kZXgpKQorICAgICAgICBmb2N1c0ZpZWxkLT5zdGVwRG93bigpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVwVXAoKQoreworICAgIGlmIChEYXRl
VGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxk
SW5kZXgpKQorICAgICAgICBmb2N1c0ZpZWxkLT5zdGVwVXAoKTsKK30KKwordm9pZCBEYXRlVGlt
ZUVkaXRFbGVtZW50Ojp1cGRhdGVVSVN0YXRlKCkKK3sKKyAgICBpZiAoaXNEaXNhYmxlZCgpIHx8
IGlzUmVhZE9ubHkoKSkgeworICAgICAgICBtX3NwaW5CdXR0b24tPnJlbGVhc2VDYXB0dXJlKCk7
CisgICAgICAgIGZvY3VzRmllbGRBdChpbnZhbGlkRmllbGRJbmRleCk7CisgICAgfQorfQorCitk
b3VibGUgRGF0ZVRpbWVFZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0Cit7CisgICAg
ZG91YmxlIHZhbHVlID0gMDsKKworICAgIGZvciAoaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgbV9udW1iZXJPZkZpZWxkczsgKytmaWVsZEluZGV4KSB7CisgICAgICAgIGNvbnN0IERh
dGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmaWVsZCA9IG1fZmllbGRzW2ZpZWxkSW5kZXhdOwor
ICAgICAgICBpZiAoIWZpZWxkLT5oYXNWYWx1ZSgpKQorICAgICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgdmFsdWUgKz0gZmll
bGQtPnZhbHVlQXNEb3VibGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FlOWFjYjZmZjViODk4
YWQxNjhjMDhmNGJjY2YwMmQyYmU5MzI2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaApAQCAtMCwwICsxLDExOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisg
KiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVFZGl0RWxlbWVudF9oCisjZGVmaW5l
IERhdGVUaW1lRWRpdEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxU
SVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBEYXRlQ29tcG9uZW50czsKK2NsYXNzIERhdGVUaW1lRWRpdExheW91dGVyOworY2xhc3Mg
S2V5Ym9hcmRFdmVudDsKK2NsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBTdGVwUmFuZ2U7CisKKy8v
IERhdGVUaW1lRWRpdEVsZW1lbnQgY2xhc3MgY29udGFpbnMgbnVtYmVyaWMgZmllbGQgYW5kIHN5
bWJvbGMgZmllbGQgZm9yCisvLyByZXByZXNlbnRpbmcgZGF0ZSBhbmQgdGltZSwgc3VjaCBhcwor
Ly8gIC0gWWVhciwgTW9udGgsIERheSBPZiBNb250aAorLy8gIC0gSG91ciwgTWludXRlLCBTZWNv
bmQsIE1pbGxpc2Vjb25kLCBBTS9QTQorY2xhc3MgRGF0ZVRpbWVFZGl0RWxlbWVudCA6IHB1Ymxp
YyBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6RmllbGRFdmVu
dEhhbmRsZXIsIHByaXZhdGUgU3BpbkJ1dHRvbkVsZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUVkaXRFbGVtZW50KTsKKworcHVibGlj
OgorICAgIGZyaWVuZCBjbGFzcyBEYXRlVGltZUVkaXRCdWlsZGVyOworCisgICAgLy8gRWRpdENv
bnRyb2xPd25lciBpbXBsZW1lbnRlciBtdXN0IGNhbGwgcmVtb3ZlRWRpdENvbnRyb2xPd25lciB3
aGVuCisgICAgLy8gaXQgZG9lc24ndCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1Y3Rpb24u
CisgICAgY2xhc3MgRWRpdENvbnRyb2xPd25lciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0
dWFsIH5FZGl0Q29udHJvbE93bmVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29udHJv
bE1vdXNlRm9jdXMoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29udHJvbFZhbHVl
Q2hhbmdlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzRWRpdENvbnRyb2xPd25lckRp
c2FibGVkKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29udHJvbE93
bmVyUmVhZE9ubHkoKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERhdGVUaW1lRWRpdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEVkaXRDb250cm9sT3duZXIm
LCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIHZpcnR1YWwgfkRhdGVUaW1lRWRpdEVsZW1lbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURF
OworICAgIHZvaWQgZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGxheW91dChjb25z
dCBTdGVwUmFuZ2UmKTsKKyAgICB2b2lkIHJlYWRPbmx5U3RhdGVDaGFuZ2VkKCk7CisgICAgdm9p
ZCByZW1vdmVFZGl0Q29udHJvbE93bmVyKCkgeyBtX2VkaXRDb250cm9sT3duZXIgPSAwOyB9Cisg
ICAgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoKTsKKyAgICB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0
IERhdGVDb21wb25lbnRzJik7CisgICAgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IGludmFsaWRGaWVsZEluZGV4ID0gLTE7CisK
KyAgICAvLyBEYXRldGltZSBjYW4gYmUgcmVwcmVzZW50IGF0IG1vc3QgZml2ZSBmaWVsZHMsIHN1
Y2ggYXMKKyAgICAvLyAgMS4geWVhcgorICAgIC8vICAyLiBtb250aAorICAgIC8vICAzLiBkYXkt
b2YtbW9udGgKKyAgICAvLyAgNC4gaG91cgorICAgIC8vICA1LiBtaW51dGUKKyAgICAvLyAgNi4g
c2Vjb25kCisgICAgLy8gIDcuIG1pbGxpc2Vjb25kCisgICAgLy8gIDguIEFNL1BNCisgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhpbXVtTnVtYmVyT2ZGaWVsZHMgPSA4OworCisgICAgRGF0ZVRpbWVF
ZGl0RWxlbWVudChEb2N1bWVudCosIEVkaXRDb250cm9sT3duZXImKTsKKworICAgIERhdGVUaW1l
RmllbGRFbGVtZW50KiBmaWVsZEF0KGludCkgY29uc3Q7CisgICAgdm9pZCBmb2N1c0ZpZWxkQXQo
aW50KTsKKyAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAg
IHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisgICAgYm9vbCBpc0Rpc2FibGVk
KCkgY29uc3Q7CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7CisgICAgaW50IG5leHRGaWVs
ZEluZGV4KCkgY29uc3Q7CisgICAgaW50IHByZXZpb3VzRmllbGRJbmRleCgpIGNvbnN0OworICAg
IHZvaWQgcmVzZXRMYXlvdXQoKTsKKyAgICB2b2lkIHVwZGF0ZVVJU3RhdGUoKTsKKworICAgIC8v
IERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciBmdW5jdGlvbnMuCisgICAg
dmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCB2b2lkIGZvY3VzT25OZXh0RmllbGQoKSBPVkVSUklERSBGSU5BTDsKKworICAgIC8vIFNw
aW5CdXR0b25FbGVtZW50OjpTdGVwQWN0aW9uSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVh
bCB2b2lkIHNwaW5CdXR0b25TdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
dm9pZCBzcGluQnV0dG9uU3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICBFZGl0Q29udHJv
bE93bmVyKiBtX2VkaXRDb250cm9sT3duZXI7CisgICAgU3BpbkJ1dHRvbkVsZW1lbnQqIG1fc3Bp
bkJ1dHRvbjsKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogbV9maWVsZHNbbWF4aW11bU51bWJl
ck9mRmllbGRzXTsKKyAgICBpbnQgbV9mb2N1c0ZpZWxkSW5kZXg7CisgICAgaW50IG1fbnVtYmVy
T2ZGaWVsZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmU5ZTVhM2U4YTRkYzQ5NGQ5ODc4NzU2NmE5YjhiMDAyYTYyNWY1
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
RmllbGRFbGVtZW50LmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJ
RUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudC5oIgorCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlRleHQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitE
YXRlVGltZUZpZWxkRWxlbWVudDo6RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxl
cigpCit7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVtZW50OjpEYXRlVGltZUZpZWxkRWxlbWVudChE
b2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwg
Y29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCkKKyAgICA6IEhUTUxFbGVtZW50KHNw
YW5UYWcsIGRvY3VtZW50KQorICAgICwgbV9maWVsZEV2ZW50SGFuZGxlcigmZmllbGRFdmVudEhh
bmRsZXIpCit7CisgICAgc2V0U2hhZG93UHNldWRvSWQoc2hhZG93UHNldWRvSWQpOworfQorCit2
b2lkIERhdGVUaW1lRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVu
dCkKK3sKKyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICBLZXlib2FyZEV2ZW50KiBr
ZXlib2FyZEV2ZW50ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KTsKKworICAg
ICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBrZXlib2FyZEV2ZW50LT5rZXlJZGVu
dGlmaWVyKCk7CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iKSB7CisgICAg
ICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
c3RlcERvd24oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChrZXlJZGVudGlmaWVyID09ICJVcCIpIHsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBzdGVwVXAoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJVKzAwMDgi
KSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICAgICAgc2V0VmFsdWVBc0VtcHR5KERpc3BhdGNoRXZlbnQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQo
KSkKKyAgICAgICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQor
Cit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50Ojppbml0aWFsaXplKCkKK3sKKyAgICBhcHBlbmRD
aGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdmlzaWJsZVZhbHVlKCkpKTsKK30KKworYm9v
bCBEYXRlVGltZUZpZWxkRWxlbWVudDo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhc3RIYXNBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxk
RWxlbWVudDo6c2V0UmVhZE9ubHkoKQoreworICAgIC8vIFNldCBIVE1MIGF0dHJpYnV0ZSByZWFk
b25seSB0byBjaGFuZ2UgYXBwZXJhbmNlLgorICAgIHNldEF0dHJpYnV0ZShyZWFkb25seUF0dHIs
IGVtcHR5U3RyaW5nKCkpOworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKK30KKwordm9pZCBE
YXRlVGltZUZpZWxkRWxlbWVudDo6c2V0UmVhZFdyaXRlKCkKK3sKKyAgICAvLyBSZW1vdmUgSFRN
TCBhdHRyaWJ1dGUgcmVhZG9ubHkgdG8gY2hhbmdlIGFwcGVyYW5jZS4KKyAgICByZW1vdmVBdHRy
aWJ1dGUocmVhZG9ubHlBdHRyKTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9y
IGV2ZW50QmVoYXZpb3IpCit7CisgICAgVGV4dCogY29uc3QgdGV4dE5vZGUgPSB0b1RleHQoZmly
c3RDaGlsZCgpKTsKKyAgICBjb25zdCBTdHJpbmcgbmV3VmlzaWJsZVZhbHVlID0gdmlzaWJsZVZh
bHVlKCk7CisgICAgQVNTRVJUKG5ld1Zpc2libGVWYWx1ZS5sZW5ndGgoKSA+IDApOworCisgICAg
aWYgKHRleHROb2RlLT53aG9sZVRleHQoKSA9PSBuZXdWaXNpYmxlVmFsdWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGV4dE5vZGUtPnJlcGxhY2VXaG9s
ZVRleHQobmV3VmlzaWJsZVZhbHVlLCBlYyk7CisKKyAgICBpZiAoZXZlbnRCZWhhdmlvciA9PSBE
aXNwYXRjaEV2ZW50ICYmIG1fZmllbGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVu
dEhhbmRsZXItPmZpZWxkVmFsdWVDaGFuZ2VkKCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUZpZWxk
RWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkg
PyBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlQXNJbnRlZ2VyKCkpICogdW5pdEluTWlsbGlzZWNv
bmQoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NmJjYmE5MTUxOGI0
YjMwZGY0ZjA1NmQ1ZjAwMGRkN2Q1ZjllZTljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVudF9oCisjZGVm
aW5lIERhdGVUaW1lRmllbGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVf
TVVMVElQTEVfRklFTERTKQorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRlQ29tcG9uZW50czsKKworLy8gRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQgaXMgYmFzZSBjbGFzcyBvZiBkYXRlIHRpbWUgZmllbGQgZWxlbWVudC4KK2NsYXNz
IERhdGVUaW1lRmllbGRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEYXRlVGltZUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBlbnVt
IEV2ZW50QmVoYXZpb3IgeworICAgICAgICBEaXNwYXRjaE5vRXZlbnQsCisgICAgICAgIERpc3Bh
dGNoRXZlbnQsCisgICAgfTsKKworICAgIC8vIEZpZWxkRXZlbnRIYW5kbGVyIGltcGxlbWVudGVy
IG11c3QgY2FsbCByZW1vdmVFdmVudEhhbmRsZXIgd2hlbgorICAgIC8vIGl0IGRvZXNuJ3QgaGFu
ZGxlIGV2ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNzIEZpZWxkRXZlbnRIYW5k
bGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkZpZWxkRXZlbnRIYW5kbGVyKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaWVsZFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGZvY3VzT25OZXh0RmllbGQoKSA9IDA7CisgICAgfTsKKworICAgIHZpcnR1
YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCBib29sIGhh
c1ZhbHVlKCkgY29uc3QgPSAwOworICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0OworICAgIHZv
aWQgcmVtb3ZlRXZlbnRIYW5kbGVyKCkgeyBtX2ZpZWxkRXZlbnRIYW5kbGVyID0gMDsgfQorICAg
IHZvaWQgc2V0UmVhZE9ubHkoKTsKKyAgICB2b2lkIHNldFJlYWRXcml0ZSgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZl
bnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJl
aGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3du
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSA9IDA7CisgICAgdmlydHVhbCBTdHJp
bmcgdmFsdWUoKSBjb25zdCA9IDA7CisgICAgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBEYXRl
VGltZUZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRv
bWljU3RyaW5nJik7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIGRvdWJs
ZSB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0ID0gMDsKKyAgICB2b2lkIHVwZGF0ZVZpc2libGVW
YWx1ZShFdmVudEJlaGF2aW9yKTsKKworICAgIEZpZWxkRXZlbnRIYW5kbGVyKiBtX2ZpZWxkRXZl
bnRIYW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVs
ZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVt
ZW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFjMzYwNWRjZTFhZjk5ZGZmMTJhOGMxMWJmZWEyMzRiMmY0
ODE1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lRmllbGRFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBM
RV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisKKyNpbmNsdWRl
ICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0RhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVBTVBNRmll
bGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZl
bnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYW1wbUxhYmVscykKKyAgICA6IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgYW1wbUxhYmVs
cykKK3sKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ+IERhdGVUaW1l
QU1QTUZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhh
bmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVk
b0lkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYW1wbUxhYmVscykKK3sKKyAgICBSZWZQdHI8RGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZUFNUE1G
aWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwg
YW1wbUxhYmVscykpOworICAgIGZpZWxkLT5pbml0aWFsaXplKCk7CisgICAgcmV0dXJuIGZpZWxk
LnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnNldFZhbHVl
QXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRl
Z2VyKGRhdGUuaG91cigpID49IDEyID8gMSA6IDApOworfQorCitkb3VibGUgRGF0ZVRpbWVBTVBN
RmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1z
UGVySG91ciAqIDEyOworfQorCitEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lSG91
ckZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVs
ZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCwgaW50IG1p
bmltdW0sIGludCBtYXhpbXVtKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRv
Y3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgc2hhZG93UHNldWRvSWQsIG1pbmltdW0sIG1heGlt
dW0pCisgICAgLCBtX2FsaWdubWVudChtYXhpbXVtICsgbWF4aW11bSAlIDIpCit7CisgICAgQVNT
RVJUKCghbWluaW11bSAmJiAobWF4aW11bSA9PSAxMSB8fCBtYXhpbXVtID09IDIzKSkgfHwgKG1p
bmltdW0gPT0gMSAmJiAobWF4aW11bSA9PSAxMiB8fCBtYXhpbXVtID09IDI0KSkpOworfQorCitQ
YXNzUmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxlbWVudD4gRGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRF
dmVudEhhbmRsZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQsIGludCBtaW5p
bXVtLCBpbnQgbWF4aW11bSkKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50
PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoZG9jdW1lbnQs
IGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgbWluaW11bSwgbWF4aW11bSkpOwor
ICAgIGZpZWxkLT5pbml0aWFsaXplKCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVhc2UoKTsKK30K
Kwordm9pZCBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERh
dGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUuaG91cigp
KTsKK30KKwordm9pZCBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2Vy
KGludCB2YWx1ZUFzSG91cjIzLCBFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAg
Y29uc3QgaW50IHZhbHVlID0gUmFuZ2UoMCwgMjMpLmVuc3VyZUluUmFuZ2UodmFsdWVBc0hvdXIy
MykgJSBtX2FsaWdubWVudDsKKyAgICBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldFZh
bHVlQXNJbnRlZ2VyKHJhbmdlKCkubWluaW11bSAmJiAhdmFsdWUgPyBtX2FsaWdubWVudCA6IHZh
bHVlLCBldmVudEJlaGF2aW9yKTsKK30KKworZG91YmxlIERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dDo6dW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdAoreworICAgIHJldHVybiBtc1BlckhvdXI7Cit9
CisKK2ludCBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6
dmFsdWVBc0ludGVnZXIoKSAlIG1fYWxpZ25tZW50IDogLTE7Cit9CisKK0RhdGVUaW1lTWlsbGlz
ZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQpCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBzaGFkb3dQc2V1ZG9JZCwgMCwg
OTk5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+
IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3Ry
aW5nJiBzaGFkb3dQc2V1ZG9JZCkKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZp
ZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxk
RWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkKSk7Cisg
ICAgZmllbGQtPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQor
Cit2b2lkIERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNv
bnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUu
bWlsbGlzZWNvbmQoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVt
ZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKK0Rh
dGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29u
c3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCkKKyAgICA6IERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCAw
LCA1OSkKK3sKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudD4gRGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxk
RXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFk
b3dQc2V1ZG9JZCkKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ+IGZp
ZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KGRvY3VtZW50LCBm
aWVsZEV2ZW50SGFuZGxlciwgc2hhZG93UHNldWRvSWQpKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6
ZSgpOworICAgIHJldHVybiBmaWVsZC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVNaW51
dGVGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRl
KQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUubWludXRlKCkpOworfQorCitkb3VibGUg
RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbXNQZXJNaW51dGU7Cit9CisKK0RhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50
OjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZl
bnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQ
c2V1ZG9JZCkKKyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmll
bGRFdmVudEhhbmRsZXIsIHNoYWRvd1BzZXVkb0lkLCAwLCA1OSkKK3sKK30KKworUGFzc1JlZlB0
cjxEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudD4gRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50
SGFuZGxlciwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCkKK3sKKyAgICBSZWZQ
dHI8RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVU
aW1lU2Vjb25kRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgc2hhZG93
UHNldWRvSWQpKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBmaWVsZC5y
ZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVl
QXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRl
Z2VyKGRhdGUuc2Vjb25kKCkpOworfQorCitkb3VibGUgRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1l
bnQ6OnVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJTZWNvbmQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1
Y2E1MzA1Y2FiN2IzZjU3N2Y5NmMyZmFmOTYxN2FkZTljYTcxODkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaApAQCAt
MCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVGaWVsZEVs
ZW1lbnRzX2gKKyNkZWZpbmUgRGF0ZVRpbWVGaWVsZEVsZW1lbnRzX2gKKworI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRlVGltZUFNUE1GaWVsZEVsZW1l
bnQgOiBwdWJsaWMgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYpOworCitwcml2YXRlOgorICAgIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudChEb2N1
bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgpIGNv
bnN0IE9WRVJSSURFIEZJTkFMOworfTsKKworCisvLyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQg
aXMgdXNlZCBmb3IgaG91ciBmaWVsZCBvZiBkYXRlIHRpbWUgZm9ybWF0CisvLyBzdXBwb3J0aW5n
IGZvbGxvd2luZyBwYXR0ZXJuczoKKy8vICAtIDAgdG8gMTEKKy8vICAtIDEgdG8gMTIKKy8vICAt
IDAgdG8gMjMKKy8vICAtIDEgdG8gMjQKK2NsYXNzIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudCA6
IHB1YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZp
ZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgaW50IG1pbmltdW0sIGludCBt
YXhpbXVtKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoRG9jdW1l
bnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGludCBtaW5pbXVt
LCBpbnQgbWF4aW11bSk7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMu
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2VyKGludCwg
RXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCBkb3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAg
ICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworCisg
ICAgY29uc3QgaW50IG1fYWxpZ25tZW50OworfTsKKworY2xhc3MgRGF0ZVRpbWVNaWxsaXNlY29u
ZEZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQpOwor
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxk
RWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9t
aWNTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVt
ZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmKTsK
KworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0IE9WRVJSSURFIEZJ
TkFMOworfTsKKworY2xhc3MgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRl
VGltZU1pbnV0ZUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgRmllbGRFdmVu
dEhhbmRsZXImLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGlt
ZU1pbnV0ZUZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3Qg
QXRvbWljU3RyaW5nJik7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMu
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBkb3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBj
b25zdCBPVkVSUklERSBGSU5BTDsKK307CisKK2NsYXNzIERhdGVUaW1lU2Vjb25kRmllbGRFbGVt
ZW50IDogcHVibGljIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CisKK3ByaXZh
dGU6CisgICAgRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50
SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBE
YXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJ
bk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NTdlMmQ0ZTU2NGMzNjQ3NjIxNGFjNDZjMDVhYzU3YjNmN2I2ZDUzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50LmNwcApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNp
bmNsdWRlICJEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHNpemVfdCBkaXNwbGF5U2l6ZU9mTnVtYmVyKGludCB2
YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUgPj0gMCk7CisKKyAgICBpZiAoIXZhbHVlKQorICAg
ICAgICByZXR1cm4gMTsKKworICAgIGludCBudW1iZXJPZkRpZ2l0cyA9IDA7CisgICAgd2hpbGUg
KHZhbHVlKSB7CisgICAgICAgIHZhbHVlIC89IDEwOworICAgICAgICArK251bWJlck9mRGlnaXRz
OworICAgIH0KKworICAgIHJldHVybiBudW1iZXJPZkRpZ2l0czsKK30KKworRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50OjpSYW5nZTo6UmFuZ2UoaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQor
ICAgIDogbWF4aW11bShtYXhpbXVtKQorICAgICwgbWluaW11bShtaW5pbXVtKQoreworICAgIEFT
U0VSVChtaW5pbXVtIDw9IG1heGltdW0pOworfQorCitpbnQgRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50OjpSYW5nZTo6ZW5zdXJlSW5SYW5nZShpbnQgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KHZhbHVlLCBtaW5pbXVtKSwgbWF4aW11bSk7Cit9CisKK0Rh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KERv
Y3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBj
b25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkLCBpbnQgbWluaW11bSwgaW50IG1heGlt
dW0pCisgICAgOiBEYXRlVGltZUZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRs
ZXIsIHNoYWRvd1BzZXVkb0lkKQorICAgICwgbV9sYXN0RGlnaXRDaGFyVGltZSgwKQorICAgICwg
bV9yYW5nZShtaW5pbXVtLCBtYXhpbXVtKQorICAgICwgbV92YWx1ZSgwKQorICAgICwgbV9oYXNW
YWx1ZShmYWxzZSkKK3sKK30KKworc3RhdGljIGludCBtYXBFdmVudFRvRGlnaXQoRXZlbnQqIGV2
ZW50KQoreworICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICByZXR1
cm4gLTE7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KS0+
a2V5Q29kZSgpIC0gJzAnOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgY29uc3QgaW50IGRpZ2l0
ID0gbWFwRXZlbnRUb0RpZ2l0KGV2ZW50KTsKKyAgICBpZiAoZGlnaXQgPj0gMCAmJiBkaWdpdCA8
PSA5KSB7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3du
RXZlbnQpIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAg
ICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9oYXNWYWx1ZSAmJiBpc0NvbnRpbnVvc0V2ZW50KCpl
dmVudCkgPyBtX3ZhbHVlICogMTAgKyBkaWdpdCA6IGRpZ2l0LCBEaXNwYXRjaEV2ZW50KTsKKyAg
ICAgICAgICAgIGlmIChtX3ZhbHVlICogMTAgPiBtX3JhbmdlLm1heGltdW0gJiYgbV9maWVsZEV2
ZW50SGFuZGxlcikgeworICAgICAgICAgICAgICAgIG1fZmllbGRFdmVudEhhbmRsZXItPmZvY3Vz
T25OZXh0RmllbGQoKTsKKyAgICAgICAgICAgICAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUg
PSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUgPSAwOworICAgIERhdGVUaW1lRmllbGRFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKworYm9vbCBEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNWYWx1ZTsK
K30KKworYm9vbCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmlzQ29udGludW9zRXZlbnQo
Y29uc3QgRXZlbnQmIGV2ZW50KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIENvbnRpbnVv
dXNFdmVudFRocmVzaG9sZCA9IDcwMDsKKyAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wKCkgLSBt
X2xhc3REaWdpdENoYXJUaW1lIDwgQ29udGludW91c0V2ZW50VGhyZXNob2xkOworfQorCit2b2lk
IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0VtcHR5KEV2ZW50QmVoYXZp
b3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3ZhbHVlID0gMDsKKyAgICBtX2hhc1ZhbHVlID0g
aXNSZWFkT25seSgpOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKKyAg
ICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKGludCB2YWx1ZSwgRXZlbnRCZWhhdmlvciBldmVu
dEJlaGF2aW9yKQoreworICAgIG1fdmFsdWUgPSBlbnN1cmVJblJhbmdlKHZhbHVlKTsKKyAgICBt
X2hhc1ZhbHVlID0gdHJ1ZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7
CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50OjpzdGVwRG93bigpCit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAg
IHNldFZhbHVlQXNJbnRlZ2VyKG1fdmFsdWUgPT0gbV9yYW5nZS5taW5pbXVtID8gbV9yYW5nZS5t
YXhpbXVtIDogZW5zdXJlSW5SYW5nZShtX3ZhbHVlIC0gMSksIERpc3BhdGNoRXZlbnQpOworICAg
IGVsc2UKKyAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9yYW5nZS5tYXhpbXVtLCBEaXNwYXRj
aEV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCgp
Cit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fdmFs
dWUgPT0gbV9yYW5nZS5tYXhpbXVtID8gbV9yYW5nZS5taW5pbXVtIDogZW5zdXJlSW5SYW5nZSht
X3ZhbHVlICsgMSksIERpc3BhdGNoRXZlbnQpOworICAgIGVsc2UKKyAgICAgICAgc2V0VmFsdWVB
c0ludGVnZXIobV9yYW5nZS5taW5pbXVtLCBEaXNwYXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25zdAoreworICAgIGlmICghbV9o
YXNWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBpZiAobV9yYW5n
ZS5tYXhpbXVtID4gOTk5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobV92YWx1ZSk7
CisKKyAgICBpZiAobV9yYW5nZS5tYXhpbXVtID4gOTkpCisgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiJTAzZCIsIG1fdmFsdWUpOworCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIl
MDJkIiwgbV92YWx1ZSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZh
bHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNWYWx1ZSA/IG1fdmFsdWUg
OiAtMTsKK30KKworU3RyaW5nIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZh
bHVlKCkgY29uc3QKK3sKKyAgICBpZiAobV9oYXNWYWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVl
KCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChpbnQgbnVtYmVyT2ZE
YXNocyA9IHN0ZDo6bWF4KGRpc3BsYXlTaXplT2ZOdW1iZXIobV9yYW5nZS5tYXhpbXVtKSwgZGlz
cGxheVNpemVPZk51bWJlcihtX3JhbmdlLm1pbmltdW0pKTsgbnVtYmVyT2ZEYXNoczsgLS1udW1i
ZXJPZkRhc2hzKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhNGJiNzZhY2IwMTJiNjQ0ZGQ0NDI5NDg1YWNlYjM2
YzQ4YTRhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnRfaAorI2RlZmluZSBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElN
RV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgcmVw
cmVzZW50cyBudW1lcmljIGZpZWxkIG9mIGRhdGUgdGltZSBmb3JtYXQuCisvLyBUaGlzIGNsYXNz
IG1heSBiZSB1c2VkIGZvcjoKKy8vICAtIG1pbnV0ZQorLy8gIC0gbWlsbGlzZWNvbmQKKy8vICAt
IG1vbnRoCisvLyAgLSBzZWNvbmQKKy8vICAtIHllYXIKK2NsYXNzIERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAg
IHN0cnVjdCBSYW5nZSB7CisgICAgICAgIFJhbmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7
CisgICAgICAgIGludCBlbnN1cmVJblJhbmdlKGludCkgY29uc3Q7CisKKyAgICAgICAgaW50IG1h
eGltdW07CisgICAgICAgIGludCBtaW5pbXVtOworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKKyAgICBp
bnQgZW5zdXJlSW5SYW5nZShpbnQgdmFsdWUpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UuZW5zdXJl
SW5SYW5nZSh2YWx1ZSk7IH0KKyAgICBjb25zdCBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVy
biBtX3JhbmdlOyB9CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisg
ICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNo
Tm9FdmVudCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCBPVkVS
UklERSBGSU5BTDsKKworcHJpdmF0ZToKKyAgICBib29sIGlzQ29udGludW9zRXZlbnQoY29uc3Qg
RXZlbnQmKSBjb25zdDsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4K
KyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJ
TkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRW1wdHkoRXZlbnRCZWhhdmlvcikgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
U3RyaW5nIHZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBET01UaW1lU3RhbXAg
bV9sYXN0RGlnaXRDaGFyVGltZTsKKyAgICBjb25zdCBSYW5nZSBtX3JhbmdlOworICAgIGludCBt
X3ZhbHVlOworICAgIGJvb2wgbV9oYXNWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmUw
MTQxZTZhMmQwNmI5NWE5NjllMjA4MzIxMzA1N2ViYTZhZDhiMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1
ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIktleWJvYXJk
RXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwg
RmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBBdG9taWNTdHJpbmcm
IHNoYWRvd1BzZXVkb0lkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3ltYm9scykKKyAgICA6IERh
dGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgc2hhZG93UHNl
dWRvSWQpCisgICAgLCBtX3N5bWJvbHMoc3ltYm9scykKKyAgICAsIG1fc2VsZWN0ZWRJbmRleCgt
MSkKK3sKKyAgICBBU1NFUlQoIXN5bWJvbHMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
K3sKKyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5
Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCk7CisgICAgICAg
IGNvbnN0IGludCByYXdDaGFyQ29kZSA9IGtleWJvYXJkRXZlbnQtPmNoYXJDb2RlKCk7CisgICAg
ICAgIGNvbnN0IGludCBjaGFyQ29kZSA9IHJhd0NoYXJDb2RlID49ICdhJyAmJiByYXdDaGFyQ29k
ZSA8PSAneicgPyByYXdDaGFyQ29kZSArICdBJyAtICdhJyA6IHJhd0NoYXJDb2RlOworICAgICAg
ICBpZiAoY2hhckNvZGUgPj0gJ0EnICYmIGNoYXJDb2RlIDw9ICdaJykgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zeW1ib2xzLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGlmIChtX3N5bWJvbHNbaW5kZXhdWzBdID09IGNoYXJDb2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICAgICAgICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihpbmRleCwgRGlzcGF0Y2hFdmVudCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudDo6aGFzVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW5kZXgg
Pj0gMDsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFz
RW1wdHkoRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fc2VsZWN0ZWRJbmRl
eCA9IGludmFsaWRJbmRleDsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7
Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVn
ZXIoaW50IG5ld1NlbGVjdGVkSW5kZXgsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sK
KyAgICBtX3NlbGVjdGVkSW5kZXggPSBzdGQ6Om1heCgwLCBzdGQ6Om1pbihuZXdTZWxlY3RlZElu
ZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KG1fc3ltYm9scy5zaXplKCkgLSAxKSkpOworICAgIHVwZGF0
ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGlj
RmllbGRFbGVtZW50OjpzdGVwRG93bigpCit7CisgICAgY29uc3QgaW50IHNpemUgPSBtX3N5bWJv
bHMuc2l6ZSgpOworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9zZWxlY3Rl
ZEluZGV4ICsgc2l6ZSAtIDEpICUgc2l6ZSA6IHNpemUgLSAxOworICAgIHVwZGF0ZVZpc2libGVW
YWx1ZShEaXNwYXRjaEV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50OjpzdGVwVXAoKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9z
ZWxlY3RlZEluZGV4ICsgMSkgJSBtX3N5bWJvbHMuc2l6ZSgpIDogMDsKKyAgICB1cGRhdGVWaXNp
YmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5
bWJvbHNbbV9zZWxlY3RlZEluZGV4XSA6IGVtcHR5U3RyaW5nKCk7Cit9CisKK2ludCBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2VsZWN0ZWRJbmRleDsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBt
X3N5bWJvbHNbbV9zZWxlY3RlZEluZGV4XSA6ICItLSI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY2NjM1ZjE0MTY5
ZjNkMzQ0ZTNlMTViNjAzNzA5MTcwMTAxMWEwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaApAQCAtMCww
ICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudF9oCisKKyNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRl
VGltZUZpZWxkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQgaXMgdXNlZCBmb3IgcGVyaW9kIGZpZWxkIG9mIGRhdGEgdGlt
ZSBmb3JtYXQuCitjbGFzcyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IDogcHVibGljIERh
dGVUaW1lRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50KTsKKworcHJvdGVjdGVkOgorICAgIERhdGVUaW1lU3ltYm9saWNG
aWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IEF0b21pY1N0
cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
QXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUg
RklOQUw7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGludCBpbnZhbGlkSW5kZXggPSAt
MTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZp
cnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFz
RW1wdHkoRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUgRklOQUw7Cisg
ICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2
b2lkIHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBj
b25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBj
b25zdCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1fc3ltYm9s
czsKKyAgICBpbnQgbV9zZWxlY3RlZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157601</attachid>
            <date>2012-08-09 18:05:32 -0700</date>
            <delta_ts>2012-08-09 18:22:21 -0700</delta_ts>
            <desc>Patch 5</desc>
            <filename>bug-92960-20120810100504.patch</filename>
            <type>text/plain</type>
            <size>65400</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFlMWViY2Q0ZWE2NzYz
M2QyYjEwNzk3ODQwOThiOWM2M2I3ZjVmOC4uNGY4NzZjZjE5ZTIwYmJlZjdkMGNmMDdkOTg3MDE1
NzMxNTA1MjdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOC0wOSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJ
IGZvciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVy
IG9mIG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1l
RmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25k
CisgICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9y
IG1pbnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNl
IGNsYXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkK
KyAgICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
IGJ1aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3Qg
Y2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGlu
Y2x1ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwv
c2hhZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwg
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwK
KyAgICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0QnVpbGRlcjo6YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0QnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRl
cjo6bmVlZE1pbGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEJ1aWxkZXI6OnZpc2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVp
bGRlcjo6bmVlZFNlY29uZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1
aWxkZXI6OnZpc2l0TGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50OjpFZGl0Q29udHJvbE93bmVyOjp+RWRpdENvbnRyb2xPd25lcik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpEYXRlVGltZUVkaXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6On5EYXRlVGltZUVkaXRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6IENhbGxl
ZCB3aGVuIG93bmVyJ3MgZGlzYWJsZWQgc3RhdGUgaXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNGaWVsZEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRWYWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmlzRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRFbGVtZW50OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6bmV4dEZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6cHJldmlvdXNGaWVsZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5U3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIn
cyByZWFkT25seSBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6cmVzZXRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdEVsZW1lbnQ6OnVwZGF0ZVVJU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cv
RGF0ZVRpbWVFZGl0RWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lRWRpdEVsZW1l
bnQpOgorICAgICAgICAoRWRpdENvbnRyb2xPd25lcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRFbGVtZW50OjpyZW1vdmVFZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRhdGVUaW1l
RmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVt
ZW50OjpkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OmZvY3VzT25OZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OnNldFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RmllbGRFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OnZhbHVlQXNEb3VibGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93
L0RhdGVUaW1lRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQpOgorICAgICAgICAoRmllbGRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnJlbW92ZUV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6dW5pdEluTWls
bGlzZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpE
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3Vy
RmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmll
bGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lSG91ckZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbGxp
c2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNv
bmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbGxp
c2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVNaW51dGVG
aWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVu
dDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaW51dGVGaWVs
ZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlz
ZWNvbmQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk6CisgICAgICAgIChEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxk
RWxlbWVudCk6CisgICAgICAgIChEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCk6CisgICAgICAg
IChEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpk
aXNwbGF5U2l6ZU9mTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUluUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYW5k
bGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmVuc3VyZUluUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpyYW5nZSk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVw
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVl
QXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQpOgorCiAyMDEyLTA4LTA5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgU2FuZGJveGluZyB2aWV3IHNvdXJjZSBkb2N1bWVudHMgaXMgaW5lZmZlY3RpdmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCBiNDljMzIwMzE1OWRhZGYwMmIyYTcwYzdjNGU5Y2YzM2QwMTI1
MmI4Li4zMTJhNDMyYWJlYjBlYzJjYTU2M2RlZDMzYWJiODExOTc3ZTAxYmU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC01NzQyLDYgKzU3NDIsMTYgQEAKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9D
b250ZW50RGlzdHJpYnV0b3IuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNl
bGVjdG9yUXVlcnkuY3BwJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50
LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oJywK
KyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHAnLAorICAg
ICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmgnLAorICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5jcHAnLAorICAgICAgICAgICAg
J2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oJywKKyAgICAgICAgICAgICdodG1s
L3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaCcsCisgICAgICAgICAgICAn
aHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAnLAorICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCcsCiAgICAgICAg
ICAgICAnaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwJywKICAgICAgICAgICAg
ICdodG1sL3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5oJywKICAgICAgICAgICAgICdodG1s
L3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQzZmQ5YmE3
NTEzZjZkZmFhZTI0MTEwYWNkYTY5NmZjOTI3N2UxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEs
NDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJM
RShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lRWRp
dEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRGF0
ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVGb3JtYXQuaCIKKyNpbmNs
dWRlICJEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5k
bGVyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5o
IgorI2luY2x1ZGUgIkxvY2FsaXplZERhdGUuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWROdW1iZXIu
aCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU3RlcFJhbmdlLmgiCisjaW5j
bHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOworCitjbGFzcyBEYXRlVGltZUVkaXRCdWlsZGVyIDogcHJpdmF0ZSBE
YXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBEYXRlVGltZUVkaXRC
dWlsZGVyKERhdGVUaW1lRWRpdEVsZW1lbnQqLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIGJv
b2wgYnVpbGQoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBuZWVkU2Vjb25kRmllbGQoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZEZpZWxkKFBhc3NSZWZQdHI8RGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ+KSBjb25zdDsKKyAgICBib29sIG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3Q7
CisgICAgYm9vbCBuZWVkTWludXRlRmllbGQoKSBjb25zdDsKKworICAgIC8vIERhdGVUaW1lRm9y
bWF0OjpUb2tlbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZpZWxk
KERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUsIGludCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmKSBPVkVSUklERSBGSU5BTDsKKwor
ICAgIERhdGVUaW1lRWRpdEVsZW1lbnQqIG1fZWRpdEVsZW1lbnQ7CisgICAgY29uc3QgU3RlcFJh
bmdlJiBtX3N0ZXBSYW5nZTsKK307CisKK0RhdGVUaW1lRWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRp
dEJ1aWxkZXIoRGF0ZVRpbWVFZGl0RWxlbWVudCogZWxlbW50LCBjb25zdCBTdGVwUmFuZ2UmIHN0
ZXBSYW5nZSkKKyAgICA6IG1fZWRpdEVsZW1lbnQoZWxlbW50KQorICAgICwgbV9zdGVwUmFuZ2Uo
c3RlcFJhbmdlKQoreworfQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OmFkZEZpZWxkKFBh
c3NSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IGZpZWxkKSBjb25zdAoreworICAgIGlmICht
X2VkaXRFbGVtZW50LT5tX2ZpZWxkcy5zaXplKCkgPT0gbV9lZGl0RWxlbWVudC0+bV9maWVsZHMu
Y2FwYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZWRpdEVsZW1lbnQtPm1fZmllbGRz
LmFwcGVuZChmaWVsZC5nZXQoKSk7CisgICAgbV9lZGl0RWxlbWVudC0+YXBwZW5kQ2hpbGQoZmll
bGQpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OmJ1aWxkKGNvbnN0IFN0cmluZyYg
Zm9ybWF0U3RyaW5nKQoreworICAgIG1fZWRpdEVsZW1lbnQtPnJlc2V0TGF5b3V0KCk7CisgICAg
cmV0dXJuIERhdGVUaW1lRm9ybWF0OjpwYXJzZShmb3JtYXRTdHJpbmcsICp0aGlzKTsKK30KKwor
Ym9vbCBEYXRlVGltZUVkaXRCdWlsZGVyOjpuZWVkTWlsbGlzZWNvbmRGaWVsZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKHN0YXRpY19jYXN0
PGludD4obXNQZXJTZWNvbmQpKS5pc1plcm8oKQorICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3Rl
cCgpLnJlbWFpbmRlcihzdGF0aWNfY2FzdDxpbnQ+KG1zUGVyU2Vjb25kKSkuaXNaZXJvKCk7Cit9
CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8
aW50Pihtc1BlckhvdXIpKS5pc1plcm8oKQorICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3RlcCgp
LnJlbWFpbmRlcihzdGF0aWNfY2FzdDxpbnQ+KG1zUGVySG91cikpLmlzWmVybygpOworfQorCit2
b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZSBmaWVsZFR5cGUsIGludCkKK3sKKyAgICBEb2N1bWVudCogY29uc3QgZG9jdW1lbnQgPSBt
X2VkaXRFbGVtZW50LT5kb2N1bWVudCgpOworCisgICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKKyAg
ICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTE6CisgICAgICAgIGFkZEZpZWxk
KERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqbV9lZGl0RWxlbWVu
dCwgMCwgMTEpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlSG91cjEyOgorICAgICAgICBhZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCwgKm1fZWRpdEVsZW1lbnQsIDEsIDEyKSk7CisgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMzoKKyAgICAg
ICAgYWRkRmllbGQoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsICpt
X2VkaXRFbGVtZW50LCAwLCAyMykpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CisgICAgICAgIGFkZEZpZWxkKERhdGVUaW1lSG91
ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqbV9lZGl0RWxlbWVudCwgMSwgMjQpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlu
dXRlOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IGZpZWxk
ID0gRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgKm1fZWRpdEVs
ZW1lbnQpOworICAgICAgICBhZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmICghbmVlZE1pbnV0
ZUZpZWxkKCkpCisgICAgICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDoK
KyAgICAgICAgYWRkRmllbGQoRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQsICptX2VkaXRFbGVtZW50LCB0aW1lQU1QTUxhYmVscygpKSk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDogeworICAgICAgICBS
ZWZQdHI8RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gRGF0ZVRpbWVTZWNvbmRG
aWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgKm1fZWRpdEVsZW1lbnQpOworICAgICAgICBh
ZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmICghbmVlZFNlY29uZEZpZWxkKCkpCisgICAgICAg
ICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKworICAgICAgICBpZiAobmVlZE1pbGxpc2Vjb25k
RmllbGQoKSkgeworICAgICAgICAgICAgdmlzaXRMaXRlcmFsKGxvY2FsaXplZERlY2ltYWxTZXBh
cmF0b3IoKSk7CisgICAgICAgICAgICB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVGcmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZDog
eworICAgICAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmllbGQg
PSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsICptX2Vk
aXRFbGVtZW50KTsKKyAgICAgICAgYWRkRmllbGQoZmllbGQpOworICAgICAgICBpZiAoIW5lZWRN
aWxsaXNlY29uZEZpZWxkKCkpCisgICAgICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZFNlY29uZEZpZWxkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc3RhdGlj
X2Nhc3Q8aW50Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpCisgICAgICAgIHx8ICFtX3N0ZXBSYW5n
ZS5zdGVwKCkucmVtYWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJNaW51dGUpKS5pc1plcm8o
KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdExpdGVyYWwoY29uc3QgU3Ry
aW5nJiB0ZXh0KQoreworICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpKTsKKyAgICBtX2VkaXRFbGVt
ZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUobV9lZGl0RWxlbWVudC0+ZG9jdW1lbnQoKSwg
dGV4dCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGVUaW1l
RWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKCkKK3sKK30K
KworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCogZG9j
dW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRDb250cm9sT3duZXIpCisgICAgOiBIVE1MRGl2
RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9lZGl0Q29udHJvbE93bmVyKCZlZGl0
Q29udHJvbE93bmVyKQorICAgICwgbV9zcGluQnV0dG9uKDApCisgICAgLCBtX2ZvY3VzRmllbGRJ
bmRleChpbnZhbGlkRmllbGRJbmRleCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21p
Y1N0cmluZywgZGF0ZVRpbWVFZGl0UHNldWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0Iikp
OworICAgIHNldFNoYWRvd1BzZXVkb0lkKGRhdGVUaW1lRWRpdFBzZXVkb0lkKTsKK30KKworRGF0
ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQoKQoreworICAgIGZvciAoc2l6
ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxk
SW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxkSW5kZXhdLT5yZW1vdmVFdmVudEhhbmRsZXIo
KTsKKworICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAgIG1fc3BpbkJ1dHRvbi0+cmVtb3Zl
U3RlcEFjdGlvbkhhbmRsZXIoKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50
PiBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFZGl0Q29u
dHJvbE93bmVyJiBlZGl0Q29udHJvbE93bmVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkK
K3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRSZWYo
bmV3IERhdGVUaW1lRWRpdEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sT3duZXIpKTsKKyAg
ICBjb250YWluZXItPmxheW91dChzdGVwUmFuZ2UpOworICAgIHJldHVybiBjb250YWluZXIucmVs
ZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFu
Z2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVtZW50
KiBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEF0KGludCBmaWVsZEluZGV4KSBjb25zdAorewor
ICAgIHJldHVybiBmaWVsZEluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaWVsZElu
ZGV4KSA8IG1fZmllbGRzLnNpemUoKSA/IG1fZmllbGRzW2ZpZWxkSW5kZXhdIDogMDsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50Ojpmb2N1c0ZpZWxkQXQoaW50IG5ld0ZvY3VzRmllbGRJ
bmRleCkKK3sKKyAgICBpZiAobV9mb2N1c0ZpZWxkSW5kZXggPT0gbmV3Rm9jdXNGaWVsZEluZGV4
KQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgbmV3
Rm9jdXNGaWVsZCA9IGZpZWxkQXQobmV3Rm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAobmV3Rm9j
dXNGaWVsZCAmJiBuZXdGb2N1c0ZpZWxkLT5pc1JlYWRPbmx5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBjdXJyZW50Rm9jdXNGaWVsZCA9IGZp
ZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpOworCisgICAgaWYgKGN1cnJlbnRGb2N1c0ZpZWxkKQor
ICAgICAgICBjdXJyZW50Rm9jdXNGaWVsZC0+c2V0Rm9jdXMoZmFsc2UpOworCisgICAgaWYgKCFu
ZXdGb2N1c0ZpZWxkKSB7CisgICAgICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gaW52YWxpZEZpZWxk
SW5kZXg7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2ZvY3VzRmllbGRJbmRleCA9
IG5ld0ZvY3VzRmllbGRJbmRleDsKKyAgICBuZXdGb2N1c0ZpZWxkLT5zZXRGb2N1cyh0cnVlKTsK
K30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGlzRGlzYWJsZWQoKSB8fCBpc1Jl
YWRPbmx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZmllbGRBdChtX2ZvY3VzRmll
bGRJbmRleCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBl
KCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmll
cigpOworCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkxlZnQiKSB7CisgICAgICAgIGtleWJv
YXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIGNvbnN0IGludCBmaWVsZElu
ZGV4ID0gcHJldmlvdXNGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZpZWxkSW5k
ZXgpKQorICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlJpZ2h0IikgeworICAgICAg
ICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBjb25zdCBpbnQg
ZmllbGRJbmRleCA9IG5leHRGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZpZWxk
SW5kZXgpKQorICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOSIpIHsKKyAg
ICAgICAgY29uc3QgaW50IGZpZWxkSW5kZXggPSBrZXlib2FyZEV2ZW50LT5nZXRNb2RpZmllclN0
YXRlKCJTaGlmdCIpID8gcHJldmlvdXNGaWVsZEluZGV4KCkgOiBuZXh0RmllbGRJbmRleCgpOwor
ICAgICAgICBpZiAoZmllbGRBdChmaWVsZEluZGV4KSkgeworICAgICAgICAgICAga2V5Ym9hcmRF
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGZvY3VzRmllbGRBdChmaWVs
ZEluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZFZhbHVlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1f
ZWRpdENvbnRyb2xPd25lcikKKyAgICAgICAgbV9lZGl0Q29udHJvbE93bmVyLT5lZGl0Q29udHJv
bFZhbHVlQ2hhbmdlZCgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3VzT25O
ZXh0RmllbGQoKQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJ
bmRleCkKKyAgICAgICAgZm9jdXNGaWVsZEF0KG5leHRGaWVsZEluZGV4KCkpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogbW91c2VF
dmVudCkKK3sKKyAgICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQgfHwgbW91c2VFdmVudC0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgTm9kZSogY29uc3QgcmVsYXRlZFRhcmdldCA9IG1vdXNlRXZlbnQt
PnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmll
bGRJbmRleCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVsZEluZGV4KSB7CisgICAgICAgIGlmICht
X2ZpZWxkc1tmaWVsZEluZGV4XSA9PSByZWxhdGVkVGFyZ2V0KSB7CisgICAgICAgICAgICBtb3Vz
ZUV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZp
ZWxkSW5kZXgpOworICAgICAgICAgICAgaWYgKG1fZWRpdENvbnRyb2xPd25lcikKKyAgICAgICAg
ICAgICAgICBtX2VkaXRDb250cm9sT3duZXItPmVkaXRDb250cm9sTW91c2VGb2N1cygpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0
RWxlbWVudDo6aXNEaXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWRpdENvbnRyb2xP
d25lciAmJiBtX2VkaXRDb250cm9sT3duZXItPmlzRWRpdENvbnRyb2xPd25lckRpc2FibGVkKCk7
Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aXNSZWFkT25seSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZWRpdENvbnRyb2xPd25lciAmJiBtX2VkaXRDb250cm9sT3duZXItPmlzRWRp
dENvbnRyb2xPd25lclJlYWRPbmx5KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
bGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQoreworICAgIERhdGVUaW1lRmllbGRF
bGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7Cisg
ICAgZm9jdXNGaWVsZEF0KGludmFsaWRGaWVsZEluZGV4KTsKKworICAgIERhdGVUaW1lRWRpdEJ1
aWxkZXIgYnVpbGRlcih0aGlzLCBzdGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmluZyBkYXRlVGlt
ZUZvcm1hdCA9IGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRUaW1lRm9ybWF0
VGV4dCgpIDogbG9jYWxpemVkU2hvcnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlmICghYnVpbGRl
ci5idWlsZChkYXRlVGltZUZvcm1hdCkgfHwgbV9maWVsZHMuaXNFbXB0eSgpKQorICAgICAgICBi
dWlsZGVyLmJ1aWxkKGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyAiSEg6bW06c3MiIDogIkhI
Om1tIik7CisKKyAgICBSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IHNwaW5CdXR0b24gPSBTcGlu
QnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCksICp0aGlzKTsKKyAgICBtX3NwaW5CdXR0
b24gPSBzcGluQnV0dG9uLmdldCgpOworICAgIGFwcGVuZENoaWxkKHNwaW5CdXR0b24pOworCisg
ICAgaWYgKGZvY3VzRmllbGQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7
IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkgeworICAgICAgICAg
ICAgaWYgKGZvY3VzRmllbGQgPT0gbV9maWVsZHNbZmllbGRJbmRleF0pIHsKKyAgICAgICAgICAg
ICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBEYXRlVGltZUVkaXRFbGVt
ZW50OjpuZXh0RmllbGRJbmRleCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZm9jdXNGaWVsZElu
ZGV4ICE9IGludmFsaWRGaWVsZEluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0g
bV9mb2N1c0ZpZWxkSW5kZXggKyAxOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2Zp
ZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25s
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZpZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiBt
X2ZpZWxkcy5zaXplKCk7Cit9CisKK2ludCBEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0Zp
ZWxkSW5kZXgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZh
bGlkRmllbGRJbmRleCk7CisgICAgZm9yIChpbnQgZmllbGRJbmRleCA9IG1fZm9jdXNGaWVsZElu
ZGV4IC0gMTsgZmllbGRJbmRleCA+PSAwOyAtLWZpZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKCFt
X2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGZp
ZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRF
bGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCgpCit7CisgICAgdXBkYXRlVUlTdGF0ZSgpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5b3V0KCkKK3sKKyAgICBtX2Zp
ZWxkcy5jbGVhcigpOworICAgIG1fc3BpbkJ1dHRvbiA9IDA7CisgICAgbV9mb2N1c0ZpZWxkSW5k
ZXggPSBpbnZhbGlkRmllbGRJbmRleDsKKyAgICByZW1vdmVDaGlsZHJlbigpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQor
eworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50KSB7Cisg
ICAgICAgIGlmICghaXNEaXNhYmxlZCgpICYmICFpc1JlYWRPbmx5KCkgJiYgbV9mb2N1c0ZpZWxk
SW5kZXggPT0gaW52YWxpZEZpZWxkSW5kZXgpCisgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoMCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYmx1ckV2ZW50KSB7CisgICAgICAgIGZvY3VzRmllbGRBdChpbnZhbGlkRmllbGRJ
bmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VF
dmVudCgpKSB7CisgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVu
dCo+KGV2ZW50KSk7CisgICAgfSBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisg
ICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2
ZW50KSk7CisKKyAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmllbGRB
dChtX2ZvY3VzRmllbGRJbmRleCk7CisgICAgaWYgKCFmb2N1c0ZpZWxkKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb2N1c0ZpZWxkLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9u
ZW50cyYgZGF0ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRl
eCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVsZEluZGV4KQorICAgICAgICBtX2ZpZWxkc1tmaWVs
ZEluZGV4XS0+c2V0VmFsdWVBc0RhdGUoZGF0ZSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxl
bWVudDo6c2V0RW1wdHlWYWx1ZSgpCit7CisgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7
IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkKKyAgICAgICAgbV9m
aWVsZHNbZmllbGRJbmRleF0tPnNldEVtcHR5VmFsdWUoRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRp
c3BhdGNoTm9FdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRv
blN0ZXBEb3duKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3Vz
RmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVsZC0+
c3RlcERvd24oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3Rl
cFVwKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQg
PSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVsZC0+c3RlcFVw
KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6dXBkYXRlVUlTdGF0ZSgpCit7Cisg
ICAgaWYgKGlzRGlzYWJsZWQoKSB8fCBpc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgbV9zcGluQnV0
dG9uLT5yZWxlYXNlQ2FwdHVyZSgpOworICAgICAgICBmb2N1c0ZpZWxkQXQoaW52YWxpZEZpZWxk
SW5kZXgpOworICAgIH0KK30KKworZG91YmxlIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnZhbHVlQXNE
b3VibGUoKSBjb25zdAoreworICAgIGRvdWJsZSB2YWx1ZSA9IDA7CisKKyAgICBmb3IgKHNpemVf
dCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVsZElu
ZGV4KSB7CisgICAgICAgIGNvbnN0IERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmaWVsZCA9
IG1fZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICBpZiAoIWZpZWxkLT5oYXNWYWx1ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CisgICAgICAgIHZhbHVlICs9IGZpZWxkLT52YWx1ZUFzRG91YmxlKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVjZmJhZDk5YTM5M2Q0MTA2NGNhZTYwOTMyZmZmNWI1YTQxNmJjMTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVt
ZW50LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVU
aW1lRWRpdEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZUVkaXRFbGVtZW50X2gKKworI2lmIEVO
QUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1l
RmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0ZUNvbXBvbmVudHM7CitjbGFzcyBEYXRl
VGltZUVkaXRMYXlvdXRlcjsKK2NsYXNzIEtleWJvYXJkRXZlbnQ7CitjbGFzcyBNb3VzZUV2ZW50
OworY2xhc3MgU3RlcFJhbmdlOworCisvLyBEYXRlVGltZUVkaXRFbGVtZW50IGNsYXNzIGNvbnRh
aW5zIG51bWJlcmljIGZpZWxkIGFuZCBzeW1ib2xjIGZpZWxkIGZvcgorLy8gcmVwcmVzZW50aW5n
IGRhdGUgYW5kIHRpbWUsIHN1Y2ggYXMKKy8vICAtIFllYXIsIE1vbnRoLCBEYXkgT2YgTW9udGgK
Ky8vICAtIEhvdXIsIE1pbnV0ZSwgU2Vjb25kLCBNaWxsaXNlY29uZCwgQU0vUE0KK2NsYXNzIERh
dGVUaW1lRWRpdEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyLCBwcml2YXRlIFNwaW5CdXR0b25FbGVt
ZW50OjpTdGVwQWN0aW9uSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRp
bWVFZGl0RWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgRGF0ZVRpbWVFZGl0
QnVpbGRlcjsKKworICAgIC8vIEVkaXRDb250cm9sT3duZXIgaW1wbGVtZW50ZXIgbXVzdCBjYWxs
IHJlbW92ZUVkaXRDb250cm9sT3duZXIgd2hlbgorICAgIC8vIGl0IGRvZXNuJ3QgaGFuZGxlIGV2
ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNzIEVkaXRDb250cm9sT3duZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RWRpdENvbnRyb2xPd25lcigpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZWRpdENvbnRyb2xNb3VzZUZvY3VzKCkgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZWRpdENvbnRyb2xWYWx1ZUNoYW5nZWQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0VkaXRDb250cm9sT3duZXJEaXNhYmxlZCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmly
dHVhbCBib29sIGlzRWRpdENvbnRyb2xPd25lclJlYWRPbmx5KCkgY29uc3QgPSAwOworICAgIH07
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQqLCBFZGl0Q29udHJvbE93bmVyJiwgY29uc3QgU3RlcFJhbmdlJik7CisKKyAgICB2aXJ0
dWFsIH5EYXRlVGltZUVkaXRFbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAgICB2b2lkIGRpc2FibGVkU3RhdGVDaGFuZ2Vk
KCk7CisgICAgdm9pZCBsYXlvdXQoY29uc3QgU3RlcFJhbmdlJik7CisgICAgdm9pZCByZWFkT25s
eVN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgcmVtb3ZlRWRpdENvbnRyb2xPd25lcigpIHsgbV9l
ZGl0Q29udHJvbE93bmVyID0gMDsgfQorICAgIHZvaWQgc2V0RW1wdHlWYWx1ZSgpOworICAgIHZv
aWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKTsKKyAgICBkb3VibGUgdmFs
dWVBc0RvdWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgaW52
YWxpZEZpZWxkSW5kZXggPSAtMTsKKworICAgIC8vIERhdGV0aW1lIGNhbiBiZSByZXByZXNlbnQg
YXQgbW9zdCBmaXZlIGZpZWxkcywgc3VjaCBhcworICAgIC8vICAxLiB5ZWFyCisgICAgLy8gIDIu
IG1vbnRoCisgICAgLy8gIDMuIGRheS1vZi1tb250aAorICAgIC8vICA0LiBob3VyCisgICAgLy8g
IDUuIG1pbnV0ZQorICAgIC8vICA2LiBzZWNvbmQKKyAgICAvLyAgNy4gbWlsbGlzZWNvbmQKKyAg
ICAvLyAgOC4gQU0vUE0KKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1OdW1iZXJPZkZpZWxk
cyA9IDg7CisKKyAgICBEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiwgRWRpdENvbnRyb2xP
d25lciYpOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGZpZWxkQXQoaW50KSBjb25zdDsK
KyAgICB2b2lkIGZvY3VzRmllbGRBdChpbnQpOworICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
KTsKKyAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKKyAgICBib29sIGlzUmVhZE9ubHkoKSBj
b25zdDsKKyAgICBpbnQgbmV4dEZpZWxkSW5kZXgoKSBjb25zdDsKKyAgICBpbnQgcHJldmlvdXNG
aWVsZEluZGV4KCkgY29uc3Q7CisgICAgdm9pZCByZXNldExheW91dCgpOworICAgIHZvaWQgdXBk
YXRlVUlTdGF0ZSgpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRI
YW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZmllbGRWYWx1ZUNoYW5nZWQoKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpIE9WRVJS
SURFIEZJTkFMOworCisgICAgLy8gU3BpbkJ1dHRvbkVsZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVy
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc3BpbkJ1dHRvblN0ZXBEb3duKCkgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwVXAoKSBPVkVSUklERSBG
SU5BTDsKKworICAgIFZlY3RvcjxEYXRlVGltZUZpZWxkRWxlbWVudCosIG1heGltdW1OdW1iZXJP
ZkZpZWxkcz4gbV9maWVsZHM7CisgICAgRWRpdENvbnRyb2xPd25lciogbV9lZGl0Q29udHJvbE93
bmVyOworICAgIFNwaW5CdXR0b25FbGVtZW50KiBtX3NwaW5CdXR0b247CisgICAgaW50IG1fZm9j
dXNGaWVsZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkOTM2N2M3YTdlNjEyZDE2NTE1NDUyZmUyZmI1M2I4MzA2
NDNmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRl
VGltZUZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBM
RV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhh
bmRsZXIoKQoreworfQorCitEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRs
ZXIpCisgICAgOiBIVE1MRWxlbWVudChzcGFuVGFnLCBkb2N1bWVudCkKKyAgICAsIG1fZmllbGRF
dmVudEhhbmRsZXIoJmZpZWxkRXZlbnRIYW5kbGVyKQoreworfQorCit2b2lkIERhdGVUaW1lRmll
bGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAo
ZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJv
YXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpOworICAgICAgICBo
YW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRF
dmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVm
YXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKGtleWJvYXJkRXZlbnQpOworICAgICAgICBpZiAoa2V5
Ym9hcmRFdmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXli
b2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50KQoreworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBl
KCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmll
cigpOworCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iKSB7CisgICAgICAgIGtleWJv
YXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHN0ZXBEb3duKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7Cisg
ICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHN0ZXBV
cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0g
IlUrMDAwOCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgc2V0RW1wdHlWYWx1ZShEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgp
Cit7CisgICAgaWYgKG1fZmllbGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhh
bmRsZXItPmZvY3VzT25OZXh0RmllbGQoKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVu
dDo6aW5pdGlhbGl6ZShjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKQoreworICAg
IHNldFNoYWRvd1BzZXVkb0lkKHNoYWRvd1BzZXVkb0lkKTsKKyAgICBhcHBlbmRDaGlsZChUZXh0
OjpjcmVhdGUoZG9jdW1lbnQoKSwgdmlzaWJsZVZhbHVlKCkpKTsKK30KKworYm9vbCBEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNB
dHRyaWJ1dGUocmVhZG9ubHlBdHRyKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6
c2V0UmVhZE9ubHkoKQoreworICAgIC8vIFNldCBIVE1MIGF0dHJpYnV0ZSByZWFkb25seSB0byBj
aGFuZ2UgYXBwZXJhbmNlLgorICAgIHNldEJvb2xlYW5BdHRyaWJ1dGUocmVhZG9ubHlBdHRyLCB0
cnVlKTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3Ip
Cit7CisgICAgVGV4dCogY29uc3QgdGV4dE5vZGUgPSB0b1RleHQoZmlyc3RDaGlsZCgpKTsKKyAg
ICBjb25zdCBTdHJpbmcgbmV3VmlzaWJsZVZhbHVlID0gdmlzaWJsZVZhbHVlKCk7CisgICAgQVNT
RVJUKG5ld1Zpc2libGVWYWx1ZS5sZW5ndGgoKSA+IDApOworCisgICAgaWYgKHRleHROb2RlLT53
aG9sZVRleHQoKSA9PSBuZXdWaXNpYmxlVmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIHRl
eHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KG5ld1Zpc2libGVWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisKKyAgICBpZiAoZXZlbnRCZWhhdmlvciA9PSBEaXNwYXRjaEV2ZW50ICYmIG1fZmll
bGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhhbmRsZXItPmZpZWxkVmFsdWVD
aGFuZ2VkKCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6dmFsdWVBc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlQXNJbnRlZ2VyKCkpICogdW5pdEluTWlsbGlzZWNvbmQoKSA6IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGlt
ZUZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTc2MDZiY2YxNjRiNjRhYzZiMDk2NzMxMjFiYzIyNTQz
ODI3ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0
ZVRpbWVGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lRmllbGRFbGVt
ZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCisj
aW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEYXRlQ29tcG9uZW50czsKKworLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgaXMgYmFzZSBjbGFz
cyBvZiBkYXRlIHRpbWUgZmllbGQgZWxlbWVudC4KK2NsYXNzIERhdGVUaW1lRmllbGRFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGlt
ZUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBlbnVtIEV2ZW50QmVoYXZpb3IgeworICAg
ICAgICBEaXNwYXRjaE5vRXZlbnQsCisgICAgICAgIERpc3BhdGNoRXZlbnQsCisgICAgfTsKKwor
ICAgIC8vIEZpZWxkRXZlbnRIYW5kbGVyIGltcGxlbWVudGVyIG11c3QgY2FsbCByZW1vdmVFdmVu
dEhhbmRsZXIgd2hlbgorICAgIC8vIGl0IGRvZXNuJ3QgaGFuZGxlIGV2ZW50LCBlLmcuIGF0IGRl
c3RydWN0aW9uLgorICAgIGNsYXNzIEZpZWxkRXZlbnRIYW5kbGVyIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgfkZpZWxkRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBmaWVsZFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzT25O
ZXh0RmllbGQoKSA9IDA7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgPSAwOwor
ICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0OworICAgIHZvaWQgcmVtb3ZlRXZlbnRIYW5kbGVy
KCkgeyBtX2ZpZWxkRXZlbnRIYW5kbGVyID0gMDsgfQorICAgIHZvaWQgc2V0UmVhZE9ubHkoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RW1wdHlWYWx1ZShFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hO
b0V2ZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVD
b21wb25lbnRzJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQs
IEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RlcERvd24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpID0gMDsKKyAgICB2aXJ0
dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgor
ICAgIERhdGVUaW1lRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImKTsK
KyAgICB2b2lkIGZvY3VzT25OZXh0RmllbGQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgPSAwOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25z
dCBBdG9taWNTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgp
IGNvbnN0ID0gMDsKKyAgICB2b2lkIHVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9yKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2Fy
ZEV2ZW50Kik7CisgICAgRmllbGRFdmVudEhhbmRsZXIqIG1fZmllbGRFdmVudEhhbmRsZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZGUyMjE1MjIwOGMwZTJlN2UwMzJkMTgyZmJlNjdkZTg1Nzc3N2Y3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1l
bnRzLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNp
bmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudHMuaCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25l
bnRzLmgiCisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbXBtTGFiZWxzKQorICAgIDogRGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIGFtcG1MYWJlbHMpCit7Cit9
CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBEYXRlVGltZUFNUE1GaWVs
ZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBm
aWVsZEV2ZW50SGFuZGxlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFtcG1MYWJlbHMpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGFtcG1Qc3VlZG9JZCwgKCItd2Vi
a2l0LWRhdGV0aW1lLWVkaXQtYW1wbS1maWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVBTVBN
RmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZUFNUE1GaWVsZEVsZW1l
bnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBhbXBtTGFiZWxzKSk7CisgICAgZmllbGQt
PmluaXRpYWxpemUoYW1wbVBzdWVkb0lkKTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOwor
fQorCit2b2lkIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3Qg
RGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3Vy
KCkgPj0gMTIgPyAxIDogMCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6
OnVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJIb3VyICogMTI7
Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVIb3VyRmll
bGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBG
aWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQgbWF4
aW11bSkKKyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRF
dmVudEhhbmRsZXIsIG1pbmltdW0sIG1heGltdW0pCisgICAgLCBtX2FsaWdubWVudChtYXhpbXVt
ICsgbWF4aW11bSAlIDIpCit7CisgICAgQVNTRVJUKCghbWluaW11bSAmJiAobWF4aW11bSA9PSAx
MSB8fCBtYXhpbXVtID09IDIzKSkgfHwgKG1pbmltdW0gPT0gMSAmJiAobWF4aW11bSA9PSAxMiB8
fCBtYXhpbXVtID09IDI0KSkpOworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudD4gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQg
bWF4aW11bSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaG91clBz
dWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxkIikpOworICAgIFJlZlB0
cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1l
SG91ckZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIG1pbmltdW0sIG1h
eGltdW0pKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZShob3VyUHN1ZWRvSWQpOworICAgIHJldHVy
biBmaWVsZC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojpz
ZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAgICBzZXRWYWx1
ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFsdWVBc0hvdXIyMywgRXZlbnRCZWhhdmlvciBl
dmVudEJlaGF2aW9yKQoreworICAgIGNvbnN0IGludCB2YWx1ZSA9IFJhbmdlKDAsIDIzKS5lbnN1
cmVJblJhbmdlKHZhbHVlQXNIb3VyMjMpICUgbV9hbGlnbm1lbnQ7CisgICAgRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihyYW5nZSgpLm1pbmltdW0gJiYgIXZh
bHVlID8gbV9hbGlnbm1lbnQgOiB2YWx1ZSwgZXZlbnRCZWhhdmlvcik7Cit9CisKK2RvdWJsZSBE
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbXNQZXJIb3VyOworfQorCitpbnQgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2
YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgJSBtX2FsaWdubWVudCA6IC0x
OworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGVUaW1lTWlsbGlz
ZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCisgICAg
OiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
LCAwLCA5OTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxl
bWVudD4gRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBtaWxsaXNlY29uZFBzdWVkb0lkLCAoIi13
ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0
ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRp
bWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsK
KyAgICBmaWVsZC0+aW5pdGlhbGl6ZShtaWxsaXNlY29uZFBzdWVkb0lkKTsKKyAgICByZXR1cm4g
ZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1l
bnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNl
dFZhbHVlQXNJbnRlZ2VyKGRhdGUubWlsbGlzZWNvbmQoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGlt
ZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIDE7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQorICAg
IDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxl
ciwgMCwgNTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ+
IERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBG
aWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIG1pbnV0ZVBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUt
ZWRpdC1taW51dGUtZmllbGQiKSk7CisgICAgUmVmUHRyPERhdGVUaW1lTWludXRlRmllbGRFbGVt
ZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudChkb2N1
bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZShtaW51dGVQ
c3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGlt
ZU1pbnV0ZUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
IGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5taW51dGUoKSk7Cit9CisKK2Rv
dWJsZSBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQoKSBjb25z
dAoreworICAgIHJldHVybiBtc1Blck1pbnV0ZTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTZWNvbmRG
aWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRF
dmVudEhhbmRsZXIpCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQs
IGZpZWxkRXZlbnRIYW5kbGVyLCAwLCA1OSkKK3sKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZVNl
Y29uZEZpZWxkRWxlbWVudD4gRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1
bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgc2Vjb25kUHN1ZWRvSWQsICgi
LXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRp
bWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlcikpOworICAgIGZpZWxkLT5p
bml0aWFsaXplKHNlY29uZFBzdWVkb0lkKTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOwor
fQorCit2b2lkIERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25z
dCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihkYXRlLnNl
Y29uZCgpKTsKK30KKworZG91YmxlIERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5N
aWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1zUGVyU2Vjb25kOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41N2JjMWVmYTU1MmUz
NDgwNGQ2M2MzNTQwZGU2NjJhMGVmMDQ3YjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKQEAgLTAsMCArMSwxMTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lRmllbGRFbGVtZW50c19oCisj
ZGVmaW5lIERhdGVUaW1lRmllbGRFbGVtZW50c19oCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9U
SU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50IDogcHVibGlj
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZl
bnRIYW5kbGVyJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKworcHJpdmF0ZToKKyAgICBEYXRl
VGltZUFNUE1GaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+Jik7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlv
bnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRz
JikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBkb3VibGUgdW5pdEluTWlsbGlzZWNvbmQo
KSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307CisKKworLy8gRGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50IGlzIHVzZWQgZm9yIGhvdXIgZmllbGQgb2YgZGF0ZSB0aW1lIGZvcm1hdAorLy8gc3VwcG9y
dGluZyBmb2xsb3dpbmcgcGF0dGVybnM6CisvLyAgLSAwIHRvIDExCisvLyAgLSAxIHRvIDEyCisv
LyAgLSAwIHRvIDIzCisvLyAgLSAxIHRvIDI0CitjbGFzcyBEYXRlVGltZUhvdXJGaWVsZEVsZW1l
bnQgOiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQq
LCBGaWVsZEV2ZW50SGFuZGxlciYsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKK3ByaXZh
dGU6CisgICAgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhh
bmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworCisgICAgLy8gRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25z
dCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3Qg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCBP
VkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IGludCBtX2FsaWdubWVudDsKK307CisKK2NsYXNz
IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZU1pbGxpc2Vj
b25kRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVU
aW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRI
YW5kbGVyJik7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVu
dChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKKyAgICAvLyBEYXRlVGltZUZpZWxk
RWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0
IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBkb3VibGUgdW5p
dEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307CisKK2NsYXNzIERhdGVU
aW1lTWludXRlRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQp
OworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVNaW51dGVGaWVsZEVs
ZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKK3ByaXZhdGU6
CisgICAgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFu
ZGxlciYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZp
cnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURF
IEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZF
UlJJREUgRklOQUw7Cit9OworCitjbGFzcyBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCA6IHB1
YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBG
aWVsZEV2ZW50SGFuZGxlciYpOworCitwcml2YXRlOgorICAgIERhdGVUaW1lU2Vjb25kRmllbGRF
bGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImKTsKKworICAgIC8vIERhdGVUaW1l
RmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJs
ZSB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDBhZWU0N2JjZDY0ZTBhMDE3ZGZhYWQwYTU4YTAzYWY1MDc0NTM5NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVM
RFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmgiCisKKyNpbmNsdWRl
ICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBET01UaW1lU3RhbXAgdHlwZUFoZWFkVGltZW91dCA9IDEwMDA7CisKK3N0YXRp
YyBzaXplX3QgZGlzcGxheVNpemVPZk51bWJlcihpbnQgdmFsdWUpCit7CisgICAgQVNTRVJUKHZh
bHVlID49IDApOworCisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBp
bnQgbnVtYmVyT2ZEaWdpdHMgPSAwOworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICB2YWx1
ZSAvPSAxMDsKKyAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVtYmVyT2ZEaWdpdHM7Cit9CisKK0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6
OlJhbmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKKyAgICA6IG1heGltdW0obWF4aW11bSkK
KyAgICAsIG1pbmltdW0obWluaW11bSkKK3sKKyAgICBBU1NFUlQobWluaW11bSA8PSBtYXhpbXVt
KTsKK30KKworaW50IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUlu
UmFuZ2UoaW50IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heCh2
YWx1ZSwgbWluaW11bSksIG1heGltdW0pOworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxk
RXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgaW50IG1pbmltdW0sIGludCBtYXhpbXVt
KQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
KQorICAgICwgbV9sYXN0RGlnaXRDaGFyVGltZSgwKQorICAgICwgbV9yYW5nZShtaW5pbXVtLCBt
YXhpbXVtKQorICAgICwgbV92YWx1ZSgwKQorICAgICwgbV9oYXNWYWx1ZShmYWxzZSkKK3sKK30K
Kwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAgICBpZiAoaXNSZWFkT25seSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoa2V5Ym9hcmRFdmVudC0+dHlwZSgpICE9IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBVQ2hhciBjaGFy
Q29kZSA9IHN0YXRpY19jYXN0PFVDaGFyPihrZXlib2FyZEV2ZW50LT5jaGFyQ29kZSgpKTsKKyAg
ICBpZiAoY2hhckNvZGUgPCAnICcpCisgICAgICAgIHJldHVybjsKKworICAgIERPTVRpbWVTdGFt
cCBkZWx0YSA9IGtleWJvYXJkRXZlbnQtPnRpbWVTdGFtcCgpIC0gbV9sYXN0RGlnaXRDaGFyVGlt
ZTsKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKKworICAgIFN0cmluZyBudW1iZXIgPSBj
b252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihTdHJpbmcoJmNoYXJDb2RlLCAxKSk7CisgICAgY29u
c3QgaW50IGRpZ2l0ID0gbnVtYmVyWzBdIC0gJzAnOworICAgIGlmIChkaWdpdCA8IDAgfHwgZGln
aXQgPiA5KQorICAgICAgICByZXR1cm47CisKKyAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1faGFzVmFsdWUgJiYgZGVsdGEgPCB0
eXBlQWhlYWRUaW1lb3V0ID8gbV92YWx1ZSAqIDEwICsgZGlnaXQgOiBkaWdpdCwgRGlzcGF0Y2hF
dmVudCk7CisgICAgaWYgKG1fdmFsdWUgKiAxMCA+IG1fcmFuZ2UubWF4aW11bSkKKyAgICAgICAg
Zm9jdXNPbk5leHRGaWVsZCgpOworICAgIGVsc2UKKyAgICAgICAgbV9sYXN0RGlnaXRDaGFyVGlt
ZSA9IGtleWJvYXJkRXZlbnQtPnRpbWVTdGFtcCgpOworfQorCitib29sIERhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudDo6aGFzVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc1ZhbHVl
OworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0RW1wdHlWYWx1ZShF
dmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV92YWx1ZSA9IDA7CisgICAgbV9o
YXNWYWx1ZSA9IGlzUmVhZE9ubHkoKTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhh
dmlvcik7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFsdWUsIEV2ZW50QmVo
YXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3ZhbHVlID0gZW5zdXJlSW5SYW5nZSh2YWx1
ZSk7CisgICAgbV9oYXNWYWx1ZSA9IHRydWU7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50
QmVoYXZpb3IpOworICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUgPSAwOworfQorCit2b2lkIERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGlmIChtX2hhc1ZhbHVl
KQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3ZhbHVlID09IG1fcmFuZ2UubWluaW11bSA/
IG1fcmFuZ2UubWF4aW11bSA6IGVuc3VyZUluUmFuZ2UobV92YWx1ZSAtIDEpLCBEaXNwYXRjaEV2
ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWF4aW11
bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
OjpzdGVwVXAoKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICBzZXRWYWx1ZUFzSW50
ZWdlcihtX3ZhbHVlID09IG1fcmFuZ2UubWF4aW11bSA/IG1fcmFuZ2UubWluaW11bSA6IGVuc3Vy
ZUluUmFuZ2UobV92YWx1ZSArIDEpLCBEaXNwYXRjaEV2ZW50KTsKKyAgICBlbHNlCisgICAgICAg
IHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWluaW11bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisK
K1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAg
aWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5OSkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xvY2Fs
aXplZE51bWJlcihTdHJpbmc6Om51bWJlcihtX3ZhbHVlKSk7CisKKyAgICBpZiAobV9yYW5nZS5t
YXhpbXVtID4gOTkpCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoU3Ry
aW5nOjpmb3JtYXQoIiUwM2QiLCBtX3ZhbHVlKSk7CisKKyAgICByZXR1cm4gY29udmVydFRvTG9j
YWxpemVkTnVtYmVyKFN0cmluZzo6Zm9ybWF0KCIlMDJkIiwgbV92YWx1ZSkpOworfQorCitpbnQg
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faGFzVmFsdWUgPyBtX3ZhbHVlIDogLTE7Cit9CisKK1N0cmluZyBEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
aGFzVmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZSgpOworCisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGZvciAoaW50IG51bWJlck9mRGFzaHMgPSBzdGQ6Om1heChkaXNwbGF5U2l6
ZU9mTnVtYmVyKG1fcmFuZ2UubWF4aW11bSksIGRpc3BsYXlTaXplT2ZOdW1iZXIobV9yYW5nZS5t
aW5pbXVtKSk7IG51bWJlck9mRGFzaHM7IC0tbnVtYmVyT2ZEYXNocykKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJy0nKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
OTkzNTc2MTgzYmU4YTU3YTJmNzRiNjZlY2IyNDcyMjU2N2FkZGUzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1
ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHJlcHJlc2VudHMgbnVtZXJpYyBmaWVsZCBvZiBk
YXRlIHRpbWUgZm9ybWF0LgorLy8gVGhpcyBjbGFzcyBtYXkgYmUgdXNlZCBmb3I6CisvLyAgLSBt
aW51dGUKKy8vICAtIG1pbGxpc2Vjb25kCisvLyAgLSBtb250aAorLy8gIC0gc2Vjb25kCisvLyAg
LSB5ZWFyCitjbGFzcyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgUmFuZ2UgeworICAgICAgICBS
YW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworICAgICAgICBpbnQgZW5zdXJlSW5SYW5n
ZShpbnQpIGNvbnN0OworCisgICAgICAgIGludCBtYXhpbXVtOworICAgICAgICBpbnQgbWluaW11
bTsKKyAgICB9OworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0p
OworCisgICAgaW50IGVuc3VyZUluUmFuZ2UoaW50IHZhbHVlKSBjb25zdCB7IHJldHVybiBtX3Jh
bmdlLmVuc3VyZUluUmFuZ2UodmFsdWUpOyB9CisgICAgY29uc3QgUmFuZ2UmIHJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbV9yYW5nZTsgfQorCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVu
Y3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3Ig
PSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRl
Z2VyKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CisKK3ByaXZhdGU6CisgICAgLy8gRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW1wdHlW
YWx1ZShFdmVudEJlaGF2aW9yKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rl
cERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwKCkgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5B
TDsKKworICAgIERPTVRpbWVTdGFtcCBtX2xhc3REaWdpdENoYXJUaW1lOworICAgIGNvbnN0IFJh
bmdlIG1fcmFuZ2U7CisgICAgaW50IG1fdmFsdWU7CisgICAgYm9vbCBtX2hhc1ZhbHVlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42N2E3YzBlZmMyOWQ4Njc3Yzg2NmJhNzNjYmEyZTE5OThhODcz
YWUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9N
VUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5o
IgorCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1Vu
aWNvZGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwg
RmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3ltYm9scykKKyAgICA6IERhdGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2
ZW50SGFuZGxlcikKKyAgICAsIG1fc3ltYm9scyhzeW1ib2xzKQorICAgICwgbV9zZWxlY3RlZElu
ZGV4KC0xKQoreworICAgIEFTU0VSVCghc3ltYm9scy5pc0VtcHR5KCkpOworfQorCit2b2lkIERh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRF
dmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAgICBpZiAoa2V5Ym9hcmRFdmVudC0+dHlwZSgpICE9
IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25z
dCBVQ2hhciBjaGFyQ29kZSA9IFdURjo6VW5pY29kZTo6dG9Mb3dlcihrZXlib2FyZEV2ZW50LT5j
aGFyQ29kZSgpKTsKKyAgICBpZiAoY2hhckNvZGUgPCAnICcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zeW1ib2xzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICBpZiAoV1RGOjpVbmljb2RlOjp0b0xvd2VyKG1fc3ltYm9sc1tpbmRleF1bMF0pID09IGNoYXJD
b2RlKSB7CisgICAgICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihpbmRleCwgRGlzcGF0Y2hFdmVu
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6aGFzVmFsdWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3NlbGVjdGVkSW5kZXggPj0gMDsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpzZXRFbXB0eVZhbHVlKEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAg
ICBtX3NlbGVjdGVkSW5kZXggPSBpbnZhbGlkSW5kZXg7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVl
KGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6
OnNldFZhbHVlQXNJbnRlZ2VyKGludCBuZXdTZWxlY3RlZEluZGV4LCBFdmVudEJlaGF2aW9yIGV2
ZW50QmVoYXZpb3IpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gc3RkOjptYXgoMCwgc3RkOjpt
aW4obmV3U2VsZWN0ZWRJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihtX3N5bWJvbHMuc2l6ZSgpIC0g
MSkpKTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9CisKK3ZvaWQg
RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGNvbnN0IGlu
dCBzaXplID0gbV9zeW1ib2xzLnNpemUoKTsKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBoYXNWYWx1
ZSgpID8gKG1fc2VsZWN0ZWRJbmRleCArIHNpemUgLSAxKSAlIHNpemUgOiBzaXplIC0gMTsKKyAg
ICB1cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKCkKK3sKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBo
YXNWYWx1ZSgpID8gKG1fc2VsZWN0ZWRJbmRleCArIDEpICUgbV9zeW1ib2xzLnNpemUoKSA6IDA7
CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKERpc3BhdGNoRXZlbnQpOworfQorCitTdHJpbmcgRGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBo
YXNWYWx1ZSgpID8gbV9zeW1ib2xzW21fc2VsZWN0ZWRJbmRleF0gOiBlbXB0eVN0cmluZygpOwor
fQorCitpbnQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW5kZXg7Cit9CisKK1N0cmluZyBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUoKSBjb25zdAoreworICAgIHJldHVy
biBoYXNWYWx1ZSgpID8gbV9zeW1ib2xzW21fc2VsZWN0ZWRJbmRleF0gOiAiLS0iOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcxYzU2MDMwODhiOTcyOTk2MDMxZTY4M2QzNTU3ODJiMzEyZmVkZDUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lU3ltYm9saWNGaWVs
ZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMp
CisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IGlzIHVzZWQgZm9yIHBlcmlvZCBm
aWVsZCBvZiBkYXRhIHRpbWUgZm9ybWF0LgorY2xhc3MgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudCA6IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk7CisKK3Byb3RlY3RlZDoKKyAgICBE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXIm
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50
ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJSSURFIEZJTkFM
OworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZEluZGV4ID0gLTE7CisK
KyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAg
IHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRFbXB0
eVZhbHVlKEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJSSURFIEZJTkFMOwor
ICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
dm9pZCBzdGVwVXAoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgp
IGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBtX3N5bWJv
bHM7CisgICAgaW50IG1fc2VsZWN0ZWRJbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157604</attachid>
            <date>2012-08-09 18:22:27 -0700</date>
            <delta_ts>2012-08-09 22:35:02 -0700</delta_ts>
            <desc>Patch 6</desc>
            <filename>bug-92960-20120810102159.patch</filename>
            <type>text/plain</type>
            <size>65415</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFlMWViY2Q0ZWE2NzYz
M2QyYjEwNzk3ODQwOThiOWM2M2I3ZjVmOC4uNGY4NzZjZjE5ZTIwYmJlZjdkMGNmMDdkOTg3MDE1
NzMxNTA1MjdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOC0wOSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJ
IGZvciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVy
IG9mIG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1l
RmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25k
CisgICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9y
IG1pbnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNl
IGNsYXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkK
KyAgICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
IGJ1aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3Qg
Y2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGlu
Y2x1ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwv
c2hhZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwg
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwK
KyAgICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0QnVpbGRlcjo6YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0QnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRl
cjo6bmVlZE1pbGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEJ1aWxkZXI6OnZpc2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVp
bGRlcjo6bmVlZFNlY29uZEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1
aWxkZXI6OnZpc2l0TGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50OjpFZGl0Q29udHJvbE93bmVyOjp+RWRpdENvbnRyb2xPd25lcik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpEYXRlVGltZUVkaXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6On5EYXRlVGltZUVkaXRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6IENhbGxl
ZCB3aGVuIG93bmVyJ3MgZGlzYWJsZWQgc3RhdGUgaXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNGaWVsZEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRWYWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmlzRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRFbGVtZW50OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6bmV4dEZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6cHJldmlvdXNGaWVsZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5U3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIn
cyByZWFkT25seSBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6cmVzZXRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdEVsZW1lbnQ6OnVwZGF0ZVVJU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cv
RGF0ZVRpbWVFZGl0RWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lRWRpdEVsZW1l
bnQpOgorICAgICAgICAoRWRpdENvbnRyb2xPd25lcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRFbGVtZW50OjpyZW1vdmVFZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRhdGVUaW1l
RmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVt
ZW50OjpkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OmZvY3VzT25OZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OnNldFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RmllbGRFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OnZhbHVlQXNEb3VibGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93
L0RhdGVUaW1lRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQpOgorICAgICAgICAoRmllbGRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnJlbW92ZUV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6dW5pdEluTWls
bGlzZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpE
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3Vy
RmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmll
bGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lSG91ckZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbGxp
c2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNv
bmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbGxp
c2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVNaW51dGVG
aWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVu
dDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaW51dGVGaWVs
ZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlz
ZWNvbmQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk6CisgICAgICAgIChEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxk
RWxlbWVudCk6CisgICAgICAgIChEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCk6CisgICAgICAg
IChEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpk
aXNwbGF5U2l6ZU9mTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUluUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYW5k
bGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmVuc3VyZUluUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpyYW5nZSk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVw
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVl
QXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQpOgorCiAyMDEyLTA4LTA5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgU2FuZGJveGluZyB2aWV3IHNvdXJjZSBkb2N1bWVudHMgaXMgaW5lZmZlY3RpdmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCBiNDljMzIwMzE1OWRhZGYwMmIyYTcwYzdjNGU5Y2YzM2QwMTI1
MmI4Li4zMTJhNDMyYWJlYjBlYzJjYTU2M2RlZDMzYWJiODExOTc3ZTAxYmU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC01NzQyLDYgKzU3NDIsMTYgQEAKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9D
b250ZW50RGlzdHJpYnV0b3IuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNl
bGVjdG9yUXVlcnkuY3BwJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50
LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oJywK
KyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHAnLAorICAg
ICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmgnLAorICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5jcHAnLAorICAgICAgICAgICAg
J2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oJywKKyAgICAgICAgICAgICdodG1s
L3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaCcsCisgICAgICAgICAgICAn
aHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAnLAorICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCcsCiAgICAgICAg
ICAgICAnaHRtbC9zaGFkb3cvRGV0YWlsc01hcmtlckNvbnRyb2wuY3BwJywKICAgICAgICAgICAg
ICdodG1sL3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5oJywKICAgICAgICAgICAgICdodG1s
L3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQzZmQ5YmE3
NTEzZjZkZmFhZTI0MTEwYWNkYTY5NmZjOTI3N2UxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEs
NDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJM
RShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lRWRp
dEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRGF0
ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVGb3JtYXQuaCIKKyNpbmNs
dWRlICJEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5k
bGVyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5o
IgorI2luY2x1ZGUgIkxvY2FsaXplZERhdGUuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWROdW1iZXIu
aCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU3RlcFJhbmdlLmgiCisjaW5j
bHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOworCitjbGFzcyBEYXRlVGltZUVkaXRCdWlsZGVyIDogcHJpdmF0ZSBE
YXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBEYXRlVGltZUVkaXRC
dWlsZGVyKERhdGVUaW1lRWRpdEVsZW1lbnQqLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIGJv
b2wgYnVpbGQoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBuZWVkU2Vjb25kRmllbGQoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZEZpZWxkKFBhc3NSZWZQdHI8RGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ+KSBjb25zdDsKKyAgICBib29sIG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3Q7
CisgICAgYm9vbCBuZWVkTWludXRlRmllbGQoKSBjb25zdDsKKworICAgIC8vIERhdGVUaW1lRm9y
bWF0OjpUb2tlbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZpZWxk
KERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUsIGludCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmKSBPVkVSUklERSBGSU5BTDsKKwor
ICAgIERhdGVUaW1lRWRpdEVsZW1lbnQqIG1fZWRpdEVsZW1lbnQ7CisgICAgY29uc3QgU3RlcFJh
bmdlJiBtX3N0ZXBSYW5nZTsKK307CisKK0RhdGVUaW1lRWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRp
dEJ1aWxkZXIoRGF0ZVRpbWVFZGl0RWxlbWVudCogZWxlbW50LCBjb25zdCBTdGVwUmFuZ2UmIHN0
ZXBSYW5nZSkKKyAgICA6IG1fZWRpdEVsZW1lbnQoZWxlbW50KQorICAgICwgbV9zdGVwUmFuZ2Uo
c3RlcFJhbmdlKQoreworfQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OmFkZEZpZWxkKFBh
c3NSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+IGZpZWxkKSBjb25zdAoreworICAgIGlmICht
X2VkaXRFbGVtZW50LT5tX2ZpZWxkcy5zaXplKCkgPT0gbV9lZGl0RWxlbWVudC0+bV9maWVsZHMu
Y2FwYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZWRpdEVsZW1lbnQtPm1fZmllbGRz
LmFwcGVuZChmaWVsZC5nZXQoKSk7CisgICAgbV9lZGl0RWxlbWVudC0+YXBwZW5kQ2hpbGQoZmll
bGQpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OmJ1aWxkKGNvbnN0IFN0cmluZyYg
Zm9ybWF0U3RyaW5nKQoreworICAgIG1fZWRpdEVsZW1lbnQtPnJlc2V0TGF5b3V0KCk7CisgICAg
cmV0dXJuIERhdGVUaW1lRm9ybWF0OjpwYXJzZShmb3JtYXRTdHJpbmcsICp0aGlzKTsKK30KKwor
Ym9vbCBEYXRlVGltZUVkaXRCdWlsZGVyOjpuZWVkTWlsbGlzZWNvbmRGaWVsZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKHN0YXRpY19jYXN0
PGludD4obXNQZXJTZWNvbmQpKS5pc1plcm8oKQorICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3Rl
cCgpLnJlbWFpbmRlcihzdGF0aWNfY2FzdDxpbnQ+KG1zUGVyU2Vjb25kKSkuaXNaZXJvKCk7Cit9
CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8
aW50Pihtc1BlckhvdXIpKS5pc1plcm8oKQorICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3RlcCgp
LnJlbWFpbmRlcihzdGF0aWNfY2FzdDxpbnQ+KG1zUGVySG91cikpLmlzWmVybygpOworfQorCit2
b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZSBmaWVsZFR5cGUsIGludCkKK3sKKyAgICBEb2N1bWVudCogY29uc3QgZG9jdW1lbnQgPSBt
X2VkaXRFbGVtZW50LT5kb2N1bWVudCgpOworCisgICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKKyAg
ICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTE6CisgICAgICAgIGFkZEZpZWxk
KERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqbV9lZGl0RWxlbWVu
dCwgMCwgMTEpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlSG91cjEyOgorICAgICAgICBhZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCwgKm1fZWRpdEVsZW1lbnQsIDEsIDEyKSk7CisgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMzoKKyAgICAg
ICAgYWRkRmllbGQoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsICpt
X2VkaXRFbGVtZW50LCAwLCAyMykpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CisgICAgICAgIGFkZEZpZWxkKERhdGVUaW1lSG91
ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCAqbV9lZGl0RWxlbWVudCwgMSwgMjQpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlu
dXRlOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IGZpZWxk
ID0gRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgKm1fZWRpdEVs
ZW1lbnQpOworICAgICAgICBhZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmICghbmVlZE1pbnV0
ZUZpZWxkKCkpCisgICAgICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDoK
KyAgICAgICAgYWRkRmllbGQoRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQsICptX2VkaXRFbGVtZW50LCB0aW1lQU1QTUxhYmVscygpKSk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDogeworICAgICAgICBS
ZWZQdHI8RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gRGF0ZVRpbWVTZWNvbmRG
aWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgKm1fZWRpdEVsZW1lbnQpOworICAgICAgICBh
ZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmICghbmVlZFNlY29uZEZpZWxkKCkpCisgICAgICAg
ICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKworICAgICAgICBpZiAobmVlZE1pbGxpc2Vjb25k
RmllbGQoKSkgeworICAgICAgICAgICAgdmlzaXRMaXRlcmFsKGxvY2FsaXplZERlY2ltYWxTZXBh
cmF0b3IoKSk7CisgICAgICAgICAgICB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVGcmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZDog
eworICAgICAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmllbGQg
PSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsICptX2Vk
aXRFbGVtZW50KTsKKyAgICAgICAgYWRkRmllbGQoZmllbGQpOworICAgICAgICBpZiAoIW5lZWRN
aWxsaXNlY29uZEZpZWxkKCkpCisgICAgICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZFNlY29uZEZpZWxkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc3RhdGlj
X2Nhc3Q8aW50Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpCisgICAgICAgIHx8ICFtX3N0ZXBSYW5n
ZS5zdGVwKCkucmVtYWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJNaW51dGUpKS5pc1plcm8o
KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdExpdGVyYWwoY29uc3QgU3Ry
aW5nJiB0ZXh0KQoreworICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpKTsKKyAgICBtX2VkaXRFbGVt
ZW50LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUobV9lZGl0RWxlbWVudC0+ZG9jdW1lbnQoKSwg
dGV4dCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGVUaW1l
RWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKCkKK3sKK30K
KworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCogZG9j
dW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRDb250cm9sT3duZXIpCisgICAgOiBIVE1MRGl2
RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9lZGl0Q29udHJvbE93bmVyKCZlZGl0
Q29udHJvbE93bmVyKQorICAgICwgbV9zcGluQnV0dG9uKDApCisgICAgLCBtX2ZvY3VzRmllbGRJ
bmRleChpbnZhbGlkRmllbGRJbmRleCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21p
Y1N0cmluZywgZGF0ZVRpbWVFZGl0UHNldWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0Iikp
OworICAgIHNldFNoYWRvd1BzZXVkb0lkKGRhdGVUaW1lRWRpdFBzZXVkb0lkKTsKK30KKworRGF0
ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQoKQoreworICAgIGZvciAoc2l6
ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxk
SW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxkSW5kZXhdLT5yZW1vdmVFdmVudEhhbmRsZXIo
KTsKKworICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAgIG1fc3BpbkJ1dHRvbi0+cmVtb3Zl
U3RlcEFjdGlvbkhhbmRsZXIoKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50
PiBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFZGl0Q29u
dHJvbE93bmVyJiBlZGl0Q29udHJvbE93bmVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkK
K3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRSZWYo
bmV3IERhdGVUaW1lRWRpdEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sT3duZXIpKTsKKyAg
ICBjb250YWluZXItPmxheW91dChzdGVwUmFuZ2UpOworICAgIHJldHVybiBjb250YWluZXIucmVs
ZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFu
Z2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVtZW50
KiBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEF0KGludCBmaWVsZEluZGV4KSBjb25zdAorewor
ICAgIHJldHVybiBmaWVsZEluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaWVsZElu
ZGV4KSA8IG1fZmllbGRzLnNpemUoKSA/IG1fZmllbGRzW2ZpZWxkSW5kZXhdIDogMDsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50Ojpmb2N1c0ZpZWxkQXQoaW50IG5ld0ZvY3VzRmllbGRJ
bmRleCkKK3sKKyAgICBpZiAobV9mb2N1c0ZpZWxkSW5kZXggPT0gbmV3Rm9jdXNGaWVsZEluZGV4
KQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgbmV3
Rm9jdXNGaWVsZCA9IGZpZWxkQXQobmV3Rm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAobmV3Rm9j
dXNGaWVsZCAmJiBuZXdGb2N1c0ZpZWxkLT5pc1JlYWRPbmx5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBjdXJyZW50Rm9jdXNGaWVsZCA9IGZp
ZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpOworCisgICAgaWYgKGN1cnJlbnRGb2N1c0ZpZWxkKQor
ICAgICAgICBjdXJyZW50Rm9jdXNGaWVsZC0+c2V0Rm9jdXMoZmFsc2UpOworCisgICAgaWYgKCFu
ZXdGb2N1c0ZpZWxkKSB7CisgICAgICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gaW52YWxpZEZpZWxk
SW5kZXg7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2ZvY3VzRmllbGRJbmRleCA9
IG5ld0ZvY3VzRmllbGRJbmRleDsKKyAgICBuZXdGb2N1c0ZpZWxkLT5zZXRGb2N1cyh0cnVlKTsK
K30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGlzRGlzYWJsZWQoKSB8fCBpc1Jl
YWRPbmx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZmllbGRBdChtX2ZvY3VzRmll
bGRJbmRleCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBl
KCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmll
cigpOworCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkxlZnQiKSB7CisgICAgICAgIGtleWJv
YXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIGNvbnN0IGludCBmaWVsZElu
ZGV4ID0gcHJldmlvdXNGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZpZWxkSW5k
ZXgpKQorICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlJpZ2h0IikgeworICAgICAg
ICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBjb25zdCBpbnQg
ZmllbGRJbmRleCA9IG5leHRGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZpZWxk
SW5kZXgpKQorICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOSIpIHsKKyAg
ICAgICAgY29uc3QgaW50IGZpZWxkSW5kZXggPSBrZXlib2FyZEV2ZW50LT5nZXRNb2RpZmllclN0
YXRlKCJTaGlmdCIpID8gcHJldmlvdXNGaWVsZEluZGV4KCkgOiBuZXh0RmllbGRJbmRleCgpOwor
ICAgICAgICBpZiAoZmllbGRBdChmaWVsZEluZGV4KSkgeworICAgICAgICAgICAga2V5Ym9hcmRF
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGZvY3VzRmllbGRBdChmaWVs
ZEluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZFZhbHVlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1f
ZWRpdENvbnRyb2xPd25lcikKKyAgICAgICAgbV9lZGl0Q29udHJvbE93bmVyLT5lZGl0Q29udHJv
bFZhbHVlQ2hhbmdlZCgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3VzT25O
ZXh0RmllbGQoKQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJ
bmRleCkKKyAgICAgICAgZm9jdXNGaWVsZEF0KG5leHRGaWVsZEluZGV4KCkpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogbW91c2VF
dmVudCkKK3sKKyAgICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQgfHwgbW91c2VFdmVudC0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgTm9kZSogY29uc3QgcmVsYXRlZFRhcmdldCA9IG1vdXNlRXZlbnQt
PnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmll
bGRJbmRleCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVsZEluZGV4KSB7CisgICAgICAgIGlmICht
X2ZpZWxkc1tmaWVsZEluZGV4XSA9PSByZWxhdGVkVGFyZ2V0KSB7CisgICAgICAgICAgICBtb3Vz
ZUV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZp
ZWxkSW5kZXgpOworICAgICAgICAgICAgaWYgKG1fZWRpdENvbnRyb2xPd25lcikKKyAgICAgICAg
ICAgICAgICBtX2VkaXRDb250cm9sT3duZXItPmVkaXRDb250cm9sTW91c2VGb2N1cygpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0
RWxlbWVudDo6aXNEaXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWRpdENvbnRyb2xP
d25lciAmJiBtX2VkaXRDb250cm9sT3duZXItPmlzRWRpdENvbnRyb2xPd25lckRpc2FibGVkKCk7
Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aXNSZWFkT25seSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZWRpdENvbnRyb2xPd25lciAmJiBtX2VkaXRDb250cm9sT3duZXItPmlzRWRp
dENvbnRyb2xPd25lclJlYWRPbmx5KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
bGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQoreworICAgIERhdGVUaW1lRmllbGRF
bGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7Cisg
ICAgZm9jdXNGaWVsZEF0KGludmFsaWRGaWVsZEluZGV4KTsKKworICAgIERhdGVUaW1lRWRpdEJ1
aWxkZXIgYnVpbGRlcih0aGlzLCBzdGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmluZyBkYXRlVGlt
ZUZvcm1hdCA9IGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRUaW1lRm9ybWF0
VGV4dCgpIDogbG9jYWxpemVkU2hvcnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlmICghYnVpbGRl
ci5idWlsZChkYXRlVGltZUZvcm1hdCkgfHwgbV9maWVsZHMuaXNFbXB0eSgpKQorICAgICAgICBi
dWlsZGVyLmJ1aWxkKGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyAiSEg6bW06c3MiIDogIkhI
Om1tIik7CisKKyAgICBSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IHNwaW5CdXR0b24gPSBTcGlu
QnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCksICp0aGlzKTsKKyAgICBtX3NwaW5CdXR0
b24gPSBzcGluQnV0dG9uLmdldCgpOworICAgIGFwcGVuZENoaWxkKHNwaW5CdXR0b24pOworCisg
ICAgaWYgKGZvY3VzRmllbGQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7
IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkgeworICAgICAgICAg
ICAgaWYgKGZvY3VzRmllbGQgPT0gbV9maWVsZHNbZmllbGRJbmRleF0pIHsKKyAgICAgICAgICAg
ICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBEYXRlVGltZUVkaXRFbGVt
ZW50OjpuZXh0RmllbGRJbmRleCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZm9jdXNGaWVsZElu
ZGV4ICE9IGludmFsaWRGaWVsZEluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0g
bV9mb2N1c0ZpZWxkSW5kZXggKyAxOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2Zp
ZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25s
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZpZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiBt
X2ZpZWxkcy5zaXplKCk7Cit9CisKK2ludCBEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0Zp
ZWxkSW5kZXgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZh
bGlkRmllbGRJbmRleCk7CisgICAgZm9yIChpbnQgZmllbGRJbmRleCA9IG1fZm9jdXNGaWVsZElu
ZGV4IC0gMTsgZmllbGRJbmRleCA+PSAwOyAtLWZpZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKCFt
X2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGZp
ZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRF
bGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCgpCit7CisgICAgdXBkYXRlVUlTdGF0ZSgpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5b3V0KCkKK3sKKyAgICBtX2Zp
ZWxkcy5jbGVhcigpOworICAgIG1fc3BpbkJ1dHRvbiA9IDA7CisgICAgbV9mb2N1c0ZpZWxkSW5k
ZXggPSBpbnZhbGlkRmllbGRJbmRleDsKKyAgICByZW1vdmVDaGlsZHJlbigpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQor
eworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50KSB7Cisg
ICAgICAgIGlmICghaXNEaXNhYmxlZCgpICYmICFpc1JlYWRPbmx5KCkgJiYgbV9mb2N1c0ZpZWxk
SW5kZXggPT0gaW52YWxpZEZpZWxkSW5kZXgpCisgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoMCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYmx1ckV2ZW50KSB7CisgICAgICAgIGZvY3VzRmllbGRBdChpbnZhbGlkRmllbGRJ
bmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VF
dmVudCgpKSB7CisgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVu
dCo+KGV2ZW50KSk7CisgICAgfSBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisg
ICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2
ZW50KSk7CisKKyAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmllbGRB
dChtX2ZvY3VzRmllbGRJbmRleCk7CisgICAgaWYgKCFmb2N1c0ZpZWxkKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb2N1c0ZpZWxkLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9u
ZW50cyYgZGF0ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRl
eCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVsZEluZGV4KQorICAgICAgICBtX2ZpZWxkc1tmaWVs
ZEluZGV4XS0+c2V0VmFsdWVBc0RhdGUoZGF0ZSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxl
bWVudDo6c2V0RW1wdHlWYWx1ZSgpCit7CisgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7
IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkKKyAgICAgICAgbV9m
aWVsZHNbZmllbGRJbmRleF0tPnNldEVtcHR5VmFsdWUoRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRp
c3BhdGNoTm9FdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRv
blN0ZXBEb3duKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3Vz
RmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVsZC0+
c3RlcERvd24oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3Rl
cFVwKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQg
PSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVsZC0+c3RlcFVw
KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6dXBkYXRlVUlTdGF0ZSgpCit7Cisg
ICAgaWYgKGlzRGlzYWJsZWQoKSB8fCBpc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgbV9zcGluQnV0
dG9uLT5yZWxlYXNlQ2FwdHVyZSgpOworICAgICAgICBmb2N1c0ZpZWxkQXQoaW52YWxpZEZpZWxk
SW5kZXgpOworICAgIH0KK30KKworZG91YmxlIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnZhbHVlQXNE
b3VibGUoKSBjb25zdAoreworICAgIGRvdWJsZSB2YWx1ZSA9IDA7CisKKyAgICBmb3IgKHNpemVf
dCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVsZElu
ZGV4KSB7CisgICAgICAgIGNvbnN0IERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmaWVsZCA9
IG1fZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICBpZiAoIWZpZWxkLT5oYXNWYWx1ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CisgICAgICAgIHZhbHVlICs9IGZpZWxkLT52YWx1ZUFzRG91YmxlKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVjZmJhZDk5YTM5M2Q0MTA2NGNhZTYwOTMyZmZmNWI1YTQxNmJjMTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVt
ZW50LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVU
aW1lRWRpdEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZUVkaXRFbGVtZW50X2gKKworI2lmIEVO
QUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1l
RmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0ZUNvbXBvbmVudHM7CitjbGFzcyBEYXRl
VGltZUVkaXRMYXlvdXRlcjsKK2NsYXNzIEtleWJvYXJkRXZlbnQ7CitjbGFzcyBNb3VzZUV2ZW50
OworY2xhc3MgU3RlcFJhbmdlOworCisvLyBEYXRlVGltZUVkaXRFbGVtZW50IGNsYXNzIGNvbnRh
aW5zIG51bWJlcmljIGZpZWxkIGFuZCBzeW1ib2xjIGZpZWxkIGZvcgorLy8gcmVwcmVzZW50aW5n
IGRhdGUgYW5kIHRpbWUsIHN1Y2ggYXMKKy8vICAtIFllYXIsIE1vbnRoLCBEYXkgT2YgTW9udGgK
Ky8vICAtIEhvdXIsIE1pbnV0ZSwgU2Vjb25kLCBNaWxsaXNlY29uZCwgQU0vUE0KK2NsYXNzIERh
dGVUaW1lRWRpdEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgRGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyLCBwcml2YXRlIFNwaW5CdXR0b25FbGVt
ZW50OjpTdGVwQWN0aW9uSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRp
bWVFZGl0RWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgRGF0ZVRpbWVFZGl0
QnVpbGRlcjsKKworICAgIC8vIEVkaXRDb250cm9sT3duZXIgaW1wbGVtZW50ZXIgbXVzdCBjYWxs
IHJlbW92ZUVkaXRDb250cm9sT3duZXIgd2hlbgorICAgIC8vIGl0IGRvZXNuJ3QgaGFuZGxlIGV2
ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNzIEVkaXRDb250cm9sT3duZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RWRpdENvbnRyb2xPd25lcigpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZWRpdENvbnRyb2xNb3VzZUZvY3VzKCkgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZWRpdENvbnRyb2xWYWx1ZUNoYW5nZWQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0VkaXRDb250cm9sT3duZXJEaXNhYmxlZCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmly
dHVhbCBib29sIGlzRWRpdENvbnRyb2xPd25lclJlYWRPbmx5KCkgY29uc3QgPSAwOworICAgIH07
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQqLCBFZGl0Q29udHJvbE93bmVyJiwgY29uc3QgU3RlcFJhbmdlJik7CisKKyAgICB2aXJ0
dWFsIH5EYXRlVGltZUVkaXRFbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAgICB2b2lkIGRpc2FibGVkU3RhdGVDaGFuZ2Vk
KCk7CisgICAgdm9pZCBsYXlvdXQoY29uc3QgU3RlcFJhbmdlJik7CisgICAgdm9pZCByZWFkT25s
eVN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgcmVtb3ZlRWRpdENvbnRyb2xPd25lcigpIHsgbV9l
ZGl0Q29udHJvbE93bmVyID0gMDsgfQorICAgIHZvaWQgc2V0RW1wdHlWYWx1ZSgpOworICAgIHZv
aWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKTsKKyAgICBkb3VibGUgdmFs
dWVBc0RvdWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgaW52
YWxpZEZpZWxkSW5kZXggPSAtMTsKKworICAgIC8vIERhdGV0aW1lIGNhbiBiZSByZXByZXNlbnQg
YXQgbW9zdCBmaXZlIGZpZWxkcywgc3VjaCBhcworICAgIC8vICAxLiB5ZWFyCisgICAgLy8gIDIu
IG1vbnRoCisgICAgLy8gIDMuIGRheS1vZi1tb250aAorICAgIC8vICA0LiBob3VyCisgICAgLy8g
IDUuIG1pbnV0ZQorICAgIC8vICA2LiBzZWNvbmQKKyAgICAvLyAgNy4gbWlsbGlzZWNvbmQKKyAg
ICAvLyAgOC4gQU0vUE0KKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1OdW1iZXJPZkZpZWxk
cyA9IDg7CisKKyAgICBEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiwgRWRpdENvbnRyb2xP
d25lciYpOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGZpZWxkQXQoaW50KSBjb25zdDsK
KyAgICB2b2lkIGZvY3VzRmllbGRBdChpbnQpOworICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
KTsKKyAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKKyAgICBib29sIGlzUmVhZE9ubHkoKSBj
b25zdDsKKyAgICBpbnQgbmV4dEZpZWxkSW5kZXgoKSBjb25zdDsKKyAgICBpbnQgcHJldmlvdXNG
aWVsZEluZGV4KCkgY29uc3Q7CisgICAgdm9pZCByZXNldExheW91dCgpOworICAgIHZvaWQgdXBk
YXRlVUlTdGF0ZSgpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRI
YW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZmllbGRWYWx1ZUNoYW5nZWQoKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpIE9WRVJS
SURFIEZJTkFMOworCisgICAgLy8gU3BpbkJ1dHRvbkVsZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVy
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc3BpbkJ1dHRvblN0ZXBEb3duKCkgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwVXAoKSBPVkVSUklERSBG
SU5BTDsKKworICAgIFZlY3RvcjxEYXRlVGltZUZpZWxkRWxlbWVudCosIG1heGltdW1OdW1iZXJP
ZkZpZWxkcz4gbV9maWVsZHM7CisgICAgRWRpdENvbnRyb2xPd25lciogbV9lZGl0Q29udHJvbE93
bmVyOworICAgIFNwaW5CdXR0b25FbGVtZW50KiBtX3NwaW5CdXR0b247CisgICAgaW50IG1fZm9j
dXNGaWVsZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkOTM2N2M3YTdlNjEyZDE2NTE1NDUyZmUyZmI1M2I4MzA2
NDNmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRl
VGltZUZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBM
RV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhh
bmRsZXIoKQoreworfQorCitEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRs
ZXIpCisgICAgOiBIVE1MRWxlbWVudChzcGFuVGFnLCBkb2N1bWVudCkKKyAgICAsIG1fZmllbGRF
dmVudEhhbmRsZXIoJmZpZWxkRXZlbnRIYW5kbGVyKQoreworfQorCit2b2lkIERhdGVUaW1lRmll
bGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAo
ZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJv
YXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpOworICAgICAgICBo
YW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRF
dmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVm
YXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKGtleWJvYXJkRXZlbnQpOworICAgICAgICBpZiAoa2V5
Ym9hcmRFdmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXli
b2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50KQoreworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBl
KCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmll
cigpOworCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iKSB7CisgICAgICAgIGtleWJv
YXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHN0ZXBEb3duKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7Cisg
ICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHN0ZXBV
cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0g
IlUrMDAwOCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgc2V0RW1wdHlWYWx1ZShEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgp
Cit7CisgICAgaWYgKG1fZmllbGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhh
bmRsZXItPmZvY3VzT25OZXh0RmllbGQoKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVu
dDo6aW5pdGlhbGl6ZShjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKQoreworICAg
IHNldFNoYWRvd1BzZXVkb0lkKHNoYWRvd1BzZXVkb0lkKTsKKyAgICBhcHBlbmRDaGlsZChUZXh0
OjpjcmVhdGUoZG9jdW1lbnQoKSwgdmlzaWJsZVZhbHVlKCkpKTsKK30KKworYm9vbCBEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNB
dHRyaWJ1dGUocmVhZG9ubHlBdHRyKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6
c2V0UmVhZE9ubHkoKQoreworICAgIC8vIFNldCBIVE1MIGF0dHJpYnV0ZSByZWFkb25seSB0byBj
aGFuZ2UgYXBwZXJhbmNlLgorICAgIHNldEJvb2xlYW5BdHRyaWJ1dGUocmVhZG9ubHlBdHRyLCB0
cnVlKTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3Ip
Cit7CisgICAgVGV4dCogY29uc3QgdGV4dE5vZGUgPSB0b1RleHQoZmlyc3RDaGlsZCgpKTsKKyAg
ICBjb25zdCBTdHJpbmcgbmV3VmlzaWJsZVZhbHVlID0gdmlzaWJsZVZhbHVlKCk7CisgICAgQVNT
RVJUKG5ld1Zpc2libGVWYWx1ZS5sZW5ndGgoKSA+IDApOworCisgICAgaWYgKHRleHROb2RlLT53
aG9sZVRleHQoKSA9PSBuZXdWaXNpYmxlVmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIHRl
eHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KG5ld1Zpc2libGVWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisKKyAgICBpZiAoZXZlbnRCZWhhdmlvciA9PSBEaXNwYXRjaEV2ZW50ICYmIG1fZmll
bGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhhbmRsZXItPmZpZWxkVmFsdWVD
aGFuZ2VkKCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6dmFsdWVBc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlQXNJbnRlZ2VyKCkpICogdW5pdEluTWlsbGlzZWNvbmQoKSA6IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGlt
ZUZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTc2MDZiY2YxNjRiNjRhYzZiMDk2NzMxMjFiYzIyNTQz
ODI3ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0
ZVRpbWVGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lRmllbGRFbGVt
ZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCisj
aW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEYXRlQ29tcG9uZW50czsKKworLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgaXMgYmFzZSBjbGFz
cyBvZiBkYXRlIHRpbWUgZmllbGQgZWxlbWVudC4KK2NsYXNzIERhdGVUaW1lRmllbGRFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGlt
ZUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBlbnVtIEV2ZW50QmVoYXZpb3IgeworICAg
ICAgICBEaXNwYXRjaE5vRXZlbnQsCisgICAgICAgIERpc3BhdGNoRXZlbnQsCisgICAgfTsKKwor
ICAgIC8vIEZpZWxkRXZlbnRIYW5kbGVyIGltcGxlbWVudGVyIG11c3QgY2FsbCByZW1vdmVFdmVu
dEhhbmRsZXIgd2hlbgorICAgIC8vIGl0IGRvZXNuJ3QgaGFuZGxlIGV2ZW50LCBlLmcuIGF0IGRl
c3RydWN0aW9uLgorICAgIGNsYXNzIEZpZWxkRXZlbnRIYW5kbGVyIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgfkZpZWxkRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBmaWVsZFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzT25O
ZXh0RmllbGQoKSA9IDA7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgPSAwOwor
ICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0OworICAgIHZvaWQgcmVtb3ZlRXZlbnRIYW5kbGVy
KCkgeyBtX2ZpZWxkRXZlbnRIYW5kbGVyID0gMDsgfQorICAgIHZvaWQgc2V0UmVhZE9ubHkoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RW1wdHlWYWx1ZShFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hO
b0V2ZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVD
b21wb25lbnRzJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQs
IEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RlcERvd24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpID0gMDsKKyAgICB2aXJ0
dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgor
ICAgIERhdGVUaW1lRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImKTsK
KyAgICB2b2lkIGZvY3VzT25OZXh0RmllbGQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgPSAwOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25z
dCBBdG9taWNTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgp
IGNvbnN0ID0gMDsKKyAgICB2b2lkIHVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9yKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2Fy
ZEV2ZW50Kik7CisgICAgRmllbGRFdmVudEhhbmRsZXIqIG1fZmllbGRFdmVudEhhbmRsZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZGUyMjE1MjIwOGMwZTJlN2UwMzJkMTgyZmJlNjdkZTg1Nzc3N2Y3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1l
bnRzLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNp
bmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudHMuaCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25l
bnRzLmgiCisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbXBtTGFiZWxzKQorICAgIDogRGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIGFtcG1MYWJlbHMpCit7Cit9
CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBEYXRlVGltZUFNUE1GaWVs
ZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBm
aWVsZEV2ZW50SGFuZGxlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFtcG1MYWJlbHMpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGFtcG1Qc3VlZG9JZCwgKCItd2Vi
a2l0LWRhdGV0aW1lLWVkaXQtYW1wbS1maWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVBTVBN
RmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZUFNUE1GaWVsZEVsZW1l
bnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBhbXBtTGFiZWxzKSk7CisgICAgZmllbGQt
PmluaXRpYWxpemUoYW1wbVBzdWVkb0lkKTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOwor
fQorCit2b2lkIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3Qg
RGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3Vy
KCkgPj0gMTIgPyAxIDogMCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6
OnVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJIb3VyICogMTI7
Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVIb3VyRmll
bGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBG
aWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQgbWF4
aW11bSkKKyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRF
dmVudEhhbmRsZXIsIG1pbmltdW0sIG1heGltdW0pCisgICAgLCBtX2FsaWdubWVudChtYXhpbXVt
ICsgbWF4aW11bSAlIDIpCit7CisgICAgQVNTRVJUKCghbWluaW11bSAmJiAobWF4aW11bSA9PSAx
MSB8fCBtYXhpbXVtID09IDIzKSkgfHwgKG1pbmltdW0gPT0gMSAmJiAobWF4aW11bSA9PSAxMiB8
fCBtYXhpbXVtID09IDI0KSkpOworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudD4gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQg
bWF4aW11bSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaG91clBz
dWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxkIikpOworICAgIFJlZlB0
cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1l
SG91ckZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIG1pbmltdW0sIG1h
eGltdW0pKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZShob3VyUHN1ZWRvSWQpOworICAgIHJldHVy
biBmaWVsZC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojpz
ZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAgICBzZXRWYWx1
ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFsdWVBc0hvdXIyMywgRXZlbnRCZWhhdmlvciBl
dmVudEJlaGF2aW9yKQoreworICAgIGNvbnN0IGludCB2YWx1ZSA9IFJhbmdlKDAsIDIzKS5lbnN1
cmVJblJhbmdlKHZhbHVlQXNIb3VyMjMpICUgbV9hbGlnbm1lbnQ7CisgICAgRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihyYW5nZSgpLm1pbmltdW0gJiYgIXZh
bHVlID8gbV9hbGlnbm1lbnQgOiB2YWx1ZSwgZXZlbnRCZWhhdmlvcik7Cit9CisKK2RvdWJsZSBE
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbXNQZXJIb3VyOworfQorCitpbnQgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2
YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgJSBtX2FsaWdubWVudCA6IC0x
OworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGVUaW1lTWlsbGlz
ZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCisgICAg
OiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
LCAwLCA5OTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxl
bWVudD4gRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBtaWxsaXNlY29uZFBzdWVkb0lkLCAoIi13
ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0
ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRp
bWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsK
KyAgICBmaWVsZC0+aW5pdGlhbGl6ZShtaWxsaXNlY29uZFBzdWVkb0lkKTsKKyAgICByZXR1cm4g
ZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1l
bnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNl
dFZhbHVlQXNJbnRlZ2VyKGRhdGUubWlsbGlzZWNvbmQoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGlt
ZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIDE7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQorICAg
IDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxl
ciwgMCwgNTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ+
IERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBG
aWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIG1pbnV0ZVBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUt
ZWRpdC1taW51dGUtZmllbGQiKSk7CisgICAgUmVmUHRyPERhdGVUaW1lTWludXRlRmllbGRFbGVt
ZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudChkb2N1
bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZShtaW51dGVQ
c3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGlt
ZU1pbnV0ZUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
IGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5taW51dGUoKSk7Cit9CisKK2Rv
dWJsZSBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQoKSBjb25z
dAoreworICAgIHJldHVybiBtc1Blck1pbnV0ZTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTZWNvbmRG
aWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRF
dmVudEhhbmRsZXIpCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQs
IGZpZWxkRXZlbnRIYW5kbGVyLCAwLCA1OSkKK3sKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZVNl
Y29uZEZpZWxkRWxlbWVudD4gRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1
bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgc2Vjb25kUHN1ZWRvSWQsICgi
LXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRp
bWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlcikpOworICAgIGZpZWxkLT5p
bml0aWFsaXplKHNlY29uZFBzdWVkb0lkKTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOwor
fQorCit2b2lkIERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25z
dCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihkYXRlLnNl
Y29uZCgpKTsKK30KKworZG91YmxlIERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5N
aWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1zUGVyU2Vjb25kOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41N2JjMWVmYTU1MmUz
NDgwNGQ2M2MzNTQwZGU2NjJhMGVmMDQ3YjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKQEAgLTAsMCArMSwxMTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lRmllbGRFbGVtZW50c19oCisj
ZGVmaW5lIERhdGVUaW1lRmllbGRFbGVtZW50c19oCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9U
SU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50IDogcHVibGlj
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZl
bnRIYW5kbGVyJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKworcHJpdmF0ZToKKyAgICBEYXRl
VGltZUFNUE1GaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+Jik7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlv
bnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRz
JikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBkb3VibGUgdW5pdEluTWlsbGlzZWNvbmQo
KSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307CisKKworLy8gRGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50IGlzIHVzZWQgZm9yIGhvdXIgZmllbGQgb2YgZGF0ZSB0aW1lIGZvcm1hdAorLy8gc3VwcG9y
dGluZyBmb2xsb3dpbmcgcGF0dGVybnM6CisvLyAgLSAwIHRvIDExCisvLyAgLSAxIHRvIDEyCisv
LyAgLSAwIHRvIDIzCisvLyAgLSAxIHRvIDI0CitjbGFzcyBEYXRlVGltZUhvdXJGaWVsZEVsZW1l
bnQgOiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQq
LCBGaWVsZEV2ZW50SGFuZGxlciYsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKK3ByaXZh
dGU6CisgICAgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhh
bmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworCisgICAgLy8gRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25z
dCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3Qg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCBP
VkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IGludCBtX2FsaWdubWVudDsKK307CisKK2NsYXNz
IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZU1pbGxpc2Vj
b25kRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVU
aW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRI
YW5kbGVyJik7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVu
dChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKKyAgICAvLyBEYXRlVGltZUZpZWxk
RWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0
IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBkb3VibGUgdW5p
dEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307CisKK2NsYXNzIERhdGVU
aW1lTWludXRlRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQp
OworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVNaW51dGVGaWVsZEVs
ZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKK3ByaXZhdGU6
CisgICAgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFu
ZGxlciYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZp
cnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURF
IEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZF
UlJJREUgRklOQUw7Cit9OworCitjbGFzcyBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCA6IHB1
YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBG
aWVsZEV2ZW50SGFuZGxlciYpOworCitwcml2YXRlOgorICAgIERhdGVUaW1lU2Vjb25kRmllbGRF
bGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImKTsKKworICAgIC8vIERhdGVUaW1l
RmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJs
ZSB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDBhZWU0N2JjZDY0ZTBhMDE3ZGZhYWQwYTU4YTAzYWY1MDc0NTM5NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVM
RFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmgiCisKKyNpbmNsdWRl
ICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBET01UaW1lU3RhbXAgdHlwZUFoZWFkVGltZW91dCA9IDEwMDA7CisKK3N0YXRp
YyBzaXplX3QgZGlzcGxheVNpemVPZk51bWJlcihpbnQgdmFsdWUpCit7CisgICAgQVNTRVJUKHZh
bHVlID49IDApOworCisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBp
bnQgbnVtYmVyT2ZEaWdpdHMgPSAwOworICAgIHdoaWxlICh2YWx1ZSkgeworICAgICAgICB2YWx1
ZSAvPSAxMDsKKyAgICAgICAgKytudW1iZXJPZkRpZ2l0czsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVtYmVyT2ZEaWdpdHM7Cit9CisKK0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6
OlJhbmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKKyAgICA6IG1heGltdW0obWF4aW11bSkK
KyAgICAsIG1pbmltdW0obWluaW11bSkKK3sKKyAgICBBU1NFUlQobWluaW11bSA8PSBtYXhpbXVt
KTsKK30KKworaW50IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUlu
UmFuZ2UoaW50IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heCh2
YWx1ZSwgbWluaW11bSksIG1heGltdW0pOworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxk
RXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgaW50IG1pbmltdW0sIGludCBtYXhpbXVt
KQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
KQorICAgICwgbV9sYXN0RGlnaXRDaGFyVGltZSgwKQorICAgICwgbV9yYW5nZShtaW5pbXVtLCBt
YXhpbXVtKQorICAgICwgbV92YWx1ZSgwKQorICAgICwgbV9oYXNWYWx1ZShmYWxzZSkKK3sKK30K
Kwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAgICBpZiAoaXNSZWFkT25seSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoa2V5Ym9hcmRFdmVudC0+dHlwZSgpICE9IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBVQ2hhciBjaGFy
Q29kZSA9IHN0YXRpY19jYXN0PFVDaGFyPihrZXlib2FyZEV2ZW50LT5jaGFyQ29kZSgpKTsKKyAg
ICBpZiAoY2hhckNvZGUgPCAnICcpCisgICAgICAgIHJldHVybjsKKworICAgIERPTVRpbWVTdGFt
cCBkZWx0YSA9IGtleWJvYXJkRXZlbnQtPnRpbWVTdGFtcCgpIC0gbV9sYXN0RGlnaXRDaGFyVGlt
ZTsKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKKworICAgIFN0cmluZyBudW1iZXIgPSBj
b252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihTdHJpbmcoJmNoYXJDb2RlLCAxKSk7CisgICAgY29u
c3QgaW50IGRpZ2l0ID0gbnVtYmVyWzBdIC0gJzAnOworICAgIGlmIChkaWdpdCA8IDAgfHwgZGln
aXQgPiA5KQorICAgICAgICByZXR1cm47CisKKyAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1faGFzVmFsdWUgJiYgZGVsdGEgPCB0
eXBlQWhlYWRUaW1lb3V0ID8gbV92YWx1ZSAqIDEwICsgZGlnaXQgOiBkaWdpdCwgRGlzcGF0Y2hF
dmVudCk7CisgICAgaWYgKG1fdmFsdWUgKiAxMCA+IG1fcmFuZ2UubWF4aW11bSkKKyAgICAgICAg
Zm9jdXNPbk5leHRGaWVsZCgpOworICAgIGVsc2UKKyAgICAgICAgbV9sYXN0RGlnaXRDaGFyVGlt
ZSA9IGtleWJvYXJkRXZlbnQtPnRpbWVTdGFtcCgpOworfQorCitib29sIERhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudDo6aGFzVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc1ZhbHVl
OworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0RW1wdHlWYWx1ZShF
dmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV92YWx1ZSA9IDA7CisgICAgbV9o
YXNWYWx1ZSA9IGlzUmVhZE9ubHkoKTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhh
dmlvcik7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFsdWUsIEV2ZW50QmVo
YXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3ZhbHVlID0gZW5zdXJlSW5SYW5nZSh2YWx1
ZSk7CisgICAgbV9oYXNWYWx1ZSA9IHRydWU7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50
QmVoYXZpb3IpOworICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUgPSAwOworfQorCit2b2lkIERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGlmIChtX2hhc1ZhbHVl
KQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3ZhbHVlID09IG1fcmFuZ2UubWluaW11bSA/
IG1fcmFuZ2UubWF4aW11bSA6IGVuc3VyZUluUmFuZ2UobV92YWx1ZSAtIDEpLCBEaXNwYXRjaEV2
ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWF4aW11
bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
OjpzdGVwVXAoKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICBzZXRWYWx1ZUFzSW50
ZWdlcihtX3ZhbHVlID09IG1fcmFuZ2UubWF4aW11bSA/IG1fcmFuZ2UubWluaW11bSA6IGVuc3Vy
ZUluUmFuZ2UobV92YWx1ZSArIDEpLCBEaXNwYXRjaEV2ZW50KTsKKyAgICBlbHNlCisgICAgICAg
IHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWluaW11bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisK
K1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAg
aWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5OSkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xvY2Fs
aXplZE51bWJlcihTdHJpbmc6Om51bWJlcihtX3ZhbHVlKSk7CisKKyAgICBpZiAobV9yYW5nZS5t
YXhpbXVtID4gOTkpCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoU3Ry
aW5nOjpmb3JtYXQoIiUwM2QiLCBtX3ZhbHVlKSk7CisKKyAgICByZXR1cm4gY29udmVydFRvTG9j
YWxpemVkTnVtYmVyKFN0cmluZzo6Zm9ybWF0KCIlMDJkIiwgbV92YWx1ZSkpOworfQorCitpbnQg
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faGFzVmFsdWUgPyBtX3ZhbHVlIDogLTE7Cit9CisKK1N0cmluZyBEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
aGFzVmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZSgpOworCisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGZvciAoaW50IG51bWJlck9mRGFzaHMgPSBzdGQ6Om1heChkaXNwbGF5U2l6
ZU9mTnVtYmVyKG1fcmFuZ2UubWF4aW11bSksIGRpc3BsYXlTaXplT2ZOdW1iZXIobV9yYW5nZS5t
aW5pbXVtKSk7IG51bWJlck9mRGFzaHM7IC0tbnVtYmVyT2ZEYXNocykKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJy0nKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NGMyYjYxODg2ZDY1ZTU5MjJmNzFkMTI5ZWEwOTIwNGI2MzVmYzg3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1
ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHJlcHJlc2VudHMgbnVtZXJpYyBmaWVsZCBvZiBk
YXRlIHRpbWUgZm9ybWF0LAorLy8gc3VjaCBhczoKKy8vICAtIGhvdXIKKy8vICAtIG1pbnV0ZQor
Ly8gIC0gbWlsbGlzZWNvbmQKKy8vICAtIHNlY29uZAorLy8gIC0geWVhcgorY2xhc3MgRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQpOworCitw
dWJsaWM6CisgICAgc3RydWN0IFJhbmdlIHsKKyAgICAgICAgUmFuZ2UoaW50IG1pbmltdW0sIGlu
dCBtYXhpbXVtKTsKKyAgICAgICAgaW50IGVuc3VyZUluUmFuZ2UoaW50KSBjb25zdDsKKworICAg
ICAgICBpbnQgbWF4aW11bTsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgfTsKKworcHJvdGVj
dGVkOgorICAgIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZl
bnRIYW5kbGVyJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworICAgIGludCBlbnN1cmVJ
blJhbmdlKGludCB2YWx1ZSkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5lbnN1cmVJblJhbmdlKHZh
bHVlKTsgfQorICAgIGNvbnN0IFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7
IH0KKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFs
IGJvb2wgaGFzVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFM
OworCitwcml2YXRlOgorICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNldEVtcHR5VmFsdWUoRXZlbnRCZWhhdmlvcikg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklO
QUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1
YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBET01UaW1lU3Rh
bXAgbV9sYXN0RGlnaXRDaGFyVGltZTsKKyAgICBjb25zdCBSYW5nZSBtX3JhbmdlOworICAgIGlu
dCBtX3ZhbHVlOworICAgIGJvb2wgbV9oYXNWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjdhN2MwZWZjMjlkODY3N2M4NjZiYTczY2JhMmUxOTk4YTg3M2FlMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2lu
Y2x1ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBm
aWVsZEV2ZW50SGFuZGxlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN5bWJvbHMpCisgICAgOiBE
YXRlVGltZUZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpCisgICAgLCBt
X3N5bWJvbHMoc3ltYm9scykKKyAgICAsIG1fc2VsZWN0ZWRJbmRleCgtMSkKK3sKKyAgICBBU1NF
UlQoIXN5bWJvbHMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQp
Cit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5cHJl
c3NFdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVUNoYXIgY2hhckNvZGUgPSBX
VEY6OlVuaWNvZGU6OnRvTG93ZXIoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSk7CisgICAgaWYg
KGNoYXJDb2RlIDwgJyAnKQorICAgICAgICByZXR1cm47CisKKyAgICBrZXlib2FyZEV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IG1fc3ltYm9scy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKFdURjo6VW5pY29kZTo6
dG9Mb3dlcihtX3N5bWJvbHNbaW5kZXhdWzBdKSA9PSBjaGFyQ29kZSkgeworICAgICAgICAgICAg
c2V0VmFsdWVBc0ludGVnZXIoaW5kZXgsIERpc3BhdGNoRXZlbnQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorfQorCitib29sIERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEluZGV4ID49
IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0RW1wdHlWYWx1
ZShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0g
aW52YWxpZEluZGV4OworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30K
Kwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihp
bnQgbmV3U2VsZWN0ZWRJbmRleCwgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAg
IG1fc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKG5ld1NlbGVjdGVkSW5kZXgs
IHN0YXRpY19jYXN0PGludD4obV9zeW1ib2xzLnNpemUoKSAtIDEpKSk7CisgICAgdXBkYXRlVmlz
aWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVs
ZEVsZW1lbnQ6OnN0ZXBEb3duKCkKK3sKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fc3ltYm9scy5z
aXplKCk7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/IChtX3NlbGVjdGVkSW5k
ZXggKyBzaXplIC0gMSkgJSBzaXplIDogc2l6ZSAtIDE7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVl
KERpc3BhdGNoRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6
OnN0ZXBVcCgpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/IChtX3NlbGVj
dGVkSW5kZXggKyAxKSAlIG1fc3ltYm9scy5zaXplKCkgOiAwOworICAgIHVwZGF0ZVZpc2libGVW
YWx1ZShEaXNwYXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IG1fc3ltYm9s
c1ttX3NlbGVjdGVkSW5kZXhdIDogZW1wdHlTdHJpbmcoKTsKK30KKworaW50IERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zZWxlY3RlZEluZGV4OworfQorCitTdHJpbmcgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVu
dDo6dmlzaWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IG1fc3lt
Ym9sc1ttX3NlbGVjdGVkSW5kZXhdIDogIi0tIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Rh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzY2ZGFlOGNkMjY0OTM4
MmZjMjhhOWRkNGQ4YWNmZmMxNDg1NzViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
CisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50X2gKKworI2lmIEVO
QUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1l
RmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudCByZXByZXNlbnRzIG5vbi1udW1lcmljIGZpZWxkIG9mIGRhdGEgdGlt
ZQorLy8gZm9ybWF0LCBzdWNoIGFzOiBBTS9QTSwgYW5kIG1vbnRoLgorY2xhc3MgRGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk7CisKK3By
b3RlY3RlZDoKKyAgICBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmll
bGRFdmVudEhhbmRsZXImLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQp
IE9WRVJSSURFIEZJTkFMOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgaW52YWxp
ZEluZGV4ID0gLTE7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRFbXB0eVZhbHVlKEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpIE9W
RVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpIE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZh
bHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcg
dmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBjb25zdCBWZWN0b3I8
U3RyaW5nPiBtX3N5bWJvbHM7CisgICAgaW50IG1fc2VsZWN0ZWRJbmRleDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157640</attachid>
            <date>2012-08-09 22:35:08 -0700</date>
            <delta_ts>2012-08-10 01:24:12 -0700</delta_ts>
            <desc>Patch 7</desc>
            <filename>bug-92960-20120810143439.patch</filename>
            <type>text/plain</type>
            <size>65572</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY1YjYxM2Q4YmE0N2Nh
NjE5MTk4MzhjMDI0YmI0NjdkNjBjYjRmYy4uNTE4YzhjZjE3ZjZkMmQyMjcxYWY4OTVmOGNlYjdm
ZDVlMDBhMDI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOC0wOSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJ
IGZvciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVy
IG9mIG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1l
RmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25k
CisgICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9y
IG1pbnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNl
IGNsYXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkK
KyAgICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
IGJ1aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3Qg
Y2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGlu
Y2x1ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwv
c2hhZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwg
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwK
KyAgICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEJ1aWxkZXI6Om5lZWRTZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRCdWlsZGVyOjp2aXNpdEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6OnZpc2l0TGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVk
aXRFbGVtZW50OjpFZGl0Q29udHJvbE93bmVyOjp+RWRpdENvbnRyb2xPd25lcik6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpEYXRlVGltZUVkaXRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6On5EYXRlVGltZUVkaXRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmFkZEZpZWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6IENhbGxl
ZCB3aGVuIG93bmVyJ3MgZGlzYWJsZWQgc3RhdGUgaXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNGaWVsZEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRWYWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OmlzRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZUVkaXRFbGVtZW50OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6bmV4dEZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6cHJldmlvdXNGaWVsZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5U3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIn
cyByZWFkT25seSBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0RWxlbWVudDo6cmVzZXRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lRWRpdEVsZW1lbnQ6OnVwZGF0ZVVJU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cv
RGF0ZVRpbWVFZGl0RWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lRWRpdEVsZW1l
bnQpOgorICAgICAgICAoRWRpdENvbnRyb2xPd25lcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRFbGVtZW50OjpyZW1vdmVFZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkRhdGVUaW1l
RmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRmllbGRFbGVt
ZW50OjpkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OmZvY3VzT25OZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVGaWVsZEVsZW1lbnQ6OnNldFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RmllbGRFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVGaWVsZEVsZW1lbnQ6OnZhbHVlQXNEb3VibGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93
L0RhdGVUaW1lRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQpOgorICAgICAgICAoRmllbGRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnJlbW92ZUV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6dW5pdEluTWls
bGlzZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpE
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3Vy
RmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmll
bGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lSG91ckZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbGxp
c2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNv
bmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbGxp
c2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVNaW51dGVG
aWVsZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVu
dDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaW51dGVGaWVs
ZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlz
ZWNvbmQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk6CisgICAgICAgIChEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQpOgorICAgICAgICAoRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxk
RWxlbWVudCk6CisgICAgICAgIChEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCk6CisgICAgICAg
IChEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpk
aXNwbGF5U2l6ZU9mTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OmVuc3VyZUluUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYW5k
bGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmVuc3VyZUluUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpyYW5nZSk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVw
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZhbHVl
QXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQpOgorCiAyMDEyLTA4LTA5ICBTaGFuZSBTdGVwaGVucyAgPHNoYW5lc3RlcGhlbnNAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IENTU1BhcnNlcidzIG1fcmV1c2FibGVTZWxlY3Rv
clZlY3RvciB0byBPd25QdHIgYW5kIHJlbmFtZSB0byBtX3NlbGVjdG9yVmVjdG9yLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDZmMjZmNTUyZWI3ZDg2ZGFmNmU3N2ZlZTNmOGZhNzgzMWE0MDY1NDAuLjNm
MDAyODA0YWRhYjM5NTdlYTg5NjgzNmUxYTFjNGI4Nzg2MjUxNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTU3NDIsNiArNTc0MiwxNiBAQAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRE
aXN0cmlidXRvci5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JR
dWVyeS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5
LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwJywK
KyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmgnLAorICAgICAg
ICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAg
ICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9z
aGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvc2hh
ZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3No
YWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRt
bC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oJywKICAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJvbC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0hUTUxDb250ZW50RWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGI4OTQ5ZjhlMmNjY2My
OTA1N2QwMTA5NzgwYzM4ZDA2NGYyNjYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKQEAgLTAsMCArMSw0NTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
ICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVU
X1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVFZGl0RWxlbWVu
dC5oIgorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEYXRlVGltZUZp
ZWxkRWxlbWVudHMuaCIKKyNpbmNsdWRlICJEYXRlVGltZUZvcm1hdC5oIgorI2luY2x1ZGUgIkRh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIK
KyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5j
bHVkZSAiTG9jYWxpemVkRGF0ZS5oIgorI2luY2x1ZGUgIkxvY2FsaXplZE51bWJlci5oIgorI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJTdGVwUmFuZ2UuaCIKKyNpbmNsdWRlICJU
ZXh0LmgiCisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK2NsYXNzIERhdGVUaW1lRWRpdEJ1aWxkZXIgOiBwcml2YXRlIERhdGVUaW1l
Rm9ybWF0OjpUb2tlbkhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1l
RWRpdEJ1aWxkZXIpOworCitwdWJsaWM6CisgICAgRGF0ZVRpbWVFZGl0QnVpbGRlcihEYXRlVGlt
ZUVkaXRFbGVtZW50JiwgY29uc3QgU3RlcFJhbmdlJik7CisKKyAgICBib29sIGJ1aWxkKGNvbnN0
IFN0cmluZyYpOworICAgIGJvb2wgbmVlZFNlY29uZEZpZWxkKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgYm9vbCBuZWVkTWlsbGlzZWNvbmRGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgbmVlZE1p
bnV0ZUZpZWxkKCkgY29uc3Q7CisKKyAgICAvLyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVy
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlLCBpbnQpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExp
dGVyYWwoY29uc3QgU3RyaW5nJikgT1ZFUlJJREUgRklOQUw7CisKKyAgICBEYXRlVGltZUVkaXRF
bGVtZW50JiBtX2VkaXRFbGVtZW50OworICAgIGNvbnN0IFN0ZXBSYW5nZSYgbV9zdGVwUmFuZ2U7
Cit9OworCitEYXRlVGltZUVkaXRCdWlsZGVyOjpEYXRlVGltZUVkaXRCdWlsZGVyKERhdGVUaW1l
RWRpdEVsZW1lbnQmIGVsZW1udCwgY29uc3QgU3RlcFJhbmdlJiBzdGVwUmFuZ2UpCisgICAgOiBt
X2VkaXRFbGVtZW50KGVsZW1udCkKKyAgICAsIG1fc3RlcFJhbmdlKHN0ZXBSYW5nZSkKK3sKK30K
KworYm9vbCBEYXRlVGltZUVkaXRCdWlsZGVyOjpidWlsZChjb25zdCBTdHJpbmcmIGZvcm1hdFN0
cmluZykKK3sKKyAgICBtX2VkaXRFbGVtZW50LnJlc2V0TGF5b3V0KCk7CisgICAgcmV0dXJuIERh
dGVUaW1lRm9ybWF0OjpwYXJzZShmb3JtYXRTdHJpbmcsICp0aGlzKTsKK30KKworYm9vbCBEYXRl
VGltZUVkaXRCdWlsZGVyOjpuZWVkTWlsbGlzZWNvbmRGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQ
ZXJTZWNvbmQpKS5pc1plcm8oKQorICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3RlcCgpLnJlbWFp
bmRlcihzdGF0aWNfY2FzdDxpbnQ+KG1zUGVyU2Vjb25kKSkuaXNaZXJvKCk7Cit9CisKK2Jvb2wg
RGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1Bl
ckhvdXIpKS5pc1plcm8oKQorICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3RlcCgpLnJlbWFpbmRl
cihzdGF0aWNfY2FzdDxpbnQ+KG1zUGVySG91cikpLmlzWmVybygpOworfQorCitib29sIERhdGVU
aW1lRWRpdEJ1aWxkZXI6Om5lZWRTZWNvbmRGaWVsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFt
X3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJNaW51
dGUpKS5pc1plcm8oKQorICAgICAgICB8fCAhbV9zdGVwUmFuZ2Uuc3RlcCgpLnJlbWFpbmRlcihz
dGF0aWNfY2FzdDxpbnQ+KG1zUGVyTWludXRlKSkuaXNaZXJvKCk7Cit9CisKK3ZvaWQgRGF0ZVRp
bWVFZGl0QnVpbGRlcjo6dmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxk
VHlwZSwgaW50KQoreworICAgIERvY3VtZW50KiBjb25zdCBkb2N1bWVudCA9IG1fZWRpdEVsZW1l
bnQuZG9jdW1lbnQoKTsKKworICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7CisgICAgY2FzZSBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExOgorICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZp
ZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVt
ZW50LCAwLCAxMSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVIb3VyMTI6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRp
bWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIDEsIDEy
KSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUhvdXIyMzoKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhvdXJGaWVs
ZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMCwgMjMpKTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0Ogor
ICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50LCAxLCAyNCkpOworICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNaW51dGU6IHsKKyAgICAgICAg
UmVmUHRyPERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudD4gZmllbGQgPSBEYXRlVGltZU1pbnV0
ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50KTsKKyAgICAgICAg
bV9lZGl0RWxlbWVudC5hZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmICghbmVlZE1pbnV0ZUZp
ZWxkKCkpCisgICAgICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDoKKyAg
ICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgdGltZUFNUE1MYWJlbHMoKSkpOworICAgICAg
ICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVTZWNvbmQ6IHsK
KyAgICAgICAgUmVmUHRyPERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50PiBmaWVsZCA9IERhdGVU
aW1lU2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQpOwor
ICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKGZpZWxkKTsKKyAgICAgICAgaWYgKCFuZWVk
U2Vjb25kRmllbGQoKSkKKyAgICAgICAgICAgIGZpZWxkLT5zZXRSZWFkT25seSgpOworCisgICAg
ICAgIGlmIChuZWVkTWlsbGlzZWNvbmRGaWVsZCgpKSB7CisgICAgICAgICAgICB2aXNpdExpdGVy
YWwobG9jYWxpemVkRGVjaW1hbFNlcGFyYXRvcigpKTsKKyAgICAgICAgICAgIHZpc2l0RmllbGQo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQsIDMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVGcmFjdGlvbmFsU2Vjb25kOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZU1pbGxpc2Vj
b25kRmllbGRFbGVtZW50PiBmaWVsZCA9IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCk7CisgICAgICAgIG1fZWRpdEVsZW1lbnQu
YWRkRmllbGQoZmllbGQpOworICAgICAgICBpZiAoIW5lZWRNaWxsaXNlY29uZEZpZWxkKCkpCisg
ICAgICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgRGF0ZVRp
bWVFZGl0QnVpbGRlcjo6dmlzaXRMaXRlcmFsKGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBB
U1NFUlQodGV4dC5sZW5ndGgoKSk7CisgICAgbV9lZGl0RWxlbWVudC5hcHBlbmRDaGlsZChUZXh0
OjpjcmVhdGUobV9lZGl0RWxlbWVudC5kb2N1bWVudCgpLCB0ZXh0KSk7Cit9CisKKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RWRpdENvbnRy
b2xPd25lcjo6fkVkaXRDb250cm9sT3duZXIoKQoreworfQorCitEYXRlVGltZUVkaXRFbGVtZW50
OjpEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRWRpdENvbnRyb2xPd25l
ciYgZWRpdENvbnRyb2xPd25lcikKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1l
bnQpCisgICAgLCBtX2VkaXRDb250cm9sT3duZXIoJmVkaXRDb250cm9sT3duZXIpCisgICAgLCBt
X3NwaW5CdXR0b24oMCkKKyAgICAsIG1fZm9jdXNGaWVsZEluZGV4KGludmFsaWRGaWVsZEluZGV4
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBkYXRlVGltZUVkaXRQ
c2V1ZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQiKSk7CisgICAgc2V0U2hhZG93UHNldWRv
SWQoZGF0ZVRpbWVFZGl0UHNldWRvSWQpOworfQorCitEYXRlVGltZUVkaXRFbGVtZW50Ojp+RGF0
ZVRpbWVFZGl0RWxlbWVudCgpCit7CisgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZp
ZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkKKyAgICAgICAgbV9maWVs
ZHNbZmllbGRJbmRleF0tPnJlbW92ZUV2ZW50SGFuZGxlcigpOworCisgICAgaWYgKG1fc3BpbkJ1
dHRvbikKKyAgICAgICAgbV9zcGluQnV0dG9uLT5yZW1vdmVTdGVwQWN0aW9uSGFuZGxlcigpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmFkZEZpZWxkKFBhc3NSZWZQdHI8RGF0ZVRp
bWVGaWVsZEVsZW1lbnQ+IGZpZWxkKQoreworICAgIGlmIChtX2ZpZWxkcy5zaXplKCkgPT0gbV9m
aWVsZHMuY2FwYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZmllbGRzLmFwcGVuZChm
aWVsZC5nZXQoKSk7CisgICAgYXBwZW5kQ2hpbGQoZmllbGQpOworfQorCitQYXNzUmVmUHRyPERh
dGVUaW1lRWRpdEVsZW1lbnQ+IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCog
ZG9jdW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRDb250cm9sT3duZXIsIGNvbnN0IFN0ZXBS
YW5nZSYgc3RlcFJhbmdlKQoreworICAgIFJlZlB0cjxEYXRlVGltZUVkaXRFbGVtZW50PiBjb250
YWluZXIgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVFZGl0RWxlbWVudChkb2N1bWVudCwgZWRpdENv
bnRyb2xPd25lcikpOworICAgIGNvbnRhaW5lci0+bGF5b3V0KHN0ZXBSYW5nZSk7CisgICAgcmV0
dXJuIGNvbnRhaW5lci5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQoreworICAgIHVwZGF0ZVVJU3RhdGUoKTsKK30KKworRGF0
ZVRpbWVGaWVsZEVsZW1lbnQqIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkQXQoaW50IGZpZWxk
SW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpZWxkSW5kZXggPj0gMCAmJiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGZpZWxkSW5kZXgpIDwgbV9maWVsZHMuc2l6ZSgpID8gbV9maWVsZHNbZmllbGRJ
bmRleF0gOiAwOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3VzRmllbGRBdChp
bnQgbmV3Rm9jdXNGaWVsZEluZGV4KQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJbmRleCA9PSBu
ZXdGb2N1c0ZpZWxkSW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAgIERhdGVUaW1lRmllbGRF
bGVtZW50KiBjb25zdCBuZXdGb2N1c0ZpZWxkID0gZmllbGRBdChuZXdGb2N1c0ZpZWxkSW5kZXgp
OworICAgIGlmIChuZXdGb2N1c0ZpZWxkICYmIG5ld0ZvY3VzRmllbGQtPmlzUmVhZE9ubHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGN1cnJl
bnRGb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7CisKKyAgICBpZiAoY3Vy
cmVudEZvY3VzRmllbGQpCisgICAgICAgIGN1cnJlbnRGb2N1c0ZpZWxkLT5zZXRGb2N1cyhmYWxz
ZSk7CisKKyAgICBpZiAoIW5ld0ZvY3VzRmllbGQpIHsKKyAgICAgICAgbV9mb2N1c0ZpZWxkSW5k
ZXggPSBpbnZhbGlkRmllbGRJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
Zm9jdXNGaWVsZEluZGV4ID0gbmV3Rm9jdXNGaWVsZEluZGV4OworICAgIG5ld0ZvY3VzRmllbGQt
PnNldEZvY3VzKHRydWUpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAgICBpZiAoaXNE
aXNhYmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFm
aWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGtl
eWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBrZXlib2FyZEV2
ZW50LT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiTGVmdCIp
IHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAg
Y29uc3QgaW50IGZpZWxkSW5kZXggPSBwcmV2aW91c0ZpZWxkSW5kZXgoKTsKKyAgICAgICAgaWYg
KGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRl
eCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAi
UmlnaHQiKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgIGNvbnN0IGludCBmaWVsZEluZGV4ID0gbmV4dEZpZWxkSW5kZXgoKTsKKyAgICAgICAg
aWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJ
bmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9
PSAiVSswMDA5IikgeworICAgICAgICBjb25zdCBpbnQgZmllbGRJbmRleCA9IGtleWJvYXJkRXZl
bnQtPmdldE1vZGlmaWVyU3RhdGUoIlNoaWZ0IikgPyBwcmV2aW91c0ZpZWxkSW5kZXgoKSA6IG5l
eHRGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZpZWxkSW5kZXgpKSB7CisgICAg
ICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
Zm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkVmFsdWVDaGFuZ2Vk
KCkKK3sKKyAgICBpZiAobV9lZGl0Q29udHJvbE93bmVyKQorICAgICAgICBtX2VkaXRDb250cm9s
T3duZXItPmVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0
RWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgpCit7CisgICAgaWYgKG1fZm9jdXNGaWVsZEluZGV4
ICE9IGludmFsaWRGaWVsZEluZGV4KQorICAgICAgICBmb2N1c0ZpZWxkQXQobmV4dEZpZWxkSW5k
ZXgoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFuZGxlTW91c2VFdmVudChN
b3VzZUV2ZW50KiBtb3VzZUV2ZW50KQoreworICAgIGlmIChpc0Rpc2FibGVkKCkgfHwgaXNSZWFk
T25seSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobW91c2VFdmVudC0+dHlwZSgpICE9
IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBtb3VzZUV2ZW50LT5idXR0b24oKSAhPSBM
ZWZ0QnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBjb25zdCByZWxhdGVkVGFy
Z2V0ID0gbW91c2VFdmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOworICAgIGZvciAoc2l6ZV90IGZp
ZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgp
IHsKKyAgICAgICAgaWYgKG1fZmllbGRzW2ZpZWxkSW5kZXhdID09IHJlbGF0ZWRUYXJnZXQpIHsK
KyAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAg
ICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgICAgICBpZiAobV9lZGl0Q29udHJv
bE93bmVyKQorICAgICAgICAgICAgICAgIG1fZWRpdENvbnRyb2xPd25lci0+ZWRpdENvbnRyb2xN
b3VzZUZvY3VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Ym9vbCBEYXRlVGltZUVkaXRFbGVtZW50Ojppc0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9lZGl0Q29udHJvbE93bmVyICYmIG1fZWRpdENvbnRyb2xPd25lci0+aXNFZGl0Q29udHJv
bE93bmVyRGlzYWJsZWQoKTsKK30KKworYm9vbCBEYXRlVGltZUVkaXRFbGVtZW50Ojppc1JlYWRP
bmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJvbE93bmVyICYmIG1fZWRpdENv
bnRyb2xPd25lci0+aXNFZGl0Q29udHJvbE93bmVyUmVhZE9ubHkoKTsKK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjpsYXlvdXQoY29uc3QgU3RlcFJhbmdlJiBzdGVwUmFuZ2UpCit7Cisg
ICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9j
dXNGaWVsZEluZGV4KTsKKyAgICBmb2N1c0ZpZWxkQXQoaW52YWxpZEZpZWxkSW5kZXgpOworCisg
ICAgRGF0ZVRpbWVFZGl0QnVpbGRlciBidWlsZGVyKCp0aGlzLCBzdGVwUmFuZ2UpOworICAgIGNv
bnN0IFN0cmluZyBkYXRlVGltZUZvcm1hdCA9IGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyBs
b2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpIDogbG9jYWxpemVkU2hvcnRUaW1lRm9ybWF0VGV4dCgp
OworICAgIGlmICghYnVpbGRlci5idWlsZChkYXRlVGltZUZvcm1hdCkgfHwgbV9maWVsZHMuaXNF
bXB0eSgpKQorICAgICAgICBidWlsZGVyLmJ1aWxkKGJ1aWxkZXIubmVlZFNlY29uZEZpZWxkKCkg
PyAiSEg6bW06c3MiIDogIkhIOm1tIik7CisKKyAgICBSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+
IHNwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCksICp0aGlz
KTsKKyAgICBtX3NwaW5CdXR0b24gPSBzcGluQnV0dG9uLmdldCgpOworICAgIGFwcGVuZENoaWxk
KHNwaW5CdXR0b24pOworCisgICAgaWYgKGZvY3VzRmllbGQpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJ
bmRleCkgeworICAgICAgICAgICAgaWYgKGZvY3VzRmllbGQgPT0gbV9maWVsZHNbZmllbGRJbmRl
eF0pIHsKKyAgICAgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lu
dCBEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0RmllbGRJbmRleCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFsaWRGaWVsZEluZGV4KTsKKyAgICBmb3IgKHNp
emVfdCBmaWVsZEluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXggKyAxOyBmaWVsZEluZGV4IDwgbV9m
aWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX2ZpZWxkc1tmaWVs
ZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGZpZWxkSW5kZXg7Cisg
ICAgfQorICAgIHJldHVybiBtX2ZpZWxkcy5zaXplKCk7Cit9CisKK2ludCBEYXRlVGltZUVkaXRF
bGVtZW50OjpwcmV2aW91c0ZpZWxkSW5kZXgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZvY3Vz
RmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJbmRleCk7CisgICAgZm9yIChpbnQgZmllbGRJbmRl
eCA9IG1fZm9jdXNGaWVsZEluZGV4IC0gMTsgZmllbGRJbmRleCA+PSAwOyAtLWZpZWxkSW5kZXgp
IHsKKyAgICAgICAgaWYgKCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZpZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCgpCit7CisgICAg
dXBkYXRlVUlTdGF0ZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5
b3V0KCkKK3sKKyAgICBtX2ZpZWxkcy5zaHJpbmsoMCk7CisgICAgbV9zcGluQnV0dG9uID0gMDsK
KyAgICBtX2ZvY3VzRmllbGRJbmRleCA9IGludmFsaWRGaWVsZEluZGV4OworICAgIHJlbW92ZUNo
aWxkcmVuKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmZvY3VzRXZlbnQpIHsKKyAgICAgICAgaWYgKCFpc0Rpc2FibGVkKCkgJiYgIWlzUmVhZE9u
bHkoKSAmJiBtX2ZvY3VzRmllbGRJbmRleCA9PSBpbnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAg
ICAgIGZvY3VzRmllbGRBdCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsKKyAgICAgICAgZm9jdXNG
aWVsZEF0KGludmFsaWRGaWVsZEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5p
c0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2Fz
dDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0
IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAoIWZvY3Vz
RmllbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvY3VzRmllbGQtPmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNE
YXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxk
SW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisg
ICAgICAgIG1fZmllbGRzW2ZpZWxkSW5kZXhdLT5zZXRWYWx1ZUFzRGF0ZShkYXRlKTsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKCkKK3sKKyAgICBmb3IgKHNp
emVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVs
ZEluZGV4KQorICAgICAgICBtX2ZpZWxkc1tmaWVsZEluZGV4XS0+c2V0RW1wdHlWYWx1ZShEYXRl
VGltZUZpZWxkRWxlbWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZUVk
aXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcERvd24oKQoreworICAgIGlmIChEYXRlVGltZUZpZWxk
RWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpKQor
ICAgICAgICBmb2N1c0ZpZWxkLT5zdGVwRG93bigpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVs
ZW1lbnQ6OnNwaW5CdXR0b25TdGVwVXAoKQoreworICAgIGlmIChEYXRlVGltZUZpZWxkRWxlbWVu
dCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpKQorICAgICAg
ICBmb2N1c0ZpZWxkLT5zdGVwVXAoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50Ojp1
cGRhdGVVSVN0YXRlKCkKK3sKKyAgICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkg
eworICAgICAgICBtX3NwaW5CdXR0b24tPnJlbGVhc2VDYXB0dXJlKCk7CisgICAgICAgIGZvY3Vz
RmllbGRBdChpbnZhbGlkRmllbGRJbmRleCk7CisgICAgfQorfQorCitkb3VibGUgRGF0ZVRpbWVF
ZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgZG91YmxlIHZhbHVlID0g
MDsKKworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVs
ZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgY29uc3QgRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQqIGNvbnN0IGZpZWxkID0gbV9maWVsZHNbZmllbGRJbmRleF07CisgICAgICAgIGlmICgh
ZmllbGQtPmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgdmFsdWUgKz0gZmllbGQtPnZhbHVlQXNE
b3VibGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9EYXRlVGltZUVkaXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRl
VGltZUVkaXRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRkNjRkMjA4ZTdlZTc0NWUyYTA3ODlmOWNl
ZDMwMzczYzEzYzIwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRGF0ZVRpbWVFZGl0RWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lRWRp
dEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMp
CisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJv
bElubmVyRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRlQ29t
cG9uZW50czsKK2NsYXNzIERhdGVUaW1lRWRpdExheW91dGVyOworY2xhc3MgS2V5Ym9hcmRFdmVu
dDsKK2NsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBTdGVwUmFuZ2U7CisKKy8vIERhdGVUaW1lRWRp
dEVsZW1lbnQgY2xhc3MgY29udGFpbnMgbnVtYmVyaWMgZmllbGQgYW5kIHN5bWJvbGMgZmllbGQg
Zm9yCisvLyByZXByZXNlbnRpbmcgZGF0ZSBhbmQgdGltZSwgc3VjaCBhcworLy8gIC0gWWVhciwg
TW9udGgsIERheSBPZiBNb250aAorLy8gIC0gSG91ciwgTWludXRlLCBTZWNvbmQsIE1pbGxpc2Vj
b25kLCBBTS9QTQorY2xhc3MgRGF0ZVRpbWVFZGl0RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxl
bWVudCwgcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciwgcHJp
dmF0ZSBTcGluQnV0dG9uRWxlbWVudDo6U3RlcEFjdGlvbkhhbmRsZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKERhdGVUaW1lRWRpdEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgLy8gRWRp
dENvbnRyb2xPd25lciBpbXBsZW1lbnRlciBtdXN0IGNhbGwgcmVtb3ZlRWRpdENvbnRyb2xPd25l
ciB3aGVuCisgICAgLy8gaXQgZG9lc24ndCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1Y3Rp
b24uCisgICAgY2xhc3MgRWRpdENvbnRyb2xPd25lciB7CisgICAgcHVibGljOgorICAgICAgICB2
aXJ0dWFsIH5FZGl0Q29udHJvbE93bmVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29u
dHJvbE1vdXNlRm9jdXMoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29udHJvbFZh
bHVlQ2hhbmdlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzRWRpdENvbnRyb2xPd25l
ckRpc2FibGVkKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29udHJv
bE93bmVyUmVhZE9ubHkoKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEVkaXRDb250cm9sT3du
ZXImLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIHZpcnR1YWwgfkRhdGVUaW1lRWRpdEVsZW1l
bnQoKTsKKyAgICB2b2lkIGFkZEZpZWxkKFBhc3NSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1lbnQ+
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJSSURF
OworICAgIHZvaWQgZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGxheW91dChjb25z
dCBTdGVwUmFuZ2UmKTsKKyAgICB2b2lkIHJlYWRPbmx5U3RhdGVDaGFuZ2VkKCk7CisgICAgdm9p
ZCByZW1vdmVFZGl0Q29udHJvbE93bmVyKCkgeyBtX2VkaXRDb250cm9sT3duZXIgPSAwOyB9Cisg
ICAgdm9pZCByZXNldExheW91dCgpOworICAgIHZvaWQgc2V0RW1wdHlWYWx1ZSgpOworICAgIHZv
aWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKTsKKyAgICBkb3VibGUgdmFs
dWVBc0RvdWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgaW52
YWxpZEZpZWxkSW5kZXggPSAtMTsKKworICAgIC8vIERhdGV0aW1lIGNhbiBiZSByZXByZXNlbnQg
YXQgbW9zdCBmaXZlIGZpZWxkcywgc3VjaCBhcworICAgIC8vICAxLiB5ZWFyCisgICAgLy8gIDIu
IG1vbnRoCisgICAgLy8gIDMuIGRheS1vZi1tb250aAorICAgIC8vICA0LiBob3VyCisgICAgLy8g
IDUuIG1pbnV0ZQorICAgIC8vICA2LiBzZWNvbmQKKyAgICAvLyAgNy4gbWlsbGlzZWNvbmQKKyAg
ICAvLyAgOC4gQU0vUE0KKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1OdW1iZXJPZkZpZWxk
cyA9IDg7CisKKyAgICBEYXRlVGltZUVkaXRFbGVtZW50KERvY3VtZW50KiwgRWRpdENvbnRyb2xP
d25lciYpOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGZpZWxkQXQoaW50KSBjb25zdDsK
KyAgICB2b2lkIGZvY3VzRmllbGRBdChpbnQpOworICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
KTsKKyAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKKyAgICBib29sIGlzUmVhZE9ubHkoKSBj
b25zdDsKKyAgICBpbnQgbmV4dEZpZWxkSW5kZXgoKSBjb25zdDsKKyAgICBpbnQgcHJldmlvdXNG
aWVsZEluZGV4KCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVVSVN0YXRlKCk7CisKKyAgICAvLyBE
YXRlVGltZUZpZWxkRWxlbWVudDo6RmllbGRFdmVudEhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZp
cnR1YWwgdm9pZCBmaWVsZFZhbHVlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1
YWwgdm9pZCBmb2N1c09uTmV4dEZpZWxkKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICAvLyBTcGlu
QnV0dG9uRWxlbWVudDo6U3RlcEFjdGlvbkhhbmRsZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwg
dm9pZCBzcGluQnV0dG9uU3RlcERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3BpbkJ1dHRvblN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworCisgICAgVmVjdG9yPERhdGVU
aW1lRmllbGRFbGVtZW50KiwgbWF4aW11bU51bWJlck9mRmllbGRzPiBtX2ZpZWxkczsKKyAgICBF
ZGl0Q29udHJvbE93bmVyKiBtX2VkaXRDb250cm9sT3duZXI7CisgICAgU3BpbkJ1dHRvbkVsZW1l
bnQqIG1fc3BpbkJ1dHRvbjsKKyAgICBpbnQgbV9mb2N1c0ZpZWxkSW5kZXg7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJi
NmNjNWUyNDcyYjEzNzJiNGM2ZTAzMTU4OTgwZjExMTQ2NmI2NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmNwcApAQCAt
MCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRl
VGltZUZpZWxkRWxlbWVudC5oIgorCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitEYXRlVGltZUZpZWxkRWxlbWVudDo6
RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcigpCit7Cit9CisKK0RhdGVUaW1l
RmllbGRFbGVtZW50OjpEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZp
ZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikKKyAgICA6IEhUTUxFbGVtZW50KHNw
YW5UYWcsIGRvY3VtZW50KQorICAgICwgbV9maWVsZEV2ZW50SGFuZGxlcigmZmllbGRFdmVudEhh
bmRsZXIpCit7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkp
IHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldmVudCk7CisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9h
cmRFdmVudCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIo
a2V5Ym9hcmRFdmVudCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6
ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQp
Cit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93
bkV2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZp
ZXIgPSBrZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICBpZiAoa2V5SWRlbnRp
ZmllciA9PSAiRG93biIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgc3RlcERvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgc3RlcFVwKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVSswMDA4IikgeworICAgICAgICBrZXli
b2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBzZXRFbXB0eVZhbHVlKERp
c3BhdGNoRXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIERhdGVUaW1l
RmllbGRFbGVtZW50Ojpmb2N1c09uTmV4dEZpZWxkKCkKK3sKKyAgICBpZiAobV9maWVsZEV2ZW50
SGFuZGxlcikKKyAgICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+Zm9jdXNPbk5leHRGaWVsZCgp
OworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50Ojppbml0aWFsaXplKGNvbnN0IEF0b21p
Y1N0cmluZyYgc2hhZG93UHNldWRvSWQpCit7CisgICAgc2V0U2hhZG93UHNldWRvSWQoc2hhZG93
UHNldWRvSWQpOworICAgIGFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB2aXNp
YmxlVmFsdWUoKSkpOworfQorCitib29sIERhdGVUaW1lRmllbGRFbGVtZW50Ojppc1JlYWRPbmx5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShyZWFkb25seUF0dHIpOwor
fQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50OjpzZXRSZWFkT25seSgpCit7CisgICAgLy8g
U2V0IEhUTUwgYXR0cmlidXRlIHJlYWRvbmx5IHRvIGNoYW5nZSBhcHBlcmFuY2UuCisgICAgc2V0
Qm9vbGVhbkF0dHJpYnV0ZShyZWFkb25seUF0dHIsIHRydWUpOworICAgIHNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6dXBkYXRlVmlzaWJsZVZh
bHVlKEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBUZXh0KiBjb25zdCB0ZXh0
Tm9kZSA9IHRvVGV4dChmaXJzdENoaWxkKCkpOworICAgIGNvbnN0IFN0cmluZyBuZXdWaXNpYmxl
VmFsdWUgPSB2aXNpYmxlVmFsdWUoKTsKKyAgICBBU1NFUlQobmV3VmlzaWJsZVZhbHVlLmxlbmd0
aCgpID4gMCk7CisKKyAgICBpZiAodGV4dE5vZGUtPndob2xlVGV4dCgpID09IG5ld1Zpc2libGVW
YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dE5vZGUtPnJlcGxhY2VXaG9sZVRleHQo
bmV3VmlzaWJsZVZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKworICAgIGlmIChldmVudEJl
aGF2aW9yID09IERpc3BhdGNoRXZlbnQgJiYgbV9maWVsZEV2ZW50SGFuZGxlcikKKyAgICAgICAg
bV9maWVsZEV2ZW50SGFuZGxlci0+ZmllbGRWYWx1ZUNoYW5nZWQoKTsKK30KKworZG91YmxlIERh
dGVUaW1lRmllbGRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGFzVmFsdWUoKSA/IHZhbHVlQXNJbnRlZ2VyKCkgKiB1bml0SW5NaWxsaXNlY29uZCgpIDogc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUZpZWxkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYTQ1YzAyN2EzMzNiMDI2N2MyOWU1
NGZmYjViYjI2ODZlZGZlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRp
bWVGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9G
SUVMRFMpCisKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIERhdGVDb21wb25lbnRzOworCisvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBp
cyBiYXNlIGNsYXNzIG9mIGRhdGUgdGltZSBmaWVsZCBlbGVtZW50LgorY2xhc3MgRGF0ZVRpbWVG
aWVsZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKERhdGVUaW1lRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIGVudW0gRXZlbnRCZWhh
dmlvciB7CisgICAgICAgIERpc3BhdGNoTm9FdmVudCwKKyAgICAgICAgRGlzcGF0Y2hFdmVudCwK
KyAgICB9OworCisgICAgLy8gRmllbGRFdmVudEhhbmRsZXIgaW1wbGVtZW50ZXIgbXVzdCBjYWxs
IHJlbW92ZUV2ZW50SGFuZGxlciB3aGVuCisgICAgLy8gaXQgZG9lc24ndCBoYW5kbGUgZXZlbnQs
IGUuZy4gYXQgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgRmllbGRFdmVudEhhbmRsZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RmllbGRFdmVudEhhbmRsZXIoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2VkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZm9jdXNPbk5leHRGaWVsZCgpID0gMDsKKyAgICB9OworCisgICAgdmlydHVhbCB2b2lkIGRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
VmFsdWUoKSBjb25zdCA9IDA7CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7CisgICAgdm9p
ZCByZW1vdmVFdmVudEhhbmRsZXIoKSB7IG1fZmllbGRFdmVudEhhbmRsZXIgPSAwOyB9CisgICAg
dm9pZCBzZXRSZWFkT25seSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbXB0eVZhbHVlKEV2ZW50
QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlQXNJbnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rl
cFVwKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworICAgIGRv
dWJsZSB2YWx1ZUFzRG91YmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVn
ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3Qg
PSAwOworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBG
aWVsZEV2ZW50SGFuZGxlciYpOworICAgIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpOworICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKSA9IDA7CisgICAg
dm9pZCBpbml0aWFsaXplKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZpcnR1YWwgZG91Ymxl
IHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgPSAwOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZh
bHVlKEV2ZW50QmVoYXZpb3IpOworCitwcml2YXRlOgorICAgIHZvaWQgZGVmYXVsdEtleWJvYXJk
RXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKKworICAgIEZpZWxkRXZlbnRIYW5kbGVyKiBt
X2ZpZWxkRXZlbnRIYW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRp
bWVGaWVsZEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
RmllbGRFbGVtZW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZmN2ZhNWM3ZGEwMjg3N2RlNGNkMTZhMzk5
YWU5ODc5MGI1OTMyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElN
RV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisK
KyNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6RGF0ZVRp
bWVBTVBNRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXIm
IGZpZWxkRXZlbnRIYW5kbGVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYW1wbUxhYmVscykKKyAg
ICA6IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5k
bGVyLCBhbXBtTGFiZWxzKQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lQU1QTUZpZWxkRWxl
bWVudD4gRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBhbXBtTGFiZWxzKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBhbXBtUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWFtcG0tZmllbGQiKSk7Cisg
ICAgUmVmUHRyPERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcg
RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgYW1w
bUxhYmVscykpOworICAgIGZpZWxkLT5pbml0aWFsaXplKGFtcG1Qc3VlZG9JZCk7CisgICAgcmV0
dXJuIGZpZWxkLnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6
OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZh
bHVlQXNJbnRlZ2VyKGRhdGUuaG91cigpID49IDEyID8gMSA6IDApOworfQorCitkb3VibGUgRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1zUGVySG91ciAqIDEyOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK0RhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50
KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVy
LCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBtaW5pbXVtLCBtYXhpbXVtKQorICAg
ICwgbV9hbGlnbm1lbnQobWF4aW11bSArIG1heGltdW0gJSAyKQoreworICAgIEFTU0VSVCgoIW1p
bmltdW0gJiYgKG1heGltdW0gPT0gMTEgfHwgbWF4aW11bSA9PSAyMykpIHx8IChtaW5pbXVtID09
IDEgJiYgKG1heGltdW0gPT0gMTIgfHwgbWF4aW11bSA9PSAyNCkpKTsKK30KKworUGFzc1JlZlB0
cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5k
bGVyLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIGhvdXJQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91
ci1maWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBmaWVsZCA9
IGFkb3B0UmVmKG5ldyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZl
bnRIYW5kbGVyLCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoaG91
clBzdWVkb0lkKTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVU
aW1lSG91ckZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
IGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworfQorCit2b2lk
IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlQXNI
b3VyMjMsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBjb25zdCBpbnQgdmFs
dWUgPSBSYW5nZSgwLCAyMykuY2xhbXBWYWx1ZSh2YWx1ZUFzSG91cjIzKSAlIG1fYWxpZ25tZW50
OworICAgIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIocmFu
Z2UoKS5taW5pbXVtICYmICF2YWx1ZSA/IG1fYWxpZ25tZW50IDogdmFsdWUsIGV2ZW50QmVoYXZp
b3IpOworfQorCitkb3VibGUgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNl
Y29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1zUGVySG91cjsKK30KKworaW50IERhdGVUaW1l
SG91ckZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBo
YXNWYWx1ZSgpID8gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigp
ICUgbV9hbGlnbm1lbnQgOiAtMTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbGxpc2Vjb25k
RmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxk
RXZlbnRIYW5kbGVyKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3VtZW50
LCBmaWVsZEV2ZW50SGFuZGxlciwgMCwgOTk5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1l
TWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50
SGFuZGxlcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbWlsbGlz
ZWNvbmRQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGQi
KSk7CisgICAgUmVmUHRyPERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0g
YWRvcHRSZWYobmV3IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZp
ZWxkRXZlbnRIYW5kbGVyKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUobWlsbGlzZWNvbmRQc3Vl
ZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZU1p
bGxpc2Vjb25kRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50
cyYgZGF0ZSkKK3sKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihkYXRlLm1pbGxpc2Vjb25kKCkpOwor
fQorCitkb3VibGUgRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlz
ZWNvbmQoKSBjb25zdAoreworICAgIHJldHVybiAxOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK0RhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0
ZUZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVs
ZEV2ZW50SGFuZGxlcikKKyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVu
dCwgZmllbGRFdmVudEhhbmRsZXIsIDAsIDU5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1l
TWludXRlRmllbGRFbGVtZW50PiBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKERv
Y3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBtaW51dGVQc3VlZG9JZCwg
KCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLWZpZWxkIikpOworICAgIFJlZlB0cjxEYXRl
VGltZU1pbnV0ZUZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVNaW51
dGVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyKSk7CisgICAgZmllbGQt
PmluaXRpYWxpemUobWludXRlUHN1ZWRvSWQpOworICAgIHJldHVybiBmaWVsZC5yZWxlYXNlKCk7
Cit9CisKK3ZvaWQgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNv
bnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUu
bWludXRlKCkpOworfQorCitkb3VibGUgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnVuaXRJ
bk1pbGxpc2Vjb25kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJNaW51dGU7Cit9CisKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1l
bnQ6OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRF
dmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgMCwgNTkpCit7Cit9CisKK1Bh
c3NSZWZQdHI8RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IERhdGVUaW1lU2Vjb25kRmllbGRF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmll
bGRFdmVudEhhbmRsZXIpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IHNlY29uZFBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQiKSk7
CisgICAgUmVmUHRyPERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVm
KG5ldyBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRs
ZXIpKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZShzZWNvbmRQc3VlZG9JZCk7CisgICAgcmV0dXJu
IGZpZWxkLnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6
c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgc2V0VmFs
dWVBc0ludGVnZXIoZGF0ZS5zZWNvbmQoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZVNlY29uZEZp
ZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdAoreworICAgIHJldHVybiBtc1Bl
clNlY29uZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTdiYzFlZmE1NTJlMzQ4MDRkNjNjMzU0MGRlNjYyYTBlZjA0N2I1MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50
cy5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGlt
ZUZpZWxkRWxlbWVudHNfaAorI2RlZmluZSBEYXRlVGltZUZpZWxkRWxlbWVudHNfaAorCisjaWYg
RU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVUaW1lQU1QTUZp
ZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQpOworCitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBjcmVhdGUo
RG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisK
K3ByaXZhdGU6CisgICAgRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRF
dmVudEhhbmRsZXImLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworCisgICAgLy8gRGF0ZVRpbWVG
aWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShj
b25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91Ymxl
IHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCisKKy8vIERh
dGVUaW1lSG91ckZpZWxkRWxlbWVudCBpcyB1c2VkIGZvciBob3VyIGZpZWxkIG9mIGRhdGUgdGlt
ZSBmb3JtYXQKKy8vIHN1cHBvcnRpbmcgZm9sbG93aW5nIHBhdHRlcm5zOgorLy8gIC0gMCB0byAx
MQorLy8gIC0gMSB0byAxMgorLy8gIC0gMCB0byAyMworLy8gIC0gMSB0byAyNAorY2xhc3MgRGF0
ZVRpbWVIb3VyRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KTsK
KworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dD4gY3JlYXRlKERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwgaW50
IG1heGltdW0pOworCitwcml2YXRlOgorICAgIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChEb2N1
bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKwor
ICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBGSU5BTDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlz
cGF0Y2hOb0V2ZW50KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5N
aWxsaXNlY29uZCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZhbHVl
QXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBjb25zdCBpbnQgbV9hbGln
bm1lbnQ7Cit9OworCitjbGFzcyBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IDogcHVi
bGljIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCitwcml2YXRlOgorICAgIERhdGVUaW1lTWls
bGlzZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCisg
ICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAg
IHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7
Cit9OworCitjbGFzcyBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1l
TWludXRlRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGVUaW1lTWludXRlRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFu
ZGxlciYpOworCitwcml2YXRlOgorICAgIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KERvY3Vt
ZW50KiwgRmllbGRFdmVudEhhbmRsZXImKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNv
bXBvbmVudHMmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxs
aXNlY29uZCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworfTsKKworY2xhc3MgRGF0ZVRpbWVTZWNv
bmRGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImKTsKKworcHJpdmF0ZToKKyAgICBE
YXRlVGltZVNlY29uZEZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7
CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCBkb3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBG
SU5BTDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhZGRlMjcwMzVkYjU1MWUzYmVhM2IwYTU4NjA3
Mzg4ZTIzYWNiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTczIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBF
X1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudC5oIgorCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXpl
ZE51bWJlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgRE9NVGltZVN0YW1wIHR5cGVBaGVhZFRpbWVv
dXQgPSAxMDAwOworCitzdGF0aWMgc2l6ZV90IGRpc3BsYXlTaXplT2ZOdW1iZXIoaW50IHZhbHVl
KQoreworICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsKKworICAgIGlmICghdmFsdWUpCisgICAgICAg
IHJldHVybiAxOworCisgICAgaW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAgICB3aGlsZSAodmFs
dWUpIHsKKyAgICAgICAgdmFsdWUgLz0gMTA7CisgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7Cisg
ICAgfQorCisgICAgcmV0dXJuIG51bWJlck9mRGlnaXRzOworfQorCitEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OlJhbmdlOjpSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAg
OiBtYXhpbXVtKG1heGltdW0pCisgICAgLCBtaW5pbXVtKG1pbmltdW0pCit7CisgICAgQVNTRVJU
KG1pbmltdW0gPD0gbWF4aW11bSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OlJhbmdlOjpjbGFtcFZhbHVlKGludCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3Rk
OjptaW4oc3RkOjptYXgodmFsdWUsIG1pbmltdW0pLCBtYXhpbXVtKTsKK30KKworRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGludCBtaW5p
bXVtLCBpbnQgbWF4aW11bSkKKyAgICA6IERhdGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50LCBm
aWVsZEV2ZW50SGFuZGxlcikKKyAgICAsIG1fbGFzdERpZ2l0Q2hhclRpbWUoMCkKKyAgICAsIG1f
cmFuZ2UobWluaW11bSwgbWF4aW11bSkKKyAgICAsIG1fdmFsdWUoMCkKKyAgICAsIG1faGFzVmFs
dWUoZmFsc2UpCit7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYg
KGlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGtleWJvYXJkRXZlbnQt
PnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVUNoYXIgY2hhckNvZGUgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oa2V5Ym9hcmRFdmVudC0+
Y2hhckNvZGUoKSk7CisgICAgaWYgKGNoYXJDb2RlIDwgJyAnKQorICAgICAgICByZXR1cm47CisK
KyAgICBET01UaW1lU3RhbXAgZGVsdGEgPSBrZXlib2FyZEV2ZW50LT50aW1lU3RhbXAoKSAtIG1f
bGFzdERpZ2l0Q2hhclRpbWU7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7CisKKyAgICBT
dHJpbmcgbnVtYmVyID0gY29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoU3RyaW5nKCZjaGFyQ29k
ZSwgMSkpOworICAgIGNvbnN0IGludCBkaWdpdCA9IG51bWJlclswXSAtICcwJzsKKyAgICBpZiAo
ZGlnaXQgPCAwIHx8IGRpZ2l0ID4gOSkKKyAgICAgICAgcmV0dXJuOworCisgICAga2V5Ym9hcmRF
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX2hhc1Zh
bHVlICYmIGRlbHRhIDwgdHlwZUFoZWFkVGltZW91dCA/IG1fdmFsdWUgKiAxMCArIGRpZ2l0IDog
ZGlnaXQsIERpc3BhdGNoRXZlbnQpOworICAgIGlmIChtX3ZhbHVlICogMTAgPiBtX3JhbmdlLm1h
eGltdW0pCisgICAgICAgIGZvY3VzT25OZXh0RmllbGQoKTsKKyAgICBlbHNlCisgICAgICAgIG1f
bGFzdERpZ2l0Q2hhclRpbWUgPSBrZXlib2FyZEV2ZW50LT50aW1lU3RhbXAoKTsKK30KKworYm9v
bCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9oYXNWYWx1ZTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6
OnNldEVtcHR5VmFsdWUoRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIC8vIEZv
ciByZWFkLW9ubHkgZmllbGQsIGVtcHR5IHZhbHVlIG1lYW5zIHZhbHVlIDAuCisgICAgbV9oYXNW
YWx1ZSA9IGlzUmVhZE9ubHkoKTsKKyAgICBtX3ZhbHVlID0gMDsKKyAgICB1cGRhdGVWaXNpYmxl
VmFsdWUoZXZlbnRCZWhhdmlvcik7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQg
dmFsdWUsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3ZhbHVlID0gY2xh
bXBWYWx1ZSh2YWx1ZSk7CisgICAgbV9oYXNWYWx1ZSA9IHRydWU7CisgICAgdXBkYXRlVmlzaWJs
ZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUgPSAwOworfQor
Cit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQoreworICAgIGlm
IChtX2hhc1ZhbHVlKQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3ZhbHVlID09IG1fcmFu
Z2UubWluaW11bSA/IG1fcmFuZ2UubWF4aW11bSA6IGNsYW1wVmFsdWUobV92YWx1ZSAtIDEpLCBE
aXNwYXRjaEV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFu
Z2UubWF4aW11bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50OjpzdGVwVXAoKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICBzZXRW
YWx1ZUFzSW50ZWdlcihtX3ZhbHVlID09IG1fcmFuZ2UubWF4aW11bSA/IG1fcmFuZ2UubWluaW11
bSA6IGNsYW1wVmFsdWUobV92YWx1ZSArIDEpLCBEaXNwYXRjaEV2ZW50KTsKKyAgICBlbHNlCisg
ICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWluaW11bSwgRGlzcGF0Y2hFdmVudCk7
Cit9CisKK1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
CisgICAgaWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5OSkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b0xvY2FsaXplZE51bWJlcihTdHJpbmc6Om51bWJlcihtX3ZhbHVlKSk7CisKKyAgICBpZiAobV9y
YW5nZS5tYXhpbXVtID4gOTkpCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1i
ZXIoU3RyaW5nOjpmb3JtYXQoIiUwM2QiLCBtX3ZhbHVlKSk7CisKKyAgICByZXR1cm4gY29udmVy
dFRvTG9jYWxpemVkTnVtYmVyKFN0cmluZzo6Zm9ybWF0KCIlMDJkIiwgbV92YWx1ZSkpOworfQor
CitpbnQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1faGFzVmFsdWUgPyBtX3ZhbHVlIDogLTE7Cit9CisKK1N0cmluZyBE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZSgpOworCisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworICAgIGZvciAoaW50IG51bWJlck9mRGFzaHMgPSBzdGQ6Om1heChkaXNw
bGF5U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWF4aW11bSksIGRpc3BsYXlTaXplT2ZOdW1iZXIobV9y
YW5nZS5taW5pbXVtKSk7IG51bWJlck9mRGFzaHM7IC0tbnVtYmVyT2ZEYXNocykKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoJy0nKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iMDYwMDc5NTQ5ZTRjZTU4MjY2YmZlMWExNTlkN2JiYzlhMGU4NmZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQor
I2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHJlcHJlc2VudHMgbnVtZXJpYyBmaWVs
ZCBvZiBkYXRlIHRpbWUgZm9ybWF0LAorLy8gc3VjaCBhczoKKy8vICAtIGhvdXIKKy8vICAtIG1p
bnV0ZQorLy8gIC0gbWlsbGlzZWNvbmQKKy8vICAtIHNlY29uZAorLy8gIC0geWVhcgorY2xhc3Mg
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQp
OworCitwdWJsaWM6CisgICAgc3RydWN0IFJhbmdlIHsKKyAgICAgICAgUmFuZ2UoaW50IG1pbmlt
dW0sIGludCBtYXhpbXVtKTsKKyAgICAgICAgaW50IGNsYW1wVmFsdWUoaW50KSBjb25zdDsKKwor
ICAgICAgICBpbnQgbWF4aW11bTsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgfTsKKworcHJv
dGVjdGVkOgorICAgIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxk
RXZlbnRIYW5kbGVyJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworICAgIGludCBjbGFt
cFZhbHVlKGludCB2YWx1ZSkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5jbGFtcFZhbHVlKHZhbHVl
KTsgfQorICAgIGNvbnN0IFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0K
KworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwor
Citwcml2YXRlOgorICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgT1ZFUlJJREUg
RklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNldEVtcHR5VmFsdWUoRXZlbnRCZWhhdmlvcikgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
U3RyaW5nIHZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBET01UaW1lU3RhbXAg
bV9sYXN0RGlnaXRDaGFyVGltZTsKKyAgICBjb25zdCBSYW5nZSBtX3JhbmdlOworICAgIGludCBt
X3ZhbHVlOworICAgIGJvb2wgbV9oYXNWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg3
MmUyMTQ1ZTZmZTdiMDgzMjUzNjBjNDRmYTBmOWI0MDRkNTE5NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1
ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIktleWJvYXJk
RXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVs
ZEV2ZW50SGFuZGxlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN5bWJvbHMpCisgICAgOiBEYXRl
VGltZUZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpCisgICAgLCBtX3N5
bWJvbHMoc3ltYm9scykKKyAgICAsIG1fc2VsZWN0ZWRJbmRleCgtMSkKK3sKKyAgICBBU1NFUlQo
IXN5bWJvbHMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7
CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5cHJlc3NF
dmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVUNoYXIgY2hhckNvZGUgPSBXVEY6
OlVuaWNvZGU6OnRvTG93ZXIoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSk7CisgICAgaWYgKGNo
YXJDb2RlIDwgJyAnKQorICAgICAgICByZXR1cm47CisKKyAgICBrZXlib2FyZEV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1f
c3ltYm9scy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX3N5bWJvbHNbaW5kZXhd
LmlzRW1wdHkoKSAmJiBXVEY6OlVuaWNvZGU6OnRvTG93ZXIobV9zeW1ib2xzW2luZGV4XVswXSkg
PT0gY2hhckNvZGUpIHsKKyAgICAgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKGluZGV4LCBEaXNw
YXRjaEV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Ym9vbCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2VsZWN0ZWRJbmRleCA+PSAwOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9s
aWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUoRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9y
KQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGludmFsaWRJbmRleDsKKyAgICB1cGRhdGVWaXNp
YmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IG5ld1NlbGVjdGVkSW5kZXgsIEV2ZW50QmVo
YXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihuZXdTZWxlY3RlZEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KG1fc3ltYm9scy5z
aXplKCkgLSAxKSkpOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30K
Kwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwRG93bigpCit7CisgICAg
Y29uc3QgaW50IHNpemUgPSBtX3N5bWJvbHMuc2l6ZSgpOworICAgIG1fc2VsZWN0ZWRJbmRleCA9
IGhhc1ZhbHVlKCkgPyAobV9zZWxlY3RlZEluZGV4ICsgc2l6ZSAtIDEpICUgc2l6ZSA6IHNpemUg
LSAxOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShEaXNwYXRjaEV2ZW50KTsKK30KKwordm9pZCBE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwVXAoKQoreworICAgIG1fc2VsZWN0ZWRJ
bmRleCA9IGhhc1ZhbHVlKCkgPyAobV9zZWxlY3RlZEluZGV4ICsgMSkgJSBtX3N5bWJvbHMuc2l6
ZSgpIDogMDsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0
cmluZyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5bWJvbHNbbV9zZWxlY3RlZEluZGV4XSA6IGVtcHR5U3Ry
aW5nKCk7Cit9CisKK2ludCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50
ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbmRleDsKK30KKworU3RyaW5n
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5bWJvbHNbbV9zZWxlY3RlZEluZGV4XSA6ICItLSI7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTE5MTBhMjBkY2M2N2UxYmZiY2YxOGI2OTdiMTQ0ZjVjYTg3MmI0YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9s
aWNGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudF9oCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExF
X0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgcmVwcmVzZW50cyBu
b24tbnVtZXJpYyBmaWVsZCBvZiBkYXRhIHRpbWUKKy8vIGZvcm1hdCwgc3VjaCBhczogQU0vUE0s
IGFuZCBtb250aC4KK2NsYXNzIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgOiBwdWJsaWMg
RGF0ZVRpbWVGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQpOworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVu
dEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBPVkVSUklERSBGSU5BTDsKKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgY29uc3QgaW50IGludmFsaWRJbmRleCA9IC0xOworCisgICAgLy8gRGF0ZVRp
bWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2Fy
ZEV2ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW1w
dHlWYWx1ZShFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUo
KSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigp
IGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgp
IGNvbnN0IE9WRVJSSURFIEZJTkFMOworCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbV9zeW1i
b2xzOworICAgIGludCBtX3NlbGVjdGVkSW5kZXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157669</attachid>
            <date>2012-08-10 01:24:18 -0700</date>
            <delta_ts>2012-08-10 01:29:47 -0700</delta_ts>
            <desc>Patch 8</desc>
            <filename>bug-92960-20120810172349.patch</filename>
            <type>text/plain</type>
            <size>66650</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUyNjI2OTkyNjFkODY3
ODNjNTNjMWE4MTNmYjNiNTViMjkwOTM3OS4uNzYzZDRiMDRkZTYzODJmYmY3NjI1ZTVjZDJiMTU1
Y2ViNTM5NzJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAxMi0wOC0wOSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJ
IGZvciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVy
IG9mIG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1l
RmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25k
CisgICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9y
IG1pbnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNl
IGNsYXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkK
KyAgICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
IGJ1aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3Qg
Y2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGlu
Y2x1ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwv
c2hhZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwg
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwK
KyAgICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEJ1aWxkZXI6Om5lZWRTZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRCdWlsZGVyOjpzaG91bGRNaWxsaXNlY29uZEZpZWxkUmVhZE9ubHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkTWludXRlRmllbGRSZWFkT25s
eSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRCdWlsZGVyOjpzaG91bGRTZWNvbmRG
aWVsZFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1aWxkZXI6OnZp
c2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRM
aXRlcmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250
cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIncyBkaXNh
YmxlZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxl
bWVudDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpm
b2N1c0ZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
OjpmaWVsZFZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojpmb2N1c09uTmV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6aXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0Rmll
bGRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91
c0ZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVh
ZE9ubHlTdGF0ZUNoYW5nZWQpOiBDYWxsZWQgd2hlbiBvd25lcidzIHJlYWRPbmx5IHN0YXRlIGlz
IGNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZh
bHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEVt
cHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1
dHRvblN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNw
aW5CdXR0b25TdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6
dXBkYXRlVUlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojp2
YWx1ZUFzRG91YmxlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50
Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVFZGl0RWxlbWVudCk6CisgICAgICAgIChFZGl0
Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnJl
bW92ZUVkaXRDb250cm9sT3duZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxl
bWVudDo6RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRLZXlib2Fy
ZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
Zm9jdXNPbk5leHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0
UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0
ZVZpc2libGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1l
bnQuaDogQWRkZWQuCisgICAgICAgIChEYXRlVGltZUZpZWxkRWxlbWVudCk6CisgICAgICAgIChG
aWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZp
ZWxkRWxlbWVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZp
ZWxkRWxlbWVudDo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lSG91ckZpZWxkRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVl
QXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0
VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJG
aWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
TWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6
OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRG
aWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6dW5pdEluTWls
bGlzZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6
OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVT
ZWNvbmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmg6IEFkZGVkLgorICAgICAgICAoRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dCk6CisgICAgICAgIChEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAg
KERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lU2Vjb25kRmll
bGRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlTaXplT2ZOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpS
YW5nZTo6ZW5zdXJlSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojpz
ZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OnN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cv
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6ZW5zdXJlSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQ6OnJhbmdlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtl
eWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudDo6aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudDo6c2V0RW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwVXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Lmg6IEFk
ZGVkLgorICAgICAgICAoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk6CisKIDIwMTItMDgt
MTAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjUyMzAgYW5kIHIxMjUyMzguCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNmYyNmY1NTJlYjdkODZkYWY2ZTc3ZmVlM2Y4ZmE3ODMxYTQwNjU0MC4uM2YwMDI4
MDRhZGFiMzk1N2VhODk2ODM2ZTFhMWM0Yjg3ODYyNTE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
NTc0Miw2ICs1NzQyLDE2IEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudERpc3Ry
aWJ1dG9yLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5
LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaCcs
CisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAnLAorICAg
ICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCcsCisgICAgICAgICAg
ICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3No
YWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRv
dy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cv
RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3No
YWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFk
b3cvRGV0YWlsc01hcmtlckNvbnRyb2wuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvSFRN
TENvbnRlbnRFbGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyOGIxNDU1OWVkY2YxMTZjNDhm
YzAzNGM2OTRkYTU0ZDE2NjY0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDQ3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQ
RV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUVkaXRFbGVtZW50Lmgi
CisKKyNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRF
bGVtZW50cy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRm9ybWF0LmgiCisjaW5jbHVkZSAiRGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRl
ICJMb2NhbGl6ZWREYXRlLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2luY2x1ZGUgIlRleHQu
aCIKKyNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKKworY2xhc3MgRGF0ZVRpbWVFZGl0QnVpbGRlciA6IHByaXZhdGUgRGF0ZVRpbWVGb3Jt
YXQ6OlRva2VuSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0
QnVpbGRlcik7CisKK3B1YmxpYzoKKyAgICBEYXRlVGltZUVkaXRCdWlsZGVyKERhdGVUaW1lRWRp
dEVsZW1lbnQmLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIGJvb2wgYnVpbGQoY29uc3QgU3Ry
aW5nJik7CisgICAgYm9vbCBuZWVkU2Vjb25kRmllbGQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBib29sIG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3Q7CisgICAgYm9vbCBuZWVkTWludXRl
RmllbGQoKSBjb25zdDsKKyAgICBib29sIHNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgp
IGNvbnN0OworICAgIGJvb2wgc2hvdWxkTWludXRlRmllbGRSZWFkT25seSgpIGNvbnN0OworICAg
IGJvb2wgc2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0OworCisgICAgLy8gRGF0ZVRp
bWVGb3JtYXQ6OlRva2VuSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KSBPVkVSUklERSBGSU5BTDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFIEZJTkFM
OworCisgICAgRGF0ZVRpbWVFZGl0RWxlbWVudCYgbV9lZGl0RWxlbWVudDsKKyAgICBjb25zdCBT
dGVwUmFuZ2UmIG1fc3RlcFJhbmdlOworfTsKKworRGF0ZVRpbWVFZGl0QnVpbGRlcjo6RGF0ZVRp
bWVFZGl0QnVpbGRlcihEYXRlVGltZUVkaXRFbGVtZW50JiBlbGVtbnQsIGNvbnN0IFN0ZXBSYW5n
ZSYgc3RlcFJhbmdlKQorICAgIDogbV9lZGl0RWxlbWVudChlbGVtbnQpCisgICAgLCBtX3N0ZXBS
YW5nZShzdGVwUmFuZ2UpCit7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQo
Y29uc3QgU3RyaW5nJiBmb3JtYXRTdHJpbmcpCit7CisgICAgbV9lZGl0RWxlbWVudC5yZXNldExh
eW91dCgpOworICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9ybWF0U3RyaW5nLCAq
dGhpcyk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmll
bGQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRl
cihzdGF0aWNfY2FzdDxpbnQ+KG1zUGVyU2Vjb25kKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1f
c3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNlY29uZCkp
LmlzWmVybygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6Om5lZWRNaW51dGVGaWVs
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVy
KHN0YXRpY19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3Rl
cFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlckhvdXIpKS5pc1pl
cm8oKTsKK30KKworYm9vbCBEYXRlVGltZUVkaXRCdWlsZGVyOjpuZWVkU2Vjb25kRmllbGQoKSBj
b25zdAoreworICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzdGF0
aWNfY2FzdDxpbnQ+KG1zUGVyTWludXRlKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJh
bmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1Blck1pbnV0ZSkpLmlzWmVy
bygpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludCkKK3sKKyAgICBEb2N1bWVudCogY29uc3Qg
ZG9jdW1lbnQgPSBtX2VkaXRFbGVtZW50LmRvY3VtZW50KCk7CisKKyAgICBzd2l0Y2ggKGZpZWxk
VHlwZSkgeworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMToKKyAgICAg
ICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMCwgMTEpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOgorICAgICAgICBtX2VkaXRF
bGVtZW50LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
LCBtX2VkaXRFbGVtZW50LCAxLCAxMikpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRk
RmllbGQoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVs
ZW1lbnQsIDAsIDIzKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUhvdXIyNDoKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMSwg
MjQpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlTWludXRlOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+
IGZpZWxkID0gRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9l
ZGl0RWxlbWVudCk7CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoZmllbGQpOworICAg
ICAgICBpZiAoc2hvdWxkTWludXRlRmllbGRSZWFkT25seSgpKQorICAgICAgICAgICAgZmllbGQt
PnNldFJlYWRPbmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVQZXJpb2Q6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmll
bGQoRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1l
bnQsIHRpbWVBTVBNTGFiZWxzKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25kOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZVNl
Y29uZEZpZWxkRWxlbWVudD4gZmllbGQgPSBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50KTsKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRG
aWVsZChmaWVsZCk7CisgICAgICAgIGlmIChzaG91bGRTZWNvbmRGaWVsZFJlYWRPbmx5KCkpCisg
ICAgICAgICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKworICAgICAgICBpZiAobmVlZE1pbGxp
c2Vjb25kRmllbGQoKSkgeworICAgICAgICAgICAgdmlzaXRMaXRlcmFsKGxvY2FsaXplZERlY2lt
YWxTZXBhcmF0b3IoKSk7CisgICAgICAgICAgICB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNl
Y29uZDogeworICAgICAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4g
ZmllbGQgPSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQs
IG1fZWRpdEVsZW1lbnQpOworICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKGZpZWxkKTsK
KyAgICAgICAgaWYgKHNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpKQorICAgICAgICAg
ICAgZmllbGQtPnNldFJlYWRPbmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIERhdGVUaW1lRWRpdEJ1
aWxkZXI6OnNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNl
Y29uZCkpLmlzWmVybygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnNob3VsZE1p
bnV0ZUZpZWxkUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0ZXBSYW5nZS5zdGVw
KCkucmVtYWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCk7Cit9CisK
K2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fc3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nh
c3Q8aW50Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEJ1
aWxkZXI6OnZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgQVNTRVJUKHRl
eHQubGVuZ3RoKCkpOworICAgIG1fZWRpdEVsZW1lbnQuYXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRl
KG1fZWRpdEVsZW1lbnQuZG9jdW1lbnQoKSwgdGV4dCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK0RhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6
On5FZGl0Q29udHJvbE93bmVyKCkKK3sKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRp
bWVFZGl0RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRD
b250cm9sT3duZXIpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAg
ICwgbV9lZGl0Q29udHJvbE93bmVyKCZlZGl0Q29udHJvbE93bmVyKQorICAgICwgbV9zcGluQnV0
dG9uKDApCisgICAgLCBtX2ZvY3VzRmllbGRJbmRleChpbnZhbGlkRmllbGRJbmRleCkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZGF0ZVRpbWVFZGl0UHNldWRvSWQs
ICgiLXdlYmtpdC1kYXRldGltZS1lZGl0IikpOworICAgIHNldFNoYWRvd1BzZXVkb0lkKGRhdGVU
aW1lRWRpdFBzZXVkb0lkKTsKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRp
dEVsZW1lbnQoKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4
IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxk
SW5kZXhdLT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX3NwaW5CdXR0b24pCisg
ICAgICAgIG1fc3BpbkJ1dHRvbi0+cmVtb3ZlU3RlcEFjdGlvbkhhbmRsZXIoKTsKK30KKwordm9p
ZCBEYXRlVGltZUVkaXRFbGVtZW50OjphZGRGaWVsZChQYXNzUmVmUHRyPERhdGVUaW1lRmllbGRF
bGVtZW50PiBmaWVsZCkKK3sKKyAgICBpZiAobV9maWVsZHMuc2l6ZSgpID09IG1fZmllbGRzLmNh
cGFjaXR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZpZWxkcy5hcHBlbmQoZmllbGQuZ2V0
KCkpOworICAgIGFwcGVuZENoaWxkKGZpZWxkKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUVk
aXRFbGVtZW50PiBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBFZGl0Q29udHJvbE93bmVyJiBlZGl0Q29udHJvbE93bmVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0
ZXBSYW5nZSkKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0g
YWRvcHRSZWYobmV3IERhdGVUaW1lRWRpdEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sT3du
ZXIpKTsKKyAgICBjb250YWluZXItPmxheW91dChzdGVwUmFuZ2UpOworICAgIHJldHVybiBjb250
YWluZXIucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVk
U3RhdGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK0RhdGVUaW1lRmll
bGRFbGVtZW50KiBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEF0KHNpemVfdCBmaWVsZEluZGV4
KSBjb25zdAoreworICAgIHJldHVybiBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpID8gbV9m
aWVsZHNbZmllbGRJbmRleF0gOiAwOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZv
Y3VzRmllbGRBdChzaXplX3QgbmV3Rm9jdXNGaWVsZEluZGV4KQoreworICAgIGlmIChtX2ZvY3Vz
RmllbGRJbmRleCA9PSBuZXdGb2N1c0ZpZWxkSW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAg
IERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBuZXdGb2N1c0ZpZWxkID0gZmllbGRBdChuZXdG
b2N1c0ZpZWxkSW5kZXgpOworICAgIGlmIChuZXdGb2N1c0ZpZWxkICYmIG5ld0ZvY3VzRmllbGQt
PmlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQqIGNvbnN0IGN1cnJlbnRGb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7
CisKKyAgICBpZiAoY3VycmVudEZvY3VzRmllbGQpCisgICAgICAgIGN1cnJlbnRGb2N1c0ZpZWxk
LT5zZXRGb2N1cyhmYWxzZSk7CisKKyAgICBpZiAoIW5ld0ZvY3VzRmllbGQpIHsKKyAgICAgICAg
bV9mb2N1c0ZpZWxkSW5kZXggPSBpbnZhbGlkRmllbGRJbmRleDsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gbmV3Rm9jdXNGaWVsZEluZGV4OworICAg
IG5ld0ZvY3VzRmllbGQtPnNldEZvY3VzKHRydWUpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkK
K3sKKyAgICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93
bkV2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZp
ZXIgPSBrZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICBpZiAoa2V5SWRlbnRp
ZmllciA9PSAiTGVmdCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGZpZWxkSW5kZXggPSBwcmV2aW91c0ZpZWxkSW5k
ZXgoKTsKKyAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1
c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
a2V5SWRlbnRpZmllciA9PSAiUmlnaHQiKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBmaWVsZEluZGV4ID0gbmV4dEZp
ZWxkSW5kZXgoKTsKKyAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAg
ICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVSswMDA5IikgeworICAgICAgICBjb25zdCBzaXplX3Qg
ZmllbGRJbmRleCA9IGtleWJvYXJkRXZlbnQtPmdldE1vZGlmaWVyU3RhdGUoIlNoaWZ0IikgPyBw
cmV2aW91c0ZpZWxkSW5kZXgoKSA6IG5leHRGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVs
ZEF0KGZpZWxkSW5kZXgpKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmZpZWxkVmFsdWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9lZGl0Q29udHJvbE93bmVy
KQorICAgICAgICBtX2VkaXRDb250cm9sT3duZXItPmVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgpCit7Cisg
ICAgaWYgKG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFsaWRGaWVsZEluZGV4KQorICAgICAgICBm
b2N1c0ZpZWxkQXQobmV4dEZpZWxkSW5kZXgoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxl
bWVudDo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBtb3VzZUV2ZW50KQoreworICAgIGlm
IChpc0Rpc2FibGVkKCkgfHwgaXNSZWFkT25seSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobW91c2VFdmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBt
b3VzZUV2ZW50LT5idXR0b24oKSAhPSBMZWZ0QnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBOb2RlKiBjb25zdCByZWxhdGVkVGFyZ2V0ID0gbW91c2VFdmVudC0+dGFyZ2V0KCktPnRvTm9k
ZSgpOworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVs
ZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKG1fZmllbGRzW2ZpZWxkSW5k
ZXhdID09IHJlbGF0ZWRUYXJnZXQpIHsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAg
ICAgICAgICBpZiAobV9lZGl0Q29udHJvbE93bmVyKQorICAgICAgICAgICAgICAgIG1fZWRpdENv
bnRyb2xPd25lci0+ZWRpdENvbnRyb2xNb3VzZUZvY3VzKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBEYXRlVGltZUVkaXRFbGVtZW50Ojppc0Rpc2Fi
bGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJvbE93bmVyICYmIG1fZWRpdENv
bnRyb2xPd25lci0+aXNFZGl0Q29udHJvbE93bmVyRGlzYWJsZWQoKTsKK30KKworYm9vbCBEYXRl
VGltZUVkaXRFbGVtZW50Ojppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0
Q29udHJvbE93bmVyICYmIG1fZWRpdENvbnRyb2xPd25lci0+aXNFZGl0Q29udHJvbE93bmVyUmVh
ZE9ubHkoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpsYXlvdXQoY29uc3QgU3Rl
cFJhbmdlJiBzdGVwUmFuZ2UpCit7CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZv
Y3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBmb2N1c0ZpZWxkQXQo
aW52YWxpZEZpZWxkSW5kZXgpOworCisgICAgRGF0ZVRpbWVFZGl0QnVpbGRlciBidWlsZGVyKCp0
aGlzLCBzdGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmluZyBkYXRlVGltZUZvcm1hdCA9IGJ1aWxk
ZXIubmVlZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpIDogbG9jYWxp
emVkU2hvcnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlmICghYnVpbGRlci5idWlsZChkYXRlVGlt
ZUZvcm1hdCkgfHwgbV9maWVsZHMuaXNFbXB0eSgpKQorICAgICAgICBidWlsZGVyLmJ1aWxkKGJ1
aWxkZXIubmVlZFNlY29uZEZpZWxkKCkgPyAiSEg6bW06c3MiIDogIkhIOm1tIik7CisKKyAgICBS
ZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IHNwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KCksICp0aGlzKTsKKyAgICBtX3NwaW5CdXR0b24gPSBzcGluQnV0dG9u
LmdldCgpOworICAgIGFwcGVuZENoaWxkKHNwaW5CdXR0b24pOworCisgICAgaWYgKGZvY3VzRmll
bGQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBt
X2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkgeworICAgICAgICAgICAgaWYgKGZvY3VzRmll
bGQgPT0gbV9maWVsZHNbZmllbGRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICBmb2N1c0ZpZWxk
QXQoZmllbGRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3NpemVfdCBEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0Rmll
bGRJbmRleCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFs
aWRGaWVsZEluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gbV9mb2N1c0ZpZWxk
SW5kZXggKyAxOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsK
KyAgICAgICAgaWYgKCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZpZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiBtX2ZpZWxkcy5zaXpl
KCk7Cit9CisKK3NpemVfdCBEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0ZpZWxkSW5kZXgo
KSBjb25zdAoreworICAgIEFTU0VSVChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJ
bmRleCk7CisgICAgc2l6ZV90IGZpZWxkSW5kZXggPSBtX2ZvY3VzRmllbGRJbmRleDsKKyAgICB3
aGlsZSAoZmllbGRJbmRleCA+IDApIHsKKyAgICAgIC0tZmllbGRJbmRleDsKKyAgICAgICAgaWYg
KCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZpZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiBpbnZhbGlkRmllbGRJbmRleDsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCgpCit7CisgICAg
dXBkYXRlVUlTdGF0ZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5
b3V0KCkKK3sKKyAgICBtX2ZpZWxkcy5zaHJpbmsoMCk7CisgICAgbV9zcGluQnV0dG9uID0gMDsK
KyAgICBtX2ZvY3VzRmllbGRJbmRleCA9IGludmFsaWRGaWVsZEluZGV4OworICAgIHJlbW92ZUNo
aWxkcmVuKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmZvY3VzRXZlbnQpIHsKKyAgICAgICAgaWYgKCFpc0Rpc2FibGVkKCkgJiYgIWlzUmVhZE9u
bHkoKSAmJiBtX2ZvY3VzRmllbGRJbmRleCA9PSBpbnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAg
ICAgIGZvY3VzRmllbGRBdCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsKKyAgICAgICAgZm9jdXNG
aWVsZEF0KGludmFsaWRGaWVsZEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5p
c0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2Fz
dDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKKworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0
IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAoIWZvY3Vz
RmllbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvY3VzRmllbGQtPmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNE
YXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxk
SW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisg
ICAgICAgIG1fZmllbGRzW2ZpZWxkSW5kZXhdLT5zZXRWYWx1ZUFzRGF0ZShkYXRlKTsKK30KKwor
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25l
bnRzJiBkYXRlKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4
IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxk
SW5kZXhdLT5zZXRFbXB0eVZhbHVlKGRhdGUsIERhdGVUaW1lRmllbGRFbGVtZW50OjpEaXNwYXRj
aE5vRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVw
RG93bigpCit7CisgICAgaWYgKERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxk
ID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0ZXBE
b3duKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBVcCgp
Cit7CisgICAgaWYgKERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmll
bGRBdChtX2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0ZXBVcCgpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnVwZGF0ZVVJU3RhdGUoKQoreworICAgIGlm
IChpc0Rpc2FibGVkKCkgfHwgaXNSZWFkT25seSgpKSB7CisgICAgICAgIG1fc3BpbkJ1dHRvbi0+
cmVsZWFzZUNhcHR1cmUoKTsKKyAgICAgICAgZm9jdXNGaWVsZEF0KGludmFsaWRGaWVsZEluZGV4
KTsKKyAgICB9Cit9CisKK2RvdWJsZSBEYXRlVGltZUVkaXRFbGVtZW50Ojp2YWx1ZUFzRG91Ymxl
KCkgY29uc3QKK3sKKyAgICBkb3VibGUgdmFsdWUgPSAwOworCisgICAgZm9yIChzaXplX3QgZmll
bGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkg
eworICAgICAgICBjb25zdCBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZmllbGQgPSBtX2Zp
ZWxkc1tmaWVsZEluZGV4XTsKKyAgICAgICAgaWYgKCFmaWVsZC0+aGFzVmFsdWUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwor
ICAgICAgICB2YWx1ZSArPSBmaWVsZC0+dmFsdWVBc0RvdWJsZSgpOworICAgIH0KKworICAgIHJl
dHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YzQxYWFjZjQyYTk2ZDRiMmM2OTY4MDY1YzZhMmE3NDBjZTBlYjJhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5o
CkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUVk
aXRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVFZGl0RWxlbWVudF9oCisKKyNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxk
RWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVDb21wb25lbnRzOworY2xhc3MgRGF0ZVRpbWVF
ZGl0TGF5b3V0ZXI7CitjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91c2VFdmVudDsKK2Ns
YXNzIFN0ZXBSYW5nZTsKKworLy8gRGF0ZVRpbWVFZGl0RWxlbWVudCBjbGFzcyBjb250YWlucyBu
dW1iZXJpYyBmaWVsZCBhbmQgc3ltYm9sYyBmaWVsZCBmb3IKKy8vIHJlcHJlc2VudGluZyBkYXRl
IGFuZCB0aW1lLCBzdWNoIGFzCisvLyAgLSBZZWFyLCBNb250aCwgRGF5IE9mIE1vbnRoCisvLyAg
LSBIb3VyLCBNaW51dGUsIFNlY29uZCwgTWlsbGlzZWNvbmQsIEFNL1BNCitjbGFzcyBEYXRlVGlt
ZUVkaXRFbGVtZW50IDogcHVibGljIEhUTUxEaXZFbGVtZW50LCBwdWJsaWMgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyLCBwcml2YXRlIFNwaW5CdXR0b25FbGVtZW50OjpT
dGVwQWN0aW9uSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0
RWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICAvLyBFZGl0Q29udHJvbE93bmVyIGltcGxlbWVudGVy
IG11c3QgY2FsbCByZW1vdmVFZGl0Q29udHJvbE93bmVyIHdoZW4KKyAgICAvLyBpdCBkb2Vzbid0
IGhhbmRsZSBldmVudCwgZS5nLiBhdCBkZXN0cnVjdGlvbi4KKyAgICBjbGFzcyBFZGl0Q29udHJv
bE93bmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkVkaXRDb250cm9sT3duZXIo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGVkaXRDb250cm9sTW91c2VGb2N1cygpID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29udHJvbE93bmVyRGlzYWJsZWQoKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRDb250cm9sT3duZXJSZWFkT25seSgpIGNvbnN0ID0g
MDsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50KiwgRWRpdENvbnRyb2xPd25lciYsIGNvbnN0IFN0ZXBSYW5nZSYpOwor
CisgICAgdmlydHVhbCB+RGF0ZVRpbWVFZGl0RWxlbWVudCgpOworICAgIHZvaWQgYWRkRmllbGQo
UGFzc1JlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4pOworICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7CisgICAgdm9pZCBkaXNhYmxlZFN0YXRl
Q2hhbmdlZCgpOworICAgIHZvaWQgbGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYpOworICAgIHZvaWQg
cmVhZE9ubHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHJlbW92ZUVkaXRDb250cm9sT3duZXIo
KSB7IG1fZWRpdENvbnRyb2xPd25lciA9IDA7IH0KKyAgICB2b2lkIHJlc2V0TGF5b3V0KCk7Cisg
ICAgdm9pZCBzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJik7CisgICAgdm9pZCBz
ZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpOworICAgIGRvdWJsZSB2YWx1ZUFz
RG91YmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbnZh
bGlkRmllbGRJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpOworCisgICAgLy8gRGF0ZXRp
bWUgY2FuIGJlIHJlcHJlc2VudCBhdCBtb3N0IGZpdmUgZmllbGRzLCBzdWNoIGFzCisgICAgLy8g
IDEuIHllYXIKKyAgICAvLyAgMi4gbW9udGgKKyAgICAvLyAgMy4gZGF5LW9mLW1vbnRoCisgICAg
Ly8gIDQuIGhvdXIKKyAgICAvLyAgNS4gbWludXRlCisgICAgLy8gIDYuIHNlY29uZAorICAgIC8v
ICA3LiBtaWxsaXNlY29uZAorICAgIC8vICA4LiBBTS9QTQorICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4aW11bU51bWJlck9mRmllbGRzID0gODsKKworICAgIERhdGVUaW1lRWRpdEVsZW1lbnQoRG9j
dW1lbnQqLCBFZGl0Q29udHJvbE93bmVyJik7CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCog
ZmllbGRBdChzaXplX3QpIGNvbnN0OworICAgIHZvaWQgZm9jdXNGaWVsZEF0KHNpemVfdCk7Cisg
ICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lkIGhh
bmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopOworICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0
OworICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0OworICAgIHNpemVfdCBuZXh0RmllbGRJbmRl
eCgpIGNvbnN0OworICAgIHNpemVfdCBwcmV2aW91c0ZpZWxkSW5kZXgoKSBjb25zdDsKKyAgICB2
b2lkIHVwZGF0ZVVJU3RhdGUoKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVs
ZEV2ZW50SGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFu
Z2VkKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGZvY3VzT25OZXh0RmllbGQo
KSBPVkVSUklERSBGSU5BTDsKKworICAgIC8vIFNwaW5CdXR0b25FbGVtZW50OjpTdGVwQWN0aW9u
SGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwRG93bigp
IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzcGluQnV0dG9uU3RlcFVwKCkgT1ZF
UlJJREUgRklOQUw7CisKKyAgICBWZWN0b3I8RGF0ZVRpbWVGaWVsZEVsZW1lbnQqLCBtYXhpbXVt
TnVtYmVyT2ZGaWVsZHM+IG1fZmllbGRzOworICAgIEVkaXRDb250cm9sT3duZXIqIG1fZWRpdENv
bnRyb2xPd25lcjsKKyAgICBTcGluQnV0dG9uRWxlbWVudCogbV9zcGluQnV0dG9uOworICAgIHNp
emVfdCBtX2ZvY3VzRmllbGRJbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Rh
dGVUaW1lRmllbGRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lRmllbGRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDJlNDkwMGNjNzFkMGM5MzE5MzI5OTkw
ZDY2ZmQzZmNlOGMzYTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJ
TUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisK
KyNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhhbmRsZXIoKQoreworfQorCitE
YXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCisgICAgOiBIVE1MRWxl
bWVudChzcGFuVGFnLCBkb2N1bWVudCkKKyAgICAsIG1fZmllbGRFdmVudEhhbmRsZXIoJmZpZWxk
RXZlbnRIYW5kbGVyKQoreworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRF
dmVudCgpKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNf
Y2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpOworICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50
KGtleWJvYXJkRXZlbnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC0+ZGVmYXVsdEhhbmRs
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdEtleWJvYXJkRXZlbnRI
YW5kbGVyKGtleWJvYXJkRXZlbnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC0+ZGVmYXVs
dEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIVE1MRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQ6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50KiBrZXlib2Fy
ZEV2ZW50KQoreworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygp
LmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgU3RyaW5nJiBrZXlJ
ZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmllcigpOworCisgICAgaWYgKGtl
eUlkZW50aWZpZXIgPT0gIkRvd24iKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CisgICAgICAgIHN0ZXBEb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CisgICAgICAgIGtleWJvYXJkRXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHN0ZXBVcCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOCIpIHsKKyAgICAg
ICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgc2V0RW1wdHlW
YWx1ZShEYXRlQ29tcG9uZW50cygpLCBEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgp
Cit7CisgICAgaWYgKG1fZmllbGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhh
bmRsZXItPmZvY3VzT25OZXh0RmllbGQoKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVu
dDo6aW5pdGlhbGl6ZShjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKQoreworICAg
IHNldFNoYWRvd1BzZXVkb0lkKHNoYWRvd1BzZXVkb0lkKTsKKyAgICBhcHBlbmRDaGlsZChUZXh0
OjpjcmVhdGUoZG9jdW1lbnQoKSwgdmlzaWJsZVZhbHVlKCkpKTsKK30KKworYm9vbCBEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNB
dHRyaWJ1dGUocmVhZG9ubHlBdHRyKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6
c2V0UmVhZE9ubHkoKQoreworICAgIC8vIFNldCBIVE1MIGF0dHJpYnV0ZSByZWFkb25seSB0byBj
aGFuZ2UgYXBwZXJhbmNlLgorICAgIHNldEJvb2xlYW5BdHRyaWJ1dGUocmVhZG9ubHlBdHRyLCB0
cnVlKTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3Ip
Cit7CisgICAgVGV4dCogY29uc3QgdGV4dE5vZGUgPSB0b1RleHQoZmlyc3RDaGlsZCgpKTsKKyAg
ICBjb25zdCBTdHJpbmcgbmV3VmlzaWJsZVZhbHVlID0gdmlzaWJsZVZhbHVlKCk7CisgICAgQVNT
RVJUKG5ld1Zpc2libGVWYWx1ZS5sZW5ndGgoKSA+IDApOworCisgICAgaWYgKHRleHROb2RlLT53
aG9sZVRleHQoKSA9PSBuZXdWaXNpYmxlVmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIHRl
eHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KG5ld1Zpc2libGVWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisKKyAgICBpZiAoZXZlbnRCZWhhdmlvciA9PSBEaXNwYXRjaEV2ZW50ICYmIG1fZmll
bGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhhbmRsZXItPmZpZWxkVmFsdWVD
aGFuZ2VkKCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6dmFsdWVBc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyB2YWx1ZUFzSW50ZWdlcigpICog
dW5pdEluTWlsbGlzZWNvbmQoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jOWI2NjQzMWI2NTNiYzY5MDkxNDlkMTI3ODM2NzkzZjU0YWExNzk1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApA
QCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxk
RWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lRmllbGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1l
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRlQ29tcG9uZW50czsKKwor
Ly8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgaXMgYmFzZSBjbGFzcyBvZiBkYXRlIHRpbWUgZmllbGQg
ZWxlbWVudC4KK2NsYXNzIERhdGVUaW1lRmllbGRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUZpZWxkRWxlbWVudCk7CisKK3B1
YmxpYzoKKyAgICBlbnVtIEV2ZW50QmVoYXZpb3IgeworICAgICAgICBEaXNwYXRjaE5vRXZlbnQs
CisgICAgICAgIERpc3BhdGNoRXZlbnQsCisgICAgfTsKKworICAgIC8vIEZpZWxkRXZlbnRIYW5k
bGVyIGltcGxlbWVudGVyIG11c3QgY2FsbCByZW1vdmVFdmVudEhhbmRsZXIgd2hlbgorICAgIC8v
IGl0IGRvZXNuJ3QgaGFuZGxlIGV2ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNz
IEZpZWxkRXZlbnRIYW5kbGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkZpZWxk
RXZlbnRIYW5kbGVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaWVsZFZhbHVlQ2hhbmdlZCgp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzT25OZXh0RmllbGQoKSA9IDA7CisgICAg
fTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgPSAwOworICAgIGJvb2wgaXNS
ZWFkT25seSgpIGNvbnN0OworICAgIHZvaWQgcmVtb3ZlRXZlbnRIYW5kbGVyKCkgeyBtX2ZpZWxk
RXZlbnRIYW5kbGVyID0gMDsgfQorICAgIHZvaWQgc2V0UmVhZE9ubHkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RW1wdHlWYWx1ZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEV2ZW50QmVoYXZpb3Ig
PSBEaXNwYXRjaE5vRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJ
bnRlZ2VyKGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzdGVwRG93bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwKCkgPSAw
OworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworICAgIGRvdWJsZSB2YWx1
ZUFzRG91YmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgPSAwOworCitw
cm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50
SGFuZGxlciYpOworICAgIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpOworICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKSA9IDA7CisgICAgdm9pZCBpbml0
aWFsaXplKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1p
bGxpc2Vjb25kKCkgY29uc3QgPSAwOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50
QmVoYXZpb3IpOworCitwcml2YXRlOgorICAgIHZvaWQgZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5k
bGVyKEtleWJvYXJkRXZlbnQqKTsKKworICAgIEZpZWxkRXZlbnRIYW5kbGVyKiBtX2ZpZWxkRXZl
bnRIYW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVs
ZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVt
ZW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZmN2ZhNWM3ZGEwMjg3N2RlNGNkMTZhMzk5YWU5ODc5MGI1
OTMyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lRmllbGRFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBM
RV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisKKyNpbmNsdWRl
ICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0RhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVBTVBNRmll
bGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZl
bnRIYW5kbGVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYW1wbUxhYmVscykKKyAgICA6IERhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBhbXBt
TGFiZWxzKQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudD4gRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2
ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbXBt
TGFiZWxzKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBhbXBtUHN1
ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWFtcG0tZmllbGQiKSk7CisgICAgUmVmUHRy
PERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVB
TVBNRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgYW1wbUxhYmVscykp
OworICAgIGZpZWxkLT5pbml0aWFsaXplKGFtcG1Qc3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxk
LnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnNldFZhbHVl
QXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRl
Z2VyKGRhdGUuaG91cigpID49IDEyID8gMSA6IDApOworfQorCitkb3VibGUgRGF0ZVRpbWVBTVBN
RmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1z
UGVySG91ciAqIDEyOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Rh
dGVUaW1lSG91ckZpZWxkRWxlbWVudDo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KERvY3VtZW50
KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBpbnQgbWlu
aW11bSwgaW50IG1heGltdW0pCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9j
dW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBtaW5pbXVtLCBtYXhpbXVtKQorICAgICwgbV9hbGln
bm1lbnQobWF4aW11bSArIG1heGltdW0gJSAyKQoreworICAgIEFTU0VSVCgoIW1pbmltdW0gJiYg
KG1heGltdW0gPT0gMTEgfHwgbWF4aW11bSA9PSAyMykpIHx8IChtaW5pbXVtID09IDEgJiYgKG1h
eGltdW0gPT0gMTIgfHwgbWF4aW11bSA9PSAyNCkpKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGlt
ZUhvdXJGaWVsZEVsZW1lbnQ+IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3Vt
ZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBpbnQg
bWluaW11bSwgaW50IG1heGltdW0pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGhvdXJQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZCIp
KTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVm
KG5ldyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoaG91clBzdWVkb0lk
KTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lSG91ckZp
ZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7
CisgICAgc2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworfQorCit2b2lkIERhdGVUaW1l
SG91ckZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlQXNIb3VyMjMsIEV2
ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBjb25zdCBpbnQgdmFsdWUgPSBSYW5n
ZSgwLCAyMykuY2xhbXBWYWx1ZSh2YWx1ZUFzSG91cjIzKSAlIG1fYWxpZ25tZW50OworICAgIERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIocmFuZ2UoKS5taW5p
bXVtICYmICF2YWx1ZSA/IG1fYWxpZ25tZW50IDogdmFsdWUsIGV2ZW50QmVoYXZpb3IpOworfQor
Citkb3VibGUgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1zUGVySG91cjsKK30KKworaW50IERhdGVUaW1lSG91ckZpZWxk
RWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBoYXNWYWx1ZSgp
ID8gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpICUgbV9hbGln
bm1lbnQgOiAtMTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEYXRl
VGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVt
ZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5k
bGVyKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2
ZW50SGFuZGxlciwgMCwgOTk5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lTWlsbGlzZWNv
bmRGaWVsZEVsZW1lbnQ+IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbWlsbGlzZWNvbmRQc3Vl
ZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGQiKSk7CisgICAg
UmVmUHRyPERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYo
bmV3IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRI
YW5kbGVyKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUobWlsbGlzZWNvbmRQc3VlZG9JZCk7Cisg
ICAgcmV0dXJuIGZpZWxkLnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZU1pbGxpc2Vjb25k
RmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkK
K3sKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihkYXRlLm1pbGxpc2Vjb25kKCkpOworfQorCitkb3Vi
bGUgRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQoKSBj
b25zdAoreworICAgIHJldHVybiAxOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK0RhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxl
bWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFu
ZGxlcikKKyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRF
dmVudEhhbmRsZXIsIDAsIDU5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lTWludXRlRmll
bGRFbGVtZW50PiBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBtaW51dGVQc3VlZG9JZCwgKCItd2Via2l0
LWRhdGV0aW1lLWVkaXQtbWludXRlLWZpZWxkIikpOworICAgIFJlZlB0cjxEYXRlVGltZU1pbnV0
ZUZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVNaW51dGVGaWVsZEVs
ZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyKSk7CisgICAgZmllbGQtPmluaXRpYWxp
emUobWludXRlUHN1ZWRvSWQpOworICAgIHJldHVybiBmaWVsZC5yZWxlYXNlKCk7Cit9CisKK3Zv
aWQgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVD
b21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUubWludXRlKCkp
OworfQorCitkb3VibGUgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vj
b25kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJNaW51dGU7Cit9CisKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVU
aW1lU2Vjb25kRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRs
ZXImIGZpZWxkRXZlbnRIYW5kbGVyKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50
KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgMCwgNTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8
RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50Ojpj
cmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhh
bmRsZXIpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHNlY29uZFBz
dWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQiKSk7CisgICAgUmVm
UHRyPERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRl
VGltZVNlY29uZEZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAg
ICBmaWVsZC0+aW5pdGlhbGl6ZShzZWNvbmRQc3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJl
bGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6c2V0VmFsdWVB
c0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVn
ZXIoZGF0ZS5zZWNvbmQoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVu
dDo6dW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdAoreworICAgIHJldHVybiBtc1BlclNlY29uZDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdi
YzFlZmE1NTJlMzQ4MDRkNjNjMzU0MGRlNjYyYTBlZjA0N2I1MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oCkBAIC0w
LDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxl
bWVudHNfaAorI2RlZmluZSBEYXRlVGltZUZpZWxkRWxlbWVudHNfaAorCisjaWYgRU5BQkxFKElO
UFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVu
dCA6IHB1YmxpYyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQq
LCBGaWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKK3ByaXZhdGU6
CisgICAgRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRs
ZXImLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1l
bnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRl
Q29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1p
bGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCisKKy8vIERhdGVUaW1lSG91
ckZpZWxkRWxlbWVudCBpcyB1c2VkIGZvciBob3VyIGZpZWxkIG9mIGRhdGUgdGltZSBmb3JtYXQK
Ky8vIHN1cHBvcnRpbmcgZm9sbG93aW5nIHBhdHRlcm5zOgorLy8gIC0gMCB0byAxMQorLy8gIC0g
MSB0byAxMgorLy8gIC0gMCB0byAyMworLy8gIC0gMSB0byAyNAorY2xhc3MgRGF0ZVRpbWVIb3Vy
RmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KTsKKworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxlbWVudD4gY3JlYXRl
KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0p
OworCitwcml2YXRlOgorICAgIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChEb2N1bWVudCosIEZp
ZWxkRXZlbnRIYW5kbGVyJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworICAgIC8vIERh
dGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVB
c0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2
ZW50KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29u
ZCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2Vy
KCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBjb25zdCBpbnQgbV9hbGlnbm1lbnQ7Cit9
OworCitjbGFzcyBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IDogcHVibGljIERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRp
bWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBG
aWVsZEV2ZW50SGFuZGxlciYpOworCitwcml2YXRlOgorICAgIERhdGVUaW1lTWlsbGlzZWNvbmRG
aWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCisgICAgLy8gRGF0
ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFz
RGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
ZG91YmxlIHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCitj
bGFzcyBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lTWludXRlRmll
bGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lTWlu
dXRlRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOwor
Citwcml2YXRlOgorICAgIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmll
bGRFdmVudEhhbmRsZXImKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9u
cy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgp
IGNvbnN0IE9WRVJSSURFIEZJTkFMOworfTsKKworY2xhc3MgRGF0ZVRpbWVTZWNvbmRGaWVsZEVs
ZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudD4gY3JlYXRlKERv
Y3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZVNl
Y29uZEZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKKyAgICAv
LyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCBkb3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg3NTVmNTVjY2JhYWEwOTM1MTViMTA2ZjJlOTZjOWI4YTBkZjVk
YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisg
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVM
VElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIgor
CisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZE51bWJlci5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgY29uc3QgRE9NVGltZVN0YW1wIHR5cGVBaGVhZFRpbWVvdXQgPSAxMDAw
OworCitzdGF0aWMgc2l6ZV90IGRpc3BsYXlTaXplT2ZOdW1iZXIoaW50IHZhbHVlKQoreworICAg
IEFTU0VSVCh2YWx1ZSA+PSAwKTsKKworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAx
OworCisgICAgaW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAgICB3aGlsZSAodmFsdWUpIHsKKyAg
ICAgICAgdmFsdWUgLz0gMTA7CisgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7CisgICAgfQorCisg
ICAgcmV0dXJuIG51bWJlck9mRGlnaXRzOworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OlJhbmdlOjpSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBtYXhpbXVt
KG1heGltdW0pCisgICAgLCBtaW5pbXVtKG1pbmltdW0pCit7CisgICAgQVNTRVJUKG1pbmltdW0g
PD0gbWF4aW11bSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJhbmdl
OjpjbGFtcFZhbHVlKGludCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4oc3Rk
OjptYXgodmFsdWUsIG1pbmltdW0pLCBtYXhpbXVtKTsKK30KKworRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50
LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQg
bWF4aW11bSkKKyAgICA6IERhdGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50
SGFuZGxlcikKKyAgICAsIG1fbGFzdERpZ2l0Q2hhclRpbWUoMCkKKyAgICAsIG1fcmFuZ2UobWlu
aW11bSwgbWF4aW11bSkKKyAgICAsIG1fdmFsdWUoMCkKKyAgICAsIG1faGFzVmFsdWUoZmFsc2Up
Cit7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYW5kbGVLZXlib2Fy
ZEV2ZW50KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGlzUmVhZE9u
bHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAh
PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVUNo
YXIgY2hhckNvZGUgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUo
KSk7CisgICAgaWYgKGNoYXJDb2RlIDwgJyAnKQorICAgICAgICByZXR1cm47CisKKyAgICBET01U
aW1lU3RhbXAgZGVsdGEgPSBrZXlib2FyZEV2ZW50LT50aW1lU3RhbXAoKSAtIG1fbGFzdERpZ2l0
Q2hhclRpbWU7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7CisKKyAgICBTdHJpbmcgbnVt
YmVyID0gY29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoU3RyaW5nKCZjaGFyQ29kZSwgMSkpOwor
ICAgIGNvbnN0IGludCBkaWdpdCA9IG51bWJlclswXSAtICcwJzsKKyAgICBpZiAoZGlnaXQgPCAw
IHx8IGRpZ2l0ID4gOSkKKyAgICAgICAgcmV0dXJuOworCisgICAga2V5Ym9hcmRFdmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX2hhc1ZhbHVlICYmIGRl
bHRhIDwgdHlwZUFoZWFkVGltZW91dCA/IG1fdmFsdWUgKiAxMCArIGRpZ2l0IDogZGlnaXQsIERp
c3BhdGNoRXZlbnQpOworICAgIGlmIChtX3ZhbHVlICogMTAgPiBtX3JhbmdlLm1heGltdW0pCisg
ICAgICAgIGZvY3VzT25OZXh0RmllbGQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGFzdERpZ2l0
Q2hhclRpbWUgPSBrZXlib2FyZEV2ZW50LT50aW1lU3RhbXAoKTsKK30KKworYm9vbCBEYXRlVGlt
ZU51bWVyaWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9o
YXNWYWx1ZTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5
VmFsdWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhh
dmlvcikKK3sKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKKworICAgIGlmIChpc1JlYWRP
bmx5KCkpIHsKKyAgICAgICAgc2V0VmFsdWVBc0RhdGUoZGF0ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2hhc1ZhbHVlID0gZmFsc2U7CisgICAgbV92YWx1ZSA9IDA7CisgICAg
dXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlLCBFdmVudEJlaGF2
aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV92YWx1ZSA9IGNsYW1wVmFsdWUodmFsdWUpOwor
ICAgIG1faGFzVmFsdWUgPSB0cnVlOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2
aW9yKTsKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKK30KKwordm9pZCBEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBEb3duKCkKK3sKKyAgICBpZiAobV9oYXNWYWx1ZSkKKyAg
ICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV92YWx1ZSA9PSBtX3JhbmdlLm1pbmltdW0gPyBtX3Jh
bmdlLm1heGltdW0gOiBjbGFtcFZhbHVlKG1fdmFsdWUgLSAxKSwgRGlzcGF0Y2hFdmVudCk7Cisg
ICAgZWxzZQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3JhbmdlLm1heGltdW0sIERpc3Bh
dGNoRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcFVw
KCkKK3sKKyAgICBpZiAobV9oYXNWYWx1ZSkKKyAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV92
YWx1ZSA9PSBtX3JhbmdlLm1heGltdW0gPyBtX3JhbmdlLm1pbmltdW0gOiBjbGFtcFZhbHVlKG1f
dmFsdWUgKyAxKSwgRGlzcGF0Y2hFdmVudCk7CisgICAgZWxzZQorICAgICAgICBzZXRWYWx1ZUFz
SW50ZWdlcihtX3JhbmdlLm1pbmltdW0sIERpc3BhdGNoRXZlbnQpOworfQorCitTdHJpbmcgRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hh
c1ZhbHVlKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIGlmIChtX3Jhbmdl
Lm1heGltdW0gPiA5OTkpCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIo
U3RyaW5nOjpudW1iZXIobV92YWx1ZSkpOworCisgICAgaWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5
KQorICAgICAgICByZXR1cm4gY29udmVydFRvTG9jYWxpemVkTnVtYmVyKFN0cmluZzo6Zm9ybWF0
KCIlMDNkIiwgbV92YWx1ZSkpOworCisgICAgcmV0dXJuIGNvbnZlcnRUb0xvY2FsaXplZE51bWJl
cihTdHJpbmc6OmZvcm1hdCgiJTAyZCIsIG1fdmFsdWUpKTsKK30KKworaW50IERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2hhc1ZhbHVlID8gbV92YWx1ZSA6IC0xOworfQorCitTdHJpbmcgRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUoKSBjb25zdAoreworICAgIGlmIChtX2hhc1ZhbHVlKQor
ICAgICAgICByZXR1cm4gdmFsdWUoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBmb3IgKGludCBudW1iZXJPZkRhc2hzID0gc3RkOjptYXgoZGlzcGxheVNpemVPZk51bWJlciht
X3JhbmdlLm1heGltdW0pLCBkaXNwbGF5U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWluaW11bSkpOyBu
dW1iZXJPZkRhc2hzOyAtLW51bWJlck9mRGFzaHMpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCct
Jyk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzU0OTA3YjFhZDJh
OWYwMGM1NmVkNjRhNjBkOGI3ZTQwMDQ1NmY1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oCkBAIC0wLDAg
KzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudF9oCisKKyNpZiBF
TkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGlt
ZUZpZWxkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudCByZXByZXNlbnRzIG51bWVyaWMgZmllbGQgb2YgZGF0ZSB0aW1lIGZv
cm1hdCwKKy8vIHN1Y2ggYXM6CisvLyAgLSBob3VyCisvLyAgLSBtaW51dGUKKy8vICAtIG1pbGxp
c2Vjb25kCisvLyAgLSBzZWNvbmQKKy8vICAtIHllYXIKK2NsYXNzIERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAg
IHN0cnVjdCBSYW5nZSB7CisgICAgICAgIFJhbmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7
CisgICAgICAgIGludCBjbGFtcFZhbHVlKGludCkgY29uc3Q7CisKKyAgICAgICAgaW50IG1heGlt
dW07CisgICAgICAgIGludCBtaW5pbXVtOworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGlu
dCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisKKyAgICBpbnQgY2xhbXBWYWx1ZShpbnQgdmFsdWUp
IGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UuY2xhbXBWYWx1ZSh2YWx1ZSk7IH0KKyAgICBjb25zdCBS
YW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CisKKyAgICAvLyBEYXRlVGlt
ZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2VyKGlu
dCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyB2aXNpYmxlVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworcHJpdmF0ZToKKyAgICAv
LyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1
YWwgdm9pZCBzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJiwgRXZlbnRCZWhhdmlv
cikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUg
RklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBET01UaW1l
U3RhbXAgbV9sYXN0RGlnaXRDaGFyVGltZTsKKyAgICBjb25zdCBSYW5nZSBtX3JhbmdlOworICAg
IGludCBtX3ZhbHVlOworICAgIGJvb2wgbV9oYXNWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDhlYjUyMjI5Y2FiYjk5OWU5Njk0OWNjNmZkNTc1Y2RhZjI0ODQ2ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQor
I2luY2x1ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIktl
eWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVy
JiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN5bWJvbHMpCisgICAg
OiBEYXRlVGltZUZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpCisgICAg
LCBtX3N5bWJvbHMoc3ltYm9scykKKyAgICAsIG1fc2VsZWN0ZWRJbmRleCgtMSkKK3sKKyAgICBB
U1NFUlQoIXN5bWJvbHMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZl
bnQpCit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVUNoYXIgY2hhckNvZGUg
PSBXVEY6OlVuaWNvZGU6OnRvTG93ZXIoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSk7CisgICAg
aWYgKGNoYXJDb2RlIDwgJyAnKQorICAgICAgICByZXR1cm47CisKKyAgICBrZXlib2FyZEV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IG1fc3ltYm9scy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX3N5bWJvbHNb
aW5kZXhdLmlzRW1wdHkoKSAmJiBXVEY6OlVuaWNvZGU6OnRvTG93ZXIobV9zeW1ib2xzW2luZGV4
XVswXSkgPT0gY2hhckNvZGUpIHsKKyAgICAgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKGluZGV4
LCBEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbmRleCA+PSAwOworfQorCit2b2lkIERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
LCBFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0g
aW52YWxpZEluZGV4OworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30K
Kwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihp
bnQgbmV3U2VsZWN0ZWRJbmRleCwgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAg
IG1fc2VsZWN0ZWRJbmRleCA9IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKG5ld1NlbGVjdGVkSW5kZXgs
IHN0YXRpY19jYXN0PGludD4obV9zeW1ib2xzLnNpemUoKSAtIDEpKSk7CisgICAgdXBkYXRlVmlz
aWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVs
ZEVsZW1lbnQ6OnN0ZXBEb3duKCkKK3sKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fc3ltYm9scy5z
aXplKCk7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/IChtX3NlbGVjdGVkSW5k
ZXggKyBzaXplIC0gMSkgJSBzaXplIDogc2l6ZSAtIDE7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVl
KERpc3BhdGNoRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6
OnN0ZXBVcCgpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/IChtX3NlbGVj
dGVkSW5kZXggKyAxKSAlIG1fc3ltYm9scy5zaXplKCkgOiAwOworICAgIHVwZGF0ZVZpc2libGVW
YWx1ZShEaXNwYXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnQ6OnZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IG1fc3ltYm9s
c1ttX3NlbGVjdGVkSW5kZXhdIDogZW1wdHlTdHJpbmcoKTsKK30KKworaW50IERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zZWxlY3RlZEluZGV4OworfQorCitTdHJpbmcgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVu
dDo6dmlzaWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IG1fc3lt
Ym9sc1ttX3NlbGVjdGVkSW5kZXhdIDogIi0tIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Rh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTg1M2UxNjNhMjczNDcy
MDRjZmJkNzJhNjJlNGU2MWU4NDBiOTAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
CisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lU3ltYm9saWNGaWVsZEVs
ZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50X2gKKworI2lmIEVO
QUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1l
RmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudCByZXByZXNlbnRzIG5vbi1udW1lcmljIGZpZWxkIG9mIGRhdGEgdGlt
ZQorLy8gZm9ybWF0LCBzdWNoIGFzOiBBTS9QTSwgYW5kIG1vbnRoLgorY2xhc3MgRGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk7CisKK3By
b3RlY3RlZDoKKyAgICBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmll
bGRFdmVudEhhbmRsZXImLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQp
IE9WRVJSSURFIEZJTkFMOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgaW52YWxp
ZEluZGV4ID0gLTE7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJ
TkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRz
JiwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUgRklOQUw7CisgICAg
dmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lk
IHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25z
dCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25z
dCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1fc3ltYm9sczsK
KyAgICBpbnQgbV9zZWxlY3RlZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157671</attachid>
            <date>2012-08-10 01:30:47 -0700</date>
            <delta_ts>2012-08-10 01:53:07 -0700</delta_ts>
            <desc>Patch 9</desc>
            <filename>bug-92960-20120810173019.patch</filename>
            <type>text/plain</type>
            <size>66644</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUyNjI2OTkyNjFkODY3
ODNjNTNjMWE4MTNmYjNiNTViMjkwOTM3OS4uYTU3M2ZhMWY2NGUxZTUwMGQ1YTM2ZThmMTA2YTE0
MWE3MDgzNTYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAxMi0wOC0wOSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJ
IGZvciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVy
IG9mIG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1l
RmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25k
CisgICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9y
IG1pbnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNl
IGNsYXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkK
KyAgICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
IGJ1aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3Qg
Y2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGlu
Y2x1ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwv
c2hhZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwg
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwK
KyAgICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEJ1aWxkZXI6Om5lZWRTZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRCdWlsZGVyOjpzaG91bGRNaWxsaXNlY29uZEZpZWxkUmVhZE9ubHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkTWludXRlRmllbGRSZWFkT25s
eSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRCdWlsZGVyOjpzaG91bGRTZWNvbmRG
aWVsZFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1aWxkZXI6OnZp
c2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRM
aXRlcmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250
cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIncyBkaXNh
YmxlZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxl
bWVudDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpm
b2N1c0ZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
OjpmaWVsZFZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojpmb2N1c09uTmV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6aXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0Rmll
bGRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91
c0ZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVh
ZE9ubHlTdGF0ZUNoYW5nZWQpOiBDYWxsZWQgd2hlbiBvd25lcidzIHJlYWRPbmx5IHN0YXRlIGlz
IGNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZh
bHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEVt
cHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1
dHRvblN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNw
aW5CdXR0b25TdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6
dXBkYXRlVUlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojp2
YWx1ZUFzRG91YmxlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50
Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVFZGl0RWxlbWVudCk6CisgICAgICAgIChFZGl0
Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnJl
bW92ZUVkaXRDb250cm9sT3duZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxl
bWVudDo6RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRLZXlib2Fy
ZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
Zm9jdXNPbk5leHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0
UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0
ZVZpc2libGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1l
bnQuaDogQWRkZWQuCisgICAgICAgIChEYXRlVGltZUZpZWxkRWxlbWVudCk6CisgICAgICAgIChG
aWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZp
ZWxkRWxlbWVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZp
ZWxkRWxlbWVudDo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lSG91ckZpZWxkRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVl
QXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0
VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJG
aWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
TWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6
OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRG
aWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6dW5pdEluTWls
bGlzZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6
OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVT
ZWNvbmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmg6IEFkZGVkLgorICAgICAgICAoRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dCk6CisgICAgICAgIChEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAg
KERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lU2Vjb25kRmll
bGRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlTaXplT2ZOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpS
YW5nZTo6Y2x1bXBWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRW
YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6Y2x1bXBWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OnJhbmdlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6
aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVu
dDo6c2V0RW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgor
ICAgICAgICAoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk6CisKIDIwMTItMDgtMTAgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjUyMzAgYW5kIHIxMjUyMzguCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggNmYyNmY1NTJlYjdkODZkYWY2ZTc3ZmVlM2Y4ZmE3ODMxYTQwNjU0MC4uM2YwMDI4MDRhZGFi
Mzk1N2VhODk2ODM2ZTFhMWM0Yjg3ODYyNTE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTc0Miw2
ICs1NzQyLDE2IEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9y
LmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcCcs
CiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaCcsCisgICAg
ICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAnLAorICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3No
YWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9E
YXRlVGltZUZpZWxkRWxlbWVudHMuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRl
VGltZUZpZWxkRWxlbWVudHMuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9E
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGV0
YWlsc01hcmtlckNvbnRyb2wuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvSFRNTENvbnRl
bnRFbGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUVkaXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lRWRpdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyOGIxNDU1OWVkY2YxMTZjNDhmYzAzNGM2
OTRkYTU0ZDE2NjY0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1F
X01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUVkaXRFbGVtZW50LmgiCisKKyNp
bmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50
cy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRm9ybWF0LmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMb2Nh
bGl6ZWREYXRlLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSAiTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworY2xhc3MgRGF0ZVRpbWVFZGl0QnVpbGRlciA6IHByaXZhdGUgRGF0ZVRpbWVGb3JtYXQ6OlRv
a2VuSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0QnVpbGRl
cik7CisKK3B1YmxpYzoKKyAgICBEYXRlVGltZUVkaXRCdWlsZGVyKERhdGVUaW1lRWRpdEVsZW1l
bnQmLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIGJvb2wgYnVpbGQoY29uc3QgU3RyaW5nJik7
CisgICAgYm9vbCBuZWVkU2Vjb25kRmllbGQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29s
IG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3Q7CisgICAgYm9vbCBuZWVkTWludXRlRmllbGQo
KSBjb25zdDsKKyAgICBib29sIHNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0
OworICAgIGJvb2wgc2hvdWxkTWludXRlRmllbGRSZWFkT25seSgpIGNvbnN0OworICAgIGJvb2wg
c2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0OworCisgICAgLy8gRGF0ZVRpbWVGb3Jt
YXQ6OlRva2VuSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHZpc2l0RmllbGQo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFIEZJTkFMOworCisg
ICAgRGF0ZVRpbWVFZGl0RWxlbWVudCYgbV9lZGl0RWxlbWVudDsKKyAgICBjb25zdCBTdGVwUmFu
Z2UmIG1fc3RlcFJhbmdlOworfTsKKworRGF0ZVRpbWVFZGl0QnVpbGRlcjo6RGF0ZVRpbWVFZGl0
QnVpbGRlcihEYXRlVGltZUVkaXRFbGVtZW50JiBlbGVtbnQsIGNvbnN0IFN0ZXBSYW5nZSYgc3Rl
cFJhbmdlKQorICAgIDogbV9lZGl0RWxlbWVudChlbGVtbnQpCisgICAgLCBtX3N0ZXBSYW5nZShz
dGVwUmFuZ2UpCit7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQoY29uc3Qg
U3RyaW5nJiBmb3JtYXRTdHJpbmcpCit7CisgICAgbV9lZGl0RWxlbWVudC5yZXNldExheW91dCgp
OworICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9ybWF0U3RyaW5nLCAqdGhpcyk7
Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQoKSBj
b25zdAoreworICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzdGF0
aWNfY2FzdDxpbnQ+KG1zUGVyU2Vjb25kKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJh
bmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNlY29uZCkpLmlzWmVy
bygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6Om5lZWRNaW51dGVGaWVsZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKHN0YXRp
Y19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJhbmdl
LnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlckhvdXIpKS5pc1plcm8oKTsK
K30KKworYm9vbCBEYXRlVGltZUVkaXRCdWlsZGVyOjpuZWVkU2Vjb25kRmllbGQoKSBjb25zdAor
eworICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzdGF0aWNfY2Fz
dDxpbnQ+KG1zUGVyTWludXRlKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJhbmdlLnN0
ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludCkKK3sKKyAgICBEb2N1bWVudCogY29uc3QgZG9jdW1l
bnQgPSBtX2VkaXRFbGVtZW50LmRvY3VtZW50KCk7CisKKyAgICBzd2l0Y2ggKGZpZWxkVHlwZSkg
eworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMToKKyAgICAgICAgbV9l
ZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCwgbV9lZGl0RWxlbWVudCwgMCwgMTEpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOgorICAgICAgICBtX2VkaXRFbGVtZW50
LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2Vk
aXRFbGVtZW50LCAxLCAxMikpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQo
RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQs
IDAsIDIzKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUhvdXIyNDoKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMSwgMjQpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlu
dXRlOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IGZpZWxk
ID0gRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxl
bWVudCk7CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoZmllbGQpOworICAgICAgICBp
ZiAoc2hvdWxkTWludXRlRmllbGRSZWFkT25seSgpKQorICAgICAgICAgICAgZmllbGQtPnNldFJl
YWRPbmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVQZXJpb2Q6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIHRp
bWVBTVBNTGFiZWxzKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlU2Vjb25kOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZVNlY29uZEZp
ZWxkRWxlbWVudD4gZmllbGQgPSBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50LCBtX2VkaXRFbGVtZW50KTsKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChm
aWVsZCk7CisgICAgICAgIGlmIChzaG91bGRTZWNvbmRGaWVsZFJlYWRPbmx5KCkpCisgICAgICAg
ICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKworICAgICAgICBpZiAobmVlZE1pbGxpc2Vjb25k
RmllbGQoKSkgeworICAgICAgICAgICAgdmlzaXRMaXRlcmFsKGxvY2FsaXplZERlY2ltYWxTZXBh
cmF0b3IoKSk7CisgICAgICAgICAgICB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVGcmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZDog
eworICAgICAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmllbGQg
PSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRp
dEVsZW1lbnQpOworICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKGZpZWxkKTsKKyAgICAg
ICAgaWYgKHNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpKQorICAgICAgICAgICAgZmll
bGQtPnNldFJlYWRPbmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OnNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNlY29uZCkp
LmlzWmVybygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnNob3VsZE1pbnV0ZUZp
ZWxkUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0ZXBSYW5nZS5zdGVwKCkucmVt
YWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCk7Cit9CisKK2Jvb2wg
RGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50
Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OnZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgQVNTRVJUKHRleHQubGVu
Z3RoKCkpOworICAgIG1fZWRpdEVsZW1lbnQuYXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZWRp
dEVsZW1lbnQuZG9jdW1lbnQoKSwgdGV4dCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK0RhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5FZGl0
Q29udHJvbE93bmVyKCkKK3sKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRpbWVFZGl0
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRDb250cm9s
T3duZXIpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9l
ZGl0Q29udHJvbE93bmVyKCZlZGl0Q29udHJvbE93bmVyKQorICAgICwgbV9zcGluQnV0dG9uKDAp
CisgICAgLCBtX2ZvY3VzRmllbGRJbmRleChpbnZhbGlkRmllbGRJbmRleCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZGF0ZVRpbWVFZGl0UHNldWRvSWQsICgiLXdl
YmtpdC1kYXRldGltZS1lZGl0IikpOworICAgIHNldFNoYWRvd1BzZXVkb0lkKGRhdGVUaW1lRWRp
dFBzZXVkb0lkKTsKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1l
bnQoKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9m
aWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxkSW5kZXhd
LT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAg
IG1fc3BpbkJ1dHRvbi0+cmVtb3ZlU3RlcEFjdGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjphZGRGaWVsZChQYXNzUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50
PiBmaWVsZCkKK3sKKyAgICBpZiAobV9maWVsZHMuc2l6ZSgpID09IG1fZmllbGRzLmNhcGFjaXR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZpZWxkcy5hcHBlbmQoZmllbGQuZ2V0KCkpOwor
ICAgIGFwcGVuZENoaWxkKGZpZWxkKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRFbGVt
ZW50PiBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFZGl0
Q29udHJvbE93bmVyJiBlZGl0Q29udHJvbE93bmVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5n
ZSkKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRS
ZWYobmV3IERhdGVUaW1lRWRpdEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sT3duZXIpKTsK
KyAgICBjb250YWluZXItPmxheW91dChzdGVwUmFuZ2UpOworICAgIHJldHVybiBjb250YWluZXIu
cmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVD
aGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVt
ZW50KiBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEF0KHNpemVfdCBmaWVsZEluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpID8gbV9maWVsZHNb
ZmllbGRJbmRleF0gOiAwOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3VzRmll
bGRBdChzaXplX3QgbmV3Rm9jdXNGaWVsZEluZGV4KQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJ
bmRleCA9PSBuZXdGb2N1c0ZpZWxkSW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAgIERhdGVU
aW1lRmllbGRFbGVtZW50KiBjb25zdCBuZXdGb2N1c0ZpZWxkID0gZmllbGRBdChuZXdGb2N1c0Zp
ZWxkSW5kZXgpOworICAgIGlmIChuZXdGb2N1c0ZpZWxkICYmIG5ld0ZvY3VzRmllbGQtPmlzUmVh
ZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNv
bnN0IGN1cnJlbnRGb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7CisKKyAg
ICBpZiAoY3VycmVudEZvY3VzRmllbGQpCisgICAgICAgIGN1cnJlbnRGb2N1c0ZpZWxkLT5zZXRG
b2N1cyhmYWxzZSk7CisKKyAgICBpZiAoIW5ld0ZvY3VzRmllbGQpIHsKKyAgICAgICAgbV9mb2N1
c0ZpZWxkSW5kZXggPSBpbnZhbGlkRmllbGRJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gbmV3Rm9jdXNGaWVsZEluZGV4OworICAgIG5ld0Zv
Y3VzRmllbGQtPnNldEZvY3VzKHRydWUpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAg
ICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBr
ZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9
PSAiTGVmdCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgY29uc3Qgc2l6ZV90IGZpZWxkSW5kZXggPSBwcmV2aW91c0ZpZWxkSW5kZXgoKTsK
KyAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1c0ZpZWxk
QXQoZmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5SWRl
bnRpZmllciA9PSAiUmlnaHQiKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBmaWVsZEluZGV4ID0gbmV4dEZpZWxkSW5k
ZXgoKTsKKyAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1
c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
a2V5SWRlbnRpZmllciA9PSAiVSswMDA5IikgeworICAgICAgICBjb25zdCBzaXplX3QgZmllbGRJ
bmRleCA9IGtleWJvYXJkRXZlbnQtPmdldE1vZGlmaWVyU3RhdGUoIlNoaWZ0IikgPyBwcmV2aW91
c0ZpZWxkSW5kZXgoKSA6IG5leHRGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZp
ZWxkSW5kZXgpKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OmZpZWxkVmFsdWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9lZGl0Q29udHJvbE93bmVyKQorICAg
ICAgICBtX2VkaXRDb250cm9sT3duZXItPmVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgpCit7CisgICAgaWYg
KG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFsaWRGaWVsZEluZGV4KQorICAgICAgICBmb2N1c0Zp
ZWxkQXQobmV4dEZpZWxkSW5kZXgoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBtb3VzZUV2ZW50KQoreworICAgIGlmIChpc0Rp
c2FibGVkKCkgfHwgaXNSZWFkT25seSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobW91
c2VFdmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBtb3VzZUV2
ZW50LT5idXR0b24oKSAhPSBMZWZ0QnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2Rl
KiBjb25zdCByZWxhdGVkVGFyZ2V0ID0gbW91c2VFdmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwor
ICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6
ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKG1fZmllbGRzW2ZpZWxkSW5kZXhdID09
IHJlbGF0ZWRUYXJnZXQpIHsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgICAg
ICBpZiAobV9lZGl0Q29udHJvbE93bmVyKQorICAgICAgICAgICAgICAgIG1fZWRpdENvbnRyb2xP
d25lci0+ZWRpdENvbnRyb2xNb3VzZUZvY3VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKworYm9vbCBEYXRlVGltZUVkaXRFbGVtZW50Ojppc0Rpc2FibGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJvbE93bmVyICYmIG1fZWRpdENvbnRyb2xP
d25lci0+aXNFZGl0Q29udHJvbE93bmVyRGlzYWJsZWQoKTsKK30KKworYm9vbCBEYXRlVGltZUVk
aXRFbGVtZW50Ojppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJv
bE93bmVyICYmIG1fZWRpdENvbnRyb2xPd25lci0+aXNFZGl0Q29udHJvbE93bmVyUmVhZE9ubHko
KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpsYXlvdXQoY29uc3QgU3RlcFJhbmdl
JiBzdGVwUmFuZ2UpCit7CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmll
bGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBmb2N1c0ZpZWxkQXQoaW52YWxp
ZEZpZWxkSW5kZXgpOworCisgICAgRGF0ZVRpbWVFZGl0QnVpbGRlciBidWlsZGVyKCp0aGlzLCBz
dGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmluZyBkYXRlVGltZUZvcm1hdCA9IGJ1aWxkZXIubmVl
ZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpIDogbG9jYWxpemVkU2hv
cnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlmICghYnVpbGRlci5idWlsZChkYXRlVGltZUZvcm1h
dCkgfHwgbV9maWVsZHMuaXNFbXB0eSgpKQorICAgICAgICBidWlsZGVyLmJ1aWxkKGJ1aWxkZXIu
bmVlZFNlY29uZEZpZWxkKCkgPyAiSEg6bW06c3MiIDogIkhIOm1tIik7CisKKyAgICBSZWZQdHI8
U3BpbkJ1dHRvbkVsZW1lbnQ+IHNwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KCksICp0aGlzKTsKKyAgICBtX3NwaW5CdXR0b24gPSBzcGluQnV0dG9uLmdldCgp
OworICAgIGFwcGVuZENoaWxkKHNwaW5CdXR0b24pOworCisgICAgaWYgKGZvY3VzRmllbGQpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX2ZpZWxk
cy5zaXplKCk7ICsrZmllbGRJbmRleCkgeworICAgICAgICAgICAgaWYgKGZvY3VzRmllbGQgPT0g
bV9maWVsZHNbZmllbGRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmll
bGRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3NpemVfdCBEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0RmllbGRJbmRl
eCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFsaWRGaWVs
ZEluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXgg
KyAxOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAg
ICAgaWYgKCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZpZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiBtX2ZpZWxkcy5zaXplKCk7Cit9
CisKK3NpemVfdCBEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0ZpZWxkSW5kZXgoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJbmRleCk7
CisgICAgc2l6ZV90IGZpZWxkSW5kZXggPSBtX2ZvY3VzRmllbGRJbmRleDsKKyAgICB3aGlsZSAo
ZmllbGRJbmRleCA+IDApIHsKKyAgICAgIC0tZmllbGRJbmRleDsKKyAgICAgICAgaWYgKCFtX2Zp
ZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGZpZWxk
SW5kZXg7CisgICAgfQorICAgIHJldHVybiBpbnZhbGlkRmllbGRJbmRleDsKK30KKwordm9pZCBE
YXRlVGltZUVkaXRFbGVtZW50OjpyZWFkT25seVN0YXRlQ2hhbmdlZCgpCit7CisgICAgdXBkYXRl
VUlTdGF0ZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5b3V0KCkK
K3sKKyAgICBtX2ZpZWxkcy5zaHJpbmsoMCk7CisgICAgbV9zcGluQnV0dG9uID0gMDsKKyAgICBt
X2ZvY3VzRmllbGRJbmRleCA9IGludmFsaWRGaWVsZEluZGV4OworICAgIHJlbW92ZUNoaWxkcmVu
KCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3VzRXZlbnQpIHsKKyAgICAgICAgaWYgKCFpc0Rpc2FibGVkKCkgJiYgIWlzUmVhZE9ubHkoKSAm
JiBtX2ZvY3VzRmllbGRJbmRleCA9PSBpbnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAgICAgIGZv
Y3VzRmllbGRBdCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpIHsKKyAgICAgICAgZm9jdXNGaWVsZEF0
KGludmFsaWRGaWVsZEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChl
dmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc0tleWJv
YXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXli
b2FyZEV2ZW50Kj4oZXZlbnQpKTsKKworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3Vz
RmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAoIWZvY3VzRmllbGQp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvY3VzRmllbGQtPmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNv
bnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXgg
PSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAg
IG1fZmllbGRzW2ZpZWxkSW5kZXhdLT5zZXRWYWx1ZUFzRGF0ZShkYXRlKTsKK30KKwordm9pZCBE
YXRlVGltZUVkaXRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJiBk
YXRlKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9m
aWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxkSW5kZXhd
LT5zZXRFbXB0eVZhbHVlKGRhdGUsIERhdGVUaW1lRmllbGRFbGVtZW50OjpEaXNwYXRjaE5vRXZl
bnQpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVwRG93bigp
Cit7CisgICAgaWYgKERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmll
bGRBdChtX2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0ZXBEb3duKCk7
Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRvblN0ZXBVcCgpCit7Cisg
ICAgaWYgKERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmllbGRBdCht
X2ZvY3VzRmllbGRJbmRleCkpCisgICAgICAgIGZvY3VzRmllbGQtPnN0ZXBVcCgpOworfQorCit2
b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnVwZGF0ZVVJU3RhdGUoKQoreworICAgIGlmIChpc0Rp
c2FibGVkKCkgfHwgaXNSZWFkT25seSgpKSB7CisgICAgICAgIG1fc3BpbkJ1dHRvbi0+cmVsZWFz
ZUNhcHR1cmUoKTsKKyAgICAgICAgZm9jdXNGaWVsZEF0KGludmFsaWRGaWVsZEluZGV4KTsKKyAg
ICB9Cit9CisKK2RvdWJsZSBEYXRlVGltZUVkaXRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICBkb3VibGUgdmFsdWUgPSAwOworCisgICAgZm9yIChzaXplX3QgZmllbGRJbmRl
eCA9IDA7IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkgeworICAg
ICAgICBjb25zdCBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZmllbGQgPSBtX2ZpZWxkc1tm
aWVsZEluZGV4XTsKKyAgICAgICAgaWYgKCFmaWVsZC0+aGFzVmFsdWUoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAg
ICB2YWx1ZSArPSBmaWVsZC0+dmFsdWVBc0RvdWJsZSgpOworICAgIH0KKworICAgIHJldHVybiB2
YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
YzQxYWFjZjQyYTk2ZDRiMmM2OTY4MDY1YzZhMmE3NDBjZTBlYjJhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5oCkBAIC0w
LDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUVkaXRFbGVt
ZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVFZGl0RWxlbWVudF9oCisKKyNpZiBFTkFCTEUoSU5QVVRf
VFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERhdGVDb21wb25lbnRzOworY2xhc3MgRGF0ZVRpbWVFZGl0TGF5
b3V0ZXI7CitjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91c2VFdmVudDsKK2NsYXNzIFN0
ZXBSYW5nZTsKKworLy8gRGF0ZVRpbWVFZGl0RWxlbWVudCBjbGFzcyBjb250YWlucyBudW1iZXJp
YyBmaWVsZCBhbmQgc3ltYm9sYyBmaWVsZCBmb3IKKy8vIHJlcHJlc2VudGluZyBkYXRlIGFuZCB0
aW1lLCBzdWNoIGFzCisvLyAgLSBZZWFyLCBNb250aCwgRGF5IE9mIE1vbnRoCisvLyAgLSBIb3Vy
LCBNaW51dGUsIFNlY29uZCwgTWlsbGlzZWNvbmQsIEFNL1BNCitjbGFzcyBEYXRlVGltZUVkaXRF
bGVtZW50IDogcHVibGljIEhUTUxEaXZFbGVtZW50LCBwdWJsaWMgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6OkZpZWxkRXZlbnRIYW5kbGVyLCBwcml2YXRlIFNwaW5CdXR0b25FbGVtZW50OjpTdGVwQWN0
aW9uSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0RWxlbWVu
dCk7CisKK3B1YmxpYzoKKyAgICAvLyBFZGl0Q29udHJvbE93bmVyIGltcGxlbWVudGVyIG11c3Qg
Y2FsbCByZW1vdmVFZGl0Q29udHJvbE93bmVyIHdoZW4KKyAgICAvLyBpdCBkb2Vzbid0IGhhbmRs
ZSBldmVudCwgZS5nLiBhdCBkZXN0cnVjdGlvbi4KKyAgICBjbGFzcyBFZGl0Q29udHJvbE93bmVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkVkaXRDb250cm9sT3duZXIoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGVkaXRDb250cm9sTW91c2VGb2N1cygpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCkgPSAwOworICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNFZGl0Q29udHJvbE93bmVyRGlzYWJsZWQoKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0VkaXRDb250cm9sT3duZXJSZWFkT25seSgpIGNvbnN0ID0gMDsKKyAg
ICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY3JlYXRl
KERvY3VtZW50KiwgRWRpdENvbnRyb2xPd25lciYsIGNvbnN0IFN0ZXBSYW5nZSYpOworCisgICAg
dmlydHVhbCB+RGF0ZVRpbWVFZGl0RWxlbWVudCgpOworICAgIHZvaWQgYWRkRmllbGQoUGFzc1Jl
ZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4pOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7CisgICAgdm9pZCBkaXNhYmxlZFN0YXRlQ2hhbmdl
ZCgpOworICAgIHZvaWQgbGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYpOworICAgIHZvaWQgcmVhZE9u
bHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHJlbW92ZUVkaXRDb250cm9sT3duZXIoKSB7IG1f
ZWRpdENvbnRyb2xPd25lciA9IDA7IH0KKyAgICB2b2lkIHJlc2V0TGF5b3V0KCk7CisgICAgdm9p
ZCBzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJik7CisgICAgdm9pZCBzZXRWYWx1
ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpOworICAgIGRvdWJsZSB2YWx1ZUFzRG91Ymxl
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbnZhbGlkRmll
bGRJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpOworCisgICAgLy8gRGF0ZXRpbWUgY2Fu
IGJlIHJlcHJlc2VudCBhdCBtb3N0IGZpdmUgZmllbGRzLCBzdWNoIGFzCisgICAgLy8gIDEuIHll
YXIKKyAgICAvLyAgMi4gbW9udGgKKyAgICAvLyAgMy4gZGF5LW9mLW1vbnRoCisgICAgLy8gIDQu
IGhvdXIKKyAgICAvLyAgNS4gbWludXRlCisgICAgLy8gIDYuIHNlY29uZAorICAgIC8vICA3LiBt
aWxsaXNlY29uZAorICAgIC8vICA4LiBBTS9QTQorICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11
bU51bWJlck9mRmllbGRzID0gODsKKworICAgIERhdGVUaW1lRWRpdEVsZW1lbnQoRG9jdW1lbnQq
LCBFZGl0Q29udHJvbE93bmVyJik7CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogZmllbGRB
dChzaXplX3QpIGNvbnN0OworICAgIHZvaWQgZm9jdXNGaWVsZEF0KHNpemVfdCk7CisgICAgdm9p
ZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCopOworICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0OworICAg
IGJvb2wgaXNSZWFkT25seSgpIGNvbnN0OworICAgIHNpemVfdCBuZXh0RmllbGRJbmRleCgpIGNv
bnN0OworICAgIHNpemVfdCBwcmV2aW91c0ZpZWxkSW5kZXgoKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZVVJU3RhdGUoKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50
SGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2VkKCkg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIGZvY3VzT25OZXh0RmllbGQoKSBPVkVS
UklERSBGSU5BTDsKKworICAgIC8vIFNwaW5CdXR0b25FbGVtZW50OjpTdGVwQWN0aW9uSGFuZGxl
ciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwRG93bigpIE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzcGluQnV0dG9uU3RlcFVwKCkgT1ZFUlJJREUg
RklOQUw7CisKKyAgICBWZWN0b3I8RGF0ZVRpbWVGaWVsZEVsZW1lbnQqLCBtYXhpbXVtTnVtYmVy
T2ZGaWVsZHM+IG1fZmllbGRzOworICAgIEVkaXRDb250cm9sT3duZXIqIG1fZWRpdENvbnRyb2xP
d25lcjsKKyAgICBTcGluQnV0dG9uRWxlbWVudCogbV9zcGluQnV0dG9uOworICAgIHNpemVfdCBt
X2ZvY3VzRmllbGRJbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
RmllbGRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDJlNDkwMGNjNzFkMGM5MzE5MzI5OTkwZDY2ZmQz
ZmNlOGMzYTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
RGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisg
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVM
VElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisKKyNpbmNs
dWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OkZpZWxkRXZlbnRIYW5kbGVyOjp+RmllbGRFdmVudEhhbmRsZXIoKQoreworfQorCitEYXRlVGlt
ZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBG
aWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCisgICAgOiBIVE1MRWxlbWVudChz
cGFuVGFnLCBkb2N1bWVudCkKKyAgICAsIG1fZmllbGRFdmVudEhhbmRsZXIoJmZpZWxkRXZlbnRI
YW5kbGVyKQoreworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgp
KSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZlbnQpOworICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KGtleWJv
YXJkRXZlbnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVy
KGtleWJvYXJkRXZlbnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC0+ZGVmYXVsdEhhbmRs
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIVE1MRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50
KQoreworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlm
aWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmllcigpOworCisgICAgaWYgKGtleUlkZW50
aWZpZXIgPT0gIkRvd24iKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgIHN0ZXBEb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHN0ZXBVcCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlUrMDAwOCIpIHsKKyAgICAgICAga2V5
Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgc2V0RW1wdHlWYWx1ZShE
YXRlQ29tcG9uZW50cygpLCBEaXNwYXRjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgpCit7Cisg
ICAgaWYgKG1fZmllbGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhhbmRsZXIt
PmZvY3VzT25OZXh0RmllbGQoKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6aW5p
dGlhbGl6ZShjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKQoreworICAgIHNldFNo
YWRvd1BzZXVkb0lkKHNoYWRvd1BzZXVkb0lkKTsKKyAgICBhcHBlbmRDaGlsZChUZXh0OjpjcmVh
dGUoZG9jdW1lbnQoKSwgdmlzaWJsZVZhbHVlKCkpKTsKK30KKworYm9vbCBEYXRlVGltZUZpZWxk
RWxlbWVudDo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1
dGUocmVhZG9ubHlBdHRyKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0UmVh
ZE9ubHkoKQoreworICAgIC8vIFNldCBIVE1MIGF0dHJpYnV0ZSByZWFkb25seSB0byBjaGFuZ2Ug
YXBwZXJhbmNlLgorICAgIHNldEJvb2xlYW5BdHRyaWJ1dGUocmVhZG9ubHlBdHRyLCB0cnVlKTsK
KyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQ6OnVwZGF0ZVZpc2libGVWYWx1ZShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7Cisg
ICAgVGV4dCogY29uc3QgdGV4dE5vZGUgPSB0b1RleHQoZmlyc3RDaGlsZCgpKTsKKyAgICBjb25z
dCBTdHJpbmcgbmV3VmlzaWJsZVZhbHVlID0gdmlzaWJsZVZhbHVlKCk7CisgICAgQVNTRVJUKG5l
d1Zpc2libGVWYWx1ZS5sZW5ndGgoKSA+IDApOworCisgICAgaWYgKHRleHROb2RlLT53aG9sZVRl
eHQoKSA9PSBuZXdWaXNpYmxlVmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHROb2Rl
LT5yZXBsYWNlV2hvbGVUZXh0KG5ld1Zpc2libGVWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CisKKyAgICBpZiAoZXZlbnRCZWhhdmlvciA9PSBEaXNwYXRjaEV2ZW50ICYmIG1fZmllbGRFdmVu
dEhhbmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhhbmRsZXItPmZpZWxkVmFsdWVDaGFuZ2Vk
KCk7Cit9CisKK2RvdWJsZSBEYXRlVGltZUZpZWxkRWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyB2YWx1ZUFzSW50ZWdlcigpICogdW5pdElu
TWlsbGlzZWNvbmQoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOWI2
NjQzMWI2NTNiYzY5MDkxNDlkMTI3ODM2NzkzZjU0YWExNzk1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApAQCAtMCww
ICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVu
dF9oCisjZGVmaW5lIERhdGVUaW1lRmllbGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9U
WVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRlQ29tcG9uZW50czsKKworLy8gRGF0
ZVRpbWVGaWVsZEVsZW1lbnQgaXMgYmFzZSBjbGFzcyBvZiBkYXRlIHRpbWUgZmllbGQgZWxlbWVu
dC4KK2NsYXNzIERhdGVUaW1lRmllbGRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoK
KyAgICBlbnVtIEV2ZW50QmVoYXZpb3IgeworICAgICAgICBEaXNwYXRjaE5vRXZlbnQsCisgICAg
ICAgIERpc3BhdGNoRXZlbnQsCisgICAgfTsKKworICAgIC8vIEZpZWxkRXZlbnRIYW5kbGVyIGlt
cGxlbWVudGVyIG11c3QgY2FsbCByZW1vdmVFdmVudEhhbmRsZXIgd2hlbgorICAgIC8vIGl0IGRv
ZXNuJ3QgaGFuZGxlIGV2ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNzIEZpZWxk
RXZlbnRIYW5kbGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkZpZWxkRXZlbnRI
YW5kbGVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaWVsZFZhbHVlQ2hhbmdlZCgpID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzT25OZXh0RmllbGQoKSA9IDA7CisgICAgfTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgPSAwOworICAgIGJvb2wgaXNSZWFkT25s
eSgpIGNvbnN0OworICAgIHZvaWQgcmVtb3ZlRXZlbnRIYW5kbGVyKCkgeyBtX2ZpZWxkRXZlbnRI
YW5kbGVyID0gMDsgfQorICAgIHZvaWQgc2V0UmVhZE9ubHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0RW1wdHlWYWx1ZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEV2ZW50QmVoYXZpb3IgPSBEaXNw
YXRjaE5vRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3Qg
RGF0ZUNvbXBvbmVudHMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2Vy
KGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzdGVwRG93bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwKCkgPSAwOworICAg
IHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworICAgIGRvdWJsZSB2YWx1ZUFzRG91
YmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgPSAwOworCitwcm90ZWN0
ZWQ6CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxl
ciYpOworICAgIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpOworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKSA9IDA7CisgICAgdm9pZCBpbml0aWFsaXpl
KGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vj
b25kKCkgY29uc3QgPSAwOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50QmVoYXZp
b3IpOworCitwcml2YXRlOgorICAgIHZvaWQgZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtl
eWJvYXJkRXZlbnQqKTsKKworICAgIEZpZWxkRXZlbnRIYW5kbGVyKiBtX2ZpZWxkRXZlbnRIYW5k
bGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWZmN2ZhNWM3ZGEwMjg3N2RlNGNkMTZhMzk5YWU5ODc5MGI1OTMyZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVM
RFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisKKyNpbmNsdWRlICJEYXRl
Q29tcG9uZW50cy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0RhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVBTVBNRmllbGRFbGVt
ZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5k
bGVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYW1wbUxhYmVscykKKyAgICA6IERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBhbXBtTGFiZWxz
KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudD4gRGF0ZVRpbWVB
TVBNRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFu
ZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbXBtTGFiZWxz
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBhbXBtUHN1ZWRvSWQs
ICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWFtcG0tZmllbGQiKSk7CisgICAgUmVmUHRyPERhdGVU
aW1lQU1QTUZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVBTVBNRmll
bGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgYW1wbUxhYmVscykpOworICAg
IGZpZWxkLT5pbml0aWFsaXplKGFtcG1Qc3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVh
c2UoKTsKK30KKwordm9pZCBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRl
KGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRh
dGUuaG91cigpID49IDEyID8gMSA6IDApOworfQorCitkb3VibGUgRGF0ZVRpbWVBTVBNRmllbGRF
bGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1zUGVySG91
ciAqIDEyOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGVUaW1l
SG91ckZpZWxkRWxlbWVudDo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBpbnQgbWluaW11bSwg
aW50IG1heGltdW0pCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQs
IGZpZWxkRXZlbnRIYW5kbGVyLCBtaW5pbXVtLCBtYXhpbXVtKQorICAgICwgbV9hbGlnbm1lbnQo
bWF4aW11bSArIG1heGltdW0gJSAyKQoreworICAgIEFTU0VSVCgoIW1pbmltdW0gJiYgKG1heGlt
dW0gPT0gMTEgfHwgbWF4aW11bSA9PSAyMykpIHx8IChtaW5pbXVtID09IDEgJiYgKG1heGltdW0g
PT0gMTIgfHwgbWF4aW11bSA9PSAyNCkpKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUhvdXJG
aWVsZEVsZW1lbnQ+IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBpbnQgbWluaW11
bSwgaW50IG1heGltdW0pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IGhvdXJQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZCIpKTsKKyAg
ICBSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBE
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBtaW5p
bXVtLCBtYXhpbXVtKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoaG91clBzdWVkb0lkKTsKKyAg
ICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAg
c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworfQorCit2b2lkIERhdGVUaW1lSG91ckZp
ZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlQXNIb3VyMjMsIEV2ZW50QmVo
YXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBjb25zdCBpbnQgdmFsdWUgPSBSYW5nZSgwLCAy
MykuY2xhbXBWYWx1ZSh2YWx1ZUFzSG91cjIzKSAlIG1fYWxpZ25tZW50OworICAgIERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIocmFuZ2UoKS5taW5pbXVtICYm
ICF2YWx1ZSA/IG1fYWxpZ25tZW50IDogdmFsdWUsIGV2ZW50QmVoYXZpb3IpOworfQorCitkb3Vi
bGUgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1zUGVySG91cjsKK30KKworaW50IERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dDo6dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBoYXNWYWx1ZSgpID8gRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpICUgbV9hbGlnbm1lbnQg
OiAtMTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEYXRlVGltZU1p
bGxpc2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KERv
Y3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQor
ICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFu
ZGxlciwgMCwgOTk5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lTWlsbGlzZWNvbmRGaWVs
ZEVsZW1lbnQ+IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVu
dCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbWlsbGlzZWNvbmRQc3VlZG9JZCwg
KCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGQiKSk7CisgICAgUmVmUHRy
PERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERh
dGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
KSk7CisgICAgZmllbGQtPmluaXRpYWxpemUobWlsbGlzZWNvbmRQc3VlZG9JZCk7CisgICAgcmV0
dXJuIGZpZWxkLnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRF
bGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAg
ICBzZXRWYWx1ZUFzSW50ZWdlcihkYXRlLm1pbGxpc2Vjb25kKCkpOworfQorCitkb3VibGUgRGF0
ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdAor
eworICAgIHJldHVybiAxOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K0RhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudChE
b2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikK
KyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhh
bmRsZXIsIDAsIDU5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lTWludXRlRmllbGRFbGVt
ZW50PiBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBtaW51dGVQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0
aW1lLWVkaXQtbWludXRlLWZpZWxkIikpOworICAgIFJlZlB0cjxEYXRlVGltZU1pbnV0ZUZpZWxk
RWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQo
ZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUobWlu
dXRlUHN1ZWRvSWQpOworICAgIHJldHVybiBmaWVsZC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25l
bnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUubWludXRlKCkpOworfQor
Citkb3VibGUgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJNaW51dGU7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lU2Vj
b25kRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZp
ZWxkRXZlbnRIYW5kbGVyKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3Vt
ZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgMCwgNTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRp
bWVTZWNvbmRGaWVsZEVsZW1lbnQ+IERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHNlY29uZFBzdWVkb0lk
LCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQiKSk7CisgICAgUmVmUHRyPERh
dGVUaW1lU2Vjb25kRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZVNl
Y29uZEZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAgICBmaWVs
ZC0+aW5pdGlhbGl6ZShzZWNvbmRQc3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVhc2Uo
KTsKK30KKwordm9pZCBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIoZGF0
ZS5zZWNvbmQoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6dW5p
dEluTWlsbGlzZWNvbmQoKSBjb25zdAoreworICAgIHJldHVybiBtc1BlclNlY29uZDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdiYzFlZmE1
NTJlMzQ4MDRkNjNjMzU0MGRlNjYyYTBlZjA0N2I1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oCkBAIC0wLDAgKzEs
MTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVudHNf
aAorI2RlZmluZSBEYXRlVGltZUZpZWxkRWxlbWVudHNfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50LmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCA6IHB1
YmxpYyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVs
ZEV2ZW50SGFuZGxlciYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKK3ByaXZhdGU6CisgICAg
RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVu
Y3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9u
ZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vj
b25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCisKKy8vIERhdGVUaW1lSG91ckZpZWxk
RWxlbWVudCBpcyB1c2VkIGZvciBob3VyIGZpZWxkIG9mIGRhdGUgdGltZSBmb3JtYXQKKy8vIHN1
cHBvcnRpbmcgZm9sbG93aW5nIHBhdHRlcm5zOgorLy8gIC0gMCB0byAxMQorLy8gIC0gMSB0byAx
MgorLy8gIC0gMCB0byAyMworLy8gIC0gMSB0byAyNAorY2xhc3MgRGF0ZVRpbWVIb3VyRmllbGRF
bGVtZW50IDogcHVibGljIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3Vt
ZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworCitw
cml2YXRlOgorICAgIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZl
bnRIYW5kbGVyJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworICAgIC8vIERhdGVUaW1l
RmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgpIGNv
bnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBjb25zdCBpbnQgbV9hbGlnbm1lbnQ7Cit9OworCitj
bGFzcyBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVNaWxs
aXNlY29uZEZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2
ZW50SGFuZGxlciYpOworCitwcml2YXRlOgorICAgIERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVs
ZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCisgICAgLy8gRGF0ZVRpbWVG
aWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShj
b25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91Ymxl
IHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCitjbGFzcyBE
YXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lTWludXRlRmllbGRFbGVt
ZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lTWludXRlRmll
bGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCitwcml2
YXRlOgorICAgIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVu
dEhhbmRsZXImKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVS
UklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0
IE9WRVJSSURFIEZJTkFMOworfTsKKworY2xhc3MgRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQg
OiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
KiwgRmllbGRFdmVudEhhbmRsZXImKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZVNlY29uZEZp
ZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKKyAgICAvLyBEYXRl
VGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNE
YXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBk
b3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg3NTVmNTVjY2JhYWEwOTM1MTViMTA2ZjJlOTZjOWI4YTBkZjVkYzkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVf
RklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIgorCisjaW5j
bHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZE51bWJlci5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgY29uc3QgRE9NVGltZVN0YW1wIHR5cGVBaGVhZFRpbWVvdXQgPSAxMDAwOworCitz
dGF0aWMgc2l6ZV90IGRpc3BsYXlTaXplT2ZOdW1iZXIoaW50IHZhbHVlKQoreworICAgIEFTU0VS
VCh2YWx1ZSA+PSAwKTsKKworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAxOworCisg
ICAgaW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAgICB3aGlsZSAodmFsdWUpIHsKKyAgICAgICAg
dmFsdWUgLz0gMTA7CisgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7CisgICAgfQorCisgICAgcmV0
dXJuIG51bWJlck9mRGlnaXRzOworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJh
bmdlOjpSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBtYXhpbXVtKG1heGlt
dW0pCisgICAgLCBtaW5pbXVtKG1pbmltdW0pCit7CisgICAgQVNTRVJUKG1pbmltdW0gPD0gbWF4
aW11bSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJhbmdlOjpjbGFt
cFZhbHVlKGludCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgo
dmFsdWUsIG1pbmltdW0pLCBtYXhpbXVtKTsKK30KKworRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVs
ZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11
bSkKKyAgICA6IERhdGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxl
cikKKyAgICAsIG1fbGFzdERpZ2l0Q2hhclRpbWUoMCkKKyAgICAsIG1fcmFuZ2UobWluaW11bSwg
bWF4aW11bSkKKyAgICAsIG1fdmFsdWUoMCkKKyAgICAsIG1faGFzVmFsdWUoZmFsc2UpCit7Cit9
CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGlzUmVhZE9ubHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVUNoYXIgY2hh
ckNvZGUgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSk7Cisg
ICAgaWYgKGNoYXJDb2RlIDwgJyAnKQorICAgICAgICByZXR1cm47CisKKyAgICBET01UaW1lU3Rh
bXAgZGVsdGEgPSBrZXlib2FyZEV2ZW50LT50aW1lU3RhbXAoKSAtIG1fbGFzdERpZ2l0Q2hhclRp
bWU7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7CisKKyAgICBTdHJpbmcgbnVtYmVyID0g
Y29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoU3RyaW5nKCZjaGFyQ29kZSwgMSkpOworICAgIGNv
bnN0IGludCBkaWdpdCA9IG51bWJlclswXSAtICcwJzsKKyAgICBpZiAoZGlnaXQgPCAwIHx8IGRp
Z2l0ID4gOSkKKyAgICAgICAgcmV0dXJuOworCisgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX2hhc1ZhbHVlICYmIGRlbHRhIDwg
dHlwZUFoZWFkVGltZW91dCA/IG1fdmFsdWUgKiAxMCArIGRpZ2l0IDogZGlnaXQsIERpc3BhdGNo
RXZlbnQpOworICAgIGlmIChtX3ZhbHVlICogMTAgPiBtX3JhbmdlLm1heGltdW0pCisgICAgICAg
IGZvY3VzT25OZXh0RmllbGQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGFzdERpZ2l0Q2hhclRp
bWUgPSBrZXlib2FyZEV2ZW50LT50aW1lU3RhbXAoKTsKK30KKworYm9vbCBEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNWYWx1
ZTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikK
K3sKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKKworICAgIGlmIChpc1JlYWRPbmx5KCkp
IHsKKyAgICAgICAgc2V0VmFsdWVBc0RhdGUoZGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2hhc1ZhbHVlID0gZmFsc2U7CisgICAgbV92YWx1ZSA9IDA7CisgICAgdXBkYXRl
VmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlLCBFdmVudEJlaGF2aW9yIGV2
ZW50QmVoYXZpb3IpCit7CisgICAgbV92YWx1ZSA9IGNsYW1wVmFsdWUodmFsdWUpOworICAgIG1f
aGFzVmFsdWUgPSB0cnVlOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsK
KyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OnN0ZXBEb3duKCkKK3sKKyAgICBpZiAobV9oYXNWYWx1ZSkKKyAgICAgICAg
c2V0VmFsdWVBc0ludGVnZXIobV92YWx1ZSA9PSBtX3JhbmdlLm1pbmltdW0gPyBtX3JhbmdlLm1h
eGltdW0gOiBjbGFtcFZhbHVlKG1fdmFsdWUgLSAxKSwgRGlzcGF0Y2hFdmVudCk7CisgICAgZWxz
ZQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3JhbmdlLm1heGltdW0sIERpc3BhdGNoRXZl
bnQpOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKCkKK3sK
KyAgICBpZiAobV9oYXNWYWx1ZSkKKyAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV92YWx1ZSA9
PSBtX3JhbmdlLm1heGltdW0gPyBtX3JhbmdlLm1pbmltdW0gOiBjbGFtcFZhbHVlKG1fdmFsdWUg
KyAxKSwgRGlzcGF0Y2hFdmVudCk7CisgICAgZWxzZQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdl
cihtX3JhbmdlLm1pbmltdW0sIERpc3BhdGNoRXZlbnQpOworfQorCitTdHJpbmcgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hhc1ZhbHVl
KQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIGlmIChtX3JhbmdlLm1heGlt
dW0gPiA5OTkpCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoU3RyaW5n
OjpudW1iZXIobV92YWx1ZSkpOworCisgICAgaWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5KQorICAg
ICAgICByZXR1cm4gY29udmVydFRvTG9jYWxpemVkTnVtYmVyKFN0cmluZzo6Zm9ybWF0KCIlMDNk
IiwgbV92YWx1ZSkpOworCisgICAgcmV0dXJuIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihTdHJp
bmc6OmZvcm1hdCgiJTAyZCIsIG1fdmFsdWUpKTsKK30KKworaW50IERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc1Zh
bHVlID8gbV92YWx1ZSA6IC0xOworfQorCitTdHJpbmcgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50Ojp2aXNpYmxlVmFsdWUoKSBjb25zdAoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAg
ICByZXR1cm4gdmFsdWUoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3Ig
KGludCBudW1iZXJPZkRhc2hzID0gc3RkOjptYXgoZGlzcGxheVNpemVPZk51bWJlcihtX3Jhbmdl
Lm1heGltdW0pLCBkaXNwbGF5U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWluaW11bSkpOyBudW1iZXJP
ZkRhc2hzOyAtLW51bWJlck9mRGFzaHMpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7Cisg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzU0OTA3YjFhZDJhOWYwMGM1
NmVkNjRhNjBkOGI3ZTQwMDQ1NmY1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oCkBAIC0wLDAgKzEsODIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dF9oCisjZGVmaW5lIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudF9oCisKKyNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxk
RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudCByZXByZXNlbnRzIG51bWVyaWMgZmllbGQgb2YgZGF0ZSB0aW1lIGZvcm1hdCwK
Ky8vIHN1Y2ggYXM6CisvLyAgLSBob3VyCisvLyAgLSBtaW51dGUKKy8vICAtIG1pbGxpc2Vjb25k
CisvLyAgLSBzZWNvbmQKKy8vICAtIHllYXIKK2NsYXNzIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudCA6IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAgIHN0cnVj
dCBSYW5nZSB7CisgICAgICAgIFJhbmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSk7CisgICAg
ICAgIGludCBjbGFtcFZhbHVlKGludCkgY29uc3Q7CisKKyAgICAgICAgaW50IG1heGltdW07Cisg
ICAgICAgIGludCBtaW5pbXVtOworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBEYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGludCBtaW5p
bXVtLCBpbnQgbWF4aW11bSk7CisKKyAgICBpbnQgY2xhbXBWYWx1ZShpbnQgdmFsdWUpIGNvbnN0
IHsgcmV0dXJuIG1fcmFuZ2UuY2xhbXBWYWx1ZSh2YWx1ZSk7IH0KKyAgICBjb25zdCBSYW5nZSYg
cmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CisKKyAgICAvLyBEYXRlVGltZUZpZWxk
RWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2VyKGludCwgRXZl
bnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQg
dmFsdWVBc0ludGVnZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNp
YmxlVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworcHJpdmF0ZToKKyAgICAvLyBEYXRl
VGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJiwgRXZlbnRCZWhhdmlvcikgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCB2b2lkIHN0ZXBVcCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
U3RyaW5nIHZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBET01UaW1lU3RhbXAg
bV9sYXN0RGlnaXRDaGFyVGltZTsKKyAgICBjb25zdCBSYW5nZSBtX3JhbmdlOworICAgIGludCBt
X3ZhbHVlOworICAgIGJvb2wgbV9oYXNWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDhl
YjUyMjI5Y2FiYjk5OWU5Njk0OWNjNmZkNTc1Y2RhZjI0ODQ2ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1
ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIktleWJvYXJk
RXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6RGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVs
ZEV2ZW50SGFuZGxlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN5bWJvbHMpCisgICAgOiBEYXRl
VGltZUZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpCisgICAgLCBtX3N5
bWJvbHMoc3ltYm9scykKKyAgICAsIG1fc2VsZWN0ZWRJbmRleCgtMSkKK3sKKyAgICBBU1NFUlQo
IXN5bWJvbHMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7
CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5cHJlc3NF
dmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVUNoYXIgY2hhckNvZGUgPSBXVEY6
OlVuaWNvZGU6OnRvTG93ZXIoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSk7CisgICAgaWYgKGNo
YXJDb2RlIDwgJyAnKQorICAgICAgICByZXR1cm47CisKKyAgICBrZXlib2FyZEV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1f
c3ltYm9scy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX3N5bWJvbHNbaW5kZXhd
LmlzRW1wdHkoKSAmJiBXVEY6OlVuaWNvZGU6OnRvTG93ZXIobV9zeW1ib2xzW2luZGV4XVswXSkg
PT0gY2hhckNvZGUpIHsKKyAgICAgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKGluZGV4LCBEaXNw
YXRjaEV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Ym9vbCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2VsZWN0ZWRJbmRleCA+PSAwOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9s
aWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmLCBFdmVu
dEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaW52YWxp
ZEluZGV4OworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30KKwordm9p
ZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgbmV3
U2VsZWN0ZWRJbmRleCwgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fc2Vs
ZWN0ZWRJbmRleCA9IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKG5ld1NlbGVjdGVkSW5kZXgsIHN0YXRp
Y19jYXN0PGludD4obV9zeW1ib2xzLnNpemUoKSAtIDEpKSk7CisgICAgdXBkYXRlVmlzaWJsZVZh
bHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQ6OnN0ZXBEb3duKCkKK3sKKyAgICBjb25zdCBpbnQgc2l6ZSA9IG1fc3ltYm9scy5zaXplKCk7
CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/IChtX3NlbGVjdGVkSW5kZXggKyBz
aXplIC0gMSkgJSBzaXplIDogc2l6ZSAtIDE7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKERpc3Bh
dGNoRXZlbnQpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OnN0ZXBV
cCgpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0gaGFzVmFsdWUoKSA/IChtX3NlbGVjdGVkSW5k
ZXggKyAxKSAlIG1fc3ltYm9scy5zaXplKCkgOiAwOworICAgIHVwZGF0ZVZpc2libGVWYWx1ZShE
aXNwYXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6
OnZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IG1fc3ltYm9sc1ttX3Nl
bGVjdGVkSW5kZXhdIDogZW1wdHlTdHJpbmcoKTsKK30KKworaW50IERhdGVUaW1lU3ltYm9saWNG
aWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxl
Y3RlZEluZGV4OworfQorCitTdHJpbmcgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmlz
aWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IG1fc3ltYm9sc1tt
X3NlbGVjdGVkSW5kZXhdIDogIi0tIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTg1M2UxNjNhMjczNDcyMDRjZmJk
NzJhNjJlNGU2MWU4NDBiOTAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
ICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnRf
aAorI2RlZmluZSBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRF
bGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudCByZXByZXNlbnRzIG5vbi1udW1lcmljIGZpZWxkIG9mIGRhdGEgdGltZQorLy8g
Zm9ybWF0LCBzdWNoIGFzOiBBTS9QTSwgYW5kIG1vbnRoLgorY2xhc3MgRGF0ZVRpbWVTeW1ib2xp
Y0ZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZUZpZWxkRWxlbWVudCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk7CisKK3Byb3RlY3Rl
ZDoKKyAgICBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVu
dEhhbmRsZXImLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJS
SURFIEZJTkFMOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZEluZGV4
ID0gLTE7CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJSSURFIEZJ
TkFMOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJiwgRXZl
bnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVh
bCB2b2lkIHN0ZXBEb3duKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBV
cCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgT1ZF
UlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCBPVkVS
UklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCBPVkVS
UklERSBGSU5BTDsKKworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG1fc3ltYm9sczsKKyAgICBp
bnQgbV9zZWxlY3RlZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157676</attachid>
            <date>2012-08-10 01:53:13 -0700</date>
            <delta_ts>2012-08-10 02:06:39 -0700</delta_ts>
            <desc>Patch 11</desc>
            <filename>bug-92960-20120810175245.patch</filename>
            <type>text/plain</type>
            <size>66795</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUyNjI2OTkyNjFkODY3
ODNjNTNjMWE4MTNmYjNiNTViMjkwOTM3OS4uYTU3M2ZhMWY2NGUxZTUwMGQ1YTM2ZThmMTA2YTE0
MWE3MDgzNTYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAxMi0wOC0wOSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJ
IGZvciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVy
IG9mIG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1l
RmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25k
CisgICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9y
IG1pbnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNl
IGNsYXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkK
KyAgICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
IGJ1aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3Qg
Y2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGlu
Y2x1ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwv
c2hhZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwg
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwK
KyAgICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEJ1aWxkZXI6Om5lZWRTZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRCdWlsZGVyOjpzaG91bGRNaWxsaXNlY29uZEZpZWxkUmVhZE9ubHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkTWludXRlRmllbGRSZWFkT25s
eSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRCdWlsZGVyOjpzaG91bGRTZWNvbmRG
aWVsZFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1aWxkZXI6OnZp
c2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRM
aXRlcmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250
cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIncyBkaXNh
YmxlZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxl
bWVudDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpm
b2N1c0ZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
OjpmaWVsZFZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojpmb2N1c09uTmV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6aXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0Rmll
bGRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91
c0ZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVh
ZE9ubHlTdGF0ZUNoYW5nZWQpOiBDYWxsZWQgd2hlbiBvd25lcidzIHJlYWRPbmx5IHN0YXRlIGlz
IGNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZh
bHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEVt
cHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1
dHRvblN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNw
aW5CdXR0b25TdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6
dXBkYXRlVUlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojp2
YWx1ZUFzRG91YmxlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50
Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVFZGl0RWxlbWVudCk6CisgICAgICAgIChFZGl0
Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnJl
bW92ZUVkaXRDb250cm9sT3duZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxl
bWVudDo6RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRLZXlib2Fy
ZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
Zm9jdXNPbk5leHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0
UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0
ZVZpc2libGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1l
bnQuaDogQWRkZWQuCisgICAgICAgIChEYXRlVGltZUZpZWxkRWxlbWVudCk6CisgICAgICAgIChG
aWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZp
ZWxkRWxlbWVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZp
ZWxkRWxlbWVudDo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lSG91ckZpZWxkRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVl
QXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0
VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJG
aWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
TWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6
OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRG
aWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6dW5pdEluTWls
bGlzZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6
OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVT
ZWNvbmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmg6IEFkZGVkLgorICAgICAgICAoRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dCk6CisgICAgICAgIChEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAg
KERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lU2Vjb25kRmll
bGRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlTaXplT2ZOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpS
YW5nZTo6Y2x1bXBWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRW
YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6Y2x1bXBWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OnJhbmdlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6
aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVu
dDo6c2V0RW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgor
ICAgICAgICAoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk6CisKIDIwMTItMDgtMTAgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjUyMzAgYW5kIHIxMjUyMzguCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggNmYyNmY1NTJlYjdkODZkYWY2ZTc3ZmVlM2Y4ZmE3ODMxYTQwNjU0MC4uM2YwMDI4MDRhZGFi
Mzk1N2VhODk2ODM2ZTFhMWM0Yjg3ODYyNTE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTc0Miw2
ICs1NzQyLDE2IEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9y
LmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcCcs
CiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaCcsCisgICAg
ICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAnLAorICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3No
YWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9E
YXRlVGltZUZpZWxkRWxlbWVudHMuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRl
VGltZUZpZWxkRWxlbWVudHMuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9E
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGV0
YWlsc01hcmtlckNvbnRyb2wuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvSFRNTENvbnRl
bnRFbGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUVkaXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lRWRpdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZDFkYWNjM2RkN2MwMjEwMjE0ZWVmZWYw
MWMxODhiNTRmZWFhODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1F
X01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUVkaXRFbGVtZW50LmgiCisKKyNp
bmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50
cy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRm9ybWF0LmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMb2Nh
bGl6ZWREYXRlLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSAiTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworY2xhc3MgRGF0ZVRpbWVFZGl0QnVpbGRlciA6IHByaXZhdGUgRGF0ZVRpbWVGb3JtYXQ6OlRv
a2VuSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0QnVpbGRl
cik7CisKK3B1YmxpYzoKKyAgICBEYXRlVGltZUVkaXRCdWlsZGVyKERhdGVUaW1lRWRpdEVsZW1l
bnQmLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIGJvb2wgYnVpbGQoY29uc3QgU3RyaW5nJik7
CisgICAgYm9vbCBuZWVkU2Vjb25kRmllbGQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29s
IG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3Q7CisgICAgYm9vbCBuZWVkTWludXRlRmllbGQo
KSBjb25zdDsKKyAgICBib29sIHNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0
OworICAgIGJvb2wgc2hvdWxkTWludXRlRmllbGRSZWFkT25seSgpIGNvbnN0OworICAgIGJvb2wg
c2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0OworCisgICAgLy8gRGF0ZVRpbWVGb3Jt
YXQ6OlRva2VuSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHZpc2l0RmllbGQo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFIEZJTkFMOworCisg
ICAgRGF0ZVRpbWVFZGl0RWxlbWVudCYgbV9lZGl0RWxlbWVudDsKKyAgICBjb25zdCBTdGVwUmFu
Z2UmIG1fc3RlcFJhbmdlOworfTsKKworRGF0ZVRpbWVFZGl0QnVpbGRlcjo6RGF0ZVRpbWVFZGl0
QnVpbGRlcihEYXRlVGltZUVkaXRFbGVtZW50JiBlbGVtbnQsIGNvbnN0IFN0ZXBSYW5nZSYgc3Rl
cFJhbmdlKQorICAgIDogbV9lZGl0RWxlbWVudChlbGVtbnQpCisgICAgLCBtX3N0ZXBSYW5nZShz
dGVwUmFuZ2UpCit7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQoY29uc3Qg
U3RyaW5nJiBmb3JtYXRTdHJpbmcpCit7CisgICAgbV9lZGl0RWxlbWVudC5yZXNldExheW91dCgp
OworICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9ybWF0U3RyaW5nLCAqdGhpcyk7
Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQoKSBj
b25zdAoreworICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzdGF0
aWNfY2FzdDxpbnQ+KG1zUGVyU2Vjb25kKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJh
bmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNlY29uZCkpLmlzWmVy
bygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6Om5lZWRNaW51dGVGaWVsZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKHN0YXRp
Y19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJhbmdl
LnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlckhvdXIpKS5pc1plcm8oKTsK
K30KKworYm9vbCBEYXRlVGltZUVkaXRCdWlsZGVyOjpuZWVkU2Vjb25kRmllbGQoKSBjb25zdAor
eworICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzdGF0aWNfY2Fz
dDxpbnQ+KG1zUGVyTWludXRlKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJhbmdlLnN0
ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludCkKK3sKKyAgICBEb2N1bWVudCogY29uc3QgZG9jdW1l
bnQgPSBtX2VkaXRFbGVtZW50LmRvY3VtZW50KCk7CisKKyAgICBzd2l0Y2ggKGZpZWxkVHlwZSkg
eworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMToKKyAgICAgICAgbV9l
ZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCwgbV9lZGl0RWxlbWVudCwgMCwgMTEpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOgorICAgICAgICBtX2VkaXRFbGVtZW50
LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2Vk
aXRFbGVtZW50LCAxLCAxMikpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQo
RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQs
IDAsIDIzKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUhvdXIyNDoKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMSwgMjQpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlu
dXRlOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IGZpZWxk
ID0gRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxl
bWVudCk7CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoZmllbGQpOworICAgICAgICBp
ZiAoc2hvdWxkTWludXRlRmllbGRSZWFkT25seSgpKQorICAgICAgICAgICAgZmllbGQtPnNldFJl
YWRPbmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVQZXJpb2Q6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIHRp
bWVBTVBNTGFiZWxzKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlU2Vjb25kOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZVNlY29uZEZp
ZWxkRWxlbWVudD4gZmllbGQgPSBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50LCBtX2VkaXRFbGVtZW50KTsKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChm
aWVsZCk7CisgICAgICAgIGlmIChzaG91bGRTZWNvbmRGaWVsZFJlYWRPbmx5KCkpCisgICAgICAg
ICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKworICAgICAgICBpZiAobmVlZE1pbGxpc2Vjb25k
RmllbGQoKSkgeworICAgICAgICAgICAgdmlzaXRMaXRlcmFsKGxvY2FsaXplZERlY2ltYWxTZXBh
cmF0b3IoKSk7CisgICAgICAgICAgICB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVGcmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZDog
eworICAgICAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmllbGQg
PSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRp
dEVsZW1lbnQpOworICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKGZpZWxkKTsKKyAgICAg
ICAgaWYgKHNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpKQorICAgICAgICAgICAgZmll
bGQtPnNldFJlYWRPbmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OnNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNlY29uZCkp
LmlzWmVybygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnNob3VsZE1pbnV0ZUZp
ZWxkUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0ZXBSYW5nZS5zdGVwKCkucmVt
YWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCk7Cit9CisKK2Jvb2wg
RGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50
Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OnZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgQVNTRVJUKHRleHQubGVu
Z3RoKCkpOworICAgIG1fZWRpdEVsZW1lbnQuYXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZWRp
dEVsZW1lbnQuZG9jdW1lbnQoKSwgdGV4dCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK0RhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5FZGl0
Q29udHJvbE93bmVyKCkKK3sKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRpbWVFZGl0
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRDb250cm9s
T3duZXIpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9l
ZGl0Q29udHJvbE93bmVyKCZlZGl0Q29udHJvbE93bmVyKQorICAgICwgbV9zcGluQnV0dG9uKDAp
CisgICAgLCBtX2ZvY3VzRmllbGRJbmRleChpbnZhbGlkRmllbGRJbmRleCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZGF0ZVRpbWVFZGl0UHNldWRvSWQsICgiLXdl
YmtpdC1kYXRldGltZS1lZGl0IikpOworICAgIHNldFNoYWRvd1BzZXVkb0lkKGRhdGVUaW1lRWRp
dFBzZXVkb0lkKTsKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1l
bnQoKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9m
aWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxkSW5kZXhd
LT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAg
IG1fc3BpbkJ1dHRvbi0+cmVtb3ZlU3RlcEFjdGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjphZGRGaWVsZChQYXNzUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50
PiBmaWVsZCkKK3sKKyAgICBpZiAobV9maWVsZHMuc2l6ZSgpID09IG1fZmllbGRzLmNhcGFjaXR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZpZWxkcy5hcHBlbmQoZmllbGQuZ2V0KCkpOwor
ICAgIGFwcGVuZENoaWxkKGZpZWxkKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRFbGVt
ZW50PiBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFZGl0
Q29udHJvbE93bmVyJiBlZGl0Q29udHJvbE93bmVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5n
ZSkKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRS
ZWYobmV3IERhdGVUaW1lRWRpdEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sT3duZXIpKTsK
KyAgICBjb250YWluZXItPmxheW91dChzdGVwUmFuZ2UpOworICAgIHJldHVybiBjb250YWluZXIu
cmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVD
aGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVt
ZW50KiBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEF0KHNpemVfdCBmaWVsZEluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpID8gbV9maWVsZHNb
ZmllbGRJbmRleF0gOiAwOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3VzRmll
bGRBdChzaXplX3QgbmV3Rm9jdXNGaWVsZEluZGV4KQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJ
bmRleCA9PSBuZXdGb2N1c0ZpZWxkSW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAgIERhdGVU
aW1lRmllbGRFbGVtZW50KiBjb25zdCBuZXdGb2N1c0ZpZWxkID0gZmllbGRBdChuZXdGb2N1c0Zp
ZWxkSW5kZXgpOworICAgIGlmIChuZXdGb2N1c0ZpZWxkICYmIG5ld0ZvY3VzRmllbGQtPmlzUmVh
ZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNv
bnN0IGN1cnJlbnRGb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7CisKKyAg
ICBpZiAoY3VycmVudEZvY3VzRmllbGQpCisgICAgICAgIGN1cnJlbnRGb2N1c0ZpZWxkLT5zZXRG
b2N1cyhmYWxzZSk7CisKKyAgICBpZiAoIW5ld0ZvY3VzRmllbGQpIHsKKyAgICAgICAgbV9mb2N1
c0ZpZWxkSW5kZXggPSBpbnZhbGlkRmllbGRJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gbmV3Rm9jdXNGaWVsZEluZGV4OworICAgIG5ld0Zv
Y3VzRmllbGQtPnNldEZvY3VzKHRydWUpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAg
ICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBr
ZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9
PSAiTGVmdCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgY29uc3Qgc2l6ZV90IGZpZWxkSW5kZXggPSBwcmV2aW91c0ZpZWxkSW5kZXgoKTsK
KyAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1c0ZpZWxk
QXQoZmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5SWRl
bnRpZmllciA9PSAiUmlnaHQiKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBmaWVsZEluZGV4ID0gbmV4dEZpZWxkSW5k
ZXgoKTsKKyAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1
c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
a2V5SWRlbnRpZmllciA9PSAiVSswMDA5IikgeworICAgICAgICBjb25zdCBzaXplX3QgZmllbGRJ
bmRleCA9IGtleWJvYXJkRXZlbnQtPmdldE1vZGlmaWVyU3RhdGUoIlNoaWZ0IikgPyBwcmV2aW91
c0ZpZWxkSW5kZXgoKSA6IG5leHRGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZp
ZWxkSW5kZXgpKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OmZpZWxkVmFsdWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9lZGl0Q29udHJvbE93bmVyKQorICAg
ICAgICBtX2VkaXRDb250cm9sT3duZXItPmVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgpCit7CisgICAgaWYg
KG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFsaWRGaWVsZEluZGV4KQorICAgICAgICBmb2N1c0Zp
ZWxkQXQobmV4dEZpZWxkSW5kZXgoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBtb3VzZUV2ZW50KQoreworICAgIGlmIChpc0Rp
c2FibGVkKCkgfHwgaXNSZWFkT25seSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobW91
c2VFdmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBtb3VzZUV2
ZW50LT5idXR0b24oKSAhPSBMZWZ0QnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2Rl
KiBjb25zdCByZWxhdGVkVGFyZ2V0ID0gbW91c2VFdmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwor
ICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6
ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKG1fZmllbGRzW2ZpZWxkSW5kZXhdID09
IHJlbGF0ZWRUYXJnZXQpIHsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgICAg
ICBpZiAobV9lZGl0Q29udHJvbE93bmVyKQorICAgICAgICAgICAgICAgIG1fZWRpdENvbnRyb2xP
d25lci0+ZWRpdENvbnRyb2xNb3VzZUZvY3VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKworYm9vbCBEYXRlVGltZUVkaXRFbGVtZW50Ojppc0Rpc2FibGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJvbE93bmVyICYmIG1fZWRpdENvbnRyb2xP
d25lci0+aXNFZGl0Q29udHJvbE93bmVyRGlzYWJsZWQoKTsKK30KKworYm9vbCBEYXRlVGltZUVk
aXRFbGVtZW50Ojppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJv
bE93bmVyICYmIG1fZWRpdENvbnRyb2xPd25lci0+aXNFZGl0Q29udHJvbE93bmVyUmVhZE9ubHko
KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpsYXlvdXQoY29uc3QgU3RlcFJhbmdl
JiBzdGVwUmFuZ2UpCit7CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmll
bGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBmb2N1c0ZpZWxkQXQoaW52YWxp
ZEZpZWxkSW5kZXgpOworCisgICAgRGF0ZVRpbWVFZGl0QnVpbGRlciBidWlsZGVyKCp0aGlzLCBz
dGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmluZyBkYXRlVGltZUZvcm1hdCA9IGJ1aWxkZXIubmVl
ZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpIDogbG9jYWxpemVkU2hv
cnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlmICghYnVpbGRlci5idWlsZChkYXRlVGltZUZvcm1h
dCkgfHwgbV9maWVsZHMuaXNFbXB0eSgpKQorICAgICAgICBidWlsZGVyLmJ1aWxkKGJ1aWxkZXIu
bmVlZFNlY29uZEZpZWxkKCkgPyAiSEg6bW06c3MiIDogIkhIOm1tIik7CisKKyAgICBSZWZQdHI8
U3BpbkJ1dHRvbkVsZW1lbnQ+IHNwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KCksICp0aGlzKTsKKyAgICBtX3NwaW5CdXR0b24gPSBzcGluQnV0dG9uLmdldCgp
OworICAgIGFwcGVuZENoaWxkKHNwaW5CdXR0b24pOworCisgICAgaWYgKGZvY3VzRmllbGQpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX2ZpZWxk
cy5zaXplKCk7ICsrZmllbGRJbmRleCkgeworICAgICAgICAgICAgaWYgKGZvY3VzRmllbGQgPT0g
bV9maWVsZHNbZmllbGRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmll
bGRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3NpemVfdCBEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0RmllbGRJbmRl
eCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFsaWRGaWVs
ZEluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXgg
KyAxOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAg
ICAgaWYgKCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZpZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiBtX2ZpZWxkcy5zaXplKCk7Cit9
CisKK3NpemVfdCBEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0ZpZWxkSW5kZXgoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJbmRleCk7
CisgICAgc2l6ZV90IGZpZWxkSW5kZXggPSBtX2ZvY3VzRmllbGRJbmRleDsKKyAgICB3aGlsZSAo
ZmllbGRJbmRleCA+IDApIHsKKyAgICAgICAgLS1maWVsZEluZGV4OworICAgICAgICBpZiAoIW1f
ZmllbGRzW2ZpZWxkSW5kZXhdLT5pc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gZmll
bGRJbmRleDsKKyAgICB9CisgICAgcmV0dXJuIGludmFsaWRGaWVsZEluZGV4OworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5U3RhdGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRh
dGVVSVN0YXRlKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVzZXRMYXlvdXQo
KQoreworICAgIG1fZmllbGRzLnNocmluaygwKTsKKyAgICBtX3NwaW5CdXR0b24gPSAwOworICAg
IG1fZm9jdXNGaWVsZEluZGV4ID0gaW52YWxpZEZpZWxkSW5kZXg7CisgICAgcmVtb3ZlQ2hpbGRy
ZW4oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Zm9jdXNFdmVudCkgeworICAgICAgICBpZiAoIWlzRGlzYWJsZWQoKSAmJiAhaXNSZWFkT25seSgp
ICYmIG1fZm9jdXNGaWVsZEluZGV4ID09IGludmFsaWRGaWVsZEluZGV4KQorICAgICAgICAgICAg
Zm9jdXNGaWVsZEF0KDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkgeworICAgICAgICBmb2N1c0ZpZWxk
QXQoaW52YWxpZEZpZWxkSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPmlzS2V5
Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldmVudCkpOworCisgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9j
dXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpOworICAgIGlmICghZm9jdXNGaWVs
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9jdXNGaWVsZC0+ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgZm9yIChzaXplX3QgZmllbGRJbmRl
eCA9IDA7IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkKKyAgICAg
ICAgbV9maWVsZHNbZmllbGRJbmRleF0tPnNldFZhbHVlQXNEYXRlKGRhdGUpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
IGRhdGVGb3JSZWFkT25seUZpZWxkKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAw
OyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1f
ZmllbGRzW2ZpZWxkSW5kZXhdLT5zZXRFbXB0eVZhbHVlKGRhdGVGb3JSZWFkT25seUZpZWxkLCBE
YXRlVGltZUZpZWxkRWxlbWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKK30KKwordm9pZCBEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcERvd24oKQoreworICAgIGlmIChEYXRlVGltZUZp
ZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgp
KQorICAgICAgICBmb2N1c0ZpZWxkLT5zdGVwRG93bigpOworfQorCit2b2lkIERhdGVUaW1lRWRp
dEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVwVXAoKQoreworICAgIGlmIChEYXRlVGltZUZpZWxkRWxl
bWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpKQorICAg
ICAgICBmb2N1c0ZpZWxkLT5zdGVwVXAoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
Ojp1cGRhdGVVSVN0YXRlKCkKK3sKKyAgICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHko
KSkgeworICAgICAgICBtX3NwaW5CdXR0b24tPnJlbGVhc2VDYXB0dXJlKCk7CisgICAgICAgIGZv
Y3VzRmllbGRBdChpbnZhbGlkRmllbGRJbmRleCk7CisgICAgfQorfQorCitkb3VibGUgRGF0ZVRp
bWVFZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgZG91YmxlIHZhbHVl
ID0gMDsKKworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9m
aWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgY29uc3QgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQqIGNvbnN0IGZpZWxkID0gbV9maWVsZHNbZmllbGRJbmRleF07CisgICAgICAgIGlm
ICghZmllbGQtPmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgdmFsdWUgKz0gZmllbGQtPnZhbHVl
QXNEb3VibGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUVkaXRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYyZmFhNGE2ZTA3ZTM2N2IzYTY1ZGM1
MDllN2RhMTFhMTk3MWFjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVFZGl0RWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1l
RWRpdEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVM
RFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRl
Q29tcG9uZW50czsKK2NsYXNzIERhdGVUaW1lRWRpdExheW91dGVyOworY2xhc3MgS2V5Ym9hcmRF
dmVudDsKK2NsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBTdGVwUmFuZ2U7CisKKy8vIERhdGVUaW1l
RWRpdEVsZW1lbnQgY2xhc3MgY29udGFpbnMgbnVtYmVyaWMgZmllbGQgYW5kIHN5bWJvbGMgZmll
bGQgZm9yCisvLyByZXByZXNlbnRpbmcgZGF0ZSBhbmQgdGltZSwgc3VjaCBhcworLy8gIC0gWWVh
ciwgTW9udGgsIERheSBPZiBNb250aAorLy8gIC0gSG91ciwgTWludXRlLCBTZWNvbmQsIE1pbGxp
c2Vjb25kLCBBTS9QTQorY2xhc3MgRGF0ZVRpbWVFZGl0RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2
RWxlbWVudCwgcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciwg
cHJpdmF0ZSBTcGluQnV0dG9uRWxlbWVudDo6U3RlcEFjdGlvbkhhbmRsZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERhdGVUaW1lRWRpdEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgLy8g
RWRpdENvbnRyb2xPd25lciBpbXBsZW1lbnRlciBtdXN0IGNhbGwgcmVtb3ZlRWRpdENvbnRyb2xP
d25lciB3aGVuCisgICAgLy8gaXQgZG9lc24ndCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1
Y3Rpb24uCisgICAgY2xhc3MgRWRpdENvbnRyb2xPd25lciB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIH5FZGl0Q29udHJvbE93bmVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0
Q29udHJvbE1vdXNlRm9jdXMoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29udHJv
bFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzRWRpdENvbnRyb2xP
d25lckRpc2FibGVkKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29u
dHJvbE93bmVyUmVhZE9ubHkoKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEVkaXRDb250cm9s
T3duZXImLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIHZpcnR1YWwgfkRhdGVUaW1lRWRpdEVs
ZW1lbnQoKTsKKyAgICB2b2lkIGFkZEZpZWxkKFBhc3NSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1l
bnQ+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJS
SURFOworICAgIHZvaWQgZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGxheW91dChj
b25zdCBTdGVwUmFuZ2UmKTsKKyAgICB2b2lkIHJlYWRPbmx5U3RhdGVDaGFuZ2VkKCk7CisgICAg
dm9pZCByZW1vdmVFZGl0Q29udHJvbE93bmVyKCkgeyBtX2VkaXRDb250cm9sT3duZXIgPSAwOyB9
CisgICAgdm9pZCByZXNldExheW91dCgpOworICAgIHZvaWQgc2V0RW1wdHlWYWx1ZShjb25zdCBE
YXRlQ29tcG9uZW50cyYgIGRhdGVGb3JSZWFkT25seUZpZWxkKTsKKyAgICB2b2lkIHNldFZhbHVl
QXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJik7CisgICAgZG91YmxlIHZhbHVlQXNEb3VibGUo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGludmFsaWRGaWVs
ZEluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSk7CisKKyAgICAvLyBEYXRldGltZSBjYW4g
YmUgcmVwcmVzZW50IGF0IG1vc3QgZml2ZSBmaWVsZHMsIHN1Y2ggYXMKKyAgICAvLyAgMS4geWVh
cgorICAgIC8vICAyLiBtb250aAorICAgIC8vICAzLiBkYXktb2YtbW9udGgKKyAgICAvLyAgNC4g
aG91cgorICAgIC8vICA1LiBtaW51dGUKKyAgICAvLyAgNi4gc2Vjb25kCisgICAgLy8gIDcuIG1p
bGxpc2Vjb25kCisgICAgLy8gIDguIEFNL1BNCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVt
TnVtYmVyT2ZGaWVsZHMgPSA4OworCisgICAgRGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCos
IEVkaXRDb250cm9sT3duZXImKTsKKworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBmaWVsZEF0
KHNpemVfdCkgY29uc3Q7CisgICAgdm9pZCBmb2N1c0ZpZWxkQXQoc2l6ZV90KTsKKyAgICB2b2lk
IGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZvaWQgaGFuZGxlTW91
c2VFdmVudChNb3VzZUV2ZW50Kik7CisgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7CisgICAgc2l6ZV90IG5leHRGaWVsZEluZGV4KCkgY29u
c3Q7CisgICAgc2l6ZV90IHByZXZpb3VzRmllbGRJbmRleCgpIGNvbnN0OworICAgIHZvaWQgdXBk
YXRlVUlTdGF0ZSgpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRI
YW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZmllbGRWYWx1ZUNoYW5nZWQoKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpIE9WRVJS
SURFIEZJTkFMOworCisgICAgLy8gU3BpbkJ1dHRvbkVsZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVy
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc3BpbkJ1dHRvblN0ZXBEb3duKCkgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwVXAoKSBPVkVSUklERSBG
SU5BTDsKKworICAgIFZlY3RvcjxEYXRlVGltZUZpZWxkRWxlbWVudCosIG1heGltdW1OdW1iZXJP
ZkZpZWxkcz4gbV9maWVsZHM7CisgICAgRWRpdENvbnRyb2xPd25lciogbV9lZGl0Q29udHJvbE93
bmVyOworICAgIFNwaW5CdXR0b25FbGVtZW50KiBtX3NwaW5CdXR0b247CisgICAgc2l6ZV90IG1f
Zm9jdXNGaWVsZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVG
aWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMmU0OTAwY2M3MWQwYzkzMTkzMjk5OTBkNjZmZDNm
Y2U4YzNhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxU
SVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1
ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitEYXRlVGltZUZpZWxkRWxlbWVudDo6
RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcigpCit7Cit9CisKK0RhdGVUaW1l
RmllbGRFbGVtZW50OjpEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZp
ZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikKKyAgICA6IEhUTUxFbGVtZW50KHNw
YW5UYWcsIGRvY3VtZW50KQorICAgICwgbV9maWVsZEV2ZW50SGFuZGxlcigmZmllbGRFdmVudEhh
bmRsZXIpCit7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkp
IHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldmVudCk7CisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9h
cmRFdmVudCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIo
a2V5Ym9hcmRFdmVudCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6
ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQp
Cit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93
bkV2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZp
ZXIgPSBrZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICBpZiAoa2V5SWRlbnRp
ZmllciA9PSAiRG93biIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgc3RlcERvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgc3RlcFVwKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVSswMDA4IikgeworICAgICAgICBrZXli
b2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBzZXRFbXB0eVZhbHVlKERh
dGVDb21wb25lbnRzKCksIERpc3BhdGNoRXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50Ojpmb2N1c09uTmV4dEZpZWxkKCkKK3sKKyAg
ICBpZiAobV9maWVsZEV2ZW50SGFuZGxlcikKKyAgICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+
Zm9jdXNPbk5leHRGaWVsZCgpOworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50Ojppbml0
aWFsaXplKGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQpCit7CisgICAgc2V0U2hh
ZG93UHNldWRvSWQoc2hhZG93UHNldWRvSWQpOworICAgIGFwcGVuZENoaWxkKFRleHQ6OmNyZWF0
ZShkb2N1bWVudCgpLCB2aXNpYmxlVmFsdWUoKSkpOworfQorCitib29sIERhdGVUaW1lRmllbGRF
bGVtZW50Ojppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0
ZShyZWFkb25seUF0dHIpOworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50OjpzZXRSZWFk
T25seSgpCit7CisgICAgLy8gU2V0IEhUTUwgYXR0cmlidXRlIHJlYWRvbmx5IHRvIGNoYW5nZSBh
cHBlcmFuY2UuCisgICAgc2V0Qm9vbGVhbkF0dHJpYnV0ZShyZWFkb25seUF0dHIsIHRydWUpOwor
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVu
dDo6dXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAg
ICBUZXh0KiBjb25zdCB0ZXh0Tm9kZSA9IHRvVGV4dChmaXJzdENoaWxkKCkpOworICAgIGNvbnN0
IFN0cmluZyBuZXdWaXNpYmxlVmFsdWUgPSB2aXNpYmxlVmFsdWUoKTsKKyAgICBBU1NFUlQobmV3
VmlzaWJsZVZhbHVlLmxlbmd0aCgpID4gMCk7CisKKyAgICBpZiAodGV4dE5vZGUtPndob2xlVGV4
dCgpID09IG5ld1Zpc2libGVWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dE5vZGUt
PnJlcGxhY2VXaG9sZVRleHQobmV3VmlzaWJsZVZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
KworICAgIGlmIChldmVudEJlaGF2aW9yID09IERpc3BhdGNoRXZlbnQgJiYgbV9maWVsZEV2ZW50
SGFuZGxlcikKKyAgICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+ZmllbGRWYWx1ZUNoYW5nZWQo
KTsKK30KKworZG91YmxlIERhdGVUaW1lRmllbGRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IHZhbHVlQXNJbnRlZ2VyKCkgKiB1bml0SW5N
aWxsaXNlY29uZCgpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2NmI2
MWZmYWIwOTdhMjAyMjdiZmJkZDg2M2M5NDg4MTU1Njk3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lRmllbGRFbGVtZW50
X2gKKyNkZWZpbmUgRGF0ZVRpbWVGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVDb21wb25lbnRzOworCisvLyBEYXRl
VGltZUZpZWxkRWxlbWVudCBpcyBiYXNlIGNsYXNzIG9mIGRhdGUgdGltZSBmaWVsZCBlbGVtZW50
LgorY2xhc3MgRGF0ZVRpbWVGaWVsZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lRmllbGRFbGVtZW50KTsKKworcHVibGljOgor
ICAgIGVudW0gRXZlbnRCZWhhdmlvciB7CisgICAgICAgIERpc3BhdGNoTm9FdmVudCwKKyAgICAg
ICAgRGlzcGF0Y2hFdmVudCwKKyAgICB9OworCisgICAgLy8gRmllbGRFdmVudEhhbmRsZXIgaW1w
bGVtZW50ZXIgbXVzdCBjYWxsIHJlbW92ZUV2ZW50SGFuZGxlciB3aGVuCisgICAgLy8gaXQgZG9l
c24ndCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgRmllbGRF
dmVudEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RmllbGRFdmVudEhh
bmRsZXIoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2VkKCkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpID0gMDsKKyAgICB9OworCisg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdCA9IDA7CisgICAgYm9vbCBpc1JlYWRPbmx5
KCkgY29uc3Q7CisgICAgdm9pZCByZW1vdmVFdmVudEhhbmRsZXIoKSB7IG1fZmllbGRFdmVudEhh
bmRsZXIgPSAwOyB9CisgICAgdm9pZCBzZXRSZWFkT25seSgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlRm9yUmVhZE9ubHlGaWVsZCwg
RXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzdGVwVXAoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7Cisg
ICAgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFz
SW50ZWdlcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBj
b25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVu
dCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisgICAgdm9pZCBmb2N1c09uTmV4dEZpZWxkKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopID0gMDsK
KyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdmlydHVhbCBk
b3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCA9IDA7CisgICAgdm9pZCB1cGRhdGVWaXNp
YmxlVmFsdWUoRXZlbnRCZWhhdmlvcik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkZWZhdWx0S2V5
Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOworCisgICAgRmllbGRFdmVudEhhbmRs
ZXIqIG1fZmllbGRFdmVudEhhbmRsZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUZpZWxkRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0
ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmY3ZmE1YzdkYTAyODc3ZGU0Y2Qx
NmEzOTlhZTk4NzkwYjU5MzJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQ
RV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudHMu
aCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSA8d3RmL0RhdGVNYXRo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpE
YXRlVGltZUFNUE1GaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFu
ZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbXBtTGFiZWxz
KQorICAgIDogRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVu
dEhhbmRsZXIsIGFtcG1MYWJlbHMpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVBTVBNRmll
bGRFbGVtZW50PiBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9j
dW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFtcG1MYWJlbHMpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGFtcG1Qc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtYW1wbS1maWVsZCIp
KTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVm
KG5ldyBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
LCBhbXBtTGFiZWxzKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoYW1wbVBzdWVkb0lkKTsKKyAg
ICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lQU1QTUZpZWxkRWxl
bWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAg
c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkgPj0gMTIgPyAxIDogMCk7Cit9CisKK2RvdWJs
ZSBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbXNQZXJIb3VyICogMTI7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhh
bmRsZXIsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKKyAgICA6IERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIG1pbmltdW0sIG1heGltdW0p
CisgICAgLCBtX2FsaWdubWVudChtYXhpbXVtICsgbWF4aW11bSAlIDIpCit7CisgICAgQVNTRVJU
KCghbWluaW11bSAmJiAobWF4aW11bSA9PSAxMSB8fCBtYXhpbXVtID09IDIzKSkgfHwgKG1pbmlt
dW0gPT0gMSAmJiAobWF4aW11bSA9PSAxMiB8fCBtYXhpbXVtID09IDI0KSkpOworfQorCitQYXNz
UmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxlbWVudD4gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVu
dEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgaG91clBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRp
dC1ob3VyLWZpZWxkIikpOworICAgIFJlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IGZp
ZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChkb2N1bWVudCwgZmll
bGRFdmVudEhhbmRsZXIsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6
ZShob3VyUHN1ZWRvSWQpOworICAgIHJldHVybiBmaWVsZC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9u
ZW50cyYgZGF0ZSkKK3sKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFs
dWVBc0hvdXIyMywgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIGNvbnN0IGlu
dCB2YWx1ZSA9IFJhbmdlKDAsIDIzKS5jbGFtcFZhbHVlKHZhbHVlQXNIb3VyMjMpICUgbV9hbGln
bm1lbnQ7CisgICAgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdl
cihyYW5nZSgpLm1pbmltdW0gJiYgIXZhbHVlID8gbV9hbGlnbm1lbnQgOiB2YWx1ZSwgZXZlbnRC
ZWhhdmlvcik7Cit9CisKK2RvdWJsZSBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnVuaXRJbk1p
bGxpc2Vjb25kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJIb3VyOworfQorCitpbnQgRGF0
ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc1ZhbHVlKCkgPyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRl
Z2VyKCkgJSBtX2FsaWdubWVudCA6IC0xOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK0RhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlz
ZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYg
ZmllbGRFdmVudEhhbmRsZXIpCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9j
dW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCAwLCA5OTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0
ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxk
RXZlbnRIYW5kbGVyKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBt
aWxsaXNlY29uZFBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1m
aWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmll
bGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudChkb2N1bWVu
dCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZShtaWxsaXNlY29u
ZFBzdWVkb0lkKTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVU
aW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21w
b25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUubWlsbGlzZWNvbmQo
KSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5N
aWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OkRhdGVUaW1l
TWludXRlRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXIm
IGZpZWxkRXZlbnRIYW5kbGVyKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRv
Y3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgMCwgNTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ+IERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRs
ZXIpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG1pbnV0ZVBzdWVk
b0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGQiKSk7CisgICAgUmVmUHRy
PERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGlt
ZU1pbnV0ZUZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAgICBm
aWVsZC0+aW5pdGlhbGl6ZShtaW51dGVQc3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVh
c2UoKTsKK30KKwordm9pZCBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0Rh
dGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIo
ZGF0ZS5taW51dGUoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6
dW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdAoreworICAgIHJldHVybiBtc1Blck1pbnV0ZTsKK30K
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEYXRlVGltZVNlY29uZEZpZWxk
RWxlbWVudDo6RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBG
aWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCisgICAgOiBEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCAwLCA1OSkKK3sKK30K
KworUGFzc1JlZlB0cjxEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudD4gRGF0ZVRpbWVTZWNvbmRG
aWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVy
JiBmaWVsZEV2ZW50SGFuZGxlcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0
cmluZywgc2Vjb25kUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVs
ZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRv
cHRSZWYobmV3IERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50
SGFuZGxlcikpOworICAgIGZpZWxkLT5pbml0aWFsaXplKHNlY29uZFBzdWVkb0lkKTsKKyAgICBy
ZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lU2Vjb25kRmllbGRFbGVt
ZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAgICBz
ZXRWYWx1ZUFzSW50ZWdlcihkYXRlLnNlY29uZCgpKTsKK30KKworZG91YmxlIERhdGVUaW1lU2Vj
b25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1zUGVyU2Vjb25kOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41N2JjMWVmYTU1MmUzNDgwNGQ2M2MzNTQwZGU2NjJhMGVmMDQ3YjUyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVs
ZW1lbnRzLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERh
dGVUaW1lRmllbGRFbGVtZW50c19oCisjZGVmaW5lIERhdGVUaW1lRmllbGRFbGVtZW50c19oCisK
KyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJEYXRlVGltZVN5bWJvbGlj
RmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0ZVRpbWVB
TVBNRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
KTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBG
aWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKKyAgICAvLyBEYXRl
VGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNE
YXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBk
b3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307CisKKwor
Ly8gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IGlzIHVzZWQgZm9yIGhvdXIgZmllbGQgb2YgZGF0
ZSB0aW1lIGZvcm1hdAorLy8gc3VwcG9ydGluZyBmb2xsb3dpbmcgcGF0dGVybnM6CisvLyAgLSAw
IHRvIDExCisvLyAgLSAxIHRvIDEyCisvLyAgLSAwIHRvIDIzCisvLyAgLSAxIHRvIDI0CitjbGFz
cyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUhvdXJGaWVsZEVsZW1l
bnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGludCBtaW5pbXVt
LCBpbnQgbWF4aW11bSk7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50
KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0p
OworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwg
dm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3Ig
PSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVu
aXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQg
dmFsdWVBc0ludGVnZXIoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IGludCBt
X2FsaWdubWVudDsKK307CisKK2NsYXNzIERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQg
OiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGNyZWF0
ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRp
bWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7
CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCBkb3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBG
SU5BTDsKK307CisKK2NsYXNzIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IDogcHVibGljIERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZl
bnRIYW5kbGVyJik7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQo
RG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBE
YXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJ
bk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCitjbGFzcyBEYXRlVGlt
ZVNlY29uZEZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KTsK
KworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lU2Vjb25kRmllbGRFbGVt
ZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCitwcml2YXRlOgor
ICAgIERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRs
ZXImKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0IE9WRVJS
SURFIEZJTkFMOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUyMmUxNTc5YmY1MzViNTIwMTUyZjBk
OTNhYzRmODRkOTIzNjg1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
ICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVU
X1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTG9j
YWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBET01UaW1lU3RhbXAgdHlwZUFoZWFk
VGltZW91dCA9IDEwMDA7CisKK3N0YXRpYyBzaXplX3QgZGlzcGxheVNpemVPZk51bWJlcihpbnQg
dmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlID49IDApOworCisgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIDE7CisKKyAgICBpbnQgbnVtYmVyT2ZEaWdpdHMgPSAwOworICAgIHdoaWxl
ICh2YWx1ZSkgeworICAgICAgICB2YWx1ZSAvPSAxMDsKKyAgICAgICAgKytudW1iZXJPZkRpZ2l0
czsKKyAgICB9CisKKyAgICByZXR1cm4gbnVtYmVyT2ZEaWdpdHM7Cit9CisKK0RhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkK
KyAgICA6IG1heGltdW0obWF4aW11bSkKKyAgICAsIG1pbmltdW0obWluaW11bSkKK3sKKyAgICBB
U1NFUlQobWluaW11bSA8PSBtYXhpbXVtKTsKK30KKworaW50IERhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6UmFuZ2U6OmNsYW1wVmFsdWUoaW50IHZhbHVlKSBjb25zdAoreworICAgIHJldHVy
biBzdGQ6Om1pbihzdGQ6Om1heCh2YWx1ZSwgbWluaW11bSksIG1heGltdW0pOworfQorCitEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgaW50
IG1pbmltdW0sIGludCBtYXhpbXVtKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1l
bnQsIGZpZWxkRXZlbnRIYW5kbGVyKQorICAgICwgbV9sYXN0RGlnaXRDaGFyVGltZSgwKQorICAg
ICwgbV9yYW5nZShtaW5pbXVtLCBtYXhpbXVtKQorICAgICwgbV92YWx1ZSgwKQorICAgICwgbV9o
YXNWYWx1ZShmYWxzZSkKK3sKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAg
ICBpZiAoaXNSZWFkT25seSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoa2V5Ym9hcmRF
dmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBVQ2hhciBjaGFyQ29kZSA9IHN0YXRpY19jYXN0PFVDaGFyPihrZXlib2FyZEV2
ZW50LT5jaGFyQ29kZSgpKTsKKyAgICBpZiAoY2hhckNvZGUgPCAnICcpCisgICAgICAgIHJldHVy
bjsKKworICAgIERPTVRpbWVTdGFtcCBkZWx0YSA9IGtleWJvYXJkRXZlbnQtPnRpbWVTdGFtcCgp
IC0gbV9sYXN0RGlnaXRDaGFyVGltZTsKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKKwor
ICAgIFN0cmluZyBudW1iZXIgPSBjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihTdHJpbmcoJmNo
YXJDb2RlLCAxKSk7CisgICAgY29uc3QgaW50IGRpZ2l0ID0gbnVtYmVyWzBdIC0gJzAnOworICAg
IGlmIChkaWdpdCA8IDAgfHwgZGlnaXQgPiA5KQorICAgICAgICByZXR1cm47CisKKyAgICBrZXli
b2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1f
aGFzVmFsdWUgJiYgZGVsdGEgPCB0eXBlQWhlYWRUaW1lb3V0ID8gbV92YWx1ZSAqIDEwICsgZGln
aXQgOiBkaWdpdCwgRGlzcGF0Y2hFdmVudCk7CisgICAgaWYgKG1fdmFsdWUgKiAxMCA+IG1fcmFu
Z2UubWF4aW11bSkKKyAgICAgICAgZm9jdXNPbk5leHRGaWVsZCgpOworICAgIGVsc2UKKyAgICAg
ICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IGtleWJvYXJkRXZlbnQtPnRpbWVTdGFtcCgpOworfQor
Citib29sIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6aGFzVmFsdWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2hhc1ZhbHVlOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudDo6c2V0RW1wdHlWYWx1ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUZvclJlYWRPbmx5
RmllbGQsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX2xhc3REaWdpdENo
YXJUaW1lID0gMDsKKworICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgc2V0VmFsdWVB
c0RhdGUoZGF0ZUZvclJlYWRPbmx5RmllbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9oYXNWYWx1ZSA9IGZhbHNlOworICAgIG1fdmFsdWUgPSAwOworICAgIHVwZGF0ZVZpc2li
bGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKGludCB2YWx1ZSwgRXZlbnRCZWhhdmlvciBldmVudEJl
aGF2aW9yKQoreworICAgIG1fdmFsdWUgPSBjbGFtcFZhbHVlKHZhbHVlKTsKKyAgICBtX2hhc1Zh
bHVlID0gdHJ1ZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7CisgICAg
bV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50OjpzdGVwRG93bigpCit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIHNldFZh
bHVlQXNJbnRlZ2VyKG1fdmFsdWUgPT0gbV9yYW5nZS5taW5pbXVtID8gbV9yYW5nZS5tYXhpbXVt
IDogY2xhbXBWYWx1ZShtX3ZhbHVlIC0gMSksIERpc3BhdGNoRXZlbnQpOworICAgIGVsc2UKKyAg
ICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9yYW5nZS5tYXhpbXVtLCBEaXNwYXRjaEV2ZW50KTsK
K30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCgpCit7CisgICAg
aWYgKG1faGFzVmFsdWUpCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fdmFsdWUgPT0gbV9y
YW5nZS5tYXhpbXVtID8gbV9yYW5nZS5taW5pbXVtIDogY2xhbXBWYWx1ZShtX3ZhbHVlICsgMSks
IERpc3BhdGNoRXZlbnQpOworICAgIGVsc2UKKyAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9y
YW5nZS5taW5pbXVtLCBEaXNwYXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25zdAoreworICAgIGlmICghbV9oYXNWYWx1ZSkKKyAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBpZiAobV9yYW5nZS5tYXhpbXVtID4g
OTk5KQorICAgICAgICByZXR1cm4gY29udmVydFRvTG9jYWxpemVkTnVtYmVyKFN0cmluZzo6bnVt
YmVyKG1fdmFsdWUpKTsKKworICAgIGlmIChtX3JhbmdlLm1heGltdW0gPiA5OSkKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihTdHJpbmc6OmZvcm1hdCgiJTAzZCIsIG1f
dmFsdWUpKTsKKworICAgIHJldHVybiBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoU3RyaW5nOjpm
b3JtYXQoIiUwMmQiLCBtX3ZhbHVlKSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNWYWx1ZSA/
IG1fdmFsdWUgOiAtMTsKK30KKworU3RyaW5nIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6
dmlzaWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAobV9oYXNWYWx1ZSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChpbnQg
bnVtYmVyT2ZEYXNocyA9IHN0ZDo6bWF4KGRpc3BsYXlTaXplT2ZOdW1iZXIobV9yYW5nZS5tYXhp
bXVtKSwgZGlzcGxheVNpemVPZk51bWJlcihtX3JhbmdlLm1pbmltdW0pKTsgbnVtYmVyT2ZEYXNo
czsgLS1udW1iZXJPZkRhc2hzKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViZDY4ODk3NTM2YWY1OWRkYTNkMjM5
ZTNkMmI0MGUzN2RiZDlmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDgyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAq
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnRfaAor
I2RlZmluZSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVU
X1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1l
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQgcmVwcmVzZW50cyBudW1lcmljIGZpZWxkIG9mIGRhdGUgdGltZSBmb3JtYXQsCisvLyBz
dWNoIGFzOgorLy8gIC0gaG91cgorLy8gIC0gbWludXRlCisvLyAgLSBtaWxsaXNlY29uZAorLy8g
IC0gc2Vjb25kCisvLyAgLSB5ZWFyCitjbGFzcyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQg
OiBwdWJsaWMgRGF0ZVRpbWVGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgUmFu
Z2UgeworICAgICAgICBSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworICAgICAgICBp
bnQgY2xhbXBWYWx1ZShpbnQpIGNvbnN0OworCisgICAgICAgIGludCBtYXhpbXVtOworICAgICAg
ICBpbnQgbWluaW11bTsKKyAgICB9OworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwg
aW50IG1heGltdW0pOworCisgICAgaW50IGNsYW1wVmFsdWUoaW50IHZhbHVlKSBjb25zdCB7IHJl
dHVybiBtX3JhbmdlLmNsYW1wVmFsdWUodmFsdWUpOyB9CisgICAgY29uc3QgUmFuZ2UmIHJhbmdl
KCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQorCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1l
bnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVo
YXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZhbHVl
QXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZh
bHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKK3ByaXZhdGU6CisgICAgLy8gRGF0ZVRpbWVG
aWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RW1wdHlWYWx1ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUZvclJlYWRPbmx5RmllbGQsIEV2
ZW50QmVoYXZpb3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigp
IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBPVkVSUklERSBGSU5B
TDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworCisg
ICAgRE9NVGltZVN0YW1wIG1fbGFzdERpZ2l0Q2hhclRpbWU7CisgICAgY29uc3QgUmFuZ2UgbV9y
YW5nZTsKKyAgICBpbnQgbV92YWx1ZTsKKyAgICBib29sIG1faGFzVmFsdWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA4ZWI1MjIyOWNhYmI5OTllOTY5NDljYzZmZDU3NWNkYWYyNDg0NmYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50LmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExF
X0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgiCisKKyNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6
OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2
ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzeW1i
b2xzKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5k
bGVyKQorICAgICwgbV9zeW1ib2xzKHN5bWJvbHMpCisgICAgLCBtX3NlbGVjdGVkSW5kZXgoLTEp
Cit7CisgICAgQVNTRVJUKCFzeW1ib2xzLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBr
ZXlib2FyZEV2ZW50KQoreworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBlKCkgIT0gZXZlbnRO
YW1lcygpLmtleXByZXNzRXZlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFVDaGFy
IGNoYXJDb2RlID0gV1RGOjpVbmljb2RlOjp0b0xvd2VyKGtleWJvYXJkRXZlbnQtPmNoYXJDb2Rl
KCkpOworICAgIGlmIChjaGFyQ29kZSA8ICcgJykKKyAgICAgICAgcmV0dXJuOworCisgICAga2V5
Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBtX3N5bWJvbHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGlmICgh
bV9zeW1ib2xzW2luZGV4XS5pc0VtcHR5KCkgJiYgV1RGOjpVbmljb2RlOjp0b0xvd2VyKG1fc3lt
Ym9sc1tpbmRleF1bMF0pID09IGNoYXJDb2RlKSB7CisgICAgICAgICAgICBzZXRWYWx1ZUFzSW50
ZWdlcihpbmRleCwgRGlzcGF0Y2hFdmVudCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Jvb2wgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6aGFzVmFs
dWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW5kZXggPj0gMDsKK30KKwordm9p
ZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVD
b21wb25lbnRzJiwgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fc2VsZWN0
ZWRJbmRleCA9IGludmFsaWRJbmRleDsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhh
dmlvcik7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVB
c0ludGVnZXIoaW50IG5ld1NlbGVjdGVkSW5kZXgsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlv
cikKK3sKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBzdGQ6Om1heCgwLCBzdGQ6Om1pbihuZXdTZWxl
Y3RlZEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KG1fc3ltYm9scy5zaXplKCkgLSAxKSkpOworICAg
IHVwZGF0ZVZpc2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50OjpzdGVwRG93bigpCit7CisgICAgY29uc3QgaW50IHNpemUgPSBt
X3N5bWJvbHMuc2l6ZSgpOworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9z
ZWxlY3RlZEluZGV4ICsgc2l6ZSAtIDEpICUgc2l6ZSA6IHNpemUgLSAxOworICAgIHVwZGF0ZVZp
c2libGVWYWx1ZShEaXNwYXRjaEV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpzdGVwVXAoKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkg
PyAobV9zZWxlY3RlZEluZGV4ICsgMSkgJSBtX3N5bWJvbHMuc2l6ZSgpIDogMDsKKyAgICB1cGRh
dGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkg
PyBtX3N5bWJvbHNbbV9zZWxlY3RlZEluZGV4XSA6IGVtcHR5U3RyaW5nKCk7Cit9CisKK2ludCBE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2VsZWN0ZWRJbmRleDsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9saWNG
aWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVl
KCkgPyBtX3N5bWJvbHNbbV9zZWxlY3RlZEluZGV4XSA6ICItLSI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMyOWRk
MTE0MTVkNmJhYjJlMDdkMDNmMDc2NTFhYzM1OTIyYWUwZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaApA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudF9o
CisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRl
ICJEYXRlVGltZUZpZWxkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgcmVwcmVzZW50cyBub24tbnVtZXJpYyBmaWVsZCBv
ZiBkYXRhIHRpbWUKKy8vIGZvcm1hdCwgc3VjaCBhczogQU0vUE0sIGFuZCBtb250aC4KK2NsYXNz
IERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVGaWVsZEVsZW1l
bnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQpOworCitwcm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudChEb2N1
bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0
Y2hOb0V2ZW50KSBPVkVSUklERSBGSU5BTDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qg
aW50IGludmFsaWRJbmRleCA9IC0xOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVu
Y3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdCBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW1wdHlWYWx1ZShjb25zdCBEYXRl
Q29tcG9uZW50cyYgZGF0ZUZvclJlYWRPbmx5RmllbGQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRj
aE5vRXZlbnQpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpIE9W
RVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZp
cnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiBtX3N5bWJvbHM7CisgICAgaW50IG1fc2VsZWN0ZWRJbmRleDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157680</attachid>
            <date>2012-08-10 02:06:46 -0700</date>
            <delta_ts>2012-08-10 02:23:23 -0700</delta_ts>
            <desc>Patch 12</desc>
            <filename>bug-92960-20120810180617.patch</filename>
            <type>text/plain</type>
            <size>66786</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUyNjI2OTkyNjFkODY3
ODNjNTNjMWE4MTNmYjNiNTViMjkwOTM3OS4uYTU3M2ZhMWY2NGUxZTUwMGQ1YTM2ZThmMTA2YTE0
MWE3MDgzNTYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAxMi0wOC0wOSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5w
dXQgVUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJ
IGZvciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVy
IG9mIG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1l
RmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRl
VGltZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25k
CisgICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9y
IG1pbnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNl
IGNsYXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25k
RmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkK
KyAgICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERT
IGJ1aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3Qg
Y2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGlu
Y2x1ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwv
c2hhZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwg
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFk
b3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwK
KyAgICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lRWRpdEJ1aWxkZXI6Om5lZWRTZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZUVkaXRCdWlsZGVyOjpzaG91bGRNaWxsaXNlY29uZEZpZWxkUmVhZE9ubHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkTWludXRlRmllbGRSZWFkT25s
eSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRCdWlsZGVyOjpzaG91bGRTZWNvbmRG
aWVsZFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1aWxkZXI6OnZp
c2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRM
aXRlcmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250
cm9sT3duZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVFZGl0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIncyBkaXNh
YmxlZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxl
bWVudDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpm
b2N1c0ZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
OjpmaWVsZFZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojpmb2N1c09uTmV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0
RWxlbWVudDo6aXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0Rmll
bGRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91
c0ZpZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVh
ZE9ubHlTdGF0ZUNoYW5nZWQpOiBDYWxsZWQgd2hlbiBvd25lcidzIHJlYWRPbmx5IHN0YXRlIGlz
IGNoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZh
bHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEVt
cHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1
dHRvblN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNw
aW5CdXR0b25TdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6
dXBkYXRlVUlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojp2
YWx1ZUFzRG91YmxlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50
Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVFZGl0RWxlbWVudCk6CisgICAgICAgIChFZGl0
Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnJl
bW92ZUVkaXRDb250cm9sT3duZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxl
bWVudDo6RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRLZXlib2Fy
ZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
Zm9jdXNPbk5leHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0
UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0
ZVZpc2libGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
dmFsdWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1l
bnQuaDogQWRkZWQuCisgICAgICAgIChEYXRlVGltZUZpZWxkRWxlbWVudCk6CisgICAgICAgIChG
aWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZp
ZWxkRWxlbWVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZp
ZWxkRWxlbWVudDo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lSG91ckZpZWxkRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVl
QXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0
VmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVt
ZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJG
aWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
TWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6
OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRG
aWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6dW5pdEluTWls
bGlzZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6
OkRhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
U2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVT
ZWNvbmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lU2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmg6IEFkZGVkLgorICAgICAgICAoRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dCk6CisgICAgICAgIChEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAg
KERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lU2Vjb25kRmll
bGRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlTaXplT2ZOdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpS
YW5nZTo6Y2x1bXBWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRW
YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6Y2x1bXBWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OnJhbmdlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6
aGFzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVu
dDo6c2V0RW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgor
ICAgICAgICAoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk6CisKIDIwMTItMDgtMTAgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjUyMzAgYW5kIHIxMjUyMzguCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggNmYyNmY1NTJlYjdkODZkYWY2ZTc3ZmVlM2Y4ZmE3ODMxYTQwNjU0MC4uM2YwMDI4MDRhZGFi
Mzk1N2VhODk2ODM2ZTFhMWM0Yjg3ODYyNTE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTc0Miw2
ICs1NzQyLDE2IEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9y
LmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcCcs
CiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaCcsCisgICAg
ICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAnLAorICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3No
YWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9E
YXRlVGltZUZpZWxkRWxlbWVudHMuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRl
VGltZUZpZWxkRWxlbWVudHMuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9E
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGV0
YWlsc01hcmtlckNvbnRyb2wuaCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvSFRNTENvbnRl
bnRFbGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUVkaXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lRWRpdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZDFkYWNjM2RkN2MwMjEwMjE0ZWVmZWYw
MWMxODhiNTRmZWFhODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1F
X01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUVkaXRFbGVtZW50LmgiCisKKyNp
bmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50
cy5oIgorI2luY2x1ZGUgIkRhdGVUaW1lRm9ybWF0LmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1i
b2xpY0ZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMb2Nh
bGl6ZWREYXRlLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSAiTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlN0ZXBSYW5nZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworY2xhc3MgRGF0ZVRpbWVFZGl0QnVpbGRlciA6IHByaXZhdGUgRGF0ZVRpbWVGb3JtYXQ6OlRv
a2VuSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0QnVpbGRl
cik7CisKK3B1YmxpYzoKKyAgICBEYXRlVGltZUVkaXRCdWlsZGVyKERhdGVUaW1lRWRpdEVsZW1l
bnQmLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIGJvb2wgYnVpbGQoY29uc3QgU3RyaW5nJik7
CisgICAgYm9vbCBuZWVkU2Vjb25kRmllbGQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29s
IG5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3Q7CisgICAgYm9vbCBuZWVkTWludXRlRmllbGQo
KSBjb25zdDsKKyAgICBib29sIHNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0
OworICAgIGJvb2wgc2hvdWxkTWludXRlRmllbGRSZWFkT25seSgpIGNvbnN0OworICAgIGJvb2wg
c2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0OworCisgICAgLy8gRGF0ZVRpbWVGb3Jt
YXQ6OlRva2VuSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHZpc2l0RmllbGQo
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFIEZJTkFMOworCisg
ICAgRGF0ZVRpbWVFZGl0RWxlbWVudCYgbV9lZGl0RWxlbWVudDsKKyAgICBjb25zdCBTdGVwUmFu
Z2UmIG1fc3RlcFJhbmdlOworfTsKKworRGF0ZVRpbWVFZGl0QnVpbGRlcjo6RGF0ZVRpbWVFZGl0
QnVpbGRlcihEYXRlVGltZUVkaXRFbGVtZW50JiBlbGVtbnQsIGNvbnN0IFN0ZXBSYW5nZSYgc3Rl
cFJhbmdlKQorICAgIDogbV9lZGl0RWxlbWVudChlbGVtbnQpCisgICAgLCBtX3N0ZXBSYW5nZShz
dGVwUmFuZ2UpCit7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQoY29uc3Qg
U3RyaW5nJiBmb3JtYXRTdHJpbmcpCit7CisgICAgbV9lZGl0RWxlbWVudC5yZXNldExheW91dCgp
OworICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9ybWF0U3RyaW5nLCAqdGhpcyk7
Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQoKSBj
b25zdAoreworICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzdGF0
aWNfY2FzdDxpbnQ+KG1zUGVyU2Vjb25kKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJh
bmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNlY29uZCkpLmlzWmVy
bygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6Om5lZWRNaW51dGVGaWVsZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX3N0ZXBSYW5nZS5taW5pbXVtKCkucmVtYWluZGVyKHN0YXRp
Y19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJhbmdl
LnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlckhvdXIpKS5pc1plcm8oKTsK
K30KKworYm9vbCBEYXRlVGltZUVkaXRCdWlsZGVyOjpuZWVkU2Vjb25kRmllbGQoKSBjb25zdAor
eworICAgIHJldHVybiAhbV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzdGF0aWNfY2Fz
dDxpbnQ+KG1zUGVyTWludXRlKSkuaXNaZXJvKCkKKyAgICAgICAgfHwgIW1fc3RlcFJhbmdlLnN0
ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpOwor
fQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludCkKK3sKKyAgICBEb2N1bWVudCogY29uc3QgZG9jdW1l
bnQgPSBtX2VkaXRFbGVtZW50LmRvY3VtZW50KCk7CisKKyAgICBzd2l0Y2ggKGZpZWxkVHlwZSkg
eworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMToKKyAgICAgICAgbV9l
ZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCwgbV9lZGl0RWxlbWVudCwgMCwgMTEpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOgorICAgICAgICBtX2VkaXRFbGVtZW50
LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2Vk
aXRFbGVtZW50LCAxLCAxMikpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQo
RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQs
IDAsIDIzKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUhvdXIyNDoKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMSwgMjQpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlu
dXRlOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ+IGZpZWxk
ID0gRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxl
bWVudCk7CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoZmllbGQpOworICAgICAgICBp
ZiAoc2hvdWxkTWludXRlRmllbGRSZWFkT25seSgpKQorICAgICAgICAgICAgZmllbGQtPnNldFJl
YWRPbmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVQZXJpb2Q6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0
ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIHRp
bWVBTVBNTGFiZWxzKCkpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlU2Vjb25kOiB7CisgICAgICAgIFJlZlB0cjxEYXRlVGltZVNlY29uZEZp
ZWxkRWxlbWVudD4gZmllbGQgPSBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50LCBtX2VkaXRFbGVtZW50KTsKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChm
aWVsZCk7CisgICAgICAgIGlmIChzaG91bGRTZWNvbmRGaWVsZFJlYWRPbmx5KCkpCisgICAgICAg
ICAgICBmaWVsZC0+c2V0UmVhZE9ubHkoKTsKKworICAgICAgICBpZiAobmVlZE1pbGxpc2Vjb25k
RmllbGQoKSkgeworICAgICAgICAgICAgdmlzaXRMaXRlcmFsKGxvY2FsaXplZERlY2ltYWxTZXBh
cmF0b3IoKSk7CisgICAgICAgICAgICB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVGcmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZDog
eworICAgICAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmllbGQg
PSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRp
dEVsZW1lbnQpOworICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKGZpZWxkKTsKKyAgICAg
ICAgaWYgKHNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpKQorICAgICAgICAgICAgZmll
bGQtPnNldFJlYWRPbmx5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OnNob3VsZE1pbGxpc2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNlY29uZCkp
LmlzWmVybygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnNob3VsZE1pbnV0ZUZp
ZWxkUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0ZXBSYW5nZS5zdGVwKCkucmVt
YWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCk7Cit9CisKK2Jvb2wg
RGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3RlcFJhbmdlLnN0ZXAoKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50
Pihtc1Blck1pbnV0ZSkpLmlzWmVybygpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OnZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgQVNTRVJUKHRleHQubGVu
Z3RoKCkpOworICAgIG1fZWRpdEVsZW1lbnQuYXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZWRp
dEVsZW1lbnQuZG9jdW1lbnQoKSwgdGV4dCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK0RhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9sT3duZXI6On5FZGl0
Q29udHJvbE93bmVyKCkKK3sKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6RGF0ZVRpbWVFZGl0
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEVkaXRDb250cm9sT3duZXImIGVkaXRDb250cm9s
T3duZXIpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQorICAgICwgbV9l
ZGl0Q29udHJvbE93bmVyKCZlZGl0Q29udHJvbE93bmVyKQorICAgICwgbV9zcGluQnV0dG9uKDAp
CisgICAgLCBtX2ZvY3VzRmllbGRJbmRleChpbnZhbGlkRmllbGRJbmRleCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZGF0ZVRpbWVFZGl0UHNldWRvSWQsICgiLXdl
YmtpdC1kYXRldGltZS1lZGl0IikpOworICAgIHNldFNoYWRvd1BzZXVkb0lkKGRhdGVUaW1lRWRp
dFBzZXVkb0lkKTsKK30KKworRGF0ZVRpbWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1l
bnQoKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9m
aWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxkSW5kZXhd
LT5yZW1vdmVFdmVudEhhbmRsZXIoKTsKKworICAgIGlmIChtX3NwaW5CdXR0b24pCisgICAgICAg
IG1fc3BpbkJ1dHRvbi0+cmVtb3ZlU3RlcEFjdGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBEYXRl
VGltZUVkaXRFbGVtZW50OjphZGRGaWVsZChQYXNzUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50
PiBmaWVsZCkKK3sKKyAgICBpZiAobV9maWVsZHMuc2l6ZSgpID09IG1fZmllbGRzLmNhcGFjaXR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZpZWxkcy5hcHBlbmQoZmllbGQuZ2V0KCkpOwor
ICAgIGFwcGVuZENoaWxkKGZpZWxkKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRFbGVt
ZW50PiBEYXRlVGltZUVkaXRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFZGl0
Q29udHJvbE93bmVyJiBlZGl0Q29udHJvbE93bmVyLCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5n
ZSkKK3sKKyAgICBSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRS
ZWYobmV3IERhdGVUaW1lRWRpdEVsZW1lbnQoZG9jdW1lbnQsIGVkaXRDb250cm9sT3duZXIpKTsK
KyAgICBjb250YWluZXItPmxheW91dChzdGVwUmFuZ2UpOworICAgIHJldHVybiBjb250YWluZXIu
cmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmRpc2FibGVkU3RhdGVD
aGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVVSVN0YXRlKCk7Cit9CisKK0RhdGVUaW1lRmllbGRFbGVt
ZW50KiBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEF0KHNpemVfdCBmaWVsZEluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpID8gbV9maWVsZHNb
ZmllbGRJbmRleF0gOiAwOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3VzRmll
bGRBdChzaXplX3QgbmV3Rm9jdXNGaWVsZEluZGV4KQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJ
bmRleCA9PSBuZXdGb2N1c0ZpZWxkSW5kZXgpCisgICAgICAgIHJldHVybjsKKworICAgIERhdGVU
aW1lRmllbGRFbGVtZW50KiBjb25zdCBuZXdGb2N1c0ZpZWxkID0gZmllbGRBdChuZXdGb2N1c0Zp
ZWxkSW5kZXgpOworICAgIGlmIChuZXdGb2N1c0ZpZWxkICYmIG5ld0ZvY3VzRmllbGQtPmlzUmVh
ZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNv
bnN0IGN1cnJlbnRGb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3VzRmllbGRJbmRleCk7CisKKyAg
ICBpZiAoY3VycmVudEZvY3VzRmllbGQpCisgICAgICAgIGN1cnJlbnRGb2N1c0ZpZWxkLT5zZXRG
b2N1cyhmYWxzZSk7CisKKyAgICBpZiAoIW5ld0ZvY3VzRmllbGQpIHsKKyAgICAgICAgbV9mb2N1
c0ZpZWxkSW5kZXggPSBpbnZhbGlkRmllbGRJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gbmV3Rm9jdXNGaWVsZEluZGV4OworICAgIG5ld0Zv
Y3VzRmllbGQtPnNldEZvY3VzKHRydWUpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAg
ICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBr
ZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9
PSAiTGVmdCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgY29uc3Qgc2l6ZV90IGZpZWxkSW5kZXggPSBwcmV2aW91c0ZpZWxkSW5kZXgoKTsK
KyAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1c0ZpZWxk
QXQoZmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5SWRl
bnRpZmllciA9PSAiUmlnaHQiKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBmaWVsZEluZGV4ID0gbmV4dEZpZWxkSW5k
ZXgoKTsKKyAgICAgICAgaWYgKGZpZWxkQXQoZmllbGRJbmRleCkpCisgICAgICAgICAgICBmb2N1
c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
a2V5SWRlbnRpZmllciA9PSAiVSswMDA5IikgeworICAgICAgICBjb25zdCBzaXplX3QgZmllbGRJ
bmRleCA9IGtleWJvYXJkRXZlbnQtPmdldE1vZGlmaWVyU3RhdGUoIlNoaWZ0IikgPyBwcmV2aW91
c0ZpZWxkSW5kZXgoKSA6IG5leHRGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0KGZp
ZWxkSW5kZXgpKSB7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OmZpZWxkVmFsdWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9lZGl0Q29udHJvbE93bmVyKQorICAg
ICAgICBtX2VkaXRDb250cm9sT3duZXItPmVkaXRDb250cm9sVmFsdWVDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgpCit7CisgICAgaWYg
KG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFsaWRGaWVsZEluZGV4KQorICAgICAgICBmb2N1c0Zp
ZWxkQXQobmV4dEZpZWxkSW5kZXgoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBtb3VzZUV2ZW50KQoreworICAgIGlmIChpc0Rp
c2FibGVkKCkgfHwgaXNSZWFkT25seSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobW91
c2VFdmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBtb3VzZUV2
ZW50LT5idXR0b24oKSAhPSBMZWZ0QnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2Rl
KiBjb25zdCByZWxhdGVkVGFyZ2V0ID0gbW91c2VFdmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwor
ICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6
ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgaWYgKG1fZmllbGRzW2ZpZWxkSW5kZXhdID09
IHJlbGF0ZWRUYXJnZXQpIHsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmllbGRJbmRleCk7CisgICAgICAgICAg
ICBpZiAobV9lZGl0Q29udHJvbE93bmVyKQorICAgICAgICAgICAgICAgIG1fZWRpdENvbnRyb2xP
d25lci0+ZWRpdENvbnRyb2xNb3VzZUZvY3VzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKworYm9vbCBEYXRlVGltZUVkaXRFbGVtZW50Ojppc0Rpc2FibGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJvbE93bmVyICYmIG1fZWRpdENvbnRyb2xP
d25lci0+aXNFZGl0Q29udHJvbE93bmVyRGlzYWJsZWQoKTsKK30KKworYm9vbCBEYXRlVGltZUVk
aXRFbGVtZW50Ojppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0Q29udHJv
bE93bmVyICYmIG1fZWRpdENvbnRyb2xPd25lci0+aXNFZGl0Q29udHJvbE93bmVyUmVhZE9ubHko
KTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpsYXlvdXQoY29uc3QgU3RlcFJhbmdl
JiBzdGVwUmFuZ2UpCit7CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmll
bGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KTsKKyAgICBmb2N1c0ZpZWxkQXQoaW52YWxp
ZEZpZWxkSW5kZXgpOworCisgICAgRGF0ZVRpbWVFZGl0QnVpbGRlciBidWlsZGVyKCp0aGlzLCBz
dGVwUmFuZ2UpOworICAgIGNvbnN0IFN0cmluZyBkYXRlVGltZUZvcm1hdCA9IGJ1aWxkZXIubmVl
ZFNlY29uZEZpZWxkKCkgPyBsb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCgpIDogbG9jYWxpemVkU2hv
cnRUaW1lRm9ybWF0VGV4dCgpOworICAgIGlmICghYnVpbGRlci5idWlsZChkYXRlVGltZUZvcm1h
dCkgfHwgbV9maWVsZHMuaXNFbXB0eSgpKQorICAgICAgICBidWlsZGVyLmJ1aWxkKGJ1aWxkZXIu
bmVlZFNlY29uZEZpZWxkKCkgPyAiSEg6bW06c3MiIDogIkhIOm1tIik7CisKKyAgICBSZWZQdHI8
U3BpbkJ1dHRvbkVsZW1lbnQ+IHNwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KCksICp0aGlzKTsKKyAgICBtX3NwaW5CdXR0b24gPSBzcGluQnV0dG9uLmdldCgp
OworICAgIGFwcGVuZENoaWxkKHNwaW5CdXR0b24pOworCisgICAgaWYgKGZvY3VzRmllbGQpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBtX2ZpZWxk
cy5zaXplKCk7ICsrZmllbGRJbmRleCkgeworICAgICAgICAgICAgaWYgKGZvY3VzRmllbGQgPT0g
bV9maWVsZHNbZmllbGRJbmRleF0pIHsKKyAgICAgICAgICAgICAgICBmb2N1c0ZpZWxkQXQoZmll
bGRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3NpemVfdCBEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0RmllbGRJbmRl
eCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZm9jdXNGaWVsZEluZGV4ICE9IGludmFsaWRGaWVs
ZEluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXgg
KyAxOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAg
ICAgaWYgKCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZpZWxkSW5kZXg7CisgICAgfQorICAgIHJldHVybiBtX2ZpZWxkcy5zaXplKCk7Cit9
CisKK3NpemVfdCBEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0ZpZWxkSW5kZXgoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJbmRleCk7
CisgICAgc2l6ZV90IGZpZWxkSW5kZXggPSBtX2ZvY3VzRmllbGRJbmRleDsKKyAgICB3aGlsZSAo
ZmllbGRJbmRleCA+IDApIHsKKyAgICAgICAgLS1maWVsZEluZGV4OworICAgICAgICBpZiAoIW1f
ZmllbGRzW2ZpZWxkSW5kZXhdLT5pc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gZmll
bGRJbmRleDsKKyAgICB9CisgICAgcmV0dXJuIGludmFsaWRGaWVsZEluZGV4OworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlYWRPbmx5U3RhdGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRh
dGVVSVN0YXRlKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVzZXRMYXlvdXQo
KQoreworICAgIG1fZmllbGRzLnNocmluaygwKTsKKyAgICBtX3NwaW5CdXR0b24gPSAwOworICAg
IG1fZm9jdXNGaWVsZEluZGV4ID0gaW52YWxpZEZpZWxkSW5kZXg7CisgICAgcmVtb3ZlQ2hpbGRy
ZW4oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Zm9jdXNFdmVudCkgeworICAgICAgICBpZiAoIWlzRGlzYWJsZWQoKSAmJiAhaXNSZWFkT25seSgp
ICYmIG1fZm9jdXNGaWVsZEluZGV4ID09IGludmFsaWRGaWVsZEluZGV4KQorICAgICAgICAgICAg
Zm9jdXNGaWVsZEF0KDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkgeworICAgICAgICBmb2N1c0ZpZWxk
QXQoaW52YWxpZEZpZWxkSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPmlzS2V5
Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldmVudCkpOworCisgICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29uc3QgZm9j
dXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpOworICAgIGlmICghZm9jdXNGaWVs
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9jdXNGaWVsZC0+ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgZm9yIChzaXplX3QgZmllbGRJbmRl
eCA9IDA7IGZpZWxkSW5kZXggPCBtX2ZpZWxkcy5zaXplKCk7ICsrZmllbGRJbmRleCkKKyAgICAg
ICAgbV9maWVsZHNbZmllbGRJbmRleF0tPnNldFZhbHVlQXNEYXRlKGRhdGUpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
IGRhdGVGb3JSZWFkT25seUZpZWxkKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAw
OyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1f
ZmllbGRzW2ZpZWxkSW5kZXhdLT5zZXRFbXB0eVZhbHVlKGRhdGVGb3JSZWFkT25seUZpZWxkLCBE
YXRlVGltZUZpZWxkRWxlbWVudDo6RGlzcGF0Y2hOb0V2ZW50KTsKK30KKwordm9pZCBEYXRlVGlt
ZUVkaXRFbGVtZW50OjpzcGluQnV0dG9uU3RlcERvd24oKQoreworICAgIGlmIChEYXRlVGltZUZp
ZWxkRWxlbWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgp
KQorICAgICAgICBmb2N1c0ZpZWxkLT5zdGVwRG93bigpOworfQorCit2b2lkIERhdGVUaW1lRWRp
dEVsZW1lbnQ6OnNwaW5CdXR0b25TdGVwVXAoKQoreworICAgIGlmIChEYXRlVGltZUZpZWxkRWxl
bWVudCogY29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpKQorICAg
ICAgICBmb2N1c0ZpZWxkLT5zdGVwVXAoKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
Ojp1cGRhdGVVSVN0YXRlKCkKK3sKKyAgICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9ubHko
KSkgeworICAgICAgICBtX3NwaW5CdXR0b24tPnJlbGVhc2VDYXB0dXJlKCk7CisgICAgICAgIGZv
Y3VzRmllbGRBdChpbnZhbGlkRmllbGRJbmRleCk7CisgICAgfQorfQorCitkb3VibGUgRGF0ZVRp
bWVFZGl0RWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgZG91YmxlIHZhbHVl
ID0gMDsKKworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9m
aWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAgY29uc3QgRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQqIGNvbnN0IGZpZWxkID0gbV9maWVsZHNbZmllbGRJbmRleF07CisgICAgICAgIGlm
ICghZmllbGQtPmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgdmFsdWUgKz0gZmllbGQtPnZhbHVl
QXNEb3VibGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUVkaXRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYyZmFhNGE2ZTA3ZTM2N2IzYTY1ZGM1
MDllN2RhMTFhMTk3MWFjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RhdGVUaW1lRWRpdEVsZW1lbnQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRGF0ZVRpbWVFZGl0RWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1l
RWRpdEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVM
RFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRl
Q29tcG9uZW50czsKK2NsYXNzIERhdGVUaW1lRWRpdExheW91dGVyOworY2xhc3MgS2V5Ym9hcmRF
dmVudDsKK2NsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBTdGVwUmFuZ2U7CisKKy8vIERhdGVUaW1l
RWRpdEVsZW1lbnQgY2xhc3MgY29udGFpbnMgbnVtYmVyaWMgZmllbGQgYW5kIHN5bWJvbGMgZmll
bGQgZm9yCisvLyByZXByZXNlbnRpbmcgZGF0ZSBhbmQgdGltZSwgc3VjaCBhcworLy8gIC0gWWVh
ciwgTW9udGgsIERheSBPZiBNb250aAorLy8gIC0gSG91ciwgTWludXRlLCBTZWNvbmQsIE1pbGxp
c2Vjb25kLCBBTS9QTQorY2xhc3MgRGF0ZVRpbWVFZGl0RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2
RWxlbWVudCwgcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciwg
cHJpdmF0ZSBTcGluQnV0dG9uRWxlbWVudDo6U3RlcEFjdGlvbkhhbmRsZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERhdGVUaW1lRWRpdEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgLy8g
RWRpdENvbnRyb2xPd25lciBpbXBsZW1lbnRlciBtdXN0IGNhbGwgcmVtb3ZlRWRpdENvbnRyb2xP
d25lciB3aGVuCisgICAgLy8gaXQgZG9lc24ndCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1
Y3Rpb24uCisgICAgY2xhc3MgRWRpdENvbnRyb2xPd25lciB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIH5FZGl0Q29udHJvbE93bmVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0
Q29udHJvbE1vdXNlRm9jdXMoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlZGl0Q29udHJv
bFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzRWRpdENvbnRyb2xP
d25lckRpc2FibGVkKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29u
dHJvbE93bmVyUmVhZE9ubHkoKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGVUaW1lRWRpdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEVkaXRDb250cm9s
T3duZXImLCBjb25zdCBTdGVwUmFuZ2UmKTsKKworICAgIHZpcnR1YWwgfkRhdGVUaW1lRWRpdEVs
ZW1lbnQoKTsKKyAgICB2b2lkIGFkZEZpZWxkKFBhc3NSZWZQdHI8RGF0ZVRpbWVGaWVsZEVsZW1l
bnQ+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopIE9WRVJS
SURFOworICAgIHZvaWQgZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGxheW91dChj
b25zdCBTdGVwUmFuZ2UmKTsKKyAgICB2b2lkIHJlYWRPbmx5U3RhdGVDaGFuZ2VkKCk7CisgICAg
dm9pZCByZW1vdmVFZGl0Q29udHJvbE93bmVyKCkgeyBtX2VkaXRDb250cm9sT3duZXIgPSAwOyB9
CisgICAgdm9pZCByZXNldExheW91dCgpOworICAgIHZvaWQgc2V0RW1wdHlWYWx1ZShjb25zdCBE
YXRlQ29tcG9uZW50cyYgIGRhdGVGb3JSZWFkT25seUZpZWxkKTsKKyAgICB2b2lkIHNldFZhbHVl
QXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJik7CisgICAgZG91YmxlIHZhbHVlQXNEb3VibGUo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGludmFsaWRGaWVs
ZEluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSk7CisKKyAgICAvLyBEYXRldGltZSBjYW4g
YmUgcmVwcmVzZW50IGF0IG1vc3QgZml2ZSBmaWVsZHMsIHN1Y2ggYXMKKyAgICAvLyAgMS4geWVh
cgorICAgIC8vICAyLiBtb250aAorICAgIC8vICAzLiBkYXktb2YtbW9udGgKKyAgICAvLyAgNC4g
aG91cgorICAgIC8vICA1LiBtaW51dGUKKyAgICAvLyAgNi4gc2Vjb25kCisgICAgLy8gIDcuIG1p
bGxpc2Vjb25kCisgICAgLy8gIDguIEFNL1BNCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVt
TnVtYmVyT2ZGaWVsZHMgPSA4OworCisgICAgRGF0ZVRpbWVFZGl0RWxlbWVudChEb2N1bWVudCos
IEVkaXRDb250cm9sT3duZXImKTsKKworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBmaWVsZEF0
KHNpemVfdCkgY29uc3Q7CisgICAgdm9pZCBmb2N1c0ZpZWxkQXQoc2l6ZV90KTsKKyAgICB2b2lk
IGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZvaWQgaGFuZGxlTW91
c2VFdmVudChNb3VzZUV2ZW50Kik7CisgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7CisgICAgc2l6ZV90IG5leHRGaWVsZEluZGV4KCkgY29u
c3Q7CisgICAgc2l6ZV90IHByZXZpb3VzRmllbGRJbmRleCgpIGNvbnN0OworICAgIHZvaWQgdXBk
YXRlVUlTdGF0ZSgpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRI
YW5kbGVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZmllbGRWYWx1ZUNoYW5nZWQoKSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpIE9WRVJS
SURFIEZJTkFMOworCisgICAgLy8gU3BpbkJ1dHRvbkVsZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVy
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc3BpbkJ1dHRvblN0ZXBEb3duKCkgT1ZFUlJJ
REUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwVXAoKSBPVkVSUklERSBG
SU5BTDsKKworICAgIFZlY3RvcjxEYXRlVGltZUZpZWxkRWxlbWVudCosIG1heGltdW1OdW1iZXJP
ZkZpZWxkcz4gbV9maWVsZHM7CisgICAgRWRpdENvbnRyb2xPd25lciogbV9lZGl0Q29udHJvbE93
bmVyOworICAgIFNwaW5CdXR0b25FbGVtZW50KiBtX3NwaW5CdXR0b247CisgICAgc2l6ZV90IG1f
Zm9jdXNGaWVsZEluZGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVG
aWVsZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVs
ZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMmU0OTAwY2M3MWQwYzkzMTkzMjk5OTBkNjZmZDNm
Y2U4YzNhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxU
SVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKworI2luY2x1
ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitEYXRlVGltZUZpZWxkRWxlbWVudDo6
RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcigpCit7Cit9CisKK0RhdGVUaW1l
RmllbGRFbGVtZW50OjpEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEZp
ZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikKKyAgICA6IEhUTUxFbGVtZW50KHNw
YW5UYWcsIGRvY3VtZW50KQorICAgICwgbV9maWVsZEV2ZW50SGFuZGxlcigmZmllbGRFdmVudEhh
bmRsZXIpCit7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkp
IHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldmVudCk7CisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9h
cmRFdmVudCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIo
a2V5Ym9hcmRFdmVudCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6
ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQp
Cit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93
bkV2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZp
ZXIgPSBrZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICBpZiAoa2V5SWRlbnRp
ZmllciA9PSAiRG93biIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgc3RlcERvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgc3RlcFVwKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiVSswMDA4IikgeworICAgICAgICBrZXli
b2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBzZXRFbXB0eVZhbHVlKERh
dGVDb21wb25lbnRzKCksIERpc3BhdGNoRXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50Ojpmb2N1c09uTmV4dEZpZWxkKCkKK3sKKyAg
ICBpZiAobV9maWVsZEV2ZW50SGFuZGxlcikKKyAgICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+
Zm9jdXNPbk5leHRGaWVsZCgpOworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50Ojppbml0
aWFsaXplKGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQpCit7CisgICAgc2V0U2hh
ZG93UHNldWRvSWQoc2hhZG93UHNldWRvSWQpOworICAgIGFwcGVuZENoaWxkKFRleHQ6OmNyZWF0
ZShkb2N1bWVudCgpLCB2aXNpYmxlVmFsdWUoKSkpOworfQorCitib29sIERhdGVUaW1lRmllbGRF
bGVtZW50Ojppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0
ZShyZWFkb25seUF0dHIpOworfQorCit2b2lkIERhdGVUaW1lRmllbGRFbGVtZW50OjpzZXRSZWFk
T25seSgpCit7CisgICAgLy8gU2V0IEhUTUwgYXR0cmlidXRlIHJlYWRvbmx5IHRvIGNoYW5nZSBh
cHBlcmFuY2UuCisgICAgc2V0Qm9vbGVhbkF0dHJpYnV0ZShyZWFkb25seUF0dHIsIHRydWUpOwor
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKK30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVu
dDo6dXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAg
ICBUZXh0KiBjb25zdCB0ZXh0Tm9kZSA9IHRvVGV4dChmaXJzdENoaWxkKCkpOworICAgIGNvbnN0
IFN0cmluZyBuZXdWaXNpYmxlVmFsdWUgPSB2aXNpYmxlVmFsdWUoKTsKKyAgICBBU1NFUlQobmV3
VmlzaWJsZVZhbHVlLmxlbmd0aCgpID4gMCk7CisKKyAgICBpZiAodGV4dE5vZGUtPndob2xlVGV4
dCgpID09IG5ld1Zpc2libGVWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dE5vZGUt
PnJlcGxhY2VXaG9sZVRleHQobmV3VmlzaWJsZVZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
KworICAgIGlmIChldmVudEJlaGF2aW9yID09IERpc3BhdGNoRXZlbnQgJiYgbV9maWVsZEV2ZW50
SGFuZGxlcikKKyAgICAgICAgbV9maWVsZEV2ZW50SGFuZGxlci0+ZmllbGRWYWx1ZUNoYW5nZWQo
KTsKK30KKworZG91YmxlIERhdGVUaW1lRmllbGRFbGVtZW50Ojp2YWx1ZUFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzVmFsdWUoKSA/IHZhbHVlQXNJbnRlZ2VyKCkgKiB1bml0SW5N
aWxsaXNlY29uZCgpIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2NmI2
MWZmYWIwOTdhMjAyMjdiZmJkZDg2M2M5NDg4MTU1Njk3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudC5oCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGVUaW1lRmllbGRFbGVtZW50
X2gKKyNkZWZpbmUgRGF0ZVRpbWVGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVDb21wb25lbnRzOworCisvLyBEYXRl
VGltZUZpZWxkRWxlbWVudCBpcyBiYXNlIGNsYXNzIG9mIGRhdGUgdGltZSBmaWVsZCBlbGVtZW50
LgorY2xhc3MgRGF0ZVRpbWVGaWVsZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lRmllbGRFbGVtZW50KTsKKworcHVibGljOgor
ICAgIGVudW0gRXZlbnRCZWhhdmlvciB7CisgICAgICAgIERpc3BhdGNoTm9FdmVudCwKKyAgICAg
ICAgRGlzcGF0Y2hFdmVudCwKKyAgICB9OworCisgICAgLy8gRmllbGRFdmVudEhhbmRsZXIgaW1w
bGVtZW50ZXIgbXVzdCBjYWxsIHJlbW92ZUV2ZW50SGFuZGxlciB3aGVuCisgICAgLy8gaXQgZG9l
c24ndCBoYW5kbGUgZXZlbnQsIGUuZy4gYXQgZGVzdHJ1Y3Rpb24uCisgICAgY2xhc3MgRmllbGRF
dmVudEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RmllbGRFdmVudEhh
bmRsZXIoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2VkKCkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpID0gMDsKKyAgICB9OworCisg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdCA9IDA7CisgICAgYm9vbCBpc1JlYWRPbmx5
KCkgY29uc3Q7CisgICAgdm9pZCByZW1vdmVFdmVudEhhbmRsZXIoKSB7IG1fZmllbGRFdmVudEhh
bmRsZXIgPSAwOyB9CisgICAgdm9pZCBzZXRSZWFkT25seSgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlRm9yUmVhZE9ubHlGaWVsZCwg
RXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZXBEb3duKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzdGVwVXAoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7Cisg
ICAgZG91YmxlIHZhbHVlQXNEb3VibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFz
SW50ZWdlcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBj
b25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudChEb2N1bWVu
dCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisgICAgdm9pZCBmb2N1c09uTmV4dEZpZWxkKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopID0gMDsK
KyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdmlydHVhbCBk
b3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCA9IDA7CisgICAgdm9pZCB1cGRhdGVWaXNp
YmxlVmFsdWUoRXZlbnRCZWhhdmlvcik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkZWZhdWx0S2V5
Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOworCisgICAgRmllbGRFdmVudEhhbmRs
ZXIqIG1fZmllbGRFdmVudEhhbmRsZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZUZpZWxkRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0
ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmY3ZmE1YzdkYTAyODc3ZGU0Y2Qx
NmEzOTlhZTk4NzkwYjU5MzJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQ
RV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudHMu
aCIKKworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSA8d3RmL0RhdGVNYXRo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50OjpE
YXRlVGltZUFNUE1GaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFu
ZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbXBtTGFiZWxz
KQorICAgIDogRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVu
dEhhbmRsZXIsIGFtcG1MYWJlbHMpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVBTVBNRmll
bGRFbGVtZW50PiBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9j
dW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFtcG1MYWJlbHMpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGFtcG1Qc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtYW1wbS1maWVsZCIp
KTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVm
KG5ldyBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
LCBhbXBtTGFiZWxzKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoYW1wbVBzdWVkb0lkKTsKKyAg
ICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lQU1QTUZpZWxkRWxl
bWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAg
c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkgPj0gMTIgPyAxIDogMCk7Cit9CisKK2RvdWJs
ZSBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbXNQZXJIb3VyICogMTI7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpEYXRlVGltZUhvdXJGaWVsZEVs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhh
bmRsZXIsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKKyAgICA6IERhdGVUaW1lTnVtZXJpY0Zp
ZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIsIG1pbmltdW0sIG1heGltdW0p
CisgICAgLCBtX2FsaWdubWVudChtYXhpbXVtICsgbWF4aW11bSAlIDIpCit7CisgICAgQVNTRVJU
KCghbWluaW11bSAmJiAobWF4aW11bSA9PSAxMSB8fCBtYXhpbXVtID09IDIzKSkgfHwgKG1pbmlt
dW0gPT0gMSAmJiAobWF4aW11bSA9PSAxMiB8fCBtYXhpbXVtID09IDI0KSkpOworfQorCitQYXNz
UmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxlbWVudD4gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVu
dEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgaG91clBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRp
dC1ob3VyLWZpZWxkIikpOworICAgIFJlZlB0cjxEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ+IGZp
ZWxkID0gYWRvcHRSZWYobmV3IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChkb2N1bWVudCwgZmll
bGRFdmVudEhhbmRsZXIsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6
ZShob3VyUHN1ZWRvSWQpOworICAgIHJldHVybiBmaWVsZC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9u
ZW50cyYgZGF0ZSkKK3sKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihkYXRlLmhvdXIoKSk7Cit9CisK
K3ZvaWQgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcihpbnQgdmFs
dWVBc0hvdXIyMywgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIGNvbnN0IGlu
dCB2YWx1ZSA9IFJhbmdlKDAsIDIzKS5jbGFtcFZhbHVlKHZhbHVlQXNIb3VyMjMpICUgbV9hbGln
bm1lbnQ7CisgICAgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdl
cihyYW5nZSgpLm1pbmltdW0gJiYgIXZhbHVlID8gbV9hbGlnbm1lbnQgOiB2YWx1ZSwgZXZlbnRC
ZWhhdmlvcik7Cit9CisKK2RvdWJsZSBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnVuaXRJbk1p
bGxpc2Vjb25kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJIb3VyOworfQorCitpbnQgRGF0
ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc1ZhbHVlKCkgPyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVlQXNJbnRl
Z2VyKCkgJSBtX2FsaWdubWVudCA6IC0xOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK0RhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlz
ZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYg
ZmllbGRFdmVudEhhbmRsZXIpCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9j
dW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCAwLCA5OTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0
ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxk
RXZlbnRIYW5kbGVyKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBt
aWxsaXNlY29uZFBzdWVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1m
aWVsZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudD4gZmll
bGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudChkb2N1bWVu
dCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAgICBmaWVsZC0+aW5pdGlhbGl6ZShtaWxsaXNlY29u
ZFBzdWVkb0lkKTsKKyAgICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVU
aW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21w
b25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUubWlsbGlzZWNvbmQo
KSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5N
aWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OkRhdGVUaW1l
TWludXRlRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXIm
IGZpZWxkRXZlbnRIYW5kbGVyKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRv
Y3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgMCwgNTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ+IERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRs
ZXIpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG1pbnV0ZVBzdWVk
b0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGQiKSk7CisgICAgUmVmUHRy
PERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGlt
ZU1pbnV0ZUZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAgICBm
aWVsZC0+aW5pdGlhbGl6ZShtaW51dGVQc3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVh
c2UoKTsKK30KKwordm9pZCBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0Rh
dGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIo
ZGF0ZS5taW51dGUoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6
dW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdAoreworICAgIHJldHVybiBtc1Blck1pbnV0ZTsKK30K
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEYXRlVGltZVNlY29uZEZpZWxk
RWxlbWVudDo6RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBG
aWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIpCisgICAgOiBEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCAwLCA1OSkKK3sKK30K
KworUGFzc1JlZlB0cjxEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudD4gRGF0ZVRpbWVTZWNvbmRG
aWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVy
JiBmaWVsZEV2ZW50SGFuZGxlcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0
cmluZywgc2Vjb25kUHN1ZWRvSWQsICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVs
ZCIpKTsKKyAgICBSZWZQdHI8RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRv
cHRSZWYobmV3IERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50
SGFuZGxlcikpOworICAgIGZpZWxkLT5pbml0aWFsaXplKHNlY29uZFBzdWVkb0lkKTsKKyAgICBy
ZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lU2Vjb25kRmllbGRFbGVt
ZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAgICBz
ZXRWYWx1ZUFzSW50ZWdlcihkYXRlLnNlY29uZCgpKTsKK30KKworZG91YmxlIERhdGVUaW1lU2Vj
b25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1zUGVyU2Vjb25kOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUZpZWxkRWxlbWVudHMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41N2JjMWVmYTU1MmUzNDgwNGQ2M2MzNTQwZGU2NjJhMGVmMDQ3YjUyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVs
ZW1lbnRzLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERh
dGVUaW1lRmllbGRFbGVtZW50c19oCisjZGVmaW5lIERhdGVUaW1lRmllbGRFbGVtZW50c19oCisK
KyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJEYXRlVGltZVN5bWJvbGlj
RmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0ZVRpbWVB
TVBNRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCk7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ+IGNy
ZWF0ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
KTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBG
aWVsZEV2ZW50SGFuZGxlciYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKKyAgICAvLyBEYXRl
VGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNE
YXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBk
b3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307CisKKwor
Ly8gRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50IGlzIHVzZWQgZm9yIGhvdXIgZmllbGQgb2YgZGF0
ZSB0aW1lIGZvcm1hdAorLy8gc3VwcG9ydGluZyBmb2xsb3dpbmcgcGF0dGVybnM6CisvLyAgLSAw
IHRvIDExCisvLyAgLSAxIHRvIDEyCisvLyAgLSAwIHRvIDIzCisvLyAgLSAxIHRvIDI0CitjbGFz
cyBEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUhvdXJGaWVsZEVsZW1l
bnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGludCBtaW5pbXVt
LCBpbnQgbWF4aW11bSk7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50
KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0p
OworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwg
dm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFM
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3Ig
PSBEaXNwYXRjaE5vRXZlbnQpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVu
aXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBpbnQg
dmFsdWVBc0ludGVnZXIoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IGludCBt
X2FsaWdubWVudDsKK307CisKK2NsYXNzIERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQg
OiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGNyZWF0
ZShEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRp
bWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7
CisKKyAgICAvLyBEYXRlVGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7
CisgICAgdmlydHVhbCBkb3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBG
SU5BTDsKK307CisKK2NsYXNzIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IDogcHVibGljIERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEZpZWxkRXZl
bnRIYW5kbGVyJik7CisKK3ByaXZhdGU6CisgICAgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQo
RG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBE
YXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJ
bk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCitjbGFzcyBEYXRlVGlt
ZVNlY29uZEZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KTsK
KworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lU2Vjb25kRmllbGRFbGVt
ZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCitwcml2YXRlOgor
ICAgIERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRs
ZXImKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0IE9WRVJS
SURFIEZJTkFMOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUyMmUxNTc5YmY1MzViNTIwMTUyZjBk
OTNhYzRmODRkOTIzNjg1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
ICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVU
X1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmljRmll
bGRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTG9j
YWxpemVkTnVtYmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBET01UaW1lU3RhbXAgdHlwZUFoZWFk
VGltZW91dCA9IDEwMDA7CisKK3N0YXRpYyBzaXplX3QgZGlzcGxheVNpemVPZk51bWJlcihpbnQg
dmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlID49IDApOworCisgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIDE7CisKKyAgICBpbnQgbnVtYmVyT2ZEaWdpdHMgPSAwOworICAgIHdoaWxl
ICh2YWx1ZSkgeworICAgICAgICB2YWx1ZSAvPSAxMDsKKyAgICAgICAgKytudW1iZXJPZkRpZ2l0
czsKKyAgICB9CisKKyAgICByZXR1cm4gbnVtYmVyT2ZEaWdpdHM7Cit9CisKK0RhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudDo6UmFuZ2U6OlJhbmdlKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkK
KyAgICA6IG1heGltdW0obWF4aW11bSkKKyAgICAsIG1pbmltdW0obWluaW11bSkKK3sKKyAgICBB
U1NFUlQobWluaW11bSA8PSBtYXhpbXVtKTsKK30KKworaW50IERhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudDo6UmFuZ2U6OmNsYW1wVmFsdWUoaW50IHZhbHVlKSBjb25zdAoreworICAgIHJldHVy
biBzdGQ6Om1pbihzdGQ6Om1heCh2YWx1ZSwgbWluaW11bSksIG1heGltdW0pOworfQorCitEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlciwgaW50
IG1pbmltdW0sIGludCBtYXhpbXVtKQorICAgIDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1l
bnQsIGZpZWxkRXZlbnRIYW5kbGVyKQorICAgICwgbV9sYXN0RGlnaXRDaGFyVGltZSgwKQorICAg
ICwgbV9yYW5nZShtaW5pbXVtLCBtYXhpbXVtKQorICAgICwgbV92YWx1ZSgwKQorICAgICwgbV9o
YXNWYWx1ZShmYWxzZSkKK3sKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAg
ICBpZiAoaXNSZWFkT25seSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoa2V5Ym9hcmRF
dmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBVQ2hhciBjaGFyQ29kZSA9IHN0YXRpY19jYXN0PFVDaGFyPihrZXlib2FyZEV2
ZW50LT5jaGFyQ29kZSgpKTsKKyAgICBpZiAoY2hhckNvZGUgPCAnICcpCisgICAgICAgIHJldHVy
bjsKKworICAgIERPTVRpbWVTdGFtcCBkZWx0YSA9IGtleWJvYXJkRXZlbnQtPnRpbWVTdGFtcCgp
IC0gbV9sYXN0RGlnaXRDaGFyVGltZTsKKyAgICBtX2xhc3REaWdpdENoYXJUaW1lID0gMDsKKwor
ICAgIFN0cmluZyBudW1iZXIgPSBjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihTdHJpbmcoJmNo
YXJDb2RlLCAxKSk7CisgICAgY29uc3QgaW50IGRpZ2l0ID0gbnVtYmVyWzBdIC0gJzAnOworICAg
IGlmIChkaWdpdCA8IDAgfHwgZGlnaXQgPiA5KQorICAgICAgICByZXR1cm47CisKKyAgICBrZXli
b2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1f
aGFzVmFsdWUgJiYgZGVsdGEgPCB0eXBlQWhlYWRUaW1lb3V0ID8gbV92YWx1ZSAqIDEwICsgZGln
aXQgOiBkaWdpdCwgRGlzcGF0Y2hFdmVudCk7CisgICAgaWYgKG1fdmFsdWUgKiAxMCA+IG1fcmFu
Z2UubWF4aW11bSkKKyAgICAgICAgZm9jdXNPbk5leHRGaWVsZCgpOworICAgIGVsc2UKKyAgICAg
ICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IGtleWJvYXJkRXZlbnQtPnRpbWVTdGFtcCgpOworfQor
Citib29sIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6aGFzVmFsdWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2hhc1ZhbHVlOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudDo6c2V0RW1wdHlWYWx1ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUZvclJlYWRPbmx5
RmllbGQsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX2xhc3REaWdpdENo
YXJUaW1lID0gMDsKKworICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgc2V0VmFsdWVB
c0RhdGUoZGF0ZUZvclJlYWRPbmx5RmllbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9oYXNWYWx1ZSA9IGZhbHNlOworICAgIG1fdmFsdWUgPSAwOworICAgIHVwZGF0ZVZpc2li
bGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKGludCB2YWx1ZSwgRXZlbnRCZWhhdmlvciBldmVudEJl
aGF2aW9yKQoreworICAgIG1fdmFsdWUgPSBjbGFtcFZhbHVlKHZhbHVlKTsKKyAgICBtX2hhc1Zh
bHVlID0gdHJ1ZTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7CisgICAg
bV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50OjpzdGVwRG93bigpCit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIHNldFZh
bHVlQXNJbnRlZ2VyKG1fdmFsdWUgPT0gbV9yYW5nZS5taW5pbXVtID8gbV9yYW5nZS5tYXhpbXVt
IDogY2xhbXBWYWx1ZShtX3ZhbHVlIC0gMSksIERpc3BhdGNoRXZlbnQpOworICAgIGVsc2UKKyAg
ICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9yYW5nZS5tYXhpbXVtLCBEaXNwYXRjaEV2ZW50KTsK
K30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnN0ZXBVcCgpCit7CisgICAg
aWYgKG1faGFzVmFsdWUpCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fdmFsdWUgPT0gbV9y
YW5nZS5tYXhpbXVtID8gbV9yYW5nZS5taW5pbXVtIDogY2xhbXBWYWx1ZShtX3ZhbHVlICsgMSks
IERpc3BhdGNoRXZlbnQpOworICAgIGVsc2UKKyAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIobV9y
YW5nZS5taW5pbXVtLCBEaXNwYXRjaEV2ZW50KTsKK30KKworU3RyaW5nIERhdGVUaW1lTnVtZXJp
Y0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25zdAoreworICAgIGlmICghbV9oYXNWYWx1ZSkKKyAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBpZiAobV9yYW5nZS5tYXhpbXVtID4g
OTk5KQorICAgICAgICByZXR1cm4gY29udmVydFRvTG9jYWxpemVkTnVtYmVyKFN0cmluZzo6bnVt
YmVyKG1fdmFsdWUpKTsKKworICAgIGlmIChtX3JhbmdlLm1heGltdW0gPiA5OSkKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihTdHJpbmc6OmZvcm1hdCgiJTAzZCIsIG1f
dmFsdWUpKTsKKworICAgIHJldHVybiBjb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoU3RyaW5nOjpm
b3JtYXQoIiUwMmQiLCBtX3ZhbHVlKSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNWYWx1ZSA/
IG1fdmFsdWUgOiAtMTsKK30KKworU3RyaW5nIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6
dmlzaWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAobV9oYXNWYWx1ZSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChpbnQg
bnVtYmVyT2ZEYXNocyA9IHN0ZDo6bWF4KGRpc3BsYXlTaXplT2ZOdW1iZXIobV9yYW5nZS5tYXhp
bXVtKSwgZGlzcGxheVNpemVPZk51bWJlcihtX3JhbmdlLm1pbmltdW0pKTsgbnVtYmVyT2ZEYXNo
czsgLS1udW1iZXJPZkRhc2hzKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51
bWVyaWNGaWVsZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYjM5ODI1MGMyODUwMjk5YzQxNTVh
MGU4NWVjOGI4MTRlMWQxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAq
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnRfaAor
I2RlZmluZSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVU
X1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1l
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQgcmVwcmVzZW50cyBudW1lcmljIGZpZWxkIG9mIGRhdGUgdGltZSBmb3JtYXQsCisvLyBz
dWNoIGFzOgorLy8gIC0gaG91cgorLy8gIC0gbWludXRlCisvLyAgLSBtaWxsaXNlY29uZAorLy8g
IC0gc2Vjb25kCisvLyAgLSB5ZWFyCitjbGFzcyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQg
OiBwdWJsaWMgRGF0ZVRpbWVGaWVsZEVsZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk7CisKK3Byb3RlY3RlZDoKKyAgICBzdHJ1Y3Qg
UmFuZ2UgeworICAgICAgICBSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworICAgICAg
ICBpbnQgY2xhbXBWYWx1ZShpbnQpIGNvbnN0OworCisgICAgICAgIGludCBtYXhpbXVtOworICAg
ICAgICBpbnQgbWluaW11bTsKKyAgICB9OworCisgICAgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGlt
dW0pOworCisgICAgaW50IGNsYW1wVmFsdWUoaW50IHZhbHVlKSBjb25zdCB7IHJldHVybiBtX3Jh
bmdlLmNsYW1wVmFsdWUodmFsdWUpOyB9CisgICAgY29uc3QgUmFuZ2UmIHJhbmdlKCkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZTsgfQorCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rp
b25zLgorICAgIHZpcnR1YWwgYm9vbCBoYXNWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzSW50ZWdlcihpbnQsIEV2ZW50QmVoYXZpb3IgPSBE
aXNwYXRjaE5vRXZlbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2Vy
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisKK3ByaXZhdGU6CisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1l
bnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW1wdHlWYWx1
ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUZvclJlYWRPbmx5RmllbGQsIEV2ZW50QmVoYXZp
b3IpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpIE9WRVJSSURF
IEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworCisgICAgRE9NVGlt
ZVN0YW1wIG1fbGFzdERpZ2l0Q2hhclRpbWU7CisgICAgY29uc3QgUmFuZ2UgbV9yYW5nZTsKKyAg
ICBpbnQgbV92YWx1ZTsKKyAgICBib29sIG1faGFzVmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA4ZWI1MjIyOWNhYmI5OTllOTY5NDljYzZmZDU3NWNkYWYyNDg0NmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50LmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykK
KyNpbmNsdWRlICJEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJL
ZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OkRhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxl
ciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzeW1ib2xzKQorICAg
IDogRGF0ZVRpbWVGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyKQorICAg
ICwgbV9zeW1ib2xzKHN5bWJvbHMpCisgICAgLCBtX3NlbGVjdGVkSW5kZXgoLTEpCit7CisgICAg
QVNTRVJUKCFzeW1ib2xzLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0Zp
ZWxkRWxlbWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2
ZW50KQoreworICAgIGlmIChrZXlib2FyZEV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtl
eXByZXNzRXZlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFVDaGFyIGNoYXJDb2Rl
ID0gV1RGOjpVbmljb2RlOjp0b0xvd2VyKGtleWJvYXJkRXZlbnQtPmNoYXJDb2RlKCkpOworICAg
IGlmIChjaGFyQ29kZSA8ICcgJykKKyAgICAgICAgcmV0dXJuOworCisgICAga2V5Ym9hcmRFdmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBtX3N5bWJvbHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGlmICghbV9zeW1ib2xz
W2luZGV4XS5pc0VtcHR5KCkgJiYgV1RGOjpVbmljb2RlOjp0b0xvd2VyKG1fc3ltYm9sc1tpbmRl
eF1bMF0pID09IGNoYXJDb2RlKSB7CisgICAgICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihpbmRl
eCwgRGlzcGF0Y2hFdmVudCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
Cit9CisKK2Jvb2wgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6aGFzVmFsdWUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW5kZXggPj0gMDsKK30KKwordm9pZCBEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50OjpzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRz
JiwgRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9
IGludmFsaWRJbmRleDsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlvcik7Cit9
CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIo
aW50IG5ld1NlbGVjdGVkSW5kZXgsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAg
ICBtX3NlbGVjdGVkSW5kZXggPSBzdGQ6Om1heCgwLCBzdGQ6Om1pbihuZXdTZWxlY3RlZEluZGV4
LCBzdGF0aWNfY2FzdDxpbnQ+KG1fc3ltYm9scy5zaXplKCkgLSAxKSkpOworICAgIHVwZGF0ZVZp
c2libGVWYWx1ZShldmVudEJlaGF2aW9yKTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50OjpzdGVwRG93bigpCit7CisgICAgY29uc3QgaW50IHNpemUgPSBtX3N5bWJvbHMu
c2l6ZSgpOworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9zZWxlY3RlZElu
ZGV4ICsgc2l6ZSAtIDEpICUgc2l6ZSA6IHNpemUgLSAxOworICAgIHVwZGF0ZVZpc2libGVWYWx1
ZShEaXNwYXRjaEV2ZW50KTsKK30KKwordm9pZCBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50
OjpzdGVwVXAoKQoreworICAgIG1fc2VsZWN0ZWRJbmRleCA9IGhhc1ZhbHVlKCkgPyAobV9zZWxl
Y3RlZEluZGV4ICsgMSkgJSBtX3N5bWJvbHMuc2l6ZSgpIDogMDsKKyAgICB1cGRhdGVWaXNpYmxl
VmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50Ojp2YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5bWJv
bHNbbV9zZWxlY3RlZEluZGV4XSA6IGVtcHR5U3RyaW5nKCk7Cit9CisKK2ludCBEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2VsZWN0ZWRJbmRleDsKK30KKworU3RyaW5nIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1l
bnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBtX3N5
bWJvbHNbbV9zZWxlY3RlZEluZGV4XSA6ICItLSI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9E
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMyOWRkMTE0MTVkNmJh
YjJlMDdkMDNmMDc2NTFhYzM1OTIyYWUwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudF9oCisKKyNpZiBF
TkFCTEUoSU5QVVRfVFlQRV9USU1FX01VTFRJUExFX0ZJRUxEUykKKyNpbmNsdWRlICJEYXRlVGlt
ZUZpZWxkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQgcmVwcmVzZW50cyBub24tbnVtZXJpYyBmaWVsZCBvZiBkYXRhIHRp
bWUKKy8vIGZvcm1hdCwgc3VjaCBhczogQU0vUE0sIGFuZCBtb250aC4KK2NsYXNzIERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQgOiBwdWJsaWMgRGF0ZVRpbWVGaWVsZEVsZW1lbnQgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQpOworCitw
cm90ZWN0ZWQ6CisgICAgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudChEb2N1bWVudCosIEZp
ZWxkRXZlbnRIYW5kbGVyJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50
KSBPVkVSUklERSBGSU5BTDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IGludmFs
aWRJbmRleCA9IC0xOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVuY3Rpb25zLgor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVS
UklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsdWUoKSBjb25zdCBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW1wdHlWYWx1ZShjb25zdCBEYXRlQ29tcG9uZW50
cyYgZGF0ZUZvclJlYWRPbmx5RmllbGQsIEV2ZW50QmVoYXZpb3IgPSBEaXNwYXRjaE5vRXZlbnQp
IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwRG93bigpIE9WRVJSSURFIEZJ
TkFMOworICAgIHZpcnR1YWwgdm9pZCBzdGVwVXAoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0
dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50
IHZhbHVlQXNJbnRlZ2VyKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJp
bmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiBtX3N5bWJvbHM7CisgICAgaW50IG1fc2VsZWN0ZWRJbmRleDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157687</attachid>
            <date>2012-08-10 02:23:30 -0700</date>
            <delta_ts>2012-08-10 02:25:05 -0700</delta_ts>
            <desc>Patch 13</desc>
            <filename>bug-92960-20120810182301.patch</filename>
            <type>text/plain</type>
            <size>66766</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTZmOTg1MmNhNzIwMzYx
MDdhMDc3OTQyYzg4Y2ExNDU2ZmVkMmEyNi4uMzAzMGZkZjdlMGRmYzAxNDJjM2VhZTQwYjg5ODky
ZjAwYmI5Y2YwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAxMi0wOC0wOSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gSW50
cm9kdWNlIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQgVUkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHNoYWRvdyBlbGVtZW50cyBmb3IgbXVsdGlwbGUgZmllbGRzIHRpbWUgaW5wdXQg
VUk6CisgICAgICAgICAgICAtIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCAtIGZpZWxkIFVJIGZv
ciBBTS9QTQorICAgICAgICAgICAgLSBEYXRlVGltZUVkaXRFbGVtZW50IC0gY29udGFpbmVyIG9m
IG11bHRpcGxlIERhdGVUaW1lRmllbGRFbGVtZW50CisgICAgICAgICAgICAtIERhdGVUaW1lRmll
bGRFbGVtZW50IC0gYmFzZSBjbGFzcyBvZiBmaWVsZCBVSQorICAgICAgICAgICAgLSBEYXRlVGlt
ZUhvdXJGaWVsZEVsZW1lbnQgLSBmaWVsZCBVSSBmb3IgaG91cgorICAgICAgICAgICAgLSBEYXRl
VGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1pbGxpc2Vjb25kCisg
ICAgICAgICAgICAtIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIG1p
bnV0ZQorICAgICAgICAgICAgLSBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQgLSBiYXNlIGNs
YXNzIG9mIG51bWVyaWMgZmllbGQgVUkuCisgICAgICAgICAgICAtIERhdGVUaW1lU2Vjb25kRmll
bGRFbGVtZW50IC0gZmllbGQgVUkgZm9yIHNlY29uZAorICAgICAgICAgICAgLSBEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50IC0gYmFzZSBjbGFzcyBmb3Igc3ltYm9saWMgZmllbGQgVUkKKyAg
ICAgICAgaW5zaWRlIG9mIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTIGJ1
aWxkIGZsYWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgY2hh
bmdlIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBDaGFuZ2VkIHRvIGluY2x1
ZGUgaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hh
ZG93L0RhdGVUaW1lRWRkaXRFbGVtZW50LmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVt
ZW50LmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCwgaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmNwcCwKKyAgICAgICAgaHRtbC9zaGFkb3cv
RGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgsIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxk
RWxlbWVudC5jcHAsCisgICAgICAgIGh0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudC5oLCBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcCwKKyAg
ICAgICAgYW5kIGh0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaC4KKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcDogQWRkZWQuCisgICAg
ICAgIChEYXRlVGltZUVkaXRCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0QnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVp
bGRlcjo6bmVlZE1pbGxpc2Vjb25kRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVF
ZGl0QnVpbGRlcjo6bmVlZE1pbnV0ZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
RWRpdEJ1aWxkZXI6Om5lZWRTZWNvbmRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZUVkaXRCdWlsZGVyOjpzaG91bGRNaWxsaXNlY29uZEZpZWxkUmVhZE9ubHkpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6c2hvdWxkTWludXRlRmllbGRSZWFkT25seSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRCdWlsZGVyOjpzaG91bGRTZWNvbmRGaWVs
ZFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRMaXRl
cmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OkVkaXRDb250cm9s
T3duZXI6On5FZGl0Q29udHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRp
dEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0RWxlbWVudDo6fkRhdGVUaW1lRWRpdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVFZGl0RWxlbWVudDo6YWRkRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVFZGl0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKTogQ2FsbGVkIHdoZW4gb3duZXIncyBkaXNhYmxl
ZCBzdGF0ZSBpcyBjaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVu
dDo6ZmllbGRBdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpmb2N1
c0ZpZWxkQXQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6aGFuZGxl
S2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojpm
aWVsZFZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
Ojpmb2N1c09uTmV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1l
bnQ6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxl
bWVudDo6aXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6Omxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpuZXh0RmllbGRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpwcmV2aW91c0Zp
ZWxkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6cmVhZE9u
bHlTdGF0ZUNoYW5nZWQpOiBDYWxsZWQgd2hlbiBvd25lcidzIHJlYWRPbmx5IHN0YXRlIGlzIGNo
YW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpyZXNldExheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVl
QXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldEVtcHR5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1dHRv
blN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnNwaW5C
dXR0b25TdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6dXBk
YXRlVUlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50Ojp2YWx1
ZUFzRG91YmxlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50Lmg6
IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVFZGl0RWxlbWVudCk6CisgICAgICAgIChFZGl0Q29u
dHJvbE93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlbW92
ZUVkaXRDb250cm9sT3duZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRF
bGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVu
dDo6RmllbGRFdmVudEhhbmRsZXI6On5GaWVsZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRLZXlib2FyZEV2
ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6Zm9j
dXNPbk5leHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6aXNS
ZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0UmVh
ZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0ZVZp
c2libGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6dmFs
dWVBc0RvdWJsZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQu
aDogQWRkZWQuCisgICAgICAgIChEYXRlVGltZUZpZWxkRWxlbWVudCk6CisgICAgICAgIChGaWVs
ZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUZpZWxkRWxlbWVudDo6
cmVtb3ZlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZUZpZWxk
RWxlbWVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lQU1QTUZpZWxk
RWxlbWVudDo6RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lQU1QTUZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNE
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6c2V0VmFs
dWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50
Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUhvdXJGaWVs
ZEVsZW1lbnQ6OnZhbHVlQXNJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWls
bGlzZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OnNl
dFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTWlsbGlzZWNvbmRGaWVs
ZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1l
TWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlz
ZWNvbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6OkRh
dGVUaW1lU2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU2Vj
b25kRmllbGRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTZWNv
bmRGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVU
aW1lU2Vjb25kRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCk6CisgICAgICAgICogaHRt
bC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRp
bWVBTVBNRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudCk6
CisgICAgICAgIChEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KToKKyAgICAgICAgKERh
dGVUaW1lTWludXRlRmllbGRFbGVtZW50KToKKyAgICAgICAgKERhdGVUaW1lU2Vjb25kRmllbGRF
bGVtZW50KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlTaXplT2ZOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5nZTo6UmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpSYW5n
ZTo6Y2x1bXBWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQ6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYXNWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1
ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1l
bnQ6OnN0ZXBEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudDo6c3RlcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50Ojp2YWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNG
aWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRp
bWVOdW1lcmljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxl
bWVudDo6Y2x1bXBWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQ6OnJhbmdlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGlj
RmllbGRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJv
bGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtleWJvYXJkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6aGFz
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6
c2V0RW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5bWJvbGljRmllbGRF
bGVtZW50OjpzZXRWYWx1ZUFzSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN5
bWJvbGljRmllbGRFbGVtZW50OjpzdGVwRG93bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGlt
ZVN5bWJvbGljRmllbGRFbGVtZW50OjpzdGVwVXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRp
bWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWVBc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmlzaWJsZVZhbHVlKToKKyAgICAgICAg
KiBodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Lmg6IEFkZGVkLgorICAg
ICAgICAoRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudCk6CisKIDIwMTItMDgtMTAgIFRvbnkg
Q2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBpbXBsZW1lbnQgZGlzcGxheTog
LXdlYmtpdC1pbmxpbmUtZmxleApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZmMjZmNTUyZWI3ZDg2ZGFm
NmU3N2ZlZTNmOGZhNzgzMWE0MDY1NDAuLjNmMDAyODA0YWRhYjM5NTdlYTg5NjgzNmUxYTFjNGI4
Nzg2MjUxNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU3NDIsNiArNTc0MiwxNiBAQAogICAgICAg
ICAgICAgJ2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5oJywKICAgICAgICAgICAgICdo
dG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
c2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93
L0RhdGVUaW1lRWRpdEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRl
VGltZUVkaXRFbGVtZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVs
ZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRz
LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgn
LAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVu
dC5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVt
ZW50LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9EZXRhaWxzTWFya2VyQ29udHJv
bC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmgn
LAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wZWQxZGFjYzNkZDdjMDIxMDIxNGVlZmVmMDFjMTg4YjU0ZmVhYTg5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxl
bWVudC5jcHAKQEAgLTAsMCArMSw0NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisj
aW5jbHVkZSAiRGF0ZVRpbWVFZGl0RWxlbWVudC5oIgorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVu
dHMuaCIKKyNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudHMuaCIKKyNpbmNsdWRlICJEYXRl
VGltZUZvcm1hdC5oIgorI2luY2x1ZGUgIkRhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkRGF0ZS5oIgorI2luY2x1
ZGUgIkxvY2FsaXplZE51bWJlci5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRl
ICJTdGVwUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL0RhdGVNYXRo
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2NsYXNzIERhdGVUaW1lRWRp
dEJ1aWxkZXIgOiBwcml2YXRlIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lRWRpdEJ1aWxkZXIpOworCitwdWJsaWM6CisgICAg
RGF0ZVRpbWVFZGl0QnVpbGRlcihEYXRlVGltZUVkaXRFbGVtZW50JiwgY29uc3QgU3RlcFJhbmdl
Jik7CisKKyAgICBib29sIGJ1aWxkKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgbmVlZFNlY29u
ZEZpZWxkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBuZWVkTWlsbGlzZWNvbmRGaWVs
ZCgpIGNvbnN0OworICAgIGJvb2wgbmVlZE1pbnV0ZUZpZWxkKCkgY29uc3Q7CisgICAgYm9vbCBz
aG91bGRNaWxsaXNlY29uZEZpZWxkUmVhZE9ubHkoKSBjb25zdDsKKyAgICBib29sIHNob3VsZE1p
bnV0ZUZpZWxkUmVhZE9ubHkoKSBjb25zdDsKKyAgICBib29sIHNob3VsZFNlY29uZEZpZWxkUmVh
ZE9ubHkoKSBjb25zdDsKKworICAgIC8vIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgZnVu
Y3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGUsIGludCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TGl0ZXJh
bChjb25zdCBTdHJpbmcmKSBPVkVSUklERSBGSU5BTDsKKworICAgIERhdGVUaW1lRWRpdEVsZW1l
bnQmIG1fZWRpdEVsZW1lbnQ7CisgICAgY29uc3QgU3RlcFJhbmdlJiBtX3N0ZXBSYW5nZTsKK307
CisKK0RhdGVUaW1lRWRpdEJ1aWxkZXI6OkRhdGVUaW1lRWRpdEJ1aWxkZXIoRGF0ZVRpbWVFZGl0
RWxlbWVudCYgZWxlbW50LCBjb25zdCBTdGVwUmFuZ2UmIHN0ZXBSYW5nZSkKKyAgICA6IG1fZWRp
dEVsZW1lbnQoZWxlbW50KQorICAgICwgbV9zdGVwUmFuZ2Uoc3RlcFJhbmdlKQoreworfQorCiti
b29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OmJ1aWxkKGNvbnN0IFN0cmluZyYgZm9ybWF0U3RyaW5n
KQoreworICAgIG1fZWRpdEVsZW1lbnQucmVzZXRMYXlvdXQoKTsKKyAgICByZXR1cm4gRGF0ZVRp
bWVGb3JtYXQ6OnBhcnNlKGZvcm1hdFN0cmluZywgKnRoaXMpOworfQorCitib29sIERhdGVUaW1l
RWRpdEJ1aWxkZXI6Om5lZWRNaWxsaXNlY29uZEZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
IW1fc3RlcFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1BlclNl
Y29uZCkpLmlzWmVybygpCisgICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVy
KHN0YXRpY19jYXN0PGludD4obXNQZXJTZWNvbmQpKS5pc1plcm8oKTsKK30KKworYm9vbCBEYXRl
VGltZUVkaXRCdWlsZGVyOjpuZWVkTWludXRlRmllbGQoKSBjb25zdAoreworICAgIHJldHVybiAh
bV9zdGVwUmFuZ2UubWluaW11bSgpLnJlbWFpbmRlcihzdGF0aWNfY2FzdDxpbnQ+KG1zUGVySG91
cikpLmlzWmVybygpCisgICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVyKHN0
YXRpY19jYXN0PGludD4obXNQZXJIb3VyKSkuaXNaZXJvKCk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVF
ZGl0QnVpbGRlcjo6bmVlZFNlY29uZEZpZWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fc3Rl
cFJhbmdlLm1pbmltdW0oKS5yZW1haW5kZXIoc3RhdGljX2Nhc3Q8aW50Pihtc1Blck1pbnV0ZSkp
LmlzWmVybygpCisgICAgICAgIHx8ICFtX3N0ZXBSYW5nZS5zdGVwKCkucmVtYWluZGVyKHN0YXRp
Y19jYXN0PGludD4obXNQZXJNaW51dGUpKS5pc1plcm8oKTsKK30KKwordm9pZCBEYXRlVGltZUVk
aXRCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBl
LCBpbnQpCit7CisgICAgRG9jdW1lbnQqIGNvbnN0IGRvY3VtZW50ID0gbV9lZGl0RWxlbWVudC5k
b2N1bWVudCgpOworCisgICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKKyAgICBjYXNlIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVIb3VyMTE6CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQo
RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQs
IDAsIDExKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUhvdXIxMjoKKyAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhv
dXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMSwgMTIpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91
cjIzOgorICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50LCAwLCAyMykpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CisgICAg
ICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIDEsIDI0KSk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZTogeworICAgICAgICBSZWZQ
dHI8RGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50PiBmaWVsZCA9IERhdGVUaW1lTWludXRlRmll
bGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQpOworICAgICAgICBtX2Vk
aXRFbGVtZW50LmFkZEZpZWxkKGZpZWxkKTsKKyAgICAgICAgaWYgKHNob3VsZE1pbnV0ZUZpZWxk
UmVhZE9ubHkoKSkKKyAgICAgICAgICAgIGZpZWxkLT5zZXRSZWFkT25seSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVyaW9k
OgorICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKERhdGVUaW1lQU1QTUZpZWxkRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50LCB0aW1lQU1QTUxhYmVscygpKSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29u
ZDogeworICAgICAgICBSZWZQdHI8RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0g
RGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVu
dCk7CisgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoZmllbGQpOworICAgICAgICBpZiAo
c2hvdWxkU2Vjb25kRmllbGRSZWFkT25seSgpKQorICAgICAgICAgICAgZmllbGQtPnNldFJlYWRP
bmx5KCk7CisKKyAgICAgICAgaWYgKG5lZWRNaWxsaXNlY29uZEZpZWxkKCkpIHsKKyAgICAgICAg
ICAgIHZpc2l0TGl0ZXJhbChsb2NhbGl6ZWREZWNpbWFsU2VwYXJhdG9yKCkpOworICAgICAgICAg
ICAgdmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZCwg
Myk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQ6IHsKKyAgICAgICAgUmVmUHRyPERh
dGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gRGF0ZVRpbWVNaWxsaXNlY29u
ZEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50KTsKKyAgICAgICAg
bV9lZGl0RWxlbWVudC5hZGRGaWVsZChmaWVsZCk7CisgICAgICAgIGlmIChzaG91bGRNaWxsaXNl
Y29uZEZpZWxkUmVhZE9ubHkoKSkKKyAgICAgICAgICAgIGZpZWxkLT5zZXRSZWFkT25seSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworYm9vbCBEYXRlVGltZUVkaXRCdWlsZGVyOjpzaG91bGRNaWxsaXNlY29uZEZp
ZWxkUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0ZXBSYW5nZS5zdGVwKCkucmVt
YWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJTZWNvbmQpKS5pc1plcm8oKTsKK30KKworYm9v
bCBEYXRlVGltZUVkaXRCdWlsZGVyOjpzaG91bGRNaW51dGVGaWVsZFJlYWRPbmx5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdGVwUmFuZ2Uuc3RlcCgpLnJlbWFpbmRlcihzdGF0aWNfY2FzdDxp
bnQ+KG1zUGVySG91cikpLmlzWmVybygpOworfQorCitib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OnNob3VsZFNlY29uZEZpZWxkUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0ZXBS
YW5nZS5zdGVwKCkucmVtYWluZGVyKHN0YXRpY19jYXN0PGludD4obXNQZXJNaW51dGUpKS5pc1pl
cm8oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdExpdGVyYWwoY29uc3Qg
U3RyaW5nJiB0ZXh0KQoreworICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpKTsKKyAgICBtX2VkaXRF
bGVtZW50LmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShtX2VkaXRFbGVtZW50LmRvY3VtZW50KCks
IHRleHQpKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEYXRlVGlt
ZUVkaXRFbGVtZW50OjpFZGl0Q29udHJvbE93bmVyOjp+RWRpdENvbnRyb2xPd25lcigpCit7Cit9
CisKK0RhdGVUaW1lRWRpdEVsZW1lbnQ6OkRhdGVUaW1lRWRpdEVsZW1lbnQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBFZGl0Q29udHJvbE93bmVyJiBlZGl0Q29udHJvbE93bmVyKQorICAgIDogSFRNTERp
dkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKKyAgICAsIG1fZWRpdENvbnRyb2xPd25lcigmZWRp
dENvbnRyb2xPd25lcikKKyAgICAsIG1fc3BpbkJ1dHRvbigwKQorICAgICwgbV9mb2N1c0ZpZWxk
SW5kZXgoaW52YWxpZEZpZWxkSW5kZXgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIGRhdGVUaW1lRWRpdFBzZXVkb0lkLCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdCIp
KTsKKyAgICBzZXRTaGFkb3dQc2V1ZG9JZChkYXRlVGltZUVkaXRQc2V1ZG9JZCk7Cit9CisKK0Rh
dGVUaW1lRWRpdEVsZW1lbnQ6On5EYXRlVGltZUVkaXRFbGVtZW50KCkKK3sKKyAgICBmb3IgKHNp
emVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVs
ZEluZGV4KQorICAgICAgICBtX2ZpZWxkc1tmaWVsZEluZGV4XS0+cmVtb3ZlRXZlbnRIYW5kbGVy
KCk7CisKKyAgICBpZiAobV9zcGluQnV0dG9uKQorICAgICAgICBtX3NwaW5CdXR0b24tPnJlbW92
ZVN0ZXBBY3Rpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6YWRk
RmllbGQoUGFzc1JlZlB0cjxEYXRlVGltZUZpZWxkRWxlbWVudD4gZmllbGQpCit7CisgICAgaWYg
KG1fZmllbGRzLnNpemUoKSA9PSBtX2ZpZWxkcy5jYXBhY2l0eSgpKQorICAgICAgICByZXR1cm47
CisgICAgbV9maWVsZHMuYXBwZW5kKGZpZWxkLmdldCgpKTsKKyAgICBhcHBlbmRDaGlsZChmaWVs
ZCk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRpbWVFZGl0RWxlbWVudD4gRGF0ZVRpbWVFZGl0RWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRWRpdENvbnRyb2xPd25lciYgZWRpdENv
bnRyb2xPd25lciwgY29uc3QgU3RlcFJhbmdlJiBzdGVwUmFuZ2UpCit7CisgICAgUmVmUHRyPERh
dGVUaW1lRWRpdEVsZW1lbnQ+IGNvbnRhaW5lciA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZUVkaXRF
bGVtZW50KGRvY3VtZW50LCBlZGl0Q29udHJvbE93bmVyKSk7CisgICAgY29udGFpbmVyLT5sYXlv
dXQoc3RlcFJhbmdlKTsKKyAgICByZXR1cm4gY29udGFpbmVyLnJlbGVhc2UoKTsKK30KKwordm9p
ZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgpCit7CisgICAgdXBk
YXRlVUlTdGF0ZSgpOworfQorCitEYXRlVGltZUZpZWxkRWxlbWVudCogRGF0ZVRpbWVFZGl0RWxl
bWVudDo6ZmllbGRBdChzaXplX3QgZmllbGRJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmll
bGRJbmRleCA8IG1fZmllbGRzLnNpemUoKSA/IG1fZmllbGRzW2ZpZWxkSW5kZXhdIDogMDsKK30K
Kwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50Ojpmb2N1c0ZpZWxkQXQoc2l6ZV90IG5ld0ZvY3Vz
RmllbGRJbmRleCkKK3sKKyAgICBpZiAobV9mb2N1c0ZpZWxkSW5kZXggPT0gbmV3Rm9jdXNGaWVs
ZEluZGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogY29u
c3QgbmV3Rm9jdXNGaWVsZCA9IGZpZWxkQXQobmV3Rm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAo
bmV3Rm9jdXNGaWVsZCAmJiBuZXdGb2N1c0ZpZWxkLT5pc1JlYWRPbmx5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBjdXJyZW50Rm9jdXNGaWVs
ZCA9IGZpZWxkQXQobV9mb2N1c0ZpZWxkSW5kZXgpOworCisgICAgaWYgKGN1cnJlbnRGb2N1c0Zp
ZWxkKQorICAgICAgICBjdXJyZW50Rm9jdXNGaWVsZC0+c2V0Rm9jdXMoZmFsc2UpOworCisgICAg
aWYgKCFuZXdGb2N1c0ZpZWxkKSB7CisgICAgICAgIG1fZm9jdXNGaWVsZEluZGV4ID0gaW52YWxp
ZEZpZWxkSW5kZXg7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2ZvY3VzRmllbGRJ
bmRleCA9IG5ld0ZvY3VzRmllbGRJbmRleDsKKyAgICBuZXdGb2N1c0ZpZWxkLT5zZXRGb2N1cyh0
cnVlKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGlzRGlzYWJsZWQoKSB8
fCBpc1JlYWRPbmx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZmllbGRBdChtX2Zv
Y3VzRmllbGRJbmRleCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChrZXlib2FyZEV2ZW50
LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+a2V5SWRl
bnRpZmllcigpOworCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkxlZnQiKSB7CisgICAgICAg
IGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIGNvbnN0IHNpemVf
dCBmaWVsZEluZGV4ID0gcHJldmlvdXNGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChmaWVsZEF0
KGZpZWxkSW5kZXgpKQorICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlJpZ2h0Iikg
eworICAgICAgICBrZXlib2FyZEV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBj
b25zdCBzaXplX3QgZmllbGRJbmRleCA9IG5leHRGaWVsZEluZGV4KCk7CisgICAgICAgIGlmIChm
aWVsZEF0KGZpZWxkSW5kZXgpKQorICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIlUr
MDAwOSIpIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGZpZWxkSW5kZXggPSBrZXlib2FyZEV2ZW50
LT5nZXRNb2RpZmllclN0YXRlKCJTaGlmdCIpID8gcHJldmlvdXNGaWVsZEluZGV4KCkgOiBuZXh0
RmllbGRJbmRleCgpOworICAgICAgICBpZiAoZmllbGRBdChmaWVsZEluZGV4KSkgeworICAgICAg
ICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGZv
Y3VzRmllbGRBdChmaWVsZEluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZFZhbHVlQ2hhbmdlZCgp
Cit7CisgICAgaWYgKG1fZWRpdENvbnRyb2xPd25lcikKKyAgICAgICAgbV9lZGl0Q29udHJvbE93
bmVyLT5lZGl0Q29udHJvbFZhbHVlQ2hhbmdlZCgpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmZvY3VzT25OZXh0RmllbGQoKQoreworICAgIGlmIChtX2ZvY3VzRmllbGRJbmRleCAh
PSBpbnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAgZm9jdXNGaWVsZEF0KG5leHRGaWVsZEluZGV4
KCkpOworfQorCit2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFdmVudCogbW91c2VFdmVudCkKK3sKKyAgICBpZiAoaXNEaXNhYmxlZCgpIHx8IGlzUmVhZE9u
bHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUoKSAhPSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgbW91c2VFdmVudC0+YnV0dG9uKCkgIT0gTGVm
dEJ1dHRvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogY29uc3QgcmVsYXRlZFRhcmdl
dCA9IG1vdXNlRXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBmb3IgKHNpemVfdCBmaWVs
ZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVsZEluZGV4KSB7
CisgICAgICAgIGlmIChtX2ZpZWxkc1tmaWVsZEluZGV4XSA9PSByZWxhdGVkVGFyZ2V0KSB7Cisg
ICAgICAgICAgICBtb3VzZUV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
Zm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICAgICAgaWYgKG1fZWRpdENvbnRyb2xP
d25lcikKKyAgICAgICAgICAgICAgICBtX2VkaXRDb250cm9sT3duZXItPmVkaXRDb250cm9sTW91
c2VGb2N1cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jv
b2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aXNEaXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZWRpdENvbnRyb2xPd25lciAmJiBtX2VkaXRDb250cm9sT3duZXItPmlzRWRpdENvbnRyb2xP
d25lckRpc2FibGVkKCk7Cit9CisKK2Jvb2wgRGF0ZVRpbWVFZGl0RWxlbWVudDo6aXNSZWFkT25s
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWRpdENvbnRyb2xPd25lciAmJiBtX2VkaXRDb250
cm9sT3duZXItPmlzRWRpdENvbnRyb2xPd25lclJlYWRPbmx5KCk7Cit9CisKK3ZvaWQgRGF0ZVRp
bWVFZGl0RWxlbWVudDo6bGF5b3V0KGNvbnN0IFN0ZXBSYW5nZSYgc3RlcFJhbmdlKQoreworICAg
IERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmb2N1c0ZpZWxkID0gZmllbGRBdChtX2ZvY3Vz
RmllbGRJbmRleCk7CisgICAgZm9jdXNGaWVsZEF0KGludmFsaWRGaWVsZEluZGV4KTsKKworICAg
IERhdGVUaW1lRWRpdEJ1aWxkZXIgYnVpbGRlcigqdGhpcywgc3RlcFJhbmdlKTsKKyAgICBjb25z
dCBTdHJpbmcgZGF0ZVRpbWVGb3JtYXQgPSBidWlsZGVyLm5lZWRTZWNvbmRGaWVsZCgpID8gbG9j
YWxpemVkVGltZUZvcm1hdFRleHQoKSA6IGxvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQoKTsK
KyAgICBpZiAoIWJ1aWxkZXIuYnVpbGQoZGF0ZVRpbWVGb3JtYXQpIHx8IG1fZmllbGRzLmlzRW1w
dHkoKSkKKyAgICAgICAgYnVpbGRlci5idWlsZChidWlsZGVyLm5lZWRTZWNvbmRGaWVsZCgpID8g
IkhIOm1tOnNzIiA6ICJISDptbSIpOworCisgICAgUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50PiBz
cGluQnV0dG9uID0gU3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCAqdGhpcyk7
CisgICAgbV9zcGluQnV0dG9uID0gc3BpbkJ1dHRvbi5nZXQoKTsKKyAgICBhcHBlbmRDaGlsZChz
cGluQnV0dG9uKTsKKworICAgIGlmIChmb2N1c0ZpZWxkKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgbV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5k
ZXgpIHsKKyAgICAgICAgICAgIGlmIChmb2N1c0ZpZWxkID09IG1fZmllbGRzW2ZpZWxkSW5kZXhd
KSB7CisgICAgICAgICAgICAgICAgZm9jdXNGaWVsZEF0KGZpZWxkSW5kZXgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzaXpl
X3QgRGF0ZVRpbWVFZGl0RWxlbWVudDo6bmV4dEZpZWxkSW5kZXgoKSBjb25zdAoreworICAgIEFT
U0VSVChtX2ZvY3VzRmllbGRJbmRleCAhPSBpbnZhbGlkRmllbGRJbmRleCk7CisgICAgZm9yIChz
aXplX3QgZmllbGRJbmRleCA9IG1fZm9jdXNGaWVsZEluZGV4ICsgMTsgZmllbGRJbmRleCA8IG1f
ZmllbGRzLnNpemUoKTsgKytmaWVsZEluZGV4KSB7CisgICAgICAgIGlmICghbV9maWVsZHNbZmll
bGRJbmRleF0tPmlzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmaWVsZEluZGV4Owor
ICAgIH0KKyAgICByZXR1cm4gbV9maWVsZHMuc2l6ZSgpOworfQorCitzaXplX3QgRGF0ZVRpbWVF
ZGl0RWxlbWVudDo6cHJldmlvdXNGaWVsZEluZGV4KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9m
b2N1c0ZpZWxkSW5kZXggIT0gaW52YWxpZEZpZWxkSW5kZXgpOworICAgIHNpemVfdCBmaWVsZElu
ZGV4ID0gbV9mb2N1c0ZpZWxkSW5kZXg7CisgICAgd2hpbGUgKGZpZWxkSW5kZXggPiAwKSB7Cisg
ICAgICAgIC0tZmllbGRJbmRleDsKKyAgICAgICAgaWYgKCFtX2ZpZWxkc1tmaWVsZEluZGV4XS0+
aXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGZpZWxkSW5kZXg7CisgICAgfQorICAg
IHJldHVybiBpbnZhbGlkRmllbGRJbmRleDsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
OjpyZWFkT25seVN0YXRlQ2hhbmdlZCgpCit7CisgICAgdXBkYXRlVUlTdGF0ZSgpOworfQorCit2
b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnJlc2V0TGF5b3V0KCkKK3sKKyAgICBtX2ZpZWxkcy5z
aHJpbmsoMCk7CisgICAgbV9zcGluQnV0dG9uID0gMDsKKyAgICBtX2ZvY3VzRmllbGRJbmRleCA9
IGludmFsaWRGaWVsZEluZGV4OworICAgIHJlbW92ZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgRGF0
ZVRpbWVFZGl0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7Cisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpIHsKKyAgICAg
ICAgaWYgKCFpc0Rpc2FibGVkKCkgJiYgIWlzUmVhZE9ubHkoKSAmJiBtX2ZvY3VzRmllbGRJbmRl
eCA9PSBpbnZhbGlkRmllbGRJbmRleCkKKyAgICAgICAgICAgIGZvY3VzRmllbGRBdCgwKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5ibHVyRXZlbnQpIHsKKyAgICAgICAgZm9jdXNGaWVsZEF0KGludmFsaWRGaWVsZEluZGV4
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50
KCkpIHsKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4o
ZXZlbnQpKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAg
ICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQp
KTsKKworICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmllbGQgPSBmaWVsZEF0KG1f
Zm9jdXNGaWVsZEluZGV4KTsKKyAgICBpZiAoIWZvY3VzRmllbGQpCisgICAgICAgIHJldHVybjsK
KworICAgIGZvY3VzRmllbGQtPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2b2lk
IERhdGVUaW1lRWRpdEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25lbnRz
JiBkYXRlKQoreworICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwg
bV9maWVsZHMuc2l6ZSgpOyArK2ZpZWxkSW5kZXgpCisgICAgICAgIG1fZmllbGRzW2ZpZWxkSW5k
ZXhdLT5zZXRWYWx1ZUFzRGF0ZShkYXRlKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50
OjpzZXRFbXB0eVZhbHVlKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlRm9yUmVhZE9ubHlGaWVs
ZCkKK3sKKyAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fZmll
bGRzLnNpemUoKTsgKytmaWVsZEluZGV4KQorICAgICAgICBtX2ZpZWxkc1tmaWVsZEluZGV4XS0+
c2V0RW1wdHlWYWx1ZShkYXRlRm9yUmVhZE9ubHlGaWVsZCwgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6
OkRpc3BhdGNoTm9FdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6c3BpbkJ1
dHRvblN0ZXBEb3duKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZv
Y3VzRmllbGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVs
ZC0+c3RlcERvd24oKTsKK30KKwordm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpzcGluQnV0dG9u
U3RlcFVwKCkKK3sKKyAgICBpZiAoRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIGNvbnN0IGZvY3VzRmll
bGQgPSBmaWVsZEF0KG1fZm9jdXNGaWVsZEluZGV4KSkKKyAgICAgICAgZm9jdXNGaWVsZC0+c3Rl
cFVwKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVFZGl0RWxlbWVudDo6dXBkYXRlVUlTdGF0ZSgpCit7
CisgICAgaWYgKGlzRGlzYWJsZWQoKSB8fCBpc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgbV9zcGlu
QnV0dG9uLT5yZWxlYXNlQ2FwdHVyZSgpOworICAgICAgICBmb2N1c0ZpZWxkQXQoaW52YWxpZEZp
ZWxkSW5kZXgpOworICAgIH0KK30KKworZG91YmxlIERhdGVUaW1lRWRpdEVsZW1lbnQ6OnZhbHVl
QXNEb3VibGUoKSBjb25zdAoreworICAgIGRvdWJsZSB2YWx1ZSA9IDA7CisKKyAgICBmb3IgKHNp
emVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IG1fZmllbGRzLnNpemUoKTsgKytmaWVs
ZEluZGV4KSB7CisgICAgICAgIGNvbnN0IERhdGVUaW1lRmllbGRFbGVtZW50KiBjb25zdCBmaWVs
ZCA9IG1fZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICBpZiAoIWZpZWxkLT5oYXNWYWx1ZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7CisgICAgICAgIHZhbHVlICs9IGZpZWxkLT52YWx1ZUFzRG91YmxlKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ2MmZhYTRhNmUwN2UzNjdiM2E2NWRjNTA5ZTdkYTExYTE5NzFhY2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRF
bGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERh
dGVUaW1lRWRpdEVsZW1lbnRfaAorI2RlZmluZSBEYXRlVGltZUVkaXRFbGVtZW50X2gKKworI2lm
IEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1ZGUgIkRhdGVU
aW1lRmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0ZUNvbXBvbmVudHM7CitjbGFzcyBE
YXRlVGltZUVkaXRMYXlvdXRlcjsKK2NsYXNzIEtleWJvYXJkRXZlbnQ7CitjbGFzcyBNb3VzZUV2
ZW50OworY2xhc3MgU3RlcFJhbmdlOworCisvLyBEYXRlVGltZUVkaXRFbGVtZW50IGNsYXNzIGNv
bnRhaW5zIG51bWJlcmljIGZpZWxkIGFuZCBzeW1ib2xjIGZpZWxkIGZvcgorLy8gcmVwcmVzZW50
aW5nIGRhdGUgYW5kIHRpbWUsIHN1Y2ggYXMKKy8vICAtIFllYXIsIE1vbnRoLCBEYXkgT2YgTW9u
dGgKKy8vICAtIEhvdXIsIE1pbnV0ZSwgU2Vjb25kLCBNaWxsaXNlY29uZCwgQU0vUE0KK2NsYXNz
IERhdGVUaW1lRWRpdEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHB1YmxpYyBEYXRl
VGltZUZpZWxkRWxlbWVudDo6RmllbGRFdmVudEhhbmRsZXIsIHByaXZhdGUgU3BpbkJ1dHRvbkVs
ZW1lbnQ6OlN0ZXBBY3Rpb25IYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRl
VGltZUVkaXRFbGVtZW50KTsKKworcHVibGljOgorICAgIC8vIEVkaXRDb250cm9sT3duZXIgaW1w
bGVtZW50ZXIgbXVzdCBjYWxsIHJlbW92ZUVkaXRDb250cm9sT3duZXIgd2hlbgorICAgIC8vIGl0
IGRvZXNuJ3QgaGFuZGxlIGV2ZW50LCBlLmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNzIEVk
aXRDb250cm9sT3duZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+RWRpdENvbnRy
b2xPd25lcigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZWRpdENvbnRyb2xNb3VzZUZvY3VzKCkg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZWRpdENvbnRyb2xWYWx1ZUNoYW5nZWQoKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRDb250cm9sT3duZXJEaXNhYmxlZCgpIGNvbnN0
ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzRWRpdENvbnRyb2xPd25lclJlYWRPbmx5KCkg
Y29uc3QgPSAwOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRlVGltZUVkaXRF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBFZGl0Q29udHJvbE93bmVyJiwgY29uc3QgU3RlcFJh
bmdlJik7CisKKyAgICB2aXJ0dWFsIH5EYXRlVGltZUVkaXRFbGVtZW50KCk7CisgICAgdm9pZCBh
ZGRGaWVsZChQYXNzUmVmUHRyPERhdGVUaW1lRmllbGRFbGVtZW50Pik7CisgICAgdmlydHVhbCB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKSBPVkVSUklERTsKKyAgICB2b2lkIGRpc2Fi
bGVkU3RhdGVDaGFuZ2VkKCk7CisgICAgdm9pZCBsYXlvdXQoY29uc3QgU3RlcFJhbmdlJik7Cisg
ICAgdm9pZCByZWFkT25seVN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgcmVtb3ZlRWRpdENvbnRy
b2xPd25lcigpIHsgbV9lZGl0Q29udHJvbE93bmVyID0gMDsgfQorICAgIHZvaWQgcmVzZXRMYXlv
dXQoKTsKKyAgICB2b2lkIHNldEVtcHR5VmFsdWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmICBkYXRl
Rm9yUmVhZE9ubHlGaWVsZCk7CisgICAgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29t
cG9uZW50cyYpOworICAgIGRvdWJsZSB2YWx1ZUFzRG91YmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbnZhbGlkRmllbGRJbmRleCA9IHN0YXRpY19jYXN0
PHNpemVfdD4oLTEpOworCisgICAgLy8gRGF0ZXRpbWUgY2FuIGJlIHJlcHJlc2VudCBhdCBtb3N0
IGZpdmUgZmllbGRzLCBzdWNoIGFzCisgICAgLy8gIDEuIHllYXIKKyAgICAvLyAgMi4gbW9udGgK
KyAgICAvLyAgMy4gZGF5LW9mLW1vbnRoCisgICAgLy8gIDQuIGhvdXIKKyAgICAvLyAgNS4gbWlu
dXRlCisgICAgLy8gIDYuIHNlY29uZAorICAgIC8vICA3LiBtaWxsaXNlY29uZAorICAgIC8vICA4
LiBBTS9QTQorICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bU51bWJlck9mRmllbGRzID0gODsK
KworICAgIERhdGVUaW1lRWRpdEVsZW1lbnQoRG9jdW1lbnQqLCBFZGl0Q29udHJvbE93bmVyJik7
CisKKyAgICBEYXRlVGltZUZpZWxkRWxlbWVudCogZmllbGRBdChzaXplX3QpIGNvbnN0OworICAg
IHZvaWQgZm9jdXNGaWVsZEF0KHNpemVfdCk7CisgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCop
OworICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWFkT25seSgpIGNv
bnN0OworICAgIHNpemVfdCBuZXh0RmllbGRJbmRleCgpIGNvbnN0OworICAgIHNpemVfdCBwcmV2
aW91c0ZpZWxkSW5kZXgoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVVJU3RhdGUoKTsKKworICAg
IC8vIERhdGVUaW1lRmllbGRFbGVtZW50OjpGaWVsZEV2ZW50SGFuZGxlciBmdW5jdGlvbnMuCisg
ICAgdmlydHVhbCB2b2lkIGZpZWxkVmFsdWVDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7CisgICAg
dmlydHVhbCB2b2lkIGZvY3VzT25OZXh0RmllbGQoKSBPVkVSUklERSBGSU5BTDsKKworICAgIC8v
IFNwaW5CdXR0b25FbGVtZW50OjpTdGVwQWN0aW9uSGFuZGxlciBmdW5jdGlvbnMuCisgICAgdmly
dHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwRG93bigpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1
YWwgdm9pZCBzcGluQnV0dG9uU3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisKKyAgICBWZWN0b3I8
RGF0ZVRpbWVGaWVsZEVsZW1lbnQqLCBtYXhpbXVtTnVtYmVyT2ZGaWVsZHM+IG1fZmllbGRzOwor
ICAgIEVkaXRDb250cm9sT3duZXIqIG1fZWRpdENvbnRyb2xPd25lcjsKKyAgICBTcGluQnV0dG9u
RWxlbWVudCogbV9zcGluQnV0dG9uOworICAgIHNpemVfdCBtX2ZvY3VzRmllbGRJbmRleDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43MDJlNDkwMGNjNzFkMGM5MzE5MzI5OTkwZDY2ZmQzZmNlOGMzYTcwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklFTERTKQorI2luY2x1
ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNp
bmNsdWRlICJUZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKKworRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OkZpZWxkRXZlbnRIYW5kbGVyOjp+
RmllbGRFdmVudEhhbmRsZXIoKQoreworfQorCitEYXRlVGltZUZpZWxkRWxlbWVudDo6RGF0ZVRp
bWVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmll
bGRFdmVudEhhbmRsZXIpCisgICAgOiBIVE1MRWxlbWVudChzcGFuVGFnLCBkb2N1bWVudCkKKyAg
ICAsIG1fZmllbGRFdmVudEhhbmRsZXIoJmZpZWxkRXZlbnRIYW5kbGVyKQoreworfQorCit2b2lk
IERhdGVUaW1lRmllbGRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
K3sKKyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CisgICAgICAgIEtleWJvYXJk
RXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQp
OworICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpOworICAgICAgICBp
ZiAoa2V5Ym9hcmRFdmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKGtleWJvYXJkRXZlbnQpOworICAg
ICAgICBpZiAoa2V5Ym9hcmRFdmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVu
dCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OmRlZmF1bHRLZXlib2FyZEV2ZW50
SGFuZGxlcihLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50KQoreworICAgIGlmIChrZXlib2Fy
ZEV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC0+
a2V5SWRlbnRpZmllcigpOworCisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iKSB7Cisg
ICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHN0ZXBE
b3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9
PSAiVXAiKSB7CisgICAgICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgIHN0ZXBVcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleUlk
ZW50aWZpZXIgPT0gIlUrMDAwOCIpIHsKKyAgICAgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgc2V0RW1wdHlWYWx1ZShEYXRlQ29tcG9uZW50cygpLCBEaXNw
YXRjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBEYXRlVGltZUZp
ZWxkRWxlbWVudDo6Zm9jdXNPbk5leHRGaWVsZCgpCit7CisgICAgaWYgKG1fZmllbGRFdmVudEhh
bmRsZXIpCisgICAgICAgIG1fZmllbGRFdmVudEhhbmRsZXItPmZvY3VzT25OZXh0RmllbGQoKTsK
K30KKwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6aW5pdGlhbGl6ZShjb25zdCBBdG9taWNT
dHJpbmcmIHNoYWRvd1BzZXVkb0lkKQoreworICAgIHNldFNoYWRvd1BzZXVkb0lkKHNoYWRvd1Bz
ZXVkb0lkKTsKKyAgICBhcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdmlzaWJs
ZVZhbHVlKCkpKTsKK30KKworYm9vbCBEYXRlVGltZUZpZWxkRWxlbWVudDo6aXNSZWFkT25seSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKTsKK30K
Kwordm9pZCBEYXRlVGltZUZpZWxkRWxlbWVudDo6c2V0UmVhZE9ubHkoKQoreworICAgIC8vIFNl
dCBIVE1MIGF0dHJpYnV0ZSByZWFkb25seSB0byBjaGFuZ2UgYXBwZXJhbmNlLgorICAgIHNldEJv
b2xlYW5BdHRyaWJ1dGUocmVhZG9ubHlBdHRyLCB0cnVlKTsKKyAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVGaWVsZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWx1
ZShFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgVGV4dCogY29uc3QgdGV4dE5v
ZGUgPSB0b1RleHQoZmlyc3RDaGlsZCgpKTsKKyAgICBjb25zdCBTdHJpbmcgbmV3VmlzaWJsZVZh
bHVlID0gdmlzaWJsZVZhbHVlKCk7CisgICAgQVNTRVJUKG5ld1Zpc2libGVWYWx1ZS5sZW5ndGgo
KSA+IDApOworCisgICAgaWYgKHRleHROb2RlLT53aG9sZVRleHQoKSA9PSBuZXdWaXNpYmxlVmFs
dWUpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KG5l
d1Zpc2libGVWYWx1ZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisKKyAgICBpZiAoZXZlbnRCZWhh
dmlvciA9PSBEaXNwYXRjaEV2ZW50ICYmIG1fZmllbGRFdmVudEhhbmRsZXIpCisgICAgICAgIG1f
ZmllbGRFdmVudEhhbmRsZXItPmZpZWxkVmFsdWVDaGFuZ2VkKCk7Cit9CisKK2RvdWJsZSBEYXRl
VGltZUZpZWxkRWxlbWVudDo6dmFsdWVBc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhh
c1ZhbHVlKCkgPyB2YWx1ZUFzSW50ZWdlcigpICogdW5pdEluTWlsbGlzZWNvbmQoKSA6IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9EYXRlVGltZUZpZWxkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0
ZVRpbWVGaWVsZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjZiNjFmZmFiMDk3YTIwMjI3YmZiZGQ4
NjNjOTQ4ODE1NTY5NzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVudF9oCisjZGVmaW5lIERhdGVUaW1l
RmllbGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVfRklF
TERTKQorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEYXRlQ29tcG9uZW50czsKKworLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgaXMg
YmFzZSBjbGFzcyBvZiBkYXRlIHRpbWUgZmllbGQgZWxlbWVudC4KK2NsYXNzIERhdGVUaW1lRmll
bGRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShEYXRlVGltZUZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBlbnVtIEV2ZW50QmVoYXZp
b3IgeworICAgICAgICBEaXNwYXRjaE5vRXZlbnQsCisgICAgICAgIERpc3BhdGNoRXZlbnQsCisg
ICAgfTsKKworICAgIC8vIEZpZWxkRXZlbnRIYW5kbGVyIGltcGxlbWVudGVyIG11c3QgY2FsbCBy
ZW1vdmVFdmVudEhhbmRsZXIgd2hlbgorICAgIC8vIGl0IGRvZXNuJ3QgaGFuZGxlIGV2ZW50LCBl
LmcuIGF0IGRlc3RydWN0aW9uLgorICAgIGNsYXNzIEZpZWxkRXZlbnRIYW5kbGVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkZpZWxkRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBmaWVsZFZhbHVlQ2hhbmdlZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGZvY3VzT25OZXh0RmllbGQoKSA9IDA7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhc1Zh
bHVlKCkgY29uc3QgPSAwOworICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0OworICAgIHZvaWQg
cmVtb3ZlRXZlbnRIYW5kbGVyKCkgeyBtX2ZpZWxkRXZlbnRIYW5kbGVyID0gMDsgfQorICAgIHZv
aWQgc2V0UmVhZE9ubHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW1wdHlWYWx1ZShjb25zdCBE
YXRlQ29tcG9uZW50cyYgZGF0ZUZvclJlYWRPbmx5RmllbGQsIEV2ZW50QmVoYXZpb3IgPSBEaXNw
YXRjaE5vRXZlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3Qg
RGF0ZUNvbXBvbmVudHMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2Vy
KGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzdGVwRG93bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwKCkgPSAwOworICAg
IHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworICAgIGRvdWJsZSB2YWx1ZUFzRG91
YmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmFsdWVBc0ludGVnZXIoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgPSAwOworCitwcm90ZWN0
ZWQ6CisgICAgRGF0ZVRpbWVGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxl
ciYpOworICAgIHZvaWQgZm9jdXNPbk5leHRGaWVsZCgpOworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKSA9IDA7CisgICAgdm9pZCBpbml0aWFsaXpl
KGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vj
b25kKCkgY29uc3QgPSAwOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbHVlKEV2ZW50QmVoYXZp
b3IpOworCitwcml2YXRlOgorICAgIHZvaWQgZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtl
eWJvYXJkRXZlbnQqKTsKKworICAgIEZpZWxkRXZlbnRIYW5kbGVyKiBtX2ZpZWxkRXZlbnRIYW5k
bGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWZmN2ZhNWM3ZGEwMjg3N2RlNGNkMTZhMzk5YWU5ODc5MGI1OTMyZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmll
bGRFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVM
RFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgiCisKKyNpbmNsdWRlICJEYXRl
Q29tcG9uZW50cy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0RhdGVUaW1lQU1QTUZpZWxkRWxlbWVudDo6RGF0ZVRpbWVBTVBNRmllbGRFbGVt
ZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5k
bGVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYW1wbUxhYmVscykKKyAgICA6IERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBhbXBtTGFiZWxz
KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudD4gRGF0ZVRpbWVB
TVBNRmllbGRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFu
ZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbXBtTGFiZWxz
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBhbXBtUHN1ZWRvSWQs
ICgiLXdlYmtpdC1kYXRldGltZS1lZGl0LWFtcG0tZmllbGQiKSk7CisgICAgUmVmUHRyPERhdGVU
aW1lQU1QTUZpZWxkRWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVBTVBNRmll
bGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgYW1wbUxhYmVscykpOworICAg
IGZpZWxkLT5pbml0aWFsaXplKGFtcG1Qc3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVh
c2UoKTsKK30KKwordm9pZCBEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRl
KGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRh
dGUuaG91cigpID49IDEyID8gMSA6IDApOworfQorCitkb3VibGUgRGF0ZVRpbWVBTVBNRmllbGRF
bGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1zUGVySG91
ciAqIDEyOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGVUaW1l
SG91ckZpZWxkRWxlbWVudDo6RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBpbnQgbWluaW11bSwg
aW50IG1heGltdW0pCisgICAgOiBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoZG9jdW1lbnQs
IGZpZWxkRXZlbnRIYW5kbGVyLCBtaW5pbXVtLCBtYXhpbXVtKQorICAgICwgbV9hbGlnbm1lbnQo
bWF4aW11bSArIG1heGltdW0gJSAyKQoreworICAgIEFTU0VSVCgoIW1pbmltdW0gJiYgKG1heGlt
dW0gPT0gMTEgfHwgbWF4aW11bSA9PSAyMykpIHx8IChtaW5pbXVtID09IDEgJiYgKG1heGltdW0g
PT0gMTIgfHwgbWF4aW11bSA9PSAyNCkpKTsKK30KKworUGFzc1JlZlB0cjxEYXRlVGltZUhvdXJG
aWVsZEVsZW1lbnQ+IERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyLCBpbnQgbWluaW11
bSwgaW50IG1heGltdW0pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IGhvdXJQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZCIpKTsKKyAg
ICBSZWZQdHI8RGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBE
YXRlVGltZUhvdXJGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyLCBtaW5p
bXVtLCBtYXhpbXVtKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUoaG91clBzdWVkb0lkKTsKKyAg
ICByZXR1cm4gZmllbGQucmVsZWFzZSgpOworfQorCit2b2lkIERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudDo6c2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAg
c2V0VmFsdWVBc0ludGVnZXIoZGF0ZS5ob3VyKCkpOworfQorCit2b2lkIERhdGVUaW1lSG91ckZp
ZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIoaW50IHZhbHVlQXNIb3VyMjMsIEV2ZW50QmVo
YXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBjb25zdCBpbnQgdmFsdWUgPSBSYW5nZSgwLCAy
MykuY2xhbXBWYWx1ZSh2YWx1ZUFzSG91cjIzKSAlIG1fYWxpZ25tZW50OworICAgIERhdGVUaW1l
TnVtZXJpY0ZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0ludGVnZXIocmFuZ2UoKS5taW5pbXVtICYm
ICF2YWx1ZSA/IG1fYWxpZ25tZW50IDogdmFsdWUsIGV2ZW50QmVoYXZpb3IpOworfQorCitkb3Vi
bGUgRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50Ojp1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1zUGVySG91cjsKK30KKworaW50IERhdGVUaW1lSG91ckZpZWxkRWxlbWVu
dDo6dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBoYXNWYWx1ZSgpID8gRGF0
ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdlcigpICUgbV9hbGlnbm1lbnQg
OiAtMTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEYXRlVGltZU1p
bGxpc2Vjb25kRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50KERv
Y3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQor
ICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFu
ZGxlciwgMCwgOTk5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lTWlsbGlzZWNvbmRGaWVs
ZEVsZW1lbnQ+IERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVu
dCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgbWlsbGlzZWNvbmRQc3VlZG9JZCwg
KCItd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGQiKSk7CisgICAgUmVmUHRy
PERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQ+IGZpZWxkID0gYWRvcHRSZWYobmV3IERh
dGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVsZW1lbnQoZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVy
KSk7CisgICAgZmllbGQtPmluaXRpYWxpemUobWlsbGlzZWNvbmRQc3VlZG9JZCk7CisgICAgcmV0
dXJuIGZpZWxkLnJlbGVhc2UoKTsKK30KKwordm9pZCBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRF
bGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkKK3sKKyAg
ICBzZXRWYWx1ZUFzSW50ZWdlcihkYXRlLm1pbGxpc2Vjb25kKCkpOworfQorCitkb3VibGUgRGF0
ZVRpbWVNaWxsaXNlY29uZEZpZWxkRWxlbWVudDo6dW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdAor
eworICAgIHJldHVybiAxOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K0RhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudChE
b2N1bWVudCogZG9jdW1lbnQsIEZpZWxkRXZlbnRIYW5kbGVyJiBmaWVsZEV2ZW50SGFuZGxlcikK
KyAgICA6IERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhh
bmRsZXIsIDAsIDU5KQoreworfQorCitQYXNzUmVmUHRyPERhdGVUaW1lTWludXRlRmllbGRFbGVt
ZW50PiBEYXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVyKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBtaW51dGVQc3VlZG9JZCwgKCItd2Via2l0LWRhdGV0
aW1lLWVkaXQtbWludXRlLWZpZWxkIikpOworICAgIFJlZlB0cjxEYXRlVGltZU1pbnV0ZUZpZWxk
RWxlbWVudD4gZmllbGQgPSBhZG9wdFJlZihuZXcgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQo
ZG9jdW1lbnQsIGZpZWxkRXZlbnRIYW5kbGVyKSk7CisgICAgZmllbGQtPmluaXRpYWxpemUobWlu
dXRlUHN1ZWRvSWQpOworICAgIHJldHVybiBmaWVsZC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRGF0
ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGNvbnN0IERhdGVDb21wb25l
bnRzJiBkYXRlKQoreworICAgIHNldFZhbHVlQXNJbnRlZ2VyKGRhdGUubWludXRlKCkpOworfQor
Citkb3VibGUgRGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OnVuaXRJbk1pbGxpc2Vjb25kKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbXNQZXJNaW51dGU7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQ6OkRhdGVUaW1lU2Vj
b25kRmllbGRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZp
ZWxkRXZlbnRIYW5kbGVyKQorICAgIDogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50KGRvY3Vt
ZW50LCBmaWVsZEV2ZW50SGFuZGxlciwgMCwgNTkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0ZVRp
bWVTZWNvbmRGaWVsZEVsZW1lbnQ+IERhdGVUaW1lU2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBGaWVsZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHNlY29uZFBzdWVkb0lk
LCAoIi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGQiKSk7CisgICAgUmVmUHRyPERh
dGVUaW1lU2Vjb25kRmllbGRFbGVtZW50PiBmaWVsZCA9IGFkb3B0UmVmKG5ldyBEYXRlVGltZVNl
Y29uZEZpZWxkRWxlbWVudChkb2N1bWVudCwgZmllbGRFdmVudEhhbmRsZXIpKTsKKyAgICBmaWVs
ZC0+aW5pdGlhbGl6ZShzZWNvbmRQc3VlZG9JZCk7CisgICAgcmV0dXJuIGZpZWxkLnJlbGVhc2Uo
KTsKK30KKwordm9pZCBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6c2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUpCit7CisgICAgc2V0VmFsdWVBc0ludGVnZXIoZGF0
ZS5zZWNvbmQoKSk7Cit9CisKK2RvdWJsZSBEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6dW5p
dEluTWlsbGlzZWNvbmQoKSBjb25zdAoreworICAgIHJldHVybiBtc1BlclNlY29uZDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdiYzFlZmE1
NTJlMzQ4MDRkNjNjMzU0MGRlNjYyYTBlZjA0N2I1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRmllbGRFbGVtZW50cy5oCkBAIC0wLDAgKzEs
MTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRlVGltZUZpZWxkRWxlbWVudHNf
aAorI2RlZmluZSBEYXRlVGltZUZpZWxkRWxlbWVudHNfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVOdW1lcmljRmllbGRF
bGVtZW50LmgiCisjaW5jbHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGVUaW1lQU1QTUZpZWxkRWxlbWVudCA6IHB1
YmxpYyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEYXRlVGltZUFNUE1GaWVsZEVsZW1lbnQpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVs
ZEV2ZW50SGFuZGxlciYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisKK3ByaXZhdGU6CisgICAg
RGF0ZVRpbWVBTVBNRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYpOworCisgICAgLy8gRGF0ZVRpbWVGaWVsZEVsZW1lbnQgZnVu
Y3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShjb25zdCBEYXRlQ29tcG9u
ZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91YmxlIHVuaXRJbk1pbGxpc2Vj
b25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCisKKy8vIERhdGVUaW1lSG91ckZpZWxk
RWxlbWVudCBpcyB1c2VkIGZvciBob3VyIGZpZWxkIG9mIGRhdGUgdGltZSBmb3JtYXQKKy8vIHN1
cHBvcnRpbmcgZm9sbG93aW5nIHBhdHRlcm5zOgorLy8gIC0gMCB0byAxMQorLy8gIC0gMSB0byAx
MgorLy8gIC0gMCB0byAyMworLy8gIC0gMSB0byAyNAorY2xhc3MgRGF0ZVRpbWVIb3VyRmllbGRF
bGVtZW50IDogcHVibGljIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50KTsKKworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lSG91ckZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3Vt
ZW50KiwgRmllbGRFdmVudEhhbmRsZXImLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pOworCitw
cml2YXRlOgorICAgIERhdGVUaW1lSG91ckZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZl
bnRIYW5kbGVyJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworICAgIC8vIERhdGVUaW1l
RmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBP
VkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgpIGNv
bnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgaW50IHZhbHVlQXNJbnRlZ2VyKCkgY29u
c3QgT1ZFUlJJREUgRklOQUw7CisKKyAgICBjb25zdCBpbnQgbV9hbGlnbm1lbnQ7Cit9OworCitj
bGFzcyBEYXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lTnVt
ZXJpY0ZpZWxkRWxlbWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVNaWxs
aXNlY29uZEZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
YXRlVGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2
ZW50SGFuZGxlciYpOworCitwcml2YXRlOgorICAgIERhdGVUaW1lTWlsbGlzZWNvbmRGaWVsZEVs
ZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCisgICAgLy8gRGF0ZVRpbWVG
aWVsZEVsZW1lbnQgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUFzRGF0ZShj
b25zdCBEYXRlQ29tcG9uZW50cyYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgZG91Ymxl
IHVuaXRJbk1pbGxpc2Vjb25kKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7Cit9OworCitjbGFzcyBE
YXRlVGltZU1pbnV0ZUZpZWxkRWxlbWVudCA6IHB1YmxpYyBEYXRlVGltZU51bWVyaWNGaWVsZEVs
ZW1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lTWludXRlRmllbGRFbGVt
ZW50KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGVUaW1lTWludXRlRmll
bGRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYpOworCitwcml2
YXRlOgorICAgIERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50KERvY3VtZW50KiwgRmllbGRFdmVu
dEhhbmRsZXImKTsKKworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBc0RhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmKSBPVkVS
UklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB1bml0SW5NaWxsaXNlY29uZCgpIGNvbnN0
IE9WRVJSSURFIEZJTkFMOworfTsKKworY2xhc3MgRGF0ZVRpbWVTZWNvbmRGaWVsZEVsZW1lbnQg
OiBwdWJsaWMgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudCk7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
KiwgRmllbGRFdmVudEhhbmRsZXImKTsKKworcHJpdmF0ZToKKyAgICBEYXRlVGltZVNlY29uZEZp
ZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxkRXZlbnRIYW5kbGVyJik7CisKKyAgICAvLyBEYXRl
VGltZUZpZWxkRWxlbWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNE
YXRlKGNvbnN0IERhdGVDb21wb25lbnRzJikgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBk
b3VibGUgdW5pdEluTWlsbGlzZWNvbmQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ1MjJlMTU3OWJmNTM1YjUyMDE1MmYwZDkzYWM0Zjg0ZDkyMzY4NWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVf
RklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIgorCisjaW5j
bHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZE51bWJlci5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgY29uc3QgRE9NVGltZVN0YW1wIHR5cGVBaGVhZFRpbWVvdXQgPSAxMDAwOworCitz
dGF0aWMgc2l6ZV90IGRpc3BsYXlTaXplT2ZOdW1iZXIoaW50IHZhbHVlKQoreworICAgIEFTU0VS
VCh2YWx1ZSA+PSAwKTsKKworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAxOworCisg
ICAgaW50IG51bWJlck9mRGlnaXRzID0gMDsKKyAgICB3aGlsZSAodmFsdWUpIHsKKyAgICAgICAg
dmFsdWUgLz0gMTA7CisgICAgICAgICsrbnVtYmVyT2ZEaWdpdHM7CisgICAgfQorCisgICAgcmV0
dXJuIG51bWJlck9mRGlnaXRzOworfQorCitEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJh
bmdlOjpSYW5nZShpbnQgbWluaW11bSwgaW50IG1heGltdW0pCisgICAgOiBtYXhpbXVtKG1heGlt
dW0pCisgICAgLCBtaW5pbXVtKG1pbmltdW0pCit7CisgICAgQVNTRVJUKG1pbmltdW0gPD0gbWF4
aW11bSk7Cit9CisKK2ludCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OlJhbmdlOjpjbGFt
cFZhbHVlKGludCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgo
dmFsdWUsIG1pbmltdW0pLCBtYXhpbXVtKTsKK30KKworRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVt
ZW50OjpEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBGaWVs
ZEV2ZW50SGFuZGxlciYgZmllbGRFdmVudEhhbmRsZXIsIGludCBtaW5pbXVtLCBpbnQgbWF4aW11
bSkKKyAgICA6IERhdGVUaW1lRmllbGRFbGVtZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxl
cikKKyAgICAsIG1fbGFzdERpZ2l0Q2hhclRpbWUoMCkKKyAgICAsIG1fcmFuZ2UobWluaW11bSwg
bWF4aW11bSkKKyAgICAsIG1fdmFsdWUoMCkKKyAgICAsIG1faGFzVmFsdWUoZmFsc2UpCit7Cit9
CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGlzUmVhZE9ubHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGtleWJvYXJkRXZlbnQtPnR5cGUoKSAhPSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVUNoYXIgY2hh
ckNvZGUgPSBzdGF0aWNfY2FzdDxVQ2hhcj4oa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSk7Cisg
ICAgaWYgKGNoYXJDb2RlIDwgJyAnKQorICAgICAgICByZXR1cm47CisKKyAgICBET01UaW1lU3Rh
bXAgZGVsdGEgPSBrZXlib2FyZEV2ZW50LT50aW1lU3RhbXAoKSAtIG1fbGFzdERpZ2l0Q2hhclRp
bWU7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7CisKKyAgICBTdHJpbmcgbnVtYmVyID0g
Y29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoU3RyaW5nKCZjaGFyQ29kZSwgMSkpOworICAgIGNv
bnN0IGludCBkaWdpdCA9IG51bWJlclswXSAtICcwJzsKKyAgICBpZiAoZGlnaXQgPCAwIHx8IGRp
Z2l0ID4gOSkKKyAgICAgICAgcmV0dXJuOworCisgICAga2V5Ym9hcmRFdmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX2hhc1ZhbHVlICYmIGRlbHRhIDwg
dHlwZUFoZWFkVGltZW91dCA/IG1fdmFsdWUgKiAxMCArIGRpZ2l0IDogZGlnaXQsIERpc3BhdGNo
RXZlbnQpOworICAgIGlmIChtX3ZhbHVlICogMTAgPiBtX3JhbmdlLm1heGltdW0pCisgICAgICAg
IGZvY3VzT25OZXh0RmllbGQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGFzdERpZ2l0Q2hhclRp
bWUgPSBrZXlib2FyZEV2ZW50LT50aW1lU3RhbXAoKTsKK30KKworYm9vbCBEYXRlVGltZU51bWVy
aWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNWYWx1
ZTsKK30KKwordm9pZCBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnNldEVtcHR5VmFsdWUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVGb3JSZWFkT25seUZpZWxkLCBFdmVudEJlaGF2aW9y
IGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV9sYXN0RGlnaXRDaGFyVGltZSA9IDA7CisKKyAgICBp
ZiAoaXNSZWFkT25seSgpKSB7CisgICAgICAgIHNldFZhbHVlQXNEYXRlKGRhdGVGb3JSZWFkT25s
eUZpZWxkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faGFzVmFsdWUgPSBmYWxz
ZTsKKyAgICBtX3ZhbHVlID0gMDsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhhdmlv
cik7Cit9CisKK3ZvaWQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50OjpzZXRWYWx1ZUFzSW50
ZWdlcihpbnQgdmFsdWUsIEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKK3sKKyAgICBtX3Zh
bHVlID0gY2xhbXBWYWx1ZSh2YWx1ZSk7CisgICAgbV9oYXNWYWx1ZSA9IHRydWU7CisgICAgdXBk
YXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworICAgIG1fbGFzdERpZ2l0Q2hhclRpbWUg
PSAwOworfQorCit2b2lkIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24oKQor
eworICAgIGlmIChtX2hhc1ZhbHVlKQorICAgICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3ZhbHVl
ID09IG1fcmFuZ2UubWluaW11bSA/IG1fcmFuZ2UubWF4aW11bSA6IGNsYW1wVmFsdWUobV92YWx1
ZSAtIDEpLCBEaXNwYXRjaEV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIHNldFZhbHVlQXNJbnRl
Z2VyKG1fcmFuZ2UubWF4aW11bSwgRGlzcGF0Y2hFdmVudCk7Cit9CisKK3ZvaWQgRGF0ZVRpbWVO
dW1lcmljRmllbGRFbGVtZW50OjpzdGVwVXAoKQoreworICAgIGlmIChtX2hhc1ZhbHVlKQorICAg
ICAgICBzZXRWYWx1ZUFzSW50ZWdlcihtX3ZhbHVlID09IG1fcmFuZ2UubWF4aW11bSA/IG1fcmFu
Z2UubWluaW11bSA6IGNsYW1wVmFsdWUobV92YWx1ZSArIDEpLCBEaXNwYXRjaEV2ZW50KTsKKyAg
ICBlbHNlCisgICAgICAgIHNldFZhbHVlQXNJbnRlZ2VyKG1fcmFuZ2UubWluaW11bSwgRGlzcGF0
Y2hFdmVudCk7Cit9CisKK1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZhbHVl
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworCisgICAgaWYgKG1fcmFuZ2UubWF4aW11bSA+IDk5OSkKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihTdHJpbmc6Om51bWJlcihtX3ZhbHVlKSk7CisKKyAg
ICBpZiAobV9yYW5nZS5tYXhpbXVtID4gOTkpCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9Mb2Nh
bGl6ZWROdW1iZXIoU3RyaW5nOjpmb3JtYXQoIiUwM2QiLCBtX3ZhbHVlKSk7CisKKyAgICByZXR1
cm4gY29udmVydFRvTG9jYWxpemVkTnVtYmVyKFN0cmluZzo6Zm9ybWF0KCIlMDJkIiwgbV92YWx1
ZSkpOworfQorCitpbnQgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Ojp2YWx1ZUFzSW50ZWdl
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGFzVmFsdWUgPyBtX3ZhbHVlIDogLTE7Cit9CisK
K1N0cmluZyBEYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQ6OnZpc2libGVWYWx1ZSgpIGNvbnN0
Cit7CisgICAgaWYgKG1faGFzVmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZSgpOworCisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoaW50IG51bWJlck9mRGFzaHMgPSBzdGQ6
Om1heChkaXNwbGF5U2l6ZU9mTnVtYmVyKG1fcmFuZ2UubWF4aW11bSksIGRpc3BsYXlTaXplT2ZO
dW1iZXIobV9yYW5nZS5taW5pbXVtKSk7IG51bWJlck9mRGFzaHM7IC0tbnVtYmVyT2ZEYXNocykK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZU51bWVyaWNGaWVsZEVsZW1lbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43Y2IzOTgyNTBjMjg1MDI5OWM0MTU1YTBlODVlYzhiODE0ZTFkMWZhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50LmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50X2gKKyNkZWZpbmUgRGF0ZVRpbWVOdW1l
cmljRmllbGRFbGVtZW50X2gKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUVfTVVMVElQTEVf
RklFTERTKQorI2luY2x1ZGUgIkRhdGVUaW1lRmllbGRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IHJlcHJlc2VudHMgbnVt
ZXJpYyBmaWVsZCBvZiBkYXRlIHRpbWUgZm9ybWF0LAorLy8gc3VjaCBhczoKKy8vICAtIGhvdXIK
Ky8vICAtIG1pbnV0ZQorLy8gIC0gbWlsbGlzZWNvbmQKKy8vICAtIHNlY29uZAorLy8gIC0geWVh
cgorY2xhc3MgRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50IDogcHVibGljIERhdGVUaW1lRmll
bGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZU51bWVyaWNGaWVs
ZEVsZW1lbnQpOworCitwcm90ZWN0ZWQ6CisgICAgc3RydWN0IFJhbmdlIHsKKyAgICAgICAgUmFu
Z2UoaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKyAgICAgICAgaW50IGNsYW1wVmFsdWUoaW50
KSBjb25zdDsKKworICAgICAgICBpbnQgbWF4aW11bTsKKyAgICAgICAgaW50IG1pbmltdW07Cisg
ICAgfTsKKworICAgIERhdGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudChEb2N1bWVudCosIEZpZWxk
RXZlbnRIYW5kbGVyJiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKTsKKworICAgIGludCBjbGFt
cFZhbHVlKGludCB2YWx1ZSkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5jbGFtcFZhbHVlKHZhbHVl
KTsgfQorICAgIGNvbnN0IFJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0K
KworICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVmFsdWUoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVBc0ludGVnZXIoaW50LCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwor
Citwcml2YXRlOgorICAgIC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgT1ZFUlJJREUg
RklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNldEVtcHR5VmFsdWUoY29uc3QgRGF0ZUNvbXBvbmVu
dHMmIGRhdGVGb3JSZWFkT25seUZpZWxkLCBFdmVudEJlaGF2aW9yKSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUo
KSBjb25zdCBPVkVSUklERSBGSU5BTDsKKworICAgIERPTVRpbWVTdGFtcCBtX2xhc3REaWdpdENo
YXJUaW1lOworICAgIGNvbnN0IFJhbmdlIG1fcmFuZ2U7CisgICAgaW50IG1fdmFsdWU7CisgICAg
Ym9vbCBtX2hhc1ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGViNTIyMjljYWJiOTk5
ZTk2OTQ5Y2M2ZmQ1NzVjZGFmMjQ4NDZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKQEAgLTAsMCAr
MSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5B
QkxFKElOUFVUX1RZUEVfVElNRV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVT
eW1ib2xpY0ZpZWxkRWxlbWVudC5oIgorCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitE
YXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50OjpEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50
KERvY3VtZW50KiBkb2N1bWVudCwgRmllbGRFdmVudEhhbmRsZXImIGZpZWxkRXZlbnRIYW5kbGVy
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3ltYm9scykKKyAgICA6IERhdGVUaW1lRmllbGRFbGVt
ZW50KGRvY3VtZW50LCBmaWVsZEV2ZW50SGFuZGxlcikKKyAgICAsIG1fc3ltYm9scyhzeW1ib2xz
KQorICAgICwgbV9zZWxlY3RlZEluZGV4KC0xKQoreworICAgIEFTU0VSVCghc3ltYm9scy5pc0Vt
cHR5KCkpOworfQorCit2b2lkIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQ6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCkKK3sKKyAgICBpZiAoa2V5
Ym9hcmRFdmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBVQ2hhciBjaGFyQ29kZSA9IFdURjo6VW5pY29kZTo6dG9M
b3dlcihrZXlib2FyZEV2ZW50LT5jaGFyQ29kZSgpKTsKKyAgICBpZiAoY2hhckNvZGUgPCAnICcp
CisgICAgICAgIHJldHVybjsKKworICAgIGtleWJvYXJkRXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zeW1ib2xzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICBpZiAoIW1fc3ltYm9sc1tpbmRleF0uaXNFbXB0eSgpICYm
IFdURjo6VW5pY29kZTo6dG9Mb3dlcihtX3N5bWJvbHNbaW5kZXhdWzBdKSA9PSBjaGFyQ29kZSkg
eworICAgICAgICAgICAgc2V0VmFsdWVBc0ludGVnZXIoaW5kZXgsIERpc3BhdGNoRXZlbnQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitib29sIERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQ6Omhhc1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
ZWxlY3RlZEluZGV4ID49IDA7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVu
dDo6c2V0RW1wdHlWYWx1ZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEV2ZW50QmVoYXZpb3IgZXZl
bnRCZWhhdmlvcikKK3sKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBpbnZhbGlkSW5kZXg7CisgICAg
dXBkYXRlVmlzaWJsZVZhbHVlKGV2ZW50QmVoYXZpb3IpOworfQorCit2b2lkIERhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQ6OnNldFZhbHVlQXNJbnRlZ2VyKGludCBuZXdTZWxlY3RlZEluZGV4
LCBFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCit7CisgICAgbV9zZWxlY3RlZEluZGV4ID0g
c3RkOjptYXgoMCwgc3RkOjptaW4obmV3U2VsZWN0ZWRJbmRleCwgc3RhdGljX2Nhc3Q8aW50Piht
X3N5bWJvbHMuc2l6ZSgpIC0gMSkpKTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoZXZlbnRCZWhh
dmlvcik7Cit9CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcERvd24o
KQoreworICAgIGNvbnN0IGludCBzaXplID0gbV9zeW1ib2xzLnNpemUoKTsKKyAgICBtX3NlbGVj
dGVkSW5kZXggPSBoYXNWYWx1ZSgpID8gKG1fc2VsZWN0ZWRJbmRleCArIHNpemUgLSAxKSAlIHNp
emUgOiBzaXplIC0gMTsKKyAgICB1cGRhdGVWaXNpYmxlVmFsdWUoRGlzcGF0Y2hFdmVudCk7Cit9
CisKK3ZvaWQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6c3RlcFVwKCkKK3sKKyAgICBt
X3NlbGVjdGVkSW5kZXggPSBoYXNWYWx1ZSgpID8gKG1fc2VsZWN0ZWRJbmRleCArIDEpICUgbV9z
eW1ib2xzLnNpemUoKSA6IDA7CisgICAgdXBkYXRlVmlzaWJsZVZhbHVlKERpc3BhdGNoRXZlbnQp
OworfQorCitTdHJpbmcgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6dmFsdWUoKSBjb25z
dAoreworICAgIHJldHVybiBoYXNWYWx1ZSgpID8gbV9zeW1ib2xzW21fc2VsZWN0ZWRJbmRleF0g
OiBlbXB0eVN0cmluZygpOworfQorCitpbnQgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudDo6
dmFsdWVBc0ludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW5kZXg7Cit9
CisKK1N0cmluZyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50Ojp2aXNpYmxlVmFsdWUoKSBj
b25zdAoreworICAgIHJldHVybiBoYXNWYWx1ZSgpID8gbV9zeW1ib2xzW21fc2VsZWN0ZWRJbmRl
eF0gOiAiLS0iOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVTeW1ib2xpY0ZpZWxk
RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzMjlkZDExNDE1ZDZiYWIyZTA3ZDAzZjA3NjUxYWMzNTky
MmFlMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudF9oCisjZGVmaW5lIERh
dGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElN
RV9NVUxUSVBMRV9GSUVMRFMpCisjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50IHJl
cHJlc2VudHMgbm9uLW51bWVyaWMgZmllbGQgb2YgZGF0YSB0aW1lCisvLyBmb3JtYXQsIHN1Y2gg
YXM6IEFNL1BNLCBhbmQgbW9udGguCitjbGFzcyBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50
IDogcHVibGljIERhdGVUaW1lRmllbGRFbGVtZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50KTsKKworcHJvdGVjdGVkOgorICAgIERhdGVU
aW1lU3ltYm9saWNGaWVsZEVsZW1lbnQoRG9jdW1lbnQqLCBGaWVsZEV2ZW50SGFuZGxlciYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXNJbnRlZ2Vy
KGludCwgRXZlbnRCZWhhdmlvciA9IERpc3BhdGNoTm9FdmVudCkgT1ZFUlJJREUgRklOQUw7CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGludCBpbnZhbGlkSW5kZXggPSAtMTsKKworICAg
IC8vIERhdGVUaW1lRmllbGRFbGVtZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCBib29sIGhhc1ZhbHVlKCkgY29uc3QgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2
b2lkIHNldEVtcHR5VmFsdWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVGb3JSZWFkT25seUZp
ZWxkLCBFdmVudEJlaGF2aW9yID0gRGlzcGF0Y2hOb0V2ZW50KSBPVkVSUklERSBGSU5BTDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RlcERvd24oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RlcFVwKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBj
b25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGludCB2YWx1ZUFzSW50ZWdlcigpIGNv
bnN0IE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNv
bnN0IE9WRVJSSURFIEZJTkFMOworCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbV9zeW1ib2xz
OworICAgIGludCBtX3NlbGVjdGVkSW5kZXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>