<?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>101857</bug_id>
          
          <creation_ts>2012-11-11 00:15:17 -0800</creation_ts>
          <short_desc>Updating mouse cursor on style changes without emitting fake mousemove event</short_desc>
          <delta_ts>2020-04-20 19:48:10 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=210778</see_also>
          <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>100550</dependson>
          <blocked>53341</blocked>
    
    <blocked>85343</blocked>
    
    <blocked>109583</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Aivo Paas">aivopaas</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>davidbarr</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpashk</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>hyatt</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mabaumba</cc>
    
    <cc>mitz</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>763800</commentid>
    <comment_count>0</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-11 00:15:17 -0800</bug_when>
    <thetext>Updating mouse cursor on style changes without emitting fake mousemove event</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763802</commentid>
    <comment_count>1</comment_count>
      <attachid>173493</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-11 00:27:54 -0800</bug_when>
    <thetext>Created attachment 173493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763839</commentid>
    <comment_count>2</comment_count>
      <attachid>173504</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-11 06:19:50 -0800</bug_when>
    <thetext>Created attachment 173504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763840</commentid>
    <comment_count>3</comment_count>
      <attachid>173504</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-11 06:22:06 -0800</bug_when>
    <thetext>Comment on attachment 173504
Patch

Added tests to the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763845</commentid>
    <comment_count>4</comment_count>
      <attachid>173504</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-11 08:19:21 -0800</bug_when>
    <thetext>Comment on attachment 173504
Patch

Attachment 173504 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14788838

New failing tests:
fast/events/mouse-cursor-change.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763857</commentid>
    <comment_count>5</comment_count>
      <attachid>173504</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-11 09:51:52 -0800</bug_when>
    <thetext>Comment on attachment 173504
Patch

Attachment 173504 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14790823

New failing tests:
fast/events/mouse-cursor-change.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764107</commentid>
    <comment_count>6</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-11 23:52:38 -0800</bug_when>
    <thetext>Missing braces in cases like this should clearly be spotted and reported by automatic test. It&apos;s either wrong indentation or missing braces, which must be corrected in both cases before committing

@@ -1862,7 +1862,8 @@ bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent&amp; mouseEvent, Hi
         if (FrameView* view = m_frame-&gt;view()) {
             OptionalCursor optionalCursor = selectCursor(mev, scrollbar);
             if (optionalCursor.isCursorChange())
-                view-&gt;setCursor(optionalCursor.cursor());
+                m_currentMouseCursor = optionalCursor.cursor();
+                view-&gt;setCursor(m_currentMouseCursor);
         }
     }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764115</commentid>
    <comment_count>7</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-12 00:06:44 -0800</bug_when>
    <thetext>(In reply to comment #6)
Er, the missing braces comment was meant to go to a bug about style check not detecting such errors: https://bugs.webkit.org/show_bug.cgi?id=34189
I have the error fixed in my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768470</commentid>
    <comment_count>8</comment_count>
      <attachid>174512</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-15 14:06:22 -0800</bug_when>
    <thetext>Created attachment 174512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768477</commentid>
    <comment_count>9</comment_count>
      <attachid>174512</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-15 14:12:38 -0800</bug_when>
    <thetext>Comment on attachment 174512
Patch

Fixed a step in a test that previously failed because eventSender.dragMode = false; was not set. It queued move events until mouseup was emitted instead of instantly emitting them. Also checked that the included tests failed without the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769570</commentid>
    <comment_count>10</comment_count>
      <attachid>174512</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-16 12:29:45 -0800</bug_when>
    <thetext>Comment on attachment 174512
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        There should be no fake mousemove event used for chaning mouse cursor when style changes.

chaning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769571</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-16 12:30:16 -0800</bug_when>
    <thetext>I&apos;ve CC&apos;d a couple folks who have worked in hit-testing recently.  Perhaps they&apos;ll have opinions to share.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769654</commentid>
    <comment_count>12</comment_count>
      <attachid>174755</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-16 13:59:51 -0800</bug_when>
    <thetext>Created attachment 174755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769661</commentid>
    <comment_count>13</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-16 14:04:12 -0800</bug_when>
    <thetext>Updated Changelog with better explanation for why the new approach is better than previous and explained the flaws of old approach. Also gave a summary of what the patch changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769664</commentid>
    <comment_count>14</comment_count>
      <attachid>174755</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-16 14:07:41 -0800</bug_when>
    <thetext>Comment on attachment 174755
Patch

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

&gt; Source/WebCore/rendering/RenderObject.cpp:1808
&gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; +        if (Frame* frame = this-&gt;frame())
&gt; +            frame-&gt;eventHandler()-&gt;updateCursor();
&gt; +    }

Why move this to setStyle instead of styleDidChange?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769671</commentid>
    <comment_count>15</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-16 14:13:09 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 174755 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174755&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1808
&gt; &gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; &gt; +        if (Frame* frame = this-&gt;frame())
&gt; &gt; +            frame-&gt;eventHandler()-&gt;updateCursor();
&gt; &gt; +    }
&gt; 
&gt; Why move this to setStyle instead of styleDidChange?

That&apos;s already explained in the changelog.
I spotted strange behaviour on mousedown/up on text node vs no text node. Over text node the logic in EventHandler didn&apos;t pick up the correct cursor in the first pass. My guess is that something in the StyleDidChange caused the textnode to update after the updateCursor() call was made. So, to be sure that all the things that happen inside StyleDidChange do not affect wether or not cursor gets updated, I moved it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769921</commentid>
    <comment_count>16</comment_count>
      <attachid>174755</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-17 01:02:01 -0800</bug_when>
    <thetext>Comment on attachment 174755
Patch

Attachment 174755 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14858748

New failing tests:
fast/events/mouse-cursor-change.html
inspector-protocol/nmi-webaudio.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770500</commentid>
    <comment_count>17</comment_count>
      <attachid>174920</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-19 02:07:23 -0800</bug_when>
    <thetext>Created attachment 174920
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770506</commentid>
    <comment_count>18</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-19 02:13:31 -0800</bug_when>
    <thetext>Changed timeouts in tests to 0 (completely removing timeout would fail detecting new cursor value).
Lowered timeout for detecting mousemove event on cursor change according to the fake mousemove timer delay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770519</commentid>
    <comment_count>19</comment_count>
      <attachid>174920</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-11-19 02:36:32 -0800</bug_when>
    <thetext>Comment on attachment 174920
Patch

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

&gt; Source/WebCore/rendering/RenderObject.cpp:1809
&gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; +        if (Frame* frame = this-&gt;frame())
&gt; +            frame-&gt;eventHandler()-&gt;updateCursor();
&gt; +    }
&gt; +

Would there be a problem in only updating the cursor when node is hovered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770523</commentid>
    <comment_count>20</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-19 02:42:39 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 174920 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174920&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1809
&gt; &gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; &gt; +        if (Frame* frame = this-&gt;frame())
&gt; &gt; +            frame-&gt;eventHandler()-&gt;updateCursor();
&gt; &gt; +    }
&gt; &gt; +
&gt; 
&gt; Would there be a problem in only updating the cursor when node is hovered?

I think that would be great. Is there a flag set when a node is hovered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770543</commentid>
    <comment_count>21</comment_count>
      <attachid>174920</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-19 03:15:59 -0800</bug_when>
    <thetext>Comment on attachment 174920
Patch

Attachment 174920 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14911139

New failing tests:
fast/events/mouse-cursor-change.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770551</commentid>
    <comment_count>22</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-11-19 03:21:58 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (From update of attachment 174920 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174920&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1809
&gt; &gt; &gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; &gt; &gt; +        if (Frame* frame = this-&gt;frame())
&gt; &gt; &gt; +            frame-&gt;eventHandler()-&gt;updateCursor();
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Would there be a problem in only updating the cursor when node is hovered?
&gt; 
&gt; I think that would be great. Is there a flag set when a node is hovered?

Yes, check Node::hovered().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770569</commentid>
    <comment_count>23</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-19 03:54:49 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; (From update of attachment 174920 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174920&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1809
&gt; &gt; &gt; &gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; &gt; &gt; &gt; +        if (Frame* frame = this-&gt;frame())
&gt; &gt; &gt; &gt; +            frame-&gt;eventHandler()-&gt;updateCursor();
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; Would there be a problem in only updating the cursor when node is hovered?
&gt; &gt; 
&gt; &gt; I think that would be great. Is there a flag set when a node is hovered?
&gt; 
&gt; Yes, check Node::hovered().

Tried that, didn&apos;t work. Broke tests, probably related to text nodes, because those don&apos;t seem to get the hovered flag set. This optimization opportunity should be investigated in another bug, it&apos;s going out of the scope of this bug / patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773673</commentid>
    <comment_count>24</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-22 00:19:00 -0800</bug_when>
    <thetext>No more comments?

I wonder why mac EWS dd not pass the tests.
Might it be some problem with the WES?
Could someone with a mac check if there&apos;s a problem with fast/events/mouse-cursor-change.html?

If there&apos;s no problem on mac, would the patch get landed or what happens next?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777762</commentid>
    <comment_count>25</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-28 04:54:51 -0800</bug_when>
    <thetext>What does it take to get a review or at least a comment?
It&apos;s not a complicated patch..
I don&apos;t get it - if patches are welcome, why let a bug fix lay around for weeks?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777784</commentid>
    <comment_count>26</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-11-28 05:24:38 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; What does it take to get a review or at least a comment?
&gt; It&apos;s not a complicated patch..
&gt; I don&apos;t get it - if patches are welcome, why let a bug fix lay around for weeks?

I think it looks fine. There are rooms for improvement, but they can come later, but you do need pass the tests on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777788</commentid>
    <comment_count>27</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-11-28 05:26:01 -0800</bug_when>
    <thetext>*** Bug 85343 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777791</commentid>
    <comment_count>28</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-11-28 05:29:10 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; What does it take to get a review or at least a comment?
&gt; &gt; It&apos;s not a complicated patch..
&gt; &gt; I don&apos;t get it - if patches are welcome, why let a bug fix lay around for weeks?
&gt; 
&gt; I think it looks fine. There are rooms for improvement, but they can come later, but you do need pass the tests on Mac.

Alternatively you add your failing test to LayoutTests/platform/mac/TestExpectations and open a bug on it failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777808</commentid>
    <comment_count>29</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-28 05:43:13 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; What does it take to get a review or at least a comment?
&gt; &gt; &gt; It&apos;s not a complicated patch..
&gt; &gt; &gt; I don&apos;t get it - if patches are welcome, why let a bug fix lay around for weeks?
&gt; &gt; 
&gt; &gt; I think it looks fine. There are rooms for improvement, but they can come later, but you do need pass the tests on Mac.
&gt; 
&gt; Alternatively you add your failing test to LayoutTests/platform/mac/TestExpectations and open a bug on it failing.

Sounds like a plan, since I have no access to a Mac to investigate. It might have something to do with eventSender implementation, but wouldn&apos;t be fun to debug without a test machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777821</commentid>
    <comment_count>30</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-11-28 05:56:00 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; &gt; What does it take to get a review or at least a comment?
&gt; &gt; &gt; &gt; It&apos;s not a complicated patch..
&gt; &gt; &gt; &gt; I don&apos;t get it - if patches are welcome, why let a bug fix lay around for weeks?
&gt; &gt; &gt; 
&gt; &gt; &gt; I think it looks fine. There are rooms for improvement, but they can come later, but you do need pass the tests on Mac.
&gt; &gt; 
&gt; &gt; Alternatively you add your failing test to LayoutTests/platform/mac/TestExpectations and open a bug on it failing.
&gt; 
&gt; Sounds like a plan, since I have no access to a Mac to investigate. It might have something to do with eventSender implementation, but wouldn&apos;t be fun to debug without a test machine.

It never is. If it had been a pre-existing test you would have to though, but since it is a new test, you are allowed a bit more freedom.

Btw, besides only doing this when necessary, the other improvement that could be done is not to construct a PlatformMouseEvent in updateCursor since you are not sending it anyway, but that would require changing the API of the selectCursor method, so it can wait for another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777854</commentid>
    <comment_count>31</comment_count>
      <attachid>174920</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-11-28 06:23:09 -0800</bug_when>
    <thetext>Comment on attachment 174920
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:1404
&gt; +    Settings* settings = m_frame-&gt;settings();
&gt; +    if (settings &amp;&amp; !settings-&gt;deviceSupportsMouse())
&gt; +        return;
&gt; +
&gt; +    FrameView* view = m_frame-&gt;view();
&gt; +    if (!view)
&gt; +        return;
&gt; +
&gt; +    if (!m_frame-&gt;page() || !m_frame-&gt;page()-&gt;isOnscreen())
&gt; +        return;

Most of this code is duplicated from fakeMouseMoveEventTimerFired, it would be nice if it would be shared. Using a function like bool &quot;EventHandler::canUpdateMouseCursor() const&quot; for example.
Also, any reason for not checking m_frame-&gt;page()-&gt;focusController()-&gt;isActive()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778133</commentid>
    <comment_count>32</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-28 11:48:12 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; What does it take to get a review or at least a comment?
&gt; &gt; &gt; It&apos;s not a complicated patch..
&gt; &gt; &gt; I don&apos;t get it - if patches are welcome, why let a bug fix lay around for weeks?
&gt; &gt; 
&gt; &gt; I think it looks fine. There are rooms for improvement, but they can come later, but you do need pass the tests on Mac.
&gt; 
&gt; Alternatively you add your failing test to LayoutTests/platform/mac/TestExpectations and open a bug on it failing.

That&apos;s not really an acceptable approach. Please at least try to contact someone who has access to Mac. If people contributing to WebKit kept breaking ports they don&apos;t work on, it&apos;ll eventually break all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778176</commentid>
    <comment_count>33</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-28 12:16:09 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #28)
&gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; &gt; What does it take to get a review or at least a comment?
&gt; &gt; &gt; &gt; It&apos;s not a complicated patch..
&gt; &gt; &gt; &gt; I don&apos;t get it - if patches are welcome, why let a bug fix lay around for weeks?
&gt; &gt; &gt; 
&gt; &gt; &gt; I think it looks fine. There are rooms for improvement, but they can come later, but you do need pass the tests on Mac.
&gt; &gt; 
&gt; &gt; Alternatively you add your failing test to LayoutTests/platform/mac/TestExpectations and open a bug on it failing.
&gt; 
&gt; That&apos;s not really an acceptable approach. Please at least try to contact someone who has access to Mac. If people contributing to WebKit kept breaking ports they don&apos;t work on, it&apos;ll eventually break all ports.

How does a new failing test break a port? The port must already be broken in the first place, unless the test is broken. And I don&apos;t think that&apos;s the case.

Anyways, I don&apos;t have the resources to debug on Mac and I don&apos;t know anyone with a Mac who is competent to debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778183</commentid>
    <comment_count>34</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-28 12:22:32 -0800</bug_when>
    <thetext>Ah, I misunderstood the situation. If the only failing tests are ones you&apos;re adding, then adding it to TestExpectations is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778191</commentid>
    <comment_count>35</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-11-28 12:29:20 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Ah, I misunderstood the situation. If the only failing tests are ones you&apos;re adding, then adding it to TestExpectations is fine.

Thanks for making that clear. I&apos;ll update the patch soon, have to find some time.

EWS logs are a pain to read, every run lists different tests failing, most of them completely unrelated. Though, all of them seem to list fast/events/mouse-cursor-change.html for some reason. It might help if someone could at least give the diff of the result for an indication of what might be wrong with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781011</commentid>
    <comment_count>36</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-02 13:58:38 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 174920 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174920&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:1404
&gt; &gt; +    Settings* settings = m_frame-&gt;settings();
&gt; &gt; +    if (settings &amp;&amp; !settings-&gt;deviceSupportsMouse())
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    FrameView* view = m_frame-&gt;view();
&gt; &gt; +    if (!view)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    if (!m_frame-&gt;page() || !m_frame-&gt;page()-&gt;isOnscreen())
&gt; &gt; +        return;
&gt; 
&gt; Most of this code is duplicated from fakeMouseMoveEventTimerFired, it would be nice if it would be shared. Using a function like bool &quot;EventHandler::canUpdateMouseCursor() const&quot; for example.
&gt; Also, any reason for not checking m_frame-&gt;page()-&gt;focusController()-&gt;isActive()?

I must have removed that check while experimenting with something. Will add it back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781015</commentid>
    <comment_count>37</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-02 14:28:49 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #20)
&gt; &gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; &gt; (From update of attachment 174920 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174920&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1809
&gt; &gt; &gt; &gt; &gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; &gt; &gt; &gt; &gt; +        if (Frame* frame = this-&gt;frame())
&gt; &gt; &gt; &gt; &gt; +            frame-&gt;eventHandler()-&gt;updateCursor();
&gt; &gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Would there be a problem in only updating the cursor when node is hovered?
&gt; &gt; &gt; 
&gt; &gt; &gt; I think that would be great. Is there a flag set when a node is hovered?
&gt; &gt; 
&gt; &gt; Yes, check Node::hovered().
&gt; 
&gt; Tried that, didn&apos;t work. Broke tests, probably related to text nodes, because those don&apos;t seem to get the hovered flag set. This optimization opportunity should be investigated in another bug, it&apos;s going out of the scope of this bug / patch.

I did now dig a little deeper. There were 3 problems with that:
1) Hovered flag is not set on text nodes.
2) Style change is propagated to text nodes sometime later and when hit test gets a text node, it won&apos;t have the correct cursor until its style is updated.
3) While holding mouse button down (having an element active), hovered flags are not changed on new hovered elements.

There&apos;s an easy workaround for (1) and (2) by getting the cursor from parent node when hit test gets a text node. (3) needs a change so that hovered flag is changed even when mouse button is down. I have checked and that&apos;s also how IE and FF behave - hover styles are shown also on those elements that were not pressed on, while on Chrome, hover styles are not applied to the elements that were not pressed down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781021</commentid>
    <comment_count>38</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-02 14:59:13 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Btw, besides only doing this when necessary, the other improvement that could be done is not to construct a PlatformMouseEvent in updateCursor since you are not sending it anyway, but that would require changing the API of the selectCursor method, so it can wait for another patch.

I have already done that, will be in the updated patch. Everything that was used from the event, is available on HitTestResult so there is no need for the event object. selectCursor() is only used in 2 locations, so it&apos;s an easy change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781029</commentid>
    <comment_count>39</comment_count>
      <attachid>177157</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-02 15:41:55 -0800</bug_when>
    <thetext>Created attachment 177157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781033</commentid>
    <comment_count>40</comment_count>
      <attachid>177157</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-02 15:49:41 -0800</bug_when>
    <thetext>Comment on attachment 177157
Patch

Attachment 177157 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15119137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781034</commentid>
    <comment_count>41</comment_count>
      <attachid>177157</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-02 15:53:29 -0800</bug_when>
    <thetext>Comment on attachment 177157
Patch

Attachment 177157 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15117168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781035</commentid>
    <comment_count>42</comment_count>
      <attachid>177157</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-02 15:54:49 -0800</bug_when>
    <thetext>Comment on attachment 177157
Patch

Attachment 177157 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15100296</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781036</commentid>
    <comment_count>43</comment_count>
      <attachid>177158</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-02 16:06:25 -0800</bug_when>
    <thetext>Created attachment 177158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781041</commentid>
    <comment_count>44</comment_count>
      <attachid>177160</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-02 16:12:44 -0800</bug_when>
    <thetext>Created attachment 177160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781054</commentid>
    <comment_count>45</comment_count>
      <attachid>177160</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-02 17:17:11 -0800</bug_when>
    <thetext>Comment on attachment 177160
Patch

Attachment 177160 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15120136

New failing tests:
fast/events/mouse-cursor-change.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781069</commentid>
    <comment_count>46</comment_count>
      <attachid>177160</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-02 18:03:02 -0800</bug_when>
    <thetext>Comment on attachment 177160
Patch

Attachment 177160 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15119167

New failing tests:
fast/events/mouse-cursor-change.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781153</commentid>
    <comment_count>47</comment_count>
      <attachid>177187</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-02 23:01:46 -0800</bug_when>
    <thetext>Created attachment 177187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781155</commentid>
    <comment_count>48</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-02 23:04:34 -0800</bug_when>
    <thetext>Added the failing test to mac test expectations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781208</commentid>
    <comment_count>49</comment_count>
      <attachid>177187</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-12-03 00:58:07 -0800</bug_when>
    <thetext>Comment on attachment 177187
Patch

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

Nice to see the improvements, but since you made a change in behavior that was obviously intended for some reason, we should change that as part of another bug. Since it was an optimization, this patch can land without.

&gt; Source/WebCore/dom/Document.cpp:-5755
&gt; -    // If the mouse is down and if this is a mouse move event, we want to restrict changes in
&gt; -    // :hover/:active to only apply to elements that are in the :active chain that we froze
&gt; -    // at the time the mouse went down.
&gt; -    bool mustBeInActiveChain = request.active() &amp;&amp; request.move();
&gt; -

I don&apos;t think it is a good idea to change this behaviour in this patch. We should figure out why it was introduced in the first place and fix it in another bug if we think it is still a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781212</commentid>
    <comment_count>50</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-03 01:05:40 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 177187 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177187&amp;action=review
&gt; 
&gt; Nice to see the improvements, but since you made a change in behavior that was obviously intended for some reason, we should change that as part of another bug. Since it was an optimization, this patch can land without.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:-5755
&gt; &gt; -    // If the mouse is down and if this is a mouse move event, we want to restrict changes in
&gt; &gt; -    // :hover/:active to only apply to elements that are in the :active chain that we froze
&gt; &gt; -    // at the time the mouse went down.
&gt; &gt; -    bool mustBeInActiveChain = request.active() &amp;&amp; request.move();
&gt; &gt; -
&gt; 
&gt; I don&apos;t think it is a good idea to change this behaviour in this patch. We should figure out why it was introduced in the first place and fix it in another bug if we think it is still a good idea.

I also thought about making the behavior change separate. Skipping the hovered() check should be enough to go without the change. I&apos;ll also dig up where the condition was introduced to see if there&apos;s a good reason for not being consistent with other browsers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781264</commentid>
    <comment_count>51</comment_count>
      <attachid>177187</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-03 02:44:31 -0800</bug_when>
    <thetext>Comment on attachment 177187
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Document.cpp:-5755
&gt;&gt;&gt; -
&gt;&gt; 
&gt;&gt; I don&apos;t think it is a good idea to change this behaviour in this patch. We should figure out why it was introduced in the first place and fix it in another bug if we think it is still a good idea.
&gt; 
&gt; I also thought about making the behavior change separate. Skipping the hovered() check should be enough to go without the change. I&apos;ll also dig up where the condition was introduced to see if there&apos;s a good reason for not being consistent with other browsers.

Found where this behavior was introduced: http://trac.webkit.org/changeset/9957

Quoting from the Changelog:
&gt; (b) If you mouse down on a non-selectable region and start moving, then the behavior has changed.  Instead of not updating at all, we mark the chain at the time the mouse goes down, and we restrict :hover/:active updates to only apply to elements that are in that chain.  This yields perfect hover/active control behavior, even when :active has been applied hierarchically.

Not sure what the &quot;perfect hover/active control behavior&quot; meant 7 years ago but it clearly is not what other browsers think about it today. CSS spec does not mention such limiting condition for applying :hover pseudo class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781378</commentid>
    <comment_count>52</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-12-03 06:01:27 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; Not sure what the &quot;perfect hover/active control behavior&quot; meant 7 years ago but it clearly is not what other browsers think about it today. CSS spec does not mention such limiting condition for applying :hover pseudo class.

I am guessing it is to avoid showing something only being selected as being active. Active style should only be rendered if the element would be activated if the user released the mouse-button, but if you are just over the element as part of a mouse selection, then it will not be activated and should not be rendered with active style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781382</commentid>
    <comment_count>53</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-03 06:10:21 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; (In reply to comment #51)
&gt; &gt; Not sure what the &quot;perfect hover/active control behavior&quot; meant 7 years ago but it clearly is not what other browsers think about it today. CSS spec does not mention such limiting condition for applying :hover pseudo class.
&gt; 
&gt; I am guessing it is to avoid showing something only being selected as being active. Active style should only be rendered if the element would be activated if the user released the mouse-button, but if you are just over the element as part of a mouse selection, then it will not be activated and should not be rendered with active style.

This change only affects hover style, not active.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781392</commentid>
    <comment_count>54</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-12-03 06:26:56 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #52)
&gt; &gt; (In reply to comment #51)
&gt; &gt; &gt; Not sure what the &quot;perfect hover/active control behavior&quot; meant 7 years ago but it clearly is not what other browsers think about it today. CSS spec does not mention such limiting condition for applying :hover pseudo class.
&gt; &gt; 
&gt; &gt; I am guessing it is to avoid showing something only being selected as being active. Active style should only be rendered if the element would be activated if the user released the mouse-button, but if you are just over the element as part of a mouse selection, then it will not be activated and should not be rendered with active style.
&gt; 
&gt; This change only affects hover style, not active.

The part I commented on affects :active and :hover equally, but as we have discussed, it will be fine to put in a separate patch/bug, then we can discuss its implications there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781413</commentid>
    <comment_count>55</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-03 06:54:57 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #53)
&gt; &gt; (In reply to comment #52)
&gt; &gt; &gt; (In reply to comment #51)
&gt; &gt; &gt; &gt; Not sure what the &quot;perfect hover/active control behavior&quot; meant 7 years ago but it clearly is not what other browsers think about it today. CSS spec does not mention such limiting condition for applying :hover pseudo class.
&gt; &gt; &gt; 
&gt; &gt; &gt; I am guessing it is to avoid showing something only being selected as being active. Active style should only be rendered if the element would be activated if the user released the mouse-button, but if you are just over the element as part of a mouse selection, then it will not be activated and should not be rendered with active style.
&gt; &gt; 
&gt; &gt; This change only affects hover style, not active.
&gt; 
&gt; The part I commented on affects :active and :hover equally, but as we have discussed, it will be fine to put in a separate patch/bug, then we can discuss its implications there.

Actually it doesn&apos;t. It only checks if the node is activated to decide if hovered flags should be changed or not. But you are right, this belongs in another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781595</commentid>
    <comment_count>56</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-03 10:23:46 -0800</bug_when>
    <thetext>Could you please clarify the relationship between this bug and bug 103857? How did you confirm that you are not introducing a regression on Mac here?

It is indeed sometimes acceptable to leave a test for new functionality failing on some platforms, but hover effects are not new functionality. I do not see how it&apos;s appropriate to land this with a mystery test failure that hasn&apos;t been investigated at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781600</commentid>
    <comment_count>57</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-03 10:26:39 -0800</bug_when>
    <thetext>What platforms have you tested this with manually? The only other EWS that runs tests is cr-linux, so it could be that the new test fails everywhere except to cr-linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781631</commentid>
    <comment_count>58</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-03 10:45:36 -0800</bug_when>
    <thetext>(In reply to comment #56)
&gt; Could you please clarify the relationship between this bug and bug 103857? How did you confirm that you are not introducing a regression on Mac here?
&gt; 
&gt; It is indeed sometimes acceptable to leave a test for new functionality failing on some platforms, but hover effects are not new functionality. I do not see how it&apos;s appropriate to land this with a mystery test failure that hasn&apos;t been investigated at all.

There could be no regression because the test is for an improvement / new functionality. It is for the case when changing cursor while a mouse button is hold down. Before this patch there were no cursor changes happening in this case. There are other tests for simple hovering which worked before and works with the patch.

I have manually tested it only on linux because I have no access to a mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781707</commentid>
    <comment_count>59</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-12-03 11:33:05 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; (In reply to comment #56)
&gt; &gt; Could you please clarify the relationship between this bug and bug 103857? How did you confirm that you are not introducing a regression on Mac here?
&gt; &gt; 
&gt; &gt; It is indeed sometimes acceptable to leave a test for new functionality failing on some platforms, but hover effects are not new functionality. I do not see how it&apos;s appropriate to land this with a mystery test failure that hasn&apos;t been investigated at all.
&gt; 
&gt; There could be no regression because the test is for an improvement / new functionality. It is for the case when changing cursor while a mouse button is hold down. Before this patch there were no cursor changes happening in this case. There are other tests for simple hovering which worked before and works with the patch.
&gt; 
&gt; I have manually tested it only on linux because I have no access to a mac.

On linux, it should still be possible to test with both Chrome and Qt ports of webkit, and sometimes even GTK+ if you are lucky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781820</commentid>
    <comment_count>60</comment_count>
      <attachid>177187</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-03 13:29:50 -0800</bug_when>
    <thetext>Comment on attachment 177187
Patch

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

&gt; Source/WebCore/rendering/RenderObject.cpp:1813
&gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; +        if (Frame* frame = this-&gt;frame()) {
&gt; +            if (node() &amp;&amp; node()-&gt;hovered())
&gt; +                frame-&gt;eventHandler()-&gt;updateCursor();
&gt; +        }
&gt; +    }

The old code did some coalescing (by virtue of the &quot;soon&quot;), and yours does not. I&apos;d be worried that this could create a performance issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781845</commentid>
    <comment_count>61</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-03 13:45:19 -0800</bug_when>
    <thetext>(In reply to comment #60)
&gt; (From update of attachment 177187 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177187&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1813
&gt; &gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; &gt; +        if (Frame* frame = this-&gt;frame()) {
&gt; &gt; +            if (node() &amp;&amp; node()-&gt;hovered())
&gt; &gt; +                frame-&gt;eventHandler()-&gt;updateCursor();
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; The old code did some coalescing (by virtue of the &quot;soon&quot;), and yours does not. I&apos;d be worried that this could create a performance issue.

The old code used a path that was built for use in scrolling, that&apos;s why it has the throttling built in. I don&apos;t think that changing cursor is so common to affect performance. My code also checks if the node that had the cursor changed is hovered or not. Old code changed the cursor even when cursor was changed on a node that was not hovered, not to mention the completely unnecessary mousemove event that was fired all the way up to javascript.

By the way, there&apos;s a lot more code run on every mousemove event. My code is a cleaned up version of that doing only the things needed for changing the cursor. And I couldn&apos;t think of a reason why someone would change mouse cursor more often than a mousemove event is fired - unless, of course, if that&apos;s what they intend to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782575</commentid>
    <comment_count>62</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-04 08:36:42 -0800</bug_when>
    <thetext>It would be easy to make a testcase that changes cursor style in a tight JS loop. Have you tried that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782583</commentid>
    <comment_count>63</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2012-12-04 08:47:54 -0800</bug_when>
    <thetext>(In reply to comment #62)
&gt; It would be easy to make a testcase that changes cursor style in a tight JS loop. Have you tried that?

I might try, but what&apos;s the use case for such test?

With a JS loop you can hang a browser without doing anything at all in the loop. There is no point for a plain stupid test, don&apos;t you think?

What I&apos;m trying to say is that moving mouse over a page runs the same code plus a lot more for every single mousemove event. If moving mouse does not have performance issues then changing a cursor will be no different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805976</commentid>
    <comment_count>64</comment_count>
      <attachid>182485</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-01-13 08:27:22 -0800</bug_when>
    <thetext>Created attachment 182485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805977</commentid>
    <comment_count>65</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-01-13 08:52:36 -0800</bug_when>
    <thetext>Sorry, had not time to work on this issue for over a month.
I made minor changes to make the patch build with the changes that happened while I was away.

I am still waiting for a good explanation for why there could be need for changing mouse cursor in a tight loop or even as slow as 60 times per second, which is common monitor refresh rate. I tested changing cursor every millisecond and it did not have any noticeable performance issues. In fact, on the linux machine I develop on, it consumed about 2 times less CPU in Chrome than it does on FF with the same test (http://jsbin.com/umiwuy/3/edit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814059</commentid>
    <comment_count>66</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-01-23 03:10:10 -0800</bug_when>
    <thetext>ping, it&apos;s been over a week..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814069</commentid>
    <comment_count>67</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-23 03:26:25 -0800</bug_when>
    <thetext>At 65 comments, and 23k patch (with an unexplained failing test), it makes this bug hard to review.  Definitely doable, but your best chance is to engage a reviewer over #webkit and walk them through it.

You might try connecting with carewolf (Allan Jensen), although he&apos;s not a reviewer, he&apos;s been in some of the mouse handling code recently and his &quot;LGTM&quot; is thus meaningful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814072</commentid>
    <comment_count>68</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-23 03:29:10 -0800</bug_when>
    <thetext>(In reply to comment #67)
&gt; At 65 comments, and 23k patch (with an unexplained failing test), it makes this bug hard to review.  Definitely doable, but your best chance is to engage a reviewer over #webkit and walk them through it.
&gt; 
&gt; You might try connecting with carewolf (Allan Jensen), although he&apos;s not a reviewer, he&apos;s been in some of the mouse handling code recently and his &quot;LGTM&quot; is thus meaningful.

Sorry.  I don&apos;t know what I was thinking.  Allan has been a reviewer for years.
http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py#L481</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814085</commentid>
    <comment_count>69</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-01-23 03:57:39 -0800</bug_when>
    <thetext>(In reply to comment #55)
&gt; (In reply to comment #54)
&gt; &gt; (In reply to comment #53)
&gt; &gt; &gt; (In reply to comment #52)
&gt; &gt; &gt; &gt; (In reply to comment #51)
&gt; &gt; &gt; &gt; &gt; Not sure what the &quot;perfect hover/active control behavior&quot; meant 7 years ago but it clearly is not what other browsers think about it today. CSS spec does not mention such limiting condition for applying :hover pseudo class.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I am guessing it is to avoid showing something only being selected as being active. Active style should only be rendered if the element would be activated if the user released the mouse-button, but if you are just over the element as part of a mouse selection, then it will not be activated and should not be rendered with active style.
&gt; &gt; &gt; 
&gt; &gt; &gt; This change only affects hover style, not active.
&gt; &gt; 
&gt; &gt; The part I commented on affects :active and :hover equally, but as we have discussed, it will be fine to put in a separate patch/bug, then we can discuss its implications there.
&gt; 
&gt; Actually it doesn&apos;t. It only checks if the node is activated to decide if hovered flags should be changed or not. But you are right, this belongs in another bug.

Could you move it? I guess it is also the change that causes the existing hover-active-drag test to change. I would feel more comfortable accepting the patch if it limits its side-effects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814111</commentid>
    <comment_count>70</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-01-23 05:04:27 -0800</bug_when>
    <thetext>(In reply to comment #69)
&gt; Could you move it? I guess it is also the change that causes the existing hover-active-drag test to change. I would feel more comfortable accepting the patch if it limits its side-effects.

Oh, I forgot that one while I was away.

The thing is, if this is moved away, I can no longer check for if the element that had style changed is hovered or not. With that change in the patch it is performs a lot better, it does not even try to update cursor if the style change didn&apos;t happen under the cursor.

What do you men by &quot;it is also the change that causes the existing hover-active-drag test to change&quot;? The change makes hover working as it does in the other browsers - hover state is updated even when a mouse button is hold down while old code does not do that.

I couldn&apos;t find a single reason for the mustBeInActiveChain check. As noted, it has been there from 2005. The patch back then did not give any reason for that check nor did it touch any tests.

I have added David Hyatt to CC list (the one who introduced that check there). Maybe he can share some insight on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814245</commentid>
    <comment_count>71</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-01-23 08:55:02 -0800</bug_when>
    <thetext>(In reply to comment #70)
&gt; I couldn&apos;t find a single reason for the mustBeInActiveChain check. As noted, it has been there from 2005. The patch back then did not give any reason for that check nor did it touch any tests.
&gt; 
The biggest problem I have with it is that it affects both Active and Hover since they are set using the same nodesToAddToChain vector. We could use two different vectors, but that could get confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814325</commentid>
    <comment_count>72</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-01-23 10:27:26 -0800</bug_when>
    <thetext>(In reply to comment #71)
&gt; (In reply to comment #70)
&gt; &gt; I couldn&apos;t find a single reason for the mustBeInActiveChain check. As noted, it has been there from 2005. The patch back then did not give any reason for that check nor did it touch any tests.
&gt; &gt; 
&gt; The biggest problem I have with it is that it affects both Active and Hover since they are set using the same nodesToAddToChain vector. We could use two different vectors, but that could get confusing.

I see your concern. Form what I read from the source, active is only touched when some new element got activated (controlled through bool allowActiveChanges = !oldActiveElement &amp;&amp; activeElement();). My manual test also confirms that removing this check did not make active element to change on mouse move, but hovered element changed as it should. Have a look at http://jsbin.com/onomul/3/edit

Maybe a new unit test could help us out here? But I&apos;m not sure what or how exactly it should test because this behavior doesn&apos;t seem to have any tests, does it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815540</commentid>
    <comment_count>73</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-24 09:16:06 -0800</bug_when>
    <thetext>The reason this change was originally made is that computer user interfaces typically do a sort of “lock” when you click and drag on something. Giving hover feedback to indicate what a click would do when you are in the process of dragging something over that item you could click doesn’t make sense. That’s what drove the change.

The fact that this is now different from other browsers is unfortunate.

It’s too bad that it’s hard to make a website that will work properly. If I am dragging some text over a link, the cursor should not change into the “hand” cursor nor should the link light up with its hover feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815682</commentid>
    <comment_count>74</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-01-24 11:50:20 -0800</bug_when>
    <thetext>(In reply to comment #73)
&gt; The reason this change was originally made is that computer user interfaces typically do a sort of “lock” when you click and drag on something. Giving hover feedback to indicate what a click would do when you are in the process of dragging something over that item you could click doesn’t make sense. That’s what drove the change.
&gt; 
&gt; The fact that this is now different from other browsers is unfortunate.
&gt; 
&gt; It’s too bad that it’s hard to make a website that will work properly. If I am dragging some text over a link, the cursor should not change into the “hand” cursor nor should the link light up with its hover feedback.

W3C: &quot;The :hover pseudo-class applies while the user designates an element with a pointing device, but does not necessarily activate it.&quot;

There&apos;s no such limit defined in the spec that forbids applying :hover when there&apos;s an element activated. Hover state should be applied to the element that is under mouse pointer, but current code freezes hover state whenever mouse button is pressed down. Doesn&apos;t that conflict with the spec?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829904</commentid>
    <comment_count>75</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-11 11:10:57 -0800</bug_when>
    <thetext>Ping for comments.
I would very much like to get that patch landed and getting no feedback doesn&apos;t really help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829953</commentid>
    <comment_count>76</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-11 11:42:17 -0800</bug_when>
    <thetext>Doesn&apos;t comment 73 provide sufficient feedback? No spec can possibly validate such an obvious UI deficiency.

Getting rid of the fake event seems worthwhile, but we shouldn&apos;t degrade UI when doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829994</commentid>
    <comment_count>77</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-11 12:43:01 -0800</bug_when>
    <thetext>(In reply to comment #76)
&gt; Doesn&apos;t comment 73 provide sufficient feedback? No spec can possibly validate such an obvious UI deficiency.
&gt; 
&gt; Getting rid of the fake event seems worthwhile, but we shouldn&apos;t degrade UI when doing so.

What exactly do you call an obvious UI deficiency?

If hover state is locked on mousedown, there should be another fast and reliable way for checking which element is actually under the mouse cursor (or in the chain of parents of that element).I did not find another way, feel free to point me in the right direction if there is one.

Hover state would be perfect for that if only it represented the actual hovered state, not the locked one.
Any suggestions how to do that?
I think it would be pointless to add another flag for the real hover state just because there already is a broken one. Why not fix the current hover state flag? As I already pointed out, it does make hover state consistent with other browsers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830251</commentid>
    <comment_count>78</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-02-11 15:51:02 -0800</bug_when>
    <thetext>Just to keep things simple. Would anyone object to something closer to the original patch (modulo changes from comments) without the optimization that requires better knowledge of hover?

Second and third, we could then look at the more complicated issues of UI and how to best fast determine/remember if the mouse is over a node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830832</commentid>
    <comment_count>79</comment_count>
      <attachid>187844</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-12 05:41:41 -0800</bug_when>
    <thetext>Created attachment 187844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830842</commentid>
    <comment_count>80</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-12 05:50:22 -0800</bug_when>
    <thetext>Removed hover check before calling EventHandler::updateCursor()
And also removed the change in UX of :active and :hover states.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830892</commentid>
    <comment_count>81</comment_count>
      <attachid>187844</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-02-12 06:42:37 -0800</bug_when>
    <thetext>Comment on attachment 187844
Patch

LGTM, though a follow up patch should be opened for the optimization opportunity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830893</commentid>
    <comment_count>82</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-02-12 06:43:15 -0800</bug_when>
    <thetext>(In reply to comment #81)
&gt; (From update of attachment 187844 [details])
&gt; LGTM, though a follow up patch should be opened for the optimization opportunity.

Ehr, make that &apos;follow up bug&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830916</commentid>
    <comment_count>83</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-12 07:08:34 -0800</bug_when>
    <thetext>(In reply to comment #82)
&gt; (In reply to comment #81)
&gt; &gt; (From update of attachment 187844 [details] [details])
&gt; &gt; LGTM, though a follow up patch should be opened for the optimization opportunity.
&gt; 
&gt; Ehr, make that &apos;follow up bug&apos;.

Opened follow-up bug 109583</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832856</commentid>
    <comment_count>84</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-14 01:46:00 -0800</bug_when>
    <thetext>land, anyone?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832877</commentid>
    <comment_count>85</comment_count>
      <attachid>187844</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 02:16:04 -0800</bug_when>
    <thetext>Comment on attachment 187844
Patch

Clearing flags on attachment: 187844

Committed r142861: &lt;http://trac.webkit.org/changeset/142861&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832878</commentid>
    <comment_count>86</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 02:16:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833637</commentid>
    <comment_count>87</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-14 19:55:40 -0800</bug_when>
    <thetext>This patch is fundamentally wrong, and a huge performance regression.

It&apos;s wrong because you&apos;re do hit testing (via updateCursor()) inside of style recalc. Hit testing relies on geometry, but since style recalc happens before layout, the geometry is not up-to-date.

Secondly, it&apos;s a huge perf hit. I profiled the web inspector while dragging a separator around, and see this:

Running Time	Self		Symbol Name
7864.0ms   96.6%	0.0	 	                           WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
7849.0ms   96.4%	0.0	 	                            WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
7842.0ms   96.3%	0.0	 	                             WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
5233.0ms   64.3%	1.0	 	                              WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
4534.0ms   55.7%	0.0	 	                               WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
1932.0ms   23.7%	1.0	 	                                WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
1614.0ms   19.8%	0.0	 	                                WebCore::Text::recalcTextStyle(WebCore::Node::StyleChange)
1612.0ms   19.8%	1.0	 	                                 WebCore::RenderObject::setStyle(WTF::PassRefPtr&lt;WebCore::RenderStyle&gt;)
1607.0ms   19.7%	0.0	 	                                  WebCore::EventHandler::updateCursor()
1583.0ms   19.4%	0.0	 	                                   WebCore::RenderView::hitTest(WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;)
1583.0ms   19.4%	0.0	 	                                    WebCore::RenderLayer::hitTest(WebCore::HitTestRequest const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestResult&amp;)
1580.0ms   19.4%	1.0	 	                                     WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, bool, WebCore::HitTestingTransformState const*, double*)
1578.0ms   19.3%	0.0	 	                                      WebCore::RenderLayer::hitTestList(WTF::Vector&lt;WebCore::RenderLayer*, 0ul&gt;*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool)
1578.0ms   19.3%	0.0	 	                                       WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, bool, WebCore::HitTestingTransformState const*, double*)
1578.0ms   19.3%	0.0	 	                                        WebCore::RenderLayer::hitTestList(WTF::Vector&lt;WebCore::RenderLayer*, 0ul&gt;*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool)
1577.0ms   19.3%	0.0	 	                                         WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, bool, WebCore::HitTestingTransformState const*, double*)
1572.0ms   19.3%	4.0	 	                                          WebCore::RenderLayer::hitTestList(WTF::Vector&lt;WebCore::RenderLayer*, 0ul&gt;*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool)
1567.0ms   19.2%	5.0	 	                                           WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, bool, WebCore::HitTestingTransformState const*, double*)
1528.0ms   18.7%	122.0	 	                                            WebCore::RenderLayer::hitTestList(WTF::Vector&lt;WebCore::RenderLayer*, 0ul&gt;*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool)
1352.0ms   16.6%	182.0	 	                                             WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, bool, WebCore::HitTestingTransformState const*, double*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833638</commentid>
    <comment_count>88</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-14 19:56:11 -0800</bug_when>
    <thetext>I am going to revert this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833656</commentid>
    <comment_count>89</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-14 20:39:30 -0800</bug_when>
    <thetext>The patch is also bad because you&apos;re hit testing for every style change that involves a change in cursor style, but using the last known mouse position each time. You should only hit test once with that position, not every time you see a cursor change in the style.

Reverted in http://trac.webkit.org/changeset/142956</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833701</commentid>
    <comment_count>90</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-14 22:36:31 -0800</bug_when>
    <thetext>I had a fear for that, will have to use a timer just like the fake mousemove has.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833821</commentid>
    <comment_count>91</comment_count>
      <attachid>188520</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-15 02:20:36 -0800</bug_when>
    <thetext>Created attachment 188520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833832</commentid>
    <comment_count>92</comment_count>
      <attachid>188522</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-15 02:34:33 -0800</bug_when>
    <thetext>Created attachment 188522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833835</commentid>
    <comment_count>93</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-15 02:49:03 -0800</bug_when>
    <thetext>Style cursor change is now calling EventHandler::scheduleCursorUpdate() which is set to call updateCursor after 20ms (50Hz).
This should give plenty of time for style and layout changes to happen.
The timer is also stopped when cursor is changed through mousemove, which calls selectCursor directly.

This should be fine to iron out the performance hit?

I&apos;m also curious about how &quot;dragging a separator around&quot; could have caused a cursor change in style. Might it have been a false positive in RenderObject::areCursorsEqual()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833852</commentid>
    <comment_count>94</comment_count>
      <attachid>188525</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-15 03:30:58 -0800</bug_when>
    <thetext>Created attachment 188525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833899</commentid>
    <comment_count>95</comment_count>
      <attachid>188525</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 04:57:30 -0800</bug_when>
    <thetext>Comment on attachment 188525
Patch

Attachment 188525 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16584162

New failing tests:
fast/events/mouse-cursor-change.html
fast/events/mouse-cursor-no-mousemove.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833912</commentid>
    <comment_count>96</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-15 05:08:54 -0800</bug_when>
    <thetext>Now that&apos;s unfortunate, I completely forgot about those cursor tests being in near-sync.
Will have to use longer timeouts I guess, which is not nice. I don&apos;t think there are other options. Any thoughts on that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834071</commentid>
    <comment_count>97</comment_count>
      <attachid>188525</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-15 09:02:36 -0800</bug_when>
    <thetext>Comment on attachment 188525
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:1245
&gt; +    m_cursorTimer.stop();

You don&apos;t need to stop the timer here.

&gt; Source/WebCore/page/EventHandler.h:283
&gt; +    void cursorTimerFired(Timer&lt;EventHandler&gt;*);

cursorUpdateTimerFired.

&gt; Source/WebCore/page/EventHandler.h:411
&gt; +    Timer&lt;EventHandler&gt; m_cursorTimer;

This should be called m_cursorUpdateTimer

&gt; Source/WebCore/rendering/RenderObject.cpp:1813
&gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; +        if (Frame* frame = this-&gt;frame())
&gt; +            frame-&gt;eventHandler()-&gt;scheduleCursorUpdate();
&gt; +    }

Why not leave this in styleDidChange like the old code? setStyle() should not be polluted with  stuff like this. The hunk above would also then not be required.

I&apos;m still not convinced that this is the correct place to do this. I think cursor updates should really happen after layout, and a zero-delay timer after a style change doesn&apos;t necessarily mean that layout has happened. Some style changes won&apos;t result in layout (just painting), so it&apos;s OK to update the cursor then. But others do, and the layout may be delayed by layout timers in FrameView, in which case we should also delay the cursor update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834141</commentid>
    <comment_count>98</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-15 10:20:51 -0800</bug_when>
    <thetext>I&apos;ll do the suggested changes.

I think we should go for a simple solution here just to get the 2 annoying bugs fixed and investigate a better solution under a new bug. It&apos;s just not that easy to find the correct place for a timer-less cursor update. I am far too unfamiliar with the code base at the moment so it would require a lot of digging around. I am just trying my best at fixing a long standing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834239</commentid>
    <comment_count>99</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-15 11:57:40 -0800</bug_when>
    <thetext>I&apos;m OK with the current patch if the RenderObject changes are cleaned up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834332</commentid>
    <comment_count>100</comment_count>
      <attachid>188633</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-15 13:30:59 -0800</bug_when>
    <thetext>Created attachment 188633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834352</commentid>
    <comment_count>101</comment_count>
      <attachid>188638</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-15 13:47:38 -0800</bug_when>
    <thetext>Created attachment 188638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834453</commentid>
    <comment_count>102</comment_count>
      <attachid>188638</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-15 16:12:28 -0800</bug_when>
    <thetext>Comment on attachment 188638
Patch

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

&gt; Source/WebCore/rendering/RenderObject.cpp:1971
&gt; -            frame-&gt;eventHandler()-&gt;dispatchFakeMouseMoveEventSoon();
&gt; +            frame-&gt;eventHandler()-&gt;scheduleCursorUpdate();

Why isn&apos;t dispatchFakeMouseMoveEventSoon() entirely removed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834455</commentid>
    <comment_count>103</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-15 16:13:42 -0800</bug_when>
    <thetext>Also, does this patch cause a behavior change where the cursor is changed when the mouse is down?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834587</commentid>
    <comment_count>104</comment_count>
      <attachid>187844</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2013-02-15 18:45:26 -0800</bug_when>
    <thetext>Comment on attachment 187844
Patch

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

&gt; Source/WebCore/rendering/RenderObject.cpp:1810
&gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {

is .get() needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834674</commentid>
    <comment_count>105</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-16 01:13:54 -0800</bug_when>
    <thetext>(In reply to comment #104)
&gt; (From update of attachment 187844 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187844&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1810
&gt; &gt; +    if (oldStyle.get() &amp;&amp; !areCursorsEqual(oldStyle.get(), this-&gt;style())) {
&gt; 
&gt; is .get() needed?

It was there, but it doesn&apos;t matter, latest patch doesn&apos;t have that line any more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834675</commentid>
    <comment_count>106</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-16 01:20:11 -0800</bug_when>
    <thetext>(In reply to comment #102)
&gt; (From update of attachment 188638 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188638&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:1971
&gt; &gt; -            frame-&gt;eventHandler()-&gt;dispatchFakeMouseMoveEventSoon();
&gt; &gt; +            frame-&gt;eventHandler()-&gt;scheduleCursorUpdate();
&gt; 
&gt; Why isn&apos;t dispatchFakeMouseMoveEventSoon() entirely removed?

Last time I checked it was still used in scrolling.

&gt; Also, does this patch cause a behavior change where the cursor is changed when the mouse is down?

There is no behavior change except that it respects the cursor changes initiated by user code (cursor value change, class change causing cursor change etc.).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837503</commentid>
    <comment_count>107</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-20 08:58:42 -0800</bug_when>
    <thetext>Any more concerns or is it ok for landing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837592</commentid>
    <comment_count>108</comment_count>
    <who name="">spamdaemon</who>
    <bug_when>2013-02-20 11:18:17 -0800</bug_when>
    <thetext>Will this patch change the cursor when an element is set to &quot;display: none&quot;?

I&apos;ve got some code that pulls a transparent blocking window over the page while an AJAX call is in progress. Once the ajax call returns, the blocking window is removed, but the cursor remains the same until I move the mouse.

On Firefox, the cursor automatically changes back without having to move the mouse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837598</commentid>
    <comment_count>109</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-20 11:21:41 -0800</bug_when>
    <thetext>(In reply to comment #108)
&gt; Will this patch change the cursor when an element is set to &quot;display: none&quot;?
&gt; 
&gt; I&apos;ve got some code that pulls a transparent blocking window over the page while an AJAX call is in progress. Once the ajax call returns, the blocking window is removed, but the cursor remains the same until I move the mouse.
&gt; 
&gt; On Firefox, the cursor automatically changes back without having to move the mouse.

This patch does not handle updating cursor on layout change. It only handled the case when cursor value is changed in styles. There should already be a separate bug for layout changes not updating cursor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842869</commentid>
    <comment_count>110</comment_count>
      <attachid>190475</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-27 02:32:23 -0800</bug_when>
    <thetext>Created attachment 190475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842870</commentid>
    <comment_count>111</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-02-27 02:33:55 -0800</bug_when>
    <thetext>Rebased just to please all the EWS&apos;es, no idea what happened last time.
Still waiting for re-review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847477</commentid>
    <comment_count>112</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-05 02:23:02 -0800</bug_when>
    <thetext>Simon Fraser, could you please review?
I have tried to catch you on #webkit but I guess time zone difference does it&apos;s job too good these days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847816</commentid>
    <comment_count>113</comment_count>
      <attachid>190475</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-05 10:46:29 -0800</bug_when>
    <thetext>Comment on attachment 190475
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:149
&gt; +const double cursorUpdateInterval = 0.02;

Calling this &quot;internal&quot; makes it sounds like the timer repeats. It would be better as &quot;delay&quot;.

&gt; Source/WebCore/page/EventHandler.cpp:1254
&gt; +    HitTestRequest request(HitTestRequest::ReadOnly);
&gt; +    HitTestResult result(view-&gt;windowToContents(m_lastKnownMousePosition));
&gt; +    m_frame-&gt;document()-&gt;renderView()-&gt;hitTest(request, result);

I think you should call  m_frame-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets(); before this code. Layout can be delayed on timers, and you need to ensure that layout is up to date before hit testing.

Alternatively (perhaps preferably), you could just bail if FrameView::needsLayout() returns true, butI wonder if that would result in cases where the cursor update would be postponed forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847868</commentid>
    <comment_count>114</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-05 11:42:32 -0800</bug_when>
    <thetext>(In reply to comment #113)
&gt; Calling this &quot;internal&quot; makes it sounds like the timer repeats. It would be better as &quot;delay&quot;.

I&apos;d say it&apos;s still interval, because it doesn&apos;t get infinitely delayed, but cursor will indeed be changed with that interval when requested frequently enough.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:1254
&gt; &gt; +    HitTestRequest request(HitTestRequest::ReadOnly);
&gt; &gt; +    HitTestResult result(view-&gt;windowToContents(m_lastKnownMousePosition));
&gt; &gt; +    m_frame-&gt;document()-&gt;renderView()-&gt;hitTest(request, result);
&gt; 
&gt; I think you should call  m_frame-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets(); before this code. Layout can be delayed on timers, and you need to ensure that layout is up to date before hit testing.
&gt; 
&gt; Alternatively (perhaps preferably), you could just bail if FrameView::needsLayout() returns true, butI wonder if that would result in cases where the cursor update would be postponed forever.

Will add m_frame-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();
Bailing would be practically the same as doing nothing about it, because there won&apos;t be another EventHandler::cupdateCursor() call for the same same change and another change may never come.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848006</commentid>
    <comment_count>115</comment_count>
      <attachid>191550</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-05 13:30:17 -0800</bug_when>
    <thetext>Created attachment 191550
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848082</commentid>
    <comment_count>116</comment_count>
      <attachid>191550</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-03-05 14:34:17 -0800</bug_when>
    <thetext>Comment on attachment 191550
Patch

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

Idea looks pretty good, but patch still needs work.

Not good that the test fails on Mac, by the way, and we should find out why before landing.

&gt; Source/WebCore/ChangeLog:27
&gt; +        (WebCore):

Please remove this bogus line.

&gt; Source/WebCore/ChangeLog:36
&gt; +        (EventHandler):

Please remove this bogus line.

&gt; Source/WebCore/page/EventHandler.cpp:149
&gt; +// The amount of time to wait for a cursor update on style and layout changes
&gt; +// Set to 50Hz, no need to be faster than common screen refresh rate
&gt; +const double cursorUpdateInterval = 0.02;

It’s a real shame that all our various timers such as the layout timer, repaint timer, and cursor update timer are independent. Some day I’d prefer to see a common scheme that linked them all since they are all about updating what’s visible on-screen.

&gt; Source/WebCore/page/EventHandler.cpp:1238
&gt; +    Settings* settings = m_frame-&gt;settings();
&gt; +    if (settings &amp;&amp; !settings-&gt;deviceSupportsMouse())
&gt; +        return;

Why don’t I see deletion of old code that checked deviceSupportsMouse? If this was copied and pasted from somewhere, we need to refactor so we share that code instead of copying it.

Not new to this patch, but it’s crazy that this is a “setting”. That’s not the right way to expose something like that to WebKit.

&gt; Source/WebCore/page/EventHandler.cpp:1245
&gt; +    if (!m_frame-&gt;page() || !m_frame-&gt;page()-&gt;isOnscreen() || !m_frame-&gt;page()-&gt;focusController()-&gt;isActive())
&gt; +        return;

Again, was this rule copied and pasted from somewhere? We don’t just want another copy.

I’d like to see these checks about when it’s OK to set the cursor bundled up into a FrameView member function called shouldSetCursor or something like that. I think I’d include the deviceSupportsMouse check there along with these. I hope this would cut down on code duplication; not sure where else these checks already exist and I am not easily able to grep the code at this moment.

&gt; Source/WebCore/page/EventHandler.cpp:1251
&gt; +    bool shiftKey;
&gt; +    bool ctrlKey;
&gt; +    bool altKey;
&gt; +    bool metaKey;
&gt; +    PlatformKeyboardEvent::getCurrentModifierState(shiftKey, ctrlKey, altKey, metaKey);

It’s not correct to combine the shift key state from the time of cursor adjustment with the mouse position from m_lastKnownMousePosition. Since we need shift key state to select the cursor, then we need to store the shift key state along with the mouse position at the time the mouse position is stored.

&gt; Source/WebCore/page/EventHandler.cpp:1253
&gt; +    m_frame-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();

This is wrong. A plain updateLayout would be OK, but there’s no reason for us to force a flash of unstyled content here, which is what updateLayoutIgnorePendingStylesheets does.

&gt; Source/WebCore/page/EventHandler.cpp:1257
&gt; +    m_frame-&gt;document()-&gt;renderView()-&gt;hitTest(request, result);

Better to call view-&gt;renderView() rather than m_frame-&gt;document()-&gt;renderView(). Also, the RenderView can be zero, so we should do a null check.

&gt; Source/WebCore/page/EventHandler.cpp:1269
&gt; +    if (m_cursorUpdateTimer.isActive())
&gt; +        m_cursorUpdateTimer.stop();

We can just call stop unconditionally. No real reason to check isActive. Some other call sites might do it, but they are either incorrect, or trying to optimize.

This is not the correct place to stop the timer. We want to stop the timer when we set the cursor, not when we decide what to do set it to. Adding a side effect to a function that is supposed to tell us what cursor to use is not good design. This might require a little refactoring of the selectCursor call sites; maybe we can combine the selectCursor, setCursor, setting m_currentMouseCursor, and stopping the m_cursorUpdateTimer and use that function in all the appropriate places.

&gt; Source/WebCore/page/EventHandler.cpp:1291
&gt; -    Node* node = event.targetNode();
&gt; -    RenderObject* renderer = node ? node-&gt;renderer() : 0;
&gt; +    Node* node = result.targetNode();
&gt; +    if (!node)
&gt; +        return NoCursorChange;
&gt; +    bool originalIsText = node-&gt;isTextNode();
&gt; +    if (node &amp;&amp; originalIsText)
&gt; +        node = node-&gt;parentNode();
&gt; +    if (!node)
&gt; +        return NoCursorChange;
&gt; +
&gt; +    RenderObject* renderer = node-&gt;renderer();

We added a check for a text node. Does this fix a bug? Where is the test case for the bug it fixes? This fix should go in separately rather than being coupled with the rest of the change, or rolled out. The change log makes no mention of this.

&gt; Source/WebCore/page/EventHandler.cpp:1354
&gt; +        bool editable = (node-&gt;rendererIsEditable());

Please remove the parentheses.

&gt; Source/WebCore/page/EventHandler.cpp:1356
&gt; -        if (useHandCursor(node, event.isOverLink(), event.event().shiftKey()))
&gt; +        if (useHandCursor(node, result.URLElement() &amp;&amp; result.URLElement()-&gt;isLink(), shiftKey))

It’s not good that to copy the body of the isOverLink function from MouseEventWithHitTestResults here, even though it’s simple. We don’t just want to copy code; we want to reuse it. If we have to make a fix we don’t want to have to fix it in two places. We could move the isOverLink function into HitTestResult, then could use it here.

&gt; Source/WebCore/page/EventHandler.cpp:1366
&gt; -        if ((editable || (renderer &amp;&amp; renderer-&gt;isText() &amp;&amp; node-&gt;canStartSelection())) &amp;&amp; !inResizer &amp;&amp; !scrollbar)
&gt; +        if ((editable || (originalIsText &amp;&amp; node-&gt;canStartSelection())) &amp;&amp; !inResizer &amp;&amp; !result.scrollbar())

Again, does this fix a bug? Please don’t mix this in with your patch unless it’s really new to your patch.

&gt; LayoutTests/fast/events/mouse-cursor-no-mousemove.html:17
&gt; +var CURSOR_UPDATE_DELAY = 50;

Not good that this test races the cursor updating code. We should find a more reliable way to test this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848646</commentid>
    <comment_count>117</comment_count>
      <attachid>191550</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-06 01:59:48 -0800</bug_when>
    <thetext>Comment on attachment 191550
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:27
&gt;&gt; +        (WebCore):
&gt; 
&gt; Please remove this bogus line.

Come on, those are added by the script and there&apos;s tons of lines like that committed.
Will remove, but that&apos;s just trolling.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1238
&gt;&gt; +        return;
&gt; 
&gt; Why don’t I see deletion of old code that checked deviceSupportsMouse? If this was copied and pasted from somewhere, we need to refactor so we share that code instead of copying it.
&gt; 
&gt; Not new to this patch, but it’s crazy that this is a “setting”. That’s not the right way to expose something like that to WebKit.

Will remove that. It came from the fake mousemove event path. I&apos;m not sure, but I think it was used in other places too, that&apos;s why I chose to keep it.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1245
&gt;&gt; +        return;
&gt; 
&gt; Again, was this rule copied and pasted from somewhere? We don’t just want another copy.
&gt; 
&gt; I’d like to see these checks about when it’s OK to set the cursor bundled up into a FrameView member function called shouldSetCursor or something like that. I think I’d include the deviceSupportsMouse check there along with these. I hope this would cut down on code duplication; not sure where else these checks already exist and I am not easily able to grep the code at this moment.

That was also in the fake mousemove event and there it is not only about setting the cursor, but it will also prevent from dispatching the mousemove event. It would be wrong calling it shouldSetCursor in that context.
That line can be simplified to: if (!m_frame-&gt;isActive() || !m_frame-&gt;page()-&gt;isOnscreen())

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1251
&gt;&gt; +    PlatformKeyboardEvent::getCurrentModifierState(shiftKey, ctrlKey, altKey, metaKey);
&gt; 
&gt; It’s not correct to combine the shift key state from the time of cursor adjustment with the mouse position from m_lastKnownMousePosition. Since we need shift key state to select the cursor, then we need to store the shift key state along with the mouse position at the time the mouse position is stored.

You are wrong here.
m_lastKnownMousePosition is changed whenever mouse moves. But updateCursor() is called even when mouse didn&apos;t move. Using old shift state would be wrong there, because the state might have changed even when mouse didn&apos;t move. So we have to use the last known mouse position in combination with the last known shift state.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1253
&gt;&gt; +    m_frame-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();
&gt; 
&gt; This is wrong. A plain updateLayout would be OK, but there’s no reason for us to force a flash of unstyled content here, which is what updateLayoutIgnorePendingStylesheets does.

Then I&apos;d say the idea of updating layout before cursor change should belong in another bug. Because mousemove also doesn&apos;t care about layout being pending before calling selectCursor.
Let&apos;s try to focus on the main idea of this bug/patch, OK?

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1269
&gt;&gt; +        m_cursorUpdateTimer.stop();
&gt; 
&gt; We can just call stop unconditionally. No real reason to check isActive. Some other call sites might do it, but they are either incorrect, or trying to optimize.
&gt; 
&gt; This is not the correct place to stop the timer. We want to stop the timer when we set the cursor, not when we decide what to do set it to. Adding a side effect to a function that is supposed to tell us what cursor to use is not good design. This might require a little refactoring of the selectCursor call sites; maybe we can combine the selectCursor, setCursor, setting m_currentMouseCursor, and stopping the m_cursorUpdateTimer and use that function in all the appropriate places.

Will move it to handleMouseMoveEvent() right where hover and fake mousemove timers are also stopped.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1291
&gt;&gt; +    RenderObject* renderer = node-&gt;renderer();
&gt; 
&gt; We added a check for a text node. Does this fix a bug? Where is the test case for the bug it fixes? This fix should go in separately rather than being coupled with the rest of the change, or rolled out. The change log makes no mention of this.

It wasn&apos;t added, it&apos;s just moved up here as part of refactoring the method to not take a full MouseEvent, but work on HitTestResult instead.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1356
&gt;&gt; +        if (useHandCursor(node, result.URLElement() &amp;&amp; result.URLElement()-&gt;isLink(), shiftKey))
&gt; 
&gt; It’s not good that to copy the body of the isOverLink function from MouseEventWithHitTestResults here, even though it’s simple. We don’t just want to copy code; we want to reuse it. If we have to make a fix we don’t want to have to fix it in two places. We could move the isOverLink function into HitTestResult, then could use it here.

Will move to HitTestResult.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1366
&gt;&gt; +        if ((editable || (originalIsText &amp;&amp; node-&gt;canStartSelection())) &amp;&amp; !inResizer &amp;&amp; !result.scrollbar())
&gt; 
&gt; Again, does this fix a bug? Please don’t mix this in with your patch unless it’s really new to your patch.

It&apos;s also just part of the refactor to work with HitTestResult. There&apos;s no change to the logic.
&quot;renderer &amp;&amp; renderer-&gt;isText()&quot; is moved to the top of method and result.scrollbar() was previously passed in as a parameter to selectCursor()

&gt;&gt; LayoutTests/fast/events/mouse-cursor-no-mousemove.html:17
&gt;&gt; +var CURSOR_UPDATE_DELAY = 50;
&gt; 
&gt; Not good that this test races the cursor updating code. We should find a more reliable way to test this.

I don&apos;t think there is a better way with current cursor testing framework.
Cursor update could not be made synchronous and there&apos;s no event for cursor changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848733</commentid>
    <comment_count>118</comment_count>
      <attachid>191721</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-06 05:14:22 -0800</bug_when>
    <thetext>Created attachment 191721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848743</commentid>
    <comment_count>119</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-06 05:27:54 -0800</bug_when>
    <thetext>Made the requested changes.
Also removed entry from test expectations. Maybe things have changed, if not, someone with a Mac should investigate it. Or will just have to add the expectation back before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848935</commentid>
    <comment_count>120</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-03-06 09:24:00 -0800</bug_when>
    <thetext>(In reply to comment #117)
&gt; &gt;&gt; Source/WebCore/ChangeLog:27
&gt; &gt;&gt; +        (WebCore):
&gt; &gt; 
&gt; &gt; Please remove this bogus line.
&gt; 
&gt; Come on, those are added by the script and there&apos;s tons of lines like that committed.
&gt; Will remove, but that&apos;s just trolling.

Absolutely not. Please don’t join in with low quality work just because other people have done it. The script is buggy, but the ChangeLog is communication with other real people.

I don’t appreciate you saying &quot;just trolling&quot; when I am taking time out of my day to help you with your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848944</commentid>
    <comment_count>121</comment_count>
      <attachid>191550</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-03-06 09:29:37 -0800</bug_when>
    <thetext>Comment on attachment 191550
Patch

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

&gt;&gt;&gt; Source/WebCore/page/EventHandler.cpp:1238
&gt;&gt;&gt; +        return;
&gt;&gt; 
&gt;&gt; Why don’t I see deletion of old code that checked deviceSupportsMouse? If this was copied and pasted from somewhere, we need to refactor so we share that code instead of copying it.
&gt;&gt; 
&gt;&gt; Not new to this patch, but it’s crazy that this is a “setting”. That’s not the right way to expose something like that to WebKit.
&gt; 
&gt; Will remove that. It came from the fake mousemove event path. I&apos;m not sure, but I think it was used in other places too, that&apos;s why I chose to keep it.

Removing it is not the right way to respond to my comment. We should refactor so the code is shared, not create differences.

&gt;&gt;&gt; Source/WebCore/page/EventHandler.cpp:1245
&gt;&gt;&gt; +        return;
&gt;&gt; 
&gt;&gt; Again, was this rule copied and pasted from somewhere? We don’t just want another copy.
&gt;&gt; 
&gt;&gt; I’d like to see these checks about when it’s OK to set the cursor bundled up into a FrameView member function called shouldSetCursor or something like that. I think I’d include the deviceSupportsMouse check there along with these. I hope this would cut down on code duplication; not sure where else these checks already exist and I am not easily able to grep the code at this moment.
&gt; 
&gt; That was also in the fake mousemove event and there it is not only about setting the cursor, but it will also prevent from dispatching the mousemove event. It would be wrong calling it shouldSetCursor in that context.
&gt; That line can be simplified to: if (!m_frame-&gt;isActive() || !m_frame-&gt;page()-&gt;isOnscreen())

Find the right name and make the code shared, please.

&gt;&gt;&gt; Source/WebCore/page/EventHandler.cpp:1251
&gt;&gt;&gt; +    PlatformKeyboardEvent::getCurrentModifierState(shiftKey, ctrlKey, altKey, metaKey);
&gt;&gt; 
&gt;&gt; It’s not correct to combine the shift key state from the time of cursor adjustment with the mouse position from m_lastKnownMousePosition. Since we need shift key state to select the cursor, then we need to store the shift key state along with the mouse position at the time the mouse position is stored.
&gt; 
&gt; You are wrong here.
&gt; m_lastKnownMousePosition is changed whenever mouse moves. But updateCursor() is called even when mouse didn&apos;t move. Using old shift state would be wrong there, because the state might have changed even when mouse didn&apos;t move. So we have to use the last known mouse position in combination with the last known shift state.

You say that I am wrong, but this could cause us to pair an incorrect combination of mouse position and modifier state. PlatformKeyboardEvent::getCurrentModifierState should be deprecated. We get modifier state from the event stream, not by querying explicitly at various times.

On the Mac platform, at least, we go through the same “fake mouse move” code path when modifier keys like shift change as well as when mouse position changes. Please take my suggestion and keep the two in sync.

&gt;&gt;&gt; Source/WebCore/page/EventHandler.cpp:1253
&gt;&gt;&gt; +    m_frame-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();
&gt;&gt; 
&gt;&gt; This is wrong. A plain updateLayout would be OK, but there’s no reason for us to force a flash of unstyled content here, which is what updateLayoutIgnorePendingStylesheets does.
&gt; 
&gt; Then I&apos;d say the idea of updating layout before cursor change should belong in another bug. Because mousemove also doesn&apos;t care about layout being pending before calling selectCursor.
&gt; Let&apos;s try to focus on the main idea of this bug/patch, OK?

Put in the correct function call, not the incorrect one. Please call updateLayout, not updateLayoutIgnorePendingStylesheets. You just used the wrong function,

Lets try to focus on getting good code in WebKit, OK?

Aivo, please improve your attitude! You keep telling me what to do.

&gt;&gt;&gt; Source/WebCore/page/EventHandler.cpp:1366
&gt;&gt;&gt; +        if ((editable || (originalIsText &amp;&amp; node-&gt;canStartSelection())) &amp;&amp; !inResizer &amp;&amp; !result.scrollbar())
&gt;&gt; 
&gt;&gt; Again, does this fix a bug? Please don’t mix this in with your patch unless it’s really new to your patch.
&gt; 
&gt; It&apos;s also just part of the refactor to work with HitTestResult. There&apos;s no change to the logic.
&gt; &quot;renderer &amp;&amp; renderer-&gt;isText()&quot; is moved to the top of method and result.scrollbar() was previously passed in as a parameter to selectCursor()

You say no change to the logic, but the function now calls parentNode, and there is no call into parentNode in the old function. That’s a change to the logic. Perhaps a correct one, but you need to explain that it’s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848951</commentid>
    <comment_count>122</comment_count>
      <attachid>191721</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-03-06 09:33:05 -0800</bug_when>
    <thetext>Comment on attachment 191721
Patch

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

Seems OK. A few things that I still think need improvement, but good enough to land.

&gt; Source/WebCore/page/EventHandler.cpp:1254
&gt; +    bool shiftKey;
&gt; +    bool ctrlKey;
&gt; +    bool altKey;
&gt; +    bool metaKey;
&gt; +    PlatformKeyboardEvent::getCurrentModifierState(shiftKey, ctrlKey, altKey, metaKey);
&gt; +
&gt; +    HitTestRequest request(HitTestRequest::ReadOnly);
&gt; +    HitTestResult result(view-&gt;windowToContents(m_lastKnownMousePosition));

As I mentioned in my previous comment, conceptually both mouse position changes and modifier key states come in to the event handler as a stream. It’s a mistake to pair a saved mouse position with a freshly obtained shift key state.

&gt; Source/WebCore/page/EventHandler.cpp:1280
&gt; +    bool originalIsText = node-&gt;isTextNode();

I think a better name would be originalNodeWasText.

&gt; Source/WebCore/page/EventHandler.cpp:1282
&gt; +    if (node &amp;&amp; originalIsText)
&gt; +        node = node-&gt;parentNode();

This call to parentNode is new code. Why does this change need to be made? Does it improve something?

&gt; Source/WebCore/page/FrameView.h:343
&gt; +    virtual bool shouldSetCursor() const;

Why virtual?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849273</commentid>
    <comment_count>123</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-06 13:51:08 -0800</bug_when>
    <thetext>Sorry, I did not mean to offend you. It&apos;s just that many of the weaknesses you pointed out, were not my original ideas, but suggestions by others or based on the code that was already there. Not the warmest welcome a first time helping hand would hope for.

&gt; &gt; Source/WebCore/page/EventHandler.cpp:1282
&gt; &gt; +    if (node &amp;&amp; originalIsText)
&gt; &gt; +        node = node-&gt;parentNode();
&gt; 
&gt; This call to parentNode is new code. Why does this change need to be made? Does it improve something?

I completely forgot about that. It was added when the timer was not used and instead hovered state was checked to only call updateCursor() on hovered nodes. Now that this is reverted and timer still used, this check is no longer needed. I will clean it up and then the refactored code should look almost exactly like the original.

I&apos;ll also go over the other other bits that were pointed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849279</commentid>
    <comment_count>124</comment_count>
      <attachid>191828</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-06 14:02:03 -0800</bug_when>
    <thetext>Created attachment 191828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850709</commentid>
    <comment_count>125</comment_count>
      <attachid>191828</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-07 17:47:42 -0800</bug_when>
    <thetext>Comment on attachment 191828
Patch

Attachment 191828 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17087088

New failing tests:
fast/events/mouse-cursor-change.html
editing/selection/selection-modify-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851325</commentid>
    <comment_count>126</comment_count>
      <attachid>192249</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-08 10:48:19 -0800</bug_when>
    <thetext>Created attachment 192249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851330</commentid>
    <comment_count>127</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-08 10:54:43 -0800</bug_when>
    <thetext>Mac still fails the new cursor change test.
Added back the test expectation, no other changes compared to the previous upload. It should now pass all EWS.
Have tried to find someone to look at the test on a mac but no luck so far and I simply don&apos;t have the time to keep on begging for help.

I think I&apos;m done for now, unless there&apos;s still something to fix before landing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859115</commentid>
    <comment_count>128</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-20 00:18:11 -0700</bug_when>
    <thetext>Ping for review + land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866659</commentid>
    <comment_count>129</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-03-30 12:08:40 -0700</bug_when>
    <thetext>What should be done to get some attention?
it&apos;s been 3 weeks...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869199</commentid>
    <comment_count>130</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-04-04 09:39:23 -0700</bug_when>
    <thetext>*** Bug 113920 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869672</commentid>
    <comment_count>131</comment_count>
      <attachid>192249</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-04-05 03:08:46 -0700</bug_when>
    <thetext>Comment on attachment 192249
Patch

Based on Darin Addler&apos;s comment of being good enough to land, and my own review. I will dare r+ it once more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869676</commentid>
    <comment_count>132</comment_count>
      <attachid>192249</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 03:15:20 -0700</bug_when>
    <thetext>Comment on attachment 192249
Patch

Rejecting attachment 192249 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 192249, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
or-change.html
patching file LayoutTests/fast/events/mouse-cursor-no-mousemove-expected.txt
patching file LayoutTests/fast/events/mouse-cursor-no-mousemove.html
patching file LayoutTests/platform/mac/TestExpectations
Hunk #1 FAILED at 1460.
1 out of 1 hunk FAILED -- saving rejects to file LayoutTests/platform/mac/TestExpectations.rej

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, &apos;Allan Sandfeld Jensen&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-commit-queue.appspot.com/results/17420171</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869686</commentid>
    <comment_count>133</comment_count>
      <attachid>196614</attachid>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-04-05 03:57:18 -0700</bug_when>
    <thetext>Created attachment 196614
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869691</commentid>
    <comment_count>134</comment_count>
    <who name="Aivo Paas">aivopaas</who>
    <bug_when>2013-04-05 04:07:58 -0700</bug_when>
    <thetext>Just rebased TestExpectations.
Probably should wait for green EWS because it&apos;s been so long...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869713</commentid>
    <comment_count>135</comment_count>
      <attachid>196614</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 05:37:08 -0700</bug_when>
    <thetext>Comment on attachment 196614
Patch

Clearing flags on attachment: 196614

Committed r147739: &lt;http://trac.webkit.org/changeset/147739&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869714</commentid>
    <comment_count>136</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 05:37:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643743</commentid>
    <comment_count>137</comment_count>
      <attachid>196614</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-04-20 19:47:43 -0700</bug_when>
    <thetext>Comment on attachment 196614
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:1390
&gt; +                    inResizer = layer-&gt;isPointInResizeControl(view-&gt;windowToContents(roundedIntPoint(result.localPoint())));

This was wrong. Bug 210778.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173493</attachid>
            <date>2012-11-11 00:27:54 -0800</date>
            <delta_ts>2012-11-11 06:19:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121111102551.patch</filename>
            <type>text/plain</type>
            <size>7482</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTExMjU0YjRlMWZlYjMx
ODdiMDhmMzU4Yzg3Y2FlOWVkNzFmZThiOC4uZTdiZjU0N2FjNDkwZGE0ZmM1MWY0ZmIxMGIxNDk0
MzkwYjJmODIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTExLTExICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUg
c2hvdWxkIGJlIG5vIGZha2UgbW91c2Vtb3ZlIGV2ZW50IHVzZWQgZm9yIGNoYW5pbmcgbW91c2Ug
Y3Vyc29yIHdoZW4gc3R5bGUgY2hhbmdlcy4KKyAgICAgICAgU3dpdGNoZWQgdG8gYSBjbGVhbmVy
IHdheSwgbm90IHVzaW5nIHRpbWVyIHNvIHRoYXQgY3Vyc29yIGNoYW5nZXMgaW5zdGFudGx5Lgor
ICAgICAgICBBbHNvIGNoYW5nZWQgdGhlIHBsYWNlIHdoZXJlIGN1cnNvciBjaGFuZ2UgaXMgYXBw
bGllZC4gVXNpbmcgcHJldmlvdXMgcGxhY2Ugd291bGQgbm90IHVwZGF0ZQorICAgICAgICBjb3Jy
ZWN0bHkgd2hlbiBob3ZlcmluZyB0ZXh0IG5vZGVzLiBJIGd1ZXNzIHRleHQgbm9kZXMgZ290IHRo
ZWlyIHN0eWxlIGNoYW5nZSBhZnRlciB0aGUKKyAgICAgICAgY3Vyc29yIHVwZGF0ZSBtZXRob2Qg
d2FzIGNhbGxlZC4KKworICAgICAgICBUZXN0cyBhZGRlZCB1bmRlciByZWxhdGVkIGJ1Z3M6Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKworICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6dXBkYXRlQ3Vyc29yKToKKyAgICAgICAgTmV3bHkgYWRkZWQgbWV0aG9kIGZvciB1cGRh
dGluZyBtb3VzZSBjdXJzb3IKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgIEFkZGVkIG1pc3Np
bmcgY3VybHkgYnJhY2VzCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAg
KEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjphcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YXJlQ3Vyc29yc0VxdWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGUpOgorICAgICAgICBNb3ZlZCBjdXJz
b3IgdXBkYXRlIGNhbGwgYWZ0ZXIgc3R5bGVEaWRDaGFuZ2UoKSBjYWxsIHRvIGFsbG93IHRleHQg
bm9kZXMgdG8gaW5oZXJpdAorICAgICAgICB0aGUgY2hhbmdlZCBjdXJzb3JzLiBUaGF0IG11c3Qg
YmUgaGFwcGVuaW5nIHNvbWV3aGVyZSBpbnNpZGUgc3R5bGVEaWRDaGFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgSWYgY3Vyc29y
IHVwZGF0ZSBjYWxsIHdvdWxkIHJlbWFpbiBoZXJlLCBtb3VzZSBvdmVyIHRleHQgbm9kZXMgd291
bGQgbm90IHVwZGF0ZSB0byBjb3JyZWN0IGN1cnNvci4KKwogMjAxMi0xMS0xMCAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2FsZXNjZSBtYWluIHRo
cmVhZCBzY3JvbGwgcG9zaXRpb24gdXBkYXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCmluZGV4IDRiMGRlNjQwYjU4NmRjMjAzODk4Y2U5MThkZDM5NTU3NjllYmNkMTAuLjRkM2Vk
ODQyOTU0ZGI1ZDZlNDlmNTdkM2EyNmQwOTk4NGFmMjE5YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKQEAgLTEzOTEsNiArMTM5MSwzNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBib29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkp
CiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8fCBpc1N1Ym1pdEltYWdlKG5vZGUpKSAmJiAoIWVk
aXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJsZWQpKTsKIH0KIAordm9pZCBFdmVudEhhbmRsZXI6
OnVwZGF0ZUN1cnNvcigpCit7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0
dGluZ3MoKTsKKyAgICBpZiAoc2V0dGluZ3MgJiYgIXNldHRpbmdzLT5kZXZpY2VTdXBwb3J0c01v
dXNlKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2Zy
YW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKCFtX2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+aXNPbnNjcmVlbigpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBzaGlmdEtleTsKKyAgICBib29sIGN0cmxL
ZXk7CisgICAgYm9vbCBhbHRLZXk7CisgICAgYm9vbCBtZXRhS2V5OworICAgIFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1vZGlmaWVyU3RhdGUoc2hpZnRLZXksIGN0cmxLZXksIGFs
dEtleSwgbWV0YUtleSk7CisKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgdXBkYXRlTW91c2VDdXJz
b3JFdmVudChtX2N1cnJlbnRNb3VzZVBvc2l0aW9uLCBtX2N1cnJlbnRNb3VzZUdsb2JhbFBvc2l0
aW9uLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6Tm9UeXBlLCAwLCBzaGlmdEtleSwgY3RybEtl
eSwgYWx0S2V5LCBtZXRhS2V5LCBjdXJyZW50VGltZSgpKTsKKworICAgIEhpdFRlc3RSZXF1ZXN0
IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAgICBNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIHVwZGF0ZU1vdXNl
Q3Vyc29yRXZlbnQpOworCisgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxl
Y3RDdXJzb3IobWV2LCBtZXYuc2Nyb2xsYmFyKCkpOworICAgIGlmIChvcHRpb25hbEN1cnNvci5p
c0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29yID0gb3B0aW9u
YWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRNb3Vz
ZUN1cnNvcik7CisgICAgfQorfQorCiBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVj
dEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCwgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKG1fcmVzaXplTGF5ZXIgJiYgbV9yZXNpemVMYXll
ci0+aW5SZXNpemVNb2RlKCkpCkBAIC0xODc0LDkgKzE5MDUsMTAgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VF
dmVudCwgSGkKICAgICAgICAgICAgIHNjcm9sbGJhci0+bW91c2VNb3ZlZChtb3VzZUV2ZW50KTsg
Ly8gSGFuZGxlIGhvdmVyIGVmZmVjdHMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB2aXN1YWwg
ZmVlZGJhY2sgb24gc2Nyb2xsYmFyIGhvdmVyaW5nLgogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2
aWV3ID0gbV9mcmFtZS0+dmlldygpKSB7CiAgICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRp
b25hbEN1cnNvciA9IHNlbGVjdEN1cnNvcihtZXYsIHNjcm9sbGJhcik7Ci0gICAgICAgICAgICBp
ZiAob3B0aW9uYWxDdXJzb3IuaXNDdXJzb3JDaGFuZ2UoKSkKKyAgICAgICAgICAgIGlmIChvcHRp
b25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50
TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5jdXJzb3IoKTsKICAgICAgICAgICAgICAgICB2
aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91c2VDdXJzb3IpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggMDBh
ZDBhNDA4Yzc4MWVmZGMyNmEyOTc3NTFkNzBmNjMwOTkwZjkzZi4uYWE5NTUyNmY4Mzg5OGMyNWQx
MGEwMDYyMDk4OWUwNDQ0NmEyNTExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBA
IC0yMzcsNiArMjM3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHVzZUhhbmRDdXJz
b3IoTm9kZSosIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSk7CisgICAgdm9pZCB1cGRh
dGVDdXJzb3IoKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA5ODNhY2VkNGU4MGMwOGRh
MmRkMzg2MzFlYmU2OGY0MzlmNWU3NzA1Li42MmFhYmIzMzNkYjM3ZmE2OTM5MjcyNWVmZGE0NDU2
NjM5MzNlNjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApA
QCAtMTc1MSw2ICsxNzUxLDE3IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJPYmplY3Q6OmFkanVz
dFN0eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWduCiAgICAgcmV0dXJu
IGRpZmY7CiB9CiAKK3N0YXRpYyBib29sIGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFTU0VS
VChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vyc29ycygpKTsKKyAgICByZXR1cm4gYS0+Y3Vyc29ycygp
ICYmIGItPmN1cnNvcnMoKSAmJiAqYS0+Y3Vyc29ycygpID09ICpiLT5jdXJzb3JzKCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVDdXJzb3JzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIHJldHVybiBhLT5jdXJzb3IoKSA9PSBiLT5j
dXJzb3IoKSAmJiAoYS0+Y3Vyc29ycygpID09IGItPmN1cnNvcnMoKSB8fCBhcmVOb25JZGVudGlj
YWxDdXJzb3JMaXN0c0VxdWFsKGEsIGIpKTsKK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0
eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogewogICAgIGlmIChtX3N0eWxlID09
IHN0eWxlKSB7CkBAIC0xNzg4LDYgKzE3OTksMTEgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0
eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogICAgIGJvb2wgZG9lc05vdE5lZWRM
YXlvdXQgPSAhbV9wYXJlbnQgfHwgaXNUZXh0KCk7CiAKICAgICBzdHlsZURpZENoYW5nZShkaWZm
LCBvbGRTdHlsZS5nZXQoKSk7CisgICAgCisgICAgaWYgKG9sZFN0eWxlLmdldCgpICYmICFhcmVD
dXJzb3JzRXF1YWwob2xkU3R5bGUuZ2V0KCksIHRoaXMtPnN0eWxlKCkpKSB7CisgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQorICAgICAgICAgICAgZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT51cGRhdGVDdXJzb3IoKTsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogfHRoaXN8
IG1pZ2h0IGJlIGRlc3Ryb3llZCBoZXJlLiBUaGlzIGNhbiBjdXJyZW50bHkgaGFwcGVuIGZvciBh
IFJlbmRlclRleHRGcmFnbWVudCB3aGVuCiAgICAgLy8gaXRzIGZpcnN0LWxldHRlciBibG9jayBn
ZXRzIGFuIHVwZGF0ZSBpbiBSZW5kZXJUZXh0RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlLiBGb3Ig
UmVuZGVyVGV4dEZyYWdtZW50KHMpLApAQCAtMTkwMywxNyArMTkxOSw2IEBAIHZvaWQgUmVuZGVy
T2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRl
clN0eWxlKiBuZXdTCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJz
b3JMaXN0c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikK
LXsKLSAgICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7Ci0gICAgcmV0dXJu
IGEtPmN1cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vy
c29ycygpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICByZXR1cm4gYS0+Y3Vy
c29yKCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwg
YXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Ci19Ci0KIHZvaWQgUmVuZGVy
T2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKQogewogICAgIGlmIChzX2FmZmVjdHNQYXJlbnRCbG9jaykKQEAgLTE5
NDksMTEgKzE5NTQsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogCiAgICAgLy8gRG9uJ3Qg
Y2hlY2sgZm9yIHJlcGFpbnQgaGVyZTsgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBsYXllciBo
YXMgYmVlbgogICAgIC8vIHVwZGF0ZWQgYnkgc3ViY2xhc3NlcyBiZWZvcmUgd2Uga25vdyBpZiB3
ZSBoYXZlIHRvIHJlcGFpbnQgKGluIHNldFN0eWxlKCkpLgotCi0gICAgaWYgKG9sZFN0eWxlICYm
ICFhcmVDdXJzb3JzRXF1YWwob2xkU3R5bGUsIHN0eWxlKCkpKSB7Ci0gICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKTsKLSAgICB9CiB9CiAKIHZvaWQg
UmVuZGVyT2JqZWN0Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oYm9vbCBibG9j
a0NoaWxkcmVuT25seSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173504</attachid>
            <date>2012-11-11 06:19:50 -0800</date>
            <delta_ts>2012-11-15 14:06:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121111161752.patch</filename>
            <type>text/plain</type>
            <size>15105</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTExMjU0YjRlMWZlYjMx
ODdiMDhmMzU4Yzg3Y2FlOWVkNzFmZThiOC4uMjU5MjI2YTY5ZTY3NWQxYTk2MWNiZThkOTlhMjli
MTNmNWU2MzU5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTExICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUg
c2hvdWxkIGJlIG5vIGZha2UgbW91c2Vtb3ZlIGV2ZW50IHVzZWQgZm9yIGNoYW5pbmcgbW91c2Ug
Y3Vyc29yIHdoZW4gc3R5bGUgY2hhbmdlcy4KKyAgICAgICAgU3dpdGNoZWQgdG8gYSBjbGVhbmVy
IHdheSwgbm90IHVzaW5nIHRpbWVyIHNvIHRoYXQgY3Vyc29yIGNoYW5nZXMgaW5zdGFudGx5Lgor
ICAgICAgICBBbHNvIGNoYW5nZWQgdGhlIHBsYWNlIHdoZXJlIGN1cnNvciBjaGFuZ2UgaXMgYXBw
bGllZC4gVXNpbmcgcHJldmlvdXMgcGxhY2Ugd291bGQgbm90IHVwZGF0ZQorICAgICAgICBjb3Jy
ZWN0bHkgd2hlbiBob3ZlcmluZyB0ZXh0IG5vZGVzLiBJIGd1ZXNzIHRleHQgbm9kZXMgZ290IHRo
ZWlyIHN0eWxlIGNoYW5nZSBhZnRlciB0aGUKKyAgICAgICAgY3Vyc29yIHVwZGF0ZSBtZXRob2Qg
d2FzIGNhbGxlZC4KKworICAgICAgICBGaXhlczoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzQzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MQorCisgICAgICAgIFRlc3RzOgorICAgICAgICBmYXN0
L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKKyAgICAgICAgZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvcik6Cisg
ICAgICAgIE5ld2x5IGFkZGVkIG1ldGhvZCBmb3IgdXBkYXRpbmcgbW91c2UgY3Vyc29yCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VNb3ZlRXZlbnQpOgorICAgICAgICBBZGRlZCBtaXNzaW5nIGN1cmx5IGJyYWNlcworICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIChFdmVudEhhbmRsZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlTm9u
SWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmFyZUN1cnNvcnNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OnNldFN0eWxlKToKKyAgICAgICAgTW92ZWQgY3Vyc29yIHVwZGF0ZSBjYWxsIGFmdGVyIHN0
eWxlRGlkQ2hhbmdlKCkgY2FsbCB0byBhbGxvdyB0ZXh0IG5vZGVzIHRvIGluaGVyaXQKKyAgICAg
ICAgdGhlIGNoYW5nZWQgY3Vyc29ycy4gVGhhdCBtdXN0IGJlIGhhcHBlbmluZyBzb21ld2hlcmUg
aW5zaWRlIHN0eWxlRGlkQ2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpz
dHlsZURpZENoYW5nZSk6CisgICAgICAgIElmIGN1cnNvciB1cGRhdGUgY2FsbCB3b3VsZCByZW1h
aW4gaGVyZSwgbW91c2Ugb3ZlciB0ZXh0IG5vZGVzIHdvdWxkIG5vdCB1cGRhdGUgdG8KKyAgICAg
ICAgY29ycmVjdCBjdXJzb3Igb24gbW91c2Vkb3duL21vdXNldXAuCisKIDIwMTItMTEtMTAgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ29hbGVzY2Ug
bWFpbiB0aHJlYWQgc2Nyb2xsIHBvc2l0aW9uIHVwZGF0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCA0YjBkZTY0MGI1ODZkYzIwMzg5OGNlOTE4ZGQzOTU1NzY5ZWJjZDEw
Li40ZDNlZDg0Mjk1NGRiNWQ2ZTQ5ZjU3ZDNhMjZkMDk5ODRhZjIxOWM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0xMzkxLDYgKzEzOTEsMzcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OnVzZUhhbmRDdXJzb3IoTm9kZSogbm9kZSwgYm9vbCBpc092ZXJMaW5rLCBib29sIHNo
aWZ0S2V5KQogICAgIHJldHVybiAoKGlzT3ZlckxpbmsgfHwgaXNTdWJtaXRJbWFnZShub2RlKSkg
JiYgKCFlZGl0YWJsZSB8fCBlZGl0YWJsZUxpbmtFbmFibGVkKSk7CiB9CiAKK3ZvaWQgRXZlbnRI
YW5kbGVyOjp1cGRhdGVDdXJzb3IoKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJh
bWUtPnNldHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdzICYmICFzZXR0aW5ncy0+ZGV2aWNlU3Vw
cG9ydHNNb3VzZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgRnJhbWVWaWV3KiB2aWV3
ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmICghbV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPmlzT25zY3Jl
ZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJvb2wgc2hpZnRLZXk7CisgICAgYm9v
bCBjdHJsS2V5OworICAgIGJvb2wgYWx0S2V5OworICAgIGJvb2wgbWV0YUtleTsKKyAgICBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2RpZmllclN0YXRlKHNoaWZ0S2V5LCBjdHJs
S2V5LCBhbHRLZXksIG1ldGFLZXkpOworCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHVwZGF0ZU1v
dXNlQ3Vyc29yRXZlbnQobV9jdXJyZW50TW91c2VQb3NpdGlvbiwgbV9jdXJyZW50TW91c2VHbG9i
YWxQb3NpdGlvbiwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZSwgMCwgc2hpZnRLZXks
IGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSwgY3VycmVudFRpbWUoKSk7CisKKyAgICBIaXRUZXN0
UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCB1cGRh
dGVNb3VzZUN1cnNvckV2ZW50KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29y
ID0gc2VsZWN0Q3Vyc29yKG1ldiwgbWV2LnNjcm9sbGJhcigpKTsKKyAgICBpZiAob3B0aW9uYWxD
dXJzb3IuaXNDdXJzb3JDaGFuZ2UoKSkgeworICAgICAgICBtX2N1cnJlbnRNb3VzZUN1cnNvciA9
IG9wdGlvbmFsQ3Vyc29yLmN1cnNvcigpOworICAgICAgICB2aWV3LT5zZXRDdXJzb3IobV9jdXJy
ZW50TW91c2VDdXJzb3IpOworICAgIH0KK30KKwogT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVy
OjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQs
IFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIGlmIChtX3Jlc2l6ZUxheWVyICYmIG1fcmVz
aXplTGF5ZXItPmluUmVzaXplTW9kZSgpKQpAQCAtMTg3NCw5ICsxOTA1LDEwIEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IG1vdXNlRXZlbnQsIEhpCiAgICAgICAgICAgICBzY3JvbGxiYXItPm1vdXNlTW92ZWQobW91c2VF
dmVudCk7IC8vIEhhbmRsZSBob3ZlciBlZmZlY3RzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQg
dmlzdWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBob3ZlcmluZy4KICAgICAgICAgaWYgKEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewogICAgICAgICAgICAgT3B0aW9uYWxDdXJz
b3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LCBzY3JvbGxiYXIpOwotICAgICAg
ICAgICAgaWYgKG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkpCisgICAgICAgICAgICBp
ZiAob3B0aW9uYWxDdXJzb3IuaXNDdXJzb3JDaGFuZ2UoKSkgewogICAgICAgICAgICAgICAgIG1f
Y3VycmVudE1vdXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CiAgICAgICAgICAg
ICAgICAgdmlldy0+c2V0Q3Vyc29yKG1fY3VycmVudE1vdXNlQ3Vyc29yKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmlu
ZGV4IDAwYWQwYTQwOGM3ODFlZmRjMjZhMjk3NzUxZDcwZjYzMDk5MGY5M2YuLmFhOTU1MjZmODM4
OThjMjVkMTBhMDA2MjA5ODllMDQ0NDZhMjUxMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaApAQCAtMjM3LDYgKzIzNyw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCB1c2VI
YW5kQ3Vyc29yKE5vZGUqLCBib29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpOworICAgIHZv
aWQgdXBkYXRlQ3Vyc29yKCk7CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggOTgzYWNlZDRl
ODBjMDhkYTJkZDM4NjMxZWJlNjhmNDM5ZjVlNzcwNS4uNjJhYWJiMzMzZGIzN2ZhNjkzOTI3MjVl
ZmRhNDQ1NjYzOTMzZTY1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKQEAgLTE3NTEsNiArMTc1MSwxNyBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyT2JqZWN0
OjphZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnbgogICAg
IHJldHVybiBkaWZmOwogfQogCitzdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0
c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAg
ICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7CisgICAgcmV0dXJuIGEtPmN1
cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vyc29ycygp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICByZXR1cm4gYS0+Y3Vyc29yKCkg
PT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwgYXJlTm9u
SWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0
OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBpZiAobV9z
dHlsZSA9PSBzdHlsZSkgewpAQCAtMTc4OCw2ICsxNzk5LDExIEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKICAgICBib29sIGRvZXNO
b3ROZWVkTGF5b3V0ID0gIW1fcGFyZW50IHx8IGlzVGV4dCgpOwogCiAgICAgc3R5bGVEaWRDaGFu
Z2UoZGlmZiwgb2xkU3R5bGUuZ2V0KCkpOworICAgIAorICAgIGlmIChvbGRTdHlsZS5nZXQoKSAm
JiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLmdldCgpLCB0aGlzLT5zdHlsZSgpKSkgeworICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+dXBkYXRlQ3Vyc29yKCk7CisgICAgfQogCiAgICAgLy8gRklYTUU6
IHx0aGlzfCBtaWdodCBiZSBkZXN0cm95ZWQgaGVyZS4gVGhpcyBjYW4gY3VycmVudGx5IGhhcHBl
biBmb3IgYSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hlbgogICAgIC8vIGl0cyBmaXJzdC1sZXR0ZXIg
YmxvY2sgZ2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5n
ZS4gRm9yIFJlbmRlclRleHRGcmFnbWVudChzKSwKQEAgLTE5MDMsMTcgKzE5MTksNiBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogbmV3UwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgYXJlTm9uSWRlbnRp
Y2FsQ3Vyc29yTGlzdHNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpCi17Ci0gICAgQVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3JzKCkpOwotICAg
IHJldHVybiBhLT5jdXJzb3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJzb3JzKCkgPT0g
KmItPmN1cnNvcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNvcnNFcXVhbChj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0gICAgcmV0dXJu
IGEtPmN1cnNvcigpID09IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0gYi0+Y3Vyc29y
cygpIHx8IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOwotfQotCiB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBpZiAoc19hZmZlY3RzUGFyZW50QmxvY2sp
CkBAIC0xOTQ5LDExICsxOTU0LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIC8v
IERvbid0IGNoZWNrIGZvciByZXBhaW50IGhlcmU7IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUg
bGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1cGRhdGVkIGJ5IHN1YmNsYXNzZXMgYmVmb3JlIHdlIGtu
b3cgaWYgd2UgaGF2ZSB0byByZXBhaW50IChpbiBzZXRTdHlsZSgpKS4KLQotICAgIGlmIChvbGRT
dHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewotICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAgfQogfQog
CiB2b2lkIFJlbmRlck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJv
b2wgYmxvY2tDaGlsZHJlbk9ubHkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDQ3YjllMzI5OTRiYTU3M2I3MmFiYmVkYzU4
N2NlNzE1ZTY4NzFiZS4uZDQxZGRmNjVhY2Y5ZmZiMTlkOWI2Yjg3YWVlZTFlYmQwMzI5YWVmNyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTExICBBaXZvIFBhYXMgIDxhaXZvcGFhc0Bn
bWFpbC5jb20+CisKKyAgICAgICAgQ2hhbmdpbmcgQ1NTIGN1cnNvciBzaG91bGQgd29yayBubyBt
YXR0ZXIgaXMgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3Igbm90CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MQorICAgICAgICBDdXJzb3IgY2hh
bmdlIHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGNoYW5naW5nIGN1cnNv
ciBvbiBtb3VzZW1vdmUsIG1vdXNlZG93biwgbW91c2V1cCBhbmQgbW91c2Vtb3ZlCisgICAgICAg
IHdoaWxlIG1vdXNlIGJ1dHRvbiBiZWluZyBob2xkIGRvd24uIEFsc28gYWRkZWQgdGVzdCB0byB2
ZXJpZnkgdGhhdCBhIG1vdXNlbW92ZQorICAgICAgICBldmVudCBpcyBub3QgZmlyZWQgZm9yIGNo
YW5naW5nIGN1cnNvciB3aGlsZSBtb3VzZSBpcyBub3QgbW92aW5nLgorCisgICAgICAgICogZmFz
dC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRt
bDogQWRkZWQuCisKIDIwMTItMTEtMTAgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBNdWx0aXBsZSAnJWMnIGZvcm1hdHRpbmcgb3B0aW9u
cyBzaG91bGQgYWxsIGhhdmUgZWZmZWN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MmIx
NDA2OTRmM2U3MDEwMjcyZmM0MGQxMjMwMjcwNTlhMWRjMmZlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyNCBAQAorVGVzdCB0aGF0IG1vdXNlIGN1cnNvcnMgYXJlIGNoYW5nZWQgY29y
cmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K0J1ZyA1MzM0MQorCisKK01vdXNlIG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPVR5cGVIYW5kIGhv
dFNwb3Q9MCwwCisKK01vdXNlIGRvd24KK0N1cnNvciBJbmZvOiB0eXBlPVR5cGVQcm9ncmVzcyBo
b3RTcG90PTAsMAorCitNb3VzZSBob2xkIGRvd24sIG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPVR5
cGVIYW5kIGhvdFNwb3Q9MCwwCisKK01vdXNlIHVwCitDdXJzb3IgSW5mbzogdHlwZT1UeXBlSGVs
cCBob3RTcG90PTAsMAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vy
c29yLWNoYW5nZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5Y2VjZWM4NWUwYjNiNGE0NjdjMmM3NDE2YjgzN2JlMzYz
YThlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1j
dXJzb3ItY2hhbmdlLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEiPkJ1ZyA1MzM0MTwvYT48L3A+Cis8ZGl2
IGlkPSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBvbk1vdXNlRG93bj0i
c3R5bGUuY3Vyc29yPSdwcm9ncmVzcyc7ZXZlbnQucHJldmVudERlZmF1bHQoKTsiIG9uTW91c2VN
b3ZlPSJzdHlsZS5jdXJzb3I9J3BvaW50ZXInOyIgb25Nb3VzZVVwPSJzdHlsZS5jdXJzb3I9J2hl
bHAnOyIgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyI+UGxheSB3aXRoIG1vdXNlIG9uIHRoaXMgZWxl
bWVudC4gQ3Vyc29ycyBjaGFuZ2Ugb24gZXZlbnRzIC0gbW91c2Vtb3ZlOiBwb2ludGVyKGhhbmQp
LCBtb3VzZWRvd246IHByb2dyZXNzLCBtb3VzZXVwOiBoZWxwLjwvZGl2PgorPC9kaXY+Cis8YnIv
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3Qg
dGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBjaGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMu
Iik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0
ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworZnVuY3Rp
b24gZGVidWdDdXJzb3IodGFyZ2V0LCB0eXBlKSB7CisgICAgdGFyZ2V0LnN0eWxlLmN1cnNvciA9
IHR5cGU7CisgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5nZXRD
dXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworfQorCitmdW5jdGlvbiBydW5UZXN0KHByZXBh
cmUsIG5leHQpIHsKKyAgICBwcmVwYXJlKCk7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KyAgICAgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5nZXRDdXJy
ZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIG5l
eHQoKTsKKyAgICB9LCAxKTsKK30KKworZnVuY3Rpb24gdGVzdHNEb25lKCkgeworICAgIC8vIFRo
aXMgdGV4dCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdGVzdCBvdXRwdXQgLSBoaWRlIGl0CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9
ICdub25lJzsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcg
dXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7Cisg
ICAgCisgICAgdmFyIHRlc3RzID0gWworICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGRlYnVnKCdNb3VzZSBtb3ZlJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVU
byh0YXJnZXQub2Zmc2V0TGVmdCArIDMsIHRhcmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgZG93bicpOworICAgICAg
ICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgZGVidWcoJ01vdXNlIGhvbGQgZG93biwgbW92ZScpOworICAgICAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyA0LCB0YXJnZXQub2Zm
c2V0VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWco
J01vdXNlIHVwJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgICAg
IH0KKyAgICBdOworICAgIAorICAgIHZhciBpID0gMDsKKyAgICBmdW5jdGlvbiBuZXh0VGVzdCgp
IHsKKyAgICAgICAgaWYgKGkgPCB0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJ1blRlc3Qo
dGVzdHNbaSsrXSwgbmV4dFRlc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVz
dHNEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbmV4dFRlc3QoKTsKK30KKworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTAzYjRkMzhiN2YwN2VlM2VlNWFkMTNkMmI5OGEyY2JmN2NjMGM0YgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1t
b3VzZW1vdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgdGhhdCB0aGVyZSBp
cyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3IuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCdWcgODUzNDMKKworCitURVNUIENBU0U6IE1vdXNl
IGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVudAorQ3Vy
c29yIEluZm86IHR5cGU9VHlwZVBvaW50ZXIgaG90U3BvdD0wLDAKK0N1cnNvciBJbmZvOiB0eXBl
PVR5cGVIZWxwIGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
b3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
b3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU3NDhiOTExMzMzMDI2
MzAxNjczOGI3MzQzMDZkMjM2YmZmOTQ1NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApAQCAtMCwwICsxLDU0
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2Nz
cyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxwPjxhIGhyZWY9aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzQz
PkJ1ZyA4NTM0MzwvYT48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBp
ZD0idGFyZ2V0IiBzdHlsZT0iY3Vyc29yOmRlZmF1bHQiPk1vdXNlIGlkbGUsIGNoYW5nZSBjdXJz
b3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVudDwvZGl2PgorPC9kaXY+Cis8YnIvPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdGhh
dCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3Iu
Iik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0
ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworLy8gQ2Fu
J3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRv
dy5ldmVudFNlbmRlcikgeworICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3RhcmdldCcpOworICAgIGRlYnVnKCdURVNUIENBU0U6ICcgKyBub2RlLnRleHRDb250ZW50KTsK
KyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhub2RlLm9mZnNldExlZnQgKyAzLCBub2RlLm9m
ZnNldFRvcCArIDMpOworICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5h
bHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICBub2RlLmFkZEV2ZW50TGlz
dGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCdNb3Vz
ZW1vdmUgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvcicpOwor
ICAgIH0pOworICAgIG5vZGUuc3R5bGUuY3Vyc29yID0gJ2hlbHAnOworICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRl
cm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycp
OworICAgIH0sIDEwKTsKKyAgICAKKyAgICAvLyBHaXZlIHNvbWUgdGltZSBmb3IgdGVzdGluZyB0
aGF0IG1vdXNlbW92ZSBpcyBub3QgZmlyZWQgb24gdGhlIGxhc3QgdGVzdAorICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNv
bnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0sIDUwKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174512</attachid>
            <date>2012-11-15 14:06:22 -0800</date>
            <delta_ts>2012-11-16 13:59:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121116000413.patch</filename>
            <type>text/plain</type>
            <size>14383</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0ODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ5NmVmZDU4MWQyMDQ5
YmQxMGI0MjJmMTJiNWIwYzI4NzhmZjdjZC4uZTA1NTMwYmRmMmUxNDg1MjM2NjU2MTAwYTU0ZTQ1
MzhhOTk0NjRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTExLTE1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUg
c2hvdWxkIGJlIG5vIGZha2UgbW91c2Vtb3ZlIGV2ZW50IHVzZWQgZm9yIGNoYW5pbmcgbW91c2Ug
Y3Vyc29yIHdoZW4gc3R5bGUgY2hhbmdlcy4KKyAgICAgICAgU3dpdGNoZWQgdG8gYSBjbGVhbmVy
IHdheSwgbm90IHVzaW5nIHRpbWVyIHNvIHRoYXQgY3Vyc29yIGNoYW5nZXMgaW5zdGFudGx5Lgor
ICAgICAgICBBbHNvIGNoYW5nZWQgdGhlIHBsYWNlIHdoZXJlIGN1cnNvciBjaGFuZ2UgaXMgYXBw
bGllZC4gVXNpbmcgcHJldmlvdXMgcGxhY2Ugd291bGQgbm90IHVwZGF0ZQorICAgICAgICBjb3Jy
ZWN0bHkgd2hlbiBob3ZlcmluZyB0ZXh0IG5vZGVzLiBJIGd1ZXNzIHRleHQgbm9kZXMgZ290IHRo
ZWlyIHN0eWxlIGNoYW5nZSBhZnRlciB0aGUKKyAgICAgICAgY3Vyc29yIHVwZGF0ZSBtZXRob2Qg
d2FzIGNhbGxlZC4KKworICAgICAgICBGaXhlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg1MzQzCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLWNoYW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1j
dXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKTogTmV3bHkg
YWRkZWQgbWV0aG9kIGZvciB1cGRhdGluZyBtb3VzZSBjdXJzb3IKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6
IEFkZGVkIG1pc3NpbmcgY3VybHkgYnJhY2VzCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIu
aDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0Vx
dWFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YXJlQ3Vyc29yc0Vx
dWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGUpOgorICAgICAg
ICBNb3ZlZCBjdXJzb3IgdXBkYXRlIGNhbGwgYWZ0ZXIgc3R5bGVEaWRDaGFuZ2UoKSBjYWxsIHRv
IGFsbG93IHRleHQgbm9kZXMgdG8gaW5oZXJpdAorICAgICAgICB0aGUgY2hhbmdlZCBjdXJzb3Jz
LiBUaGF0IG11c3QgYmUgaGFwcGVuaW5nIHNvbWV3aGVyZSBpbnNpZGUgc3R5bGVEaWRDaGFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgSWYgY3Vyc29yIHVwZGF0ZSBjYWxsIHdvdWxkIHJlbWFpbiBoZXJlLCBtb3VzZSBvdmVyIHRl
eHQgbm9kZXMgd291bGQgbm90IHVwZGF0ZSB0bworICAgICAgICBjb3JyZWN0IGN1cnNvciBvbiBt
b3VzZWRvd24vbW91c2V1cC4KKwogMjAxMi0xMS0xNSAgRWxsaW90dCBTcHJlaG4gIDxlc3ByZWhu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBUcmFjayBzdWJmcmFtZSBjb3VudCB0byBhdm9pZCB0
cmF2ZXJzaW5nIHRoZSB0cmVlIHdoZW4gdGhlcmUncyBubyBzdWJmcmFtZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAzYWM5NWU2OWI4NTdiZTRjNzRkODIyOWE0MjhkYzVl
NmU5OGIwNmI1Li41NmU1YzE4NGNkMDJiYTU3NWU0NjYwYTJmODk3ZjU0MWNlNzYxODRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0xMzkwLDYgKzEzOTAsMzcgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OnVzZUhhbmRDdXJzb3IoTm9kZSogbm9kZSwgYm9vbCBpc092ZXJMaW5r
LCBib29sIHNoaWZ0S2V5KQogICAgIHJldHVybiAoKGlzT3ZlckxpbmsgfHwgaXNTdWJtaXRJbWFn
ZShub2RlKSkgJiYgKCFlZGl0YWJsZSB8fCBlZGl0YWJsZUxpbmtFbmFibGVkKSk7CiB9CiAKK3Zv
aWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVDdXJzb3IoKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdzICYmICFzZXR0aW5ncy0+
ZGV2aWNlU3VwcG9ydHNNb3VzZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcq
IHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSB8fCAhbV9mcmFtZS0+cGFnZSgpLT5pc09uc2Ny
ZWVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgc2hpZnRLZXk7CisgICAgYm9vbCBj
dHJsS2V5OworICAgIGJvb2wgYWx0S2V5OworICAgIGJvb2wgbWV0YUtleTsKKyAgICBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2RpZmllclN0YXRlKHNoaWZ0S2V5LCBjdHJsS2V5
LCBhbHRLZXksIG1ldGFLZXkpOworCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHVwZGF0ZU1vdXNl
Q3Vyc29yRXZlbnQobV9jdXJyZW50TW91c2VQb3NpdGlvbiwgbV9jdXJyZW50TW91c2VHbG9iYWxQ
b3NpdGlvbiwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZSwgMCwgc2hpZnRLZXksIGN0
cmxLZXksIGFsdEtleSwgbWV0YUtleSwgY3VycmVudFRpbWUoKSk7CisKKyAgICBIaXRUZXN0UmVx
dWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCB1cGRhdGVN
b3VzZUN1cnNvckV2ZW50KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0g
c2VsZWN0Q3Vyc29yKG1ldiwgbWV2LnNjcm9sbGJhcigpKTsKKyAgICBpZiAob3B0aW9uYWxDdXJz
b3IuaXNDdXJzb3JDaGFuZ2UoKSkgeworICAgICAgICBtX2N1cnJlbnRNb3VzZUN1cnNvciA9IG9w
dGlvbmFsQ3Vyc29yLmN1cnNvcigpOworICAgICAgICB2aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50
TW91c2VDdXJzb3IpOworICAgIH0KK30KKwogT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpz
ZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQsIFNj
cm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIGlmIChtX3Jlc2l6ZUxheWVyICYmIG1fcmVzaXpl
TGF5ZXItPmluUmVzaXplTW9kZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXgg
MDBhZDBhNDA4Yzc4MWVmZGMyNmEyOTc3NTFkNzBmNjMwOTkwZjkzZi4uYWE5NTUyNmY4Mzg5OGMy
NWQxMGEwMDYyMDk4OWUwNDQ0NmEyNTExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CkBAIC0yMzcsNiArMjM3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHVzZUhhbmRD
dXJzb3IoTm9kZSosIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSk7CisgICAgdm9pZCB1
cGRhdGVDdXJzb3IoKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCAxNWRjZGQwNTgyOWU0
ZTc2ZDhhMTQyNzZmMWJhN2Y2NDg0Yzc3NzIwLi4xMTI2ZmI3YTdlM2NjM2U4MDJhZmZiNjU1YzQ3
NjRjNzQyZGYyMWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cApAQCAtMTc1Myw2ICsxNzUzLDE3IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJPYmplY3Q6OmFk
anVzdFN0eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgdW5zaWduCiAgICAgcmV0
dXJuIGRpZmY7CiB9CiAKK3N0YXRpYyBib29sIGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1
YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFT
U0VSVChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vyc29ycygpKTsKKyAgICByZXR1cm4gYS0+Y3Vyc29y
cygpICYmIGItPmN1cnNvcnMoKSAmJiAqYS0+Y3Vyc29ycygpID09ICpiLT5jdXJzb3JzKCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVDdXJzb3JzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIHJldHVybiBhLT5jdXJzb3IoKSA9PSBi
LT5jdXJzb3IoKSAmJiAoYS0+Y3Vyc29ycygpID09IGItPmN1cnNvcnMoKSB8fCBhcmVOb25JZGVu
dGljYWxDdXJzb3JMaXN0c0VxdWFsKGEsIGIpKTsKK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OnNl
dFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogewogICAgIGlmIChtX3N0eWxl
ID09IHN0eWxlKSB7CkBAIC0xNzkxLDYgKzE4MDIsMTEgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNl
dFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogCiAgICAgc3R5bGVEaWRDaGFu
Z2UoZGlmZiwgb2xkU3R5bGUuZ2V0KCkpOwogCisgICAgaWYgKG9sZFN0eWxlLmdldCgpICYmICFh
cmVDdXJzb3JzRXF1YWwob2xkU3R5bGUuZ2V0KCksIHRoaXMtPnN0eWxlKCkpKSB7CisgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQorICAgICAgICAgICAgZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT51cGRhdGVDdXJzb3IoKTsKKyAgICB9CisKICAgICAvLyBGSVhNRTogfHRo
aXN8IG1pZ2h0IGJlIGRlc3Ryb3llZCBoZXJlLiBUaGlzIGNhbiBjdXJyZW50bHkgaGFwcGVuIGZv
ciBhIFJlbmRlclRleHRGcmFnbWVudCB3aGVuCiAgICAgLy8gaXRzIGZpcnN0LWxldHRlciBibG9j
ayBnZXRzIGFuIHVwZGF0ZSBpbiBSZW5kZXJUZXh0RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlLiBG
b3IgUmVuZGVyVGV4dEZyYWdtZW50KHMpLAogICAgIC8vIHdlIHdpbGwgc2FmZWx5IGJhaWwgb3V0
IHdpdGggdGhlIGRvZXNOb3ROZWVkTGF5b3V0IGZsYWcuIFdlIG1pZ2h0IHdhbnQgdG8gYnJvYWRl
biB0aGlzIGNvbmRpdGlvbgpAQCAtMTkwNSwxNyArMTkyMSw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBuZXdTCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0
c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAg
ICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7Ci0gICAgcmV0dXJuIGEtPmN1
cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vyc29ycygp
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICByZXR1cm4gYS0+Y3Vyc29yKCkg
PT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwgYXJlTm9u
SWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Ci19Ci0KIHZvaWQgUmVuZGVyT2JqZWN0
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQogewogICAgIGlmIChzX2FmZmVjdHNQYXJlbnRCbG9jaykKQEAgLTE5NTEsMTEg
KzE5NTYsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogCiAgICAgLy8gRG9uJ3QgY2hlY2sg
Zm9yIHJlcGFpbnQgaGVyZTsgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBsYXllciBoYXMgYmVl
bgogICAgIC8vIHVwZGF0ZWQgYnkgc3ViY2xhc3NlcyBiZWZvcmUgd2Uga25vdyBpZiB3ZSBoYXZl
IHRvIHJlcGFpbnQgKGluIHNldFN0eWxlKCkpLgotCi0gICAgaWYgKG9sZFN0eWxlICYmICFhcmVD
dXJzb3JzRXF1YWwob2xkU3R5bGUsIHN0eWxlKCkpKSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSB0aGlzLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5k
aXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKTsKLSAgICB9CiB9CiAKIHZvaWQgUmVuZGVy
T2JqZWN0Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oYm9vbCBibG9ja0NoaWxk
cmVuT25seSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCBlNWE3NmNlYjhjZGIzM2MwODhmODAwZGFkNzZhMmIwYjUyMTk5OTcz
Li4xZGRhODhhMWUwMTAxYmVjOGUyNTAyMjNhMjdhYjBjODI2YzNlMmVmIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTItMTEtMTUgIEFpdm8gUGFhcyAgPGFpdm9wYWFzQGdtYWlsLmNvbT4KKwor
ICAgICAgICBDaGFuZ2luZyBDU1MgY3Vyc29yIHNob3VsZCB3b3JrIG5vIG1hdHRlciBpcyBtb3Vz
ZSBidXR0b24gaXMgcHJlc3NlZCBvciBub3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUzMzQxCisgICAgICAgIEN1cnNvciBjaGFuZ2Ugc2hvdWxkIG5v
dCBmaXJlIG1vdXNlbW92ZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODUzNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgY2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92
ZSwgbW91c2Vkb3duLCBtb3VzZXVwIGFuZCBtb3VzZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2Ug
YnV0dG9uIGJlaW5nIGhvbGQgZG93bi4gQWxzbyBhZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEg
bW91c2Vtb3ZlCisgICAgICAgIGV2ZW50IGlzIG5vdCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29y
IHdoaWxlIG1vdXNlIGlzIG5vdCBtb3ZpbmcuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3Vz
ZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVu
dHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50
cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sOiBBZGRlZC4KKwog
MjAxMi0xMS0xNSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gV2ViR0wgdGV4SW1hZ2UyRCBmYWlscyB3aXRoIGRlZmVycmVkIGltYWdlIGRlY29k
aW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hh
bmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1j
aGFuZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4YjdhYmVhNzJhNzEwMTZkYTE0MDM0OTkz
NWU2MDFhOTNjMjk0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBACitUZXN0
IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZlbnRz
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDUzMzQxCisKKworTW91c2Ug
bW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitNb3VzZSBkb3duCitD
dXJzb3IgSW5mbzogdHlwZT1Qcm9ncmVzcyBob3RTcG90PTAsMAorCitNb3VzZSBob2xkIGRvd24s
IG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKworTW91c2UgdXAKK0N1
cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Yzg1ODIyZGIyNTIyZTYx
ZjI0NzQxMTM4Mjk0NDhiZDA4MTVmZDZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+PGEg
aHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMzQxIj5CdWcg
NTMzNDE8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAgIDxkaXYgaWQ9InRh
cmdldCIgb25Nb3VzZURvd249InN0eWxlLmN1cnNvcj0ncHJvZ3Jlc3MnO2V2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7IiBvbk1vdXNlTW92ZT0ic3R5bGUuY3Vyc29yPSdwb2ludGVyJzsiIG9uTW91c2VV
cD0ic3R5bGUuY3Vyc29yPSdoZWxwJzsiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiPlBsYXkgd2l0
aCBtb3VzZSBvbiB0aGlzIGVsZW1lbnQuIEN1cnNvcnMgY2hhbmdlIG9uIGV2ZW50cyAtIG1vdXNl
bW92ZTogcG9pbnRlcihoYW5kKSwgbW91c2Vkb3duOiBwcm9ncmVzcywgbW91c2V1cDogaGVscC48
L2Rpdj4KKzwvZGl2PgorPGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0
bHkgb24gbW91c2UgZXZlbnRzLiIpOworCitpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
IHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScpOworfQorCitp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QocHJlcGFyZSwgbmV4dCkgeworICAgIHByZXBh
cmUoKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29y
IEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50
KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0sIDEwMCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RzRG9uZSgpIHsKKyAgICAvLyBUaGlzIHRleHQgaXMgcmVkdW5kYW50
IHdpdGggdGhlIHRlc3Qgb3V0cHV0IC0gaGlkZSBpdAorICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZmluaXNo
SlNUZXN0KCk7Cit9CisKKy8vIENhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCBoZXJlIHdpdGhvdXQg
ZXZlbnRTZW5kZXIKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB2YXIgdGFyZ2V0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgIGV2ZW50U2VuZGVyLmRyYWdN
b2RlID0gZmFsc2U7CisgICAgdmFyIHRlc3RzID0gWworICAgICAgICBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGRlYnVnKCdNb3VzZSBtb3ZlJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5t
b3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDMsIHRhcmdldC5vZmZzZXRUb3AgKyAzKTsK
KyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgZG93bicp
OworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIGhvbGQgZG93biwgbW92ZScpOworICAg
ICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAxMywg
dGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGRlYnVnKCdNb3VzZSB1cCcpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgp
OworICAgICAgICB9CisgICAgXTsKKworICAgIHZhciBpID0gMDsKKyAgICBmdW5jdGlvbiBuZXh0
VGVzdCgpIHsKKyAgICAgICAgaWYgKGkgPCB0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJ1
blRlc3QodGVzdHNbaSsrXSwgbmV4dFRlc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdGVzdHNEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbmV4dFRlc3QoKTsKK30KKwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTVkMDY0NWU5Yjc2MTEzZjdjNDFlZGFkOWYyNmNmZmU5NGY3ZTY5
MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNv
ci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgdGhhdCB0
aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3IuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCdWcgODUzNDMKKworCitURVNUIENBU0U6
IE1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVu
dAorQ3Vyc29yIEluZm86IHR5cGU9UG9pbnRlciBob3RTcG90PTAsMAorQ3Vyc29yIEluZm86IHR5
cGU9SGVscCBob3RTcG90PTAsMAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzNDUwMzg1MzFiZTdmYTNk
ZDMwMmFhYzBmYTIxODRiNzFiYzM4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKQEAgLTAsMCArMSw1NCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
PgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
cD48YSBocmVmPWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0Mz5C
dWcgODUzNDM8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAgIDxkaXYgaWQ9
InRhcmdldCIgc3R5bGU9ImN1cnNvcjpkZWZhdWx0Ij5Nb3VzZSBpZGxlLCBjaGFuZ2UgY3Vyc29y
IHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUgZXZlbnQ8L2Rpdj4KKzwvZGl2PgorPGJyLz4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQg
dGhlcmUgaXMgbm8gbW91c2Vtb3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yLiIp
OworCitpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVz
dCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIp
IHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit9CisKKy8vIENhbid0
IGRvIGFueXRoaW5nIHVzZWZ1bCBoZXJlIHdpdGhvdXQgZXZlbnRTZW5kZXIKK2lmICh3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0
YXJnZXQnKTsKKyAgICBkZWJ1ZygnVEVTVCBDQVNFOiAnICsgbm9kZS50ZXh0Q29udGVudCk7Cisg
ICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8obm9kZS5vZmZzZXRMZWZ0ICsgMywgbm9kZS5vZmZz
ZXRUb3AgKyAzKTsKKyAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxz
LmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgbm9kZS5hZGRFdmVudExpc3Rl
bmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnTW91c2Vt
b3ZlIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3InKTsKKyAg
ICB9KTsKKyAgICBub2RlLnN0eWxlLmN1cnNvciA9ICdoZWxwJzsKKyAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJu
YWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcnKTsK
KyAgICB9LCAxKTsKKworICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgY2hhbmdlIHRvIHJl
c29sdmUuIEZha2UgbW91c2Vtb3ZlIGV2ZW50IHRoYXQgY2F1c2VkIGJ1ZywgaXMgdXNpbmcgYSB0
aW1lcgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIDUwMCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174755</attachid>
            <date>2012-11-16 13:59:51 -0800</date>
            <delta_ts>2012-11-19 02:07:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121116235738.patch</filename>
            <type>text/plain</type>
            <size>15252</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0ODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ5NmVmZDU4MWQyMDQ5
YmQxMGI0MjJmMTJiNWIwYzI4NzhmZjdjZC4uMmU4ZGM4YTY5MTA2NDFhY2YyYzdkZDVjYTdhZDNi
YzQwNWQxOGJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTExLTE1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIEZpeGVzOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDMgKG1vdXNlbW92ZSBl
dmVudCBvbiBjdXJzb3IgY2hhbmdlKQorICAgICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMzQxIChubyBjdXJzb3IgY2hhbmdlIHdoZW4gbW91c2Ug
YnV0dG9uIGRvd24pCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1j
aGFuZ2UuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1v
dXNlbW92ZS5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvcik6IE5ld2x5IGFkZGVkIG1ldGhv
ZCBmb3IgdXBkYXRpbmcgbW91c2UgY3Vyc29yCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQpOiBBZGRlZCBtaXNz
aW5nIGN1cmx5IGJyYWNlcworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAg
IChFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFyZUN1cnNvcnNFcXVhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorCiAyMDEyLTExLTE1ICBFbGxpb3R0IFNw
cmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFRyYWNrIHN1YmZyYW1lIGNv
dW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hlbiB0aGVyZSdzIG5vIHN1YmZyYW1l
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDNhYzk1ZTY5Yjg1N2JlNGM3
NGQ4MjI5YTQyOGRjNWU2ZTk4YjA2YjUuLjU2ZTVjMTg0Y2QwMmJhNTc1ZTQ2NjBhMmY4OTdmNTQx
Y2U3NjE4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTEzOTAsNiAr
MTM5MCwzNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBi
b29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpCiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8
fCBpc1N1Ym1pdEltYWdlKG5vZGUpKSAmJiAoIWVkaXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJs
ZWQpKTsKIH0KIAordm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvcigpCit7CisgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoc2V0dGluZ3Mg
JiYgIXNldHRpbmdzLT5kZXZpY2VTdXBwb3J0c01vdXNlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5w
YWdlKCktPmlzT25zY3JlZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzaGlmdEtl
eTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBhbHRLZXk7CisgICAgYm9vbCBtZXRhS2V5
OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1vZGlmaWVyU3RhdGUoc2hp
ZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7CisKKyAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgdXBkYXRlTW91c2VDdXJzb3JFdmVudChtX2N1cnJlbnRNb3VzZVBvc2l0aW9uLCBtX2N1cnJl
bnRNb3VzZUdsb2JhbFBvc2l0aW9uLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6Tm9UeXBlLCAw
LCBzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5LCBjdXJyZW50VGltZSgpKTsKKwor
ICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAg
ICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50KHJl
cXVlc3QsIHVwZGF0ZU1vdXNlQ3Vyc29yRXZlbnQpOworCisgICAgT3B0aW9uYWxDdXJzb3Igb3B0
aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LCBtZXYuc2Nyb2xsYmFyKCkpOworICAgIGlm
IChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1v
dXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1
cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCiBPcHRpb25hbEN1cnNvciBF
dmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzJiBldmVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKG1fcmVzaXplTGF5
ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVNb2RlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaAppbmRleCAwMGFkMGE0MDhjNzgxZWZkYzI2YTI5Nzc1MWQ3MGY2MzA5OTBmOTNmLi5h
YTk1NTI2ZjgzODk4YzI1ZDEwYTAwNjIwOTg5ZTA0NDQ2YTI1MTEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKQEAgLTIzNyw2ICsyMzcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IGJvb2wgdXNlSGFuZEN1cnNvcihOb2RlKiwgYm9vbCBpc092ZXJMaW5rLCBib29sIHNoaWZ0S2V5
KTsKKyAgICB2b2lkIHVwZGF0ZUN1cnNvcigpOwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4
IDE1ZGNkZDA1ODI5ZTRlNzZkOGExNDI3NmYxYmE3ZjY0ODRjNzc3MjAuLjExMjZmYjdhN2UzY2Mz
ZTgwMmFmZmI2NTVjNDc2NGM3NDJkZjIxZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCkBAIC0xNzUzLDYgKzE3NTMsMTcgQEAgU3R5bGVEaWZmZXJlbmNlIFJl
bmRlck9iamVjdDo6YWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCB1
bnNpZ24KICAgICByZXR1cm4gZGlmZjsKIH0KIAorc3RhdGljIGJvb2wgYXJlTm9uSWRlbnRpY2Fs
Q3Vyc29yTGlzdHNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpCit7CisgICAgQVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3JzKCkpOworICAgIHJl
dHVybiBhLT5jdXJzb3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJzb3JzKCkgPT0gKmIt
PmN1cnNvcnMoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNvcnNFcXVhbChjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCit7CisgICAgcmV0dXJuIGEt
PmN1cnNvcigpID09IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0gYi0+Y3Vyc29ycygp
IHx8IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOworfQorCiB2b2lkIFJl
bmRlck9iamVjdDo6c2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpCiB7CiAg
ICAgaWYgKG1fc3R5bGUgPT0gc3R5bGUpIHsKQEAgLTE3OTEsNiArMTgwMiwxMSBAQCB2b2lkIFJl
bmRlck9iamVjdDo6c2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAKICAg
ICBzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZS5nZXQoKSk7CiAKKyAgICBpZiAob2xkU3R5
bGUuZ2V0KCkgJiYgIWFyZUN1cnNvcnNFcXVhbChvbGRTdHlsZS5nZXQoKSwgdGhpcy0+c3R5bGUo
KSkpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCisgICAgICAg
ICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZUN1cnNvcigpOworICAgIH0KKwogICAg
IC8vIEZJWE1FOiB8dGhpc3wgbWlnaHQgYmUgZGVzdHJveWVkIGhlcmUuIFRoaXMgY2FuIGN1cnJl
bnRseSBoYXBwZW4gZm9yIGEgUmVuZGVyVGV4dEZyYWdtZW50IHdoZW4KICAgICAvLyBpdHMgZmly
c3QtbGV0dGVyIGJsb2NrIGdldHMgYW4gdXBkYXRlIGluIFJlbmRlclRleHRGcmFnbWVudDo6c3R5
bGVEaWRDaGFuZ2UuIEZvciBSZW5kZXJUZXh0RnJhZ21lbnQocyksCiAgICAgLy8gd2Ugd2lsbCBz
YWZlbHkgYmFpbCBvdXQgd2l0aCB0aGUgZG9lc05vdE5lZWRMYXlvdXQgZmxhZy4gV2UgbWlnaHQg
d2FudCB0byBicm9hZGVuIHRoaXMgY29uZGl0aW9uCkBAIC0xOTA1LDE3ICsxOTIxLDYgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG5ld1MKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGFyZU5vbklkZW50
aWNhbEN1cnNvckxpc3RzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKQotewotICAgIEFTU0VSVChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vyc29ycygpKTsKLSAg
ICByZXR1cm4gYS0+Y3Vyc29ycygpICYmIGItPmN1cnNvcnMoKSAmJiAqYS0+Y3Vyc29ycygpID09
ICpiLT5jdXJzb3JzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmVDdXJzb3JzRXF1YWwo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQotewotICAgIHJldHVy
biBhLT5jdXJzb3IoKSA9PSBiLT5jdXJzb3IoKSAmJiAoYS0+Y3Vyc29ycygpID09IGItPmN1cnNv
cnMoKSB8fCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGEsIGIpKTsKLX0KLQogdm9p
ZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgaWYgKHNfYWZmZWN0c1BhcmVudEJsb2Nr
KQpAQCAtMTk1MSwxMSArMTk1Niw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiAKICAgICAv
LyBEb24ndCBjaGVjayBmb3IgcmVwYWludCBoZXJlOyB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhl
IGxheWVyIGhhcyBiZWVuCiAgICAgLy8gdXBkYXRlZCBieSBzdWJjbGFzc2VzIGJlZm9yZSB3ZSBr
bm93IGlmIHdlIGhhdmUgdG8gcmVwYWludCAoaW4gc2V0U3R5bGUoKSkuCi0KLSAgICBpZiAob2xk
U3R5bGUgJiYgIWFyZUN1cnNvcnNFcXVhbChvbGRTdHlsZSwgc3R5bGUoKSkpIHsKLSAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigpOwotICAgIH0KIH0K
IAogdm9pZCBSZW5kZXJPYmplY3Q6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihi
b29sIGJsb2NrQ2hpbGRyZW5Pbmx5KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU1YTc2Y2ViOGNkYjMzYzA4OGY4MDBkYWQ3
NmEyYjBiNTIxOTk5NzMuLjFkZGE4OGExZTAxMDFiZWM4ZTI1MDIyM2EyN2FiMGM4MjZjM2UyZWYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0xMS0xNSAgQWl2byBQYWFzICA8YWl2b3BhYXNA
Z21haWwuY29tPgorCisgICAgICAgIENoYW5naW5nIENTUyBjdXJzb3Igc2hvdWxkIHdvcmsgbm8g
bWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIG5vdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKyAgICAgICAgQ3Vyc29yIGNo
YW5nZSBzaG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBjaGFuZ2luZyBjdXJz
b3Igb24gbW91c2Vtb3ZlLCBtb3VzZWRvd24sIG1vdXNldXAgYW5kIG1vdXNlbW92ZQorICAgICAg
ICB3aGlsZSBtb3VzZSBidXR0b24gYmVpbmcgaG9sZCBkb3duLiBBbHNvIGFkZGVkIHRlc3QgdG8g
dmVyaWZ5IHRoYXQgYSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgbm90IGZpcmVkIGZvciBj
aGFuZ2luZyBjdXJzb3Igd2hpbGUgbW91c2UgaXMgbm90IG1vdmluZy4KKworICAgICAgICAqIGZh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0
bWw6IEFkZGVkLgorCiAyMDEyLTExLTE1ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBXZWJHTCB0ZXhJbWFnZTJEIGZhaWxzIHdpdGggZGVmZXJy
ZWQgaW1hZ2UgZGVjb2RpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhiN2FiZWE3MmE3
MTAxNmRhMTQwMzQ5OTM1ZTYwMWE5M2MyOTQzZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjQgQEAKK1Rlc3QgdGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBjaGFuZ2VkIGNvcnJlY3RseSBv
biBtb3VzZSBldmVudHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCdWcgNTMz
NDEKKworCitNb3VzZSBtb3ZlCitDdXJzb3IgSW5mbzogdHlwZT1IYW5kIGhvdFNwb3Q9MCwwCisK
K01vdXNlIGRvd24KK0N1cnNvciBJbmZvOiB0eXBlPVByb2dyZXNzIGhvdFNwb3Q9MCwwCisKK01v
dXNlIGhvbGQgZG93biwgbW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAor
CitNb3VzZSB1cAorQ3Vyc29yIEluZm86IHR5cGU9SGVscCBob3RTcG90PTAsMAorCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRj
ODU4MjJkYjI1MjJlNjFmMjQ3NDExMzgyOTQ0OGJkMDgxNWZkNmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKQEAgLTAs
MCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTMzNDEiPkJ1ZyA1MzM0MTwvYT48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRhaW5lciI+Cisg
ICAgPGRpdiBpZD0idGFyZ2V0IiBvbk1vdXNlRG93bj0ic3R5bGUuY3Vyc29yPSdwcm9ncmVzcyc7
ZXZlbnQucHJldmVudERlZmF1bHQoKTsiIG9uTW91c2VNb3ZlPSJzdHlsZS5jdXJzb3I9J3BvaW50
ZXInOyIgb25Nb3VzZVVwPSJzdHlsZS5jdXJzb3I9J2hlbHAnOyIgc3R5bGU9ImN1cnNvcjpwb2lu
dGVyOyI+UGxheSB3aXRoIG1vdXNlIG9uIHRoaXMgZWxlbWVudC4gQ3Vyc29ycyBjaGFuZ2Ugb24g
ZXZlbnRzIC0gbW91c2Vtb3ZlOiBwb2ludGVyKGhhbmQpLCBtb3VzZWRvd246IHByb2dyZXNzLCBt
b3VzZXVwOiBoZWxwLjwvZGl2PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBj
aGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuIik7CisKK2lmICghd2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJU
cmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gcnVuVGVzdChwcmVwYXJlLCBuZXh0
KSB7CisgICAgcHJlcGFyZSgpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAg
IGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNv
ckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBuZXh0KCk7Cisg
ICAgfSwgMTAwKTsKK30KKworZnVuY3Rpb24gdGVzdHNEb25lKCkgeworICAgIC8vIFRoaXMgdGV4
dCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdGVzdCBvdXRwdXQgLSBoaWRlIGl0CisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVs
IGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
IHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZXZl
bnRTZW5kZXIuZHJhZ01vZGUgPSBmYWxzZTsKKyAgICB2YXIgdGVzdHMgPSBbCisgICAgICAgIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIG1vdmUnKTsKKyAgICAgICAgICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMywgdGFyZ2V0Lm9m
ZnNldFRvcCArIDMpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVn
KCdNb3VzZSBkb3duJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAg
ICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgaG9sZCBkb3du
LCBtb3ZlJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zm
c2V0TGVmdCArIDEzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIHVwJyk7CisgICAgICAgICAgICBldmVudFNl
bmRlci5tb3VzZVVwKCk7CisgICAgICAgIH0KKyAgICBdOworCisgICAgdmFyIGkgPSAwOworICAg
IGZ1bmN0aW9uIG5leHRUZXN0KCkgeworICAgICAgICBpZiAoaSA8IHRlc3RzLmxlbmd0aCkgewor
ICAgICAgICAgICAgcnVuVGVzdCh0ZXN0c1tpKytdLCBuZXh0VGVzdCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB0ZXN0c0RvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBuZXh0
VGVzdCgpOworfQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNWQwNjQ1ZTliNzYxMTNmN2M0MWVkYWQ5
ZjI2Y2ZmZTk0ZjdlNjkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBA
QAorVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5n
aW5nIGN1cnNvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0J1ZyA4NTM0Mwor
CisKK1RFU1QgQ0FTRTogTW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUg
bW91c2Vtb3ZlIGV2ZW50CitDdXJzb3IgSW5mbzogdHlwZT1Qb2ludGVyIGhvdFNwb3Q9MCwwCitD
dXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM0
NTAzODUzMWJlN2ZhM2RkMzAyYWFjMGZhMjE4NGI3MWJjMzgxNwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApA
QCAtMCwwICsxLDU0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg1MzQzPkJ1ZyA4NTM0MzwvYT48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRhaW5lciI+
CisgICAgPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0iY3Vyc29yOmRlZmF1bHQiPk1vdXNlIGlkbGUs
IGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVudDwvZGl2PgorPC9k
aXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFu
Z2luZyBjdXJzb3IuIik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdGVzdEZh
aWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRl
cgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgIGRlYnVnKCdURVNUIENBU0U6ICcgKyBub2RlLnRl
eHRDb250ZW50KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhub2RlLm9mZnNldExlZnQg
KyAzLCBub2RlLm9mZnNldFRvcCArIDMpOworICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdp
bmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICBub2Rl
LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0
RmFpbGVkKCdNb3VzZW1vdmUgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGNoYW5naW5n
IGN1cnNvcicpOworICAgIH0pOworICAgIG5vZGUuc3R5bGUuY3Vyc29yID0gJ2hlbHAnOworICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyAr
IHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICAg
ICAgZGVidWcoJycpOworICAgIH0sIDEpOworCisgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIHRo
ZSBjaGFuZ2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1vdmUgZXZlbnQgdGhhdCBjYXVzZWQgYnVn
LCBpcyB1c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9
ICdub25lJzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgNTAwKTsKK30KKworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174920</attachid>
            <date>2012-11-19 02:07:23 -0800</date>
            <delta_ts>2012-12-02 15:41:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121119120510.patch</filename>
            <type>text/plain</type>
            <size>15275</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0ODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ5NmVmZDU4MWQyMDQ5
YmQxMGI0MjJmMTJiNWIwYzI4NzhmZjdjZC4uMmU4ZGM4YTY5MTA2NDFhY2YyYzdkZDVjYTdhZDNi
YzQwNWQxOGJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTExLTE1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIEZpeGVzOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDMgKG1vdXNlbW92ZSBl
dmVudCBvbiBjdXJzb3IgY2hhbmdlKQorICAgICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMzQxIChubyBjdXJzb3IgY2hhbmdlIHdoZW4gbW91c2Ug
YnV0dG9uIGRvd24pCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1j
aGFuZ2UuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1v
dXNlbW92ZS5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvcik6IE5ld2x5IGFkZGVkIG1ldGhv
ZCBmb3IgdXBkYXRpbmcgbW91c2UgY3Vyc29yCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQpOiBBZGRlZCBtaXNz
aW5nIGN1cmx5IGJyYWNlcworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAg
IChFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFyZUN1cnNvcnNFcXVhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorCiAyMDEyLTExLTE1ICBFbGxpb3R0IFNw
cmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFRyYWNrIHN1YmZyYW1lIGNv
dW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hlbiB0aGVyZSdzIG5vIHN1YmZyYW1l
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDNhYzk1ZTY5Yjg1N2JlNGM3
NGQ4MjI5YTQyOGRjNWU2ZTk4YjA2YjUuLjU2ZTVjMTg0Y2QwMmJhNTc1ZTQ2NjBhMmY4OTdmNTQx
Y2U3NjE4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTEzOTAsNiAr
MTM5MCwzNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBi
b29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpCiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8
fCBpc1N1Ym1pdEltYWdlKG5vZGUpKSAmJiAoIWVkaXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJs
ZWQpKTsKIH0KIAordm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvcigpCit7CisgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoc2V0dGluZ3Mg
JiYgIXNldHRpbmdzLT5kZXZpY2VTdXBwb3J0c01vdXNlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5w
YWdlKCktPmlzT25zY3JlZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzaGlmdEtl
eTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBhbHRLZXk7CisgICAgYm9vbCBtZXRhS2V5
OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1vZGlmaWVyU3RhdGUoc2hp
ZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7CisKKyAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgdXBkYXRlTW91c2VDdXJzb3JFdmVudChtX2N1cnJlbnRNb3VzZVBvc2l0aW9uLCBtX2N1cnJl
bnRNb3VzZUdsb2JhbFBvc2l0aW9uLCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6Tm9UeXBlLCAw
LCBzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5LCBjdXJyZW50VGltZSgpKTsKKwor
ICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAg
ICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50KHJl
cXVlc3QsIHVwZGF0ZU1vdXNlQ3Vyc29yRXZlbnQpOworCisgICAgT3B0aW9uYWxDdXJzb3Igb3B0
aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LCBtZXYuc2Nyb2xsYmFyKCkpOworICAgIGlm
IChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1v
dXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1
cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCiBPcHRpb25hbEN1cnNvciBF
dmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzJiBldmVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKG1fcmVzaXplTGF5
ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVNb2RlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaAppbmRleCAwMGFkMGE0MDhjNzgxZWZkYzI2YTI5Nzc1MWQ3MGY2MzA5OTBmOTNmLi5h
YTk1NTI2ZjgzODk4YzI1ZDEwYTAwNjIwOTg5ZTA0NDQ2YTI1MTEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKQEAgLTIzNyw2ICsyMzcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IGJvb2wgdXNlSGFuZEN1cnNvcihOb2RlKiwgYm9vbCBpc092ZXJMaW5rLCBib29sIHNoaWZ0S2V5
KTsKKyAgICB2b2lkIHVwZGF0ZUN1cnNvcigpOwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4
IDE1ZGNkZDA1ODI5ZTRlNzZkOGExNDI3NmYxYmE3ZjY0ODRjNzc3MjAuLjExMjZmYjdhN2UzY2Mz
ZTgwMmFmZmI2NTVjNDc2NGM3NDJkZjIxZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCkBAIC0xNzUzLDYgKzE3NTMsMTcgQEAgU3R5bGVEaWZmZXJlbmNlIFJl
bmRlck9iamVjdDo6YWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCB1
bnNpZ24KICAgICByZXR1cm4gZGlmZjsKIH0KIAorc3RhdGljIGJvb2wgYXJlTm9uSWRlbnRpY2Fs
Q3Vyc29yTGlzdHNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpCit7CisgICAgQVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3JzKCkpOworICAgIHJl
dHVybiBhLT5jdXJzb3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJzb3JzKCkgPT0gKmIt
PmN1cnNvcnMoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNvcnNFcXVhbChjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCit7CisgICAgcmV0dXJuIGEt
PmN1cnNvcigpID09IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0gYi0+Y3Vyc29ycygp
IHx8IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOworfQorCiB2b2lkIFJl
bmRlck9iamVjdDo6c2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpCiB7CiAg
ICAgaWYgKG1fc3R5bGUgPT0gc3R5bGUpIHsKQEAgLTE3OTEsNiArMTgwMiwxMSBAQCB2b2lkIFJl
bmRlck9iamVjdDo6c2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAKICAg
ICBzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZS5nZXQoKSk7CiAKKyAgICBpZiAob2xkU3R5
bGUuZ2V0KCkgJiYgIWFyZUN1cnNvcnNFcXVhbChvbGRTdHlsZS5nZXQoKSwgdGhpcy0+c3R5bGUo
KSkpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCisgICAgICAg
ICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZUN1cnNvcigpOworICAgIH0KKwogICAg
IC8vIEZJWE1FOiB8dGhpc3wgbWlnaHQgYmUgZGVzdHJveWVkIGhlcmUuIFRoaXMgY2FuIGN1cnJl
bnRseSBoYXBwZW4gZm9yIGEgUmVuZGVyVGV4dEZyYWdtZW50IHdoZW4KICAgICAvLyBpdHMgZmly
c3QtbGV0dGVyIGJsb2NrIGdldHMgYW4gdXBkYXRlIGluIFJlbmRlclRleHRGcmFnbWVudDo6c3R5
bGVEaWRDaGFuZ2UuIEZvciBSZW5kZXJUZXh0RnJhZ21lbnQocyksCiAgICAgLy8gd2Ugd2lsbCBz
YWZlbHkgYmFpbCBvdXQgd2l0aCB0aGUgZG9lc05vdE5lZWRMYXlvdXQgZmxhZy4gV2UgbWlnaHQg
d2FudCB0byBicm9hZGVuIHRoaXMgY29uZGl0aW9uCkBAIC0xOTA1LDE3ICsxOTIxLDYgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG5ld1MKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGFyZU5vbklkZW50
aWNhbEN1cnNvckxpc3RzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKQotewotICAgIEFTU0VSVChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vyc29ycygpKTsKLSAg
ICByZXR1cm4gYS0+Y3Vyc29ycygpICYmIGItPmN1cnNvcnMoKSAmJiAqYS0+Y3Vyc29ycygpID09
ICpiLT5jdXJzb3JzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmVDdXJzb3JzRXF1YWwo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQotewotICAgIHJldHVy
biBhLT5jdXJzb3IoKSA9PSBiLT5jdXJzb3IoKSAmJiAoYS0+Y3Vyc29ycygpID09IGItPmN1cnNv
cnMoKSB8fCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGEsIGIpKTsKLX0KLQogdm9p
ZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgaWYgKHNfYWZmZWN0c1BhcmVudEJsb2Nr
KQpAQCAtMTk1MSwxMSArMTk1Niw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiAKICAgICAv
LyBEb24ndCBjaGVjayBmb3IgcmVwYWludCBoZXJlOyB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhl
IGxheWVyIGhhcyBiZWVuCiAgICAgLy8gdXBkYXRlZCBieSBzdWJjbGFzc2VzIGJlZm9yZSB3ZSBr
bm93IGlmIHdlIGhhdmUgdG8gcmVwYWludCAoaW4gc2V0U3R5bGUoKSkuCi0KLSAgICBpZiAob2xk
U3R5bGUgJiYgIWFyZUN1cnNvcnNFcXVhbChvbGRTdHlsZSwgc3R5bGUoKSkpIHsKLSAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigpOwotICAgIH0KIH0K
IAogdm9pZCBSZW5kZXJPYmplY3Q6OnByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihi
b29sIGJsb2NrQ2hpbGRyZW5Pbmx5KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU1YTc2Y2ViOGNkYjMzYzA4OGY4MDBkYWQ3
NmEyYjBiNTIxOTk5NzMuLjFkZGE4OGExZTAxMDFiZWM4ZTI1MDIyM2EyN2FiMGM4MjZjM2UyZWYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0xMS0xNSAgQWl2byBQYWFzICA8YWl2b3BhYXNA
Z21haWwuY29tPgorCisgICAgICAgIENoYW5naW5nIENTUyBjdXJzb3Igc2hvdWxkIHdvcmsgbm8g
bWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIG5vdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKyAgICAgICAgQ3Vyc29yIGNo
YW5nZSBzaG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBjaGFuZ2luZyBjdXJz
b3Igb24gbW91c2Vtb3ZlLCBtb3VzZWRvd24sIG1vdXNldXAgYW5kIG1vdXNlbW92ZQorICAgICAg
ICB3aGlsZSBtb3VzZSBidXR0b24gYmVpbmcgaG9sZCBkb3duLiBBbHNvIGFkZGVkIHRlc3QgdG8g
dmVyaWZ5IHRoYXQgYSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgbm90IGZpcmVkIGZvciBj
aGFuZ2luZyBjdXJzb3Igd2hpbGUgbW91c2UgaXMgbm90IG1vdmluZy4KKworICAgICAgICAqIGZh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0
bWw6IEFkZGVkLgorCiAyMDEyLTExLTE1ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBXZWJHTCB0ZXhJbWFnZTJEIGZhaWxzIHdpdGggZGVmZXJy
ZWQgaW1hZ2UgZGVjb2RpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhiN2FiZWE3MmE3
MTAxNmRhMTQwMzQ5OTM1ZTYwMWE5M2MyOTQzZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjQgQEAKK1Rlc3QgdGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBjaGFuZ2VkIGNvcnJlY3RseSBv
biBtb3VzZSBldmVudHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCdWcgNTMz
NDEKKworCitNb3VzZSBtb3ZlCitDdXJzb3IgSW5mbzogdHlwZT1IYW5kIGhvdFNwb3Q9MCwwCisK
K01vdXNlIGRvd24KK0N1cnNvciBJbmZvOiB0eXBlPVByb2dyZXNzIGhvdFNwb3Q9MCwwCisKK01v
dXNlIGhvbGQgZG93biwgbW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAor
CitNb3VzZSB1cAorQ3Vyc29yIEluZm86IHR5cGU9SGVscCBob3RTcG90PTAsMAorCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBk
NDFiZTFiYTBiNmRjZmE1ZTgzZmJmN2RkMGFiOGViNWJmMzU4MzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKQEAgLTAs
MCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTMzNDEiPkJ1ZyA1MzM0MTwvYT48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRhaW5lciI+Cisg
ICAgPGRpdiBpZD0idGFyZ2V0IiBvbk1vdXNlRG93bj0ic3R5bGUuY3Vyc29yPSdwcm9ncmVzcyc7
ZXZlbnQucHJldmVudERlZmF1bHQoKTsiIG9uTW91c2VNb3ZlPSJzdHlsZS5jdXJzb3I9J3BvaW50
ZXInOyIgb25Nb3VzZVVwPSJzdHlsZS5jdXJzb3I9J2hlbHAnOyIgc3R5bGU9ImN1cnNvcjpwb2lu
dGVyOyI+UGxheSB3aXRoIG1vdXNlIG9uIHRoaXMgZWxlbWVudC4gQ3Vyc29ycyBjaGFuZ2Ugb24g
ZXZlbnRzIC0gbW91c2Vtb3ZlOiBwb2ludGVyKGhhbmQpLCBtb3VzZWRvd246IHByb2dyZXNzLCBt
b3VzZXVwOiBoZWxwLjwvZGl2PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBj
aGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuIik7CisKK2lmICghd2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJU
cmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gcnVuVGVzdChwcmVwYXJlLCBuZXh0
KSB7CisgICAgcHJlcGFyZSgpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAg
IGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNv
ckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBuZXh0KCk7Cisg
ICAgfSwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RzRG9uZSgpIHsKKyAgICAvLyBUaGlzIHRleHQg
aXMgcmVkdW5kYW50IHdpdGggdGhlIHRlc3Qgb3V0cHV0IC0gaGlkZSBpdAorICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7
CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKKy8vIENhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCBo
ZXJlIHdpdGhvdXQgZXZlbnRTZW5kZXIKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB2
YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgIGV2ZW50
U2VuZGVyLmRyYWdNb2RlID0gZmFsc2U7CisgICAgdmFyIHRlc3RzID0gWworICAgICAgICBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBtb3ZlJyk7CisgICAgICAgICAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDMsIHRhcmdldC5vZmZz
ZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1Zygn
TW91c2UgZG93bicpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAg
ICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIGhvbGQgZG93biwg
bW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNl
dExlZnQgKyAxMywgdGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAgICAgICB9LCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSB1cCcpOworICAgICAgICAgICAgZXZlbnRTZW5k
ZXIubW91c2VVcCgpOworICAgICAgICB9CisgICAgXTsKKworICAgIHZhciBpID0gMDsKKyAgICBm
dW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAgICAgICAgaWYgKGkgPCB0ZXN0cy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIHJ1blRlc3QodGVzdHNbaSsrXSwgbmV4dFRlc3QpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdGVzdHNEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbmV4dFRl
c3QoKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNl
bW92ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVkMDY0NWU5Yjc2MTEzZjdjNDFlZGFkOWYy
NmNmZmU5NGY3ZTY5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAK
K1Rlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2lu
ZyBjdXJzb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCdWcgODUzNDMKKwor
CitURVNUIENBU0U6IE1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1v
dXNlbW92ZSBldmVudAorQ3Vyc29yIEluZm86IHR5cGU9UG9pbnRlciBob3RTcG90PTAsMAorQ3Vy
c29yIEluZm86IHR5cGU9SGVscCBob3RTcG90PTAsMAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0NTk4
MjFjZDMzMjZhYTJkOGU0NmU4YWY4NzIwYTY4OTNiYzZlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKQEAg
LTAsMCArMSw1NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlw
ZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8cD48YSBocmVmPWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NTM0Mz5CdWcgODUzNDM8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgor
ICAgIDxkaXYgaWQ9InRhcmdldCIgc3R5bGU9ImN1cnNvcjpkZWZhdWx0Ij5Nb3VzZSBpZGxlLCBj
aGFuZ2UgY3Vyc29yIHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUgZXZlbnQ8L2Rpdj4KKzwvZGl2
PgorPGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9u
KCJUZXN0IHRoYXQgdGhlcmUgaXMgbm8gbW91c2Vtb3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdp
bmcgY3Vyc29yLiIpOworCitpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHRlc3RGYWls
ZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScpOworfQorCitpZiAod2luZG93
LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit9
CisKKy8vIENhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCBoZXJlIHdpdGhvdXQgZXZlbnRTZW5kZXIK
K2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICBkZWJ1ZygnVEVTVCBDQVNFOiAnICsgbm9kZS50ZXh0
Q29udGVudCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8obm9kZS5vZmZzZXRMZWZ0ICsg
Mywgbm9kZS5vZmZzZXRUb3AgKyAzKTsKKyAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5k
b3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgbm9kZS5h
ZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZh
aWxlZCgnTW91c2Vtb3ZlIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQgd2hlbiBjaGFuZ2luZyBj
dXJzb3InKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7CisgICAgbm9kZS5zdHls
ZS5jdXJzb3IgPSAnaGVscCc7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29y
SW5mbyhkb2N1bWVudCkpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgfSwgMCk7CisKKyAgICAv
LyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGNoYW5nZSB0byByZXNvbHZlLiBGYWtlIG1vdXNlbW92
ZSBldmVudCB0aGF0IGNhdXNlZCBidWcsIGlzIHVzaW5nIGEgdGltZXIKKyAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1jb250
YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICB9LCAxNTApOworfQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177157</attachid>
            <date>2012-12-02 15:41:55 -0800</date>
            <delta_ts>2012-12-02 15:55:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121203013921.patch</filename>
            <type>text/plain</type>
            <size>23041</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0ODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ5NmVmZDU4MWQyMDQ5
YmQxMGI0MjJmMTJiNWIwYzI4NzhmZjdjZC4uMDRjZTJkN2Q2MThkMTQxZTc2ZWRmZGM4ZTExZDBm
Y2I0OTgxY2Q5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTEyLTAyICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBDdXJzb3IgY2hhbmdlIGlzIG5vdyBjYWxsZWQgb25seSB3
aGVuIHRoZSBub2RlIHRoYXQgaGFkIGl0cyBjdXJzb3IgY2hhbmdlcywgd2FzIGhvdmVyZWQuCisg
ICAgICAgIFRvIGFsbG93IHRoaXMgb3B0aW1pemF0aW9uLCB0aGVyZSB3YXMgYSBjaGFuZ2UgaW4g
aG92ZXIgaGFuZGxpbmcgaW50cm9kdWNlZC4gTm93IG5vdmVyIHN0YXRlCisgICAgICAgIGlzIHVw
ZGF0ZWQgZXZlbiB3aGVuIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGFuZCB0aGUgbm9kZSBob3Zl
cmVkIGlzIG5vdCB0aGUgb25lIHRoYXQgZ290CisgICAgICAgIGFjdGl2YXRlZCBvbiB0aGUgbW91
c2UgcHJlc3MuIFRoaXMgbmV3IGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggSUUgYW5kIEZp
cmVGb3guCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAg
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5v
IGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBidXR0b24gZG93bikKKworICAgICAgICBUZXN0czog
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0
L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3Rp
dmVTdGF0ZSk6IE1hZGUgaG92ZXIgc3RhdGUgdXBkYXRlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBi
cm93c2VycworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKTogTmV3bHkgYWRkZWQgbWV0aG9kIGZvciB1
cGRhdGluZyBtb3VzZSBjdXJzb3IKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcmVOb25JZGVudGljYWxDdXJzb3JMaXN0
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YXJlQ3Vyc29y
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisKIDIwMTItMTEt
MTUgIEVsbGlvdHQgU3ByZWhuICA8ZXNwcmVobkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVHJh
Y2sgc3ViZnJhbWUgY291bnQgdG8gYXZvaWQgdHJhdmVyc2luZyB0aGUgdHJlZSB3aGVuIHRoZXJl
J3Mgbm8gc3ViZnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA3ZWMzZDU3MTIyZTI2
MTAzMzQwOGMzNDA0ZTJjNzcyOTcxYTAwNGMwLi5mOTU4NDI5ZGE2NDQ1ZjhlMjllYzEzZDMxNmYy
NGNmN2FiNDc3NGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4MTIsMTEgKzU4MTIs
NiBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgIC8vIG5vZGVzIHNob3VsZCByZW1haW4g
OmFjdGl2ZSB1bnRpbCB0aGUgbW91c2UgaXMgcmVsZWFzZWQuCiAgICAgYm9vbCBhbGxvd0FjdGl2
ZUNoYW5nZXMgPSAhb2xkQWN0aXZlTm9kZSAmJiBhY3RpdmVOb2RlKCk7CiAKLSAgICAvLyBJZiB0
aGUgbW91c2UgaXMgZG93biBhbmQgaWYgdGhpcyBpcyBhIG1vdXNlIG1vdmUgZXZlbnQsIHdlIHdh
bnQgdG8gcmVzdHJpY3QgY2hhbmdlcyBpbgotICAgIC8vIDpob3Zlci86YWN0aXZlIHRvIG9ubHkg
YXBwbHkgdG8gZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIDphY3RpdmUgY2hhaW4gdGhhdCB3ZSBm
cm96ZQotICAgIC8vIGF0IHRoZSB0aW1lIHRoZSBtb3VzZSB3ZW50IGRvd24uCi0gICAgYm9vbCBt
dXN0QmVJbkFjdGl2ZUNoYWluID0gcmVxdWVzdC5hY3RpdmUoKSAmJiByZXF1ZXN0Lm1vdmUoKTsK
LQogICAgIFJlZlB0cjxOb2RlPiBvbGRIb3Zlck5vZGUgPSBob3Zlck5vZGUoKTsKICAgICAvLyBD
bGVhciB0aGUgOmhvdmVyIGNoYWluIHdoZW4gdGhlIHRvdWNoIGdlc3R1cmUgaXMgb3Zlci4KICAg
ICBpZiAocmVxdWVzdC50b3VjaFJlbGVhc2UoKSkgewpAQCAtNTg1MywxNCArNTg0OCwxNCBAQCB2
b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgIGlmIChvbGRIb3Zlck9iaiAhPSBuZXdIb3Zlck9i
aikgewogICAgICAgICAvLyBUaGUgb2xkIGhvdmVyIHBhdGggb25seSBuZWVkcyB0byBiZSBjbGVh
cmVkIHVwIHRvIChhbmQgbm90IGluY2x1ZGluZykgdGhlIGNvbW1vbiBhbmNlc3RvcjsKICAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvbGRIb3Zlck9iajsgY3VyciAmJiBjdXJyICE9
IGFuY2VzdG9yOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3RvcigpKSB7Ci0gICAgICAgICAgICBp
ZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQoKSAmJiAoIW11c3RCZUluQWN0aXZlQ2hh
aW4gfHwgY3Vyci0+bm9kZSgpLT5pbkFjdGl2ZUNoYWluKCkpKQorICAgICAgICAgICAgaWYgKGN1
cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpCiAgICAgICAgICAgICAgICAgbm9kZXNUb1Jl
bW92ZUZyb21DaGFpbi5hcHBlbmQoY3Vyci0+bm9kZSgpKTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIC8vIE5vdyBzZXQgdGhlIGhvdmVyIHN0YXRlIGZvciBvdXIgbmV3IG9iamVjdCB1cCB0byB0
aGUgcm9vdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5ld0hvdmVyT2JqOyBjdXJy
OyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3RvcigpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5ub2Rl
KCkgJiYgIWN1cnItPmlzVGV4dCgpICYmICghbXVzdEJlSW5BY3RpdmVDaGFpbiB8fCBjdXJyLT5u
b2RlKCktPmluQWN0aXZlQ2hhaW4oKSkpCisgICAgICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1
cnItPmlzVGV4dCgpKQogICAgICAgICAgICAgbm9kZXNUb0FkZFRvQ2hhaW4uYXBwZW5kKGN1cnIt
Pm5vZGUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXgg
M2FjOTVlNjliODU3YmU0Yzc0ZDgyMjlhNDI4ZGM1ZTZlOThiMDZiNS4uNGE0MjBlZjQwNDUzOTFl
ZmU2YTkwMDBkZTM0Mjg2ZDk2ZGYzODgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcApAQCAtMTM5MCw3ICsxMzkwLDM3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1c2VIYW5kQ3Vy
c29yKE5vZGUqIG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSkKICAgICByZXR1
cm4gKChpc092ZXJMaW5rIHx8IGlzU3VibWl0SW1hZ2Uobm9kZSkpICYmICghZWRpdGFibGUgfHwg
ZWRpdGFibGVMaW5rRW5hYmxlZCkpOwogfQogCi1PcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6
OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCwg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKCkK
K3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGlm
IChzZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmRldmljZVN1cHBvcnRzTW91c2UoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkgfHwg
IW1fZnJhbWUtPnBhZ2UoKS0+aXNPbnNjcmVlbigpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLT5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNo
aWZ0S2V5OworICAgIGJvb2wgY3RybEtleTsKKyAgICBib29sIGFsdEtleTsKKyAgICBib29sIG1l
dGFLZXk7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0
ZShzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsKKworICAgIEhpdFRlc3RSZXF1
ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fY3VycmVudE1vdXNlUG9zaXRpb24pKTsK
KyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPmhpdFRlc3QocmVxdWVzdCwg
cmVzdWx0KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0Q3Vy
c29yKHJlc3VsdCwgc2hpZnRLZXkpOworICAgIGlmIChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNo
YW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3Iu
Y3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7
CisgICAgfQorfQorCitPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2hpZnRLZXkpCiB7CiAgICAgaWYgKG1f
cmVzaXplTGF5ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJl
dHVybiBOb0N1cnNvckNoYW5nZTsKQEAgLTE0MDEsOCArMTQzMSwxNiBAQCBPcHRpb25hbEN1cnNv
ciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBldgogICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm1f
cGFuU2Nyb2xsSW5Qcm9ncmVzcykKICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOwogCi0g
ICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKLSAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOworICAgIE5vZGUqIG5vZGUgPSBy
ZXN1bHQudGFyZ2V0Tm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5vQ3Vy
c29yQ2hhbmdlOworICAgIGJvb2wgb3JpZ2luYWxJc1RleHQgPSBub2RlLT5pc1RleHROb2RlKCk7
CisgICAgaWYgKG5vZGUgJiYgb3JpZ2luYWxJc1RleHQpCisgICAgICAgIG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFu
Z2U7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/IHJlbmRlcmVyLT5zdHlsZSgpIDogMDsK
ICAgICBib29sIGhvcml6b250YWxUZXh0ID0gIXN0eWxlIHx8IHN0eWxlLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpOwogICAgIGNvbnN0IEN1cnNvciYgaUJlYW0gPSBob3Jpem9udGFsVGV4dCA/
IGlCZWFtQ3Vyc29yKCkgOiB2ZXJ0aWNhbFRleHRDdXJzb3IoKTsKQEAgLTE0MTgsNyArMTQ1Niw3
IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAg
ICAgQ3Vyc29yIG92ZXJyaWRlQ3Vyc29yOwotICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRD
dXJzb3Iocm91bmRlZEludFBvaW50KGV2ZW50LmxvY2FsUG9pbnQoKSksIG92ZXJyaWRlQ3Vyc29y
KSkgeworICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3IocmVzdWx0LnJvdW5kZWRQ
b2ludCgpLCBvdmVycmlkZUN1cnNvcikpIHsKICAgICAgICAgY2FzZSBTZXRDdXJzb3JCYXNlZE9u
U3R5bGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRDdXJzb3I6CkBAIC0x
NDQ5LDE5ICsxNDg3LDE5IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vy
c29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBzd2l0Y2gg
KHN0eWxlID8gc3R5bGUtPmN1cnNvcigpIDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNP
Ul9BVVRPOiB7Ci0gICAgICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5yZW5kZXJl
cklzRWRpdGFibGUoKSk7CisgICAgICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZS0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCkpOwogCi0gICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2ZW50Lmlz
T3ZlckxpbmsoKSwgZXZlbnQuZXZlbnQoKS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYgKHVzZUhh
bmRDdXJzb3Iobm9kZSwgcmVzdWx0LlVSTEVsZW1lbnQoKSAmJiByZXN1bHQuVVJMRWxlbWVudCgp
LT5pc0xpbmsoKSwgc2hpZnRLZXkpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsK
IAogICAgICAgICBib29sIGluUmVzaXplciA9IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIp
IHsKICAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9z
aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2Zy
YW1lLT52aWV3KCkpCi0gICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1Bv
aW50SW5SZXNpemVDb250cm9sKHZpZXctPndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5w
b3NpdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1Bv
aW50SW5SZXNpemVDb250cm9sKHZpZXctPndpbmRvd1RvQ29udGVudHMocmVzdWx0LnJvdW5kZWRQ
b2ludCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChlZGl0YWJs
ZSB8fCAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0YXJ0U2Vs
ZWN0aW9uKCkpKSAmJiAhaW5SZXNpemVyICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlmICgoZWRp
dGFibGUgfHwgKG9yaWdpbmFsSXNUZXh0ICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAm
JiAhaW5SZXNpemVyICYmICFyZXN1bHQuc2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICByZXR1cm4g
aUJlYW07CiAgICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiAgICAgfQpAQCAtMTg3Miw3
ICsxOTEwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAgICAgICAgaWYgKHNjcm9sbGJh
ciAmJiAhbV9tb3VzZVByZXNzZWQpCiAgICAgICAgICAgICBzY3JvbGxiYXItPm1vdXNlTW92ZWQo
bW91c2VFdmVudCk7IC8vIEhhbmRsZSBob3ZlciBlZmZlY3RzIG9uIHBsYXRmb3JtcyB0aGF0IHN1
cHBvcnQgdmlzdWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBob3ZlcmluZy4KICAgICAgICAgaWYg
KEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAgT3B0aW9u
YWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LCBzY3JvbGxiYXIpOwor
ICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3Io
bWV2LmhpdFRlc3RSZXN1bHQoKSwgbW91c2VFdmVudC5zaGlmdEtleSgpKTsKICAgICAgICAgICAg
IGlmIChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAg
bV9jdXJyZW50TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5jdXJzb3IoKTsKICAgICAgICAg
ICAgICAgICB2aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91c2VDdXJzb3IpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggMDBhZDBhNDA4Yzc4MWVmZGMyNmEyOTc3NTFkNzBmNjMw
OTkwZjkzZi4uMGVjNWU1OTVlNzQ1OWRiY2RjNTI4ODgzZjg0NmNlZWE3MzI1MTI1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0yMzcsNiArMjM3LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICAgICBib29sIHVzZUhhbmRDdXJzb3IoTm9kZSosIGJvb2wgaXNPdmVyTGluaywgYm9v
bCBzaGlmdEtleSk7CisgICAgdm9pZCB1cGRhdGVDdXJzb3IoKTsKIAogcHJpdmF0ZToKICNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtMjYzLDcgKzI2NCw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMmKTsKIAotICAgIE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBN
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgU2Nyb2xsYmFyKik7CisgICAgT3B0aW9uYWxD
dXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBib29sIHNoaWZ0S2V5KTsK
ICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykKICAgICB2b2lkIHVwZGF0ZVBhblNjcm9sbFN0YXRl
KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5k
ZXggMTVkY2RkMDU4MjllNGU3NmQ4YTE0Mjc2ZjFiYTdmNjQ4NGM3NzcyMC4uMTVjMGY2YWI1N2U3
MzJjZTNkM2IxOTY0NTQ5YmNiNzMzZThmMzQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKQEAgLTE3NTMsNiArMTc1MywxNyBAQCBTdHlsZURpZmZlcmVuY2Ug
UmVuZGVyT2JqZWN0OjphZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IHVuc2lnbgogICAgIHJldHVybiBkaWZmOwogfQogCitzdGF0aWMgYm9vbCBhcmVOb25JZGVudGlj
YWxDdXJzb3JMaXN0c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikKK3sKKyAgICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7CisgICAg
cmV0dXJuIGEtPmN1cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAq
Yi0+Y3Vyc29ycygpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICByZXR1cm4g
YS0+Y3Vyc29yKCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3Jz
KCkgfHwgYXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Cit9CisKIHZvaWQg
UmVuZGVyT2JqZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsK
ICAgICBpZiAobV9zdHlsZSA9PSBzdHlsZSkgewpAQCAtMTc5MSw2ICsxODAyLDEzIEBAIHZvaWQg
UmVuZGVyT2JqZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIAog
ICAgIHN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlLmdldCgpKTsKIAorICAgIGlmIChvbGRT
dHlsZS5nZXQoKSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLmdldCgpLCB0aGlzLT5zdHls
ZSgpKSkgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAg
ICAgICAgICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPmhvdmVyZWQoKSkKKyAgICAgICAgICAgICAg
ICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZUN1cnNvcigpOworICAgICAgICB9CisgICAg
fQorCiAgICAgLy8gRklYTUU6IHx0aGlzfCBtaWdodCBiZSBkZXN0cm95ZWQgaGVyZS4gVGhpcyBj
YW4gY3VycmVudGx5IGhhcHBlbiBmb3IgYSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hlbgogICAgIC8v
IGl0cyBmaXJzdC1sZXR0ZXIgYmxvY2sgZ2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVyVGV4dEZyYWdt
ZW50OjpzdHlsZURpZENoYW5nZS4gRm9yIFJlbmRlclRleHRGcmFnbWVudChzKSwKICAgICAvLyB3
ZSB3aWxsIHNhZmVseSBiYWlsIG91dCB3aXRoIHRoZSBkb2VzTm90TmVlZExheW91dCBmbGFnLiBX
ZSBtaWdodCB3YW50IHRvIGJyb2FkZW4gdGhpcyBjb25kaXRpb24KQEAgLTE5MDUsMTcgKzE5MjMs
NiBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3UwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgYXJl
Tm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpCi17Ci0gICAgQVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3Jz
KCkpOwotICAgIHJldHVybiBhLT5jdXJzb3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJz
b3JzKCkgPT0gKmItPmN1cnNvcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNv
cnNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0g
ICAgcmV0dXJuIGEtPmN1cnNvcigpID09IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0g
Yi0+Y3Vyc29ycygpIHx8IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOwot
fQotCiB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRp
ZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBpZiAoc19hZmZlY3RzUGFy
ZW50QmxvY2spCkBAIC0xOTUxLDExICsxOTU4LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QK
IAogICAgIC8vIERvbid0IGNoZWNrIGZvciByZXBhaW50IGhlcmU7IHdlIG5lZWQgdG8gd2FpdCB1
bnRpbCB0aGUgbGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1cGRhdGVkIGJ5IHN1YmNsYXNzZXMgYmVm
b3JlIHdlIGtub3cgaWYgd2UgaGF2ZSB0byByZXBhaW50IChpbiBzZXRTdHlsZSgpKS4KLQotICAg
IGlmIChvbGRTdHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewot
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0g
ICAgfQogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0No
aWxkcmVuKGJvb2wgYmxvY2tDaGlsZHJlbk9ubHkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTVhNzZjZWI4Y2RiMzNjMDg4
ZjgwMGRhZDc2YTJiMGI1MjE5OTk3My4uNTVkOWZhNDMwYTQ0MzE5NGVlNTUzMTMyNjE4ZjQ5NDg2
OWM3NDM2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTEyLTAyICBBaXZvIFBhYXMgIDxh
aXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0
eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVudAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAg
IENoYW5naW5nIENTUyBjdXJzb3Igc2hvdWxkIHdvcmsgbm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRv
biBpcyBwcmVzc2VkIG9yIG5vdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTMzNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgY2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwg
bW91c2Vkb3duLCBtb3VzZXVwIGFuZCBtb3VzZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2UgYnV0
dG9uIGJlaW5nIGhvbGQgZG93bi4gQWxzbyBhZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91
c2Vtb3ZlCisgICAgICAgIGV2ZW50IGlzIG5vdCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdo
aWxlIG1vdXNlIGlzIG5vdCBtb3ZpbmcuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9ob3Zlci1hY3Rp
dmUtZHJhZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRy
YWcuaHRtbDogQ2hhbmdlZCBleHBlY3RhdGlvbiB0byBtYXRjaCBjaGFuZ2UgaW4gaG92ZXIgaGFu
ZGxpbmcgd2hpbGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93bgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWw6
IEFkZGVkLgorCiAyMDEyLTExLTE1ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBXZWJHTCB0ZXhJbWFnZTJEIGZhaWxzIHdpdGggZGVmZXJyZWQg
aW1hZ2UgZGVjb2RpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL2hvdmVyLWFj
dGl2ZS1kcmFnLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL2hvdmVyLWFjdGl2
ZS1kcmFnLWV4cGVjdGVkLnR4dAppbmRleCBiNDUxMTYxMzM1NmE0NWRhNmVhMjI1YjNjOGM4ZDdm
ODI5NGFlZWE2Li5iZGIxZTNlZDkxNmYyMWNiZjY2YTQwMDI3MWI5N2Q4NDA3ZmQ1ZjVkIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWctZXhwZWN0ZWQu
dHh0CkBAIC03LDcgKzcsNyBAQCBQQVNTIGJhY2tncm91bmQgaXMgInJnYigwLCAwLCAwKSIKIFBB
U1MgYmFja2dyb3VuZCBpcyAicmdiKDI1NSwgMjU1LCAwKSIKIFBBU1MgYmFja2dyb3VuZCBpcyAi
cmdiKDAsIDAsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMjU1LCAwKSIKLVBBU1Mg
YmFja2dyb3VuZCBpcyAicmdiKDAsIDAsIDApIgorUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMjU1
LCAwLCAwKSIKIFBBU1MgYmFja2dyb3VuZCBpcyAicmdiKDAsIDI1NSwgMCkiCiBQQVNTIGJhY2tn
cm91bmQgaXMgInJnYigwLCAwLCAwKSIKIFBBU1MgYmFja2dyb3VuZCBpcyAicmdiKDAsIDAsIDAp
IgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWcuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL2hvdmVyLWFjdGl2ZS1kcmFnLmh0bWwKaW5kZXggZTA3
ODI3ZjRjMjgwN2MxY2FkMzMxNjI2ZjI2MzNkYTE0YmIzZWFjOC4uMmYxYzZjMThiM2NlM2RjNTk1
YmI1YzNkNjljMWUyY2E3YjJlYWI5MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
aG92ZXItYWN0aXZlLWRyYWcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9ob3Zlci1h
Y3RpdmUtZHJhZy5odG1sCkBAIC00OSw3ICs0OSw3IEBACiAgICAgLy8gV2l0aCB0aGUgbW91c2Ug
c3RpbGwgZG93biwgbW92ZSBpbnRvIHRoZSBzZWNvbmQgYm94LgogICAgIGV2ZW50U2VuZGVyLm1v
dXNlTW92ZVRvKDUwLCAxNTApCiAgICAgc2hvdWxkSGF2ZUJhY2tncm91bmQoYm94LCAncmdiKDAs
IDI1NSwgMCknKQotICAgIHNob3VsZEhhdmVCYWNrZ3JvdW5kKGJveDIsICdyZ2IoMCwgMCwgMCkn
KQorICAgIHNob3VsZEhhdmVCYWNrZ3JvdW5kKGJveDIsICdyZ2IoMjU1LCAwLCAwKScpCiAKICAg
ICAvLyBNb3VzZSBzdGlsbCBkb3duLCBtb3ZlIG91dHNpZGUgb2YgYm90aCBib3hlcy4KICAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbyg0MDAsIDUwKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40OGI3YWJlYTcyYTcxMDE2ZGExNDAzNDk5MzVlNjAxYTkzYzI5NDNkCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwyNCBAQAorVGVzdCB0aGF0IG1vdXNlIGN1cnNvcnMgYXJlIGNoYW5n
ZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK0J1ZyA1MzM0MQorCisKK01vdXNlIG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQg
aG90U3BvdD0wLDAKKworTW91c2UgZG93bgorQ3Vyc29yIEluZm86IHR5cGU9UHJvZ3Jlc3MgaG90
U3BvdD0wLDAKKworTW91c2UgaG9sZCBkb3duLCBtb3ZlCitDdXJzb3IgSW5mbzogdHlwZT1IYW5k
IGhvdFNwb3Q9MCwwCisKK01vdXNlIHVwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9
MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGQ0MWJlMWJhMGI2ZGNmYTVlODNmYmY3ZGQwYWI4ZWI1YmYzNTgzMQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFu
Z2UuaHRtbApAQCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MzM0MSI+QnVnIDUzMzQxPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3Qt
Y29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQiIG9uTW91c2VEb3duPSJzdHlsZS5jdXJz
b3I9J3Byb2dyZXNzJztldmVudC5wcmV2ZW50RGVmYXVsdCgpOyIgb25Nb3VzZU1vdmU9InN0eWxl
LmN1cnNvcj0ncG9pbnRlcic7IiBvbk1vdXNlVXA9InN0eWxlLmN1cnNvcj0naGVscCc7IiBzdHls
ZT0iY3Vyc29yOnBvaW50ZXI7Ij5QbGF5IHdpdGggbW91c2Ugb24gdGhpcyBlbGVtZW50LiBDdXJz
b3JzIGNoYW5nZSBvbiBldmVudHMgLSBtb3VzZW1vdmU6IHBvaW50ZXIoaGFuZCksIG1vdXNlZG93
bjogcHJvZ3Jlc3MsIG1vdXNldXA6IGhlbHAuPC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IG1vdXNl
IGN1cnNvcnMgYXJlIGNoYW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4iKTsKKworaWYg
KCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWly
ZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAg
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCitmdW5jdGlvbiBydW5UZXN0
KHByZXBhcmUsIG5leHQpIHsKKyAgICBwcmVwYXJlKCk7CisgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5n
ZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIG5leHQoKTsKKyAgICB9LCAwKTsKK30KKworZnVuY3Rpb24gdGVzdHNEb25lKCkgeworICAg
IC8vIFRoaXMgdGV4dCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdGVzdCBvdXRwdXQgLSBoaWRlIGl0
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlz
cGxheSA9ICdub25lJzsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworLy8gQ2FuJ3QgZG8gYW55
dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0
Jyk7CisgICAgZXZlbnRTZW5kZXIuZHJhZ01vZGUgPSBmYWxzZTsKKyAgICB2YXIgdGVzdHMgPSBb
CisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIG1vdmUnKTsK
KyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsg
MywgdGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGRlYnVnKCdNb3VzZSBkb3duJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3Vz
ZURvd24oKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91
c2UgaG9sZCBkb3duLCBtb3ZlJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVU
byh0YXJnZXQub2Zmc2V0TGVmdCArIDEzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7CisgICAgICAg
IH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIHVwJyk7CisgICAgICAg
ICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgICAgIH0KKyAgICBdOworCisgICAgdmFy
IGkgPSAwOworICAgIGZ1bmN0aW9uIG5leHRUZXN0KCkgeworICAgICAgICBpZiAoaSA8IHRlc3Rz
Lmxlbmd0aCkgeworICAgICAgICAgICAgcnVuVGVzdCh0ZXN0c1tpKytdLCBuZXh0VGVzdCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0c0RvbmUoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBuZXh0VGVzdCgpOworfQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5v
LW1vdXNlbW92ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1j
dXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNWQwNjQ1ZTliNzYx
MTNmN2M0MWVkYWQ5ZjI2Y2ZmZTk0ZjdlNjkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxNiBAQAorVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJl
ZCB3aGVuIGNoYW5naW5nIGN1cnNvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K0J1ZyA4NTM0MworCisKK1RFU1QgQ0FTRTogTW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91
bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50CitDdXJzb3IgSW5mbzogdHlwZT1Qb2ludGVyIGhv
dFNwb3Q9MCwwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzQ1OTgyMWNkMzMyNmFhMmQ4ZTQ2ZThhZjg3MjBhNjg5M2JjNmU1MwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3Vz
ZW1vdmUuaHRtbApAQCAtMCwwICsxLDU1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg1MzQzPkJ1ZyA4NTM0MzwvYT48L3A+Cis8ZGl2IGlkPSJ0ZXN0
LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0iY3Vyc29yOmRlZmF1bHQi
Pk1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVu
dDwvZGl2PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
PgorZGVzY3JpcHRpb24oIlRlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmly
ZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3IuIik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7
CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9
CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKK30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91
dCBldmVudFNlbmRlcgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciBub2RlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgIGRlYnVnKCdURVNUIENBU0U6
ICcgKyBub2RlLnRleHRDb250ZW50KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhub2Rl
Lm9mZnNldExlZnQgKyAzLCBub2RlLm9mZnNldFRvcCArIDMpOworICAgIGRlYnVnKCdDdXJzb3Ig
SW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQp
KTsKKyAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgewor
ICAgICAgICB0ZXN0RmFpbGVkKCdNb3VzZW1vdmUgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3
aGVuIGNoYW5naW5nIGN1cnNvcicpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsK
KyAgICBub2RlLnN0eWxlLmN1cnNvciA9ICdoZWxwJzsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdl
dEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICB9
LCAwKTsKKworICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgY2hhbmdlIHRvIHJlc29sdmUu
IEZha2UgbW91c2Vtb3ZlIGV2ZW50IHRoYXQgY2F1c2VkIGJ1ZywgaXMgdXNpbmcgYSB0aW1lcgor
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0sIDE1MCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="commit-queue"
          id="193176"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177158</attachid>
            <date>2012-12-02 16:06:25 -0800</date>
            <delta_ts>2012-12-02 16:11:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121203020350.patch</filename>
            <type>text/plain</type>
            <size>22998</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTU0YTNkZjM2YjJmYjJm
ODZlOGQzYWRkMGFkZTk4MGZjMDFhZmY0ZS4uOTljZTljOTUyMTk0ZDI4YTllMjQyZDRkZDU1Y2Yz
MzlmM2ExMWI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTEyLTAyICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBDdXJzb3IgY2hhbmdlIGlzIG5vdyBjYWxsZWQgb25seSB3
aGVuIHRoZSBub2RlIHRoYXQgaGFkIGl0cyBjdXJzb3IgY2hhbmdlcywgd2FzIGhvdmVyZWQuCisg
ICAgICAgIFRvIGFsbG93IHRoaXMgb3B0aW1pemF0aW9uLCB0aGVyZSB3YXMgYSBjaGFuZ2UgaW4g
aG92ZXIgaGFuZGxpbmcgaW50cm9kdWNlZC4gTm93IG5vdmVyIHN0YXRlCisgICAgICAgIGlzIHVw
ZGF0ZWQgZXZlbiB3aGVuIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGFuZCB0aGUgbm9kZSBob3Zl
cmVkIGlzIG5vdCB0aGUgb25lIHRoYXQgZ290CisgICAgICAgIGFjdGl2YXRlZCBvbiB0aGUgbW91
c2UgcHJlc3MuIFRoaXMgbmV3IGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggSUUgYW5kIEZp
cmVGb3guCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAg
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5v
IGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBidXR0b24gZG93bikKKworICAgICAgICBUZXN0czog
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0
L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3Rp
dmVTdGF0ZSk6IE1hZGUgaG92ZXIgc3RhdGUgdXBkYXRlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBi
cm93c2VycworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKTogTmV3bHkgYWRkZWQgbWV0aG9kIGZvciB1
cGRhdGluZyBtb3VzZSBjdXJzb3IKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcmVOb25JZGVudGljYWxDdXJzb3JMaXN0
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YXJlQ3Vyc29y
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisKIDIwMTItMTEt
MzAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzYxNDIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCA3NTY5Njc0NDE4MGVmZmFmZGRkZjk3MWZmYzkzNTIxZWYyMmFlYmVkLi5jNTUwYzJiNTA3
OTZkNDg5MThjZDU3M2I0ZmI3ZDM1MTE0NzkwMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTU3NDgsMTEgKzU3NDgsNiBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0
YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgIC8vIG5v
ZGVzIHNob3VsZCByZW1haW4gOmFjdGl2ZSB1bnRpbCB0aGUgbW91c2UgaXMgcmVsZWFzZWQuCiAg
ICAgYm9vbCBhbGxvd0FjdGl2ZUNoYW5nZXMgPSAhb2xkQWN0aXZlTm9kZSAmJiBhY3RpdmVOb2Rl
KCk7CiAKLSAgICAvLyBJZiB0aGUgbW91c2UgaXMgZG93biBhbmQgaWYgdGhpcyBpcyBhIG1vdXNl
IG1vdmUgZXZlbnQsIHdlIHdhbnQgdG8gcmVzdHJpY3QgY2hhbmdlcyBpbgotICAgIC8vIDpob3Zl
ci86YWN0aXZlIHRvIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIDphY3Rp
dmUgY2hhaW4gdGhhdCB3ZSBmcm96ZQotICAgIC8vIGF0IHRoZSB0aW1lIHRoZSBtb3VzZSB3ZW50
IGRvd24uCi0gICAgYm9vbCBtdXN0QmVJbkFjdGl2ZUNoYWluID0gcmVxdWVzdC5hY3RpdmUoKSAm
JiByZXF1ZXN0Lm1vdmUoKTsKLQogICAgIFJlZlB0cjxOb2RlPiBvbGRIb3Zlck5vZGUgPSBob3Zl
ck5vZGUoKTsKICAgICAvLyBDbGVhciB0aGUgOmhvdmVyIGNoYWluIHdoZW4gdGhlIHRvdWNoIGdl
c3R1cmUgaXMgb3Zlci4KICAgICBpZiAocmVxdWVzdC50b3VjaFJlbGVhc2UoKSkgewpAQCAtNTc4
OSwxNCArNTc4NCwxNCBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgIGlmIChvbGRIb3Zl
ck9iaiAhPSBuZXdIb3Zlck9iaikgewogICAgICAgICAvLyBUaGUgb2xkIGhvdmVyIHBhdGggb25s
eSBuZWVkcyB0byBiZSBjbGVhcmVkIHVwIHRvIChhbmQgbm90IGluY2x1ZGluZykgdGhlIGNvbW1v
biBhbmNlc3RvcjsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvbGRIb3Zlck9i
ajsgY3VyciAmJiBjdXJyICE9IGFuY2VzdG9yOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3Rvcigp
KSB7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQoKSAmJiAo
IW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgY3Vyci0+bm9kZSgpLT5pbkFjdGl2ZUNoYWluKCkpKQor
ICAgICAgICAgICAgaWYgKGN1cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpCiAgICAgICAg
ICAgICAgICAgbm9kZXNUb1JlbW92ZUZyb21DaGFpbi5hcHBlbmQoY3Vyci0+bm9kZSgpKTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdyBzZXQgdGhlIGhvdmVyIHN0YXRlIGZvciBvdXIg
bmV3IG9iamVjdCB1cCB0byB0aGUgcm9vdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IG5ld0hvdmVyT2JqOyBjdXJyOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3RvcigpKSB7Ci0gICAg
ICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpICYmICghbXVzdEJlSW5BY3Rp
dmVDaGFpbiB8fCBjdXJyLT5ub2RlKCktPmluQWN0aXZlQ2hhaW4oKSkpCisgICAgICAgIGlmIChj
dXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpKQogICAgICAgICAgICAgbm9kZXNUb0FkZFRv
Q2hhaW4uYXBwZW5kKGN1cnItPm5vZGUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggZGE3ZDIyMzhjMzQyYjZmZjM3NTQwOWZhODBhZWJjZmQwNzAyNDRj
My4uY2NkMTYzZjgyNmIzN2U0MjNiYWNjNTkxYjk4ZmM2ZmRkNThiOGY5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTQwOSw3ICsxNDA5LDM3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUqIG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBz
aGlmdEtleSkKICAgICByZXR1cm4gKChpc092ZXJMaW5rIHx8IGlzU3VibWl0SW1hZ2Uobm9kZSkp
ICYmICghZWRpdGFibGUgfHwgZWRpdGFibGVMaW5rRW5hYmxlZCkpOwogfQogCi1PcHRpb25hbEN1
cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJiBldmVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIEV2ZW50SGFuZGxl
cjo6dXBkYXRlQ3Vyc29yKCkKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5z
ZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmRldmljZVN1cHBvcnRz
TW91c2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+aXNPbnNjcmVlbigpIHx8ICFtX2Zy
YW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIHNoaWZ0S2V5OworICAgIGJvb2wgY3RybEtleTsKKyAgICBib29sIGFs
dEtleTsKKyAgICBib29sIG1ldGFLZXk7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRD
dXJyZW50TW9kaWZpZXJTdGF0ZShzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsK
KworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsK
KyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fY3VycmVu
dE1vdXNlUG9zaXRpb24pKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkt
PmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFs
Q3Vyc29yID0gc2VsZWN0Q3Vyc29yKHJlc3VsdCwgc2hpZnRLZXkpOworICAgIGlmIChvcHRpb25h
bEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29y
ID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1
cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCitPcHRpb25hbEN1cnNvciBFdmVudEhhbmRs
ZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2hpZnRL
ZXkpCiB7CiAgICAgaWYgKG1fcmVzaXplTGF5ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVN
b2RlKCkpCiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKQEAgLTE0MjAsOCArMTQ1MCwx
NiBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPm1fcGFuU2Nyb2xsSW5Qcm9ncmVzcykKICAgICAgICAgcmV0dXJuIE5v
Q3Vyc29yQ2hhbmdlOwogCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwor
ICAgIE5vZGUqIG5vZGUgPSByZXN1bHQudGFyZ2V0Tm9kZSgpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOworICAgIGJvb2wgb3JpZ2luYWxJc1RleHQgPSBu
b2RlLT5pc1RleHROb2RlKCk7CisgICAgaWYgKG5vZGUgJiYgb3JpZ2luYWxJc1RleHQpCisgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/IHJlbmRl
cmVyLT5zdHlsZSgpIDogMDsKICAgICBib29sIGhvcml6b250YWxUZXh0ID0gIXN0eWxlIHx8IHN0
eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGNvbnN0IEN1cnNvciYgaUJlYW0g
PSBob3Jpem9udGFsVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiB2ZXJ0aWNhbFRleHRDdXJzb3IoKTsK
QEAgLTE0MzcsNyArMTQ3NSw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0
Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBpZiAo
cmVuZGVyZXIpIHsKICAgICAgICAgQ3Vyc29yIG92ZXJyaWRlQ3Vyc29yOwotICAgICAgICBzd2l0
Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50KGV2ZW50LmxvY2FsUG9pbnQo
KSksIG92ZXJyaWRlQ3Vyc29yKSkgeworICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJz
b3Iocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpLCBvdmVycmlkZUN1cnNvcikp
IHsKICAgICAgICAgY2FzZSBTZXRDdXJzb3JCYXNlZE9uU3R5bGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTZXRDdXJzb3I6CkBAIC0xNDY4LDE5ICsxNTA2LDE5IEBAIE9wdGlv
bmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBzd2l0Y2ggKHN0eWxlID8gc3R5bGUtPmN1cnNvcigp
IDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRPOiB7Ci0gICAgICAgIGJvb2wg
ZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CisgICAgICAg
IGJvb2wgZWRpdGFibGUgPSAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOwogCi0gICAgICAg
IGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2ZW50LmlzT3ZlckxpbmsoKSwgZXZlbnQuZXZlbnQo
KS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYgKHVzZUhhbmRDdXJzb3Iobm9kZSwgcmVzdWx0LlVS
TEVsZW1lbnQoKSAmJiByZXN1bHQuVVJMRWxlbWVudCgpLT5pc0xpbmsoKSwgc2hpZnRLZXkpKQog
ICAgICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsKIAogICAgICAgICBib29sIGluUmVzaXpl
ciA9IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChSZW5k
ZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAg
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCi0gICAgICAgICAg
ICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXct
PndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXct
PndpbmRvd1RvQ29udGVudHMocmVzdWx0LnJvdW5kZWRQb2ludCgpKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChlZGl0YWJsZSB8fCAocmVuZGVyZXIgJiYgcmVuZGVy
ZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNpemVy
ICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlmICgoZWRpdGFibGUgfHwgKG9yaWdpbmFsSXNUZXh0
ICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNpemVyICYmICFyZXN1bHQu
c2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICByZXR1cm4gaUJlYW07CiAgICAgICAgIHJldHVybiBw
b2ludGVyQ3Vyc29yKCk7CiAgICAgfQpAQCAtMTg5MSw3ICsxOTI5LDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91
c2VFdmVudCwgSGkKICAgICAgICAgaWYgKHNjcm9sbGJhciAmJiAhbV9tb3VzZVByZXNzZWQpCiAg
ICAgICAgICAgICBzY3JvbGxiYXItPm1vdXNlTW92ZWQobW91c2VFdmVudCk7IC8vIEhhbmRsZSBo
b3ZlciBlZmZlY3RzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdmlzdWFsIGZlZWRiYWNrIG9u
IHNjcm9sbGJhciBob3ZlcmluZy4KICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJh
bWUtPnZpZXcoKSkgewotICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3Ig
PSBzZWxlY3RDdXJzb3IobWV2LCBzY3JvbGxiYXIpOworICAgICAgICAgICAgT3B0aW9uYWxDdXJz
b3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LmhpdFRlc3RSZXN1bHQoKSwgbW91
c2VFdmVudC5zaGlmdEtleSgpKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbEN1cnNvci5pc0N1
cnNvckNoYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50TW91c2VDdXJzb3IgPSBv
cHRpb25hbEN1cnNvci5jdXJzb3IoKTsKICAgICAgICAgICAgICAgICB2aWV3LT5zZXRDdXJzb3Io
bV9jdXJyZW50TW91c2VDdXJzb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXgg
YzE1ODk4YTAyNjQ5ZGVhYzFhOTFjOWM3YjBlM2UyOTdlODEyODM4OS4uYjE5YWUxYTMxZDU1YTc1
ZTUwZmU5MmI3ZWU1ZjBiZTgzNTI1ZjQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CkBAIC0yNDIsNiArMjQyLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHVzZUhhbmRD
dXJzb3IoTm9kZSosIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSk7CisgICAgdm9pZCB1
cGRhdGVDdXJzb3IoKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAt
MjY4LDcgKzI2OSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIGhhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAotICAgIE9w
dGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzJiwgU2Nyb2xsYmFyKik7CisgICAgT3B0aW9uYWxDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0
IEhpdFRlc3RSZXN1bHQmLCBib29sIHNoaWZ0S2V5KTsKICNpZiBFTkFCTEUoUEFOX1NDUk9MTElO
RykKICAgICB2b2lkIHVwZGF0ZVBhblNjcm9sbFN0YXRlKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMTEwNDY3YWQ1NDhmY2JjYjA0MTRl
YWFhYzYyM2EwNDNjY2NiMWE0OC4uYTQ5ZDBkODA3MGU0NGY5Yjc2Y2EzOTljYTMyYTFiNTVmM2E1
M2EyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE3
NTYsNiArMTc1NiwxNyBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyT2JqZWN0OjphZGp1c3RTdHls
ZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnbgogICAgIHJldHVybiBkaWZm
OwogfQogCitzdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICBBU1NFUlQoYS0+
Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7CisgICAgcmV0dXJuIGEtPmN1cnNvcnMoKSAmJiBi
LT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vyc29ycygpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICByZXR1cm4gYS0+Y3Vyc29yKCkgPT0gYi0+Y3Vyc29y
KCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwgYXJlTm9uSWRlbnRpY2FsQ3Vy
c29yTGlzdHNFcXVhbChhLCBiKSk7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBpZiAobV9zdHlsZSA9PSBzdHls
ZSkgewpAQCAtMTc5NCw2ICsxODA1LDEzIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIAogICAgIHN0eWxlRGlkQ2hhbmdlKGRpZmYs
IG9sZFN0eWxlLmdldCgpKTsKIAorICAgIGlmIChvbGRTdHlsZS5nZXQoKSAmJiAhYXJlQ3Vyc29y
c0VxdWFsKG9sZFN0eWxlLmdldCgpLCB0aGlzLT5zdHlsZSgpKSkgeworICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUoKSAmJiBu
b2RlKCktPmhvdmVyZWQoKSkKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PnVwZGF0ZUN1cnNvcigpOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gRklYTUU6IHx0aGlz
fCBtaWdodCBiZSBkZXN0cm95ZWQgaGVyZS4gVGhpcyBjYW4gY3VycmVudGx5IGhhcHBlbiBmb3Ig
YSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hlbgogICAgIC8vIGl0cyBmaXJzdC1sZXR0ZXIgYmxvY2sg
Z2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZS4gRm9y
IFJlbmRlclRleHRGcmFnbWVudChzKSwKICAgICAvLyB3ZSB3aWxsIHNhZmVseSBiYWlsIG91dCB3
aXRoIHRoZSBkb2VzTm90TmVlZExheW91dCBmbGFnLiBXZSBtaWdodCB3YW50IHRvIGJyb2FkZW4g
dGhpcyBjb25kaXRpb24KQEAgLTE5MDgsMTcgKzE5MjYsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6
c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
bmV3UwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgYXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNF
cXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0gICAg
QVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3JzKCkpOwotICAgIHJldHVybiBhLT5jdXJz
b3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJzb3JzKCkgPT0gKmItPmN1cnNvcnMoKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNvcnNFcXVhbChjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0gICAgcmV0dXJuIGEtPmN1cnNvcigpID09
IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0gYi0+Y3Vyc29ycygpIHx8IGFyZU5vbklk
ZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOwotfQotCiB2b2lkIFJlbmRlck9iamVjdDo6
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKIHsKICAgICBpZiAoc19hZmZlY3RzUGFyZW50QmxvY2spCkBAIC0xOTU0LDExICsx
OTYxLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIC8vIERvbid0IGNoZWNrIGZv
ciByZXBhaW50IGhlcmU7IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgbGF5ZXIgaGFzIGJlZW4K
ICAgICAvLyB1cGRhdGVkIGJ5IHN1YmNsYXNzZXMgYmVmb3JlIHdlIGtub3cgaWYgd2UgaGF2ZSB0
byByZXBhaW50IChpbiBzZXRTdHlsZSgpKS4KLQotICAgIGlmIChvbGRTdHlsZSAmJiAhYXJlQ3Vy
c29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewotICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZGlz
cGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAgfQogfQogCiB2b2lkIFJlbmRlck9i
amVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJvb2wgYmxvY2tDaGlsZHJl
bk9ubHkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZjA3MGQ1M2M5ZmE2NThhNzIxZGJmY2M5YTdhM2IwMjRiNzdmZmViMS4u
MGEwZWRlMWFhZDEzMmFkYzkwMTlkMmUxZmYzMGQxZWU4Y2M2MTdjOSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDEyLTEyLTAyICBBaXZvIFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAg
ICAgICAgVXBkYXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0
dGluZyBmYWtlIG1vdXNlbW92ZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAgIENoYW5naW5nIENTUyBjdXJzb3Igc2hv
dWxkIHdvcmsgbm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIG5vdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBm
b3IgY2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwgbW91c2Vkb3duLCBtb3VzZXVwIGFuZCBt
b3VzZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2UgYnV0dG9uIGJlaW5nIGhvbGQgZG93bi4gQWxz
byBhZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91c2Vtb3ZlCisgICAgICAgIGV2ZW50IGlz
IG5vdCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdoaWxlIG1vdXNlIGlzIG5vdCBtb3Zpbmcu
CisKKyAgICAgICAgKiBmYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWcuaHRtbDogQ2hhbmdlZCBleHBlY3Rh
dGlvbiB0byBtYXRjaCBjaGFuZ2UgaW4gaG92ZXIgaGFuZGxpbmcgd2hpbGUgbW91c2UgYnV0dG9u
IGlzIHByZXNzZWQgZG93bgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFu
Z2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJz
b3ItY2hhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNv
ci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50
cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTExLTMwICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTM2MTQyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jc3MvaG92ZXItYWN0aXZlLWRyYWctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3MvaG92ZXItYWN0aXZlLWRyYWctZXhwZWN0ZWQudHh0CmluZGV4IGI0NTExNjEzMzU2YTQ1ZGE2
ZWEyMjViM2M4YzhkN2Y4Mjk0YWVlYTYuLmJkYjFlM2VkOTE2ZjIxY2JmNjZhNDAwMjcxYjk3ZDg0
MDdmZDVmNWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL2hvdmVyLWFjdGl2ZS1k
cmFnLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9ob3Zlci1hY3RpdmUt
ZHJhZy1leHBlY3RlZC50eHQKQEAgLTcsNyArNyw3IEBAIFBBU1MgYmFja2dyb3VuZCBpcyAicmdi
KDAsIDAsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMjU1LCAyNTUsIDApIgogUEFTUyBi
YWNrZ3JvdW5kIGlzICJyZ2IoMCwgMCwgMCkiCiBQQVNTIGJhY2tncm91bmQgaXMgInJnYigwLCAy
NTUsIDApIgotUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMCwgMCkiCitQQVNTIGJhY2tncm91
bmQgaXMgInJnYigyNTUsIDAsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMjU1LCAw
KSIKIFBBU1MgYmFja2dyb3VuZCBpcyAicmdiKDAsIDAsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlz
ICJyZ2IoMCwgMCwgMCkiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9ob3Zlci1h
Y3RpdmUtZHJhZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWcu
aHRtbAppbmRleCBlMDc4MjdmNGMyODA3YzFjYWQzMzE2MjZmMjYzM2RhMTRiYjNlYWM4Li4yZjFj
NmMxOGIzY2UzZGM1OTViYjVjM2Q2OWMxZTJjYTdiMmVhYjkxIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL2hvdmVyLWFjdGl2ZS1kcmFnLmh0bWwKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAvLyBX
aXRoIHRoZSBtb3VzZSBzdGlsbCBkb3duLCBtb3ZlIGludG8gdGhlIHNlY29uZCBib3guCiAgICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oNTAsIDE1MCkKICAgICBzaG91bGRIYXZlQmFja2dyb3Vu
ZChib3gsICdyZ2IoMCwgMjU1LCAwKScpCi0gICAgc2hvdWxkSGF2ZUJhY2tncm91bmQoYm94Miwg
J3JnYigwLCAwLCAwKScpCisgICAgc2hvdWxkSGF2ZUJhY2tncm91bmQoYm94MiwgJ3JnYigyNTUs
IDAsIDApJykKIAogICAgIC8vIE1vdXNlIHN0aWxsIGRvd24sIG1vdmUgb3V0c2lkZSBvZiBib3Ro
IGJveGVzLgogICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDQwMCwgNTApCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ4YjdhYmVhNzJhNzEwMTZkYTE0MDM0OTkzNWU2MDFhOTNjMjk0M2QK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3It
Y2hhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBACitUZXN0IHRoYXQgbW91c2UgY3Vy
c29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZlbnRzLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworQnVnIDUzMzQxCisKKworTW91c2UgbW92ZQorQ3Vyc29yIElu
Zm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitNb3VzZSBkb3duCitDdXJzb3IgSW5mbzogdHlw
ZT1Qcm9ncmVzcyBob3RTcG90PTAsMAorCitNb3VzZSBob2xkIGRvd24sIG1vdmUKK0N1cnNvciBJ
bmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKworTW91c2UgdXAKK0N1cnNvciBJbmZvOiB0eXBl
PUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNl
LWN1cnNvci1jaGFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNv
ci1jaGFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDQxYmUxYmEwYjZkY2ZhNWU4M2ZiZjdkZDBhYjhl
YjViZjM1ODMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLWNoYW5nZS5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+PGEgaHJlZj0iaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMzQxIj5CdWcgNTMzNDE8L2E+PC9wPgor
PGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAgIDxkaXYgaWQ9InRhcmdldCIgb25Nb3VzZURv
d249InN0eWxlLmN1cnNvcj0ncHJvZ3Jlc3MnO2V2ZW50LnByZXZlbnREZWZhdWx0KCk7IiBvbk1v
dXNlTW92ZT0ic3R5bGUuY3Vyc29yPSdwb2ludGVyJzsiIG9uTW91c2VVcD0ic3R5bGUuY3Vyc29y
PSdoZWxwJzsiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiPlBsYXkgd2l0aCBtb3VzZSBvbiB0aGlz
IGVsZW1lbnQuIEN1cnNvcnMgY2hhbmdlIG9uIGV2ZW50cyAtIG1vdXNlbW92ZTogcG9pbnRlciho
YW5kKSwgbW91c2Vkb3duOiBwcm9ncmVzcywgbW91c2V1cDogaGVscC48L2Rpdj4KKzwvZGl2Pgor
PGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZl
bnRzLiIpOworCitpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHRlc3RGYWlsZWQoJ1Ro
aXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScpOworfQorCitpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit9CisKK2Z1
bmN0aW9uIHJ1blRlc3QocHJlcGFyZSwgbmV4dCkgeworICAgIHByZXBhcmUoKTsKKyAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5k
b3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0sIDApOworfQorCitmdW5jdGlvbiB0ZXN0
c0RvbmUoKSB7CisgICAgLy8gVGhpcyB0ZXh0IGlzIHJlZHVuZGFudCB3aXRoIHRoZSB0ZXN0IG91
dHB1dCAtIGhpZGUgaXQKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1jb250YWlu
ZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisv
LyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAo
d2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0YXJnZXQnKTsKKyAgICBldmVudFNlbmRlci5kcmFnTW9kZSA9IGZhbHNlOworICAg
IHZhciB0ZXN0cyA9IFsKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1Zygn
TW91c2UgbW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0
Lm9mZnNldExlZnQgKyAzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIGRvd24nKTsKKyAgICAgICAgICAgIGV2
ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGRlYnVnKCdNb3VzZSBob2xkIGRvd24sIG1vdmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMTMsIHRhcmdldC5vZmZzZXRUb3Ag
KyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2Ug
dXAnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAgICAgfQorICAg
IF07CisKKyAgICB2YXIgaSA9IDA7CisgICAgZnVuY3Rpb24gbmV4dFRlc3QoKSB7CisgICAgICAg
IGlmIChpIDwgdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICBydW5UZXN0KHRlc3RzW2krK10s
IG5leHRUZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RzRG9uZSgpOwor
ICAgICAgICB9CisgICAgfQorICAgIG5leHRUZXN0KCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
b3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE1ZDA2NDVlOWI3NjExM2Y3YzQxZWRhZDlmMjZjZmZlOTRmN2U2OTEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0IHRoYXQgdGhlcmUgaXMgbm8gbW91c2Vt
b3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworQnVnIDg1MzQzCisKKworVEVTVCBDQVNFOiBNb3VzZSBpZGxlLCBjaGFu
Z2UgY3Vyc29yIHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUgZXZlbnQKK0N1cnNvciBJbmZvOiB0
eXBlPVBvaW50ZXIgaG90U3BvdD0wLDAKK0N1cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0w
LDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3Vz
ZW1vdmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3Vz
ZW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDU5ODIxY2QzMzI2YWEyZDhlNDZlOGFmODcyMGE2ODkz
YmM2ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2Ut
Y3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+PGEgaHJlZj1odHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDM+QnVnIDg1MzQzPC9hPjwvcD4K
KzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQiIHN0eWxlPSJj
dXJzb3I6ZGVmYXVsdCI+TW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUg
bW91c2Vtb3ZlIGV2ZW50PC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNl
bW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4iKTsKKworaWYgKCF3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJl
bmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgd2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2Vm
dWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZGVi
dWcoJ1RFU1QgQ0FTRTogJyArIG5vZGUudGV4dENvbnRlbnQpOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlTW92ZVRvKG5vZGUub2Zmc2V0TGVmdCArIDMsIG5vZGUub2Zmc2V0VG9wICsgMyk7CisgICAg
ZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29y
SW5mbyhkb2N1bWVudCkpOworICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ01vdXNlbW92ZSBldmVudCBzaG91bGQg
bm90IGJlIGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yJyk7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgIH0pOworICAgIG5vZGUuc3R5bGUuY3Vyc29yID0gJ2hlbHAnOworICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRv
dy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVi
dWcoJycpOworICAgIH0sIDApOworCisgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBjaGFu
Z2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1vdmUgZXZlbnQgdGhhdCBjYXVzZWQgYnVnLCBpcyB1
c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgMTUwKTsKK30KKworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177160</attachid>
            <date>2012-12-02 16:12:44 -0800</date>
            <delta_ts>2012-12-02 23:01:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121203021009.patch</filename>
            <type>text/plain</type>
            <size>23013</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTU0YTNkZjM2YjJmYjJm
ODZlOGQzYWRkMGFkZTk4MGZjMDFhZmY0ZS4uOTljZTljOTUyMTk0ZDI4YTllMjQyZDRkZDU1Y2Yz
MzlmM2ExMWI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTEyLTAyICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBDdXJzb3IgY2hhbmdlIGlzIG5vdyBjYWxsZWQgb25seSB3
aGVuIHRoZSBub2RlIHRoYXQgaGFkIGl0cyBjdXJzb3IgY2hhbmdlcywgd2FzIGhvdmVyZWQuCisg
ICAgICAgIFRvIGFsbG93IHRoaXMgb3B0aW1pemF0aW9uLCB0aGVyZSB3YXMgYSBjaGFuZ2UgaW4g
aG92ZXIgaGFuZGxpbmcgaW50cm9kdWNlZC4gTm93IG5vdmVyIHN0YXRlCisgICAgICAgIGlzIHVw
ZGF0ZWQgZXZlbiB3aGVuIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGFuZCB0aGUgbm9kZSBob3Zl
cmVkIGlzIG5vdCB0aGUgb25lIHRoYXQgZ290CisgICAgICAgIGFjdGl2YXRlZCBvbiB0aGUgbW91
c2UgcHJlc3MuIFRoaXMgbmV3IGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggSUUgYW5kIEZp
cmVGb3guCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAg
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5v
IGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBidXR0b24gZG93bikKKworICAgICAgICBUZXN0czog
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0
L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3Rp
dmVTdGF0ZSk6IE1hZGUgaG92ZXIgc3RhdGUgdXBkYXRlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBi
cm93c2VycworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKTogTmV3bHkgYWRkZWQgbWV0aG9kIGZvciB1
cGRhdGluZyBtb3VzZSBjdXJzb3IKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcmVOb25JZGVudGljYWxDdXJzb3JMaXN0
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YXJlQ3Vyc29y
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisKIDIwMTItMTEt
MzAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzYxNDIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCA3NTY5Njc0NDE4MGVmZmFmZGRkZjk3MWZmYzkzNTIxZWYyMmFlYmVkLi5jNTUwYzJiNTA3
OTZkNDg5MThjZDU3M2I0ZmI3ZDM1MTE0NzkwMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTU3NDgsMTEgKzU3NDgsNiBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0
YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgIC8vIG5v
ZGVzIHNob3VsZCByZW1haW4gOmFjdGl2ZSB1bnRpbCB0aGUgbW91c2UgaXMgcmVsZWFzZWQuCiAg
ICAgYm9vbCBhbGxvd0FjdGl2ZUNoYW5nZXMgPSAhb2xkQWN0aXZlTm9kZSAmJiBhY3RpdmVOb2Rl
KCk7CiAKLSAgICAvLyBJZiB0aGUgbW91c2UgaXMgZG93biBhbmQgaWYgdGhpcyBpcyBhIG1vdXNl
IG1vdmUgZXZlbnQsIHdlIHdhbnQgdG8gcmVzdHJpY3QgY2hhbmdlcyBpbgotICAgIC8vIDpob3Zl
ci86YWN0aXZlIHRvIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIDphY3Rp
dmUgY2hhaW4gdGhhdCB3ZSBmcm96ZQotICAgIC8vIGF0IHRoZSB0aW1lIHRoZSBtb3VzZSB3ZW50
IGRvd24uCi0gICAgYm9vbCBtdXN0QmVJbkFjdGl2ZUNoYWluID0gcmVxdWVzdC5hY3RpdmUoKSAm
JiByZXF1ZXN0Lm1vdmUoKTsKLQogICAgIFJlZlB0cjxOb2RlPiBvbGRIb3Zlck5vZGUgPSBob3Zl
ck5vZGUoKTsKICAgICAvLyBDbGVhciB0aGUgOmhvdmVyIGNoYWluIHdoZW4gdGhlIHRvdWNoIGdl
c3R1cmUgaXMgb3Zlci4KICAgICBpZiAocmVxdWVzdC50b3VjaFJlbGVhc2UoKSkgewpAQCAtNTc4
OSwxNCArNTc4NCwxNCBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgIGlmIChvbGRIb3Zl
ck9iaiAhPSBuZXdIb3Zlck9iaikgewogICAgICAgICAvLyBUaGUgb2xkIGhvdmVyIHBhdGggb25s
eSBuZWVkcyB0byBiZSBjbGVhcmVkIHVwIHRvIChhbmQgbm90IGluY2x1ZGluZykgdGhlIGNvbW1v
biBhbmNlc3RvcjsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvbGRIb3Zlck9i
ajsgY3VyciAmJiBjdXJyICE9IGFuY2VzdG9yOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3Rvcigp
KSB7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQoKSAmJiAo
IW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgY3Vyci0+bm9kZSgpLT5pbkFjdGl2ZUNoYWluKCkpKQor
ICAgICAgICAgICAgaWYgKGN1cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpCiAgICAgICAg
ICAgICAgICAgbm9kZXNUb1JlbW92ZUZyb21DaGFpbi5hcHBlbmQoY3Vyci0+bm9kZSgpKTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdyBzZXQgdGhlIGhvdmVyIHN0YXRlIGZvciBvdXIg
bmV3IG9iamVjdCB1cCB0byB0aGUgcm9vdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IG5ld0hvdmVyT2JqOyBjdXJyOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3RvcigpKSB7Ci0gICAg
ICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpICYmICghbXVzdEJlSW5BY3Rp
dmVDaGFpbiB8fCBjdXJyLT5ub2RlKCktPmluQWN0aXZlQ2hhaW4oKSkpCisgICAgICAgIGlmIChj
dXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpKQogICAgICAgICAgICAgbm9kZXNUb0FkZFRv
Q2hhaW4uYXBwZW5kKGN1cnItPm5vZGUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggZGE3ZDIyMzhjMzQyYjZmZjM3NTQwOWZhODBhZWJjZmQwNzAyNDRj
My4uYTkxMzc5MjQyNjc1MzllYjNmNjE2ODdhNGIwZWZiMmI2OTVlYmEwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTQwOSw3ICsxNDA5LDM3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUqIG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBz
aGlmdEtleSkKICAgICByZXR1cm4gKChpc092ZXJMaW5rIHx8IGlzU3VibWl0SW1hZ2Uobm9kZSkp
ICYmICghZWRpdGFibGUgfHwgZWRpdGFibGVMaW5rRW5hYmxlZCkpOwogfQogCi1PcHRpb25hbEN1
cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJiBldmVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIEV2ZW50SGFuZGxl
cjo6dXBkYXRlQ3Vyc29yKCkKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5z
ZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmRldmljZVN1cHBvcnRz
TW91c2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+aXNPbnNjcmVlbigpIHx8ICFtX2Zy
YW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIHNoaWZ0S2V5OworICAgIGJvb2wgY3RybEtleTsKKyAgICBib29sIGFs
dEtleTsKKyAgICBib29sIG1ldGFLZXk7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRD
dXJyZW50TW9kaWZpZXJTdGF0ZShzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsK
KworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsK
KyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fY3VycmVu
dE1vdXNlUG9zaXRpb24pKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkt
PmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFs
Q3Vyc29yID0gc2VsZWN0Q3Vyc29yKHJlc3VsdCwgc2hpZnRLZXkpOworICAgIGlmIChvcHRpb25h
bEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29y
ID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1
cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCitPcHRpb25hbEN1cnNvciBFdmVudEhhbmRs
ZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2hpZnRL
ZXkpCiB7CiAgICAgaWYgKG1fcmVzaXplTGF5ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVN
b2RlKCkpCiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKQEAgLTE0MjAsOCArMTQ1MCwx
NiBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPm1fcGFuU2Nyb2xsSW5Qcm9ncmVzcykKICAgICAgICAgcmV0dXJuIE5v
Q3Vyc29yQ2hhbmdlOwogCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwor
ICAgIE5vZGUqIG5vZGUgPSByZXN1bHQudGFyZ2V0Tm9kZSgpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOworICAgIGJvb2wgb3JpZ2luYWxJc1RleHQgPSBu
b2RlLT5pc1RleHROb2RlKCk7CisgICAgaWYgKG5vZGUgJiYgb3JpZ2luYWxJc1RleHQpCisgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/IHJlbmRl
cmVyLT5zdHlsZSgpIDogMDsKICAgICBib29sIGhvcml6b250YWxUZXh0ID0gIXN0eWxlIHx8IHN0
eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGNvbnN0IEN1cnNvciYgaUJlYW0g
PSBob3Jpem9udGFsVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiB2ZXJ0aWNhbFRleHRDdXJzb3IoKTsK
QEAgLTE0MzcsNyArMTQ3NSw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0
Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBpZiAo
cmVuZGVyZXIpIHsKICAgICAgICAgQ3Vyc29yIG92ZXJyaWRlQ3Vyc29yOwotICAgICAgICBzd2l0
Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50KGV2ZW50LmxvY2FsUG9pbnQo
KSksIG92ZXJyaWRlQ3Vyc29yKSkgeworICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJz
b3Iocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpLCBvdmVycmlkZUN1cnNvcikp
IHsKICAgICAgICAgY2FzZSBTZXRDdXJzb3JCYXNlZE9uU3R5bGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTZXRDdXJzb3I6CkBAIC0xNDY4LDE5ICsxNTA2LDE5IEBAIE9wdGlv
bmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBzd2l0Y2ggKHN0eWxlID8gc3R5bGUtPmN1cnNvcigp
IDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRPOiB7Ci0gICAgICAgIGJvb2wg
ZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CisgICAgICAg
IGJvb2wgZWRpdGFibGUgPSAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOwogCi0gICAgICAg
IGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2ZW50LmlzT3ZlckxpbmsoKSwgZXZlbnQuZXZlbnQo
KS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYgKHVzZUhhbmRDdXJzb3Iobm9kZSwgcmVzdWx0LlVS
TEVsZW1lbnQoKSAmJiByZXN1bHQuVVJMRWxlbWVudCgpLT5pc0xpbmsoKSwgc2hpZnRLZXkpKQog
ICAgICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsKIAogICAgICAgICBib29sIGluUmVzaXpl
ciA9IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChSZW5k
ZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAg
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCi0gICAgICAgICAg
ICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXct
PndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXct
PndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChlZGl0YWJsZSB8fCAocmVu
ZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkp
KSAmJiAhaW5SZXNpemVyICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlmICgoZWRpdGFibGUgfHwg
KG9yaWdpbmFsSXNUZXh0ICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNp
emVyICYmICFyZXN1bHQuc2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICByZXR1cm4gaUJlYW07CiAg
ICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiAgICAgfQpAQCAtMTg5MSw3ICsxOTI5LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAgICAgICAgaWYgKHNjcm9sbGJhciAmJiAhbV9t
b3VzZVByZXNzZWQpCiAgICAgICAgICAgICBzY3JvbGxiYXItPm1vdXNlTW92ZWQobW91c2VFdmVu
dCk7IC8vIEhhbmRsZSBob3ZlciBlZmZlY3RzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdmlz
dWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBob3ZlcmluZy4KICAgICAgICAgaWYgKEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Ig
b3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LCBzY3JvbGxiYXIpOworICAgICAgICAg
ICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LmhpdFRl
c3RSZXN1bHQoKSwgbW91c2VFdmVudC5zaGlmdEtleSgpKTsKICAgICAgICAgICAgIGlmIChvcHRp
b25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50
TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5jdXJzb3IoKTsKICAgICAgICAgICAgICAgICB2
aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91c2VDdXJzb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKaW5kZXggYzE1ODk4YTAyNjQ5ZGVhYzFhOTFjOWM3YjBlM2UyOTdlODEyODM4OS4u
YjE5YWUxYTMxZDU1YTc1ZTUwZmU5MmI3ZWU1ZjBiZTgzNTI1ZjQ0NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCkBAIC0yNDIsNiArMjQyLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAg
ICBib29sIHVzZUhhbmRDdXJzb3IoTm9kZSosIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtl
eSk7CisgICAgdm9pZCB1cGRhdGVDdXJzb3IoKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQpAQCAtMjY4LDcgKzI2OSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29s
IGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmKTsKIAotICAgIE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiwgU2Nyb2xsYmFyKik7CisgICAgT3B0aW9uYWxDdXJzb3Igc2Vs
ZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBib29sIHNoaWZ0S2V5KTsKICNpZiBFTkFC
TEUoUEFOX1NDUk9MTElORykKICAgICB2b2lkIHVwZGF0ZVBhblNjcm9sbFN0YXRlKCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMTEwNDY3
YWQ1NDhmY2JjYjA0MTRlYWFhYzYyM2EwNDNjY2NiMWE0OC4uYTQ5ZDBkODA3MGU0NGY5Yjc2Y2Ez
OTljYTMyYTFiNTVmM2E1M2EyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKQEAgLTE3NTYsNiArMTc1NiwxNyBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyT2Jq
ZWN0OjphZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnbgog
ICAgIHJldHVybiBkaWZmOwogfQogCitzdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJzb3JM
aXN0c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sK
KyAgICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7CisgICAgcmV0dXJuIGEt
PmN1cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vyc29y
cygpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICByZXR1cm4gYS0+Y3Vyc29y
KCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwgYXJl
Tm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Cit9CisKIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBpZiAo
bV9zdHlsZSA9PSBzdHlsZSkgewpAQCAtMTc5NCw2ICsxODA1LDEzIEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIAogICAgIHN0eWxl
RGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlLmdldCgpKTsKIAorICAgIGlmIChvbGRTdHlsZS5nZXQo
KSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLmdldCgpLCB0aGlzLT5zdHlsZSgpKSkgewor
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAgICAg
aWYgKG5vZGUoKSAmJiBub2RlKCktPmhvdmVyZWQoKSkKKyAgICAgICAgICAgICAgICBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZUN1cnNvcigpOworICAgICAgICB9CisgICAgfQorCiAgICAg
Ly8gRklYTUU6IHx0aGlzfCBtaWdodCBiZSBkZXN0cm95ZWQgaGVyZS4gVGhpcyBjYW4gY3VycmVu
dGx5IGhhcHBlbiBmb3IgYSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hlbgogICAgIC8vIGl0cyBmaXJz
dC1sZXR0ZXIgYmxvY2sgZ2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVyVGV4dEZyYWdtZW50OjpzdHls
ZURpZENoYW5nZS4gRm9yIFJlbmRlclRleHRGcmFnbWVudChzKSwKICAgICAvLyB3ZSB3aWxsIHNh
ZmVseSBiYWlsIG91dCB3aXRoIHRoZSBkb2VzTm90TmVlZExheW91dCBmbGFnLiBXZSBtaWdodCB3
YW50IHRvIGJyb2FkZW4gdGhpcyBjb25kaXRpb24KQEAgLTE5MDgsMTcgKzE5MjYsNiBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogbmV3UwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgYXJlTm9uSWRlbnRp
Y2FsQ3Vyc29yTGlzdHNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpCi17Ci0gICAgQVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3JzKCkpOwotICAg
IHJldHVybiBhLT5jdXJzb3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJzb3JzKCkgPT0g
KmItPmN1cnNvcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNvcnNFcXVhbChj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0gICAgcmV0dXJu
IGEtPmN1cnNvcigpID09IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0gYi0+Y3Vyc29y
cygpIHx8IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOwotfQotCiB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBpZiAoc19hZmZlY3RzUGFyZW50QmxvY2sp
CkBAIC0xOTU0LDExICsxOTYxLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIC8v
IERvbid0IGNoZWNrIGZvciByZXBhaW50IGhlcmU7IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUg
bGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1cGRhdGVkIGJ5IHN1YmNsYXNzZXMgYmVmb3JlIHdlIGtu
b3cgaWYgd2UgaGF2ZSB0byByZXBhaW50IChpbiBzZXRTdHlsZSgpKS4KLQotICAgIGlmIChvbGRT
dHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewotICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAgfQogfQog
CiB2b2lkIFJlbmRlck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJv
b2wgYmxvY2tDaGlsZHJlbk9ubHkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjA3MGQ1M2M5ZmE2NThhNzIxZGJmY2M5YTdh
M2IwMjRiNzdmZmViMS4uMGEwZWRlMWFhZDEzMmFkYzkwMTlkMmUxZmYzMGQxZWU4Y2M2MTdjOSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTEyLTAyICBBaXZvIFBhYXMgIDxhaXZvcGFhc0Bn
bWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0eWxlIGNoYW5n
ZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAgIENoYW5naW5n
IENTUyBjdXJzb3Igc2hvdWxkIHdvcmsgbm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVz
c2VkIG9yIG5vdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTMzNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCB0ZXN0cyBmb3IgY2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwgbW91c2Vkb3du
LCBtb3VzZXVwIGFuZCBtb3VzZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2UgYnV0dG9uIGJlaW5n
IGhvbGQgZG93bi4gQWxzbyBhZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91c2Vtb3ZlCisg
ICAgICAgIGV2ZW50IGlzIG5vdCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdoaWxlIG1vdXNl
IGlzIG5vdCBtb3ZpbmcuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWcuaHRtbDog
Q2hhbmdlZCBleHBlY3RhdGlvbiB0byBtYXRjaCBjaGFuZ2UgaW4gaG92ZXIgaGFuZGxpbmcgd2hp
bGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93bgorICAgICAgICAqIGZhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZl
bnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWw6IEFkZGVkLgor
CiAyMDEyLTExLTMwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM2MTQyLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWctZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWctZXhwZWN0ZWQudHh0CmluZGV4IGI0
NTExNjEzMzU2YTQ1ZGE2ZWEyMjViM2M4YzhkN2Y4Mjk0YWVlYTYuLmJkYjFlM2VkOTE2ZjIxY2Jm
NjZhNDAwMjcxYjk3ZDg0MDdmZDVmNWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L2hvdmVyLWFjdGl2ZS1kcmFnLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9ob3Zlci1hY3RpdmUtZHJhZy1leHBlY3RlZC50eHQKQEAgLTcsNyArNyw3IEBAIFBBU1MgYmFj
a2dyb3VuZCBpcyAicmdiKDAsIDAsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMjU1LCAy
NTUsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMCwgMCkiCiBQQVNTIGJhY2tncm91
bmQgaXMgInJnYigwLCAyNTUsIDApIgotUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMCwgMCki
CitQQVNTIGJhY2tncm91bmQgaXMgInJnYigyNTUsIDAsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlz
ICJyZ2IoMCwgMjU1LCAwKSIKIFBBU1MgYmFja2dyb3VuZCBpcyAicmdiKDAsIDAsIDApIgogUEFT
UyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMCwgMCkiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92
ZXItYWN0aXZlLWRyYWcuaHRtbAppbmRleCBlMDc4MjdmNGMyODA3YzFjYWQzMzE2MjZmMjYzM2Rh
MTRiYjNlYWM4Li4yZjFjNmMxOGIzY2UzZGM1OTViYjVjM2Q2OWMxZTJjYTdiMmVhYjkxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY3NzL2hvdmVyLWFjdGl2ZS1kcmFnLmh0bWwKQEAgLTQ5LDcgKzQ5
LDcgQEAKICAgICAvLyBXaXRoIHRoZSBtb3VzZSBzdGlsbCBkb3duLCBtb3ZlIGludG8gdGhlIHNl
Y29uZCBib3guCiAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oNTAsIDE1MCkKICAgICBzaG91
bGRIYXZlQmFja2dyb3VuZChib3gsICdyZ2IoMCwgMjU1LCAwKScpCi0gICAgc2hvdWxkSGF2ZUJh
Y2tncm91bmQoYm94MiwgJ3JnYigwLCAwLCAwKScpCisgICAgc2hvdWxkSGF2ZUJhY2tncm91bmQo
Ym94MiwgJ3JnYigyNTUsIDAsIDApJykKIAogICAgIC8vIE1vdXNlIHN0aWxsIGRvd24sIG1vdmUg
b3V0c2lkZSBvZiBib3RoIGJveGVzLgogICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDQwMCwg
NTApCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hh
bmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1j
aGFuZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4YjdhYmVhNzJhNzEwMTZkYTE0MDM0OTkz
NWU2MDFhOTNjMjk0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBACitUZXN0
IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZlbnRz
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDUzMzQxCisKKworTW91c2Ug
bW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitNb3VzZSBkb3duCitD
dXJzb3IgSW5mbzogdHlwZT1Qcm9ncmVzcyBob3RTcG90PTAsMAorCitNb3VzZSBob2xkIGRvd24s
IG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKworTW91c2UgdXAKK0N1
cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDQxYmUxYmEwYjZkY2Zh
NWU4M2ZiZjdkZDBhYjhlYjViZjM1ODMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+PGEg
aHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMzQxIj5CdWcg
NTMzNDE8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAgIDxkaXYgaWQ9InRh
cmdldCIgb25Nb3VzZURvd249InN0eWxlLmN1cnNvcj0ncHJvZ3Jlc3MnO2V2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7IiBvbk1vdXNlTW92ZT0ic3R5bGUuY3Vyc29yPSdwb2ludGVyJzsiIG9uTW91c2VV
cD0ic3R5bGUuY3Vyc29yPSdoZWxwJzsiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiPlBsYXkgd2l0
aCBtb3VzZSBvbiB0aGlzIGVsZW1lbnQuIEN1cnNvcnMgY2hhbmdlIG9uIGV2ZW50cyAtIG1vdXNl
bW92ZTogcG9pbnRlcihoYW5kKSwgbW91c2Vkb3duOiBwcm9ncmVzcywgbW91c2V1cDogaGVscC48
L2Rpdj4KKzwvZGl2PgorPGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0
bHkgb24gbW91c2UgZXZlbnRzLiIpOworCitpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
IHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScpOworfQorCitp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QocHJlcGFyZSwgbmV4dCkgeworICAgIHByZXBh
cmUoKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29y
IEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50
KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0sIDApOworfQor
CitmdW5jdGlvbiB0ZXN0c0RvbmUoKSB7CisgICAgLy8gVGhpcyB0ZXh0IGlzIHJlZHVuZGFudCB3
aXRoIHRoZSB0ZXN0IG91dHB1dCAtIGhpZGUgaXQKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGVzdC1jb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIGZpbmlzaEpT
VGVzdCgpOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2
ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIHRhcmdldCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICBldmVudFNlbmRlci5kcmFnTW9k
ZSA9IGZhbHNlOworICAgIHZhciB0ZXN0cyA9IFsKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBkZWJ1ZygnTW91c2UgbW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7Cisg
ICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIGRvd24nKTsK
KyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICB9LCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBob2xkIGRvd24sIG1vdmUnKTsKKyAgICAg
ICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMTMsIHRh
cmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBkZWJ1ZygnTW91c2UgdXAnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsK
KyAgICAgICAgfQorICAgIF07CisKKyAgICB2YXIgaSA9IDA7CisgICAgZnVuY3Rpb24gbmV4dFRl
c3QoKSB7CisgICAgICAgIGlmIChpIDwgdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICBydW5U
ZXN0KHRlc3RzW2krK10sIG5leHRUZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRlc3RzRG9uZSgpOworICAgICAgICB9CisgICAgfQorICAgIG5leHRUZXN0KCk7Cit9CisKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE1ZDA2NDVlOWI3NjExM2Y3YzQxZWRhZDlmMjZjZmZlOTRmN2U2OTEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3It
bm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0IHRoYXQgdGhl
cmUgaXMgbm8gbW91c2Vtb3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDg1MzQzCisKKworVEVTVCBDQVNFOiBN
b3VzZSBpZGxlLCBjaGFuZ2UgY3Vyc29yIHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUgZXZlbnQK
K0N1cnNvciBJbmZvOiB0eXBlPVBvaW50ZXIgaG90U3BvdD0wLDAKK0N1cnNvciBJbmZvOiB0eXBl
PUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNl
LWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNl
LWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDU5ODIxY2QzMzI2YWEyZDhl
NDZlOGFmODcyMGE2ODkzYmM2ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCkBAIC0wLDAgKzEsNTUgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4K
Kzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+
PGEgaHJlZj1odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDM+QnVn
IDg1MzQzPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0
YXJnZXQiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+TW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBz
aG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50PC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IHRo
ZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4iKTsK
KworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3Qg
cmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7
CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCisvLyBDYW4ndCBk
byBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93LmV2
ZW50U2VuZGVyKSB7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFy
Z2V0Jyk7CisgICAgZGVidWcoJ1RFU1QgQ0FTRTogJyArIG5vZGUudGV4dENvbnRlbnQpOworICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKG5vZGUub2Zmc2V0TGVmdCArIDMsIG5vZGUub2Zmc2V0
VG9wICsgMyk7CisgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5n
ZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5l
cignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ01vdXNlbW92
ZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yJyk7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworICAgIG5vZGUuc3R5bGUuY3Vyc29yID0gJ2hl
bHAnOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJzb3Ig
SW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQp
KTsKKyAgICAgICAgZGVidWcoJycpOworICAgIH0sIDApOworCisgICAgLy8gR2l2ZSBzb21lIHRp
bWUgZm9yIHRoZSBjaGFuZ2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1vdmUgZXZlbnQgdGhhdCBj
YXVzZWQgYnVnLCBpcyB1c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUu
ZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgMTUwKTsK
K30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177187</attachid>
            <date>2012-12-02 23:01:46 -0800</date>
            <delta_ts>2013-01-13 08:27:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20121203085910.patch</filename>
            <type>text/plain</type>
            <size>23692</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTU0YTNkZjM2YjJmYjJm
ODZlOGQzYWRkMGFkZTk4MGZjMDFhZmY0ZS4uOTljZTljOTUyMTk0ZDI4YTllMjQyZDRkZDU1Y2Yz
MzlmM2ExMWI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTEyLTAyICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBDdXJzb3IgY2hhbmdlIGlzIG5vdyBjYWxsZWQgb25seSB3
aGVuIHRoZSBub2RlIHRoYXQgaGFkIGl0cyBjdXJzb3IgY2hhbmdlcywgd2FzIGhvdmVyZWQuCisg
ICAgICAgIFRvIGFsbG93IHRoaXMgb3B0aW1pemF0aW9uLCB0aGVyZSB3YXMgYSBjaGFuZ2UgaW4g
aG92ZXIgaGFuZGxpbmcgaW50cm9kdWNlZC4gTm93IG5vdmVyIHN0YXRlCisgICAgICAgIGlzIHVw
ZGF0ZWQgZXZlbiB3aGVuIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGFuZCB0aGUgbm9kZSBob3Zl
cmVkIGlzIG5vdCB0aGUgb25lIHRoYXQgZ290CisgICAgICAgIGFjdGl2YXRlZCBvbiB0aGUgbW91
c2UgcHJlc3MuIFRoaXMgbmV3IGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggSUUgYW5kIEZp
cmVGb3guCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAg
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5v
IGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBidXR0b24gZG93bikKKworICAgICAgICBUZXN0czog
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0
L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3Rp
dmVTdGF0ZSk6IE1hZGUgaG92ZXIgc3RhdGUgdXBkYXRlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBi
cm93c2VycworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKTogTmV3bHkgYWRkZWQgbWV0aG9kIGZvciB1
cGRhdGluZyBtb3VzZSBjdXJzb3IKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcmVOb25JZGVudGljYWxDdXJzb3JMaXN0
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YXJlQ3Vyc29y
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisKIDIwMTItMTEt
MzAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzYxNDIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCA3NTY5Njc0NDE4MGVmZmFmZGRkZjk3MWZmYzkzNTIxZWYyMmFlYmVkLi5jNTUwYzJiNTA3
OTZkNDg5MThjZDU3M2I0ZmI3ZDM1MTE0NzkwMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTU3NDgsMTEgKzU3NDgsNiBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0
YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgIC8vIG5v
ZGVzIHNob3VsZCByZW1haW4gOmFjdGl2ZSB1bnRpbCB0aGUgbW91c2UgaXMgcmVsZWFzZWQuCiAg
ICAgYm9vbCBhbGxvd0FjdGl2ZUNoYW5nZXMgPSAhb2xkQWN0aXZlTm9kZSAmJiBhY3RpdmVOb2Rl
KCk7CiAKLSAgICAvLyBJZiB0aGUgbW91c2UgaXMgZG93biBhbmQgaWYgdGhpcyBpcyBhIG1vdXNl
IG1vdmUgZXZlbnQsIHdlIHdhbnQgdG8gcmVzdHJpY3QgY2hhbmdlcyBpbgotICAgIC8vIDpob3Zl
ci86YWN0aXZlIHRvIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIDphY3Rp
dmUgY2hhaW4gdGhhdCB3ZSBmcm96ZQotICAgIC8vIGF0IHRoZSB0aW1lIHRoZSBtb3VzZSB3ZW50
IGRvd24uCi0gICAgYm9vbCBtdXN0QmVJbkFjdGl2ZUNoYWluID0gcmVxdWVzdC5hY3RpdmUoKSAm
JiByZXF1ZXN0Lm1vdmUoKTsKLQogICAgIFJlZlB0cjxOb2RlPiBvbGRIb3Zlck5vZGUgPSBob3Zl
ck5vZGUoKTsKICAgICAvLyBDbGVhciB0aGUgOmhvdmVyIGNoYWluIHdoZW4gdGhlIHRvdWNoIGdl
c3R1cmUgaXMgb3Zlci4KICAgICBpZiAocmVxdWVzdC50b3VjaFJlbGVhc2UoKSkgewpAQCAtNTc4
OSwxNCArNTc4NCwxNCBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgIGlmIChvbGRIb3Zl
ck9iaiAhPSBuZXdIb3Zlck9iaikgewogICAgICAgICAvLyBUaGUgb2xkIGhvdmVyIHBhdGggb25s
eSBuZWVkcyB0byBiZSBjbGVhcmVkIHVwIHRvIChhbmQgbm90IGluY2x1ZGluZykgdGhlIGNvbW1v
biBhbmNlc3RvcjsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvbGRIb3Zlck9i
ajsgY3VyciAmJiBjdXJyICE9IGFuY2VzdG9yOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3Rvcigp
KSB7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQoKSAmJiAo
IW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgY3Vyci0+bm9kZSgpLT5pbkFjdGl2ZUNoYWluKCkpKQor
ICAgICAgICAgICAgaWYgKGN1cnItPm5vZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpCiAgICAgICAg
ICAgICAgICAgbm9kZXNUb1JlbW92ZUZyb21DaGFpbi5hcHBlbmQoY3Vyci0+bm9kZSgpKTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdyBzZXQgdGhlIGhvdmVyIHN0YXRlIGZvciBvdXIg
bmV3IG9iamVjdCB1cCB0byB0aGUgcm9vdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IG5ld0hvdmVyT2JqOyBjdXJyOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3RvcigpKSB7Ci0gICAg
ICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpICYmICghbXVzdEJlSW5BY3Rp
dmVDaGFpbiB8fCBjdXJyLT5ub2RlKCktPmluQWN0aXZlQ2hhaW4oKSkpCisgICAgICAgIGlmIChj
dXJyLT5ub2RlKCkgJiYgIWN1cnItPmlzVGV4dCgpKQogICAgICAgICAgICAgbm9kZXNUb0FkZFRv
Q2hhaW4uYXBwZW5kKGN1cnItPm5vZGUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggZGE3ZDIyMzhjMzQyYjZmZjM3NTQwOWZhODBhZWJjZmQwNzAyNDRj
My4uYTkxMzc5MjQyNjc1MzllYjNmNjE2ODdhNGIwZWZiMmI2OTVlYmEwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTQwOSw3ICsxNDA5LDM3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUqIG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBz
aGlmdEtleSkKICAgICByZXR1cm4gKChpc092ZXJMaW5rIHx8IGlzU3VibWl0SW1hZ2Uobm9kZSkp
ICYmICghZWRpdGFibGUgfHwgZWRpdGFibGVMaW5rRW5hYmxlZCkpOwogfQogCi1PcHRpb25hbEN1
cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJiBldmVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIEV2ZW50SGFuZGxl
cjo6dXBkYXRlQ3Vyc29yKCkKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5z
ZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmRldmljZVN1cHBvcnRz
TW91c2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+aXNPbnNjcmVlbigpIHx8ICFtX2Zy
YW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIHNoaWZ0S2V5OworICAgIGJvb2wgY3RybEtleTsKKyAgICBib29sIGFs
dEtleTsKKyAgICBib29sIG1ldGFLZXk7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRD
dXJyZW50TW9kaWZpZXJTdGF0ZShzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsK
KworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsK
KyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fY3VycmVu
dE1vdXNlUG9zaXRpb24pKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkt
PmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFs
Q3Vyc29yID0gc2VsZWN0Q3Vyc29yKHJlc3VsdCwgc2hpZnRLZXkpOworICAgIGlmIChvcHRpb25h
bEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29y
ID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1
cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCitPcHRpb25hbEN1cnNvciBFdmVudEhhbmRs
ZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2hpZnRL
ZXkpCiB7CiAgICAgaWYgKG1fcmVzaXplTGF5ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVN
b2RlKCkpCiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKQEAgLTE0MjAsOCArMTQ1MCwx
NiBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPm1fcGFuU2Nyb2xsSW5Qcm9ncmVzcykKICAgICAgICAgcmV0dXJuIE5v
Q3Vyc29yQ2hhbmdlOwogCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwor
ICAgIE5vZGUqIG5vZGUgPSByZXN1bHQudGFyZ2V0Tm9kZSgpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOworICAgIGJvb2wgb3JpZ2luYWxJc1RleHQgPSBu
b2RlLT5pc1RleHROb2RlKCk7CisgICAgaWYgKG5vZGUgJiYgb3JpZ2luYWxJc1RleHQpCisgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/IHJlbmRl
cmVyLT5zdHlsZSgpIDogMDsKICAgICBib29sIGhvcml6b250YWxUZXh0ID0gIXN0eWxlIHx8IHN0
eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGNvbnN0IEN1cnNvciYgaUJlYW0g
PSBob3Jpem9udGFsVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiB2ZXJ0aWNhbFRleHRDdXJzb3IoKTsK
QEAgLTE0MzcsNyArMTQ3NSw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0
Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBpZiAo
cmVuZGVyZXIpIHsKICAgICAgICAgQ3Vyc29yIG92ZXJyaWRlQ3Vyc29yOwotICAgICAgICBzd2l0
Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50KGV2ZW50LmxvY2FsUG9pbnQo
KSksIG92ZXJyaWRlQ3Vyc29yKSkgeworICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJz
b3Iocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpLCBvdmVycmlkZUN1cnNvcikp
IHsKICAgICAgICAgY2FzZSBTZXRDdXJzb3JCYXNlZE9uU3R5bGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTZXRDdXJzb3I6CkBAIC0xNDY4LDE5ICsxNTA2LDE5IEBAIE9wdGlv
bmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBzd2l0Y2ggKHN0eWxlID8gc3R5bGUtPmN1cnNvcigp
IDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRPOiB7Ci0gICAgICAgIGJvb2wg
ZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CisgICAgICAg
IGJvb2wgZWRpdGFibGUgPSAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOwogCi0gICAgICAg
IGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2ZW50LmlzT3ZlckxpbmsoKSwgZXZlbnQuZXZlbnQo
KS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYgKHVzZUhhbmRDdXJzb3Iobm9kZSwgcmVzdWx0LlVS
TEVsZW1lbnQoKSAmJiByZXN1bHQuVVJMRWxlbWVudCgpLT5pc0xpbmsoKSwgc2hpZnRLZXkpKQog
ICAgICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsKIAogICAgICAgICBib29sIGluUmVzaXpl
ciA9IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChSZW5k
ZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAg
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCi0gICAgICAgICAg
ICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXct
PndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXct
PndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChlZGl0YWJsZSB8fCAocmVu
ZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkp
KSAmJiAhaW5SZXNpemVyICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlmICgoZWRpdGFibGUgfHwg
KG9yaWdpbmFsSXNUZXh0ICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNp
emVyICYmICFyZXN1bHQuc2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICByZXR1cm4gaUJlYW07CiAg
ICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiAgICAgfQpAQCAtMTg5MSw3ICsxOTI5LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAgICAgICAgaWYgKHNjcm9sbGJhciAmJiAhbV9t
b3VzZVByZXNzZWQpCiAgICAgICAgICAgICBzY3JvbGxiYXItPm1vdXNlTW92ZWQobW91c2VFdmVu
dCk7IC8vIEhhbmRsZSBob3ZlciBlZmZlY3RzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdmlz
dWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBob3ZlcmluZy4KICAgICAgICAgaWYgKEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Ig
b3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LCBzY3JvbGxiYXIpOworICAgICAgICAg
ICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LmhpdFRl
c3RSZXN1bHQoKSwgbW91c2VFdmVudC5zaGlmdEtleSgpKTsKICAgICAgICAgICAgIGlmIChvcHRp
b25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50
TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5jdXJzb3IoKTsKICAgICAgICAgICAgICAgICB2
aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91c2VDdXJzb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKaW5kZXggYzE1ODk4YTAyNjQ5ZGVhYzFhOTFjOWM3YjBlM2UyOTdlODEyODM4OS4u
YjE5YWUxYTMxZDU1YTc1ZTUwZmU5MmI3ZWU1ZjBiZTgzNTI1ZjQ0NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCkBAIC0yNDIsNiArMjQyLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAg
ICBib29sIHVzZUhhbmRDdXJzb3IoTm9kZSosIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtl
eSk7CisgICAgdm9pZCB1cGRhdGVDdXJzb3IoKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQpAQCAtMjY4LDcgKzI2OSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29s
IGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmKTsKIAotICAgIE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiwgU2Nyb2xsYmFyKik7CisgICAgT3B0aW9uYWxDdXJzb3Igc2Vs
ZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBib29sIHNoaWZ0S2V5KTsKICNpZiBFTkFC
TEUoUEFOX1NDUk9MTElORykKICAgICB2b2lkIHVwZGF0ZVBhblNjcm9sbFN0YXRlKCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMTEwNDY3
YWQ1NDhmY2JjYjA0MTRlYWFhYzYyM2EwNDNjY2NiMWE0OC4uYTQ5ZDBkODA3MGU0NGY5Yjc2Y2Ez
OTljYTMyYTFiNTVmM2E1M2EyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKQEAgLTE3NTYsNiArMTc1NiwxNyBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyT2Jq
ZWN0OjphZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnbgog
ICAgIHJldHVybiBkaWZmOwogfQogCitzdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJzb3JM
aXN0c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sK
KyAgICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7CisgICAgcmV0dXJuIGEt
PmN1cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vyc29y
cygpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICByZXR1cm4gYS0+Y3Vyc29y
KCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwgYXJl
Tm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Cit9CisKIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBpZiAo
bV9zdHlsZSA9PSBzdHlsZSkgewpAQCAtMTc5NCw2ICsxODA1LDEzIEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIAogICAgIHN0eWxl
RGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlLmdldCgpKTsKIAorICAgIGlmIChvbGRTdHlsZS5nZXQo
KSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLmdldCgpLCB0aGlzLT5zdHlsZSgpKSkgewor
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAgICAg
aWYgKG5vZGUoKSAmJiBub2RlKCktPmhvdmVyZWQoKSkKKyAgICAgICAgICAgICAgICBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZUN1cnNvcigpOworICAgICAgICB9CisgICAgfQorCiAgICAg
Ly8gRklYTUU6IHx0aGlzfCBtaWdodCBiZSBkZXN0cm95ZWQgaGVyZS4gVGhpcyBjYW4gY3VycmVu
dGx5IGhhcHBlbiBmb3IgYSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hlbgogICAgIC8vIGl0cyBmaXJz
dC1sZXR0ZXIgYmxvY2sgZ2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVyVGV4dEZyYWdtZW50OjpzdHls
ZURpZENoYW5nZS4gRm9yIFJlbmRlclRleHRGcmFnbWVudChzKSwKICAgICAvLyB3ZSB3aWxsIHNh
ZmVseSBiYWlsIG91dCB3aXRoIHRoZSBkb2VzTm90TmVlZExheW91dCBmbGFnLiBXZSBtaWdodCB3
YW50IHRvIGJyb2FkZW4gdGhpcyBjb25kaXRpb24KQEAgLTE5MDgsMTcgKzE5MjYsNiBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogbmV3UwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgYXJlTm9uSWRlbnRp
Y2FsQ3Vyc29yTGlzdHNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpCi17Ci0gICAgQVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3JzKCkpOwotICAg
IHJldHVybiBhLT5jdXJzb3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJzb3JzKCkgPT0g
KmItPmN1cnNvcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNvcnNFcXVhbChj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0gICAgcmV0dXJu
IGEtPmN1cnNvcigpID09IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0gYi0+Y3Vyc29y
cygpIHx8IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOwotfQotCiB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBpZiAoc19hZmZlY3RzUGFyZW50QmxvY2sp
CkBAIC0xOTU0LDExICsxOTYxLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIC8v
IERvbid0IGNoZWNrIGZvciByZXBhaW50IGhlcmU7IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUg
bGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1cGRhdGVkIGJ5IHN1YmNsYXNzZXMgYmVmb3JlIHdlIGtu
b3cgaWYgd2UgaGF2ZSB0byByZXBhaW50IChpbiBzZXRTdHlsZSgpKS4KLQotICAgIGlmIChvbGRT
dHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewotICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAgfQogfQog
CiB2b2lkIFJlbmRlck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJv
b2wgYmxvY2tDaGlsZHJlbk9ubHkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjA3MGQ1M2M5ZmE2NThhNzIxZGJmY2M5YTdh
M2IwMjRiNzdmZmViMS4uMGEwZWRlMWFhZDEzMmFkYzkwMTlkMmUxZmYzMGQxZWU4Y2M2MTdjOSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTEyLTAyICBBaXZvIFBhYXMgIDxhaXZvcGFhc0Bn
bWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0eWxlIGNoYW5n
ZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAgIENoYW5naW5n
IENTUyBjdXJzb3Igc2hvdWxkIHdvcmsgbm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVz
c2VkIG9yIG5vdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTMzNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCB0ZXN0cyBmb3IgY2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwgbW91c2Vkb3du
LCBtb3VzZXVwIGFuZCBtb3VzZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2UgYnV0dG9uIGJlaW5n
IGhvbGQgZG93bi4gQWxzbyBhZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91c2Vtb3ZlCisg
ICAgICAgIGV2ZW50IGlzIG5vdCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdoaWxlIG1vdXNl
IGlzIG5vdCBtb3ZpbmcuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWcuaHRtbDog
Q2hhbmdlZCBleHBlY3RhdGlvbiB0byBtYXRjaCBjaGFuZ2UgaW4gaG92ZXIgaGFuZGxpbmcgd2hp
bGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93bgorICAgICAgICAqIGZhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZl
bnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWw6IEFkZGVkLgor
CiAyMDEyLTExLTMwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM2MTQyLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWctZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWctZXhwZWN0ZWQudHh0CmluZGV4IGI0
NTExNjEzMzU2YTQ1ZGE2ZWEyMjViM2M4YzhkN2Y4Mjk0YWVlYTYuLmJkYjFlM2VkOTE2ZjIxY2Jm
NjZhNDAwMjcxYjk3ZDg0MDdmZDVmNWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L2hvdmVyLWFjdGl2ZS1kcmFnLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9ob3Zlci1hY3RpdmUtZHJhZy1leHBlY3RlZC50eHQKQEAgLTcsNyArNyw3IEBAIFBBU1MgYmFj
a2dyb3VuZCBpcyAicmdiKDAsIDAsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMjU1LCAy
NTUsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMCwgMCkiCiBQQVNTIGJhY2tncm91
bmQgaXMgInJnYigwLCAyNTUsIDApIgotUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMCwgMCki
CitQQVNTIGJhY2tncm91bmQgaXMgInJnYigyNTUsIDAsIDApIgogUEFTUyBiYWNrZ3JvdW5kIGlz
ICJyZ2IoMCwgMjU1LCAwKSIKIFBBU1MgYmFja2dyb3VuZCBpcyAicmdiKDAsIDAsIDApIgogUEFT
UyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMCwgMCkiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92
ZXItYWN0aXZlLWRyYWcuaHRtbAppbmRleCBlMDc4MjdmNGMyODA3YzFjYWQzMzE2MjZmMjYzM2Rh
MTRiYjNlYWM4Li4yZjFjNmMxOGIzY2UzZGM1OTViYjVjM2Q2OWMxZTJjYTdiMmVhYjkxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY3NzL2hvdmVyLWFjdGl2ZS1kcmFnLmh0bWwKQEAgLTQ5LDcgKzQ5
LDcgQEAKICAgICAvLyBXaXRoIHRoZSBtb3VzZSBzdGlsbCBkb3duLCBtb3ZlIGludG8gdGhlIHNl
Y29uZCBib3guCiAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oNTAsIDE1MCkKICAgICBzaG91
bGRIYXZlQmFja2dyb3VuZChib3gsICdyZ2IoMCwgMjU1LCAwKScpCi0gICAgc2hvdWxkSGF2ZUJh
Y2tncm91bmQoYm94MiwgJ3JnYigwLCAwLCAwKScpCisgICAgc2hvdWxkSGF2ZUJhY2tncm91bmQo
Ym94MiwgJ3JnYigyNTUsIDAsIDApJykKIAogICAgIC8vIE1vdXNlIHN0aWxsIGRvd24sIG1vdmUg
b3V0c2lkZSBvZiBib3RoIGJveGVzLgogICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDQwMCwg
NTApCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hh
bmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1j
aGFuZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4YjdhYmVhNzJhNzEwMTZkYTE0MDM0OTkz
NWU2MDFhOTNjMjk0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBACitUZXN0
IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZlbnRz
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDUzMzQxCisKKworTW91c2Ug
bW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitNb3VzZSBkb3duCitD
dXJzb3IgSW5mbzogdHlwZT1Qcm9ncmVzcyBob3RTcG90PTAsMAorCitNb3VzZSBob2xkIGRvd24s
IG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKworTW91c2UgdXAKK0N1
cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDQxYmUxYmEwYjZkY2Zh
NWU4M2ZiZjdkZDBhYjhlYjViZjM1ODMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+PGEg
aHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMzQxIj5CdWcg
NTMzNDE8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAgIDxkaXYgaWQ9InRh
cmdldCIgb25Nb3VzZURvd249InN0eWxlLmN1cnNvcj0ncHJvZ3Jlc3MnO2V2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7IiBvbk1vdXNlTW92ZT0ic3R5bGUuY3Vyc29yPSdwb2ludGVyJzsiIG9uTW91c2VV
cD0ic3R5bGUuY3Vyc29yPSdoZWxwJzsiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiPlBsYXkgd2l0
aCBtb3VzZSBvbiB0aGlzIGVsZW1lbnQuIEN1cnNvcnMgY2hhbmdlIG9uIGV2ZW50cyAtIG1vdXNl
bW92ZTogcG9pbnRlcihoYW5kKSwgbW91c2Vkb3duOiBwcm9ncmVzcywgbW91c2V1cDogaGVscC48
L2Rpdj4KKzwvZGl2PgorPGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0
bHkgb24gbW91c2UgZXZlbnRzLiIpOworCitpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
IHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScpOworfQorCitp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QocHJlcGFyZSwgbmV4dCkgeworICAgIHByZXBh
cmUoKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29y
IEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50
KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0sIDApOworfQor
CitmdW5jdGlvbiB0ZXN0c0RvbmUoKSB7CisgICAgLy8gVGhpcyB0ZXh0IGlzIHJlZHVuZGFudCB3
aXRoIHRoZSB0ZXN0IG91dHB1dCAtIGhpZGUgaXQKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGVzdC1jb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIGZpbmlzaEpT
VGVzdCgpOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2
ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIHRhcmdldCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICBldmVudFNlbmRlci5kcmFnTW9k
ZSA9IGZhbHNlOworICAgIHZhciB0ZXN0cyA9IFsKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBkZWJ1ZygnTW91c2UgbW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7Cisg
ICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIGRvd24nKTsK
KyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICB9LCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBob2xkIGRvd24sIG1vdmUnKTsKKyAgICAg
ICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMTMsIHRh
cmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBkZWJ1ZygnTW91c2UgdXAnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsK
KyAgICAgICAgfQorICAgIF07CisKKyAgICB2YXIgaSA9IDA7CisgICAgZnVuY3Rpb24gbmV4dFRl
c3QoKSB7CisgICAgICAgIGlmIChpIDwgdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICBydW5U
ZXN0KHRlc3RzW2krK10sIG5leHRUZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRlc3RzRG9uZSgpOworICAgICAgICB9CisgICAgfQorICAgIG5leHRUZXN0KCk7Cit9CisKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE1ZDA2NDVlOWI3NjExM2Y3YzQxZWRhZDlmMjZjZmZlOTRmN2U2OTEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3It
bm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0IHRoYXQgdGhl
cmUgaXMgbm8gbW91c2Vtb3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDg1MzQzCisKKworVEVTVCBDQVNFOiBN
b3VzZSBpZGxlLCBjaGFuZ2UgY3Vyc29yIHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUgZXZlbnQK
K0N1cnNvciBJbmZvOiB0eXBlPVBvaW50ZXIgaG90U3BvdD0wLDAKK0N1cnNvciBJbmZvOiB0eXBl
PUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNl
LWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNl
LWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDU5ODIxY2QzMzI2YWEyZDhl
NDZlOGFmODcyMGE2ODkzYmM2ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCkBAIC0wLDAgKzEsNTUgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4K
Kzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+
PGEgaHJlZj1odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDM+QnVn
IDg1MzQzPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0
YXJnZXQiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+TW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBz
aG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50PC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IHRo
ZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4iKTsK
KworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3Qg
cmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7
CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCisvLyBDYW4ndCBk
byBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93LmV2
ZW50U2VuZGVyKSB7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFy
Z2V0Jyk7CisgICAgZGVidWcoJ1RFU1QgQ0FTRTogJyArIG5vZGUudGV4dENvbnRlbnQpOworICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKG5vZGUub2Zmc2V0TGVmdCArIDMsIG5vZGUub2Zmc2V0
VG9wICsgMyk7CisgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5n
ZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5l
cignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ01vdXNlbW92
ZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yJyk7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworICAgIG5vZGUuc3R5bGUuY3Vyc29yID0gJ2hl
bHAnOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJzb3Ig
SW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQp
KTsKKyAgICAgICAgZGVidWcoJycpOworICAgIH0sIDApOworCisgICAgLy8gR2l2ZSBzb21lIHRp
bWUgZm9yIHRoZSBjaGFuZ2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1vdmUgZXZlbnQgdGhhdCBj
YXVzZWQgYnVnLCBpcyB1c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUu
ZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgMTUwKTsK
K30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggY2JiZGQzYmVlMTczZGMxYTdkZDk5ODM0
ZThlZGU0Yjc2Y2ZhMjY3MC4uOTAyYzY4Mzk1NmMzMTVmOWVkNjE5NWQ3MDk3MTlhOTNlYWFjODg2
MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTExOTks
MyArMTE5OSw2IEBAIHdlYmtpdC5vcmcvYi82NzQzNCBbIERlYnVnIF0gZmFzdC9ibG9jay9mbG9h
dC9vdmVyaGFuZ2luZy10YWxsLWJsb2NrLmh0bWwgWyBTa2lwCiAKICMgTW91bnRhaW4gTGlvbiBh
bmQgcHJpb3IgZG8gbm90IHN1cHBvcnQgY3VzdG9tIG1lZGlhIGRhdGEgbG9hZGluZwogQnVnKGpl
cm5vYmxlKSBbIE1vdW50YWluTGlvbiBMaW9uIFNub3dMZW9wYXJkIF0gbWVkaWEvdmlkZW8tc3Jj
LWJsb2IuaHRtbAorCisjIE1hYyBmYWlscyBjdXJzb3IgY2hhbmdlIHRlc3QgZm9yIHVua25vd24g
cmVhc29ucword2Via2l0Lm9yZy9iLzEwMzg1NyBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hh
bmdlLmh0bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182485</attachid>
            <date>2013-01-13 08:27:22 -0800</date>
            <delta_ts>2013-02-12 05:41:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130113182418.patch</filename>
            <type>text/plain</type>
            <size>23896</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQwMGFlNDE3MTY1OTAx
MGY5Mjg3NjdmOTA2NTI3MzYwZDZlYmJmNi4uNjg4ODAwNzBiNWNjNDkzMDBhZGZiMDQwMmE4NDk5
MWZjYTU5ZmZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEzLTAxLTEzICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBDdXJzb3IgY2hhbmdlIGlzIG5vdyBjYWxsZWQgb25seSB3
aGVuIHRoZSBub2RlIHRoYXQgaGFkIGl0cyBjdXJzb3IgY2hhbmdlcywgd2FzIGhvdmVyZWQuCisg
ICAgICAgIFRvIGFsbG93IHRoaXMgb3B0aW1pemF0aW9uLCB0aGVyZSB3YXMgYSBjaGFuZ2UgaW4g
aG92ZXIgaGFuZGxpbmcgaW50cm9kdWNlZC4gTm93IG5vdmVyIHN0YXRlCisgICAgICAgIGlzIHVw
ZGF0ZWQgZXZlbiB3aGVuIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGFuZCB0aGUgbm9kZSBob3Zl
cmVkIGlzIG5vdCB0aGUgb25lIHRoYXQgZ290CisgICAgICAgIGFjdGl2YXRlZCBvbiB0aGUgbW91
c2UgcHJlc3MuIFRoaXMgbmV3IGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggSUUgYW5kIEZp
cmVGb3guCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAg
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5v
IGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBidXR0b24gZG93bikKKworICAgICAgICBUZXN0czog
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0
L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3Rp
dmVTdGF0ZSk6IE1hZGUgaG92ZXIgc3RhdGUgdXBkYXRlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBi
cm93c2VycworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKTogTmV3bHkgYWRkZWQgbWV0aG9kIGZvciB1
cGRhdGluZyBtb3VzZSBjdXJzb3IKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcmVOb25JZGVudGljYWxDdXJzb3JMaXN0
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YXJlQ3Vyc29y
c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisKIDIwMTMtMDEt
MTEgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
c3RvcmUgb2xkIHNlbWFudGljcyB0byB3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgY2FsbGJh
Y2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBmODU5ZGVhNzI5MzAwYjliMWRlZGI4Njhi
MzJiYTEzYmVjNzQ4Y2U1Li41NWRjODViMDk3ODUxODFmNmY1NmZlMmY2ODJiYjllMzJmM2UyNDVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4NTMsMTEgKzU4NTMsNiBAQCB2b2lkIERv
Y3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdQogICAgIC8vIG5vZGVzIHNob3VsZCByZW1haW4gOmFjdGl2ZSB1bnRp
bCB0aGUgbW91c2UgaXMgcmVsZWFzZWQuCiAgICAgYm9vbCBhbGxvd0FjdGl2ZUNoYW5nZXMgPSAh
b2xkQWN0aXZlRWxlbWVudCAmJiBhY3RpdmVFbGVtZW50KCk7CiAKLSAgICAvLyBJZiB0aGUgbW91
c2UgaXMgZG93biBhbmQgaWYgdGhpcyBpcyBhIG1vdXNlIG1vdmUgZXZlbnQsIHdlIHdhbnQgdG8g
cmVzdHJpY3QgY2hhbmdlcyBpbgotICAgIC8vIDpob3Zlci86YWN0aXZlIHRvIG9ubHkgYXBwbHkg
dG8gZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIDphY3RpdmUgY2hhaW4gdGhhdCB3ZSBmcm96ZQot
ICAgIC8vIGF0IHRoZSB0aW1lIHRoZSBtb3VzZSB3ZW50IGRvd24uCi0gICAgYm9vbCBtdXN0QmVJ
bkFjdGl2ZUNoYWluID0gcmVxdWVzdC5hY3RpdmUoKSAmJiByZXF1ZXN0Lm1vdmUoKTsKLQogICAg
IFJlZlB0cjxOb2RlPiBvbGRIb3Zlck5vZGUgPSBob3Zlck5vZGUoKTsKICAgICAvLyBDbGVhciB0
aGUgOmhvdmVyIGNoYWluIHdoZW4gdGhlIHRvdWNoIGdlc3R1cmUgaXMgb3Zlci4KICAgICBpZiAo
cmVxdWVzdC50b3VjaFJlbGVhc2UoKSkgewpAQCAtNTg5NCwxNCArNTg4OSwxNCBAQCB2b2lkIERv
Y3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdQogICAgIGlmIChvbGRIb3Zlck9iaiAhPSBuZXdIb3Zlck9iaikgewog
ICAgICAgICAvLyBUaGUgb2xkIGhvdmVyIHBhdGggb25seSBuZWVkcyB0byBiZSBjbGVhcmVkIHVw
IHRvIChhbmQgbm90IGluY2x1ZGluZykgdGhlIGNvbW1vbiBhbmNlc3RvcjsKICAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGN1cnIgPSBvbGRIb3Zlck9iajsgY3VyciAmJiBjdXJyICE9IGFuY2Vz
dG9yOyBjdXJyID0gY3Vyci0+aG92ZXJBbmNlc3RvcigpKSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
ci0+bm9kZSgpICYmICFjdXJyLT5pc1RleHQoKSAmJiAoIW11c3RCZUluQWN0aXZlQ2hhaW4gfHwg
Y3Vyci0+bm9kZSgpLT5pbkFjdGl2ZUNoYWluKCkpKQorICAgICAgICAgICAgaWYgKGN1cnItPm5v
ZGUoKSAmJiAhY3Vyci0+aXNUZXh0KCkpCiAgICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZUZy
b21DaGFpbi5hcHBlbmQoY3Vyci0+bm9kZSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8v
IE5vdyBzZXQgdGhlIGhvdmVyIHN0YXRlIGZvciBvdXIgbmV3IG9iamVjdCB1cCB0byB0aGUgcm9v
dC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5ld0hvdmVyT2JqOyBjdXJyOyBjdXJy
ID0gY3Vyci0+aG92ZXJBbmNlc3RvcigpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5ub2RlKCkgJiYg
IWN1cnItPmlzVGV4dCgpICYmICghbXVzdEJlSW5BY3RpdmVDaGFpbiB8fCBjdXJyLT5ub2RlKCkt
PmluQWN0aXZlQ2hhaW4oKSkpCisgICAgICAgIGlmIChjdXJyLT5ub2RlKCkgJiYgIWN1cnItPmlz
VGV4dCgpKQogICAgICAgICAgICAgbm9kZXNUb0FkZFRvQ2hhaW4uYXBwZW5kKGN1cnItPm5vZGUo
KSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMGRhODM4
MWRjOGEyYzA5ZmQ4MDBjODYyMjk1NmQ3MzQ2NmQ4N2RhMS4uN2I0MDM2NDY5YmExNzZmMjJiM2M2
NTkzZjJmZjBjODNiMGM4NGFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtMTIzMSw3ICsxMjMxLDQwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5v
ZGUqIG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSkKICAgICByZXR1cm4gKChp
c092ZXJMaW5rIHx8IGlzU3VibWl0SW1hZ2Uobm9kZSkpICYmICghZWRpdGFibGUgfHwgZWRpdGFi
bGVMaW5rRW5hYmxlZCkpOwogfQogCi1PcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVj
dEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCwgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCit2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKCkKK3sKKyAg
ICBpZiAobV9tb3VzZVBvc2l0aW9uSXNVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5n
cyAmJiAhc2V0dGluZ3MtPmRldmljZVN1cHBvcnRzTW91c2UoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUt
PnBhZ2UoKS0+aXNPbnNjcmVlbigpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxl
cigpLT5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNoaWZ0S2V5Owor
ICAgIGJvb2wgY3RybEtleTsKKyAgICBib29sIGFsdEtleTsKKyAgICBib29sIG1ldGFLZXk7Cisg
ICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0ZShzaGlmdEtl
eSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsKKworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVl
c3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2
aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fbGFzdEtub3duTW91c2VQb3NpdGlvbikpOworICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQp
OworCisgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IocmVz
dWx0LCBzaGlmdEtleSk7CisgICAgaWYgKG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkp
IHsKKyAgICAgICAgbV9jdXJyZW50TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5jdXJzb3Io
KTsKKyAgICAgICAgdmlldy0+c2V0Q3Vyc29yKG1fY3VycmVudE1vdXNlQ3Vyc29yKTsKKyAgICB9
Cit9CisKK09wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaGlmdEtleSkKIHsKICAgICBpZiAobV9yZXNpemVM
YXllciAmJiBtX3Jlc2l6ZUxheWVyLT5pblJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIE5v
Q3Vyc29yQ2hhbmdlOwpAQCAtMTI0NCw4ICsxMjc3LDE2IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMm
IGV2CiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKICNlbmRpZgogCi0gICAgTm9kZSog
bm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOworICAgIE5vZGUqIG5vZGUgPSByZXN1bHQudGFy
Z2V0Tm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdl
OworICAgIGJvb2wgb3JpZ2luYWxJc1RleHQgPSBub2RlLT5pc1RleHROb2RlKCk7CisgICAgaWYg
KG5vZGUgJiYgb3JpZ2luYWxJc1RleHQpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisKKyAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJlciA/IHJlbmRlcmVyLT5zdHlsZSgpIDogMDsKICAgICBib29s
IGhvcml6b250YWxUZXh0ID0gIXN0eWxlIHx8IHN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpOwogICAgIGNvbnN0IEN1cnNvciYgaUJlYW0gPSBob3Jpem9udGFsVGV4dCA/IGlCZWFtQ3Vy
c29yKCkgOiB2ZXJ0aWNhbFRleHRDdXJzb3IoKTsKQEAgLTEyNjEsNyArMTMwMiw3IEBAIE9wdGlv
bmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgQ3Vyc29y
IG92ZXJyaWRlQ3Vyc29yOwotICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91
bmRlZEludFBvaW50KGV2ZW50LmxvY2FsUG9pbnQoKSksIG92ZXJyaWRlQ3Vyc29yKSkgeworICAg
ICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50KHJlc3VsdC5s
b2NhbFBvaW50KCkpLCBvdmVycmlkZUN1cnNvcikpIHsKICAgICAgICAgY2FzZSBTZXRDdXJzb3JC
YXNlZE9uU3R5bGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRDdXJzb3I6
CkBAIC0xMzA4LDE5ICsxMzQ5LDE5IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2Vs
ZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBz
d2l0Y2ggKHN0eWxlID8gc3R5bGUtPmN1cnNvcigpIDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNl
IENVUlNPUl9BVVRPOiB7Ci0gICAgICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSk7CisgICAgICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkpOwogCi0gICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2
ZW50LmlzT3ZlckxpbmsoKSwgZXZlbnQuZXZlbnQoKS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYg
KHVzZUhhbmRDdXJzb3Iobm9kZSwgcmVzdWx0LlVSTEVsZW1lbnQoKSAmJiByZXN1bHQuVVJMRWxl
bWVudCgpLT5pc0xpbmsoKSwgc2hpZnRLZXkpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRDdXJz
b3IoKTsKIAogICAgICAgICBib29sIGluUmVzaXplciA9IGZhbHNlOwogICAgICAgICBpZiAocmVu
ZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+
ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcg
PSBtX2ZyYW1lLT52aWV3KCkpCi0gICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVy
LT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXctPndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZl
bnQoKS5wb3NpdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVy
LT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXctPndpbmRvd1RvQ29udGVudHMocm91bmRlZElu
dFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKChlZGl0YWJsZSB8fCAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgp
ICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNpemVyICYmICFzY3JvbGxi
YXIpCisgICAgICAgIGlmICgoZWRpdGFibGUgfHwgKG9yaWdpbmFsSXNUZXh0ICYmIG5vZGUtPmNh
blN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNpemVyICYmICFyZXN1bHQuc2Nyb2xsYmFyKCkp
CiAgICAgICAgICAgICByZXR1cm4gaUJlYW07CiAgICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29y
KCk7CiAgICAgfQpAQCAtMTcyOSw3ICsxNzcwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkK
ICAgICAgICAgaWYgKHNjcm9sbGJhciAmJiAhbV9tb3VzZVByZXNzZWQpCiAgICAgICAgICAgICBz
Y3JvbGxiYXItPm1vdXNlTW92ZWQobW91c2VFdmVudCk7IC8vIEhhbmRsZSBob3ZlciBlZmZlY3Rz
IG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdmlzdWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBo
b3ZlcmluZy4KICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkg
ewotICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJz
b3IobWV2LCBzY3JvbGxiYXIpOworICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxD
dXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LmhpdFRlc3RSZXN1bHQoKSwgbW91c2VFdmVudC5zaGlm
dEtleSgpKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgp
KSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNv
ci5jdXJzb3IoKTsKICAgICAgICAgICAgICAgICB2aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91
c2VDdXJzb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggZTc1OWFiNDYyZGFi
ZTg5NDNkYjI3YzdlYjQ5YTA0NzI1MWI2ODhlYi4uNTRiZmI2M2NmN2QzYWMyMGFmZTA2Y2Q1ZTM5
NDNhZmY2OWNmMzAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0yNTAsNiAr
MjUwLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHVzZUhhbmRDdXJzb3IoTm9kZSos
IGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSk7CisgICAgdm9pZCB1cGRhdGVDdXJzb3Io
KTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtMjc2LDcgKzI3Nyw4
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAotICAgIE9wdGlvbmFsQ3Vyc29y
IHNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgU2Nyb2xs
YmFyKik7CisgICAgT3B0aW9uYWxDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1
bHQmLCBib29sIHNoaWZ0S2V5KTsKKwogICAgIHZvaWQgaG92ZXJUaW1lckZpcmVkKFRpbWVyPEV2
ZW50SGFuZGxlcj4qKTsKIAogICAgIGJvb2wgbG9naWNhbFNjcm9sbE92ZXJmbG93KFNjcm9sbExv
Z2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUgPSAw
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggODAwMTc5
OGZhZjNmNWEyNTEwMDhhYTc5OGM3ZTU1ZmVhNTRiZjY2NC4uZWNhM2IyNGM0NjFmMzE5Mzk4YTY0
OWZhZGU0MTc2MWRhY2U5ZDZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKQEAgLTE3NzUsNiArMTc3NSwxNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0UHNl
dWRvU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGUpCiAgICAgc2V0U3R5
bGUocHNldWRvU3R5bGUpOwogfQogCitzdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJzb3JM
aXN0c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sK
KyAgICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7CisgICAgcmV0dXJuIGEt
PmN1cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vyc29y
cygpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICByZXR1cm4gYS0+Y3Vyc29y
KCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwgYXJl
Tm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Cit9CisKIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBpZiAo
bV9zdHlsZSA9PSBzdHlsZSkgewpAQCAtMTgxMyw2ICsxODI0LDEzIEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIAogICAgIHN0eWxl
RGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlLmdldCgpKTsKIAorICAgIGlmIChvbGRTdHlsZS5nZXQo
KSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLmdldCgpLCB0aGlzLT5zdHlsZSgpKSkgewor
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAgICAg
aWYgKG5vZGUoKSAmJiBub2RlKCktPmhvdmVyZWQoKSkKKyAgICAgICAgICAgICAgICBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZUN1cnNvcigpOworICAgICAgICB9CisgICAgfQorCiAgICAg
Ly8gRklYTUU6IHx0aGlzfCBtaWdodCBiZSBkZXN0cm95ZWQgaGVyZS4gVGhpcyBjYW4gY3VycmVu
dGx5IGhhcHBlbiBmb3IgYSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hlbgogICAgIC8vIGl0cyBmaXJz
dC1sZXR0ZXIgYmxvY2sgZ2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVyVGV4dEZyYWdtZW50OjpzdHls
ZURpZENoYW5nZS4gRm9yIFJlbmRlclRleHRGcmFnbWVudChzKSwKICAgICAvLyB3ZSB3aWxsIHNh
ZmVseSBiYWlsIG91dCB3aXRoIHRoZSBkb2VzTm90TmVlZExheW91dCBmbGFnLiBXZSBtaWdodCB3
YW50IHRvIGJyb2FkZW4gdGhpcyBjb25kaXRpb24KQEAgLTE5MjUsMTcgKzE5NDMsNiBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogbmV3UwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgYXJlTm9uSWRlbnRp
Y2FsQ3Vyc29yTGlzdHNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpCi17Ci0gICAgQVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3JzKCkpOwotICAg
IHJldHVybiBhLT5jdXJzb3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJzb3JzKCkgPT0g
KmItPmN1cnNvcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNvcnNFcXVhbChj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0gICAgcmV0dXJu
IGEtPmN1cnNvcigpID09IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0gYi0+Y3Vyc29y
cygpIHx8IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOwotfQotCiB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBpZiAoc19hZmZlY3RzUGFyZW50QmxvY2sp
CkBAIC0xOTcxLDExICsxOTc4LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIC8v
IERvbid0IGNoZWNrIGZvciByZXBhaW50IGhlcmU7IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUg
bGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1cGRhdGVkIGJ5IHN1YmNsYXNzZXMgYmVmb3JlIHdlIGtu
b3cgaWYgd2UgaGF2ZSB0byByZXBhaW50IChpbiBzZXRTdHlsZSgpKS4KLQotICAgIGlmIChvbGRT
dHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewotICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAgfQogfQog
CiB2b2lkIFJlbmRlck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJv
b2wgYmxvY2tDaGlsZHJlbk9ubHkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGE1Mjc5NDRkODY3ZmQ2MjI2YzRjOTgyYjY5
MGQzZDU1OTA5YTY5Yy4uNTcwZmUzNzhlZWI1M2M4MDFkOWI3YTIyZjU0N2Q5NTk1ZmRiNTU0MyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTAxLTEzICBBaXZvIFBhYXMgIDxhaXZvcGFhc0Bn
bWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0eWxlIGNoYW5n
ZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAgIENoYW5naW5n
IENTUyBjdXJzb3Igc2hvdWxkIHdvcmsgbm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVz
c2VkIG9yIG5vdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTMzNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCB0ZXN0cyBmb3IgY2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwgbW91c2Vkb3du
LCBtb3VzZXVwIGFuZCBtb3VzZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2UgYnV0dG9uIGJlaW5n
IGhvbGQgZG93bi4gQWxzbyBhZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91c2Vtb3ZlCisg
ICAgICAgIGV2ZW50IGlzIG5vdCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdoaWxlIG1vdXNl
IGlzIG5vdCBtb3ZpbmcuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWcuaHRtbDog
Q2hhbmdlZCBleHBlY3RhdGlvbiB0byBtYXRjaCBjaGFuZ2UgaW4gaG92ZXIgaGFuZGxpbmcgd2hp
bGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93bgorICAgICAgICAqIGZhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZl
bnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWw6IEFkZGVkLgor
CiAyMDEzLTAxLTExICBTdGVwaGVuIENoZW5uZXkgIDxzY2hlbm5leUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtXSBNb3JlIHRlc3QgZXhwZWN0YXRpb25zIGZvciBTa2lhIGNoYW5n
ZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL2hvdmVyLWFjdGl2ZS1kcmFnLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL2hvdmVyLWFjdGl2ZS1kcmFnLWV4cGVj
dGVkLnR4dAppbmRleCBiNDUxMTYxMzM1NmE0NWRhNmVhMjI1YjNjOGM4ZDdmODI5NGFlZWE2Li5i
ZGIxZTNlZDkxNmYyMWNiZjY2YTQwMDI3MWI5N2Q4NDA3ZmQ1ZjVkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWctZXhwZWN0ZWQudHh0CkBAIC03LDcg
KzcsNyBAQCBQQVNTIGJhY2tncm91bmQgaXMgInJnYigwLCAwLCAwKSIKIFBBU1MgYmFja2dyb3Vu
ZCBpcyAicmdiKDI1NSwgMjU1LCAwKSIKIFBBU1MgYmFja2dyb3VuZCBpcyAicmdiKDAsIDAsIDAp
IgogUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMCwgMjU1LCAwKSIKLVBBU1MgYmFja2dyb3VuZCBp
cyAicmdiKDAsIDAsIDApIgorUEFTUyBiYWNrZ3JvdW5kIGlzICJyZ2IoMjU1LCAwLCAwKSIKIFBB
U1MgYmFja2dyb3VuZCBpcyAicmdiKDAsIDI1NSwgMCkiCiBQQVNTIGJhY2tncm91bmQgaXMgInJn
YigwLCAwLCAwKSIKIFBBU1MgYmFja2dyb3VuZCBpcyAicmdiKDAsIDAsIDApIgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZlLWRyYWcuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL2hvdmVyLWFjdGl2ZS1kcmFnLmh0bWwKaW5kZXggZTA3ODI3ZjRjMjgwN2Mx
Y2FkMzMxNjI2ZjI2MzNkYTE0YmIzZWFjOC4uMmYxYzZjMThiM2NlM2RjNTk1YmI1YzNkNjljMWUy
Y2E3YjJlYWI5MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MvaG92ZXItYWN0aXZl
LWRyYWcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9ob3Zlci1hY3RpdmUtZHJhZy5o
dG1sCkBAIC00OSw3ICs0OSw3IEBACiAgICAgLy8gV2l0aCB0aGUgbW91c2Ugc3RpbGwgZG93biwg
bW92ZSBpbnRvIHRoZSBzZWNvbmQgYm94LgogICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDUw
LCAxNTApCiAgICAgc2hvdWxkSGF2ZUJhY2tncm91bmQoYm94LCAncmdiKDAsIDI1NSwgMCknKQot
ICAgIHNob3VsZEhhdmVCYWNrZ3JvdW5kKGJveDIsICdyZ2IoMCwgMCwgMCknKQorICAgIHNob3Vs
ZEhhdmVCYWNrZ3JvdW5kKGJveDIsICdyZ2IoMjU1LCAwLCAwKScpCiAKICAgICAvLyBNb3VzZSBz
dGlsbCBkb3duLCBtb3ZlIG91dHNpZGUgb2YgYm90aCBib3hlcy4KICAgICBldmVudFNlbmRlci5t
b3VzZU1vdmVUbyg0MDAsIDUwKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
bW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGI3YWJlYTcy
YTcxMDE2ZGExNDAzNDk5MzVlNjAxYTkzYzI5NDNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwyNCBAQAorVGVzdCB0aGF0IG1vdXNlIGN1cnNvcnMgYXJlIGNoYW5nZWQgY29ycmVjdGx5
IG9uIG1vdXNlIGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0J1ZyA1
MzM0MQorCisKK01vdXNlIG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAK
KworTW91c2UgZG93bgorQ3Vyc29yIEluZm86IHR5cGU9UHJvZ3Jlc3MgaG90U3BvdD0wLDAKKwor
TW91c2UgaG9sZCBkb3duLCBtb3ZlCitDdXJzb3IgSW5mbzogdHlwZT1IYW5kIGhvdFNwb3Q9MCww
CisKK01vdXNlIHVwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9MCwwCisKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGQ0MWJlMWJhMGI2ZGNmYTVlODNmYmY3ZGQwYWI4ZWI1YmYzNTgzMQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApAQCAt
MCwwICsxLDc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxwPjxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MzM0MSI+QnVnIDUzMzQxPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4K
KyAgICA8ZGl2IGlkPSJ0YXJnZXQiIG9uTW91c2VEb3duPSJzdHlsZS5jdXJzb3I9J3Byb2dyZXNz
JztldmVudC5wcmV2ZW50RGVmYXVsdCgpOyIgb25Nb3VzZU1vdmU9InN0eWxlLmN1cnNvcj0ncG9p
bnRlcic7IiBvbk1vdXNlVXA9InN0eWxlLmN1cnNvcj0naGVscCc7IiBzdHlsZT0iY3Vyc29yOnBv
aW50ZXI7Ij5QbGF5IHdpdGggbW91c2Ugb24gdGhpcyBlbGVtZW50LiBDdXJzb3JzIGNoYW5nZSBv
biBldmVudHMgLSBtb3VzZW1vdmU6IHBvaW50ZXIoaGFuZCksIG1vdXNlZG93bjogcHJvZ3Jlc3Ms
IG1vdXNldXA6IGhlbHAuPC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IG1vdXNlIGN1cnNvcnMgYXJl
IGNoYW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4iKTsKKworaWYgKCF3aW5kb3cuZXZl
bnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRl
clRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgd2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCitmdW5jdGlvbiBydW5UZXN0KHByZXBhcmUsIG5l
eHQpIHsKKyAgICBwcmVwYXJlKCk7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAg
ICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5nZXRDdXJyZW50Q3Vy
c29ySW5mbyhkb2N1bWVudCkpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIG5leHQoKTsK
KyAgICB9LCAwKTsKK30KKworZnVuY3Rpb24gdGVzdHNEb25lKCkgeworICAgIC8vIFRoaXMgdGV4
dCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdGVzdCBvdXRwdXQgLSBoaWRlIGl0CisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVs
IGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAg
IHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZXZl
bnRTZW5kZXIuZHJhZ01vZGUgPSBmYWxzZTsKKyAgICB2YXIgdGVzdHMgPSBbCisgICAgICAgIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIG1vdmUnKTsKKyAgICAgICAgICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMywgdGFyZ2V0Lm9m
ZnNldFRvcCArIDMpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVn
KCdNb3VzZSBkb3duJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAg
ICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgaG9sZCBkb3du
LCBtb3ZlJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zm
c2V0TGVmdCArIDEzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIHVwJyk7CisgICAgICAgICAgICBldmVudFNl
bmRlci5tb3VzZVVwKCk7CisgICAgICAgIH0KKyAgICBdOworCisgICAgdmFyIGkgPSAwOworICAg
IGZ1bmN0aW9uIG5leHRUZXN0KCkgeworICAgICAgICBpZiAoaSA8IHRlc3RzLmxlbmd0aCkgewor
ICAgICAgICAgICAgcnVuVGVzdCh0ZXN0c1tpKytdLCBuZXh0VGVzdCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB0ZXN0c0RvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBuZXh0
VGVzdCgpOworfQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNWQwNjQ1ZTliNzYxMTNmN2M0MWVkYWQ5
ZjI2Y2ZmZTk0ZjdlNjkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBA
QAorVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5n
aW5nIGN1cnNvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0J1ZyA4NTM0Mwor
CisKK1RFU1QgQ0FTRTogTW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUg
bW91c2Vtb3ZlIGV2ZW50CitDdXJzb3IgSW5mbzogdHlwZT1Qb2ludGVyIGhvdFNwb3Q9MCwwCitD
dXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ1
OTgyMWNkMzMyNmFhMmQ4ZTQ2ZThhZjg3MjBhNjg5M2JjNmU1MwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApA
QCAtMCwwICsxLDU1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg1MzQzPkJ1ZyA4NTM0MzwvYT48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRhaW5lciI+
CisgICAgPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0iY3Vyc29yOmRlZmF1bHQiPk1vdXNlIGlkbGUs
IGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVudDwvZGl2PgorPC9k
aXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFu
Z2luZyBjdXJzb3IuIik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdGVzdEZh
aWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRl
cgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgIGRlYnVnKCdURVNUIENBU0U6ICcgKyBub2RlLnRl
eHRDb250ZW50KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhub2RlLm9mZnNldExlZnQg
KyAzLCBub2RlLm9mZnNldFRvcCArIDMpOworICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdp
bmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICBub2Rl
LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0
RmFpbGVkKCdNb3VzZW1vdmUgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGNoYW5naW5n
IGN1cnNvcicpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKKyAgICBub2RlLnN0
eWxlLmN1cnNvciA9ICdoZWxwJzsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJz
b3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICB9LCAwKTsKKworICAg
IC8vIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgY2hhbmdlIHRvIHJlc29sdmUuIEZha2UgbW91c2Vt
b3ZlIGV2ZW50IHRoYXQgY2F1c2VkIGJ1ZywgaXMgdXNpbmcgYSB0aW1lcgorICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNv
bnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0sIDE1MCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDMwYzY2MGZm
NjhkNzkzNTEwYmVmYjI5NWJmYzE4ZTQ0MzhkNmQ0NWYuLmUwYWJmZjc1ZmE5OWVlZWRjNTZlZDRl
ZGVlMzBmYjMxYmVmNGJmNGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0
YXRpb25zCkBAIC0xMjgzLDMgKzEyODMsNiBAQCB3ZWJraXQub3JnL2IvMTAzOTU1IGZhc3QvcmVw
YWludC9qYXBhbmVzZS1ybC1zZWxlY3Rpb24tcmVwYWludC5odG1sIFsgSW1hZ2VPbmx5Rgogd2Vi
a2l0Lm9yZy9iLzEwMzk1NSBmYXN0L3JlcGFpbnQvcmVwYWludC1hY3Jvc3Mtd3JpdGluZy1tb2Rl
LWJvdW5kYXJ5Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMDM5NTUg
ZmFzdC9yZXBhaW50L3NlbGVjdGlvbi1ybC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJr
aXQub3JnL2IvMTAzOTU1IGZhc3QvcmVwYWludC9jYXJldC13aXRoLXRyYW5zZm9ybWF0aW9uLmh0
bWwgWyBNaXNzaW5nIF0KKworIyBNYWMgZmFpbHMgY3Vyc29yIGNoYW5nZSB0ZXN0IGZvciB1bmtu
b3duIHJlYXNvbnMKK3dlYmtpdC5vcmcvYi8xMDM4NTcgZmFzdC9ldmVudHMvbW91c2UtY3Vyc29y
LWNoYW5nZS5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187844</attachid>
            <date>2013-02-12 05:41:41 -0800</date>
            <delta_ts>2013-02-15 18:45:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130212153809.patch</filename>
            <type>text/plain</type>
            <size>19818</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDg5ZDQ5YzkzOGE2OTBk
ZGQ4NmNhZGJkZmE1OTZmMGY3YjdkZmJmYS4uM2JmMzMxODU1OTliNWRmYTM1YzFmZDkxNzA3MDk3
ZTI5MDZjYTRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTAyLTEyICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBGaXhlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg1MzQzIChtb3VzZW1vdmUgZXZlbnQgb24gY3Vyc29yIGNoYW5nZSkKKyAg
ICAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0
MSAobm8gY3Vyc29yIGNoYW5nZSB3aGVuIG1vdXNlIGJ1dHRvbiBkb3duKQorCisgICAgICAgIFRl
c3RzOiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbAorCisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1
cGRhdGVDdXJzb3IpOiBOZXdseSBhZGRlZCBtZXRob2QgZm9yIHVwZGF0aW5nIG1vdXNlIGN1cnNv
cgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bGVjdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNl
TW92ZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAoRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjphcmVDdXJzb3JzRXF1YWwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKwogMjAxMy0wMi0xMSAgRXJpYyBTZWlkZWwgIDxl
cmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBXZWJWVFRUb2tlbml6ZXIgc3RvcCBpbmhl
cml0aW5nIGZyb20gTWFya3VwVG9rZW5pemVyQmFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCmluZGV4IGZiNjMxZjdiMTFiODg3N2U1MGY4MjVlNmUxYTg3Mzc5MTVjODE2ZGYuLjY3
Nzc2ZmM0MjVlMjM2ZTc1ZGUyNWJhOTg4YjY3ZTkxNWQxMzIzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKQEAgLTEyMzcsNyArMTIzNyw0MCBAQCBib29sIEV2ZW50SGFuZGxl
cjo6dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBib29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRL
ZXkpCiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8fCBpc1N1Ym1pdEltYWdlKG5vZGUpKSAmJiAo
IWVkaXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJsZWQpKTsKIH0KIAotT3B0aW9uYWxDdXJzb3Ig
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYgZXZlbnQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBFdmVudEhhbmRsZXI6OnVw
ZGF0ZUN1cnNvcigpCit7CisgICAgaWYgKG1fbW91c2VQb3NpdGlvbklzVW5rbm93bikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3Mo
KTsKKyAgICBpZiAoc2V0dGluZ3MgJiYgIXNldHRpbmdzLT5kZXZpY2VTdXBwb3J0c01vdXNlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXco
KTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9mcmFtZS0+
cGFnZSgpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPmlzT25zY3JlZW4oKSB8fCAhbV9mcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYm9vbCBzaGlmdEtleTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBhbHRLZXk7Cisg
ICAgYm9vbCBtZXRhS2V5OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1v
ZGlmaWVyU3RhdGUoc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7CisKKyAgICBI
aXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgSGl0
VGVzdFJlc3VsdCByZXN1bHQodmlldy0+d2luZG93VG9Db250ZW50cyhtX2xhc3RLbm93bk1vdXNl
UG9zaXRpb24pKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPmhpdFRl
c3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29y
ID0gc2VsZWN0Q3Vyc29yKHJlc3VsdCwgc2hpZnRLZXkpOworICAgIGlmIChvcHRpb25hbEN1cnNv
ci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29yID0gb3B0
aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRN
b3VzZUN1cnNvcik7CisgICAgfQorfQorCitPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNl
bGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2hpZnRLZXkpCiB7
CiAgICAgaWYgKG1fcmVzaXplTGF5ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVNb2RlKCkp
CiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKQEAgLTEyNTAsOCArMTI4MywxNiBAQCBP
cHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CiAj
ZW5kaWYKIAotICAgIE5vZGUqIG5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7Ci0gICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUgPyBub2RlLT5yZW5kZXJlcigpIDogMDsKKyAgICBOb2Rl
KiBub2RlID0gcmVzdWx0LnRhcmdldE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybiBOb0N1cnNvckNoYW5nZTsKKyAgICBib29sIG9yaWdpbmFsSXNUZXh0ID0gbm9kZS0+aXNU
ZXh0Tm9kZSgpOworICAgIGlmIChub2RlICYmIG9yaWdpbmFsSXNUZXh0KQorICAgICAgICBub2Rl
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5v
Q3Vyc29yQ2hhbmdlOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCk7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIgPyByZW5kZXJlci0+c3R5
bGUoKSA6IDA7CiAgICAgYm9vbCBob3Jpem9udGFsVGV4dCA9ICFzdHlsZSB8fCBzdHlsZS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICBjb25zdCBDdXJzb3ImIGlCZWFtID0gaG9yaXpv
bnRhbFRleHQgPyBpQmVhbUN1cnNvcigpIDogdmVydGljYWxUZXh0Q3Vyc29yKCk7CkBAIC0xMjY3
LDcgKzEzMDgsNyBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihj
b25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogCiAgICAgaWYgKHJlbmRlcmVy
KSB7CiAgICAgICAgIEN1cnNvciBvdmVycmlkZUN1cnNvcjsKLSAgICAgICAgc3dpdGNoIChyZW5k
ZXJlci0+Z2V0Q3Vyc29yKHJvdW5kZWRJbnRQb2ludChldmVudC5sb2NhbFBvaW50KCkpLCBvdmVy
cmlkZUN1cnNvcikpIHsKKyAgICAgICAgc3dpdGNoIChyZW5kZXJlci0+Z2V0Q3Vyc29yKHJvdW5k
ZWRJbnRQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7CiAgICAg
ICAgIGNhc2UgU2V0Q3Vyc29yQmFzZWRPblN0eWxlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgU2V0Q3Vyc29yOgpAQCAtMTMxNCwxOSArMTM1NSwxOSBAQCBPcHRpb25hbEN1cnNv
ciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBldgogCiAgICAgc3dpdGNoIChzdHlsZSA/IHN0eWxlLT5jdXJzb3IoKSA6IENVUlNP
Ul9BVVRPKSB7CiAgICAgY2FzZSBDVVJTT1JfQVVUTzogewotICAgICAgICBib29sIGVkaXRhYmxl
ID0gKG5vZGUgJiYgbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOworICAgICAgICBib29sIGVk
aXRhYmxlID0gKG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKTsKIAotICAgICAgICBpZiAodXNl
SGFuZEN1cnNvcihub2RlLCBldmVudC5pc092ZXJMaW5rKCksIGV2ZW50LmV2ZW50KCkuc2hpZnRL
ZXkoKSkpCisgICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIHJlc3VsdC5VUkxFbGVtZW50
KCkgJiYgcmVzdWx0LlVSTEVsZW1lbnQoKS0+aXNMaW5rKCksIHNoaWZ0S2V5KSkKICAgICAgICAg
ICAgIHJldHVybiBoYW5kQ3Vyc29yKCk7CiAKICAgICAgICAgYm9vbCBpblJlc2l6ZXIgPSBmYWxz
ZTsKICAgICAgICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIq
IGxheWVyID0gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQotICAgICAgICAgICAgICAgICAg
ICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbCh2aWV3LT53aW5kb3dU
b0NvbnRlbnRzKGV2ZW50LmV2ZW50KCkucG9zaXRpb24oKSkpOworICAgICAgICAgICAgICAgICAg
ICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbCh2aWV3LT53aW5kb3dU
b0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICgoZWRpdGFibGUgfHwgKHJlbmRlcmVyICYm
IHJlbmRlcmVyLT5pc1RleHQoKSAmJiBub2RlLT5jYW5TdGFydFNlbGVjdGlvbigpKSkgJiYgIWlu
UmVzaXplciAmJiAhc2Nyb2xsYmFyKQorICAgICAgICBpZiAoKGVkaXRhYmxlIHx8IChvcmlnaW5h
bElzVGV4dCAmJiBub2RlLT5jYW5TdGFydFNlbGVjdGlvbigpKSkgJiYgIWluUmVzaXplciAmJiAh
cmVzdWx0LnNjcm9sbGJhcigpKQogICAgICAgICAgICAgcmV0dXJuIGlCZWFtOwogICAgICAgICBy
ZXR1cm4gcG9pbnRlckN1cnNvcigpOwogICAgIH0KQEAgLTE3MzcsNyArMTc3OCw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIG1vdXNlRXZlbnQsIEhpCiAgICAgICAgIGlmIChzY3JvbGxiYXIgJiYgIW1fbW91c2VQcmVz
c2VkKQogICAgICAgICAgICAgc2Nyb2xsYmFyLT5tb3VzZU1vdmVkKG1vdXNlRXZlbnQpOyAvLyBI
YW5kbGUgaG92ZXIgZWZmZWN0cyBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHZpc3VhbCBmZWVk
YmFjayBvbiBzY3JvbGxiYXIgaG92ZXJpbmcuCiAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcg
PSBtX2ZyYW1lLT52aWV3KCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFs
Q3Vyc29yID0gc2VsZWN0Q3Vyc29yKG1ldiwgc2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIE9wdGlv
bmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0Q3Vyc29yKG1ldi5oaXRUZXN0UmVzdWx0
KCksIG1vdXNlRXZlbnQuc2hpZnRLZXkoKSk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxDdXJz
b3IuaXNDdXJzb3JDaGFuZ2UoKSkgewogICAgICAgICAgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vy
c29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CiAgICAgICAgICAgICAgICAgdmlldy0+c2V0
Q3Vyc29yKG1fY3VycmVudE1vdXNlQ3Vyc29yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CmluZGV4IDNiODM2MDIyNWI1OGUyNjVhNTVlYjc4ZDkwMWU3N2M0ZDNiNDRlZjkuLjMwYTNmNzJi
ZWE5ODllZGYwMzVlM2IwMTA4MTliNjkzNjUwMmZmODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaApAQCAtMjUxLDYgKzI1MSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCB1
c2VIYW5kQ3Vyc29yKE5vZGUqLCBib29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpOworICAg
IHZvaWQgdXBkYXRlQ3Vyc29yKCk7CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKQEAgLTI3Nyw3ICsyNzgsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBoYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAK
LSAgICBPcHRpb25hbEN1cnNvciBzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYsIFNjcm9sbGJhciopOworICAgIE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNv
cihjb25zdCBIaXRUZXN0UmVzdWx0JiwgYm9vbCBzaGlmdEtleSk7CisKICAgICB2b2lkIGhvdmVy
VGltZXJGaXJlZChUaW1lcjxFdmVudEhhbmRsZXI+Kik7CiAKICAgICBib29sIGxvZ2ljYWxTY3Jv
bGxPdmVyZmxvdyhTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgTm9k
ZSogc3RhcnRpbmdOb2RlID0gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCmluZGV4IGQzMWRiNzM3MzJjNjBiZDA5ODM4ZjkyZDQ4YjkxMzgzYjUwZWRiODIuLjAy
OWU0NTdhYWM4NTMyYjgxYWY5MzZjYzZhOTM1MDhmODEzZDBhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNzU4LDYgKzE3NTgsMTcgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnNldFBzZXVkb1N0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVk
b1N0eWxlKQogICAgIHNldFN0eWxlKHBzZXVkb1N0eWxlKTsKIH0KIAorc3RhdGljIGJvb2wgYXJl
Tm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpCit7CisgICAgQVNTRVJUKGEtPmN1cnNvcnMoKSAhPSBiLT5jdXJzb3Jz
KCkpOworICAgIHJldHVybiBhLT5jdXJzb3JzKCkgJiYgYi0+Y3Vyc29ycygpICYmICphLT5jdXJz
b3JzKCkgPT0gKmItPmN1cnNvcnMoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFyZUN1cnNv
cnNFcXVhbChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCit7Cisg
ICAgcmV0dXJuIGEtPmN1cnNvcigpID09IGItPmN1cnNvcigpICYmIChhLT5jdXJzb3JzKCkgPT0g
Yi0+Y3Vyc29ycygpIHx8IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoYSwgYikpOwor
fQorCiB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGUpCiB7CiAgICAgaWYgKG1fc3R5bGUgPT0gc3R5bGUpIHsKQEAgLTE3OTYsNiArMTgwNywx
MSBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGUpCiAKICAgICBzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZS5nZXQoKSk7CiAKKyAg
ICBpZiAob2xkU3R5bGUuZ2V0KCkgJiYgIWFyZUN1cnNvcnNFcXVhbChvbGRTdHlsZS5nZXQoKSwg
dGhpcy0+c3R5bGUoKSkpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1l
KCkpCisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZUN1cnNvcigpOwor
ICAgIH0KKwogICAgIC8vIEZJWE1FOiB8dGhpc3wgbWlnaHQgYmUgZGVzdHJveWVkIGhlcmUuIFRo
aXMgY2FuIGN1cnJlbnRseSBoYXBwZW4gZm9yIGEgUmVuZGVyVGV4dEZyYWdtZW50IHdoZW4KICAg
ICAvLyBpdHMgZmlyc3QtbGV0dGVyIGJsb2NrIGdldHMgYW4gdXBkYXRlIGluIFJlbmRlclRleHRG
cmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UuIEZvciBSZW5kZXJUZXh0RnJhZ21lbnQocyksCiAgICAg
Ly8gd2Ugd2lsbCBzYWZlbHkgYmFpbCBvdXQgd2l0aCB0aGUgZG9lc05vdE5lZWRMYXlvdXQgZmxh
Zy4gV2UgbWlnaHQgd2FudCB0byBicm9hZGVuIHRoaXMgY29uZGl0aW9uCkBAIC0xOTIxLDE3ICsx
OTM3LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1MKICAgICB9CiB9CiAKLXN0YXRpYyBib29s
IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKQotewotICAgIEFTU0VSVChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vy
c29ycygpKTsKLSAgICByZXR1cm4gYS0+Y3Vyc29ycygpICYmIGItPmN1cnNvcnMoKSAmJiAqYS0+
Y3Vyc29ycygpID09ICpiLT5jdXJzb3JzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmVD
dXJzb3JzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQot
ewotICAgIHJldHVybiBhLT5jdXJzb3IoKSA9PSBiLT5jdXJzb3IoKSAmJiAoYS0+Y3Vyc29ycygp
ID09IGItPmN1cnNvcnMoKSB8fCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGEsIGIp
KTsKLX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAKQEAgLTE5NjUsMTEgKzE5
NzAsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogCiAgICAgLy8gRG9uJ3QgY2hlY2sgZm9y
IHJlcGFpbnQgaGVyZTsgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBsYXllciBoYXMgYmVlbgog
ICAgIC8vIHVwZGF0ZWQgYnkgc3ViY2xhc3NlcyBiZWZvcmUgd2Uga25vdyBpZiB3ZSBoYXZlIHRv
IHJlcGFpbnQgKGluIHNldFN0eWxlKCkpLgotCi0gICAgaWYgKG9sZFN0eWxlICYmICFhcmVDdXJz
b3JzRXF1YWwob2xkU3R5bGUsIHN0eWxlKCkpKSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSB0aGlzLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kaXNw
YXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKTsKLSAgICB9CiB9CiAKIHZvaWQgUmVuZGVyT2Jq
ZWN0Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oYm9vbCBibG9ja0NoaWxkcmVu
T25seSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCAxZjJlZmFmMThlZDQyZmM4YzA0MzI1MThhNjdhZGQzOTdiNjdmNTM2Li5h
OGViOTJjNzExOGU5ZGVlNDhlYTEyMTY1NzNiYmJhOTc4YmNlYmUwIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMTMtMDItMTIgIEFpdm8gUGFhcyAgPGFpdm9wYWFzQGdtYWlsLmNvbT4KKworICAg
ICAgICBVcGRhdGluZyBtb3VzZSBjdXJzb3Igb24gc3R5bGUgY2hhbmdlcyB3aXRob3V0IGVtaXR0
aW5nIGZha2UgbW91c2Vtb3ZlIGV2ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDE4NTcKKyAgICAgICAgQ2hhbmdpbmcgQ1NTIGN1cnNvciBzaG91
bGQgd29yayBubyBtYXR0ZXIgaXMgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3Igbm90CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZv
ciBjaGFuZ2luZyBjdXJzb3Igb24gbW91c2Vtb3ZlLCBtb3VzZWRvd24sIG1vdXNldXAgYW5kIG1v
dXNlbW92ZQorICAgICAgICB3aGlsZSBtb3VzZSBidXR0b24gYmVpbmcgaG9sZCBkb3duLiBBbHNv
IGFkZGVkIHRlc3QgdG8gdmVyaWZ5IHRoYXQgYSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMg
bm90IGZpcmVkIGZvciBjaGFuZ2luZyBjdXJzb3Igd2hpbGUgbW91c2UgaXMgbm90IG1vdmluZy4K
KworICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3It
bm8tbW91c2Vtb3ZlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhw
ZWN0YXRpb25zOgorCiAyMDEzLTAyLTExICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgTW92ZSBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkIGZyb20gbGF5b3V0VGVz
dENvbnRyb2xsZXIgdG8gd2luZG93LmludGVybmFscy5zZXR0aW5ncwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40OGI3YWJlYTcyYTcxMDE2ZGExNDAzNDk5MzVlNjAxYTkzYzI5NDNkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5n
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNCBAQAorVGVzdCB0aGF0IG1vdXNlIGN1cnNvcnMg
YXJlIGNoYW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK0J1ZyA1MzM0MQorCisKK01vdXNlIG1vdmUKK0N1cnNvciBJbmZvOiB0
eXBlPUhhbmQgaG90U3BvdD0wLDAKKworTW91c2UgZG93bgorQ3Vyc29yIEluZm86IHR5cGU9UHJv
Z3Jlc3MgaG90U3BvdD0wLDAKKworTW91c2UgaG9sZCBkb3duLCBtb3ZlCitDdXJzb3IgSW5mbzog
dHlwZT1IYW5kIGhvdFNwb3Q9MCwwCisKK01vdXNlIHVwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxw
IGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJz
b3ItY2hhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hh
bmdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ0MWJlMWJhMGI2ZGNmYTVlODNmYmY3ZGQwYWI4ZWI1YmYz
NTgzMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1
cnNvci1jaGFuZ2UuaHRtbApAQCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9Imh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MSI+QnVnIDUzMzQxPC9hPjwvcD4KKzxkaXYg
aWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQiIG9uTW91c2VEb3duPSJz
dHlsZS5jdXJzb3I9J3Byb2dyZXNzJztldmVudC5wcmV2ZW50RGVmYXVsdCgpOyIgb25Nb3VzZU1v
dmU9InN0eWxlLmN1cnNvcj0ncG9pbnRlcic7IiBvbk1vdXNlVXA9InN0eWxlLmN1cnNvcj0naGVs
cCc7IiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Ij5QbGF5IHdpdGggbW91c2Ugb24gdGhpcyBlbGVt
ZW50LiBDdXJzb3JzIGNoYW5nZSBvbiBldmVudHMgLSBtb3VzZW1vdmU6IHBvaW50ZXIoaGFuZCks
IG1vdXNlZG93bjogcHJvZ3Jlc3MsIG1vdXNldXA6IGhlbHAuPC9kaXY+Cis8L2Rpdj4KKzxici8+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0
aGF0IG1vdXNlIGN1cnNvcnMgYXJlIGNoYW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4i
KTsKKworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRl
c3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVy
KSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCitmdW5jdGlv
biBydW5UZXN0KHByZXBhcmUsIG5leHQpIHsKKyAgICBwcmVwYXJlKCk7CisgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93Lmlu
dGVybmFscy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgICAgICBkZWJ1Zygn
Jyk7CisgICAgICAgIG5leHQoKTsKKyAgICB9LCAwKTsKK30KKworZnVuY3Rpb24gdGVzdHNEb25l
KCkgeworICAgIC8vIFRoaXMgdGV4dCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdGVzdCBvdXRwdXQg
LSBoaWRlIGl0CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJyku
c3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworLy8gQ2Fu
J3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRv
dy5ldmVudFNlbmRlcikgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGFyZ2V0Jyk7CisgICAgZXZlbnRTZW5kZXIuZHJhZ01vZGUgPSBmYWxzZTsKKyAgICB2YXIg
dGVzdHMgPSBbCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNl
IG1vdmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZz
ZXRMZWZ0ICsgMywgdGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAgICAgICB9LCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBkb3duJyk7CisgICAgICAgICAgICBldmVudFNl
bmRlci5tb3VzZURvd24oKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBk
ZWJ1ZygnTW91c2UgaG9sZCBkb3duLCBtb3ZlJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5t
b3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDEzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7
CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIHVwJyk7
CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgICAgIH0KKyAgICBdOwor
CisgICAgdmFyIGkgPSAwOworICAgIGZ1bmN0aW9uIG5leHRUZXN0KCkgeworICAgICAgICBpZiAo
aSA8IHRlc3RzLmxlbmd0aCkgeworICAgICAgICAgICAgcnVuVGVzdCh0ZXN0c1tpKytdLCBuZXh0
VGVzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0c0RvbmUoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBuZXh0VGVzdCgpOworfQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2Ut
Y3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNWQw
NjQ1ZTliNzYxMTNmN2M0MWVkYWQ5ZjI2Y2ZmZTk0ZjdlNjkxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxNiBAQAorVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBl
dmVudCBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK0J1ZyA4NTM0MworCisKK1RFU1QgQ0FTRTogTW91c2UgaWRsZSwgY2hhbmdlIGN1
cnNvciBzaG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50CitDdXJzb3IgSW5mbzogdHlwZT1Q
b2ludGVyIGhvdFNwb3Q9MCwwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9MCwwCisK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3Zl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3Zl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzQ1OTgyMWNkMzMyNmFhMmQ4ZTQ2ZThhZjg3MjBhNjg5M2JjNmU1
MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNv
ci1uby1tb3VzZW1vdmUuaHRtbApAQCAtMCwwICsxLDU1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzQzPkJ1ZyA4NTM0MzwvYT48L3A+Cis8ZGl2
IGlkPSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0iY3Vyc29y
OmRlZmF1bHQiPk1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNl
bW92ZSBldmVudDwvZGl2PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUg
ZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3IuIik7CisKK2lmICghd2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJU
cmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhl
cmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZh
ciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgIGRlYnVnKCdU
RVNUIENBU0U6ICcgKyBub2RlLnRleHRDb250ZW50KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1v
dmVUbyhub2RlLm9mZnNldExlZnQgKyAzLCBub2RlLm9mZnNldFRvcCArIDMpOworICAgIGRlYnVn
KCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8o
ZG9jdW1lbnQpKTsKKyAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0
aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCdNb3VzZW1vdmUgZXZlbnQgc2hvdWxkIG5vdCBi
ZSBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvcicpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICB9KTsKKyAgICBub2RlLnN0eWxlLmN1cnNvciA9ICdoZWxwJzsKKyAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50
ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcn
KTsKKyAgICB9LCAwKTsKKworICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgY2hhbmdlIHRv
IHJlc29sdmUuIEZha2UgbW91c2Vtb3ZlIGV2ZW50IHRoYXQgY2F1c2VkIGJ1ZywgaXMgdXNpbmcg
YSB0aW1lcgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Cisg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIDE1MCk7Cit9CisKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0
YXRpb25zCmluZGV4IDc0OGZlMDkzYmFhMWQwM2JiMDg0MTE2YzlkNDRjZTk0OTUwZjkxMTYuLjJj
YzI5MjM2ZjVlMTAwNDRlZTJjZjdiYmY4YzkzMTY3MTE1Yjc1ZjAgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMzMyLDMgKzEzMzIsNiBAQCB3ZWJraXQu
b3JnL2IvMTA5MjA5IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2JpZGktaWdub3JlZC1mb3ItZmly
c3QtY2hpbGQtaW5saW5lLgogCiAjIENyYXNoaW5nIGFmdGVyIGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzEwNTY2Nwogd2Via2l0Lm9yZy9iLzEwOTIzMiBbIERlYnVnIF0gaW5zcGVjdG9yL2RlYnVnZ2Vy
L2RlYnVnZ2VyLXJlbG9hZC1vbi1wYXVzZS5odG1sIFsgQ3Jhc2ggXQorCisjIE1hYyBmYWlscyBj
dXJzb3IgY2hhbmdlIHRlc3QgZm9yIHVua25vd24gcmVhc29ucword2Via2l0Lm9yZy9iLzEwMzg1
NyBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188520</attachid>
            <date>2013-02-15 02:20:36 -0800</date>
            <delta_ts>2013-02-15 02:29:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130215121656.patch</filename>
            <type>text/plain</type>
            <size>22445</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDg5ZDQ5YzkzOGE2OTBk
ZGQ4NmNhZGJkZmE1OTZmMGY3YjdkZmJmYS4uOGY0NGQzYWUxN2U5MzQwMWJlNzM2NTI4ZWQzN2Qz
YTIxNjUzZjk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEzLTAyLTE1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBGaXhlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg1MzQzIChtb3VzZW1vdmUgZXZlbnQgb24gY3Vyc29yIGNoYW5nZSkKKyAg
ICAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0
MSAobm8gY3Vyc29yIGNoYW5nZSB3aGVuIG1vdXNlIGJ1dHRvbiBkb3duKQorCisgICAgICAgIFRl
c3RzOiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbAorCisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OkV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3Vyc29y
VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2NoZWR1bGVDdXJzb3JVcGRhdGUpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIChFdmVudEhhbmRsZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlTm9u
SWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmFyZUN1cnNvcnNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGVEaWRD
aGFuZ2UpOgorCiAyMDEzLTAyLTExICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBNYWtlIFdlYlZUVFRva2VuaXplciBzdG9wIGluaGVyaXRpbmcgZnJvbSBNYXJrdXBU
b2tlbml6ZXJCYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZmI2MzFm
N2IxMWI4ODc3ZTUwZjgyNWU2ZTFhODczNzkxNWM4MTZkZi4uNjAxNzcyNmM3MDg0YmQxYmE5M2U4
NDY5NzcyYWQ1ZWQ5ZTJlNWE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtMTQ0LDYgKzE0NCwxMCBAQCB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiBjb25zdCBkb3Vi
bGUgZmFrZU1vdXNlTW92ZVNob3J0SW50ZXJ2YWwgPSAwLjE7CiBjb25zdCBkb3VibGUgZmFrZU1v
dXNlTW92ZUxvbmdJbnRlcnZhbCA9IDAuMjUwOwogCisvLyBUaGUgYW1vdW50IG9mIHRpbWUgdG8g
d2FpdCBmb3IgYSBjdXJzb3IgdXBkYXRlIG9uIHN0eWxlIGFuZCBsYXlvdXQgY2hhbmdlcworLy8g
U2V0IHRvIDUwSHosIG5vIG5lZWQgdG8gYmUgZmFzdGVyIHRoYW4gY29tbW9uIHNjcmVlbiByZWZy
ZXNoIHJhdGUKK2NvbnN0IGRvdWJsZSBjdXJzb3JVcGRhdGVJbnRlcnZhbCA9IDAuMDI7CisKIGNv
bnN0IGludCBtYXhpbXVtQ3Vyc29yU2l6ZSA9IDEyODsKICNpZiBFTkFCTEUoTU9VU0VfQ1VSU09S
X1NDQUxFKQogLy8gSXQncyBwcmV0dHkgdW5saWtlbHkgdGhhdCBhIHNjYWxlIG9mIGxlc3MgdGhh
biBvbmUgd291bGQgZXZlciBiZSB1c2VkLiBCdXQgYWxsIHdlIHJlYWxseQpAQCAtMzE5LDYgKzMy
Myw3IEBAIEV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVyKEZyYW1lKiBmcmFtZSkKICAgICAsIG1f
bW91c2VEb3duV2FzU2luZ2xlQ2xpY2tJblNlbGVjdGlvbihmYWxzZSkKICAgICAsIG1fc2VsZWN0
aW9uSW5pdGlhdGlvblN0YXRlKEhhdmVOb3RTdGFydGVkU2VsZWN0aW9uKQogICAgICwgbV9ob3Zl
clRpbWVyKHRoaXMsICZFdmVudEhhbmRsZXI6OmhvdmVyVGltZXJGaXJlZCkKKyAgICAsIG1fY3Vy
c29yVGltZXIodGhpcywgJkV2ZW50SGFuZGxlcjo6Y3Vyc29yVGltZXJGaXJlZCkKICAgICAsIG1f
YXV0b3Njcm9sbENvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEF1dG9zY3JvbGxDb250cm9sbGVyKSkK
ICAgICAsIG1fbW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsKGZhbHNlKQogICAgICwgbV9tb3Vz
ZURvd25XYXNJblN1YmZyYW1lKGZhbHNlKQpAQCAtMzY4LDYgKzM3Myw3IEBAIERyYWdTdGF0ZSYg
RXZlbnRIYW5kbGVyOjpkcmFnU3RhdGUoKQogdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyKCkKIHsK
ICAgICBtX2hvdmVyVGltZXIuc3RvcCgpOworICAgIG1fY3Vyc29yVGltZXIuc3RvcCgpOwogICAg
IG1fZmFrZU1vdXNlTW92ZUV2ZW50VGltZXIuc3RvcCgpOwogICAgIG1fcmVzaXplTGF5ZXIgPSAw
OwogICAgIG1fbm9kZVVuZGVyTW91c2UgPSAwOwpAQCAtMTIzNyw3ICsxMjQzLDUwIEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUqIG5vZGUsIGJvb2wgaXNPdmVyTGluaywg
Ym9vbCBzaGlmdEtleSkKICAgICByZXR1cm4gKChpc092ZXJMaW5rIHx8IGlzU3VibWl0SW1hZ2Uo
bm9kZSkpICYmICghZWRpdGFibGUgfHwgZWRpdGFibGVMaW5rRW5hYmxlZCkpOwogfQogCi1PcHRp
b25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzJiBldmVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIEV2ZW50
SGFuZGxlcjo6Y3Vyc29yVGltZXJGaXJlZChUaW1lcjxFdmVudEhhbmRsZXI+KikKK3sKKyAgICBt
X2hvdmVyVGltZXIuc3RvcCgpOworCisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFTU0VSVCht
X2ZyYW1lLT5kb2N1bWVudCgpKTsKKworICAgIHVwZGF0ZUN1cnNvcigpOworfQorCit2b2lkIEV2
ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKCkKK3sKKyAgICBpZiAobV9tb3VzZVBvc2l0aW9uSXNV
bmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2Zy
YW1lLT5zZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmRldmljZVN1
cHBvcnRzTW91c2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0g
bV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+aXNPbnNjcmVlbigpIHx8
ICFtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBib29sIHNoaWZ0S2V5OworICAgIGJvb2wgY3RybEtleTsKKyAgICBi
b29sIGFsdEtleTsKKyAgICBib29sIG1ldGFLZXk7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0ZShzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRh
S2V5KTsKKworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRP
bmx5KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1f
bGFzdEtub3duTW91c2VQb3NpdGlvbikpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRl
clZpZXcoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOworCisgICAgT3B0aW9uYWxDdXJzb3Ig
b3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IocmVzdWx0LCBzaGlmdEtleSk7CisgICAgaWYg
KG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkpIHsKKyAgICAgICAgbV9jdXJyZW50TW91
c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5jdXJzb3IoKTsKKyAgICAgICAgdmlldy0+c2V0Q3Vy
c29yKG1fY3VycmVudE1vdXNlQ3Vyc29yKTsKKyAgICB9Cit9CisKK09wdGlvbmFsQ3Vyc29yIEV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9v
bCBzaGlmdEtleSkKIHsKICAgICBpZiAobV9yZXNpemVMYXllciAmJiBtX3Jlc2l6ZUxheWVyLT5p
blJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOwpAQCAtMTI1MCw4
ICsxMjk5LDE2IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAgICAgICAgIHJldHVybiBOb0N1
cnNvckNoYW5nZTsKICNlbmRpZgogCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUo
KTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkg
OiAwOworICAgIE5vZGUqIG5vZGUgPSByZXN1bHQudGFyZ2V0Tm9kZSgpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOworICAgIGJvb2wgb3JpZ2luYWxJc1Rl
eHQgPSBub2RlLT5pc1RleHROb2RlKCk7CisgICAgaWYgKG5vZGUgJiYgb3JpZ2luYWxJc1RleHQp
CisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/
IHJlbmRlcmVyLT5zdHlsZSgpIDogMDsKICAgICBib29sIGhvcml6b250YWxUZXh0ID0gIXN0eWxl
IHx8IHN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGNvbnN0IEN1cnNvciYg
aUJlYW0gPSBob3Jpem9udGFsVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiB2ZXJ0aWNhbFRleHRDdXJz
b3IoKTsKQEAgLTEyNjcsNyArMTMyNCw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6
c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAg
ICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgQ3Vyc29yIG92ZXJyaWRlQ3Vyc29yOwotICAgICAg
ICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50KGV2ZW50LmxvY2Fs
UG9pbnQoKSksIG92ZXJyaWRlQ3Vyc29yKSkgeworICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5n
ZXRDdXJzb3Iocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpLCBvdmVycmlkZUN1
cnNvcikpIHsKICAgICAgICAgY2FzZSBTZXRDdXJzb3JCYXNlZE9uU3R5bGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTZXRDdXJzb3I6CkBAIC0xMzE0LDE5ICsxMzcxLDE5IEBA
IE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBzd2l0Y2ggKHN0eWxlID8gc3R5bGUtPmN1
cnNvcigpIDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRPOiB7Ci0gICAgICAg
IGJvb2wgZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7Cisg
ICAgICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpOwogCi0g
ICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2ZW50LmlzT3ZlckxpbmsoKSwgZXZlbnQu
ZXZlbnQoKS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYgKHVzZUhhbmRDdXJzb3Iobm9kZSwgcmVz
dWx0LlVSTEVsZW1lbnQoKSAmJiByZXN1bHQuVVJMRWxlbWVudCgpLT5pc0xpbmsoKSwgc2hpZnRL
ZXkpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsKIAogICAgICAgICBib29sIGlu
UmVzaXplciA9IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlm
IChSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAg
ICAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9s
KHZpZXctPndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9s
KHZpZXctPndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50
KCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChlZGl0YWJsZSB8
fCAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0
aW9uKCkpKSAmJiAhaW5SZXNpemVyICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlmICgoZWRpdGFi
bGUgfHwgKG9yaWdpbmFsSXNUZXh0ICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAh
aW5SZXNpemVyICYmICFyZXN1bHQuc2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICByZXR1cm4gaUJl
YW07CiAgICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiAgICAgfQpAQCAtMTY2NCw2ICsx
NzIxLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKIAogICAgIGlmIChtX2hvdmVyVGltZXIu
aXNBY3RpdmUoKSkKICAgICAgICAgbV9ob3ZlclRpbWVyLnN0b3AoKTsKKyAgICBpZiAobV9jdXJz
b3JUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2N1cnNvclRpbWVyLnN0b3AoKTsKIAogICAg
IGNhbmNlbEZha2VNb3VzZU1vdmVFdmVudCgpOwogCkBAIC0xNzM3LDcgKzE3OTYsNyBAQCBib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgICAgICBpZiAoc2Nyb2xsYmFyICYmICFtX21vdXNlUHJl
c3NlZCkKICAgICAgICAgICAgIHNjcm9sbGJhci0+bW91c2VNb3ZlZChtb3VzZUV2ZW50KTsgLy8g
SGFuZGxlIGhvdmVyIGVmZmVjdHMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB2aXN1YWwgZmVl
ZGJhY2sgb24gc2Nyb2xsYmFyIGhvdmVyaW5nLgogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3
ID0gbV9mcmFtZS0+dmlldygpKSB7Ci0gICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25h
bEN1cnNvciA9IHNlbGVjdEN1cnNvcihtZXYsIHNjcm9sbGJhcik7CisgICAgICAgICAgICBPcHRp
b25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVjdEN1cnNvcihtZXYuaGl0VGVzdFJlc3Vs
dCgpLCBtb3VzZUV2ZW50LnNoaWZ0S2V5KCkpOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsQ3Vy
c29yLmlzQ3Vyc29yQ2hhbmdlKCkpIHsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRNb3VzZUN1
cnNvciA9IG9wdGlvbmFsQ3Vyc29yLmN1cnNvcigpOwogICAgICAgICAgICAgICAgIHZpZXctPnNl
dEN1cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7CkBAIC0yOTM3LDYgKzI5OTYsMTIgQEAgdm9p
ZCBFdmVudEhhbmRsZXI6OnNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgpCiAgICAgICAgIG1faG92
ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKK3ZvaWQgRXZlbnRIYW5kbGVyOjpzY2hlZHVs
ZUN1cnNvclVwZGF0ZSgpCit7CisgICAgaWYgKCFtX2N1cnNvclRpbWVyLmlzQWN0aXZlKCkpCisg
ICAgICAgIG1fY3Vyc29yVGltZXIuc3RhcnRPbmVTaG90KGN1cnNvclVwZGF0ZUludGVydmFsKTsK
K30KKwogdm9pZCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigp
CiB7CiAgICAgaWYgKG1fbW91c2VQcmVzc2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgK
aW5kZXggM2I4MzYwMjI1YjU4ZTI2NWE1NWViNzhkOTAxZTc3YzRkM2I0NGVmOS4uMzEwZjAxMGE1
ZTU5ZDJiMGY0ZjEwODRkYWQyY2YwMWNhNTJiZDg4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5oCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIHNj
aGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgpOworICAgIHZvaWQgc2NoZWR1bGVDdXJzb3JVcGRhdGUo
KTsKIAogICAgIHZvaWQgc2V0UmVzaXppbmdGcmFtZVNldChIVE1MRnJhbWVTZXRFbGVtZW50Kik7
CiAKQEAgLTI1MSw2ICsyNTIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgdXNlSGFu
ZEN1cnNvcihOb2RlKiwgYm9vbCBpc092ZXJMaW5rLCBib29sIHNoaWZ0S2V5KTsKKyAgICB2b2lk
IHVwZGF0ZUN1cnNvcigpOwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBA
IC0yNzcsOCArMjc5LDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIGhhbmRsZU1vdXNl
UmVsZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAotICAg
IE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiwgU2Nyb2xsYmFyKik7CisgICAgT3B0aW9uYWxDdXJzb3Igc2VsZWN0Q3Vyc29yKGNv
bnN0IEhpdFRlc3RSZXN1bHQmLCBib29sIHNoaWZ0S2V5KTsKKwogICAgIHZvaWQgaG92ZXJUaW1l
ckZpcmVkKFRpbWVyPEV2ZW50SGFuZGxlcj4qKTsKKyAgICB2b2lkIGN1cnNvclRpbWVyRmlyZWQo
VGltZXI8RXZlbnRIYW5kbGVyPiopOwogCiAgICAgYm9vbCBsb2dpY2FsU2Nyb2xsT3ZlcmZsb3co
U2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIE5vZGUqIHN0YXJ0aW5n
Tm9kZSA9IDApOwogICAgIApAQCAtNDA2LDYgKzQxMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3BhblNjcm9sbEJ1dHRvblByZXNzZWQ7CiAKICAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1faG92
ZXJUaW1lcjsKKyAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1fY3Vyc29yVGltZXI7CiAKICAgICBP
d25QdHI8QXV0b3Njcm9sbENvbnRyb2xsZXI+IG1fYXV0b3Njcm9sbENvbnRyb2xsZXI7CiAgICAg
Ym9vbCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggZDMxZGI3MzczMmM2MGJkMDk4MzhmOTJkNDhiOTEz
ODNiNTBlZGI4Mi4uNDE0ZjE5MWM0NTZiZTVkYzQ0ZjRkMDcwZjI0Y2VjNGRjZmM4NzM4MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE3NTgsNiArMTc1
OCwxNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0UHNldWRvU3R5bGUoUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gcHNldWRvU3R5bGUpCiAgICAgc2V0U3R5bGUocHNldWRvU3R5bGUpOwogfQogCitz
dGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICBBU1NFUlQoYS0+Y3Vyc29ycygp
ICE9IGItPmN1cnNvcnMoKSk7CisgICAgcmV0dXJuIGEtPmN1cnNvcnMoKSAmJiBiLT5jdXJzb3Jz
KCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vyc29ycygpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikKK3sKKyAgICByZXR1cm4gYS0+Y3Vyc29yKCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEt
PmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwgYXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNF
cXVhbChhLCBiKSk7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBpZiAobV9zdHlsZSA9PSBzdHlsZSkgewpAQCAt
MTc5Niw2ICsxODA3LDExIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBzdHlsZSkKIAogICAgIHN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxl
LmdldCgpKTsKIAorICAgIGlmIChvbGRTdHlsZS5nZXQoKSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9s
ZFN0eWxlLmdldCgpLCB0aGlzLT5zdHlsZSgpKSkgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2No
ZWR1bGVDdXJzb3JVcGRhdGUoKTsKKyAgICB9CisKICAgICAvLyBGSVhNRTogfHRoaXN8IG1pZ2h0
IGJlIGRlc3Ryb3llZCBoZXJlLiBUaGlzIGNhbiBjdXJyZW50bHkgaGFwcGVuIGZvciBhIFJlbmRl
clRleHRGcmFnbWVudCB3aGVuCiAgICAgLy8gaXRzIGZpcnN0LWxldHRlciBibG9jayBnZXRzIGFu
IHVwZGF0ZSBpbiBSZW5kZXJUZXh0RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlLiBGb3IgUmVuZGVy
VGV4dEZyYWdtZW50KHMpLAogICAgIC8vIHdlIHdpbGwgc2FmZWx5IGJhaWwgb3V0IHdpdGggdGhl
IGRvZXNOb3ROZWVkTGF5b3V0IGZsYWcuIFdlIG1pZ2h0IHdhbnQgdG8gYnJvYWRlbiB0aGlzIGNv
bmRpdGlvbgpAQCAtMTkyMSwxNyArMTkzNyw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZVdp
bGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTCiAg
ICAgfQogfQogCi1zdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBBU1NFUlQo
YS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7Ci0gICAgcmV0dXJuIGEtPmN1cnNvcnMoKSAm
JiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vyc29ycygpOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICByZXR1cm4gYS0+Y3Vyc29yKCkgPT0gYi0+Y3Vy
c29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwgYXJlTm9uSWRlbnRpY2Fs
Q3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Ci19Ci0KIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KQogewogCkBAIC0xOTY1LDExICsxOTcwLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAog
ICAgIC8vIERvbid0IGNoZWNrIGZvciByZXBhaW50IGhlcmU7IHdlIG5lZWQgdG8gd2FpdCB1bnRp
bCB0aGUgbGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1cGRhdGVkIGJ5IHN1YmNsYXNzZXMgYmVmb3Jl
IHdlIGtub3cgaWYgd2UgaGF2ZSB0byByZXBhaW50IChpbiBzZXRTdHlsZSgpKS4KLQotICAgIGlm
IChvbGRTdHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewotICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAg
fQogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxk
cmVuKGJvb2wgYmxvY2tDaGlsZHJlbk9ubHkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWYyZWZhZjE4ZWQ0MmZjOGMwNDMy
NTE4YTY3YWRkMzk3YjY3ZjUzNi4uNzAxMDcwNGFjMjM0MzVmYzAzZGRlZmE1OTE3N2ZiZjBlNzg4
OTQyNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAyLTE1ICBBaXZvIFBhYXMgIDxhaXZv
cGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0eWxl
IGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVudAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAgIENo
YW5naW5nIENTUyBjdXJzb3Igc2hvdWxkIHdvcmsgbm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBp
cyBwcmVzc2VkIG9yIG5vdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTMzNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgY2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwgbW91
c2Vkb3duLCBtb3VzZXVwIGFuZCBtb3VzZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2UgYnV0dG9u
IGJlaW5nIGhvbGQgZG93bi4gQWxzbyBhZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91c2Vt
b3ZlCisgICAgICAgIGV2ZW50IGlzIG5vdCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdoaWxl
IG1vdXNlIGlzIG5vdCBtb3ZpbmcuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJz
b3ItY2hhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLWNoYW5nZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3Vz
ZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczogVGhlIG5ldyBjdXJzb3IgY2hhbmdlIHRl
c3QgZmFpbHMgb24gbWFjCisKIDIwMTMtMDItMTEgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBNb3ZlIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQgZnJvbSBsYXlv
dXRUZXN0Q29udHJvbGxlciB0byB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ4YjdhYmVhNzJhNzEwMTZkYTE0MDM0OTkzNWU2MDFhOTNjMjk0M2QK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3It
Y2hhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBACitUZXN0IHRoYXQgbW91c2UgY3Vy
c29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZlbnRzLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworQnVnIDUzMzQxCisKKworTW91c2UgbW92ZQorQ3Vyc29yIElu
Zm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitNb3VzZSBkb3duCitDdXJzb3IgSW5mbzogdHlw
ZT1Qcm9ncmVzcyBob3RTcG90PTAsMAorCitNb3VzZSBob2xkIGRvd24sIG1vdmUKK0N1cnNvciBJ
bmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKworTW91c2UgdXAKK0N1cnNvciBJbmZvOiB0eXBl
PUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNl
LWN1cnNvci1jaGFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNv
ci1jaGFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDQxYmUxYmEwYjZkY2ZhNWU4M2ZiZjdkZDBhYjhl
YjViZjM1ODMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLWNoYW5nZS5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+PGEgaHJlZj0iaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMzQxIj5CdWcgNTMzNDE8L2E+PC9wPgor
PGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAgIDxkaXYgaWQ9InRhcmdldCIgb25Nb3VzZURv
d249InN0eWxlLmN1cnNvcj0ncHJvZ3Jlc3MnO2V2ZW50LnByZXZlbnREZWZhdWx0KCk7IiBvbk1v
dXNlTW92ZT0ic3R5bGUuY3Vyc29yPSdwb2ludGVyJzsiIG9uTW91c2VVcD0ic3R5bGUuY3Vyc29y
PSdoZWxwJzsiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiPlBsYXkgd2l0aCBtb3VzZSBvbiB0aGlz
IGVsZW1lbnQuIEN1cnNvcnMgY2hhbmdlIG9uIGV2ZW50cyAtIG1vdXNlbW92ZTogcG9pbnRlciho
YW5kKSwgbW91c2Vkb3duOiBwcm9ncmVzcywgbW91c2V1cDogaGVscC48L2Rpdj4KKzwvZGl2Pgor
PGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZl
bnRzLiIpOworCitpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHRlc3RGYWlsZWQoJ1Ro
aXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScpOworfQorCitpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit9CisKK2Z1
bmN0aW9uIHJ1blRlc3QocHJlcGFyZSwgbmV4dCkgeworICAgIHByZXBhcmUoKTsKKyAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5k
b3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0sIDApOworfQorCitmdW5jdGlvbiB0ZXN0
c0RvbmUoKSB7CisgICAgLy8gVGhpcyB0ZXh0IGlzIHJlZHVuZGFudCB3aXRoIHRoZSB0ZXN0IG91
dHB1dCAtIGhpZGUgaXQKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1jb250YWlu
ZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisv
LyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAo
d2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0YXJnZXQnKTsKKyAgICBldmVudFNlbmRlci5kcmFnTW9kZSA9IGZhbHNlOworICAg
IHZhciB0ZXN0cyA9IFsKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1Zygn
TW91c2UgbW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0
Lm9mZnNldExlZnQgKyAzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIGRvd24nKTsKKyAgICAgICAgICAgIGV2
ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGRlYnVnKCdNb3VzZSBob2xkIGRvd24sIG1vdmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMTMsIHRhcmdldC5vZmZzZXRUb3Ag
KyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2Ug
dXAnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAgICAgfQorICAg
IF07CisKKyAgICB2YXIgaSA9IDA7CisgICAgZnVuY3Rpb24gbmV4dFRlc3QoKSB7CisgICAgICAg
IGlmIChpIDwgdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICBydW5UZXN0KHRlc3RzW2krK10s
IG5leHRUZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RzRG9uZSgpOwor
ICAgICAgICB9CisgICAgfQorICAgIG5leHRUZXN0KCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
b3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE1ZDA2NDVlOWI3NjExM2Y3YzQxZWRhZDlmMjZjZmZlOTRmN2U2OTEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0IHRoYXQgdGhlcmUgaXMgbm8gbW91c2Vt
b3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworQnVnIDg1MzQzCisKKworVEVTVCBDQVNFOiBNb3VzZSBpZGxlLCBjaGFu
Z2UgY3Vyc29yIHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUgZXZlbnQKK0N1cnNvciBJbmZvOiB0
eXBlPVBvaW50ZXIgaG90U3BvdD0wLDAKK0N1cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0w
LDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3Vz
ZW1vdmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3Vz
ZW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDU5ODIxY2QzMzI2YWEyZDhlNDZlOGFmODcyMGE2ODkz
YmM2ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2Ut
Y3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPHA+PGEgaHJlZj1odHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDM+QnVnIDg1MzQzPC9hPjwvcD4K
KzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQiIHN0eWxlPSJj
dXJzb3I6ZGVmYXVsdCI+TW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUg
bW91c2Vtb3ZlIGV2ZW50PC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNl
bW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4iKTsKKworaWYgKCF3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJl
bmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgd2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2Vm
dWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZGVi
dWcoJ1RFU1QgQ0FTRTogJyArIG5vZGUudGV4dENvbnRlbnQpOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlTW92ZVRvKG5vZGUub2Zmc2V0TGVmdCArIDMsIG5vZGUub2Zmc2V0VG9wICsgMyk7CisgICAg
ZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29y
SW5mbyhkb2N1bWVudCkpOworICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ01vdXNlbW92ZSBldmVudCBzaG91bGQg
bm90IGJlIGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yJyk7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgIH0pOworICAgIG5vZGUuc3R5bGUuY3Vyc29yID0gJ2hlbHAnOworICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRv
dy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVi
dWcoJycpOworICAgIH0sIDApOworCisgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBjaGFu
Z2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1vdmUgZXZlbnQgdGhhdCBjYXVzZWQgYnVnLCBpcyB1
c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgMTUwKTsKK30KKworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RF
eHBlY3RhdGlvbnMKaW5kZXggNzQ4ZmUwOTNiYWExZDAzYmIwODQxMTZjOWQ0NGNlOTQ5NTBmOTEx
Ni4uMmNjMjkyMzZmNWUxMDA0NGVlMmNmN2JiZjhjOTMxNjcxMTViNzVmMCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEzMzIsMyArMTMzMiw2IEBAIHdl
YmtpdC5vcmcvYi8xMDkyMDkgZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvYmlkaS1pZ25vcmVkLWZv
ci1maXJzdC1jaGlsZC1pbmxpbmUuCiAKICMgQ3Jhc2hpbmcgYWZ0ZXIgaHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTA1NjY3CiB3ZWJraXQub3JnL2IvMTA5MjMyIFsgRGVidWcgXSBpbnNwZWN0b3IvZGVi
dWdnZXIvZGVidWdnZXItcmVsb2FkLW9uLXBhdXNlLmh0bWwgWyBDcmFzaCBdCisKKyMgTWFjIGZh
aWxzIGN1cnNvciBjaGFuZ2UgdGVzdCBmb3IgdW5rbm93biByZWFzb25zCit3ZWJraXQub3JnL2Iv
MTAzODU3IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188522</attachid>
            <date>2013-02-15 02:34:33 -0800</date>
            <delta_ts>2013-02-15 03:30:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130215123053.patch</filename>
            <type>text/plain</type>
            <size>22244</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDg5ZDQ5YzkzOGE2OTBk
ZGQ4NmNhZGJkZmE1OTZmMGY3YjdkZmJmYS4uOGY0NGQzYWUxN2U5MzQwMWJlNzM2NTI4ZWQzN2Qz
YTIxNjUzZjk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEzLTAyLTE1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBGaXhlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg1MzQzIChtb3VzZW1vdmUgZXZlbnQgb24gY3Vyc29yIGNoYW5nZSkKKyAg
ICAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0
MSAobm8gY3Vyc29yIGNoYW5nZSB3aGVuIG1vdXNlIGJ1dHRvbiBkb3duKQorCisgICAgICAgIFRl
c3RzOiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbAorCisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OkV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3Vyc29y
VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2NoZWR1bGVDdXJzb3JVcGRhdGUpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIChFdmVudEhhbmRsZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlTm9u
SWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmFyZUN1cnNvcnNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGVEaWRD
aGFuZ2UpOgorCiAyMDEzLTAyLTExICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBNYWtlIFdlYlZUVFRva2VuaXplciBzdG9wIGluaGVyaXRpbmcgZnJvbSBNYXJrdXBU
b2tlbml6ZXJCYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZmI2MzFm
N2IxMWI4ODc3ZTUwZjgyNWU2ZTFhODczNzkxNWM4MTZkZi4uYmE0ZDE2Y2RhMjc4OTVhMDVhMzUz
M2RmMTQ4YWFkOTQ2YjVlZjM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtMTQ0LDYgKzE0NCwxMCBAQCB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiBjb25zdCBkb3Vi
bGUgZmFrZU1vdXNlTW92ZVNob3J0SW50ZXJ2YWwgPSAwLjE7CiBjb25zdCBkb3VibGUgZmFrZU1v
dXNlTW92ZUxvbmdJbnRlcnZhbCA9IDAuMjUwOwogCisvLyBUaGUgYW1vdW50IG9mIHRpbWUgdG8g
d2FpdCBmb3IgYSBjdXJzb3IgdXBkYXRlIG9uIHN0eWxlIGFuZCBsYXlvdXQgY2hhbmdlcworLy8g
U2V0IHRvIDUwSHosIG5vIG5lZWQgdG8gYmUgZmFzdGVyIHRoYW4gY29tbW9uIHNjcmVlbiByZWZy
ZXNoIHJhdGUKK2NvbnN0IGRvdWJsZSBjdXJzb3JVcGRhdGVJbnRlcnZhbCA9IDAuMDI7CisKIGNv
bnN0IGludCBtYXhpbXVtQ3Vyc29yU2l6ZSA9IDEyODsKICNpZiBFTkFCTEUoTU9VU0VfQ1VSU09S
X1NDQUxFKQogLy8gSXQncyBwcmV0dHkgdW5saWtlbHkgdGhhdCBhIHNjYWxlIG9mIGxlc3MgdGhh
biBvbmUgd291bGQgZXZlciBiZSB1c2VkLiBCdXQgYWxsIHdlIHJlYWxseQpAQCAtMzE5LDYgKzMy
Myw3IEBAIEV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVyKEZyYW1lKiBmcmFtZSkKICAgICAsIG1f
bW91c2VEb3duV2FzU2luZ2xlQ2xpY2tJblNlbGVjdGlvbihmYWxzZSkKICAgICAsIG1fc2VsZWN0
aW9uSW5pdGlhdGlvblN0YXRlKEhhdmVOb3RTdGFydGVkU2VsZWN0aW9uKQogICAgICwgbV9ob3Zl
clRpbWVyKHRoaXMsICZFdmVudEhhbmRsZXI6OmhvdmVyVGltZXJGaXJlZCkKKyAgICAsIG1fY3Vy
c29yVGltZXIodGhpcywgJkV2ZW50SGFuZGxlcjo6Y3Vyc29yVGltZXJGaXJlZCkKICAgICAsIG1f
YXV0b3Njcm9sbENvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEF1dG9zY3JvbGxDb250cm9sbGVyKSkK
ICAgICAsIG1fbW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsKGZhbHNlKQogICAgICwgbV9tb3Vz
ZURvd25XYXNJblN1YmZyYW1lKGZhbHNlKQpAQCAtMzY4LDYgKzM3Myw3IEBAIERyYWdTdGF0ZSYg
RXZlbnRIYW5kbGVyOjpkcmFnU3RhdGUoKQogdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyKCkKIHsK
ICAgICBtX2hvdmVyVGltZXIuc3RvcCgpOworICAgIG1fY3Vyc29yVGltZXIuc3RvcCgpOwogICAg
IG1fZmFrZU1vdXNlTW92ZUV2ZW50VGltZXIuc3RvcCgpOwogICAgIG1fcmVzaXplTGF5ZXIgPSAw
OwogICAgIG1fbm9kZVVuZGVyTW91c2UgPSAwOwpAQCAtMTIzNyw4ICsxMjQzLDU0IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUqIG5vZGUsIGJvb2wgaXNPdmVyTGluaywg
Ym9vbCBzaGlmdEtleSkKICAgICByZXR1cm4gKChpc092ZXJMaW5rIHx8IGlzU3VibWl0SW1hZ2Uo
bm9kZSkpICYmICghZWRpdGFibGUgfHwgZWRpdGFibGVMaW5rRW5hYmxlZCkpOwogfQogCi1PcHRp
b25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzJiBldmVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit2b2lkIEV2ZW50
SGFuZGxlcjo6Y3Vyc29yVGltZXJGaXJlZChUaW1lcjxFdmVudEhhbmRsZXI+KikKK3sKKyAgICBt
X2N1cnNvclRpbWVyLnN0b3AoKTsKKworICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICBBU1NFUlQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisKKyAgICB1cGRhdGVDdXJzb3IoKTsKK30KKwordm9pZCBF
dmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvcigpCiB7CisgICAgaWYgKG1fbW91c2VQb3NpdGlvbklz
VW5rbm93bikKKyAgICAgICAgcmV0dXJuOworCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9m
cmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoc2V0dGluZ3MgJiYgIXNldHRpbmdzLT5kZXZpY2VT
dXBwb3J0c01vdXNlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogdmlldyA9
IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPmlzT25zY3JlZW4oKSB8
fCAhbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYm9vbCBzaGlmdEtleTsKKyAgICBib29sIGN0cmxLZXk7CisgICAg
Ym9vbCBhbHRLZXk7CisgICAgYm9vbCBtZXRhS2V5OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6Z2V0Q3VycmVudE1vZGlmaWVyU3RhdGUoc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0
YUtleSk7CisKKyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFk
T25seSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQodmlldy0+d2luZG93VG9Db250ZW50cyht
X2xhc3RLbm93bk1vdXNlUG9zaXRpb24pKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5k
ZXJWaWV3KCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE9wdGlvbmFsQ3Vyc29y
IG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0Q3Vyc29yKHJlc3VsdCwgc2hpZnRLZXkpOworICAgIGlm
IChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1v
dXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1
cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCitPcHRpb25hbEN1cnNvciBF
dmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJv
b2wgc2hpZnRLZXkpCit7CisgICAgaWYgKG1fY3Vyc29yVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9jdXJzb3JUaW1lci5zdG9wKCk7CisKICAgICBpZiAobV9yZXNpemVMYXllciAmJiBtX3Jl
c2l6ZUxheWVyLT5pblJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdl
OwogCkBAIC0xMjUwLDggKzEzMDIsMTYgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpz
ZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKICAgICAg
ICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOwogI2VuZGlmCiAKLSAgICBOb2RlKiBub2RlID0gZXZl
bnQudGFyZ2V0Tm9kZSgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlID8gbm9k
ZS0+cmVuZGVyZXIoKSA6IDA7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC50YXJnZXROb2RlKCk7
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisgICAgYm9v
bCBvcmlnaW5hbElzVGV4dCA9IG5vZGUtPmlzVGV4dE5vZGUoKTsKKyAgICBpZiAobm9kZSAmJiBv
cmlnaW5hbElzVGV4dCkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKKworICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogICAgIGJvb2wgaG9yaXpvbnRh
bFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAg
Y29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8gaUJlYW1DdXJzb3IoKSA6IHZl
cnRpY2FsVGV4dEN1cnNvcigpOwpAQCAtMTI2Nyw3ICsxMzI3LDcgQEAgT3B0aW9uYWxDdXJzb3Ig
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYgZXYKIAogICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICBDdXJzb3Igb3ZlcnJpZGVD
dXJzb3I7Ci0gICAgICAgIHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVkSW50UG9p
bnQoZXZlbnQubG9jYWxQb2ludCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7CisgICAgICAgIHN3aXRj
aCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQo
KSksIG92ZXJyaWRlQ3Vyc29yKSkgewogICAgICAgICBjYXNlIFNldEN1cnNvckJhc2VkT25TdHls
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldEN1cnNvcjoKQEAgLTEzMTQs
MTkgKzEzNzQsMTkgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3Io
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKIAogICAgIHN3aXRjaCAoc3R5
bGUgPyBzdHlsZS0+Y3Vyc29yKCkgOiBDVVJTT1JfQVVUTykgewogICAgIGNhc2UgQ1VSU09SX0FV
VE86IHsKLSAgICAgICAgYm9vbCBlZGl0YWJsZSA9IChub2RlICYmIG5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKTsKKyAgICAgICAgYm9vbCBlZGl0YWJsZSA9IChub2RlLT5yZW5kZXJlcklzRWRp
dGFibGUoKSk7CiAKLSAgICAgICAgaWYgKHVzZUhhbmRDdXJzb3Iobm9kZSwgZXZlbnQuaXNPdmVy
TGluaygpLCBldmVudC5ldmVudCgpLnNoaWZ0S2V5KCkpKQorICAgICAgICBpZiAodXNlSGFuZEN1
cnNvcihub2RlLCByZXN1bHQuVVJMRWxlbWVudCgpICYmIHJlc3VsdC5VUkxFbGVtZW50KCktPmlz
TGluaygpLCBzaGlmdEtleSkpCiAgICAgICAgICAgICByZXR1cm4gaGFuZEN1cnNvcigpOwogCiAg
ICAgICAgIGJvb2wgaW5SZXNpemVyID0gZmFsc2U7CiAgICAgICAgIGlmIChyZW5kZXJlcikgewog
ICAgICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdM
YXllcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUt
PnZpZXcoKSkKLSAgICAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlzUG9pbnRJ
blJlc2l6ZUNvbnRyb2wodmlldy0+d2luZG93VG9Db250ZW50cyhldmVudC5ldmVudCgpLnBvc2l0
aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlzUG9pbnRJ
blJlc2l6ZUNvbnRyb2wodmlldy0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQocmVz
dWx0LmxvY2FsUG9pbnQoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBp
ZiAoKGVkaXRhYmxlIHx8IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0KCkgJiYgbm9kZS0+
Y2FuU3RhcnRTZWxlY3Rpb24oKSkpICYmICFpblJlc2l6ZXIgJiYgIXNjcm9sbGJhcikKKyAgICAg
ICAgaWYgKChlZGl0YWJsZSB8fCAob3JpZ2luYWxJc1RleHQgJiYgbm9kZS0+Y2FuU3RhcnRTZWxl
Y3Rpb24oKSkpICYmICFpblJlc2l6ZXIgJiYgIXJlc3VsdC5zY3JvbGxiYXIoKSkKICAgICAgICAg
ICAgIHJldHVybiBpQmVhbTsKICAgICAgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKICAgICB9
CkBAIC0xNzM3LDcgKzE3OTcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3Zl
RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgICAgICBp
ZiAoc2Nyb2xsYmFyICYmICFtX21vdXNlUHJlc3NlZCkKICAgICAgICAgICAgIHNjcm9sbGJhci0+
bW91c2VNb3ZlZChtb3VzZUV2ZW50KTsgLy8gSGFuZGxlIGhvdmVyIGVmZmVjdHMgb24gcGxhdGZv
cm1zIHRoYXQgc3VwcG9ydCB2aXN1YWwgZmVlZGJhY2sgb24gc2Nyb2xsYmFyIGhvdmVyaW5nLgog
ICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKSB7Ci0gICAgICAg
ICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVjdEN1cnNvcihtZXYsIHNj
cm9sbGJhcik7CisgICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNl
bGVjdEN1cnNvcihtZXYuaGl0VGVzdFJlc3VsdCgpLCBtb3VzZUV2ZW50LnNoaWZ0S2V5KCkpOwog
ICAgICAgICAgICAgaWYgKG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkpIHsKICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRNb3VzZUN1cnNvciA9IG9wdGlvbmFsQ3Vyc29yLmN1cnNvcigp
OwogICAgICAgICAgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7
CkBAIC0yOTM3LDYgKzI5OTcsMTIgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNjaGVkdWxlSG92ZXJT
dGF0ZVVwZGF0ZSgpCiAgICAgICAgIG1faG92ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAK
K3ZvaWQgRXZlbnRIYW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0ZSgpCit7CisgICAgaWYgKCFt
X2N1cnNvclRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fY3Vyc29yVGltZXIuc3RhcnRPbmVT
aG90KGN1cnNvclVwZGF0ZUludGVydmFsKTsKK30KKwogdm9pZCBFdmVudEhhbmRsZXI6OmRpc3Bh
dGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigpCiB7CiAgICAgaWYgKG1fbW91c2VQcmVzc2VkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggM2I4MzYwMjI1YjU4ZTI2NWE1NWViNzhk
OTAxZTc3YzRkM2I0NGVmOS4uMzEwZjAxMGE1ZTU5ZDJiMGY0ZjEwODRkYWQyY2YwMWNhNTJiZDg4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVi
bGljOgogI2VuZGlmCiAKICAgICB2b2lkIHNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgpOworICAg
IHZvaWQgc2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsKIAogICAgIHZvaWQgc2V0UmVzaXppbmdGcmFt
ZVNldChIVE1MRnJhbWVTZXRFbGVtZW50Kik7CiAKQEAgLTI1MSw2ICsyNTIsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogICAgIGJvb2wgdXNlSGFuZEN1cnNvcihOb2RlKiwgYm9vbCBpc092ZXJMaW5r
LCBib29sIHNoaWZ0S2V5KTsKKyAgICB2b2lkIHVwZGF0ZUN1cnNvcigpOwogCiBwcml2YXRlOgog
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0yNzcsOCArMjc5LDEwIEBAIHByaXZhdGU6CiAj
ZW5kaWYKICAgICBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmKTsKIAotICAgIE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihj
b25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgU2Nyb2xsYmFyKik7CisgICAgT3B0
aW9uYWxDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBib29sIHNoaWZ0
S2V5KTsKKwogICAgIHZvaWQgaG92ZXJUaW1lckZpcmVkKFRpbWVyPEV2ZW50SGFuZGxlcj4qKTsK
KyAgICB2b2lkIGN1cnNvclRpbWVyRmlyZWQoVGltZXI8RXZlbnRIYW5kbGVyPiopOwogCiAgICAg
Ym9vbCBsb2dpY2FsU2Nyb2xsT3ZlcmZsb3coU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHksIE5vZGUqIHN0YXJ0aW5nTm9kZSA9IDApOwogICAgIApAQCAtNDA2LDYgKzQx
MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhblNjcm9sbEJ1dHRvblByZXNzZWQ7CiAKICAg
ICBUaW1lcjxFdmVudEhhbmRsZXI+IG1faG92ZXJUaW1lcjsKKyAgICBUaW1lcjxFdmVudEhhbmRs
ZXI+IG1fY3Vyc29yVGltZXI7CiAKICAgICBPd25QdHI8QXV0b3Njcm9sbENvbnRyb2xsZXI+IG1f
YXV0b3Njcm9sbENvbnRyb2xsZXI7CiAgICAgYm9vbCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Nj
cm9sbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggZDMx
ZGI3MzczMmM2MGJkMDk4MzhmOTJkNDhiOTEzODNiNTBlZGI4Mi4uNDE0ZjE5MWM0NTZiZTVkYzQ0
ZjRkMDcwZjI0Y2VjNGRjZmM4NzM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKQEAgLTE3NTgsNiArMTc1OCwxNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0
UHNldWRvU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGUpCiAgICAgc2V0
U3R5bGUocHNldWRvU3R5bGUpOwogfQogCitzdGF0aWMgYm9vbCBhcmVOb25JZGVudGljYWxDdXJz
b3JMaXN0c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikK
K3sKKyAgICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7CisgICAgcmV0dXJu
IGEtPmN1cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMoKSA9PSAqYi0+Y3Vy
c29ycygpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0VxdWFsKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICByZXR1cm4gYS0+Y3Vy
c29yKCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5jdXJzb3JzKCkgfHwg
YXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Cit9CisKIHZvaWQgUmVuZGVy
T2JqZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBp
ZiAobV9zdHlsZSA9PSBzdHlsZSkgewpAQCAtMTc5Niw2ICsxODA3LDExIEBAIHZvaWQgUmVuZGVy
T2JqZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIAogICAgIHN0
eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlLmdldCgpKTsKIAorICAgIGlmIChvbGRTdHlsZS5n
ZXQoKSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLmdldCgpLCB0aGlzLT5zdHlsZSgpKSkg
eworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKKyAgICAgICAgICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsKKyAgICB9CisK
ICAgICAvLyBGSVhNRTogfHRoaXN8IG1pZ2h0IGJlIGRlc3Ryb3llZCBoZXJlLiBUaGlzIGNhbiBj
dXJyZW50bHkgaGFwcGVuIGZvciBhIFJlbmRlclRleHRGcmFnbWVudCB3aGVuCiAgICAgLy8gaXRz
IGZpcnN0LWxldHRlciBibG9jayBnZXRzIGFuIHVwZGF0ZSBpbiBSZW5kZXJUZXh0RnJhZ21lbnQ6
OnN0eWxlRGlkQ2hhbmdlLiBGb3IgUmVuZGVyVGV4dEZyYWdtZW50KHMpLAogICAgIC8vIHdlIHdp
bGwgc2FmZWx5IGJhaWwgb3V0IHdpdGggdGhlIGRvZXNOb3ROZWVkTGF5b3V0IGZsYWcuIFdlIG1p
Z2h0IHdhbnQgdG8gYnJvYWRlbiB0aGlzIGNvbmRpdGlvbgpAQCAtMTkyMSwxNyArMTkzNyw2IEBA
IHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBhcmVOb25J
ZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikKLXsKLSAgICBBU1NFUlQoYS0+Y3Vyc29ycygpICE9IGItPmN1cnNvcnMoKSk7
Ci0gICAgcmV0dXJuIGEtPmN1cnNvcnMoKSAmJiBiLT5jdXJzb3JzKCkgJiYgKmEtPmN1cnNvcnMo
KSA9PSAqYi0+Y3Vyc29ycygpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgYXJlQ3Vyc29yc0Vx
dWFsKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBy
ZXR1cm4gYS0+Y3Vyc29yKCkgPT0gYi0+Y3Vyc29yKCkgJiYgKGEtPmN1cnNvcnMoKSA9PSBiLT5j
dXJzb3JzKCkgfHwgYXJlTm9uSWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbChhLCBiKSk7Ci19Ci0K
IHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogCkBAIC0xOTY1LDExICsxOTcwLDYgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIC8vIERvbid0IGNoZWNrIGZvciByZXBhaW50
IGhlcmU7IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgbGF5ZXIgaGFzIGJlZW4KICAgICAvLyB1
cGRhdGVkIGJ5IHN1YmNsYXNzZXMgYmVmb3JlIHdlIGtub3cgaWYgd2UgaGF2ZSB0byByZXBhaW50
IChpbiBzZXRTdHlsZSgpKS4KLQotICAgIGlmIChvbGRTdHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFs
KG9sZFN0eWxlLCBzdHlsZSgpKSkgewotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtl
TW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAgfQogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6cHJv
cGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJvb2wgYmxvY2tDaGlsZHJlbk9ubHkpCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMWYyZWZhZjE4ZWQ0MmZjOGMwNDMyNTE4YTY3YWRkMzk3YjY3ZjUzNi4uNzAxMDcwNGFj
MjM0MzVmYzAzZGRlZmE1OTE3N2ZiZjBlNzg4OTQyNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisy
MDEzLTAyLTE1ICBBaXZvIFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBk
YXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtl
IG1vdXNlbW92ZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAgIENoYW5naW5nIENTUyBjdXJzb3Igc2hvdWxkIHdvcmsg
bm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIG5vdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgY2hhbmdp
bmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwgbW91c2Vkb3duLCBtb3VzZXVwIGFuZCBtb3VzZW1vdmUK
KyAgICAgICAgd2hpbGUgbW91c2UgYnV0dG9uIGJlaW5nIGhvbGQgZG93bi4gQWxzbyBhZGRlZCB0
ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91c2Vtb3ZlCisgICAgICAgIGV2ZW50IGlzIG5vdCBmaXJl
ZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdoaWxlIG1vdXNlIGlzIG5vdCBtb3ZpbmcuCisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNl
bW92ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9u
czogVGhlIG5ldyBjdXJzb3IgY2hhbmdlIHRlc3QgZmFpbHMgb24gbWFjCisKIDIwMTMtMDItMTEg
IFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZlIHNldEZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQgZnJvbSBsYXlvdXRUZXN0Q29udHJvbGxlciB0byB3aW5kb3cuaW50
ZXJuYWxzLnNldHRpbmdzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3Vz
ZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4YjdhYmVhNzJhNzEw
MTZkYTE0MDM0OTkzNWU2MDFhOTNjMjk0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDI0IEBACitUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24g
bW91c2UgZXZlbnRzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDUzMzQx
CisKKworTW91c2UgbW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitN
b3VzZSBkb3duCitDdXJzb3IgSW5mbzogdHlwZT1Qcm9ncmVzcyBob3RTcG90PTAsMAorCitNb3Vz
ZSBob2xkIGRvd24sIG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKwor
TW91c2UgdXAKK0N1cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDQx
YmUxYmEwYjZkY2ZhNWU4M2ZiZjdkZDBhYjhlYjViZjM1ODMxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCkBAIC0wLDAg
KzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPHA+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUzMzQxIj5CdWcgNTMzNDE8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAg
IDxkaXYgaWQ9InRhcmdldCIgb25Nb3VzZURvd249InN0eWxlLmN1cnNvcj0ncHJvZ3Jlc3MnO2V2
ZW50LnByZXZlbnREZWZhdWx0KCk7IiBvbk1vdXNlTW92ZT0ic3R5bGUuY3Vyc29yPSdwb2ludGVy
JzsiIG9uTW91c2VVcD0ic3R5bGUuY3Vyc29yPSdoZWxwJzsiIHN0eWxlPSJjdXJzb3I6cG9pbnRl
cjsiPlBsYXkgd2l0aCBtb3VzZSBvbiB0aGlzIGVsZW1lbnQuIEN1cnNvcnMgY2hhbmdlIG9uIGV2
ZW50cyAtIG1vdXNlbW92ZTogcG9pbnRlcihoYW5kKSwgbW91c2Vkb3duOiBwcm9ncmVzcywgbW91
c2V1cDogaGVscC48L2Rpdj4KKzwvZGl2PgorPGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hh
bmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZlbnRzLiIpOworCitpZiAoIXdpbmRvdy5ldmVudFNl
bmRlcikgeworICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJl
ZScpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBB
c1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QocHJlcGFyZSwgbmV4dCkg
eworICAgIHByZXBhcmUoKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBk
ZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJ
bmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgbmV4dCgpOworICAg
IH0sIDApOworfQorCitmdW5jdGlvbiB0ZXN0c0RvbmUoKSB7CisgICAgLy8gVGhpcyB0ZXh0IGlz
IHJlZHVuZGFudCB3aXRoIHRoZSB0ZXN0IG91dHB1dCAtIGhpZGUgaXQKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgndGVzdC1jb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwor
ICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVy
ZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFy
IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICBldmVudFNl
bmRlci5kcmFnTW9kZSA9IGZhbHNlOworICAgIHZhciB0ZXN0cyA9IFsKKyAgICAgICAgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgbW92ZScpOworICAgICAgICAgICAgZXZl
bnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAzLCB0YXJnZXQub2Zmc2V0
VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01v
dXNlIGRvd24nKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBob2xkIGRvd24sIG1v
dmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRM
ZWZ0ICsgMTMsIHRhcmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgdXAnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlVXAoKTsKKyAgICAgICAgfQorICAgIF07CisKKyAgICB2YXIgaSA9IDA7CisgICAgZnVu
Y3Rpb24gbmV4dFRlc3QoKSB7CisgICAgICAgIGlmIChpIDwgdGVzdHMubGVuZ3RoKSB7CisgICAg
ICAgICAgICBydW5UZXN0KHRlc3RzW2krK10sIG5leHRUZXN0KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRlc3RzRG9uZSgpOworICAgICAgICB9CisgICAgfQorICAgIG5leHRUZXN0
KCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1v
dmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1ZDA2NDVlOWI3NjExM2Y3YzQxZWRhZDlmMjZj
ZmZlOTRmN2U2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
b3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitU
ZXN0IHRoYXQgdGhlcmUgaXMgbm8gbW91c2Vtb3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdpbmcg
Y3Vyc29yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDg1MzQzCisKKwor
VEVTVCBDQVNFOiBNb3VzZSBpZGxlLCBjaGFuZ2UgY3Vyc29yIHNob3VsZCBub3QgZmlyZSBtb3Vz
ZW1vdmUgZXZlbnQKK0N1cnNvciBJbmZvOiB0eXBlPVBvaW50ZXIgaG90U3BvdD0wLDAKK0N1cnNv
ciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDU5ODIx
Y2QzMzI2YWEyZDhlNDZlOGFmODcyMGE2ODkzYmM2ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCkBAIC0w
LDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9
InRleHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPHA+PGEgaHJlZj1odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODUzNDM+QnVnIDg1MzQzPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAg
ICA8ZGl2IGlkPSJ0YXJnZXQiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+TW91c2UgaWRsZSwgY2hh
bmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50PC9kaXY+Cis8L2Rpdj4K
Kzxici8+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigi
VGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5naW5n
IGN1cnNvci4iKTsKKworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVk
KCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50
ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQor
CisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitp
ZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZGVidWcoJ1RFU1QgQ0FTRTogJyArIG5vZGUudGV4dENv
bnRlbnQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKG5vZGUub2Zmc2V0TGVmdCArIDMs
IG5vZGUub2Zmc2V0VG9wICsgMyk7CisgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93
LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgIG5vZGUuYWRk
RXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoJ01vdXNlbW92ZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vy
c29yJyk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworICAgIG5vZGUuc3R5bGUu
Y3Vyc29yID0gJ2hlbHAnOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRl
YnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvcklu
Zm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgIH0sIDApOworCisgICAgLy8g
R2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBjaGFuZ2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1vdmUg
ZXZlbnQgdGhhdCBjYXVzZWQgYnVnLCBpcyB1c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFp
bmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSwgMTUwKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNzQ4ZmUwOTNiYWEx
ZDAzYmIwODQxMTZjOWQ0NGNlOTQ5NTBmOTExNi4uMmNjMjkyMzZmNWUxMDA0NGVlMmNmN2JiZjhj
OTMxNjcxMTViNzVmMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RF
eHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlv
bnMKQEAgLTEzMzIsMyArMTMzMiw2IEBAIHdlYmtpdC5vcmcvYi8xMDkyMDkgZmFzdC90ZXh0L2lu
dGVybmF0aW9uYWwvYmlkaS1pZ25vcmVkLWZvci1maXJzdC1jaGlsZC1pbmxpbmUuCiAKICMgQ3Jh
c2hpbmcgYWZ0ZXIgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTA1NjY3CiB3ZWJraXQub3JnL2IvMTA5
MjMyIFsgRGVidWcgXSBpbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItcmVsb2FkLW9uLXBhdXNl
Lmh0bWwgWyBDcmFzaCBdCisKKyMgTWFjIGZhaWxzIGN1cnNvciBjaGFuZ2UgdGVzdCBmb3IgdW5r
bm93biByZWFzb25zCit3ZWJraXQub3JnL2IvMTAzODU3IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNv
ci1jaGFuZ2UuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188525</attachid>
            <date>2013-02-15 03:30:58 -0800</date>
            <delta_ts>2013-02-15 13:30:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130215132718.patch</filename>
            <type>text/plain</type>
            <size>22258</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFjM2I3ZGEwMWViNDkw
ZGIyNzFiMThiODFiMGMyMDY1MTJkNDUyNi4uNmUwZWNlNGI5M2EzMGUwZGJlMWE5ZGY0NmEyOGU4
MWZkYThlZTNhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEzLTAyLTE1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKTsgaXQgaGFzIGV4dHJhIG92ZXJoZWFkIG9mCisgICAgICAgIHVzaW5n
IGEgdGltZXIgd2hpY2ggd2FzIGludHJvZHVjZWQgdG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoZXIu
CisKKyAgICAgICAgVGhlIG5ldyBhcHByb2FjaCBkb2VzIG5vdCB1c2UgdGhlIGZha2UgbW91c2Vt
b3ZlIGV2ZW50LiBJbnN0ZWFkLCBpdCB1c2VzIG9ubHkgdGhlIGxvZ2ljCisgICAgICAgIG5lZWRl
ZCBmb3IgdGhlIGFjdHVhbCBjdXJzb3IgY2hhbmdlIHRvIGhhcHBlbi4gVGhpcyBieXBhc3NlcyBh
bGwgdGhlIG1vdXNlbW92ZSBldmVudCByZWxhdGVkCisgICAgICAgIG92ZXJoZWFkLiBUaGUgcmVt
YWluaW5nIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHdoYXQgd2FzIHJ1biB0aHJvdWdo
IHRoZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgcGF0aC4gRXZlcnl0aGluZyB0aGF0IHdhcyBu
b3QgbmVlZGVkIGZvciBjaGFuZ2luZyBhIGN1cnNvciBpcyBzdHJpcHBlZCBvZmYsIGV2ZXJ5dGhp
bmcKKyAgICAgICAgdGhhdCBpcyBuZWVkZWQsIHJlbWFpbnMgdGhlIHNhbWUuCisKKyAgICAgICAg
VGhlIGNhbGwgdG8gdXBkYXRlIGN1cnNvciB3YXMgbW92ZWQgdXAgaW4gdGhlIGNhbGwgdHJlZSBm
cm9tIFJlbmRlck9iamVjdDo6U3R5bGVEaWRDaGFuZ2UKKyAgICAgICAgdG8gUmVuZGVyT2JqZWN0
OjpTZXRTdHlsZSByaWdodCBhZnRlciB0aGUgU3R5bGVEaWRDaGFuZ2UgY2FsbC4gVGhpcyBhbGxv
d3MgdG8gYW55IHVwZGF0ZXMKKyAgICAgICAgYW5kIHN0eWxlIHByb3BhZ2F0aW9ucyBpbiBTdHls
ZURpZENoYW5nZSB0byBoYXBwZW4gYW5kIG1ha2VzIHN1cmUgdGhhdCBhIGN1cnNvciBjaGFuZ2Ug
aXMKKyAgICAgICAgbm90IG1pc3NlZC4gUHJldmlvdXMgcGxhY2Ugd2FzIGF0IHRoZSBlbmQgb2Yg
UmVuZGVyT2JqZWN0OjpTdHlsZURpZENoYW5nZSwgd2hlcmUgaXQgY291bGQKKyAgICAgICAgaGF2
ZSBiZWVuIG1pc3NlZCBiZWNhdXNlIG9mIGFuIGVhcmx5IGV4aXQuIEZvciBleGFtcGxlLCBjdXJz
b3IgY2hhbmdlIG9uIG1vdXNlZG93bi91cCBvbgorICAgICAgICBhIHRleHQgbm9kZSBtaXNzZWQg
dGhlIGNvcnJlY3QgY3Vyc29yIGluIHRoZSBmaXJzdCBwYXNzLgorCisgICAgICAgIFJlZmFjdG9y
ZWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IgdG8gbm90IHRha2UgYSB3aG9sZSBtb3VzZSBl
dmVudCBidXQgaW5zdGVhZCB3b3JrIHdpdGgKKyAgICAgICAgSGl0VGVzdFJlc3VsdCBzbyB0aGF0
IEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yIG11c3Qgbm90IGNyZWF0ZSBhIHVzZWxlc3MgUGxh
dGZvcm1FdmVudC4KKworICAgICAgICBGaXhlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg1MzQzIChtb3VzZW1vdmUgZXZlbnQgb24gY3Vyc29yIGNoYW5nZSkKKyAg
ICAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0
MSAobm8gY3Vyc29yIGNoYW5nZSB3aGVuIG1vdXNlIGJ1dHRvbiBkb3duKQorCisgICAgICAgIFRl
c3RzOiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbAorCisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OkV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3Vyc29y
VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2NoZWR1bGVDdXJzb3JVcGRhdGUpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIChFdmVudEhhbmRsZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlTm9u
SWRlbnRpY2FsQ3Vyc29yTGlzdHNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmFyZUN1cnNvcnNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGVEaWRD
aGFuZ2UpOgorCiAyMDEzLTAyLTE1ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5z
ZW5AZGlnaWEuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGhpdFRlc3RSZXN1bHRBdFBvaW50IGFu
ZCBub2Rlc0Zyb21SZWN0IEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRl
eCBiNmYxYTIwNDdkYmZkNWU2NjFlMGE0MDE2N2ZmMzhiZjJhYTRkZDNhLi5lNzI4MzQ1MTJkODM3
ZjExOGExMzg3MmY5NDE2N2JjY2JiNzIyZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCkBAIC0xNDQsNiArMTQ0LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKIGNv
bnN0IGRvdWJsZSBmYWtlTW91c2VNb3ZlU2hvcnRJbnRlcnZhbCA9IDAuMTsKIGNvbnN0IGRvdWJs
ZSBmYWtlTW91c2VNb3ZlTG9uZ0ludGVydmFsID0gMC4yNTA7CiAKKy8vIFRoZSBhbW91bnQgb2Yg
dGltZSB0byB3YWl0IGZvciBhIGN1cnNvciB1cGRhdGUgb24gc3R5bGUgYW5kIGxheW91dCBjaGFu
Z2VzCisvLyBTZXQgdG8gNTBIeiwgbm8gbmVlZCB0byBiZSBmYXN0ZXIgdGhhbiBjb21tb24gc2Ny
ZWVuIHJlZnJlc2ggcmF0ZQorY29uc3QgZG91YmxlIGN1cnNvclVwZGF0ZUludGVydmFsID0gMC4w
MjsKKwogY29uc3QgaW50IG1heGltdW1DdXJzb3JTaXplID0gMTI4OwogI2lmIEVOQUJMRShNT1VT
RV9DVVJTT1JfU0NBTEUpCiAvLyBJdCdzIHByZXR0eSB1bmxpa2VseSB0aGF0IGEgc2NhbGUgb2Yg
bGVzcyB0aGFuIG9uZSB3b3VsZCBldmVyIGJlIHVzZWQuIEJ1dCBhbGwgd2UgcmVhbGx5CkBAIC0z
MTksNiArMzIzLDcgQEAgRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJhbWUqIGZyYW1lKQog
ICAgICwgbV9tb3VzZURvd25XYXNTaW5nbGVDbGlja0luU2VsZWN0aW9uKGZhbHNlKQogICAgICwg
bV9zZWxlY3Rpb25Jbml0aWF0aW9uU3RhdGUoSGF2ZU5vdFN0YXJ0ZWRTZWxlY3Rpb24pCiAgICAg
LCBtX2hvdmVyVGltZXIodGhpcywgJkV2ZW50SGFuZGxlcjo6aG92ZXJUaW1lckZpcmVkKQorICAg
ICwgbV9jdXJzb3JUaW1lcih0aGlzLCAmRXZlbnRIYW5kbGVyOjpjdXJzb3JUaW1lckZpcmVkKQog
ICAgICwgbV9hdXRvc2Nyb2xsQ29udHJvbGxlcihhZG9wdFB0cihuZXcgQXV0b3Njcm9sbENvbnRy
b2xsZXIpKQogICAgICwgbV9tb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGwoZmFsc2UpCiAgICAg
LCBtX21vdXNlRG93bldhc0luU3ViZnJhbWUoZmFsc2UpCkBAIC0zNjgsNiArMzczLDcgQEAgRHJh
Z1N0YXRlJiBFdmVudEhhbmRsZXI6OmRyYWdTdGF0ZSgpCiB2b2lkIEV2ZW50SGFuZGxlcjo6Y2xl
YXIoKQogewogICAgIG1faG92ZXJUaW1lci5zdG9wKCk7CisgICAgbV9jdXJzb3JUaW1lci5zdG9w
KCk7CiAgICAgbV9mYWtlTW91c2VNb3ZlRXZlbnRUaW1lci5zdG9wKCk7CiAgICAgbV9yZXNpemVM
YXllciA9IDA7CiAgICAgbV9ub2RlVW5kZXJNb3VzZSA9IDA7CkBAIC0xMjM0LDggKzEyNDAsNTQg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnVzZUhhbmRDdXJzb3IoTm9kZSogbm9kZSwgYm9vbCBpc092
ZXJMaW5rLCBib29sIHNoaWZ0S2V5KQogICAgIHJldHVybiAoKGlzT3ZlckxpbmsgfHwgaXNTdWJt
aXRJbWFnZShub2RlKSkgJiYgKCFlZGl0YWJsZSB8fCBlZGl0YWJsZUxpbmtFbmFibGVkKSk7CiB9
CiAKLU9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50LCBTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3Zv
aWQgRXZlbnRIYW5kbGVyOjpjdXJzb3JUaW1lckZpcmVkKFRpbWVyPEV2ZW50SGFuZGxlcj4qKQor
eworICAgIG1fY3Vyc29yVGltZXIuc3RvcCgpOworCisgICAgQVNTRVJUKG1fZnJhbWUpOworICAg
IEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKworICAgIHVwZGF0ZUN1cnNvcigpOworfQor
Cit2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKCkKIHsKKyAgICBpZiAobV9tb3VzZVBv
c2l0aW9uSXNVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5ncyAmJiAhc2V0dGluZ3Mt
PmRldmljZVN1cHBvcnRzTW91c2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+aXNPbnNj
cmVlbigpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNoaWZ0S2V5OworICAgIGJvb2wgY3RybEtl
eTsKKyAgICBib29sIGFsdEtleTsKKyAgICBib29sIG1ldGFLZXk7CisgICAgUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0ZShzaGlmdEtleSwgY3RybEtleSwgYWx0
S2V5LCBtZXRhS2V5KTsKKworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVl
c3Q6OlJlYWRPbmx5KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0Nv
bnRlbnRzKG1fbGFzdEtub3duTW91c2VQb3NpdGlvbikpOworICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPnJlbmRlclZpZXcoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOworCisgICAgT3B0aW9u
YWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IocmVzdWx0LCBzaGlmdEtleSk7
CisgICAgaWYgKG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkpIHsKKyAgICAgICAgbV9j
dXJyZW50TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5jdXJzb3IoKTsKKyAgICAgICAgdmll
dy0+c2V0Q3Vyc29yKG1fY3VycmVudE1vdXNlQ3Vyc29yKTsKKyAgICB9Cit9CisKK09wdGlvbmFs
Q3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgYm9vbCBzaGlmdEtleSkKK3sKKyAgICBpZiAobV9jdXJzb3JUaW1lci5pc0FjdGl2ZSgp
KQorICAgICAgICBtX2N1cnNvclRpbWVyLnN0b3AoKTsKKwogICAgIGlmIChtX3Jlc2l6ZUxheWVy
ICYmIG1fcmVzaXplTGF5ZXItPmluUmVzaXplTW9kZSgpKQogICAgICAgICByZXR1cm4gTm9DdXJz
b3JDaGFuZ2U7CiAKQEAgLTEyNDcsOCArMTI5OSwxNiBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhh
bmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBl
dgogICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CiAjZW5kaWYKIAotICAgIE5vZGUqIG5v
ZGUgPSBldmVudC50YXJnZXROb2RlKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5v
ZGUgPyBub2RlLT5yZW5kZXJlcigpIDogMDsKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LnRhcmdl
dE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsK
KyAgICBib29sIG9yaWdpbmFsSXNUZXh0ID0gbm9kZS0+aXNUZXh0Tm9kZSgpOworICAgIGlmIChu
b2RlICYmIG9yaWdpbmFsSXNUZXh0KQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
OworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOworCisgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmVuZGVyZXIgPyByZW5kZXJlci0+c3R5bGUoKSA6IDA7CiAgICAgYm9vbCBo
b3Jpem9udGFsVGV4dCA9ICFzdHlsZSB8fCBzdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KTsKICAgICBjb25zdCBDdXJzb3ImIGlCZWFtID0gaG9yaXpvbnRhbFRleHQgPyBpQmVhbUN1cnNv
cigpIDogdmVydGljYWxUZXh0Q3Vyc29yKCk7CkBAIC0xMjY0LDcgKzEzMjQsNyBAQCBPcHRpb25h
bEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJiBldgogCiAgICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAgIEN1cnNvciBv
dmVycmlkZUN1cnNvcjsKLSAgICAgICAgc3dpdGNoIChyZW5kZXJlci0+Z2V0Q3Vyc29yKHJvdW5k
ZWRJbnRQb2ludChldmVudC5sb2NhbFBvaW50KCkpLCBvdmVycmlkZUN1cnNvcikpIHsKKyAgICAg
ICAgc3dpdGNoIChyZW5kZXJlci0+Z2V0Q3Vyc29yKHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9j
YWxQb2ludCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7CiAgICAgICAgIGNhc2UgU2V0Q3Vyc29yQmFz
ZWRPblN0eWxlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0Q3Vyc29yOgpA
QCAtMTMxMSwxOSArMTM3MSwxOSBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVj
dEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogCiAgICAgc3dp
dGNoIChzdHlsZSA/IHN0eWxlLT5jdXJzb3IoKSA6IENVUlNPUl9BVVRPKSB7CiAgICAgY2FzZSBD
VVJTT1JfQVVUTzogewotICAgICAgICBib29sIGVkaXRhYmxlID0gKG5vZGUgJiYgbm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkpOworICAgICAgICBib29sIGVkaXRhYmxlID0gKG5vZGUtPnJlbmRl
cmVySXNFZGl0YWJsZSgpKTsKIAotICAgICAgICBpZiAodXNlSGFuZEN1cnNvcihub2RlLCBldmVu
dC5pc092ZXJMaW5rKCksIGV2ZW50LmV2ZW50KCkuc2hpZnRLZXkoKSkpCisgICAgICAgIGlmICh1
c2VIYW5kQ3Vyc29yKG5vZGUsIHJlc3VsdC5VUkxFbGVtZW50KCkgJiYgcmVzdWx0LlVSTEVsZW1l
bnQoKS0+aXNMaW5rKCksIHNoaWZ0S2V5KSkKICAgICAgICAgICAgIHJldHVybiBoYW5kQ3Vyc29y
KCk7CiAKICAgICAgICAgYm9vbCBpblJlc2l6ZXIgPSBmYWxzZTsKICAgICAgICAgaWYgKHJlbmRl
cmVyKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmVu
Y2xvc2luZ0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0g
bV9mcmFtZS0+dmlldygpKQotICAgICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+
aXNQb2ludEluUmVzaXplQ29udHJvbCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LmV2ZW50
KCkucG9zaXRpb24oKSkpOworICAgICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+
aXNQb2ludEluUmVzaXplQ29udHJvbCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJvdW5kZWRJbnRQ
b2ludChyZXN1bHQubG9jYWxQb2ludCgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIGlmICgoZWRpdGFibGUgfHwgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHQoKSAm
JiBub2RlLT5jYW5TdGFydFNlbGVjdGlvbigpKSkgJiYgIWluUmVzaXplciAmJiAhc2Nyb2xsYmFy
KQorICAgICAgICBpZiAoKGVkaXRhYmxlIHx8IChvcmlnaW5hbElzVGV4dCAmJiBub2RlLT5jYW5T
dGFydFNlbGVjdGlvbigpKSkgJiYgIWluUmVzaXplciAmJiAhcmVzdWx0LnNjcm9sbGJhcigpKQog
ICAgICAgICAgICAgcmV0dXJuIGlCZWFtOwogICAgICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigp
OwogICAgIH0KQEAgLTE3MzQsNyArMTc5NCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAg
ICAgICAgIGlmIChzY3JvbGxiYXIgJiYgIW1fbW91c2VQcmVzc2VkKQogICAgICAgICAgICAgc2Ny
b2xsYmFyLT5tb3VzZU1vdmVkKG1vdXNlRXZlbnQpOyAvLyBIYW5kbGUgaG92ZXIgZWZmZWN0cyBv
biBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHZpc3VhbCBmZWVkYmFjayBvbiBzY3JvbGxiYXIgaG92
ZXJpbmcuCiAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpIHsK
LSAgICAgICAgICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0Q3Vyc29y
KG1ldiwgc2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vy
c29yID0gc2VsZWN0Q3Vyc29yKG1ldi5oaXRUZXN0UmVzdWx0KCksIG1vdXNlRXZlbnQuc2hpZnRL
ZXkoKSk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxDdXJzb3IuaXNDdXJzb3JDaGFuZ2UoKSkg
ewogICAgICAgICAgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3Iu
Y3Vyc29yKCk7CiAgICAgICAgICAgICAgICAgdmlldy0+c2V0Q3Vyc29yKG1fY3VycmVudE1vdXNl
Q3Vyc29yKTsKQEAgLTI5MzEsNiArMjk5MSwxMiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2NoZWR1
bGVIb3ZlclN0YXRlVXBkYXRlKCkKICAgICAgICAgbV9ob3ZlclRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKIH0KIAordm9pZCBFdmVudEhhbmRsZXI6OnNjaGVkdWxlQ3Vyc29yVXBkYXRlKCkKK3sKKyAg
ICBpZiAoIW1fY3Vyc29yVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9jdXJzb3JUaW1lci5z
dGFydE9uZVNob3QoY3Vyc29yVXBkYXRlSW50ZXJ2YWwpOworfQorCiB2b2lkIEV2ZW50SGFuZGxl
cjo6ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCkKIHsKICAgICBpZiAobV9tb3VzZVBy
ZXNzZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCAzZmMwN2YyZmEyNTJmOWM0
NWYyNGYxZjZiNTVlNDdlN2EwMGQ3NTNlLi5kNGZiYmRiODFmMmY5NjU3MWYyMGM3N2Y1MzNkY2Q0
YmNiMjc0MDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTE0Myw2ICsxNDMs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgc2NoZWR1bGVIb3ZlclN0YXRlVXBkYXRl
KCk7CisgICAgdm9pZCBzY2hlZHVsZUN1cnNvclVwZGF0ZSgpOwogCiAgICAgdm9pZCBzZXRSZXNp
emluZ0ZyYW1lU2V0KEhUTUxGcmFtZVNldEVsZW1lbnQqKTsKIApAQCAtMjQ5LDYgKzI1MCw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCB1c2VIYW5kQ3Vyc29yKE5vZGUqLCBib29sIGlz
T3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpOworICAgIHZvaWQgdXBkYXRlQ3Vyc29yKCk7CiAKIHBy
aXZhdGU6CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKQEAgLTI3NSw4ICsyNzcsMTAgQEAgcHJp
dmF0ZToKICNlbmRpZgogICAgIGJvb2wgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogCi0gICAgT3B0aW9uYWxDdXJzb3Igc2VsZWN0
Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBTY3JvbGxiYXIqKTsK
KyAgICBPcHRpb25hbEN1cnNvciBzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYsIGJv
b2wgc2hpZnRLZXkpOworCiAgICAgdm9pZCBob3ZlclRpbWVyRmlyZWQoVGltZXI8RXZlbnRIYW5k
bGVyPiopOworICAgIHZvaWQgY3Vyc29yVGltZXJGaXJlZChUaW1lcjxFdmVudEhhbmRsZXI+Kik7
CiAKICAgICBib29sIGxvZ2ljYWxTY3JvbGxPdmVyZmxvdyhTY3JvbGxMb2dpY2FsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CiAgICAgCkBAIC00
MDQsNiArNDA4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFuU2Nyb2xsQnV0dG9uUHJlc3Nl
ZDsKIAogICAgIFRpbWVyPEV2ZW50SGFuZGxlcj4gbV9ob3ZlclRpbWVyOworICAgIFRpbWVyPEV2
ZW50SGFuZGxlcj4gbV9jdXJzb3JUaW1lcjsKIAogICAgIE93blB0cjxBdXRvc2Nyb2xsQ29udHJv
bGxlcj4gbV9hdXRvc2Nyb2xsQ29udHJvbGxlcjsKICAgICBib29sIG1fbW91c2VEb3duTWF5U3Rh
cnRBdXRvc2Nyb2xsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApp
bmRleCBmMGVjNGQ1MDQ2MTQyODMwYmNiYjY1N2MzMWJlNmM5MzAxN2FkOTM3Li4zN2QzM2U4YjNj
MmM5N2EwZjk2ZTI5MzIzY2VmMDUxYTI3MDkxMGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTc1OCw2ICsxNzU4LDE3IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRQc2V1ZG9TdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZSkK
ICAgICBzZXRTdHlsZShwc2V1ZG9TdHlsZSk7CiB9CiAKK3N0YXRpYyBib29sIGFyZU5vbklkZW50
aWNhbEN1cnNvckxpc3RzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKQoreworICAgIEFTU0VSVChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vyc29ycygpKTsKKyAg
ICByZXR1cm4gYS0+Y3Vyc29ycygpICYmIGItPmN1cnNvcnMoKSAmJiAqYS0+Y3Vyc29ycygpID09
ICpiLT5jdXJzb3JzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVDdXJzb3JzRXF1YWwo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIHJldHVy
biBhLT5jdXJzb3IoKSA9PSBiLT5jdXJzb3IoKSAmJiAoYS0+Y3Vyc29ycygpID09IGItPmN1cnNv
cnMoKSB8fCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGEsIGIpKTsKK30KKwogdm9p
ZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQog
ewogICAgIGlmIChtX3N0eWxlID09IHN0eWxlKSB7CkBAIC0xNzk2LDYgKzE4MDcsMTEgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQog
CiAgICAgc3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUuZ2V0KCkpOwogCisgICAgaWYgKG9s
ZFN0eWxlLmdldCgpICYmICFhcmVDdXJzb3JzRXF1YWwob2xkU3R5bGUuZ2V0KCksIHRoaXMtPnN0
eWxlKCkpKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQorICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY2hlZHVsZUN1cnNvclVwZGF0ZSgpOwor
ICAgIH0KKwogICAgIC8vIEZJWE1FOiB8dGhpc3wgbWlnaHQgYmUgZGVzdHJveWVkIGhlcmUuIFRo
aXMgY2FuIGN1cnJlbnRseSBoYXBwZW4gZm9yIGEgUmVuZGVyVGV4dEZyYWdtZW50IHdoZW4KICAg
ICAvLyBpdHMgZmlyc3QtbGV0dGVyIGJsb2NrIGdldHMgYW4gdXBkYXRlIGluIFJlbmRlclRleHRG
cmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UuIEZvciBSZW5kZXJUZXh0RnJhZ21lbnQocyksCiAgICAg
Ly8gd2Ugd2lsbCBzYWZlbHkgYmFpbCBvdXQgd2l0aCB0aGUgZG9lc05vdE5lZWRMYXlvdXQgZmxh
Zy4gV2UgbWlnaHQgd2FudCB0byBicm9hZGVuIHRoaXMgY29uZGl0aW9uCkBAIC0xOTIxLDE3ICsx
OTM3LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1MKICAgICB9CiB9CiAKLXN0YXRpYyBib29s
IGFyZU5vbklkZW50aWNhbEN1cnNvckxpc3RzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKQotewotICAgIEFTU0VSVChhLT5jdXJzb3JzKCkgIT0gYi0+Y3Vy
c29ycygpKTsKLSAgICByZXR1cm4gYS0+Y3Vyc29ycygpICYmIGItPmN1cnNvcnMoKSAmJiAqYS0+
Y3Vyc29ycygpID09ICpiLT5jdXJzb3JzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmVD
dXJzb3JzRXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQot
ewotICAgIHJldHVybiBhLT5jdXJzb3IoKSA9PSBiLT5jdXJzb3IoKSAmJiAoYS0+Y3Vyc29ycygp
ID09IGItPmN1cnNvcnMoKSB8fCBhcmVOb25JZGVudGljYWxDdXJzb3JMaXN0c0VxdWFsKGEsIGIp
KTsKLX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAKQEAgLTE5NjUsMTEgKzE5
NzAsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogCiAgICAgLy8gRG9uJ3QgY2hlY2sgZm9y
IHJlcGFpbnQgaGVyZTsgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBsYXllciBoYXMgYmVlbgog
ICAgIC8vIHVwZGF0ZWQgYnkgc3ViY2xhc3NlcyBiZWZvcmUgd2Uga25vdyBpZiB3ZSBoYXZlIHRv
IHJlcGFpbnQgKGluIHNldFN0eWxlKCkpLgotCi0gICAgaWYgKG9sZFN0eWxlICYmICFhcmVDdXJz
b3JzRXF1YWwob2xkU3R5bGUsIHN0eWxlKCkpKSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSB0aGlzLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kaXNw
YXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKTsKLSAgICB9CiB9CiAKIHZvaWQgUmVuZGVyT2Jq
ZWN0Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oYm9vbCBibG9ja0NoaWxkcmVu
T25seSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCAwYTM0YmEzZDE2MjQ2MWE5ZDdlYzU2NDI2ZjNiOTA4OTc1ZmRkOTAyLi42
NzdjZDMwNjc0N2VhOGFiZTNlNTQ1MDBhZjk1MzdjOTFlZTFjNDNhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMTMtMDItMTUgIEFpdm8gUGFhcyAgPGFpdm9wYWFzQGdtYWlsLmNvbT4KKworICAg
ICAgICBVcGRhdGluZyBtb3VzZSBjdXJzb3Igb24gc3R5bGUgY2hhbmdlcyB3aXRob3V0IGVtaXR0
aW5nIGZha2UgbW91c2Vtb3ZlIGV2ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDE4NTcKKyAgICAgICAgQ2hhbmdpbmcgQ1NTIGN1cnNvciBzaG91
bGQgd29yayBubyBtYXR0ZXIgaXMgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3Igbm90CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZv
ciBjaGFuZ2luZyBjdXJzb3Igb24gbW91c2Vtb3ZlLCBtb3VzZWRvd24sIG1vdXNldXAgYW5kIG1v
dXNlbW92ZQorICAgICAgICB3aGlsZSBtb3VzZSBidXR0b24gYmVpbmcgaG9sZCBkb3duLiBBbHNv
IGFkZGVkIHRlc3QgdG8gdmVyaWZ5IHRoYXQgYSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMg
bm90IGZpcmVkIGZvciBjaGFuZ2luZyBjdXJzb3Igd2hpbGUgbW91c2UgaXMgbm90IG1vdmluZy4K
KworICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3It
bm8tbW91c2Vtb3ZlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhw
ZWN0YXRpb25zOiBUaGUgbmV3IGN1cnNvciBjaGFuZ2UgdGVzdCBmYWlscyBvbiBtYWMKKwogMjAx
My0wMi0xNCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IEltcGxlbWVudCB0cmFja2luZyBvZiBhY3RpdmUgc3R5bGVzaGVl
dHMgaW4gdGhlIGZyb250ZW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
b3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4YjdhYmVhNzJh
NzEwMTZkYTE0MDM0OTkzNWU2MDFhOTNjMjk0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDI0IEBACitUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkg
b24gbW91c2UgZXZlbnRzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDUz
MzQxCisKKworTW91c2UgbW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAor
CitNb3VzZSBkb3duCitDdXJzb3IgSW5mbzogdHlwZT1Qcm9ncmVzcyBob3RTcG90PTAsMAorCitN
b3VzZSBob2xkIGRvd24sIG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAK
KworTW91c2UgdXAKK0N1cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ZDQxYmUxYmEwYjZkY2ZhNWU4M2ZiZjdkZDBhYjhlYjViZjM1ODMxCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCkBAIC0w
LDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9
InRleHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPHA+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUzMzQxIj5CdWcgNTMzNDE8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgor
ICAgIDxkaXYgaWQ9InRhcmdldCIgb25Nb3VzZURvd249InN0eWxlLmN1cnNvcj0ncHJvZ3Jlc3Mn
O2V2ZW50LnByZXZlbnREZWZhdWx0KCk7IiBvbk1vdXNlTW92ZT0ic3R5bGUuY3Vyc29yPSdwb2lu
dGVyJzsiIG9uTW91c2VVcD0ic3R5bGUuY3Vyc29yPSdoZWxwJzsiIHN0eWxlPSJjdXJzb3I6cG9p
bnRlcjsiPlBsYXkgd2l0aCBtb3VzZSBvbiB0aGlzIGVsZW1lbnQuIEN1cnNvcnMgY2hhbmdlIG9u
IGV2ZW50cyAtIG1vdXNlbW92ZTogcG9pbnRlcihoYW5kKSwgbW91c2Vkb3duOiBwcm9ncmVzcywg
bW91c2V1cDogaGVscC48L2Rpdj4KKzwvZGl2PgorPGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUg
Y2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2UgZXZlbnRzLiIpOworCitpZiAoIXdpbmRvdy5ldmVu
dFNlbmRlcikgeworICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVy
VHJlZScpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QocHJlcGFyZSwgbmV4
dCkgeworICAgIHByZXBhcmUoKTsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJz
b3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgbmV4dCgpOwor
ICAgIH0sIDApOworfQorCitmdW5jdGlvbiB0ZXN0c0RvbmUoKSB7CisgICAgLy8gVGhpcyB0ZXh0
IGlzIHJlZHVuZGFudCB3aXRoIHRoZSB0ZXN0IG91dHB1dCAtIGhpZGUgaXQKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndGVzdC1jb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
OworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwg
aGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAg
dmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICBldmVu
dFNlbmRlci5kcmFnTW9kZSA9IGZhbHNlOworICAgIHZhciB0ZXN0cyA9IFsKKyAgICAgICAgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgbW92ZScpOworICAgICAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAzLCB0YXJnZXQub2Zm
c2V0VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWco
J01vdXNlIGRvd24nKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAg
ICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBob2xkIGRvd24s
IG1vdmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZz
ZXRMZWZ0ICsgMTMsIHRhcmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgdXAnKTsKKyAgICAgICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlVXAoKTsKKyAgICAgICAgfQorICAgIF07CisKKyAgICB2YXIgaSA9IDA7CisgICAg
ZnVuY3Rpb24gbmV4dFRlc3QoKSB7CisgICAgICAgIGlmIChpIDwgdGVzdHMubGVuZ3RoKSB7Cisg
ICAgICAgICAgICBydW5UZXN0KHRlc3RzW2krK10sIG5leHRUZXN0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHRlc3RzRG9uZSgpOworICAgICAgICB9CisgICAgfQorICAgIG5leHRU
ZXN0KCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3Vz
ZW1vdmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1ZDA2NDVlOWI3NjExM2Y3YzQxZWRhZDlm
MjZjZmZlOTRmN2U2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBA
CitUZXN0IHRoYXQgdGhlcmUgaXMgbm8gbW91c2Vtb3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdp
bmcgY3Vyc29yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDg1MzQzCisK
KworVEVTVCBDQVNFOiBNb3VzZSBpZGxlLCBjaGFuZ2UgY3Vyc29yIHNob3VsZCBub3QgZmlyZSBt
b3VzZW1vdmUgZXZlbnQKK0N1cnNvciBJbmZvOiB0eXBlPVBvaW50ZXIgaG90U3BvdD0wLDAKK0N1
cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDU5
ODIxY2QzMzI2YWEyZDhlNDZlOGFmODcyMGE2ODkzYmM2ZTUzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCkBA
IC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5
cGU9InRleHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPHA+PGEgaHJlZj1odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODUzNDM+QnVnIDg1MzQzPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4K
KyAgICA8ZGl2IGlkPSJ0YXJnZXQiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+TW91c2UgaWRsZSwg
Y2hhbmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50PC9kaXY+Cis8L2Rp
dj4KKzxici8+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bigiVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5n
aW5nIGN1cnNvci4iKTsKKworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFp
bGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRv
dy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwor
fQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVy
CitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZGVidWcoJ1RFU1QgQ0FTRTogJyArIG5vZGUudGV4
dENvbnRlbnQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKG5vZGUub2Zmc2V0TGVmdCAr
IDMsIG5vZGUub2Zmc2V0VG9wICsgMyk7CisgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2lu
ZG93LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgIG5vZGUu
YWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RG
YWlsZWQoJ01vdXNlbW92ZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gY2hhbmdpbmcg
Y3Vyc29yJyk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworICAgIG5vZGUuc3R5
bGUuY3Vyc29yID0gJ2hlbHAnOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAg
IGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNv
ckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgIH0sIDApOworCisgICAg
Ly8gR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBjaGFuZ2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1v
dmUgZXZlbnQgdGhhdCBjYXVzZWQgYnVnLCBpcyB1c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29u
dGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgfSwgMTUwKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOWI4YjliODZm
ZmU2ZDNlZDZhN2U0MjBhOWVkNGM1ZWNhMmMzYWU2Zi4uM2EyZjFlNzI3NmNkZWM0YjJjNjM4YTUz
ZmMxYjhhNDMyOThkYTIwMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTE0MTcsMyArMTQxNyw2IEBAIHdlYmtpdC5vcmcvYi8xMDkyMDkgZmFzdC90ZXh0
L2ludGVybmF0aW9uYWwvYmlkaS1pZ25vcmVkLWZvci1maXJzdC1jaGlsZC1pbmxpbmUuCiB3ZWJr
aXQub3JnL2IvMTA5MjMyIFsgRGVidWcgXSBpbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItcmVs
b2FkLW9uLXBhdXNlLmh0bWwgWyBDcmFzaCBdCiAKIHdlYmtpdC5vcmcvYi8xMDk4NjkgbWVkaWEv
bWVkaWEtY2FwdGlvbnMuaHRtbCBbIENyYXNoIF0KKworIyBNYWMgZmFpbHMgY3Vyc29yIGNoYW5n
ZSB0ZXN0IGZvciB1bmtub3duIHJlYXNvbnMKK3dlYmtpdC5vcmcvYi8xMDM4NTcgZmFzdC9ldmVu
dHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188633</attachid>
            <date>2013-02-15 13:30:59 -0800</date>
            <delta_ts>2013-02-15 13:47:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130215232721.patch</filename>
            <type>text/plain</type>
            <size>19213</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFjM2I3ZGEwMWViNDkw
ZGIyNzFiMThiODFiMGMyMDY1MTJkNDUyNi4uZWJjZWZlMzkwYjQwZDBmYzNiNTQyYWU4MTEyZGY1
ODhlNTg1ZTM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEzLTAyLTE1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKS4KKworICAgICAgICBUaGUgbmV3IGFwcHJvYWNoIGRvZXMgbm90IHVz
ZSB0aGUgZmFrZSBtb3VzZW1vdmUgZXZlbnQuIEluc3RlYWQsIGl0IHVzZXMgb25seSB0aGUgbG9n
aWMKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgYWN0dWFsIGN1cnNvciBjaGFuZ2UgdG8gaGFwcGVu
LgorCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yIHdhcyByZWZhY3RvcmVkIHRv
IG5vdCB0YWtlIGEgd2hvbGUgbW91c2UgZXZlbnQgYnV0IGluc3RlYWQgd29yayB3aXRoCisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgc28gdGhhdCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvciBtdXN0
IG5vdCBjcmVhdGUgYSB1c2VsZXNzIFBsYXRmb3JtRXZlbnQuCisKKyAgICAgICAgRml4ZXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2
ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5vIGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBi
dXR0b24gZG93bikKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnNjaGVkdWxlQ3Vyc29yVXBkYXRlKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgor
ICAgICAgICAoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgor
CiAyMDEzLTAyLTE1ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEu
Y29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGhpdFRlc3RSZXN1bHRBdFBvaW50IGFuZCBub2Rlc0Zy
b21SZWN0IEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBiNmYxYTIw
NDdkYmZkNWU2NjFlMGE0MDE2N2ZmMzhiZjJhYTRkZDNhLi40M2FhMWVmNzVhMThkZWFkMDQzZDRh
OTg3MmM2ZDRhY2NkYmQxNGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0xNDQsNiArMTQ0LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKIGNvbnN0IGRvdWJs
ZSBmYWtlTW91c2VNb3ZlU2hvcnRJbnRlcnZhbCA9IDAuMTsKIGNvbnN0IGRvdWJsZSBmYWtlTW91
c2VNb3ZlTG9uZ0ludGVydmFsID0gMC4yNTA7CiAKKy8vIFRoZSBhbW91bnQgb2YgdGltZSB0byB3
YWl0IGZvciBhIGN1cnNvciB1cGRhdGUgb24gc3R5bGUgYW5kIGxheW91dCBjaGFuZ2VzCisvLyBT
ZXQgdG8gNTBIeiwgbm8gbmVlZCB0byBiZSBmYXN0ZXIgdGhhbiBjb21tb24gc2NyZWVuIHJlZnJl
c2ggcmF0ZQorY29uc3QgZG91YmxlIGN1cnNvclVwZGF0ZUludGVydmFsID0gMC4wMjsKKwogY29u
c3QgaW50IG1heGltdW1DdXJzb3JTaXplID0gMTI4OwogI2lmIEVOQUJMRShNT1VTRV9DVVJTT1Jf
U0NBTEUpCiAvLyBJdCdzIHByZXR0eSB1bmxpa2VseSB0aGF0IGEgc2NhbGUgb2YgbGVzcyB0aGFu
IG9uZSB3b3VsZCBldmVyIGJlIHVzZWQuIEJ1dCBhbGwgd2UgcmVhbGx5CkBAIC0zMTksNiArMzIz
LDcgQEAgRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJhbWUqIGZyYW1lKQogICAgICwgbV9t
b3VzZURvd25XYXNTaW5nbGVDbGlja0luU2VsZWN0aW9uKGZhbHNlKQogICAgICwgbV9zZWxlY3Rp
b25Jbml0aWF0aW9uU3RhdGUoSGF2ZU5vdFN0YXJ0ZWRTZWxlY3Rpb24pCiAgICAgLCBtX2hvdmVy
VGltZXIodGhpcywgJkV2ZW50SGFuZGxlcjo6aG92ZXJUaW1lckZpcmVkKQorICAgICwgbV9jdXJz
b3JVcGRhdGVUaW1lcih0aGlzLCAmRXZlbnRIYW5kbGVyOjpjdXJzb3JVcGRhdGVUaW1lckZpcmVk
KQogICAgICwgbV9hdXRvc2Nyb2xsQ29udHJvbGxlcihhZG9wdFB0cihuZXcgQXV0b3Njcm9sbENv
bnRyb2xsZXIpKQogICAgICwgbV9tb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGwoZmFsc2UpCiAg
ICAgLCBtX21vdXNlRG93bldhc0luU3ViZnJhbWUoZmFsc2UpCkBAIC0zNjgsNiArMzczLDcgQEAg
RHJhZ1N0YXRlJiBFdmVudEhhbmRsZXI6OmRyYWdTdGF0ZSgpCiB2b2lkIEV2ZW50SGFuZGxlcjo6
Y2xlYXIoKQogewogICAgIG1faG92ZXJUaW1lci5zdG9wKCk7CisgICAgbV9jdXJzb3JVcGRhdGVU
aW1lci5zdG9wKCk7CiAgICAgbV9mYWtlTW91c2VNb3ZlRXZlbnRUaW1lci5zdG9wKCk7CiAgICAg
bV9yZXNpemVMYXllciA9IDA7CiAgICAgbV9ub2RlVW5kZXJNb3VzZSA9IDA7CkBAIC0xMjM0LDgg
KzEyNDAsNTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnVzZUhhbmRDdXJzb3IoTm9kZSogbm9kZSwg
Ym9vbCBpc092ZXJMaW5rLCBib29sIHNoaWZ0S2V5KQogICAgIHJldHVybiAoKGlzT3Zlckxpbmsg
fHwgaXNTdWJtaXRJbWFnZShub2RlKSkgJiYgKCFlZGl0YWJsZSB8fCBlZGl0YWJsZUxpbmtFbmFi
bGVkKSk7CiB9CiAKLU9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50LCBTY3JvbGxiYXIqIHNjcm9s
bGJhcikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpjdXJzb3JVcGRhdGVUaW1lckZpcmVkKFRpbWVyPEV2
ZW50SGFuZGxlcj4qKQoreworICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICBBU1NFUlQobV9mcmFt
ZS0+ZG9jdW1lbnQoKSk7CisKKyAgICB1cGRhdGVDdXJzb3IoKTsKK30KKwordm9pZCBFdmVudEhh
bmRsZXI6OnVwZGF0ZUN1cnNvcigpCit7CisgICAgaWYgKG1fbW91c2VQb3NpdGlvbklzVW5rbm93
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+
c2V0dGluZ3MoKTsKKyAgICBpZiAoc2V0dGluZ3MgJiYgIXNldHRpbmdzLT5kZXZpY2VTdXBwb3J0
c01vdXNlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJh
bWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9mcmFtZS0+cGFnZSgpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPmlzT25zY3JlZW4oKSB8fCAhbV9m
cmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBzaGlmdEtleTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBh
bHRLZXk7CisgICAgYm9vbCBtZXRhS2V5OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0
Q3VycmVudE1vZGlmaWVyU3RhdGUoc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7
CisKKyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7
CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQodmlldy0+d2luZG93VG9Db250ZW50cyhtX2xhc3RL
bm93bk1vdXNlUG9zaXRpb24pKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3
KCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlv
bmFsQ3Vyc29yID0gc2VsZWN0Q3Vyc29yKHJlc3VsdCwgc2hpZnRLZXkpOworICAgIGlmIChvcHRp
b25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vy
c29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1cnNvciht
X2N1cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCitPcHRpb25hbEN1cnNvciBFdmVudEhh
bmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2hp
ZnRLZXkpCiB7CisgICAgaWYgKG1fY3Vyc29yVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9jdXJzb3JVcGRhdGVUaW1lci5zdG9wKCk7CisKICAgICBpZiAobV9yZXNpemVMYXllciAm
JiBtX3Jlc2l6ZUxheWVyLT5pblJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIE5vQ3Vyc29y
Q2hhbmdlOwogCkBAIC0xMjQ3LDggKzEyOTcsMTYgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5k
bGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYK
ICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOwogI2VuZGlmCiAKLSAgICBOb2RlKiBub2Rl
ID0gZXZlbnQudGFyZ2V0Tm9kZSgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2Rl
ID8gbm9kZS0+cmVuZGVyZXIoKSA6IDA7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC50YXJnZXRO
b2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7Cisg
ICAgYm9vbCBvcmlnaW5hbElzVGV4dCA9IG5vZGUtPmlzVGV4dE5vZGUoKTsKKyAgICBpZiAobm9k
ZSAmJiBvcmlnaW5hbElzVGV4dCkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKKworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogICAgIGJvb2wgaG9y
aXpvbnRhbFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CiAgICAgY29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8gaUJlYW1DdXJzb3Io
KSA6IHZlcnRpY2FsVGV4dEN1cnNvcigpOwpAQCAtMTI2NCw3ICsxMzIyLDcgQEAgT3B0aW9uYWxD
dXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgZXYKIAogICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICBDdXJzb3Igb3Zl
cnJpZGVDdXJzb3I7Ci0gICAgICAgIHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVk
SW50UG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7CisgICAgICAg
IHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2Fs
UG9pbnQoKSksIG92ZXJyaWRlQ3Vyc29yKSkgewogICAgICAgICBjYXNlIFNldEN1cnNvckJhc2Vk
T25TdHlsZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldEN1cnNvcjoKQEAg
LTEzMTEsMTkgKzEzNjksMTkgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RD
dXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKIAogICAgIHN3aXRj
aCAoc3R5bGUgPyBzdHlsZS0+Y3Vyc29yKCkgOiBDVVJTT1JfQVVUTykgewogICAgIGNhc2UgQ1VS
U09SX0FVVE86IHsKLSAgICAgICAgYm9vbCBlZGl0YWJsZSA9IChub2RlICYmIG5vZGUtPnJlbmRl
cmVySXNFZGl0YWJsZSgpKTsKKyAgICAgICAgYm9vbCBlZGl0YWJsZSA9IChub2RlLT5yZW5kZXJl
cklzRWRpdGFibGUoKSk7CiAKLSAgICAgICAgaWYgKHVzZUhhbmRDdXJzb3Iobm9kZSwgZXZlbnQu
aXNPdmVyTGluaygpLCBldmVudC5ldmVudCgpLnNoaWZ0S2V5KCkpKQorICAgICAgICBpZiAodXNl
SGFuZEN1cnNvcihub2RlLCByZXN1bHQuVVJMRWxlbWVudCgpICYmIHJlc3VsdC5VUkxFbGVtZW50
KCktPmlzTGluaygpLCBzaGlmdEtleSkpCiAgICAgICAgICAgICByZXR1cm4gaGFuZEN1cnNvcigp
OwogCiAgICAgICAgIGJvb2wgaW5SZXNpemVyID0gZmFsc2U7CiAgICAgICAgIGlmIChyZW5kZXJl
cikgewogICAgICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5lbmNs
b3NpbmdMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1f
ZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlz
UG9pbnRJblJlc2l6ZUNvbnRyb2wodmlldy0+d2luZG93VG9Db250ZW50cyhldmVudC5ldmVudCgp
LnBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlz
UG9pbnRJblJlc2l6ZUNvbnRyb2wodmlldy0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9p
bnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBpZiAoKGVkaXRhYmxlIHx8IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0KCkgJiYg
bm9kZS0+Y2FuU3RhcnRTZWxlY3Rpb24oKSkpICYmICFpblJlc2l6ZXIgJiYgIXNjcm9sbGJhcikK
KyAgICAgICAgaWYgKChlZGl0YWJsZSB8fCAob3JpZ2luYWxJc1RleHQgJiYgbm9kZS0+Y2FuU3Rh
cnRTZWxlY3Rpb24oKSkpICYmICFpblJlc2l6ZXIgJiYgIXJlc3VsdC5zY3JvbGxiYXIoKSkKICAg
ICAgICAgICAgIHJldHVybiBpQmVhbTsKICAgICAgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsK
ICAgICB9CkBAIC0xNzM0LDcgKzE3OTIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAg
ICAgICBpZiAoc2Nyb2xsYmFyICYmICFtX21vdXNlUHJlc3NlZCkKICAgICAgICAgICAgIHNjcm9s
bGJhci0+bW91c2VNb3ZlZChtb3VzZUV2ZW50KTsgLy8gSGFuZGxlIGhvdmVyIGVmZmVjdHMgb24g
cGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB2aXN1YWwgZmVlZGJhY2sgb24gc2Nyb2xsYmFyIGhvdmVy
aW5nLgogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKSB7Ci0g
ICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVjdEN1cnNvciht
ZXYsIHNjcm9sbGJhcik7CisgICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNv
ciA9IHNlbGVjdEN1cnNvcihtZXYuaGl0VGVzdFJlc3VsdCgpLCBtb3VzZUV2ZW50LnNoaWZ0S2V5
KCkpOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkpIHsK
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRNb3VzZUN1cnNvciA9IG9wdGlvbmFsQ3Vyc29yLmN1
cnNvcigpOwogICAgICAgICAgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRNb3VzZUN1
cnNvcik7CkBAIC0yOTMxLDYgKzI5ODksMTIgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNjaGVkdWxl
SG92ZXJTdGF0ZVVwZGF0ZSgpCiAgICAgICAgIG1faG92ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7
CiB9CiAKK3ZvaWQgRXZlbnRIYW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0ZSgpCit7CisgICAg
aWYgKCFtX2N1cnNvclVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fY3Vyc29yVXBk
YXRlVGltZXIuc3RhcnRPbmVTaG90KGN1cnNvclVwZGF0ZUludGVydmFsKTsKK30KKwogdm9pZCBF
dmVudEhhbmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigpCiB7CiAgICAgaWYg
KG1fbW91c2VQcmVzc2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggM2ZjMDdm
MmZhMjUyZjljNDVmMjRmMWY2YjU1ZTQ3ZTdhMDBkNzUzZS4uM2M0YTNkYzI4M2VkMDBkZTUzOTNj
MjYxNzYzOTAxY2YyMGJlYTgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0x
NDMsNiArMTQzLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIHNjaGVkdWxlSG92ZXJT
dGF0ZVVwZGF0ZSgpOworICAgIHZvaWQgc2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsKIAogICAgIHZv
aWQgc2V0UmVzaXppbmdGcmFtZVNldChIVE1MRnJhbWVTZXRFbGVtZW50Kik7CiAKQEAgLTI0OSw2
ICsyNTAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgdXNlSGFuZEN1cnNvcihOb2Rl
KiwgYm9vbCBpc092ZXJMaW5rLCBib29sIHNoaWZ0S2V5KTsKKyAgICB2b2lkIHVwZGF0ZUN1cnNv
cigpOwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0yNzUsOCArMjc3
LDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50
KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAotICAgIE9wdGlvbmFsQ3Vy
c29yIHNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgU2Ny
b2xsYmFyKik7CisgICAgT3B0aW9uYWxDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCBib29sIHNoaWZ0S2V5KTsKKwogICAgIHZvaWQgaG92ZXJUaW1lckZpcmVkKFRpbWVy
PEV2ZW50SGFuZGxlcj4qKTsKKyAgICB2b2lkIGN1cnNvclVwZGF0ZVRpbWVyRmlyZWQoVGltZXI8
RXZlbnRIYW5kbGVyPiopOwogCiAgICAgYm9vbCBsb2dpY2FsU2Nyb2xsT3ZlcmZsb3coU2Nyb2xs
TG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIE5vZGUqIHN0YXJ0aW5nTm9kZSA9
IDApOwogICAgIApAQCAtNDA0LDYgKzQwOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhblNj
cm9sbEJ1dHRvblByZXNzZWQ7CiAKICAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1faG92ZXJUaW1l
cjsKKyAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1fY3Vyc29yVXBkYXRlVGltZXI7CiAKICAgICBP
d25QdHI8QXV0b3Njcm9sbENvbnRyb2xsZXI+IG1fYXV0b3Njcm9sbENvbnRyb2xsZXI7CiAgICAg
Ym9vbCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggZjBlYzRkNTA0NjE0MjgzMGJjYmI2NTdjMzFiZTZj
OTMwMTdhZDkzNy4uNWVlOTc4MjNiZTI3NDU5YjQ2MTU2ODMwZGEyZjY5MmMxNzM3MDBjNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE5NjgsNyArMTk2
OCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Ug
ZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0CiAKICAgICBpZiAob2xkU3R5bGUgJiYgIWFy
ZUN1cnNvcnNFcXVhbChvbGRTdHlsZSwgc3R5bGUoKSkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IHRoaXMtPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigpOworICAgICAgICAgICAgZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5zY2hlZHVsZUN1cnNvclVwZGF0ZSgpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDBhMzRiYTNkMTYyNDYxYTlkN2VjNTY0MjZmM2I5MDg5NzVmZGQ5MDIuLmNkMzQzMWY1YzRmZWVi
ZDFmMDNhZTRlNzJkY2UyZWNhODcxMThmNGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0w
Mi0xNSAgQWl2byBQYWFzICA8YWl2b3BhYXNAZ21haWwuY29tPgorCisgICAgICAgIFVwZGF0aW5n
IG1vdXNlIGN1cnNvciBvbiBzdHlsZSBjaGFuZ2VzIHdpdGhvdXQgZW1pdHRpbmcgZmFrZSBtb3Vz
ZW1vdmUgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMTg1NworICAgICAgICBDaGFuZ2luZyBDU1MgY3Vyc29yIHNob3VsZCB3b3JrIG5vIG1h
dHRlciBpcyBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBvciBub3QKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMzQxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGNoYW5naW5nIGN1
cnNvciBvbiBtb3VzZW1vdmUsIG1vdXNlZG93biwgbW91c2V1cCBhbmQgbW91c2Vtb3ZlCisgICAg
ICAgIHdoaWxlIG1vdXNlIGJ1dHRvbiBiZWluZyBoZWxkIGRvd24uIEFsc28gYWRkZWQgdGVzdCB0
byB2ZXJpZnkgdGhhdCBhIG1vdXNlbW92ZQorICAgICAgICBldmVudCBpcyBub3QgZmlyZWQgZm9y
IGNoYW5naW5nIGN1cnNvciB3aGVuIG1vdXNlIGlzIG5vdCBtb3ZpbmcuCisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczogVGhl
IG5ldyBjdXJzb3IgY2hhbmdlIHRlc3QgZmFpbHMgb24gbWFjCisKIDIwMTMtMDItMTQgIEFsZXhh
bmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBJbXBsZW1lbnQgdHJhY2tpbmcgb2YgYWN0aXZlIHN0eWxlc2hlZXRzIGluIHRoZSBmcm9u
dGVuZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3It
Y2hhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGI3YWJlYTcyYTcxMDE2ZGExNDAzNDk5
MzVlNjAxYTkzYzI5NDNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNCBAQAorVGVz
dCB0aGF0IG1vdXNlIGN1cnNvcnMgYXJlIGNoYW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0J1ZyA1MzM0MQorCisKK01vdXNl
IG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKworTW91c2UgZG93bgor
Q3Vyc29yIEluZm86IHR5cGU9UHJvZ3Jlc3MgaG90U3BvdD0wLDAKKworTW91c2UgaG9sZCBkb3du
LCBtb3ZlCitDdXJzb3IgSW5mbzogdHlwZT1IYW5kIGhvdFNwb3Q9MCwwCisKK01vdXNlIHVwCitD
dXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk0NzcyYTVhM2E2YjFk
NTk2ZWIyODhlOTg0MTI2NGUwYThlNjMyZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApAQCAtMCwwICsxLDgwIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxh
IGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MSI+QnVn
IDUzMzQxPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0
YXJnZXQiIG9uTW91c2VEb3duPSJzdHlsZS5jdXJzb3I9J3Byb2dyZXNzJztldmVudC5wcmV2ZW50
RGVmYXVsdCgpOyIgb25Nb3VzZU1vdmU9InN0eWxlLmN1cnNvcj0ncG9pbnRlcic7IiBvbk1vdXNl
VXA9InN0eWxlLmN1cnNvcj0naGVscCc7IiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Ij5QbGF5IHdp
dGggbW91c2Ugb24gdGhpcyBlbGVtZW50LiBDdXJzb3JzIGNoYW5nZSBvbiBldmVudHMgLSBtb3Vz
ZW1vdmU6IHBvaW50ZXIoaGFuZCksIG1vdXNlZG93bjogcHJvZ3Jlc3MsIG1vdXNldXA6IGhlbHAu
PC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+
Cit2YXIgQ1VSU09SX1VQREFURV9ERUxBWSA9IDUwOworCitkZXNjcmlwdGlvbigiVGVzdCB0aGF0
IG1vdXNlIGN1cnNvcnMgYXJlIGNoYW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4iKTsK
KworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3Qg
cmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7
CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCitmdW5jdGlvbiBy
dW5UZXN0KHByZXBhcmUsIG5leHQpIHsKKyAgICBwcmVwYXJlKCk7CisgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVy
bmFscy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgICAgICBkZWJ1ZygnJyk7
CisgICAgICAgIG5leHQoKTsKKyAgICB9LCBDVVJTT1JfVVBEQVRFX0RFTEFZKTsKK30KKworZnVu
Y3Rpb24gdGVzdHNEb25lKCkgeworICAgIC8vIFRoaXMgdGV4dCBpcyByZWR1bmRhbnQgd2l0aCB0
aGUgdGVzdCBvdXRwdXQgLSBoaWRlIGl0CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rl
c3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNl
bmRlcgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZXZlbnRTZW5kZXIuZHJhZ01vZGUgPSBm
YWxzZTsKKyAgICB2YXIgdGVzdHMgPSBbCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgZGVidWcoJ01vdXNlIG1vdmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92
ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMywgdGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAgICAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBkb3duJyk7CisgICAg
ICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgaG9sZCBkb3duLCBtb3ZlJyk7CisgICAgICAgICAg
ICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDEzLCB0YXJnZXQu
b2Zmc2V0VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVi
dWcoJ01vdXNlIHVwJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAg
ICAgIH0KKyAgICBdOworCisgICAgdmFyIGkgPSAwOworICAgIGZ1bmN0aW9uIG5leHRUZXN0KCkg
eworICAgICAgICBpZiAoaSA8IHRlc3RzLmxlbmd0aCkgeworICAgICAgICAgICAgcnVuVGVzdCh0
ZXN0c1tpKytdLCBuZXh0VGVzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0
c0RvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBuZXh0VGVzdCgpOworfQorCis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hNWQwNjQ1ZTliNzYxMTNmN2M0MWVkYWQ5ZjI2Y2ZmZTk0ZjdlNjkxCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1v
dXNlbW92ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorVGVzdCB0aGF0IHRoZXJlIGlz
IG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0J1ZyA4NTM0MworCisKK1RFU1QgQ0FTRTogTW91c2Ug
aWRsZSwgY2hhbmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50CitDdXJz
b3IgSW5mbzogdHlwZT1Qb2ludGVyIGhvdFNwb3Q9MCwwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxw
IGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJz
b3Itbm8tbW91c2Vtb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJz
b3Itbm8tbW91c2Vtb3ZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNiNmZhZGIwMTFiOTNmNWFkNzM2OWMy
OWMyNjM4MDVkZmNkNDg2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhy
ZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyI+QnVnIDg1
MzQzPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJn
ZXQiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+TW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91
bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50PC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Cit2YXIgQ1VSU09SX1VQREFURV9ERUxBWSA9IDUw
OworCitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBm
aXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4iKTsKKworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIp
IHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsK
K30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0
KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgd2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRo
b3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIG5vZGUg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZGVidWcoJ1RFU1QgQ0FT
RTogJyArIG5vZGUudGV4dENvbnRlbnQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKG5v
ZGUub2Zmc2V0TGVmdCArIDMsIG5vZGUub2Zmc2V0VG9wICsgMyk7CisgICAgZGVidWcoJ0N1cnNv
ciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVu
dCkpOworICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoJ01vdXNlbW92ZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVk
IHdoZW4gY2hhbmdpbmcgY3Vyc29yJyk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0p
OworICAgIG5vZGUuc3R5bGUuY3Vyc29yID0gJ2hlbHAnOworICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMu
Z2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAg
IH0sIENVUlNPUl9VUERBVEVfREVMQVkpOworCisgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIHRo
ZSBjaGFuZ2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1vdmUgZXZlbnQgdGhhdCBjYXVzZWQgYnVn
LCBpcyB1c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9
ICdub25lJzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgMTUwKTsKK30KKworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOWI4YjliODZmZmU2ZDNlZDZhN2U0MjBhOWVkNGM1ZWNh
MmMzYWU2Zi4uM2EyZjFlNzI3NmNkZWM0YjJjNjM4YTUzZmMxYjhhNDMyOThkYTIwMyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE0MTcsMyArMTQxNyw2
IEBAIHdlYmtpdC5vcmcvYi8xMDkyMDkgZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvYmlkaS1pZ25v
cmVkLWZvci1maXJzdC1jaGlsZC1pbmxpbmUuCiB3ZWJraXQub3JnL2IvMTA5MjMyIFsgRGVidWcg
XSBpbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItcmVsb2FkLW9uLXBhdXNlLmh0bWwgWyBDcmFz
aCBdCiAKIHdlYmtpdC5vcmcvYi8xMDk4NjkgbWVkaWEvbWVkaWEtY2FwdGlvbnMuaHRtbCBbIENy
YXNoIF0KKworIyBNYWMgZmFpbHMgY3Vyc29yIGNoYW5nZSB0ZXN0IGZvciB1bmtub3duIHJlYXNv
bnMKK3dlYmtpdC5vcmcvYi8xMDM4NTcgZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5o
dG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188638</attachid>
            <date>2013-02-15 13:47:38 -0800</date>
            <delta_ts>2013-02-27 02:32:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130215234400.patch</filename>
            <type>text/plain</type>
            <size>19175</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkwZGUyMDhmMTQyYzE3
NzQzNzc1NzAwZDFmZGU3MTliMmZiNjFjNS4uMDBmYjc5OWU2ZTJlYWI3MWI5NTdjYmFiNzUxZTJl
MzY1ZGMxNjgxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEzLTAyLTE1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKS4KKworICAgICAgICBUaGUgbmV3IGFwcHJvYWNoIGRvZXMgbm90IHVz
ZSB0aGUgZmFrZSBtb3VzZW1vdmUgZXZlbnQuIEluc3RlYWQsIGl0IHVzZXMgb25seSB0aGUgbG9n
aWMKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgYWN0dWFsIGN1cnNvciBjaGFuZ2UgdG8gaGFwcGVu
LgorCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yIHdhcyByZWZhY3RvcmVkIHRv
IG5vdCB0YWtlIGEgd2hvbGUgbW91c2UgZXZlbnQgYnV0IGluc3RlYWQgd29yayB3aXRoCisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgc28gdGhhdCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvciBtdXN0
IG5vdCBjcmVhdGUgYSB1c2VsZXNzIFBsYXRmb3JtRXZlbnQuCisKKyAgICAgICAgRml4ZXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2
ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5vIGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBi
dXR0b24gZG93bikKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnNjaGVkdWxlQ3Vyc29yVXBkYXRlKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgor
ICAgICAgICAoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgor
CiAyMDEzLTAyLTE0ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBDbGFtcCBzcGFuIHZhbHVlIGluIFJlbmRlclRhYmxlQ2VsbDo6cGFyc2VbQ29sfFJvd11TcGFu
RnJvbURPTQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGI2ZjFhMjA0N2Ri
ZmQ1ZTY2MWUwYTQwMTY3ZmYzOGJmMmFhNGRkM2EuLjQzYWExZWY3NWExOGRlYWQwNDNkNGE5ODcy
YzZkNGFjY2RiZDE0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTE0
NCw2ICsxNDQsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwogY29uc3QgZG91YmxlIGZh
a2VNb3VzZU1vdmVTaG9ydEludGVydmFsID0gMC4xOwogY29uc3QgZG91YmxlIGZha2VNb3VzZU1v
dmVMb25nSW50ZXJ2YWwgPSAwLjI1MDsKIAorLy8gVGhlIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQg
Zm9yIGEgY3Vyc29yIHVwZGF0ZSBvbiBzdHlsZSBhbmQgbGF5b3V0IGNoYW5nZXMKKy8vIFNldCB0
byA1MEh6LCBubyBuZWVkIHRvIGJlIGZhc3RlciB0aGFuIGNvbW1vbiBzY3JlZW4gcmVmcmVzaCBy
YXRlCitjb25zdCBkb3VibGUgY3Vyc29yVXBkYXRlSW50ZXJ2YWwgPSAwLjAyOworCiBjb25zdCBp
bnQgbWF4aW11bUN1cnNvclNpemUgPSAxMjg7CiAjaWYgRU5BQkxFKE1PVVNFX0NVUlNPUl9TQ0FM
RSkKIC8vIEl0J3MgcHJldHR5IHVubGlrZWx5IHRoYXQgYSBzY2FsZSBvZiBsZXNzIHRoYW4gb25l
IHdvdWxkIGV2ZXIgYmUgdXNlZC4gQnV0IGFsbCB3ZSByZWFsbHkKQEAgLTMxOSw2ICszMjMsNyBA
QCBFdmVudEhhbmRsZXI6OkV2ZW50SGFuZGxlcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX21vdXNl
RG93bldhc1NpbmdsZUNsaWNrSW5TZWxlY3Rpb24oZmFsc2UpCiAgICAgLCBtX3NlbGVjdGlvbklu
aXRpYXRpb25TdGF0ZShIYXZlTm90U3RhcnRlZFNlbGVjdGlvbikKICAgICAsIG1faG92ZXJUaW1l
cih0aGlzLCAmRXZlbnRIYW5kbGVyOjpob3ZlclRpbWVyRmlyZWQpCisgICAgLCBtX2N1cnNvclVw
ZGF0ZVRpbWVyKHRoaXMsICZFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQpCiAg
ICAgLCBtX2F1dG9zY3JvbGxDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBBdXRvc2Nyb2xsQ29udHJv
bGxlcikpCiAgICAgLCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbChmYWxzZSkKICAgICAs
IG1fbW91c2VEb3duV2FzSW5TdWJmcmFtZShmYWxzZSkKQEAgLTM2OCw2ICszNzMsNyBAQCBEcmFn
U3RhdGUmIEV2ZW50SGFuZGxlcjo6ZHJhZ1N0YXRlKCkKIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVh
cigpCiB7CiAgICAgbV9ob3ZlclRpbWVyLnN0b3AoKTsKKyAgICBtX2N1cnNvclVwZGF0ZVRpbWVy
LnN0b3AoKTsKICAgICBtX2Zha2VNb3VzZU1vdmVFdmVudFRpbWVyLnN0b3AoKTsKICAgICBtX3Jl
c2l6ZUxheWVyID0gMDsKICAgICBtX25vZGVVbmRlck1vdXNlID0gMDsKQEAgLTEyMzQsOCArMTI0
MCw1MiBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBib29s
IGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpCiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8fCBp
c1N1Ym1pdEltYWdlKG5vZGUpKSAmJiAoIWVkaXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJsZWQp
KTsKIH0KIAotT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQsIFNjcm9sbGJhciogc2Nyb2xsYmFy
KQordm9pZCBFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQoVGltZXI8RXZlbnRI
YW5kbGVyPiopCit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFTU0VSVChtX2ZyYW1lLT5k
b2N1bWVudCgpKTsKKworICAgIHVwZGF0ZUN1cnNvcigpOworfQorCit2b2lkIEV2ZW50SGFuZGxl
cjo6dXBkYXRlQ3Vyc29yKCkKK3sKKyAgICBpZiAobV9tb3VzZVBvc2l0aW9uSXNVbmtub3duKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0
aW5ncygpOworICAgIGlmIChzZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmRldmljZVN1cHBvcnRzTW91
c2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+
dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2Zy
YW1lLT5wYWdlKCkgfHwgIW1fZnJhbWUtPnBhZ2UoKS0+aXNPbnNjcmVlbigpIHx8ICFtX2ZyYW1l
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBib29sIHNoaWZ0S2V5OworICAgIGJvb2wgY3RybEtleTsKKyAgICBib29sIGFsdEtl
eTsKKyAgICBib29sIG1ldGFLZXk7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRDdXJy
ZW50TW9kaWZpZXJTdGF0ZShzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsKKwor
ICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fbGFzdEtub3du
TW91c2VQb3NpdGlvbikpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKS0+
aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOworCisgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxD
dXJzb3IgPSBzZWxlY3RDdXJzb3IocmVzdWx0LCBzaGlmdEtleSk7CisgICAgaWYgKG9wdGlvbmFs
Q3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkpIHsKKyAgICAgICAgbV9jdXJyZW50TW91c2VDdXJzb3Ig
PSBvcHRpb25hbEN1cnNvci5jdXJzb3IoKTsKKyAgICAgICAgdmlldy0+c2V0Q3Vyc29yKG1fY3Vy
cmVudE1vdXNlQ3Vyc29yKTsKKyAgICB9Cit9CisKK09wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxl
cjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaGlmdEtl
eSkKIHsKKyAgICBpZiAobV9jdXJzb3JVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBt
X2N1cnNvclVwZGF0ZVRpbWVyLnN0b3AoKTsKKwogICAgIGlmIChtX3Jlc2l6ZUxheWVyICYmIG1f
cmVzaXplTGF5ZXItPmluUmVzaXplTW9kZSgpKQogICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFu
Z2U7CiAKQEAgLTEyNDcsOCArMTI5NywxNiBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6
OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogICAg
ICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CiAjZW5kaWYKIAotICAgIE5vZGUqIG5vZGUgPSBl
dmVudC50YXJnZXROb2RlKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUgPyBu
b2RlLT5yZW5kZXJlcigpIDogMDsKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LnRhcmdldE5vZGUo
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKKyAgICBi
b29sIG9yaWdpbmFsSXNUZXh0ID0gbm9kZS0+aXNUZXh0Tm9kZSgpOworICAgIGlmIChub2RlICYm
IG9yaWdpbmFsSXNUZXh0KQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOworCisgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gcmVuZGVyZXIgPyByZW5kZXJlci0+c3R5bGUoKSA6IDA7CiAgICAgYm9vbCBob3Jpem9u
dGFsVGV4dCA9ICFzdHlsZSB8fCBzdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAg
ICBjb25zdCBDdXJzb3ImIGlCZWFtID0gaG9yaXpvbnRhbFRleHQgPyBpQmVhbUN1cnNvcigpIDog
dmVydGljYWxUZXh0Q3Vyc29yKCk7CkBAIC0xMjY0LDcgKzEzMjIsNyBAQCBPcHRpb25hbEN1cnNv
ciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBldgogCiAgICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAgIEN1cnNvciBvdmVycmlk
ZUN1cnNvcjsKLSAgICAgICAgc3dpdGNoIChyZW5kZXJlci0+Z2V0Q3Vyc29yKHJvdW5kZWRJbnRQ
b2ludChldmVudC5sb2NhbFBvaW50KCkpLCBvdmVycmlkZUN1cnNvcikpIHsKKyAgICAgICAgc3dp
dGNoIChyZW5kZXJlci0+Z2V0Q3Vyc29yKHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9jYWxQb2lu
dCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7CiAgICAgICAgIGNhc2UgU2V0Q3Vyc29yQmFzZWRPblN0
eWxlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0Q3Vyc29yOgpAQCAtMTMx
MSwxOSArMTM2OSwxOSBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNv
cihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogCiAgICAgc3dpdGNoIChz
dHlsZSA/IHN0eWxlLT5jdXJzb3IoKSA6IENVUlNPUl9BVVRPKSB7CiAgICAgY2FzZSBDVVJTT1Jf
QVVUTzogewotICAgICAgICBib29sIGVkaXRhYmxlID0gKG5vZGUgJiYgbm9kZS0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCkpOworICAgICAgICBib29sIGVkaXRhYmxlID0gKG5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKTsKIAotICAgICAgICBpZiAodXNlSGFuZEN1cnNvcihub2RlLCBldmVudC5pc092
ZXJMaW5rKCksIGV2ZW50LmV2ZW50KCkuc2hpZnRLZXkoKSkpCisgICAgICAgIGlmICh1c2VIYW5k
Q3Vyc29yKG5vZGUsIHJlc3VsdC5VUkxFbGVtZW50KCkgJiYgcmVzdWx0LlVSTEVsZW1lbnQoKS0+
aXNMaW5rKCksIHNoaWZ0S2V5KSkKICAgICAgICAgICAgIHJldHVybiBoYW5kQ3Vyc29yKCk7CiAK
ICAgICAgICAgYm9vbCBpblJlc2l6ZXIgPSBmYWxzZTsKICAgICAgICAgaWYgKHJlbmRlcmVyKSB7
CiAgICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmVuY2xvc2lu
Z0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+dmlldygpKQotICAgICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2lu
dEluUmVzaXplQ29udHJvbCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LmV2ZW50KCkucG9z
aXRpb24oKSkpOworICAgICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2lu
dEluUmVzaXplQ29udHJvbCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJvdW5kZWRJbnRQb2ludChy
ZXN1bHQubG9jYWxQb2ludCgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IGlmICgoZWRpdGFibGUgfHwgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHQoKSAmJiBub2Rl
LT5jYW5TdGFydFNlbGVjdGlvbigpKSkgJiYgIWluUmVzaXplciAmJiAhc2Nyb2xsYmFyKQorICAg
ICAgICBpZiAoKGVkaXRhYmxlIHx8IChvcmlnaW5hbElzVGV4dCAmJiBub2RlLT5jYW5TdGFydFNl
bGVjdGlvbigpKSkgJiYgIWluUmVzaXplciAmJiAhcmVzdWx0LnNjcm9sbGJhcigpKQogICAgICAg
ICAgICAgcmV0dXJuIGlCZWFtOwogICAgICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwogICAg
IH0KQEAgLTE3MzQsNyArMTc5Miw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1v
dmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAgICAgICAg
IGlmIChzY3JvbGxiYXIgJiYgIW1fbW91c2VQcmVzc2VkKQogICAgICAgICAgICAgc2Nyb2xsYmFy
LT5tb3VzZU1vdmVkKG1vdXNlRXZlbnQpOyAvLyBIYW5kbGUgaG92ZXIgZWZmZWN0cyBvbiBwbGF0
Zm9ybXMgdGhhdCBzdXBwb3J0IHZpc3VhbCBmZWVkYmFjayBvbiBzY3JvbGxiYXIgaG92ZXJpbmcu
CiAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpIHsKLSAgICAg
ICAgICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0Q3Vyc29yKG1ldiwg
c2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0g
c2VsZWN0Q3Vyc29yKG1ldi5oaXRUZXN0UmVzdWx0KCksIG1vdXNlRXZlbnQuc2hpZnRLZXkoKSk7
CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxDdXJzb3IuaXNDdXJzb3JDaGFuZ2UoKSkgewogICAg
ICAgICAgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29y
KCk7CiAgICAgICAgICAgICAgICAgdmlldy0+c2V0Q3Vyc29yKG1fY3VycmVudE1vdXNlQ3Vyc29y
KTsKQEAgLTI5MzEsNiArMjk4OSwxMiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2NoZWR1bGVIb3Zl
clN0YXRlVXBkYXRlKCkKICAgICAgICAgbV9ob3ZlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0K
IAordm9pZCBFdmVudEhhbmRsZXI6OnNjaGVkdWxlQ3Vyc29yVXBkYXRlKCkKK3sKKyAgICBpZiAo
IW1fY3Vyc29yVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9jdXJzb3JVcGRhdGVU
aW1lci5zdGFydE9uZVNob3QoY3Vyc29yVXBkYXRlSW50ZXJ2YWwpOworfQorCiB2b2lkIEV2ZW50
SGFuZGxlcjo6ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCkKIHsKICAgICBpZiAobV9t
b3VzZVByZXNzZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCAzZmMwN2YyZmEy
NTJmOWM0NWYyNGYxZjZiNTVlNDdlN2EwMGQ3NTNlLi4zYzRhM2RjMjgzZWQwMGRlNTM5M2MyNjE3
NjM5MDFjZjIwYmVhODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTE0Myw2
ICsxNDMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgc2NoZWR1bGVIb3ZlclN0YXRl
VXBkYXRlKCk7CisgICAgdm9pZCBzY2hlZHVsZUN1cnNvclVwZGF0ZSgpOwogCiAgICAgdm9pZCBz
ZXRSZXNpemluZ0ZyYW1lU2V0KEhUTUxGcmFtZVNldEVsZW1lbnQqKTsKIApAQCAtMjQ5LDYgKzI1
MCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCB1c2VIYW5kQ3Vyc29yKE5vZGUqLCBi
b29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpOworICAgIHZvaWQgdXBkYXRlQ3Vyc29yKCk7
CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKQEAgLTI3NSw4ICsyNzcsMTAg
QEAgcHJpdmF0ZToKICNlbmRpZgogICAgIGJvb2wgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogCi0gICAgT3B0aW9uYWxDdXJzb3Ig
c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBTY3JvbGxi
YXIqKTsKKyAgICBPcHRpb25hbEN1cnNvciBzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3Vs
dCYsIGJvb2wgc2hpZnRLZXkpOworCiAgICAgdm9pZCBob3ZlclRpbWVyRmlyZWQoVGltZXI8RXZl
bnRIYW5kbGVyPiopOworICAgIHZvaWQgY3Vyc29yVXBkYXRlVGltZXJGaXJlZChUaW1lcjxFdmVu
dEhhbmRsZXI+Kik7CiAKICAgICBib29sIGxvZ2ljYWxTY3JvbGxPdmVyZmxvdyhTY3JvbGxMb2dp
Y2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7
CiAgICAgCkBAIC00MDQsNiArNDA4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFuU2Nyb2xs
QnV0dG9uUHJlc3NlZDsKIAogICAgIFRpbWVyPEV2ZW50SGFuZGxlcj4gbV9ob3ZlclRpbWVyOwor
ICAgIFRpbWVyPEV2ZW50SGFuZGxlcj4gbV9jdXJzb3JVcGRhdGVUaW1lcjsKIAogICAgIE93blB0
cjxBdXRvc2Nyb2xsQ29udHJvbGxlcj4gbV9hdXRvc2Nyb2xsQ29udHJvbGxlcjsKICAgICBib29s
IG1fbW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAppbmRleCBmMGVjNGQ1MDQ2MTQyODMwYmNiYjY1N2MzMWJlNmM5MzAx
N2FkOTM3Li41ZWU5NzgyM2JlMjc0NTliNDYxNTY4MzBkYTJmNjkyYzE3MzcwMGM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTk2OCw3ICsxOTY4LDcg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIGlmIChvbGRTdHlsZSAmJiAhYXJlQ3Vy
c29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZGlz
cGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7CisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPnNjaGVkdWxlQ3Vyc29yVXBkYXRlKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDA5
OTM4ZTc3Y2M5OGQ5MWM1ZmU3OGQ4Y2E2NmMxMDdjNGE4YWI1Yy4uMjU2YjFkZjEwM2UwNzU3OGM0
MDhmZTBmMTZhOGNlNzE4NzMyODdhOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAyLTE1
ICBBaXZvIFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91
c2UgY3Vyc29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92
ZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxODU3CisgICAgICAgIENoYW5naW5nIENTUyBjdXJzb3Igc2hvdWxkIHdvcmsgbm8gbWF0dGVy
IGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIG5vdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgY2hhbmdpbmcgY3Vyc29y
IG9uIG1vdXNlbW92ZSwgbW91c2Vkb3duLCBtb3VzZXVwIGFuZCBtb3VzZW1vdmUKKyAgICAgICAg
d2hpbGUgbW91c2UgYnV0dG9uIGJlaW5nIGhlbGQgZG93bi4gQWxzbyBhZGRlZCB0ZXN0IHRvIHZl
cmlmeSB0aGF0IGEgbW91c2Vtb3ZlCisgICAgICAgIGV2ZW50IGlzIG5vdCBmaXJlZCBmb3IgY2hh
bmdpbmcgY3Vyc29yIHdoZW4gbW91c2UgaXMgbm90IG1vdmluZy4KKworICAgICAgICAqIGZhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOiBUaGUgbmV3
IGN1cnNvciBjaGFuZ2UgdGVzdCBmYWlscyBvbiBtYWMKKwogMjAxMy0wMi0xNCAgRW1pbCBBIEVr
bHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2xhbXAgc3BhbiB2YWx1ZSBpbiBS
ZW5kZXJUYWJsZUNlbGw6OnBhcnNlW0NvbHxSb3ddU3BhbkZyb21ET00KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDhiN2FiZWE3MmE3MTAxNmRhMTQwMzQ5OTM1ZTYwMWE5M2MyOTQzZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFu
Z2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgdGhhdCBtb3VzZSBjdXJzb3Jz
IGFyZSBjaGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitCdWcgNTMzNDEKKworCitNb3VzZSBtb3ZlCitDdXJzb3IgSW5mbzog
dHlwZT1IYW5kIGhvdFNwb3Q9MCwwCisKK01vdXNlIGRvd24KK0N1cnNvciBJbmZvOiB0eXBlPVBy
b2dyZXNzIGhvdFNwb3Q9MCwwCisKK01vdXNlIGhvbGQgZG93biwgbW92ZQorQ3Vyc29yIEluZm86
IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitNb3VzZSB1cAorQ3Vyc29yIEluZm86IHR5cGU9SGVs
cCBob3RTcG90PTAsMAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vy
c29yLWNoYW5nZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NDc3MmE1YTNhNmIxZDU5NmViMjg4ZTk4NDEyNjRlMGE4
ZTYzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1j
dXJzb3ItY2hhbmdlLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEiPkJ1ZyA1MzM0MTwvYT48L3A+Cis8ZGl2
IGlkPSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBvbk1vdXNlRG93bj0i
c3R5bGUuY3Vyc29yPSdwcm9ncmVzcyc7ZXZlbnQucHJldmVudERlZmF1bHQoKTsiIG9uTW91c2VN
b3ZlPSJzdHlsZS5jdXJzb3I9J3BvaW50ZXInOyIgb25Nb3VzZVVwPSJzdHlsZS5jdXJzb3I9J2hl
bHAnOyIgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyI+UGxheSB3aXRoIG1vdXNlIG9uIHRoaXMgZWxl
bWVudC4gQ3Vyc29ycyBjaGFuZ2Ugb24gZXZlbnRzIC0gbW91c2Vtb3ZlOiBwb2ludGVyKGhhbmQp
LCBtb3VzZWRvd246IHByb2dyZXNzLCBtb3VzZXVwOiBoZWxwLjwvZGl2PgorPC9kaXY+Cis8YnIv
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgordmFyIENVUlNPUl9VUERBVEVf
REVMQVkgPSA1MDsKKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBj
aGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuIik7CisKK2lmICghd2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJU
cmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gcnVuVGVzdChwcmVwYXJlLCBuZXh0
KSB7CisgICAgcHJlcGFyZSgpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAg
IGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNv
ckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBuZXh0KCk7Cisg
ICAgfSwgQ1VSU09SX1VQREFURV9ERUxBWSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RzRG9uZSgpIHsK
KyAgICAvLyBUaGlzIHRleHQgaXMgcmVkdW5kYW50IHdpdGggdGhlIHRlc3Qgb3V0cHV0IC0gaGlk
ZSBpdAorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKKy8vIENhbid0IGRv
IGFueXRoaW5nIHVzZWZ1bCBoZXJlIHdpdGhvdXQgZXZlbnRTZW5kZXIKK2lmICh3aW5kb3cuZXZl
bnRTZW5kZXIpIHsKKyAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rh
cmdldCcpOworICAgIGV2ZW50U2VuZGVyLmRyYWdNb2RlID0gZmFsc2U7CisgICAgdmFyIHRlc3Rz
ID0gWworICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBtb3Zl
Jyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVm
dCArIDMsIHRhcmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBkZWJ1ZygnTW91c2UgZG93bicpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIu
bW91c2VEb3duKCk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWco
J01vdXNlIGhvbGQgZG93biwgbW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VN
b3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAxMywgdGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAg
ICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSB1cCcpOworICAg
ICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgICB9CisgICAgXTsKKworICAg
IHZhciBpID0gMDsKKyAgICBmdW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAgICAgICAgaWYgKGkgPCB0
ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJ1blRlc3QodGVzdHNbaSsrXSwgbmV4dFRlc3Qp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdHNEb25lKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgbmV4dFRlc3QoKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNv
ci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVkMDY0NWU5
Yjc2MTEzZjdjNDFlZGFkOWYyNmNmZmU5NGY3ZTY5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQg
ZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitCdWcgODUzNDMKKworCitURVNUIENBU0U6IE1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Ig
c2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVudAorQ3Vyc29yIEluZm86IHR5cGU9UG9pbnRl
ciBob3RTcG90PTAsMAorQ3Vyc29yIEluZm86IHR5cGU9SGVscCBob3RTcG90PTAsMAorCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFjYjZmYWRiMDExYjkzZjVhZDczNjljMjljMjYzODA1ZGZjZDQ4NmEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8t
bW91c2Vtb3ZlLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDMiPkJ1ZyA4NTM0MzwvYT48L3A+Cis8ZGl2IGlk
PSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0iY3Vyc29yOmRl
ZmF1bHQiPk1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92
ZSBldmVudDwvZGl2PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0PgordmFyIENVUlNPUl9VUERBVEVfREVMQVkgPSA1MDsKKworZGVzY3JpcHRpb24oIlRl
c3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2luZyBj
dXJzb3IuIik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgn
VGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKwor
Ly8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYg
KHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3RhcmdldCcpOworICAgIGRlYnVnKCdURVNUIENBU0U6ICcgKyBub2RlLnRleHRDb250
ZW50KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhub2RlLm9mZnNldExlZnQgKyAzLCBu
b2RlLm9mZnNldFRvcCArIDMpOworICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5p
bnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICBub2RlLmFkZEV2
ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVk
KCdNb3VzZW1vdmUgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNv
cicpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKKyAgICBub2RlLnN0eWxlLmN1
cnNvciA9ICdoZWxwJzsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1
ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZv
KGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICB9LCBDVVJTT1JfVVBEQVRFX0RF
TEFZKTsKKworICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgY2hhbmdlIHRvIHJlc29sdmUu
IEZha2UgbW91c2Vtb3ZlIGV2ZW50IHRoYXQgY2F1c2VkIGJ1ZywgaXMgdXNpbmcgYSB0aW1lcgor
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0sIDE1MCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IDM2MjlkMDNiOGRhM2U1YjRlYmU5MDlmZTg5MDQ3YjAzMjUwM2U5YzEuLjg1NDQ5ZDhjZGE0
NDkzZTlhMGY0MDY5Y2E2NmQwNjZiNTY3OTk5YzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNDE4LDMgKzE0MTgsNiBAQCB3ZWJraXQub3JnL2IvMTA5
MjMyIFsgRGVidWcgXSBpbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItcmVsb2FkLW9uLXBhdXNl
Lmh0bWwgWwogCiAjIE5ldyB0ZXN0IGZhaWxpbmcsIG5lZWRzIGludmVzdGlnYXRpb24uCiB3ZWJr
aXQub3JnL2IvMTA5MTc5IGNvbXBvc2l0aW5nL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vbi1sYXJn
ZS1sYXllci5odG1sIFsgRmFpbHVyZSBdCisKKyMgTWFjIGZhaWxzIGN1cnNvciBjaGFuZ2UgdGVz
dCBmb3IgdW5rbm93biByZWFzb25zCit3ZWJraXQub3JnL2IvMTAzODU3IGZhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1jaGFuZ2UuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190475</attachid>
            <date>2013-02-27 02:32:23 -0800</date>
            <delta_ts>2013-03-05 13:30:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130227122833.patch</filename>
            <type>text/plain</type>
            <size>19133</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhlOWQ1NDE2YjgxZGU0
YTVhZDk3MTY3MGNkMjkwMjkwZGU1MTRmNS4uNGZlNDJmZmVkMTkwZDJkOGNiODhmNjVmYThjMmZj
NjgzZTMxMDZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEzLTAyLTI3ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKS4KKworICAgICAgICBUaGUgbmV3IGFwcHJvYWNoIGRvZXMgbm90IHVz
ZSB0aGUgZmFrZSBtb3VzZW1vdmUgZXZlbnQuIEluc3RlYWQsIGl0IHVzZXMgb25seSB0aGUgbG9n
aWMKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgYWN0dWFsIGN1cnNvciBjaGFuZ2UgdG8gaGFwcGVu
LgorCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yIHdhcyByZWZhY3RvcmVkIHRv
IG5vdCB0YWtlIGEgd2hvbGUgbW91c2UgZXZlbnQgYnV0IGluc3RlYWQgd29yayB3aXRoCisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgc28gdGhhdCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvciBtdXN0
IG5vdCBjcmVhdGUgYSB1c2VsZXNzIFBsYXRmb3JtRXZlbnQuCisKKyAgICAgICAgRml4ZXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2
ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5vIGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBi
dXR0b24gZG93bikKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnNjaGVkdWxlQ3Vyc29yVXBkYXRlKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgor
ICAgICAgICAoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgor
CiAyMDEzLTAyLTI2ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgV2ViIEluc3BlY3Rvcjogc2hvdyByYXN0ZXIgdGFza3Mgb24gVGltZWxpbmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2YzE1YWM0Zjk5YmI1NjIyNDg2YzMzNmJm
MGY0MWQ2M2RjZGIwZjJhLi43MzIyZjhjMWFiNGE4OGI3MzRmNzk3MWU2MjZiMDlhMjUwNWZjZDBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0xNDQsNiArMTQ0LDEwIEBA
IHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKIGNvbnN0IGRvdWJsZSBmYWtlTW91c2VNb3ZlU2hv
cnRJbnRlcnZhbCA9IDAuMTsKIGNvbnN0IGRvdWJsZSBmYWtlTW91c2VNb3ZlTG9uZ0ludGVydmFs
ID0gMC4yNTA7CiAKKy8vIFRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciBhIGN1cnNvciB1
cGRhdGUgb24gc3R5bGUgYW5kIGxheW91dCBjaGFuZ2VzCisvLyBTZXQgdG8gNTBIeiwgbm8gbmVl
ZCB0byBiZSBmYXN0ZXIgdGhhbiBjb21tb24gc2NyZWVuIHJlZnJlc2ggcmF0ZQorY29uc3QgZG91
YmxlIGN1cnNvclVwZGF0ZUludGVydmFsID0gMC4wMjsKKwogY29uc3QgaW50IG1heGltdW1DdXJz
b3JTaXplID0gMTI4OwogI2lmIEVOQUJMRShNT1VTRV9DVVJTT1JfU0NBTEUpCiAvLyBJdCdzIHBy
ZXR0eSB1bmxpa2VseSB0aGF0IGEgc2NhbGUgb2YgbGVzcyB0aGFuIG9uZSB3b3VsZCBldmVyIGJl
IHVzZWQuIEJ1dCBhbGwgd2UgcmVhbGx5CkBAIC0zMTksNiArMzIzLDcgQEAgRXZlbnRIYW5kbGVy
OjpFdmVudEhhbmRsZXIoRnJhbWUqIGZyYW1lKQogICAgICwgbV9tb3VzZURvd25XYXNTaW5nbGVD
bGlja0luU2VsZWN0aW9uKGZhbHNlKQogICAgICwgbV9zZWxlY3Rpb25Jbml0aWF0aW9uU3RhdGUo
SGF2ZU5vdFN0YXJ0ZWRTZWxlY3Rpb24pCiAgICAgLCBtX2hvdmVyVGltZXIodGhpcywgJkV2ZW50
SGFuZGxlcjo6aG92ZXJUaW1lckZpcmVkKQorICAgICwgbV9jdXJzb3JVcGRhdGVUaW1lcih0aGlz
LCAmRXZlbnRIYW5kbGVyOjpjdXJzb3JVcGRhdGVUaW1lckZpcmVkKQogICAgICwgbV9hdXRvc2Ny
b2xsQ29udHJvbGxlcihhZG9wdFB0cihuZXcgQXV0b3Njcm9sbENvbnRyb2xsZXIpKQogICAgICwg
bV9tb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGwoZmFsc2UpCiAgICAgLCBtX21vdXNlRG93bldh
c0luU3ViZnJhbWUoZmFsc2UpCkBAIC0zNjgsNiArMzczLDcgQEAgRHJhZ1N0YXRlJiBFdmVudEhh
bmRsZXI6OmRyYWdTdGF0ZSgpCiB2b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXIoKQogewogICAgIG1f
aG92ZXJUaW1lci5zdG9wKCk7CisgICAgbV9jdXJzb3JVcGRhdGVUaW1lci5zdG9wKCk7CiAgICAg
bV9mYWtlTW91c2VNb3ZlRXZlbnRUaW1lci5zdG9wKCk7CiAgICAgbV9yZXNpemVMYXllciA9IDA7
CiAgICAgbV9ub2RlVW5kZXJNb3VzZSA9IDA7CkBAIC0xMjEzLDggKzEyMTksNTIgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OnVzZUhhbmRDdXJzb3IoTm9kZSogbm9kZSwgYm9vbCBpc092ZXJMaW5rLCBi
b29sIHNoaWZ0S2V5KQogICAgIHJldHVybiAoKGlzT3ZlckxpbmsgfHwgaXNTdWJtaXRJbWFnZShu
b2RlKSkgJiYgKCFlZGl0YWJsZSB8fCBlZGl0YWJsZUxpbmtFbmFibGVkKSk7CiB9CiAKLU9wdGlv
bmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGV2ZW50LCBTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3ZvaWQgRXZlbnRI
YW5kbGVyOjpjdXJzb3JVcGRhdGVUaW1lckZpcmVkKFRpbWVyPEV2ZW50SGFuZGxlcj4qKQorewor
ICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisK
KyAgICB1cGRhdGVDdXJzb3IoKTsKK30KKwordm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNv
cigpCit7CisgICAgaWYgKG1fbW91c2VQb3NpdGlvbklzVW5rbm93bikKKyAgICAgICAgcmV0dXJu
OworCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBp
ZiAoc2V0dGluZ3MgJiYgIXNldHRpbmdzLT5kZXZpY2VTdXBwb3J0c01vdXNlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBp
ZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9mcmFtZS0+cGFnZSgpIHx8
ICFtX2ZyYW1lLT5wYWdlKCktPmlzT25zY3JlZW4oKSB8fCAhbV9mcmFtZS0+cGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBz
aGlmdEtleTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBhbHRLZXk7CisgICAgYm9vbCBt
ZXRhS2V5OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1vZGlmaWVyU3Rh
dGUoc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7CisKKyAgICBIaXRUZXN0UmVx
dWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgSGl0VGVzdFJlc3Vs
dCByZXN1bHQodmlldy0+d2luZG93VG9Db250ZW50cyhtX2xhc3RLbm93bk1vdXNlUG9zaXRpb24p
KTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPmhpdFRlc3QocmVxdWVz
dCwgcmVzdWx0KTsKKworICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0
Q3Vyc29yKHJlc3VsdCwgc2hpZnRLZXkpOworICAgIGlmIChvcHRpb25hbEN1cnNvci5pc0N1cnNv
ckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJz
b3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNv
cik7CisgICAgfQorfQorCitPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNv
cihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2hpZnRLZXkpCiB7CisgICAgaWYg
KG1fY3Vyc29yVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9jdXJzb3JVcGRhdGVU
aW1lci5zdG9wKCk7CisKICAgICBpZiAobV9yZXNpemVMYXllciAmJiBtX3Jlc2l6ZUxheWVyLT5p
blJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOwogCkBAIC0xMjI2
LDggKzEyNzYsMTYgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3Io
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKICAgICAgICAgcmV0dXJuIE5v
Q3Vyc29yQ2hhbmdlOwogI2VuZGlmCiAKLSAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9k
ZSgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlID8gbm9kZS0+cmVuZGVyZXIo
KSA6IDA7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC50YXJnZXROb2RlKCk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisgICAgYm9vbCBvcmlnaW5hbElz
VGV4dCA9IG5vZGUtPmlzVGV4dE5vZGUoKTsKKyAgICBpZiAobm9kZSAmJiBvcmlnaW5hbElzVGV4
dCkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVy
ID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogICAgIGJvb2wgaG9yaXpvbnRhbFRleHQgPSAhc3R5
bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgY29uc3QgQ3Vyc29y
JiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8gaUJlYW1DdXJzb3IoKSA6IHZlcnRpY2FsVGV4dEN1
cnNvcigpOwpAQCAtMTI0Myw3ICsxMzAxLDcgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVy
OjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKIAog
ICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICBDdXJzb3Igb3ZlcnJpZGVDdXJzb3I7Ci0gICAg
ICAgIHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVkSW50UG9pbnQoZXZlbnQubG9j
YWxQb2ludCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7CisgICAgICAgIHN3aXRjaCAocmVuZGVyZXIt
PmdldEN1cnNvcihyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSksIG92ZXJyaWRl
Q3Vyc29yKSkgewogICAgICAgICBjYXNlIFNldEN1cnNvckJhc2VkT25TdHlsZToKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldEN1cnNvcjoKQEAgLTEyOTAsMTkgKzEzNDgsMTkg
QEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKIAogICAgIHN3aXRjaCAoc3R5bGUgPyBzdHlsZS0+
Y3Vyc29yKCkgOiBDVVJTT1JfQVVUTykgewogICAgIGNhc2UgQ1VSU09SX0FVVE86IHsKLSAgICAg
ICAgYm9vbCBlZGl0YWJsZSA9IChub2RlICYmIG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKTsK
KyAgICAgICAgYm9vbCBlZGl0YWJsZSA9IChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CiAK
LSAgICAgICAgaWYgKHVzZUhhbmRDdXJzb3Iobm9kZSwgZXZlbnQuaXNPdmVyTGluaygpLCBldmVu
dC5ldmVudCgpLnNoaWZ0S2V5KCkpKQorICAgICAgICBpZiAodXNlSGFuZEN1cnNvcihub2RlLCBy
ZXN1bHQuVVJMRWxlbWVudCgpICYmIHJlc3VsdC5VUkxFbGVtZW50KCktPmlzTGluaygpLCBzaGlm
dEtleSkpCiAgICAgICAgICAgICByZXR1cm4gaGFuZEN1cnNvcigpOwogCiAgICAgICAgIGJvb2wg
aW5SZXNpemVyID0gZmFsc2U7CiAgICAgICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICAgICAg
aWYgKFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKLSAg
ICAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRy
b2wodmlldy0+d2luZG93VG9Db250ZW50cyhldmVudC5ldmVudCgpLnBvc2l0aW9uKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRy
b2wodmlldy0+d2luZG93VG9Db250ZW50cyhyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9p
bnQoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoKGVkaXRhYmxl
IHx8IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0KCkgJiYgbm9kZS0+Y2FuU3RhcnRTZWxl
Y3Rpb24oKSkpICYmICFpblJlc2l6ZXIgJiYgIXNjcm9sbGJhcikKKyAgICAgICAgaWYgKChlZGl0
YWJsZSB8fCAob3JpZ2luYWxJc1RleHQgJiYgbm9kZS0+Y2FuU3RhcnRTZWxlY3Rpb24oKSkpICYm
ICFpblJlc2l6ZXIgJiYgIXJlc3VsdC5zY3JvbGxiYXIoKSkKICAgICAgICAgICAgIHJldHVybiBp
QmVhbTsKICAgICAgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKICAgICB9CkBAIC0xNzEzLDcg
KzE3NzEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgICAgICBpZiAoc2Nyb2xsYmFy
ICYmICFtX21vdXNlUHJlc3NlZCkKICAgICAgICAgICAgIHNjcm9sbGJhci0+bW91c2VNb3ZlZCht
b3VzZUV2ZW50KTsgLy8gSGFuZGxlIGhvdmVyIGVmZmVjdHMgb24gcGxhdGZvcm1zIHRoYXQgc3Vw
cG9ydCB2aXN1YWwgZmVlZGJhY2sgb24gc2Nyb2xsYmFyIGhvdmVyaW5nLgogICAgICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKSB7Ci0gICAgICAgICAgICBPcHRpb25h
bEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVjdEN1cnNvcihtZXYsIHNjcm9sbGJhcik7Cisg
ICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVjdEN1cnNvciht
ZXYuaGl0VGVzdFJlc3VsdCgpLCBtb3VzZUV2ZW50LnNoaWZ0S2V5KCkpOwogICAgICAgICAgICAg
aWYgKG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkpIHsKICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRNb3VzZUN1cnNvciA9IG9wdGlvbmFsQ3Vyc29yLmN1cnNvcigpOwogICAgICAgICAg
ICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7CkBAIC0yOTEzLDYg
KzI5NzEsMTIgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgp
CiAgICAgICAgIG1faG92ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKK3ZvaWQgRXZlbnRI
YW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0ZSgpCit7CisgICAgaWYgKCFtX2N1cnNvclVwZGF0
ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fY3Vyc29yVXBkYXRlVGltZXIuc3RhcnRPbmVT
aG90KGN1cnNvclVwZGF0ZUludGVydmFsKTsKK30KKwogdm9pZCBFdmVudEhhbmRsZXI6OmRpc3Bh
dGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigpCiB7CiAgICAgaWYgKG1fbW91c2VQcmVzc2VkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggM2ZjMDdmMmZhMjUyZjljNDVmMjRmMWY2
YjU1ZTQ3ZTdhMDBkNzUzZS4uM2M0YTNkYzI4M2VkMDBkZTUzOTNjMjYxNzYzOTAxY2YyMGJlYTgx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNDMsNiArMTQzLDcgQEAgcHVi
bGljOgogI2VuZGlmCiAKICAgICB2b2lkIHNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgpOworICAg
IHZvaWQgc2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsKIAogICAgIHZvaWQgc2V0UmVzaXppbmdGcmFt
ZVNldChIVE1MRnJhbWVTZXRFbGVtZW50Kik7CiAKQEAgLTI0OSw2ICsyNTAsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogICAgIGJvb2wgdXNlSGFuZEN1cnNvcihOb2RlKiwgYm9vbCBpc092ZXJMaW5r
LCBib29sIHNoaWZ0S2V5KTsKKyAgICB2b2lkIHVwZGF0ZUN1cnNvcigpOwogCiBwcml2YXRlOgog
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0yNzUsOCArMjc3LDEwIEBAIHByaXZhdGU6CiAj
ZW5kaWYKICAgICBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmKTsKIAotICAgIE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihj
b25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgU2Nyb2xsYmFyKik7CisgICAgT3B0
aW9uYWxDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBib29sIHNoaWZ0
S2V5KTsKKwogICAgIHZvaWQgaG92ZXJUaW1lckZpcmVkKFRpbWVyPEV2ZW50SGFuZGxlcj4qKTsK
KyAgICB2b2lkIGN1cnNvclVwZGF0ZVRpbWVyRmlyZWQoVGltZXI8RXZlbnRIYW5kbGVyPiopOwog
CiAgICAgYm9vbCBsb2dpY2FsU2Nyb2xsT3ZlcmZsb3coU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHksIE5vZGUqIHN0YXJ0aW5nTm9kZSA9IDApOwogICAgIApAQCAtNDA0
LDYgKzQwOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhblNjcm9sbEJ1dHRvblByZXNzZWQ7
CiAKICAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1faG92ZXJUaW1lcjsKKyAgICBUaW1lcjxFdmVu
dEhhbmRsZXI+IG1fY3Vyc29yVXBkYXRlVGltZXI7CiAKICAgICBPd25QdHI8QXV0b3Njcm9sbENv
bnRyb2xsZXI+IG1fYXV0b3Njcm9sbENvbnRyb2xsZXI7CiAgICAgYm9vbCBtX21vdXNlRG93bk1h
eVN0YXJ0QXV0b3Njcm9sbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKaW5kZXggN2M0YzI5MjFlNjhhZDNjMzllZmI3MTE2ODYxYWMzZGNjODBlYTVmMS4uZTMzMDk4
ZThhZWZlNWMwYjYxNjdiZTMxMjc1NzAxODNhZTVlZDNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE5NzIsNyArMTk3Miw3IEBAIHZvaWQgUmVuZGVy
T2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0CiAKICAgICBpZiAob2xkU3R5bGUgJiYgIWFyZUN1cnNvcnNFcXVhbChvbGRT
dHlsZSwgc3R5bGUoKSkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1l
KCkpCi0gICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmRpc3BhdGNoRmFrZU1vdXNl
TW92ZUV2ZW50U29vbigpOworICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY2hl
ZHVsZUN1cnNvclVwZGF0ZSgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVlMDJhYmQ1ODhkMjZiZWQy
MWE4YjMzZDc5OGU2YmIzOWZiYzQ5MjcuLmVlMTJhNGJlMzM4ZGVkZDFlZDMwZWUwODA5YmYwMzgx
MjViOTI1NzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0wMi0yNyAgQWl2byBQYWFzICA8
YWl2b3BhYXNAZ21haWwuY29tPgorCisgICAgICAgIFVwZGF0aW5nIG1vdXNlIGN1cnNvciBvbiBz
dHlsZSBjaGFuZ2VzIHdpdGhvdXQgZW1pdHRpbmcgZmFrZSBtb3VzZW1vdmUgZXZlbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTg1NworICAgICAg
ICBDaGFuZ2luZyBDU1MgY3Vyc29yIHNob3VsZCB3b3JrIG5vIG1hdHRlciBpcyBtb3VzZSBidXR0
b24gaXMgcHJlc3NlZCBvciBub3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUzMzQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGNoYW5naW5nIGN1cnNvciBvbiBtb3VzZW1vdmUs
IG1vdXNlZG93biwgbW91c2V1cCBhbmQgbW91c2Vtb3ZlCisgICAgICAgIHdoaWxlIG1vdXNlIGJ1
dHRvbiBiZWluZyBoZWxkIGRvd24uIEFsc28gYWRkZWQgdGVzdCB0byB2ZXJpZnkgdGhhdCBhIG1v
dXNlbW92ZQorICAgICAgICBldmVudCBpcyBub3QgZmlyZWQgZm9yIGNoYW5naW5nIGN1cnNvciB3
aGVuIG1vdXNlIGlzIG5vdCBtb3ZpbmcuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1j
dXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMv
bW91c2UtY3Vyc29yLWNoYW5nZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9t
b3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczogVGhlIG5ldyBjdXJzb3IgY2hhbmdl
IHRlc3QgZmFpbHMgb24gbWFjCisKIDIwMTMtMDItMjcgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZp
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBjaHJvbWl1bSB0ZXN0IGV4cGVj
dGF0aW9ucyB1cGRhdGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3Vz
ZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4YjdhYmVhNzJhNzEw
MTZkYTE0MDM0OTkzNWU2MDFhOTNjMjk0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDI0IEBACitUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24g
bW91c2UgZXZlbnRzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDUzMzQx
CisKKworTW91c2UgbW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitN
b3VzZSBkb3duCitDdXJzb3IgSW5mbzogdHlwZT1Qcm9ncmVzcyBob3RTcG90PTAsMAorCitNb3Vz
ZSBob2xkIGRvd24sIG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKwor
TW91c2UgdXAKK0N1cnNvciBJbmZvOiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTQ3
NzJhNWEzYTZiMWQ1OTZlYjI4OGU5ODQxMjY0ZTBhOGU2MzJkCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCkBAIC0wLDAg
KzEsODAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPHA+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUzMzQxIj5CdWcgNTMzNDE8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAg
IDxkaXYgaWQ9InRhcmdldCIgb25Nb3VzZURvd249InN0eWxlLmN1cnNvcj0ncHJvZ3Jlc3MnO2V2
ZW50LnByZXZlbnREZWZhdWx0KCk7IiBvbk1vdXNlTW92ZT0ic3R5bGUuY3Vyc29yPSdwb2ludGVy
JzsiIG9uTW91c2VVcD0ic3R5bGUuY3Vyc29yPSdoZWxwJzsiIHN0eWxlPSJjdXJzb3I6cG9pbnRl
cjsiPlBsYXkgd2l0aCBtb3VzZSBvbiB0aGlzIGVsZW1lbnQuIEN1cnNvcnMgY2hhbmdlIG9uIGV2
ZW50cyAtIG1vdXNlbW92ZTogcG9pbnRlcihoYW5kKSwgbW91c2Vkb3duOiBwcm9ncmVzcywgbW91
c2V1cDogaGVscC48L2Rpdj4KKzwvZGl2PgorPGJyLz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdD4KK3ZhciBDVVJTT1JfVVBEQVRFX0RFTEFZID0gNTA7CisKK2Rlc2NyaXB0aW9u
KCJUZXN0IHRoYXQgbW91c2UgY3Vyc29ycyBhcmUgY2hhbmdlZCBjb3JyZWN0bHkgb24gbW91c2Ug
ZXZlbnRzLiIpOworCitpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHRlc3RGYWlsZWQo
J1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScpOworfQorCitpZiAod2luZG93LnRl
c3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit9CisK
K2Z1bmN0aW9uIHJ1blRlc3QocHJlcGFyZSwgbmV4dCkgeworICAgIHByZXBhcmUoKTsKKyAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3
aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAg
IGRlYnVnKCcnKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0sIENVUlNPUl9VUERBVEVfREVMQVkp
OworfQorCitmdW5jdGlvbiB0ZXN0c0RvbmUoKSB7CisgICAgLy8gVGhpcyB0ZXh0IGlzIHJlZHVu
ZGFudCB3aXRoIHRoZSB0ZXN0IG91dHB1dCAtIGhpZGUgaXQKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndGVzdC1jb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIGZp
bmlzaEpTVGVzdCgpOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRo
b3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIHRhcmdl
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICBldmVudFNlbmRlci5k
cmFnTW9kZSA9IGZhbHNlOworICAgIHZhciB0ZXN0cyA9IFsKKyAgICAgICAgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgbW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5k
ZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAzLCB0YXJnZXQub2Zmc2V0VG9wICsg
Myk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIGRv
d24nKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBob2xkIGRvd24sIG1vdmUnKTsK
KyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsg
MTMsIHRhcmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBkZWJ1ZygnTW91c2UgdXAnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNl
VXAoKTsKKyAgICAgICAgfQorICAgIF07CisKKyAgICB2YXIgaSA9IDA7CisgICAgZnVuY3Rpb24g
bmV4dFRlc3QoKSB7CisgICAgICAgIGlmIChpIDwgdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAg
ICBydW5UZXN0KHRlc3RzW2krK10sIG5leHRUZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHRlc3RzRG9uZSgpOworICAgICAgICB9CisgICAgfQorICAgIG5leHRUZXN0KCk7Cit9
CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1ZDA2NDVlOWI3NjExM2Y3YzQxZWRhZDlmMjZjZmZlOTRm
N2U2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1j
dXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0IHRo
YXQgdGhlcmUgaXMgbm8gbW91c2Vtb3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29y
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQnVnIDg1MzQzCisKKworVEVTVCBD
QVNFOiBNb3VzZSBpZGxlLCBjaGFuZ2UgY3Vyc29yIHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUg
ZXZlbnQKK0N1cnNvciBJbmZvOiB0eXBlPVBvaW50ZXIgaG90U3BvdD0wLDAKK0N1cnNvciBJbmZv
OiB0eXBlPUhlbHAgaG90U3BvdD0wLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2I2ZmFkYjAxMWI5
M2Y1YWQ3MzY5YzI5YzI2MzgwNWRmY2Q0ODZhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCkBAIC0wLDAgKzEs
NTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPHA+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1
MzQzIj5CdWcgODUzNDM8L2E+PC9wPgorPGRpdiBpZD0idGVzdC1jb250YWluZXIiPgorICAgIDxk
aXYgaWQ9InRhcmdldCIgc3R5bGU9ImN1cnNvcjpkZWZhdWx0Ij5Nb3VzZSBpZGxlLCBjaGFuZ2Ug
Y3Vyc29yIHNob3VsZCBub3QgZmlyZSBtb3VzZW1vdmUgZXZlbnQ8L2Rpdj4KKzwvZGl2PgorPGJy
Lz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3ZhciBDVVJTT1JfVVBEQVRF
X0RFTEFZID0gNTA7CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoYXQgdGhlcmUgaXMgbm8gbW91c2Vt
b3ZlIGV2ZW50IGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yLiIpOworCitpZiAoIXdpbmRvdy5l
dmVudFNlbmRlcikgeworICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVu
ZGVyVHJlZScpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB3aW5k
b3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit9CisKKy8vIENhbid0IGRvIGFueXRoaW5nIHVzZWZ1
bCBoZXJlIHdpdGhvdXQgZXZlbnRTZW5kZXIKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAg
ICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICBkZWJ1
ZygnVEVTVCBDQVNFOiAnICsgbm9kZS50ZXh0Q29udGVudCk7CisgICAgZXZlbnRTZW5kZXIubW91
c2VNb3ZlVG8obm9kZS5vZmZzZXRMZWZ0ICsgMywgbm9kZS5vZmZzZXRUb3AgKyAzKTsKKyAgICBk
ZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJ
bmZvKGRvY3VtZW50KSk7CisgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnTW91c2Vtb3ZlIGV2ZW50IHNob3VsZCBu
b3QgYmUgZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3InKTsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSk7CisgICAgbm9kZS5zdHlsZS5jdXJzb3IgPSAnaGVscCc7CisgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93
LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgICAgICBkZWJ1
ZygnJyk7CisgICAgfSwgQ1VSU09SX1VQREFURV9ERUxBWSk7CisKKyAgICAvLyBHaXZlIHNvbWUg
dGltZSBmb3IgdGhlIGNoYW5nZSB0byByZXNvbHZlLiBGYWtlIG1vdXNlbW92ZSBldmVudCB0aGF0
IGNhdXNlZCBidWcsIGlzIHVzaW5nIGEgdGltZXIKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1jb250YWluZXInKS5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCAxNTAp
OworfQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA3ZDY0ZjQzNTBlZGQyMGQ1NjM4ZjY3
ODUyZDk4NzA2MjEwZDQ5MTQ2Li43ZGFjOGRjYTFhMmI3YWVlZDEzNDg2NjZkYTkwODliZjAwZGJh
NzkxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTQ0
OCwzICsxNDQ4LDYgQEAgd2Via2l0Lm9yZy9iLzExMDY1NCBzdmcvY3VzdG9tL2ZvcmVpZ24tb2Jq
ZWN0LXNrZXcuc3ZnIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTEwNjU0IHRhYmxlcy9tb3pp
bGxhL2J1Z3MvYnVnOTI2NDctMi5odG1sIFsgRmFpbHVyZSBdCiAjIE5ldyB0ZXN0CiB3ZWJraXQu
b3JnL2IvMTEwNjU0IGNzczMvZmxleGJveC9idXR0b24uaHRtbCBbIEZhaWx1cmUgXQorCisjIE5l
dyB0ZXN0IGZhaWxpbmcsIG5lZWRzIGludmVzdGlnYXRpb24uCit3ZWJraXQub3JnL2IvMTAzODU3
IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191550</attachid>
            <date>2013-03-05 13:30:17 -0800</date>
            <delta_ts>2013-03-06 09:29:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130305232620.patch</filename>
            <type>text/plain</type>
            <size>19218</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0Nzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM1ZTYzZDZhNTFjMTY3
YmY5OTk2OGMxYjZjODFlZjA2ODViNmUwNi4uMjBlZWM5NzM2OWE2ZWE1YmQxYmM2MDg3ODFkM2U3
N2YzMzIxN2Q0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEzLTAzLTA1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKS4KKworICAgICAgICBUaGUgbmV3IGFwcHJvYWNoIGRvZXMgbm90IHVz
ZSB0aGUgZmFrZSBtb3VzZW1vdmUgZXZlbnQuIEluc3RlYWQsIGl0IHVzZXMgb25seSB0aGUgbG9n
aWMKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgYWN0dWFsIGN1cnNvciBjaGFuZ2UgdG8gaGFwcGVu
LgorCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yIHdhcyByZWZhY3RvcmVkIHRv
IG5vdCB0YWtlIGEgd2hvbGUgbW91c2UgZXZlbnQgYnV0IGluc3RlYWQgd29yayB3aXRoCisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgc28gdGhhdCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvciBtdXN0
IG5vdCBjcmVhdGUgYSB1c2VsZXNzIFBsYXRmb3JtRXZlbnQuCisKKyAgICAgICAgRml4ZXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2
ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5vIGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBi
dXR0b24gZG93bikKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnNjaGVkdWxlQ3Vyc29yVXBkYXRlKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgor
ICAgICAgICAoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgor
CiAyMDEzLTAzLTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgU2ltcGxpZnkgc3RvcmFnZSBldmVudCBkaXNwYXRjaCBzb21ld2hhdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDQzNmJiMzUyMDYxNDgxN2NkMTdiMjJlMmFhZjdl
Njk5N2JiZjM0OTIuLmRkZmRiOWNkOTM1OTQ2NmJhZmE0OWNlMzY5OTMzNjBlODE3Y2Y4MzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTE0NCw2ICsxNDQsMTAgQEAgdXNp
bmcgbmFtZXNwYWNlIFNWR05hbWVzOwogY29uc3QgZG91YmxlIGZha2VNb3VzZU1vdmVTaG9ydElu
dGVydmFsID0gMC4xOwogY29uc3QgZG91YmxlIGZha2VNb3VzZU1vdmVMb25nSW50ZXJ2YWwgPSAw
LjI1MDsKIAorLy8gVGhlIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yIGEgY3Vyc29yIHVwZGF0
ZSBvbiBzdHlsZSBhbmQgbGF5b3V0IGNoYW5nZXMKKy8vIFNldCB0byA1MEh6LCBubyBuZWVkIHRv
IGJlIGZhc3RlciB0aGFuIGNvbW1vbiBzY3JlZW4gcmVmcmVzaCByYXRlCitjb25zdCBkb3VibGUg
Y3Vyc29yVXBkYXRlSW50ZXJ2YWwgPSAwLjAyOworCiBjb25zdCBpbnQgbWF4aW11bUN1cnNvclNp
emUgPSAxMjg7CiAjaWYgRU5BQkxFKE1PVVNFX0NVUlNPUl9TQ0FMRSkKIC8vIEl0J3MgcHJldHR5
IHVubGlrZWx5IHRoYXQgYSBzY2FsZSBvZiBsZXNzIHRoYW4gb25lIHdvdWxkIGV2ZXIgYmUgdXNl
ZC4gQnV0IGFsbCB3ZSByZWFsbHkKQEAgLTMxOSw2ICszMjMsNyBAQCBFdmVudEhhbmRsZXI6OkV2
ZW50SGFuZGxlcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX21vdXNlRG93bldhc1NpbmdsZUNsaWNr
SW5TZWxlY3Rpb24oZmFsc2UpCiAgICAgLCBtX3NlbGVjdGlvbkluaXRpYXRpb25TdGF0ZShIYXZl
Tm90U3RhcnRlZFNlbGVjdGlvbikKICAgICAsIG1faG92ZXJUaW1lcih0aGlzLCAmRXZlbnRIYW5k
bGVyOjpob3ZlclRpbWVyRmlyZWQpCisgICAgLCBtX2N1cnNvclVwZGF0ZVRpbWVyKHRoaXMsICZF
dmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQpCiAgICAgLCBtX2F1dG9zY3JvbGxD
b250cm9sbGVyKGFkb3B0UHRyKG5ldyBBdXRvc2Nyb2xsQ29udHJvbGxlcikpCiAgICAgLCBtX21v
dXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbChmYWxzZSkKICAgICAsIG1fbW91c2VEb3duV2FzSW5T
dWJmcmFtZShmYWxzZSkKQEAgLTM2OCw2ICszNzMsNyBAQCBEcmFnU3RhdGUmIEV2ZW50SGFuZGxl
cjo6ZHJhZ1N0YXRlKCkKIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiB7CiAgICAgbV9ob3Zl
clRpbWVyLnN0b3AoKTsKKyAgICBtX2N1cnNvclVwZGF0ZVRpbWVyLnN0b3AoKTsKICAgICBtX2Zh
a2VNb3VzZU1vdmVFdmVudFRpbWVyLnN0b3AoKTsKICAgICBtX3Jlc2l6ZUxheWVyID0gMDsKICAg
ICBtX25vZGVVbmRlck1vdXNlID0gMDsKQEAgLTEyMTQsOCArMTIyMCw1NCBAQCBib29sIEV2ZW50
SGFuZGxlcjo6dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBib29sIGlzT3ZlckxpbmssIGJvb2wg
c2hpZnRLZXkpCiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8fCBpc1N1Ym1pdEltYWdlKG5vZGUp
KSAmJiAoIWVkaXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJsZWQpKTsKIH0KIAotT3B0aW9uYWxD
dXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgZXZlbnQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBFdmVudEhhbmRs
ZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQoVGltZXI8RXZlbnRIYW5kbGVyPiopCit7CisgICAg
QVNTRVJUKG1fZnJhbWUpOworICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKworICAg
IHVwZGF0ZUN1cnNvcigpOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vyc29yKCkK
K3sKKyAgICBpZiAobV9tb3VzZVBvc2l0aW9uSXNVbmtub3duKQorICAgICAgICByZXR1cm47CisK
KyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGlmIChz
ZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmRldmljZVN1cHBvcnRzTW91c2UoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICgh
dmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkgfHwgIW1f
ZnJhbWUtPnBhZ2UoKS0+aXNPbnNjcmVlbigpIHx8ICFtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLT5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNoaWZ0
S2V5OworICAgIGJvb2wgY3RybEtleTsKKyAgICBib29sIGFsdEtleTsKKyAgICBib29sIG1ldGFL
ZXk7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0ZShz
aGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsKKworICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgSGl0
VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkpOworICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0KHZpZXctPndpbmRvd1RvQ29udGVudHMobV9sYXN0S25vd25Nb3VzZVBv
c2l0aW9uKSk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpLT5oaXRUZXN0
KHJlcXVlc3QsIHJlc3VsdCk7CisKKyAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9
IHNlbGVjdEN1cnNvcihyZXN1bHQsIHNoaWZ0S2V5KTsKKyAgICBpZiAob3B0aW9uYWxDdXJzb3Iu
aXNDdXJzb3JDaGFuZ2UoKSkgeworICAgICAgICBtX2N1cnJlbnRNb3VzZUN1cnNvciA9IG9wdGlv
bmFsQ3Vyc29yLmN1cnNvcigpOworICAgICAgICB2aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91
c2VDdXJzb3IpOworICAgIH0KK30KKworT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxl
Y3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29sIHNoaWZ0S2V5KQogewor
ICAgIGlmIChtX2N1cnNvclVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fY3Vyc29y
VXBkYXRlVGltZXIuc3RvcCgpOworCiAgICAgaWYgKG1fcmVzaXplTGF5ZXIgJiYgbV9yZXNpemVM
YXllci0+aW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKIApA
QCAtMTIyNyw4ICsxMjc5LDE2IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0
Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAgICAgICAgIHJl
dHVybiBOb0N1cnNvckNoYW5nZTsKICNlbmRpZgogCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LnRh
cmdldE5vZGUoKTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJl
bmRlcmVyKCkgOiAwOworICAgIE5vZGUqIG5vZGUgPSByZXN1bHQudGFyZ2V0Tm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOworICAgIGJvb2wgb3Jp
Z2luYWxJc1RleHQgPSBub2RlLT5pc1RleHROb2RlKCk7CisgICAgaWYgKG5vZGUgJiYgb3JpZ2lu
YWxJc1RleHQpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisKKyAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBy
ZW5kZXJlciA/IHJlbmRlcmVyLT5zdHlsZSgpIDogMDsKICAgICBib29sIGhvcml6b250YWxUZXh0
ID0gIXN0eWxlIHx8IHN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGNvbnN0
IEN1cnNvciYgaUJlYW0gPSBob3Jpem9udGFsVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiB2ZXJ0aWNh
bFRleHRDdXJzb3IoKTsKQEAgLTEyNDQsNyArMTMwNCw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMm
IGV2CiAKICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgQ3Vyc29yIG92ZXJyaWRlQ3Vyc29y
OwotICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50KGV2
ZW50LmxvY2FsUG9pbnQoKSksIG92ZXJyaWRlQ3Vyc29yKSkgeworICAgICAgICBzd2l0Y2ggKHJl
bmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpLCBv
dmVycmlkZUN1cnNvcikpIHsKICAgICAgICAgY2FzZSBTZXRDdXJzb3JCYXNlZE9uU3R5bGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRDdXJzb3I6CkBAIC0xMjkxLDE5ICsx
MzUxLDE5IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0
IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBzd2l0Y2ggKHN0eWxlID8g
c3R5bGUtPmN1cnNvcigpIDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRPOiB7
Ci0gICAgICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSk7CisgICAgICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkpOwogCi0gICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2ZW50LmlzT3Zlckxpbmso
KSwgZXZlbnQuZXZlbnQoKS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYgKHVzZUhhbmRDdXJzb3Io
bm9kZSwgcmVzdWx0LlVSTEVsZW1lbnQoKSAmJiByZXN1bHQuVVJMRWxlbWVudCgpLT5pc0xpbmso
KSwgc2hpZnRLZXkpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsKIAogICAgICAg
ICBib29sIGluUmVzaXplciA9IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAg
ICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIo
KSkgewogICAgICAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3
KCkpCi0gICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNp
emVDb250cm9sKHZpZXctPndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigp
KSk7CisgICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNp
emVDb250cm9sKHZpZXctPndpbmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KHJlc3VsdC5s
b2NhbFBvaW50KCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChl
ZGl0YWJsZSB8fCAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0
YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNpemVyICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlm
ICgoZWRpdGFibGUgfHwgKG9yaWdpbmFsSXNUZXh0ICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9u
KCkpKSAmJiAhaW5SZXNpemVyICYmICFyZXN1bHQuc2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gaUJlYW07CiAgICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiAgICAgfQpAQCAt
MTcxMiw3ICsxNzcyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAgICAgICAgaWYgKHNj
cm9sbGJhciAmJiAhbV9tb3VzZVByZXNzZWQpCiAgICAgICAgICAgICBzY3JvbGxiYXItPm1vdXNl
TW92ZWQobW91c2VFdmVudCk7IC8vIEhhbmRsZSBob3ZlciBlZmZlY3RzIG9uIHBsYXRmb3JtcyB0
aGF0IHN1cHBvcnQgdmlzdWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBob3ZlcmluZy4KICAgICAg
ICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAg
T3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3IobWV2LCBzY3JvbGxi
YXIpOworICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RD
dXJzb3IobWV2LmhpdFRlc3RSZXN1bHQoKSwgbW91c2VFdmVudC5zaGlmdEtleSgpKTsKICAgICAg
ICAgICAgIGlmIChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CiAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5jdXJzb3IoKTsKICAg
ICAgICAgICAgICAgICB2aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91c2VDdXJzb3IpOwpAQCAt
MjkzMyw2ICsyOTkzLDEyIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzY2hlZHVsZUhvdmVyU3RhdGVV
cGRhdGUoKQogICAgICAgICBtX2hvdmVyVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCit2b2lk
IEV2ZW50SGFuZGxlcjo6c2NoZWR1bGVDdXJzb3JVcGRhdGUoKQoreworICAgIGlmICghbV9jdXJz
b3JVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2N1cnNvclVwZGF0ZVRpbWVyLnN0
YXJ0T25lU2hvdChjdXJzb3JVcGRhdGVJbnRlcnZhbCk7Cit9CisKIHZvaWQgRXZlbnRIYW5kbGVy
OjpkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKQogewogICAgIGlmIChtX21vdXNlUHJl
c3NlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDM4MGFmMGM3YzhjOGU2Yjhk
ZTQyNzhiYjdjNzkzOTQxOGRlYTA0NmEuLjFiZDA2ZWFmMDhlZmFiZmE5YjMwOTcxNTU2NWJlMDQ4
Y2Q4OWY4MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTQ3LDYgKzE0Nyw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBzY2hlZHVsZUhvdmVyU3RhdGVVcGRhdGUo
KTsKKyAgICB2b2lkIHNjaGVkdWxlQ3Vyc29yVXBkYXRlKCk7CiAKICAgICB2b2lkIHNldFJlc2l6
aW5nRnJhbWVTZXQoSFRNTEZyYW1lU2V0RWxlbWVudCopOwogCkBAIC0yNTQsNiArMjU1LDcgQEAg
cHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHVzZUhhbmRDdXJzb3IoTm9kZSosIGJvb2wgaXNP
dmVyTGluaywgYm9vbCBzaGlmdEtleSk7CisgICAgdm9pZCB1cGRhdGVDdXJzb3IoKTsKIAogcHJp
dmF0ZToKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtMjgwLDggKzI4MiwxMCBAQCBwcml2
YXRlOgogI2VuZGlmCiAgICAgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAKLSAgICBPcHRpb25hbEN1cnNvciBzZWxlY3RD
dXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIFNjcm9sbGJhciopOwor
ICAgIE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiwgYm9v
bCBzaGlmdEtleSk7CisKICAgICB2b2lkIGhvdmVyVGltZXJGaXJlZChUaW1lcjxFdmVudEhhbmRs
ZXI+Kik7CisgICAgdm9pZCBjdXJzb3JVcGRhdGVUaW1lckZpcmVkKFRpbWVyPEV2ZW50SGFuZGxl
cj4qKTsKIAogICAgIGJvb2wgbG9naWNhbFNjcm9sbE92ZXJmbG93KFNjcm9sbExvZ2ljYWxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKICAgICAK
QEAgLTQxMCw2ICs0MTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wYW5TY3JvbGxCdXR0b25Q
cmVzc2VkOwogCiAgICAgVGltZXI8RXZlbnRIYW5kbGVyPiBtX2hvdmVyVGltZXI7CisgICAgVGlt
ZXI8RXZlbnRIYW5kbGVyPiBtX2N1cnNvclVwZGF0ZVRpbWVyOwogCiAgICAgT3duUHRyPEF1dG9z
Y3JvbGxDb250cm9sbGVyPiBtX2F1dG9zY3JvbGxDb250cm9sbGVyOwogICAgIGJvb2wgbV9tb3Vz
ZURvd25NYXlTdGFydEF1dG9zY3JvbGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCmluZGV4IDVlNjcxZTE5NTEwMGNkZWMzMTViY2NmMGUzMmMyNzg5M2UyODQzYzAu
LmY4OWNjMjBjY2ZmODE3M2Y2NmVhN2RkOTQ1MWZlYzVmOGZlZGFjNWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xOTc2LDcgKzE5NzYsNyBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdAogCiAgICAgaWYgKG9sZFN0eWxlICYmICFhcmVDdXJzb3JzRXF1
YWwob2xkU3R5bGUsIHN0eWxlKCkpKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlz
LT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kaXNwYXRjaEZh
a2VNb3VzZU1vdmVFdmVudFNvb24oKTsKKyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0MmU1NjQ3MjJk
ZDM0OTQ4ODM0MGEwM2MwOTMwMTUwOTc5NDBiMDMyLi4xOTdiZTMxZDEzMTZlN2U3YjMzY2NlMDBh
MDI0YTExYjhjYzc3NjQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTMtMDMtMDUgIEFpdm8g
UGFhcyAgPGFpdm9wYWFzQGdtYWlsLmNvbT4KKworICAgICAgICBVcGRhdGluZyBtb3VzZSBjdXJz
b3Igb24gc3R5bGUgY2hhbmdlcyB3aXRob3V0IGVtaXR0aW5nIGZha2UgbW91c2Vtb3ZlIGV2ZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4NTcK
KyAgICAgICAgQ2hhbmdpbmcgQ1NTIGN1cnNvciBzaG91bGQgd29yayBubyBtYXR0ZXIgaXMgbW91
c2UgYnV0dG9uIGlzIHByZXNzZWQgb3Igbm90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBjaGFuZ2luZyBjdXJzb3Igb24gbW91
c2Vtb3ZlLCBtb3VzZWRvd24sIG1vdXNldXAgYW5kIG1vdXNlbW92ZQorICAgICAgICB3aGlsZSBt
b3VzZSBidXR0b24gYmVpbmcgaGVsZCBkb3duLiBBbHNvIGFkZGVkIHRlc3QgdG8gdmVyaWZ5IHRo
YXQgYSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgbm90IGZpcmVkIGZvciBjaGFuZ2luZyBj
dXJzb3Igd2hlbiBtb3VzZSBpcyBub3QgbW92aW5nLgorCisgICAgICAgICogZmFzdC9ldmVudHMv
bW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9l
dmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnM6IFRoZSBuZXcgY3Vyc29y
IGNoYW5nZSB0ZXN0IGZhaWxzIG9uIG1hYworCiAyMDEzLTAzLTA0ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIGVkaXRpbmcvcGFzdGVib2FyZC81MjQ3MzQxLmh0
bWwgc2hvdWxkIGJlIGEgZHVtcC1hcy1tYXJrdXAgdGVzdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40OGI3YWJlYTcyYTcxMDE2ZGExNDAzNDk5MzVlNjAxYTkzYzI5NDNkCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyNCBAQAorVGVzdCB0aGF0IG1vdXNlIGN1cnNvcnMgYXJlIGNo
YW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK0J1ZyA1MzM0MQorCisKK01vdXNlIG1vdmUKK0N1cnNvciBJbmZvOiB0eXBlPUhh
bmQgaG90U3BvdD0wLDAKKworTW91c2UgZG93bgorQ3Vyc29yIEluZm86IHR5cGU9UHJvZ3Jlc3Mg
aG90U3BvdD0wLDAKKworTW91c2UgaG9sZCBkb3duLCBtb3ZlCitDdXJzb3IgSW5mbzogdHlwZT1I
YW5kIGhvdFNwb3Q9MCwwCisKK01vdXNlIHVwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNw
b3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hh
bmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTk0NzcyYTVhM2E2YjFkNTk2ZWIyODhlOTg0MTI2NGUwYThlNjMyZAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1j
aGFuZ2UuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MSI+QnVnIDUzMzQxPC9hPjwvcD4KKzxkaXYgaWQ9InRl
c3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQiIG9uTW91c2VEb3duPSJzdHlsZS5j
dXJzb3I9J3Byb2dyZXNzJztldmVudC5wcmV2ZW50RGVmYXVsdCgpOyIgb25Nb3VzZU1vdmU9InN0
eWxlLmN1cnNvcj0ncG9pbnRlcic7IiBvbk1vdXNlVXA9InN0eWxlLmN1cnNvcj0naGVscCc7IiBz
dHlsZT0iY3Vyc29yOnBvaW50ZXI7Ij5QbGF5IHdpdGggbW91c2Ugb24gdGhpcyBlbGVtZW50LiBD
dXJzb3JzIGNoYW5nZSBvbiBldmVudHMgLSBtb3VzZW1vdmU6IHBvaW50ZXIoaGFuZCksIG1vdXNl
ZG93bjogcHJvZ3Jlc3MsIG1vdXNldXA6IGhlbHAuPC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Cit2YXIgQ1VSU09SX1VQREFURV9ERUxBWSA9
IDUwOworCitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IG1vdXNlIGN1cnNvcnMgYXJlIGNoYW5nZWQg
Y29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4iKTsKKworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIp
IHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsK
K30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0
KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgd2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworfQorCitmdW5jdGlvbiBydW5UZXN0KHByZXBhcmUsIG5leHQpIHsKKyAg
ICBwcmVwYXJlKCk7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWco
J0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhk
b2N1bWVudCkpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIG5leHQoKTsKKyAgICB9LCBD
VVJTT1JfVVBEQVRFX0RFTEFZKTsKK30KKworZnVuY3Rpb24gdGVzdHNEb25lKCkgeworICAgIC8v
IFRoaXMgdGV4dCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdGVzdCBvdXRwdXQgLSBoaWRlIGl0Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxh
eSA9ICdub25lJzsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworLy8gQ2FuJ3QgZG8gYW55dGhp
bmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRvdy5ldmVudFNlbmRl
cikgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7
CisgICAgZXZlbnRTZW5kZXIuZHJhZ01vZGUgPSBmYWxzZTsKKyAgICB2YXIgdGVzdHMgPSBbCisg
ICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIG1vdmUnKTsKKyAg
ICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMywg
dGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGRlYnVnKCdNb3VzZSBkb3duJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZURv
d24oKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2Ug
aG9sZCBkb3duLCBtb3ZlJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0
YXJnZXQub2Zmc2V0TGVmdCArIDEzLCB0YXJnZXQub2Zmc2V0VG9wICsgMyk7CisgICAgICAgIH0s
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIHVwJyk7CisgICAgICAgICAg
ICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgICAgIH0KKyAgICBdOworCisgICAgdmFyIGkg
PSAwOworICAgIGZ1bmN0aW9uIG5leHRUZXN0KCkgeworICAgICAgICBpZiAoaSA8IHRlc3RzLmxl
bmd0aCkgeworICAgICAgICAgICAgcnVuVGVzdCh0ZXN0c1tpKytdLCBuZXh0VGVzdCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0c0RvbmUoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBuZXh0VGVzdCgpOworfQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1v
dXNlbW92ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJz
b3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNWQwNjQ1ZTliNzYxMTNm
N2M0MWVkYWQ5ZjI2Y2ZmZTk0ZjdlNjkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxNiBAQAorVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3
aGVuIGNoYW5naW5nIGN1cnNvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0J1
ZyA4NTM0MworCisKK1RFU1QgQ0FTRTogTW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91bGQg
bm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50CitDdXJzb3IgSW5mbzogdHlwZT1Qb2ludGVyIGhvdFNw
b3Q9MCwwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWNiNmZhZGIwMTFiOTNmNWFkNzM2OWMyOWMyNjM4MDVkZmNkNDg2YQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1v
dmUuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NTM0MyI+QnVnIDg1MzQzPC9hPjwvcD4KKzxkaXYgaWQ9InRlc3Qt
Y29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+
TW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50
PC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+
Cit2YXIgQ1VSU09SX1VQREFURV9ERUxBWSA9IDUwOworCitkZXNjcmlwdGlvbigiVGVzdCB0aGF0
IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4i
KTsKKworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRl
c3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVy
KSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCisvLyBDYW4n
dCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2ZW50U2VuZGVyCitpZiAod2luZG93
LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dGFyZ2V0Jyk7CisgICAgZGVidWcoJ1RFU1QgQ0FTRTogJyArIG5vZGUudGV4dENvbnRlbnQpOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKG5vZGUub2Zmc2V0TGVmdCArIDMsIG5vZGUub2Zm
c2V0VG9wICsgMyk7CisgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFs
cy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgIG5vZGUuYWRkRXZlbnRMaXN0
ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ01vdXNl
bW92ZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gY2hhbmdpbmcgY3Vyc29yJyk7Cisg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworICAgIG5vZGUuc3R5bGUuY3Vyc29yID0g
J2hlbHAnOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJz
b3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1l
bnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgIH0sIENVUlNPUl9VUERBVEVfREVMQVkpOwor
CisgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBjaGFuZ2UgdG8gcmVzb2x2ZS4gRmFrZSBt
b3VzZW1vdmUgZXZlbnQgdGhhdCBjYXVzZWQgYnVnLCBpcyB1c2luZyBhIHRpbWVyCisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rl
c3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfSwgMTUwKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNmMw
Y2MwY2Q0NzkxZjMzMWUwZDRjYzIyZTU5NTBjNTliNDUwNDBmMy4uYzBiYWVlOWU4NTk5M2M5NjQx
NWQ0MDcxZTJkNmJiMDEzYTk2YjA2MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTE0NDYsMyArMTQ0Niw2IEBAIHdlYmtpdC5vcmcvYi8xMTA2NTQgY3Nz
My9mbGV4Ym94L2J1dHRvbi5odG1sIFsgRmFpbHVyZSBdCiAKICMgTmVlZCBzdXBwb3J0IGZvciBS
ZXNvdXJjZUhhbmRsZTo6ZGlkQ2hhbmdlUHJpb3JpdHkgYW5kIERSVCBzdXBwb3J0CiB3ZWJraXQu
b3JnL2IvMTExMDE2IGh0dHAvdGVzdHMvbG9hZGluZy9wcm9tb3RlLWltZy1wcmVsb2FkLXByaW9y
aXR5Lmh0bWwgWyBGYWlsdXJlIF0KKworIyBOZXcgdGVzdCBmYWlsaW5nLCBuZWVkcyBpbnZlc3Rp
Z2F0aW9uLgord2Via2l0Lm9yZy9iLzEwMzg1NyBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hh
bmdlLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191721</attachid>
            <date>2013-03-06 05:14:22 -0800</date>
            <delta_ts>2013-03-06 14:01:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130306151026.patch</filename>
            <type>text/plain</type>
            <size>21799</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWMzN2VmNDcyODE1NDBk
NmEyZDA3NmRmNWQ3Njk0MWM2OTdmMjM5NS4uMzhkNzFhNjRkY2U0YmM3MjM3YWNiODVkMGVjYjAw
YjkwOTlhZjA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAzLTA2ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKS4KKworICAgICAgICBUaGUgbmV3IGFwcHJvYWNoIGRvZXMgbm90IHVz
ZSB0aGUgZmFrZSBtb3VzZW1vdmUgZXZlbnQuIEluc3RlYWQsIGl0IHVzZXMgb25seSB0aGUgbG9n
aWMKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgYWN0dWFsIGN1cnNvciBjaGFuZ2UgdG8gaGFwcGVu
LgorCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yIHdhcyByZWZhY3RvcmVkIHRv
IG5vdCB0YWtlIGEgd2hvbGUgbW91c2UgZXZlbnQgYnV0IGluc3RlYWQgd29yayB3aXRoCisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgc28gdGhhdCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvciBtdXN0
IG5vdCBjcmVhdGUgYSB1c2VsZXNzIFBsYXRmb3JtRXZlbnQuCisKKyAgICAgICAgRml4ZXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2
ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5vIGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBi
dXR0b24gZG93bikKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpj
dXJzb3JVcGRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dXBkYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0
ZSk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNob3VsZFNldEN1cnNvcik6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL01vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0czo6aXNPdmVyTGluayk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNPdmVyTGluayk6
CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UpOgorCiAyMDEzLTAzLTA2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTQ0ODU5
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDZhYjYxM2Y5ZTM1NzQwZTcz
NTdiMzA5MGVhMzUyN2QzM2QwYzEwY2YuLmI5ZmMyNmQ0NjgzNDFlOTM2ZjRjOWE1YmYzOWZhMWRm
OTM5ZmM3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTE0NCw2ICsx
NDQsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwogY29uc3QgZG91YmxlIGZha2VNb3Vz
ZU1vdmVTaG9ydEludGVydmFsID0gMC4xOwogY29uc3QgZG91YmxlIGZha2VNb3VzZU1vdmVMb25n
SW50ZXJ2YWwgPSAwLjI1MDsKIAorLy8gVGhlIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yIGEg
Y3Vyc29yIHVwZGF0ZSBvbiBzdHlsZSBhbmQgbGF5b3V0IGNoYW5nZXMKKy8vIFNldCB0byA1MEh6
LCBubyBuZWVkIHRvIGJlIGZhc3RlciB0aGFuIGNvbW1vbiBzY3JlZW4gcmVmcmVzaCByYXRlCitj
b25zdCBkb3VibGUgY3Vyc29yVXBkYXRlSW50ZXJ2YWwgPSAwLjAyOworCiBjb25zdCBpbnQgbWF4
aW11bUN1cnNvclNpemUgPSAxMjg7CiAjaWYgRU5BQkxFKE1PVVNFX0NVUlNPUl9TQ0FMRSkKIC8v
IEl0J3MgcHJldHR5IHVubGlrZWx5IHRoYXQgYSBzY2FsZSBvZiBsZXNzIHRoYW4gb25lIHdvdWxk
IGV2ZXIgYmUgdXNlZC4gQnV0IGFsbCB3ZSByZWFsbHkKQEAgLTMxOSw2ICszMjMsNyBAQCBFdmVu
dEhhbmRsZXI6OkV2ZW50SGFuZGxlcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX21vdXNlRG93bldh
c1NpbmdsZUNsaWNrSW5TZWxlY3Rpb24oZmFsc2UpCiAgICAgLCBtX3NlbGVjdGlvbkluaXRpYXRp
b25TdGF0ZShIYXZlTm90U3RhcnRlZFNlbGVjdGlvbikKICAgICAsIG1faG92ZXJUaW1lcih0aGlz
LCAmRXZlbnRIYW5kbGVyOjpob3ZlclRpbWVyRmlyZWQpCisgICAgLCBtX2N1cnNvclVwZGF0ZVRp
bWVyKHRoaXMsICZFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQpCiAgICAgLCBt
X2F1dG9zY3JvbGxDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBBdXRvc2Nyb2xsQ29udHJvbGxlcikp
CiAgICAgLCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbChmYWxzZSkKICAgICAsIG1fbW91
c2VEb3duV2FzSW5TdWJmcmFtZShmYWxzZSkKQEAgLTM2OCw2ICszNzMsNyBAQCBEcmFnU3RhdGUm
IEV2ZW50SGFuZGxlcjo6ZHJhZ1N0YXRlKCkKIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiB7
CiAgICAgbV9ob3ZlclRpbWVyLnN0b3AoKTsKKyAgICBtX2N1cnNvclVwZGF0ZVRpbWVyLnN0b3Ao
KTsKICAgICBtX2Zha2VNb3VzZU1vdmVFdmVudFRpbWVyLnN0b3AoKTsKICAgICBtX3Jlc2l6ZUxh
eWVyID0gMDsKICAgICBtX25vZGVVbmRlck1vdXNlID0gMDsKQEAgLTEyMTQsNyArMTIyMCw0OCBA
QCBib29sIEV2ZW50SGFuZGxlcjo6dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBib29sIGlzT3Zl
ckxpbmssIGJvb2wgc2hpZnRLZXkpCiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8fCBpc1N1Ym1p
dEltYWdlKG5vZGUpKSAmJiAoIWVkaXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJsZWQpKTsKIH0K
IAotT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9p
ZCBFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQoVGltZXI8RXZlbnRIYW5kbGVy
PiopCit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKKworICAgIHVwZGF0ZUN1cnNvcigpOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6dXBk
YXRlQ3Vyc29yKCkKK3sKKyAgICBpZiAobV9tb3VzZVBvc2l0aW9uSXNVbmtub3duKQorICAgICAg
ICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAg
aWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3
ID0gdmlldy0+cmVuZGVyVmlldygpOworICAgIGlmICghcmVuZGVyVmlldykKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCF2aWV3LT5zaG91bGRTZXRDdXJzb3IoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBzaGlmdEtleTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBhbHRL
ZXk7CisgICAgYm9vbCBtZXRhS2V5OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3Vy
cmVudE1vZGlmaWVyU3RhdGUoc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7CisK
KyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7Cisg
ICAgSGl0VGVzdFJlc3VsdCByZXN1bHQodmlldy0+d2luZG93VG9Db250ZW50cyhtX2xhc3RLbm93
bk1vdXNlUG9zaXRpb24pKTsKKyAgICByZW5kZXJWaWV3LT5oaXRUZXN0KHJlcXVlc3QsIHJlc3Vs
dCk7CisKKyAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVjdEN1cnNvcihy
ZXN1bHQsIHNoaWZ0S2V5KTsKKyAgICBpZiAob3B0aW9uYWxDdXJzb3IuaXNDdXJzb3JDaGFuZ2Uo
KSkgeworICAgICAgICBtX2N1cnJlbnRNb3VzZUN1cnNvciA9IG9wdGlvbmFsQ3Vyc29yLmN1cnNv
cigpOworICAgICAgICB2aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91c2VDdXJzb3IpOworICAg
IH0KK30KKworT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29sIHNoaWZ0S2V5KQogewogICAgIGlmIChtX3Jlc2l6
ZUxheWVyICYmIG1fcmVzaXplTGF5ZXItPmluUmVzaXplTW9kZSgpKQogICAgICAgICByZXR1cm4g
Tm9DdXJzb3JDaGFuZ2U7CkBAIC0xMjI3LDggKzEyNzQsMTYgQEAgT3B0aW9uYWxDdXJzb3IgRXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYgZXYKICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdlOwogI2VuZGlmCiAKLSAgICBOb2Rl
KiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBub2RlID8gbm9kZS0+cmVuZGVyZXIoKSA6IDA7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC50
YXJnZXROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFu
Z2U7CisgICAgYm9vbCBvcmlnaW5hbElzVGV4dCA9IG5vZGUtPmlzVGV4dE5vZGUoKTsKKyAgICBp
ZiAobm9kZSAmJiBvcmlnaW5hbElzVGV4dCkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKKwor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogICAgIGJv
b2wgaG9yaXpvbnRhbFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCk7CiAgICAgY29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8gaUJlYW1D
dXJzb3IoKSA6IHZlcnRpY2FsVGV4dEN1cnNvcigpOwpAQCAtMTI0NCw3ICsxMjk5LDcgQEAgT3B0
aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgZXYKIAogICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICBDdXJz
b3Igb3ZlcnJpZGVDdXJzb3I7Ci0gICAgICAgIHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihy
b3VuZGVkSW50UG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7Cisg
ICAgICAgIHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVkSW50UG9pbnQocmVzdWx0
LmxvY2FsUG9pbnQoKSksIG92ZXJyaWRlQ3Vyc29yKSkgewogICAgICAgICBjYXNlIFNldEN1cnNv
ckJhc2VkT25TdHlsZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldEN1cnNv
cjoKQEAgLTEyOTEsMTkgKzEzNDYsMTkgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpz
ZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKIAogICAg
IHN3aXRjaCAoc3R5bGUgPyBzdHlsZS0+Y3Vyc29yKCkgOiBDVVJTT1JfQVVUTykgewogICAgIGNh
c2UgQ1VSU09SX0FVVE86IHsKLSAgICAgICAgYm9vbCBlZGl0YWJsZSA9IChub2RlICYmIG5vZGUt
PnJlbmRlcmVySXNFZGl0YWJsZSgpKTsKKyAgICAgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPnJl
bmRlcmVySXNFZGl0YWJsZSgpOwogCi0gICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2
ZW50LmlzT3ZlckxpbmsoKSwgZXZlbnQuZXZlbnQoKS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYg
KHVzZUhhbmRDdXJzb3Iobm9kZSwgcmVzdWx0LmlzT3ZlckxpbmsoKSwgc2hpZnRLZXkpKQogICAg
ICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsKIAogICAgICAgICBib29sIGluUmVzaXplciA9
IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJM
YXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXctPndp
bmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigpKSk7CisgICAgICAgICAgICAg
ICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXctPndp
bmRvd1RvQ29udGVudHMocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChlZGl0YWJsZSB8fCAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAm
JiAhaW5SZXNpemVyICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlmICgoZWRpdGFibGUgfHwgKG9y
aWdpbmFsSXNUZXh0ICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNpemVy
ICYmICFyZXN1bHQuc2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICByZXR1cm4gaUJlYW07CiAgICAg
ICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiAgICAgfQpAQCAtMTY0MCw2ICsxNjk1LDggQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAgICBpZiAobV9ob3ZlclRpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIG1faG92ZXJUaW1lci5zdG9wKCk7CiAKKyAgICBtX2N1cnNvclVwZGF0ZVRpbWVy
LnN0b3AoKTsKKwogICAgIGNhbmNlbEZha2VNb3VzZU1vdmVFdmVudCgpOwogCiAjaWYgRU5BQkxF
KFNWRykKQEAgLTE3MTIsNyArMTc2OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3Vz
ZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAgICAg
ICAgIGlmIChzY3JvbGxiYXIgJiYgIW1fbW91c2VQcmVzc2VkKQogICAgICAgICAgICAgc2Nyb2xs
YmFyLT5tb3VzZU1vdmVkKG1vdXNlRXZlbnQpOyAvLyBIYW5kbGUgaG92ZXIgZWZmZWN0cyBvbiBw
bGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHZpc3VhbCBmZWVkYmFjayBvbiBzY3JvbGxiYXIgaG92ZXJp
bmcuCiAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpIHsKLSAg
ICAgICAgICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0Q3Vyc29yKG1l
diwgc2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIE9wdGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29y
ID0gc2VsZWN0Q3Vyc29yKG1ldi5oaXRUZXN0UmVzdWx0KCksIG1vdXNlRXZlbnQuc2hpZnRLZXko
KSk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxDdXJzb3IuaXNDdXJzb3JDaGFuZ2UoKSkgewog
ICAgICAgICAgICAgICAgIG1fY3VycmVudE1vdXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3IuY3Vy
c29yKCk7CiAgICAgICAgICAgICAgICAgdmlldy0+c2V0Q3Vyc29yKG1fY3VycmVudE1vdXNlQ3Vy
c29yKTsKQEAgLTI5MzUsNiArMjk5MiwxMiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2NoZWR1bGVI
b3ZlclN0YXRlVXBkYXRlKCkKICAgICAgICAgbV9ob3ZlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
IH0KIAordm9pZCBFdmVudEhhbmRsZXI6OnNjaGVkdWxlQ3Vyc29yVXBkYXRlKCkKK3sKKyAgICBp
ZiAoIW1fY3Vyc29yVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9jdXJzb3JVcGRh
dGVUaW1lci5zdGFydE9uZVNob3QoY3Vyc29yVXBkYXRlSW50ZXJ2YWwpOworfQorCiB2b2lkIEV2
ZW50SGFuZGxlcjo6ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCkKIHsKICAgICBpZiAo
bV9tb3VzZVByZXNzZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCAzODBhZjBj
N2M4YzhlNmI4ZGU0Mjc4YmI3Yzc5Mzk0MThkZWEwNDZhLi4xYmQwNmVhZjA4ZWZhYmZhOWIzMDk3
MTU1NjViZTA0OGNkODlmODBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTE0
Nyw2ICsxNDcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgc2NoZWR1bGVIb3ZlclN0
YXRlVXBkYXRlKCk7CisgICAgdm9pZCBzY2hlZHVsZUN1cnNvclVwZGF0ZSgpOwogCiAgICAgdm9p
ZCBzZXRSZXNpemluZ0ZyYW1lU2V0KEhUTUxGcmFtZVNldEVsZW1lbnQqKTsKIApAQCAtMjU0LDYg
KzI1NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCB1c2VIYW5kQ3Vyc29yKE5vZGUq
LCBib29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpOworICAgIHZvaWQgdXBkYXRlQ3Vyc29y
KCk7CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKQEAgLTI4MCw4ICsyODIs
MTAgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIGJvb2wgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQo
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogCi0gICAgT3B0aW9uYWxDdXJz
b3Igc2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBTY3Jv
bGxiYXIqKTsKKyAgICBPcHRpb25hbEN1cnNvciBzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJl
c3VsdCYsIGJvb2wgc2hpZnRLZXkpOworCiAgICAgdm9pZCBob3ZlclRpbWVyRmlyZWQoVGltZXI8
RXZlbnRIYW5kbGVyPiopOworICAgIHZvaWQgY3Vyc29yVXBkYXRlVGltZXJGaXJlZChUaW1lcjxF
dmVudEhhbmRsZXI+Kik7CiAKICAgICBib29sIGxvZ2ljYWxTY3JvbGxPdmVyZmxvdyhTY3JvbGxM
b2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0g
MCk7CiAgICAgCkBAIC00MTAsNiArNDE0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFuU2Ny
b2xsQnV0dG9uUHJlc3NlZDsKIAogICAgIFRpbWVyPEV2ZW50SGFuZGxlcj4gbV9ob3ZlclRpbWVy
OworICAgIFRpbWVyPEV2ZW50SGFuZGxlcj4gbV9jdXJzb3JVcGRhdGVUaW1lcjsKIAogICAgIE93
blB0cjxBdXRvc2Nyb2xsQ29udHJvbGxlcj4gbV9hdXRvc2Nyb2xsQ29udHJvbGxlcjsKICAgICBi
b29sIG1fbW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCmluZGV4IGE4NGU1NmU4MTQ5N2Y0OGZmNjFiMDc4YjUxYzM5ODVkMDQ1MTA1M2YuLmZkNGRh
YmNiNTViNzg5Mzc4YmMzMDcwNDY0ZWU0MTUwZjAzMWYxNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKQEAgLTE1NzEsNiArMTU3MSwxMiBAQCBJbnRQb2ludCBGcmFtZVZpZXc6Omxhc3RL
bm93bk1vdXNlUG9zaXRpb24oKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSA6IEludFBvaW50KCk7CiB9
CiAKK2Jvb2wgRnJhbWVWaWV3OjpzaG91bGRTZXRDdXJzb3IoKSBjb25zdAoreworICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZSgpLT5wYWdlKCk7CisgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS0+aXNPbnNj
cmVlbigpICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOworfQorCiBib29s
IEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKIHsKICAgICBpZiAoIW1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgfHwgbV92aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cy0+aXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApp
bmRleCBjMDYxODM4ZTZiMmM3NzU0MDFmYzI3MWI0ZGYwMWZiZGRhYmUyZGMwLi5mMTUwNWIzYzc3
YzYyNzIwZWIxZmVhN2YwODA2NzIxMzc2ZmM5ZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgK
QEAgLTM0MCw2ICszNDAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0UmVwYWludFRo
cm90dGxpbmdEZWZlcnJlZFJlcGFpbnREZWxheUluY3JlbWVudER1cmluZ0xvYWRpbmcoZG91Ymxl
IHApOwogCiAgICAgdmlydHVhbCBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZFNldEN1cnNvcigpIGNvbnN0OwogCiAgICAgdmly
dHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IE9WRVJSSURFOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNw
cAppbmRleCBlMzNkZGNlMjQ2ZjNiZTE0YjJjYmI1ZjFjYWM2Yzc4MDJiNDZmMzAxLi5lMDMwNTY4
N2RhODZkNzBjOGE1MjYyZTdhZTlhYzRlMGVjNmJjNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAKQEAgLTM1LDcgKzM1
LDcgQEAgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0czo6TW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyhjb25zdCBQbGF0Zm9ybU1vdXNlRXYKIAogYm9vbCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzOjppc092ZXJMaW5rKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oaXRUZXN0UmVz
dWx0LlVSTEVsZW1lbnQoKSAmJiBtX2hpdFRlc3RSZXN1bHQuVVJMRWxlbWVudCgpLT5pc0xpbmso
KTsKKyAgICByZXR1cm4gbV9oaXRUZXN0UmVzdWx0LmlzT3ZlckxpbmsoKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IGYxYTM0NmU3ODhl
NGM2NDJlOWNmNTM3NDVkZWZjOTIzOWZhY2JkZDAuLjlkMjNiMzg4MGYwNThiZjIwOGIzZWJmNWY1
MzU2NTFiYWExNjMyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAKQEAgLTUxMiw2ICs1MTIsMTEgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0xpdmVMaW5r
KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgSGl0VGVzdFJlc3VsdDo6aXNP
dmVyTGluaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5uZXJVUkxFbGVtZW50ICYmIG1faW5u
ZXJVUkxFbGVtZW50LT5pc0xpbmsoKTsKK30KKwogU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxl
RGlzcGxheVN0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lubmVyVVJMRWxlbWVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDI1YTY5NTVhNGJjNWM2
NzQ1ODliNWVjNGJhYmY2MDExMzM3OTdlYWMuLjVjYzUwNmMyMjVmODc2YTE4MTYxNjQ2YWE2Mzlj
NzdlMzZkODgwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApA
QCAtMTA4LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBLVVJMIGFic29sdXRlTGlua1VSTCgpIGNv
bnN0OwogICAgIFN0cmluZyB0ZXh0Q29udGVudCgpIGNvbnN0OwogICAgIGJvb2wgaXNMaXZlTGlu
aygpIGNvbnN0OworICAgIGJvb2wgaXNPdmVyTGluaygpIGNvbnN0OwogICAgIGJvb2wgaXNDb250
ZW50RWRpdGFibGUoKSBjb25zdDsKICAgICB2b2lkIHRvZ2dsZU1lZGlhQ29udHJvbHNEaXNwbGF5
KCkgY29uc3Q7CiAgICAgdm9pZCB0b2dnbGVNZWRpYUxvb3BQbGF5YmFjaygpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA1ZTY3MWUxOTUxMDBj
ZGVjMzE1YmNjZjBlMzJjMjc4OTNlMjg0M2MwLi5mODljYzIwY2NmZjgxNzNmNjZlYTdkZDk0NTFm
ZWM1ZjhmZWRhYzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cApAQCAtMTk3Niw3ICsxOTc2LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIGlm
IChvbGRTdHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewogICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7CisgICAg
ICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjaGVkdWxlQ3Vyc29yVXBkYXRlKCk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYzJiYzJiM2ZhZDcxODQ3MTY0MTUxYjYxNWVlZGRmZGIxOTRmZmU4
ZC4uNWU2ZjJhNjAyZjBlZDMwNjk3NWJmMzc0NzQ4MWNmODJlMzU0ZTJmMyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIxIEBACisyMDEzLTAzLTA2ICBBaXZvIFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisK
KyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBl
bWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAgIENoYW5naW5nIENTUyBjdXJzb3Ig
c2hvdWxkIHdvcmsgbm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIG5vdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0
cyBmb3IgY2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwgbW91c2Vkb3duLCBtb3VzZXVwIGFu
ZCBtb3VzZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2UgYnV0dG9uIGJlaW5nIGhlbGQgZG93bi4g
QWxzbyBhZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91c2Vtb3ZlCisgICAgICAgIGV2ZW50
IGlzIG5vdCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdoZW4gbW91c2UgaXMgbm90IG1vdmlu
Zy4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1v
dmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJz
b3Itbm8tbW91c2Vtb3ZlLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAzLTA2ICBIYXlhdG8gSXRvICA8
aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGdhcmRlbmluZy4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhiN2FiZWE3MmE3MTAxNmRhMTQwMzQ5OTM1ZTYwMWE5
M2MyOTQzZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNl
LWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgdGhhdCBt
b3VzZSBjdXJzb3JzIGFyZSBjaGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCdWcgNTMzNDEKKworCitNb3VzZSBtb3ZlCitD
dXJzb3IgSW5mbzogdHlwZT1IYW5kIGhvdFNwb3Q9MCwwCisKK01vdXNlIGRvd24KK0N1cnNvciBJ
bmZvOiB0eXBlPVByb2dyZXNzIGhvdFNwb3Q9MCwwCisKK01vdXNlIGhvbGQgZG93biwgbW92ZQor
Q3Vyc29yIEluZm86IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitNb3VzZSB1cAorQ3Vyc29yIElu
Zm86IHR5cGU9SGVscCBob3RTcG90PTAsMAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLWNoYW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NDc3MmE1YTNhNmIxZDU5NmViMjg4
ZTk4NDEyNjRlMGE4ZTYzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEiPkJ1ZyA1MzM0MTwv
YT48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBv
bk1vdXNlRG93bj0ic3R5bGUuY3Vyc29yPSdwcm9ncmVzcyc7ZXZlbnQucHJldmVudERlZmF1bHQo
KTsiIG9uTW91c2VNb3ZlPSJzdHlsZS5jdXJzb3I9J3BvaW50ZXInOyIgb25Nb3VzZVVwPSJzdHls
ZS5jdXJzb3I9J2hlbHAnOyIgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyI+UGxheSB3aXRoIG1vdXNl
IG9uIHRoaXMgZWxlbWVudC4gQ3Vyc29ycyBjaGFuZ2Ugb24gZXZlbnRzIC0gbW91c2Vtb3ZlOiBw
b2ludGVyKGhhbmQpLCBtb3VzZWRvd246IHByb2dyZXNzLCBtb3VzZXVwOiBoZWxwLjwvZGl2Pgor
PC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgordmFyIENV
UlNPUl9VUERBVEVfREVMQVkgPSA1MDsKKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBtb3VzZSBj
dXJzb3JzIGFyZSBjaGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuIik7CisKK2lmICgh
d2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVz
IER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRl
c3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gcnVuVGVzdChw
cmVwYXJlLCBuZXh0KSB7CisgICAgcHJlcGFyZSgpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0
Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAg
ICBuZXh0KCk7CisgICAgfSwgQ1VSU09SX1VQREFURV9ERUxBWSk7Cit9CisKK2Z1bmN0aW9uIHRl
c3RzRG9uZSgpIHsKKyAgICAvLyBUaGlzIHRleHQgaXMgcmVkdW5kYW50IHdpdGggdGhlIHRlc3Qg
b3V0cHV0IC0gaGlkZSBpdAorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNvbnRh
aW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisK
Ky8vIENhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCBoZXJlIHdpdGhvdXQgZXZlbnRTZW5kZXIKK2lm
ICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3RhcmdldCcpOworICAgIGV2ZW50U2VuZGVyLmRyYWdNb2RlID0gZmFsc2U7Cisg
ICAgdmFyIHRlc3RzID0gWworICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVn
KCdNb3VzZSBtb3ZlJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJn
ZXQub2Zmc2V0TGVmdCArIDMsIHRhcmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBkZWJ1ZygnTW91c2UgZG93bicpOworICAgICAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgZGVidWcoJ01vdXNlIGhvbGQgZG93biwgbW92ZScpOworICAgICAgICAgICAgZXZlbnRT
ZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAxMywgdGFyZ2V0Lm9mZnNldFRv
cCArIDMpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3Vz
ZSB1cCcpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgICB9Cisg
ICAgXTsKKworICAgIHZhciBpID0gMDsKKyAgICBmdW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAgICAg
ICAgaWYgKGkgPCB0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJ1blRlc3QodGVzdHNbaSsr
XSwgbmV4dFRlc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdHNEb25lKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgbmV4dFRlc3QoKTsKK30KKworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTVkMDY0NWU5Yjc2MTEzZjdjNDFlZGFkOWYyNmNmZmU5NGY3ZTY5MQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3Vz
ZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3IuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitCdWcgODUzNDMKKworCitURVNUIENBU0U6IE1vdXNlIGlkbGUsIGNo
YW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVudAorQ3Vyc29yIEluZm86
IHR5cGU9UG9pbnRlciBob3RTcG90PTAsMAorQ3Vyc29yIEluZm86IHR5cGU9SGVscCBob3RTcG90
PTAsMAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1v
dXNlbW92ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1v
dXNlbW92ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYjZmYWRiMDExYjkzZjVhZDczNjljMjljMjYzODA1
ZGZjZDQ4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3Vz
ZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDMiPkJ1ZyA4NTM0MzwvYT48
L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBzdHls
ZT0iY3Vyc29yOmRlZmF1bHQiPk1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBm
aXJlIG1vdXNlbW92ZSBldmVudDwvZGl2PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgordmFyIENVUlNPUl9VUERBVEVfREVMQVkgPSA1MDsKKworZGVz
Y3JpcHRpb24oIlRlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hl
biBjaGFuZ2luZyBjdXJzb3IuIik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAg
dGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lm
ICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKK30KKworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVu
dFNlbmRlcgoraWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciBub2RlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgIGRlYnVnKCdURVNUIENBU0U6ICcgKyBu
b2RlLnRleHRDb250ZW50KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhub2RlLm9mZnNl
dExlZnQgKyAzLCBub2RlLm9mZnNldFRvcCArIDMpOworICAgIGRlYnVnKCdDdXJzb3IgSW5mbzog
JyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAg
ICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCdNb3VzZW1vdmUgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGNo
YW5naW5nIGN1cnNvcicpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKKyAgICBu
b2RlLnN0eWxlLmN1cnNvciA9ICdoZWxwJzsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor
ICAgICAgICBkZWJ1ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJl
bnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICB9LCBDVVJT
T1JfVVBEQVRFX0RFTEFZKTsKKworICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgY2hhbmdl
IHRvIHJlc29sdmUuIEZha2UgbW91c2Vtb3ZlIGV2ZW50IHRoYXQgY2F1c2VkIGJ1ZywgaXMgdXNp
bmcgYSB0aW1lcgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIDE1MCk7Cit9CisKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191828</attachid>
            <date>2013-03-06 14:02:03 -0800</date>
            <delta_ts>2013-03-08 10:48:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130306235802.patch</filename>
            <type>text/plain</type>
            <size>21687</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWMzN2VmNDcyODE1NDBk
NmEyZDA3NmRmNWQ3Njk0MWM2OTdmMjM5NS4uMzhkNzFhNjRkY2U0YmM3MjM3YWNiODVkMGVjYjAw
YjkwOTlhZjA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAzLTA2ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKS4KKworICAgICAgICBUaGUgbmV3IGFwcHJvYWNoIGRvZXMgbm90IHVz
ZSB0aGUgZmFrZSBtb3VzZW1vdmUgZXZlbnQuIEluc3RlYWQsIGl0IHVzZXMgb25seSB0aGUgbG9n
aWMKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgYWN0dWFsIGN1cnNvciBjaGFuZ2UgdG8gaGFwcGVu
LgorCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yIHdhcyByZWZhY3RvcmVkIHRv
IG5vdCB0YWtlIGEgd2hvbGUgbW91c2UgZXZlbnQgYnV0IGluc3RlYWQgd29yayB3aXRoCisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgc28gdGhhdCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvciBtdXN0
IG5vdCBjcmVhdGUgYSB1c2VsZXNzIFBsYXRmb3JtRXZlbnQuCisKKyAgICAgICAgRml4ZXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2
ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5vIGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBi
dXR0b24gZG93bikKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpj
dXJzb3JVcGRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dXBkYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0
ZSk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNob3VsZFNldEN1cnNvcik6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL01vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0czo6aXNPdmVyTGluayk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNPdmVyTGluayk6
CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UpOgorCiAyMDEzLTAzLTA2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTQ0ODU5
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDZhYjYxM2Y5ZTM1NzQwZTcz
NTdiMzA5MGVhMzUyN2QzM2QwYzEwY2YuLjI1Y2NkYzIxMTY0ZTZmNmNmNmI0ZDUyODcyMjU2OTBm
MTcyNzBlY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTE0NCw2ICsx
NDQsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwogY29uc3QgZG91YmxlIGZha2VNb3Vz
ZU1vdmVTaG9ydEludGVydmFsID0gMC4xOwogY29uc3QgZG91YmxlIGZha2VNb3VzZU1vdmVMb25n
SW50ZXJ2YWwgPSAwLjI1MDsKIAorLy8gVGhlIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yIGEg
Y3Vyc29yIHVwZGF0ZSBvbiBzdHlsZSBhbmQgbGF5b3V0IGNoYW5nZXMKKy8vIFNldCB0byA1MEh6
LCBubyBuZWVkIHRvIGJlIGZhc3RlciB0aGFuIGNvbW1vbiBzY3JlZW4gcmVmcmVzaCByYXRlCitj
b25zdCBkb3VibGUgY3Vyc29yVXBkYXRlSW50ZXJ2YWwgPSAwLjAyOworCiBjb25zdCBpbnQgbWF4
aW11bUN1cnNvclNpemUgPSAxMjg7CiAjaWYgRU5BQkxFKE1PVVNFX0NVUlNPUl9TQ0FMRSkKIC8v
IEl0J3MgcHJldHR5IHVubGlrZWx5IHRoYXQgYSBzY2FsZSBvZiBsZXNzIHRoYW4gb25lIHdvdWxk
IGV2ZXIgYmUgdXNlZC4gQnV0IGFsbCB3ZSByZWFsbHkKQEAgLTMxOSw2ICszMjMsNyBAQCBFdmVu
dEhhbmRsZXI6OkV2ZW50SGFuZGxlcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX21vdXNlRG93bldh
c1NpbmdsZUNsaWNrSW5TZWxlY3Rpb24oZmFsc2UpCiAgICAgLCBtX3NlbGVjdGlvbkluaXRpYXRp
b25TdGF0ZShIYXZlTm90U3RhcnRlZFNlbGVjdGlvbikKICAgICAsIG1faG92ZXJUaW1lcih0aGlz
LCAmRXZlbnRIYW5kbGVyOjpob3ZlclRpbWVyRmlyZWQpCisgICAgLCBtX2N1cnNvclVwZGF0ZVRp
bWVyKHRoaXMsICZFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQpCiAgICAgLCBt
X2F1dG9zY3JvbGxDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBBdXRvc2Nyb2xsQ29udHJvbGxlcikp
CiAgICAgLCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbChmYWxzZSkKICAgICAsIG1fbW91
c2VEb3duV2FzSW5TdWJmcmFtZShmYWxzZSkKQEAgLTM2OCw2ICszNzMsNyBAQCBEcmFnU3RhdGUm
IEV2ZW50SGFuZGxlcjo6ZHJhZ1N0YXRlKCkKIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiB7
CiAgICAgbV9ob3ZlclRpbWVyLnN0b3AoKTsKKyAgICBtX2N1cnNvclVwZGF0ZVRpbWVyLnN0b3Ao
KTsKICAgICBtX2Zha2VNb3VzZU1vdmVFdmVudFRpbWVyLnN0b3AoKTsKICAgICBtX3Jlc2l6ZUxh
eWVyID0gMDsKICAgICBtX25vZGVVbmRlck1vdXNlID0gMDsKQEAgLTEyMTQsNyArMTIyMCw1MCBA
QCBib29sIEV2ZW50SGFuZGxlcjo6dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBib29sIGlzT3Zl
ckxpbmssIGJvb2wgc2hpZnRLZXkpCiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8fCBpc1N1Ym1p
dEltYWdlKG5vZGUpKSAmJiAoIWVkaXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJsZWQpKTsKIH0K
IAotT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9p
ZCBFdmVudEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQoVGltZXI8RXZlbnRIYW5kbGVy
PiopCit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKKworICAgIHVwZGF0ZUN1cnNvcigpOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6dXBk
YXRlQ3Vyc29yKCkKK3sKKyAgICBpZiAobV9tb3VzZVBvc2l0aW9uSXNVbmtub3duKQorICAgICAg
ICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAg
aWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3
ID0gdmlldy0+cmVuZGVyVmlldygpOworICAgIGlmICghcmVuZGVyVmlldykKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCF2aWV3LT5zaG91bGRTZXRDdXJzb3IoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBzaGlmdEtleTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBhbHRL
ZXk7CisgICAgYm9vbCBtZXRhS2V5OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3Vy
cmVudE1vZGlmaWVyU3RhdGUoc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7CisK
KyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKworICAgIEhpdFRlc3RS
ZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAgICBIaXRUZXN0UmVz
dWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fbGFzdEtub3duTW91c2VQb3NpdGlv
bikpOworICAgIHJlbmRlclZpZXctPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE9w
dGlvbmFsQ3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0Q3Vyc29yKHJlc3VsdCwgc2hpZnRL
ZXkpOworICAgIGlmIChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAg
IG1fY3VycmVudE1vdXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAg
IHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCitPcHRp
b25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGJvb2wgc2hpZnRLZXkpCiB7CiAgICAgaWYgKG1fcmVzaXplTGF5ZXIgJiYgbV9y
ZXNpemVMYXllci0+aW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5n
ZTsKQEAgLTEyMjcsOCArMTI3NiwxMSBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNl
bGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogICAgICAg
ICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CiAjZW5kaWYKIAotICAgIE5vZGUqIG5vZGUgPSBldmVu
dC50YXJnZXROb2RlKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUgPyBub2Rl
LT5yZW5kZXJlcigpIDogMDsKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LnRhcmdldE5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKKworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogICAgIGJvb2wgaG9y
aXpvbnRhbFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CiAgICAgY29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8gaUJlYW1DdXJzb3Io
KSA6IHZlcnRpY2FsVGV4dEN1cnNvcigpOwpAQCAtMTI0NCw3ICsxMjk2LDcgQEAgT3B0aW9uYWxD
dXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgZXYKIAogICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICBDdXJzb3Igb3Zl
cnJpZGVDdXJzb3I7Ci0gICAgICAgIHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVk
SW50UG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7CisgICAgICAg
IHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2Fs
UG9pbnQoKSksIG92ZXJyaWRlQ3Vyc29yKSkgewogICAgICAgICBjYXNlIFNldEN1cnNvckJhc2Vk
T25TdHlsZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldEN1cnNvcjoKQEAg
LTEyOTEsMTkgKzEzNDMsMTkgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RD
dXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKIAogICAgIHN3aXRj
aCAoc3R5bGUgPyBzdHlsZS0+Y3Vyc29yKCkgOiBDVVJTT1JfQVVUTykgewogICAgIGNhc2UgQ1VS
U09SX0FVVE86IHsKLSAgICAgICAgYm9vbCBlZGl0YWJsZSA9IChub2RlICYmIG5vZGUtPnJlbmRl
cmVySXNFZGl0YWJsZSgpKTsKKyAgICAgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVy
SXNFZGl0YWJsZSgpOwogCi0gICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2ZW50Lmlz
T3ZlckxpbmsoKSwgZXZlbnQuZXZlbnQoKS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYgKHVzZUhh
bmRDdXJzb3Iobm9kZSwgcmVzdWx0LmlzT3ZlckxpbmsoKSwgc2hpZnRLZXkpKQogICAgICAgICAg
ICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsKIAogICAgICAgICBib29sIGluUmVzaXplciA9IGZhbHNl
OwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciog
bGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGlm
IChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCi0gICAgICAgICAgICAgICAgICAg
IGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXctPndpbmRvd1Rv
Q29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAg
IGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXctPndpbmRvd1Rv
Q29udGVudHMocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChlZGl0YWJsZSB8fCAocmVuZGVyZXIgJiYg
cmVuZGVyZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5S
ZXNpemVyICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlmICgoZWRpdGFibGUgfHwgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5pc1RleHQoKSAmJiBub2RlLT5jYW5TdGFydFNlbGVjdGlvbigpKSkgJiYg
IWluUmVzaXplciAmJiAhcmVzdWx0LnNjcm9sbGJhcigpKQogICAgICAgICAgICAgcmV0dXJuIGlC
ZWFtOwogICAgICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwogICAgIH0KQEAgLTE2NDAsNiAr
MTY5Miw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAgICAgaWYgKG1faG92ZXJUaW1lci5p
c0FjdGl2ZSgpKQogICAgICAgICBtX2hvdmVyVGltZXIuc3RvcCgpOwogCisgICAgbV9jdXJzb3JV
cGRhdGVUaW1lci5zdG9wKCk7CisKICAgICBjYW5jZWxGYWtlTW91c2VNb3ZlRXZlbnQoKTsKIAog
I2lmIEVOQUJMRShTVkcpCkBAIC0xNzEyLDcgKzE3NjYsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50
LCBIaQogICAgICAgICBpZiAoc2Nyb2xsYmFyICYmICFtX21vdXNlUHJlc3NlZCkKICAgICAgICAg
ICAgIHNjcm9sbGJhci0+bW91c2VNb3ZlZChtb3VzZUV2ZW50KTsgLy8gSGFuZGxlIGhvdmVyIGVm
ZmVjdHMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB2aXN1YWwgZmVlZGJhY2sgb24gc2Nyb2xs
YmFyIGhvdmVyaW5nLgogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmll
dygpKSB7Ci0gICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVj
dEN1cnNvcihtZXYsIHNjcm9sbGJhcik7CisgICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRp
b25hbEN1cnNvciA9IHNlbGVjdEN1cnNvcihtZXYuaGl0VGVzdFJlc3VsdCgpLCBtb3VzZUV2ZW50
LnNoaWZ0S2V5KCkpOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hh
bmdlKCkpIHsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRNb3VzZUN1cnNvciA9IG9wdGlvbmFs
Q3Vyc29yLmN1cnNvcigpOwogICAgICAgICAgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJl
bnRNb3VzZUN1cnNvcik7CkBAIC0yOTM1LDYgKzI5ODksMTIgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OnNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgpCiAgICAgICAgIG1faG92ZXJUaW1lci5zdGFydE9u
ZVNob3QoMCk7CiB9CiAKK3ZvaWQgRXZlbnRIYW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0ZSgp
Cit7CisgICAgaWYgKCFtX2N1cnNvclVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1f
Y3Vyc29yVXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KGN1cnNvclVwZGF0ZUludGVydmFsKTsKK30K
Kwogdm9pZCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigpCiB7
CiAgICAgaWYgKG1fbW91c2VQcmVzc2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5k
ZXggMzgwYWYwYzdjOGM4ZTZiOGRlNDI3OGJiN2M3OTM5NDE4ZGVhMDQ2YS4uMWJkMDZlYWYwOGVm
YWJmYTliMzA5NzE1NTY1YmUwNDhjZDg5ZjgwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIHNjaGVk
dWxlSG92ZXJTdGF0ZVVwZGF0ZSgpOworICAgIHZvaWQgc2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsK
IAogICAgIHZvaWQgc2V0UmVzaXppbmdGcmFtZVNldChIVE1MRnJhbWVTZXRFbGVtZW50Kik7CiAK
QEAgLTI1NCw2ICsyNTUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgdXNlSGFuZEN1
cnNvcihOb2RlKiwgYm9vbCBpc092ZXJMaW5rLCBib29sIHNoaWZ0S2V5KTsKKyAgICB2b2lkIHVw
ZGF0ZUN1cnNvcigpOwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0y
ODAsOCArMjgyLDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIGhhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAotICAgIE9w
dGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzJiwgU2Nyb2xsYmFyKik7CisgICAgT3B0aW9uYWxDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0
IEhpdFRlc3RSZXN1bHQmLCBib29sIHNoaWZ0S2V5KTsKKwogICAgIHZvaWQgaG92ZXJUaW1lckZp
cmVkKFRpbWVyPEV2ZW50SGFuZGxlcj4qKTsKKyAgICB2b2lkIGN1cnNvclVwZGF0ZVRpbWVyRmly
ZWQoVGltZXI8RXZlbnRIYW5kbGVyPiopOwogCiAgICAgYm9vbCBsb2dpY2FsU2Nyb2xsT3ZlcmZs
b3coU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIE5vZGUqIHN0YXJ0
aW5nTm9kZSA9IDApOwogICAgIApAQCAtNDEwLDYgKzQxNCw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3BhblNjcm9sbEJ1dHRvblByZXNzZWQ7CiAKICAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1f
aG92ZXJUaW1lcjsKKyAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1fY3Vyc29yVXBkYXRlVGltZXI7
CiAKICAgICBPd25QdHI8QXV0b3Njcm9sbENvbnRyb2xsZXI+IG1fYXV0b3Njcm9sbENvbnRyb2xs
ZXI7CiAgICAgYm9vbCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAppbmRleCBhODRlNTZlODE0OTdmNDhmZjYxYjA3OGI1MWMzOTg1ZDA0NTEw
NTNmLi5mZDRkYWJjYjU1Yjc4OTM3OGJjMzA3MDQ2NGVlNDE1MGYwMzFmMTQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNTcxLDYgKzE1NzEsMTIgQEAgSW50UG9pbnQgRnJhbWVW
aWV3OjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZSA/
IG1fZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkgOiBJbnRQ
b2ludCgpOwogfQogCitib29sIEZyYW1lVmlldzo6c2hvdWxkU2V0Q3Vyc29yKCkgY29uc3QKK3sK
KyAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS0+cGFnZSgpOworICAgIHJldHVybiBwYWdlICYmIHBh
Z2UtPmlzT25zY3JlZW4oKSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsK
K30KKwogYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHx8
IG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMtPmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgKaW5kZXggYzA2MTgzOGU2YjJjNzc1NDAxZmMyNzFiNGRmMDFmYmRkYWJlMmRjMC4u
ZTIyN2VkMTg4MTViMmE1OTEwYTRiYzE2M2VlNGVkNmVkYjk1MzZkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCkBAIC0zNDAsNiArMzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dFJlcGFpbnRUaHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2Fk
aW5nKGRvdWJsZSBwKTsKIAogICAgIHZpcnR1YWwgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3Np
dGlvbigpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkU2V0Q3Vyc29yKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMu
Y3BwCmluZGV4IGUzM2RkY2UyNDZmM2JlMTRiMmNiYjVmMWNhYzZjNzgwMmI0NmYzMDEuLmUwMzA1
Njg3ZGE4NmQ3MGM4YTUyNjJlN2FlOWFjNGUwZWM2YmM1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcApAQCAtMzUsNyAr
MzUsNyBAQCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjpNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzKGNvbnN0IFBsYXRmb3JtTW91c2VFdgogCiBib29sIE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHM6OmlzT3ZlckxpbmsoKSBjb25zdAogewotICAgIHJldHVybiBtX2hpdFRlc3RS
ZXN1bHQuVVJMRWxlbWVudCgpICYmIG1faGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCktPmlzTGlu
aygpOworICAgIHJldHVybiBtX2hpdFRlc3RSZXN1bHQuaXNPdmVyTGluaygpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggZjFhMzQ2ZTc4
OGU0YzY0MmU5Y2Y1Mzc0NWRlZmM5MjM5ZmFjYmRkMC4uOWQyM2IzODgwZjA1OGJmMjA4YjNlYmY1
ZjUzNTY1MWJhYTE2MzJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmNwcApAQCAtNTEyLDYgKzUxMiwxMSBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzTGl2ZUxp
bmsoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBIaXRUZXN0UmVzdWx0Ojpp
c092ZXJMaW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbm5lclVSTEVsZW1lbnQgJiYgbV9p
bm5lclVSTEVsZW1lbnQtPmlzTGluaygpOworfQorCiBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0
bGVEaXNwbGF5U3RyaW5nKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW5uZXJVUkxFbGVtZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKaW5kZXggMjVhNjk1NWE0YmM1
YzY3NDU4OWI1ZWM0YmFiZjYwMTEzMzc5N2VhYy4uNWNjNTA2YzIyNWY4NzZhMTgxNjE2NDZhYTYz
OWM3N2UzNmQ4ODBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5o
CkBAIC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIEtVUkwgYWJzb2x1dGVMaW5rVVJMKCkg
Y29uc3Q7CiAgICAgU3RyaW5nIHRleHRDb250ZW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0xpdmVM
aW5rKCkgY29uc3Q7CisgICAgYm9vbCBpc092ZXJMaW5rKCkgY29uc3Q7CiAgICAgYm9vbCBpc0Nv
bnRlbnRFZGl0YWJsZSgpIGNvbnN0OwogICAgIHZvaWQgdG9nZ2xlTWVkaWFDb250cm9sc0Rpc3Bs
YXkoKSBjb25zdDsKICAgICB2b2lkIHRvZ2dsZU1lZGlhTG9vcFBsYXliYWNrKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDVlNjcxZTE5NTEw
MGNkZWMzMTViY2NmMGUzMmMyNzg5M2UyODQzYzAuLmY4OWNjMjBjY2ZmODE3M2Y2NmVhN2RkOTQ1
MWZlYzVmOGZlZGFjNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCkBAIC0xOTc2LDcgKzE5NzYsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogCiAgICAg
aWYgKG9sZFN0eWxlICYmICFhcmVDdXJzb3JzRXF1YWwob2xkU3R5bGUsIHN0eWxlKCkpKSB7CiAg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKTsKKyAg
ICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBjMmJjMmIzZmFkNzE4NDcxNjQxNTFiNjE1ZWVkZGZkYjE5NGZm
ZThkLi41ZTZmMmE2MDJmMGVkMzA2OTc1YmYzNzQ3NDgxY2Y4MmUzNTRlMmYzIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjEgQEAKKzIwMTMtMDMtMDYgIEFpdm8gUGFhcyAgPGFpdm9wYWFzQGdtYWlsLmNvbT4K
KworICAgICAgICBVcGRhdGluZyBtb3VzZSBjdXJzb3Igb24gc3R5bGUgY2hhbmdlcyB3aXRob3V0
IGVtaXR0aW5nIGZha2UgbW91c2Vtb3ZlIGV2ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4NTcKKyAgICAgICAgQ2hhbmdpbmcgQ1NTIGN1cnNv
ciBzaG91bGQgd29yayBubyBtYXR0ZXIgaXMgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3Igbm90
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRl
c3RzIGZvciBjaGFuZ2luZyBjdXJzb3Igb24gbW91c2Vtb3ZlLCBtb3VzZWRvd24sIG1vdXNldXAg
YW5kIG1vdXNlbW92ZQorICAgICAgICB3aGlsZSBtb3VzZSBidXR0b24gYmVpbmcgaGVsZCBkb3du
LiBBbHNvIGFkZGVkIHRlc3QgdG8gdmVyaWZ5IHRoYXQgYSBtb3VzZW1vdmUKKyAgICAgICAgZXZl
bnQgaXMgbm90IGZpcmVkIGZvciBjaGFuZ2luZyBjdXJzb3Igd2hlbiBtb3VzZSBpcyBub3QgbW92
aW5nLgorCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2Uu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNl
bW92ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1
cnNvci1uby1tb3VzZW1vdmUuaHRtbDogQWRkZWQuCisKIDIwMTMtMDMtMDYgIEhheWF0byBJdG8g
IDxoYXlhdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGI3YWJlYTcyYTcxMDE2ZGExNDAzNDk5MzVlNjAx
YTkzYzI5NDNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNCBAQAorVGVzdCB0aGF0
IG1vdXNlIGN1cnNvcnMgYXJlIGNoYW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0J1ZyA1MzM0MQorCisKK01vdXNlIG1vdmUK
K0N1cnNvciBJbmZvOiB0eXBlPUhhbmQgaG90U3BvdD0wLDAKKworTW91c2UgZG93bgorQ3Vyc29y
IEluZm86IHR5cGU9UHJvZ3Jlc3MgaG90U3BvdD0wLDAKKworTW91c2UgaG9sZCBkb3duLCBtb3Zl
CitDdXJzb3IgSW5mbzogdHlwZT1IYW5kIGhvdFNwb3Q9MCwwCisKK01vdXNlIHVwCitDdXJzb3Ig
SW5mbzogdHlwZT1IZWxwIGhvdFNwb3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9t
b3VzZS1jdXJzb3ItY2hhbmdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk0NzcyYTVhM2E2YjFkNTk2ZWIy
ODhlOTg0MTI2NGUwYThlNjMyZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxl
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MSI+QnVnIDUzMzQx
PC9hPjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQi
IG9uTW91c2VEb3duPSJzdHlsZS5jdXJzb3I9J3Byb2dyZXNzJztldmVudC5wcmV2ZW50RGVmYXVs
dCgpOyIgb25Nb3VzZU1vdmU9InN0eWxlLmN1cnNvcj0ncG9pbnRlcic7IiBvbk1vdXNlVXA9InN0
eWxlLmN1cnNvcj0naGVscCc7IiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Ij5QbGF5IHdpdGggbW91
c2Ugb24gdGhpcyBlbGVtZW50LiBDdXJzb3JzIGNoYW5nZSBvbiBldmVudHMgLSBtb3VzZW1vdmU6
IHBvaW50ZXIoaGFuZCksIG1vdXNlZG93bjogcHJvZ3Jlc3MsIG1vdXNldXA6IGhlbHAuPC9kaXY+
Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Cit2YXIg
Q1VSU09SX1VQREFURV9ERUxBWSA9IDUwOworCitkZXNjcmlwdGlvbigiVGVzdCB0aGF0IG1vdXNl
IGN1cnNvcnMgYXJlIGNoYW5nZWQgY29ycmVjdGx5IG9uIG1vdXNlIGV2ZW50cy4iKTsKKworaWYg
KCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWly
ZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAg
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworfQorCitmdW5jdGlvbiBydW5UZXN0
KHByZXBhcmUsIG5leHQpIHsKKyAgICBwcmVwYXJlKCk7CisgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgZGVidWcoJ0N1cnNvciBJbmZvOiAnICsgd2luZG93LmludGVybmFscy5n
ZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIG5leHQoKTsKKyAgICB9LCBDVVJTT1JfVVBEQVRFX0RFTEFZKTsKK30KKworZnVuY3Rpb24g
dGVzdHNEb25lKCkgeworICAgIC8vIFRoaXMgdGV4dCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdGVz
dCBvdXRwdXQgLSBoaWRlIGl0CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29u
dGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
KworLy8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgor
aWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZXZlbnRTZW5kZXIuZHJhZ01vZGUgPSBmYWxzZTsK
KyAgICB2YXIgdGVzdHMgPSBbCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVi
dWcoJ01vdXNlIG1vdmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRh
cmdldC5vZmZzZXRMZWZ0ICsgMywgdGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAgICAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBkb3duJyk7CisgICAgICAgICAg
ICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBkZWJ1ZygnTW91c2UgaG9sZCBkb3duLCBtb3ZlJyk7CisgICAgICAgICAgICBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDEzLCB0YXJnZXQub2Zmc2V0
VG9wICsgMyk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01v
dXNlIHVwJyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgICAgIH0K
KyAgICBdOworCisgICAgdmFyIGkgPSAwOworICAgIGZ1bmN0aW9uIG5leHRUZXN0KCkgeworICAg
ICAgICBpZiAoaSA8IHRlc3RzLmxlbmd0aCkgeworICAgICAgICAgICAgcnVuVGVzdCh0ZXN0c1tp
KytdLCBuZXh0VGVzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0c0RvbmUo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBuZXh0VGVzdCgpOworfQorCis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hNWQwNjQ1ZTliNzYxMTNmN2M0MWVkYWQ5ZjI2Y2ZmZTk0ZjdlNjkxCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1v
dXNlbW92ZSBldmVudCBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvci4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK0J1ZyA4NTM0MworCisKK1RFU1QgQ0FTRTogTW91c2UgaWRsZSwg
Y2hhbmdlIGN1cnNvciBzaG91bGQgbm90IGZpcmUgbW91c2Vtb3ZlIGV2ZW50CitDdXJzb3IgSW5m
bzogdHlwZT1Qb2ludGVyIGhvdFNwb3Q9MCwwCitDdXJzb3IgSW5mbzogdHlwZT1IZWxwIGhvdFNw
b3Q9MCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8t
bW91c2Vtb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8t
bW91c2Vtb3ZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNiNmZhZGIwMTFiOTNmNWFkNzM2OWMyOWMyNjM4
MDVkZmNkNDg2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21v
dXNlLWN1cnNvci1uby1tb3VzZW1vdmUuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPjxhIGhyZWY9Imh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyI+QnVnIDg1MzQzPC9h
PjwvcD4KKzxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQiIHN0
eWxlPSJjdXJzb3I6ZGVmYXVsdCI+TW91c2UgaWRsZSwgY2hhbmdlIGN1cnNvciBzaG91bGQgbm90
IGZpcmUgbW91c2Vtb3ZlIGV2ZW50PC9kaXY+Cis8L2Rpdj4KKzxici8+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+Cit2YXIgQ1VSU09SX1VQREFURV9ERUxBWSA9IDUwOworCitk
ZXNjcmlwdGlvbigiVGVzdCB0aGF0IHRoZXJlIGlzIG5vIG1vdXNlbW92ZSBldmVudCBmaXJlZCB3
aGVuIGNoYW5naW5nIGN1cnNvci4iKTsKKworaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAg
ICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKK30KKwor
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cisg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMg
PSB0cnVlOworfQorCisvLyBDYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgaGVyZSB3aXRob3V0IGV2
ZW50U2VuZGVyCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdmFyIG5vZGUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgZGVidWcoJ1RFU1QgQ0FTRTogJyAr
IG5vZGUudGV4dENvbnRlbnQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKG5vZGUub2Zm
c2V0TGVmdCArIDMsIG5vZGUub2Zmc2V0VG9wICsgMyk7CisgICAgZGVidWcoJ0N1cnNvciBJbmZv
OiAnICsgd2luZG93LmludGVybmFscy5nZXRDdXJyZW50Q3Vyc29ySW5mbyhkb2N1bWVudCkpOwor
ICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRlc3RGYWlsZWQoJ01vdXNlbW92ZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4g
Y2hhbmdpbmcgY3Vyc29yJyk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworICAg
IG5vZGUuc3R5bGUuY3Vyc29yID0gJ2hlbHAnOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3Vy
cmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgIH0sIENV
UlNPUl9VUERBVEVfREVMQVkpOworCisgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBjaGFu
Z2UgdG8gcmVzb2x2ZS4gRmFrZSBtb3VzZW1vdmUgZXZlbnQgdGhhdCBjYXVzZWQgYnVnLCBpcyB1
c2luZyBhIHRpbWVyCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgMTUwKTsKK30KKworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192249</attachid>
            <date>2013-03-08 10:48:19 -0800</date>
            <delta_ts>2013-04-05 03:57:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130308204412.patch</filename>
            <type>text/plain</type>
            <size>22537</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQ3MWQzMDk4MDU5OTBj
MmRmMjMyNTAxYjVmMjJlY2NkMTIwZDZmMy4uNmQyN2ZjZTY1NDVjNjIyYzUyOTdhYTA3ZjljN2Qx
ODBhNDg3NjY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAzLTA4ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKS4KKworICAgICAgICBUaGUgbmV3IGFwcHJvYWNoIGRvZXMgbm90IHVz
ZSB0aGUgZmFrZSBtb3VzZW1vdmUgZXZlbnQuIEluc3RlYWQsIGl0IHVzZXMgb25seSB0aGUgbG9n
aWMKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgYWN0dWFsIGN1cnNvciBjaGFuZ2UgdG8gaGFwcGVu
LgorCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yIHdhcyByZWZhY3RvcmVkIHRv
IG5vdCB0YWtlIGEgd2hvbGUgbW91c2UgZXZlbnQgYnV0IGluc3RlYWQgd29yayB3aXRoCisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgc28gdGhhdCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvciBtdXN0
IG5vdCBjcmVhdGUgYSB1c2VsZXNzIFBsYXRmb3JtRXZlbnQuCisKKyAgICAgICAgRml4ZXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2
ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5vIGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBi
dXR0b24gZG93bikKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpj
dXJzb3JVcGRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dXBkYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0
ZSk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNob3VsZFNldEN1cnNvcik6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL01vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0czo6aXNPdmVyTGluayk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNPdmVyTGluayk6
CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UpOgorCiAyMDEzLTAzLTA4ICBHbGVubiBIYXJ0bWFubiAgPGhhcnRtYW5uZ0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICBBZGRpbmcgYSBob29rIHRvIGNvbGxlY3QgZGF0YSBmb3Ig
YSBHb29nbGUgVU1BIGhpc3RvZ3JhbSB0byB0cmFjayB3aGVuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggOTRhODQwMjRjMzI0YjdmYmE1MTAzZjAwZGE2ZGRmZmEyNDY0Zjdh
ZS4uM2YxOGYyYjVkZGJlZjRmMDM4YjYyZjE5NWQ4MGY5OGY1ZjY5YzAzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTQ0LDYgKzE0NCwxMCBAQCB1c2luZyBuYW1lc3Bh
Y2UgU1ZHTmFtZXM7CiBjb25zdCBkb3VibGUgZmFrZU1vdXNlTW92ZVNob3J0SW50ZXJ2YWwgPSAw
LjE7CiBjb25zdCBkb3VibGUgZmFrZU1vdXNlTW92ZUxvbmdJbnRlcnZhbCA9IDAuMjUwOwogCisv
LyBUaGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgYSBjdXJzb3IgdXBkYXRlIG9uIHN0eWxl
IGFuZCBsYXlvdXQgY2hhbmdlcworLy8gU2V0IHRvIDUwSHosIG5vIG5lZWQgdG8gYmUgZmFzdGVy
IHRoYW4gY29tbW9uIHNjcmVlbiByZWZyZXNoIHJhdGUKK2NvbnN0IGRvdWJsZSBjdXJzb3JVcGRh
dGVJbnRlcnZhbCA9IDAuMDI7CisKIGNvbnN0IGludCBtYXhpbXVtQ3Vyc29yU2l6ZSA9IDEyODsK
ICNpZiBFTkFCTEUoTU9VU0VfQ1VSU09SX1NDQUxFKQogLy8gSXQncyBwcmV0dHkgdW5saWtlbHkg
dGhhdCBhIHNjYWxlIG9mIGxlc3MgdGhhbiBvbmUgd291bGQgZXZlciBiZSB1c2VkLiBCdXQgYWxs
IHdlIHJlYWxseQpAQCAtMzE5LDYgKzMyMyw3IEBAIEV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVy
KEZyYW1lKiBmcmFtZSkKICAgICAsIG1fbW91c2VEb3duV2FzU2luZ2xlQ2xpY2tJblNlbGVjdGlv
bihmYWxzZSkKICAgICAsIG1fc2VsZWN0aW9uSW5pdGlhdGlvblN0YXRlKEhhdmVOb3RTdGFydGVk
U2VsZWN0aW9uKQogICAgICwgbV9ob3ZlclRpbWVyKHRoaXMsICZFdmVudEhhbmRsZXI6OmhvdmVy
VGltZXJGaXJlZCkKKyAgICAsIG1fY3Vyc29yVXBkYXRlVGltZXIodGhpcywgJkV2ZW50SGFuZGxl
cjo6Y3Vyc29yVXBkYXRlVGltZXJGaXJlZCkKICAgICAsIG1fYXV0b3Njcm9sbENvbnRyb2xsZXIo
YWRvcHRQdHIobmV3IEF1dG9zY3JvbGxDb250cm9sbGVyKSkKICAgICAsIG1fbW91c2VEb3duTWF5
U3RhcnRBdXRvc2Nyb2xsKGZhbHNlKQogICAgICwgbV9tb3VzZURvd25XYXNJblN1YmZyYW1lKGZh
bHNlKQpAQCAtMzc0LDYgKzM3OSw3IEBAIERyYWdTdGF0ZSYgRXZlbnRIYW5kbGVyOjpkcmFnU3Rh
dGUoKQogdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyKCkKIHsKICAgICBtX2hvdmVyVGltZXIuc3Rv
cCgpOworICAgIG1fY3Vyc29yVXBkYXRlVGltZXIuc3RvcCgpOwogICAgIG1fZmFrZU1vdXNlTW92
ZUV2ZW50VGltZXIuc3RvcCgpOwogI2lmIEVOQUJMRShDVVJTT1JfVklTSUJJTElUWSkKICAgICBj
YW5jZWxBdXRvSGlkZUN1cnNvclRpbWVyKCk7CkBAIC0xMjI1LDcgKzEyMzEsNTAgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OnVzZUhhbmRDdXJzb3IoTm9kZSogbm9kZSwgYm9vbCBpc092ZXJMaW5rLCBi
b29sIHNoaWZ0S2V5KQogICAgIHJldHVybiAoKGlzT3ZlckxpbmsgfHwgaXNTdWJtaXRJbWFnZShu
b2RlKSkgJiYgKCFlZGl0YWJsZSB8fCBlZGl0YWJsZUxpbmtFbmFibGVkKSk7CiB9CiAKLU9wdGlv
bmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGV2ZW50LCBTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3ZvaWQgRXZlbnRI
YW5kbGVyOjpjdXJzb3JVcGRhdGVUaW1lckZpcmVkKFRpbWVyPEV2ZW50SGFuZGxlcj4qKQorewor
ICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisK
KyAgICB1cGRhdGVDdXJzb3IoKTsKK30KKwordm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNv
cigpCit7CisgICAgaWYgKG1fbW91c2VQb3NpdGlvbklzVW5rbm93bikKKyAgICAgICAgcmV0dXJu
OworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmll
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHZpZXct
PnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghdmlldy0+c2hvdWxkU2V0Q3Vyc29yKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgc2hpZnRLZXk7CisgICAgYm9vbCBjdHJsS2V5OworICAgIGJvb2wgYWx0S2V5OworICAg
IGJvb2wgbWV0YUtleTsKKyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2Rp
ZmllclN0YXRlKHNoaWZ0S2V5LCBjdHJsS2V5LCBhbHRLZXksIG1ldGFLZXkpOworCisgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisKKyAgICBIaXRUZXN0UmVxdWVzdCBy
ZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1
bHQodmlldy0+d2luZG93VG9Db250ZW50cyhtX2xhc3RLbm93bk1vdXNlUG9zaXRpb24pKTsKKyAg
ICByZW5kZXJWaWV3LT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CisKKyAgICBPcHRpb25hbEN1
cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVjdEN1cnNvcihyZXN1bHQsIHNoaWZ0S2V5KTsKKyAg
ICBpZiAob3B0aW9uYWxDdXJzb3IuaXNDdXJzb3JDaGFuZ2UoKSkgeworICAgICAgICBtX2N1cnJl
bnRNb3VzZUN1cnNvciA9IG9wdGlvbmFsQ3Vyc29yLmN1cnNvcigpOworICAgICAgICB2aWV3LT5z
ZXRDdXJzb3IobV9jdXJyZW50TW91c2VDdXJzb3IpOworICAgIH0KK30KKworT3B0aW9uYWxDdXJz
b3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBib29sIHNoaWZ0S2V5KQogewogICAgIGlmIChtX3Jlc2l6ZUxheWVyICYmIG1fcmVzaXplTGF5
ZXItPmluUmVzaXplTW9kZSgpKQogICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CkBAIC0x
MjM4LDggKzEyODcsMTEgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJz
b3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKICAgICAgICAgcmV0dXJu
IE5vQ3Vyc29yQ2hhbmdlOwogI2VuZGlmCiAKLSAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0
Tm9kZSgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlID8gbm9kZS0+cmVuZGVy
ZXIoKSA6IDA7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC50YXJnZXROb2RlKCk7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFuZ2U7CisKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSByZW5kZXJlciA/IHJlbmRlcmVyLT5zdHlsZSgpIDogMDsKICAgICBib29sIGhvcml6b250YWxU
ZXh0ID0gIXN0eWxlIHx8IHN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGNv
bnN0IEN1cnNvciYgaUJlYW0gPSBob3Jpem9udGFsVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiB2ZXJ0
aWNhbFRleHRDdXJzb3IoKTsKQEAgLTEyNjMsNyArMTMxNSw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmIGV2CiAKICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgQ3Vyc29yIG92ZXJyaWRlQ3Vy
c29yOwotICAgICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50
KGV2ZW50LmxvY2FsUG9pbnQoKSksIG92ZXJyaWRlQ3Vyc29yKSkgeworICAgICAgICBzd2l0Y2gg
KHJlbmRlcmVyLT5nZXRDdXJzb3Iocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkp
LCBvdmVycmlkZUN1cnNvcikpIHsKICAgICAgICAgY2FzZSBTZXRDdXJzb3JCYXNlZE9uU3R5bGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRDdXJzb3I6CkBAIC0xMzEwLDE5
ICsxMzYyLDE5IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2CiAKICAgICBzd2l0Y2ggKHN0eWxl
ID8gc3R5bGUtPmN1cnNvcigpIDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRP
OiB7Ci0gICAgICAgIGJvb2wgZWRpdGFibGUgPSAobm9kZSAmJiBub2RlLT5yZW5kZXJlcklzRWRp
dGFibGUoKSk7CisgICAgICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFi
bGUoKTsKIAotICAgICAgICBpZiAodXNlSGFuZEN1cnNvcihub2RlLCBldmVudC5pc092ZXJMaW5r
KCksIGV2ZW50LmV2ZW50KCkuc2hpZnRLZXkoKSkpCisgICAgICAgIGlmICh1c2VIYW5kQ3Vyc29y
KG5vZGUsIHJlc3VsdC5pc092ZXJMaW5rKCksIHNoaWZ0S2V5KSkKICAgICAgICAgICAgIHJldHVy
biBoYW5kQ3Vyc29yKCk7CiAKICAgICAgICAgYm9vbCBpblJlc2l6ZXIgPSBmYWxzZTsKICAgICAg
ICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0g
cmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWVW
aWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQotICAgICAgICAgICAgICAgICAgICBpblJlc2l6
ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbCh2aWV3LT53aW5kb3dUb0NvbnRlbnRz
KGV2ZW50LmV2ZW50KCkucG9zaXRpb24oKSkpOworICAgICAgICAgICAgICAgICAgICBpblJlc2l6
ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbCh2aWV3LT53aW5kb3dUb0NvbnRlbnRz
KHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGlmICgoZWRpdGFibGUgfHwgKHJlbmRlcmVyICYmIHJlbmRlcmVy
LT5pc1RleHQoKSAmJiBub2RlLT5jYW5TdGFydFNlbGVjdGlvbigpKSkgJiYgIWluUmVzaXplciAm
JiAhc2Nyb2xsYmFyKQorICAgICAgICBpZiAoKGVkaXRhYmxlIHx8IChyZW5kZXJlciAmJiByZW5k
ZXJlci0+aXNUZXh0KCkgJiYgbm9kZS0+Y2FuU3RhcnRTZWxlY3Rpb24oKSkpICYmICFpblJlc2l6
ZXIgJiYgIXJlc3VsdC5zY3JvbGxiYXIoKSkKICAgICAgICAgICAgIHJldHVybiBpQmVhbTsKICAg
ICAgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKICAgICB9CkBAIC0xNjkwLDYgKzE3NDIsOCBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgIGlmIChtX2hvdmVyVGltZXIuaXNBY3RpdmUo
KSkKICAgICAgICAgbV9ob3ZlclRpbWVyLnN0b3AoKTsKIAorICAgIG1fY3Vyc29yVXBkYXRlVGlt
ZXIuc3RvcCgpOworCiAgICAgY2FuY2VsRmFrZU1vdXNlTW92ZUV2ZW50KCk7CiAKICNpZiBFTkFC
TEUoU1ZHKQpAQCAtMTc2Miw3ICsxODE2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAg
ICAgICAgaWYgKHNjcm9sbGJhciAmJiAhbV9tb3VzZVByZXNzZWQpCiAgICAgICAgICAgICBzY3Jv
bGxiYXItPm1vdXNlTW92ZWQobW91c2VFdmVudCk7IC8vIEhhbmRsZSBob3ZlciBlZmZlY3RzIG9u
IHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdmlzdWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBob3Zl
cmluZy4KICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewot
ICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJzb3IgPSBzZWxlY3RDdXJzb3Io
bWV2LCBzY3JvbGxiYXIpOworICAgICAgICAgICAgT3B0aW9uYWxDdXJzb3Igb3B0aW9uYWxDdXJz
b3IgPSBzZWxlY3RDdXJzb3IobWV2LmhpdFRlc3RSZXN1bHQoKSwgbW91c2VFdmVudC5zaGlmdEtl
eSgpKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7
CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50TW91c2VDdXJzb3IgPSBvcHRpb25hbEN1cnNvci5j
dXJzb3IoKTsKICAgICAgICAgICAgICAgICB2aWV3LT5zZXRDdXJzb3IobV9jdXJyZW50TW91c2VD
dXJzb3IpOwpAQCAtMjk4Myw2ICszMDM3LDEyIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzY2hlZHVs
ZUhvdmVyU3RhdGVVcGRhdGUoKQogICAgICAgICBtX2hvdmVyVGltZXIuc3RhcnRPbmVTaG90KDAp
OwogfQogCit2b2lkIEV2ZW50SGFuZGxlcjo6c2NoZWR1bGVDdXJzb3JVcGRhdGUoKQoreworICAg
IGlmICghbV9jdXJzb3JVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2N1cnNvclVw
ZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdChjdXJzb3JVcGRhdGVJbnRlcnZhbCk7Cit9CisKIHZvaWQg
RXZlbnRIYW5kbGVyOjpkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKQogewogICAgIGlm
IChtX21vdXNlUHJlc3NlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDNiNWMz
MWE0ZDRlZDM2YzAwZGY1ZTkwZjE5OTIwODA4OGJhZDA2NzcuLmYxZjYwZmUzYWFjNTU1ZGI1OWQ0
MGI3ZmNjZDNlOWI0NDJjYTFhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAt
MTQ3LDYgKzE0Nyw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBzY2hlZHVsZUhvdmVy
U3RhdGVVcGRhdGUoKTsKKyAgICB2b2lkIHNjaGVkdWxlQ3Vyc29yVXBkYXRlKCk7CiAKICAgICB2
b2lkIHNldFJlc2l6aW5nRnJhbWVTZXQoSFRNTEZyYW1lU2V0RWxlbWVudCopOwogCkBAIC0yNTQs
NiArMjU1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHVzZUhhbmRDdXJzb3IoTm9k
ZSosIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSk7CisgICAgdm9pZCB1cGRhdGVDdXJz
b3IoKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtMjgwLDggKzI4
MiwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVu
dChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAKLSAgICBPcHRpb25hbEN1
cnNvciBzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIFNj
cm9sbGJhciopOworICAgIE9wdGlvbmFsQ3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0
UmVzdWx0JiwgYm9vbCBzaGlmdEtleSk7CisKICAgICB2b2lkIGhvdmVyVGltZXJGaXJlZChUaW1l
cjxFdmVudEhhbmRsZXI+Kik7CisgICAgdm9pZCBjdXJzb3JVcGRhdGVUaW1lckZpcmVkKFRpbWVy
PEV2ZW50SGFuZGxlcj4qKTsKIAogICAgIGJvb2wgbG9naWNhbFNjcm9sbE92ZXJmbG93KFNjcm9s
bExvZ2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUg
PSAwKTsKICAgICAKQEAgLTQxNiw2ICs0MjAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wYW5T
Y3JvbGxCdXR0b25QcmVzc2VkOwogCiAgICAgVGltZXI8RXZlbnRIYW5kbGVyPiBtX2hvdmVyVGlt
ZXI7CisgICAgVGltZXI8RXZlbnRIYW5kbGVyPiBtX2N1cnNvclVwZGF0ZVRpbWVyOwogCiAgICAg
T3duUHRyPEF1dG9zY3JvbGxDb250cm9sbGVyPiBtX2F1dG9zY3JvbGxDb250cm9sbGVyOwogICAg
IGJvb2wgbV9tb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKaW5kZXggMWY1N2UwYzI3NGM3ZjNiOTAzYTdjNmM2NDE5ODAxZmFlNTU3NjkzYi4uOWM4
NzkyMGU5OWM4Y2RkZGQzMWY5ZTlmOGVjODAzMGQ3NTJiMjg1MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcApAQCAtMTU5Nyw2ICsxNTk3LDEyIEBAIEludFBvaW50IEZyYW1lVmlldzo6bGFz
dEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+bGFzdEtub3duTW91c2VQb3NpdGlvbigpIDogSW50UG9pbnQoKTsK
IH0KIAorYm9vbCBGcmFtZVZpZXc6OnNob3VsZFNldEN1cnNvcigpIGNvbnN0Cit7CisgICAgUGFn
ZSogcGFnZSA9IGZyYW1lKCktPnBhZ2UoKTsKKyAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5pc09u
c2NyZWVuKCkgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Cit9CisKIGJv
b2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KQogewogICAgIGlmICghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyB8fCBtX3ZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3RzLT5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CmluZGV4IDE0OGRjNjFiMmZiNzJkZGY3Yjc3ZDhlNTM2NjI5ZGEzYTEyZjM3OWQuLjYxNmNlZjYw
Njg1YTYxZTNiOGE5YzUzNjgyNDI1OTgwNjhmYWZhYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aApAQCAtMzQwLDYgKzM0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRSZXBhaW50
VGhyb3R0bGluZ0RlZmVycmVkUmVwYWludERlbGF5SW5jcmVtZW50RHVyaW5nTG9hZGluZyhkb3Vi
bGUgcCk7CiAKICAgICB2aXJ0dWFsIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSBj
b25zdDsKKyAgICBib29sIHNob3VsZFNldEN1cnNvcigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IE9WRVJSSURFOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcAppbmRl
eCBlMzNkZGNlMjQ2ZjNiZTE0YjJjYmI1ZjFjYWM2Yzc4MDJiNDZmMzAxLi5lMDMwNTY4N2RhODZk
NzBjOGE1MjYyZTdhZTlhYzRlMGVjNmJjNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAKQEAgLTM1LDcgKzM1LDcgQEAg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0czo6TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyhjb25zdCBQbGF0Zm9ybU1vdXNlRXYKIAogYm9vbCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzOjppc092ZXJMaW5rKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oaXRUZXN0UmVzdWx0LlVS
TEVsZW1lbnQoKSAmJiBtX2hpdFRlc3RSZXN1bHQuVVJMRWxlbWVudCgpLT5pc0xpbmsoKTsKKyAg
ICByZXR1cm4gbV9oaXRUZXN0UmVzdWx0LmlzT3ZlckxpbmsoKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IGYxYTM0NmU3ODhlNGM2NDJl
OWNmNTM3NDVkZWZjOTIzOWZhY2JkZDAuLjlkMjNiMzg4MGYwNThiZjIwOGIzZWJmNWY1MzU2NTFi
YWExNjMyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAK
QEAgLTUxMiw2ICs1MTIsMTEgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0xpdmVMaW5rKCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgSGl0VGVzdFJlc3VsdDo6aXNPdmVyTGlu
aygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5uZXJVUkxFbGVtZW50ICYmIG1faW5uZXJVUkxF
bGVtZW50LT5pc0xpbmsoKTsKK30KKwogU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlRGlzcGxh
eVN0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lubmVyVVJMRWxlbWVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDI1YTY5NTVhNGJjNWM2NzQ1ODli
NWVjNGJhYmY2MDExMzM3OTdlYWMuLjVjYzUwNmMyMjVmODc2YTE4MTYxNjQ2YWE2MzljNzdlMzZk
ODgwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApAQCAtMTA4
LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBLVVJMIGFic29sdXRlTGlua1VSTCgpIGNvbnN0Owog
ICAgIFN0cmluZyB0ZXh0Q29udGVudCgpIGNvbnN0OwogICAgIGJvb2wgaXNMaXZlTGluaygpIGNv
bnN0OworICAgIGJvb2wgaXNPdmVyTGluaygpIGNvbnN0OwogICAgIGJvb2wgaXNDb250ZW50RWRp
dGFibGUoKSBjb25zdDsKICAgICB2b2lkIHRvZ2dsZU1lZGlhQ29udHJvbHNEaXNwbGF5KCkgY29u
c3Q7CiAgICAgdm9pZCB0b2dnbGVNZWRpYUxvb3BQbGF5YmFjaygpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA1ZTY3MWUxOTUxMDBjZGVjMzE1
YmNjZjBlMzJjMjc4OTNlMjg0M2MwLi5mODljYzIwY2NmZjgxNzNmNjZlYTdkZDk0NTFmZWM1Zjhm
ZWRhYzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAt
MTk3Niw3ICsxOTc2LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3QKIAogICAgIGlmIChvbGRT
dHlsZSAmJiAhYXJlQ3Vyc29yc0VxdWFsKG9sZFN0eWxlLCBzdHlsZSgpKSkgewogICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7CisgICAgICAgICAg
ICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjaGVkdWxlQ3Vyc29yVXBkYXRlKCk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggZWMyY2RmMWFiMzI0ZDc5ZGFjN2QyNTBkMTk5Y2I2M2MyM2U5M2VhZC4uMWZj
MmE1Mjg5Y2ZhYjA1YTA3ZjZlMjJmMDI1N2FmMTgwMTE5MmIzYyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEzLTAzLTA4ICBBaXZvIFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAg
ICAgVXBkYXRpbmcgbW91c2UgY3Vyc29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGlu
ZyBmYWtlIG1vdXNlbW92ZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxODU3CisgICAgICAgIENoYW5naW5nIENTUyBjdXJzb3Igc2hvdWxk
IHdvcmsgbm8gbWF0dGVyIGlzIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIG5vdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBmb3Ig
Y2hhbmdpbmcgY3Vyc29yIG9uIG1vdXNlbW92ZSwgbW91c2Vkb3duLCBtb3VzZXVwIGFuZCBtb3Vz
ZW1vdmUKKyAgICAgICAgd2hpbGUgbW91c2UgYnV0dG9uIGJlaW5nIGhlbGQgZG93bi4gQWxzbyBh
ZGRlZCB0ZXN0IHRvIHZlcmlmeSB0aGF0IGEgbW91c2Vtb3ZlCisgICAgICAgIGV2ZW50IGlzIG5v
dCBmaXJlZCBmb3IgY2hhbmdpbmcgY3Vyc29yIHdoZW4gbW91c2UgaXMgbm90IG1vdmluZy4KKwor
ICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8t
bW91c2Vtb3ZlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0
YXRpb25zOgorCiAyMDEzLTAzLTA4ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5j
b20+CiAKICAgICAgICAgW01hY10gW1dLMl0gcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvcHJl
c3MtYWN0aW9uLWlzLWZpcnN0Lmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDhiN2FiZWE3MmE3MTAxNmRhMTQwMzQ5OTM1ZTYwMWE5M2MyOTQzZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgdGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBjaGFuZ2Vk
IGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitCdWcgNTMzNDEKKworCitNb3VzZSBtb3ZlCitDdXJzb3IgSW5mbzogdHlwZT1IYW5kIGhv
dFNwb3Q9MCwwCisKK01vdXNlIGRvd24KK0N1cnNvciBJbmZvOiB0eXBlPVByb2dyZXNzIGhvdFNw
b3Q9MCwwCisKK01vdXNlIGhvbGQgZG93biwgbW92ZQorQ3Vyc29yIEluZm86IHR5cGU9SGFuZCBo
b3RTcG90PTAsMAorCitNb3VzZSB1cAorQ3Vyc29yIEluZm86IHR5cGU9SGVscCBob3RTcG90PTAs
MAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5NDc3MmE1YTNhNmIxZDU5NmViMjg4ZTk4NDEyNjRlMGE4ZTYzMmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItY2hhbmdl
Lmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTMzNDEiPkJ1ZyA1MzM0MTwvYT48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNv
bnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBvbk1vdXNlRG93bj0ic3R5bGUuY3Vyc29y
PSdwcm9ncmVzcyc7ZXZlbnQucHJldmVudERlZmF1bHQoKTsiIG9uTW91c2VNb3ZlPSJzdHlsZS5j
dXJzb3I9J3BvaW50ZXInOyIgb25Nb3VzZVVwPSJzdHlsZS5jdXJzb3I9J2hlbHAnOyIgc3R5bGU9
ImN1cnNvcjpwb2ludGVyOyI+UGxheSB3aXRoIG1vdXNlIG9uIHRoaXMgZWxlbWVudC4gQ3Vyc29y
cyBjaGFuZ2Ugb24gZXZlbnRzIC0gbW91c2Vtb3ZlOiBwb2ludGVyKGhhbmQpLCBtb3VzZWRvd246
IHByb2dyZXNzLCBtb3VzZXVwOiBoZWxwLjwvZGl2PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgordmFyIENVUlNPUl9VUERBVEVfREVMQVkgPSA1MDsK
KworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBjaGFuZ2VkIGNvcnJl
Y3RseSBvbiBtb3VzZSBldmVudHMuIik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisK
K2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwor
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gcnVuVGVzdChwcmVwYXJlLCBuZXh0KSB7CisgICAgcHJl
cGFyZSgpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCdDdXJz
b3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1l
bnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBuZXh0KCk7CisgICAgfSwgQ1VSU09S
X1VQREFURV9ERUxBWSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RzRG9uZSgpIHsKKyAgICAvLyBUaGlz
IHRleHQgaXMgcmVkdW5kYW50IHdpdGggdGhlIHRlc3Qgb3V0cHV0IC0gaGlkZSBpdAorICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAn
bm9uZSc7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKKy8vIENhbid0IGRvIGFueXRoaW5nIHVz
ZWZ1bCBoZXJlIHdpdGhvdXQgZXZlbnRTZW5kZXIKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsK
KyAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAg
IGV2ZW50U2VuZGVyLmRyYWdNb2RlID0gZmFsc2U7CisgICAgdmFyIHRlc3RzID0gWworICAgICAg
ICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBtb3ZlJyk7CisgICAgICAg
ICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDMsIHRhcmdl
dC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBk
ZWJ1ZygnTW91c2UgZG93bicpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7
CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoJ01vdXNlIGhvbGQg
ZG93biwgbW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0
Lm9mZnNldExlZnQgKyAxMywgdGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAgICAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSB1cCcpOworICAgICAgICAgICAgZXZl
bnRTZW5kZXIubW91c2VVcCgpOworICAgICAgICB9CisgICAgXTsKKworICAgIHZhciBpID0gMDsK
KyAgICBmdW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAgICAgICAgaWYgKGkgPCB0ZXN0cy5sZW5ndGgp
IHsKKyAgICAgICAgICAgIHJ1blRlc3QodGVzdHNbaSsrXSwgbmV4dFRlc3QpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGVzdHNEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
bmV4dFRlc3QoKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1v
dmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5v
LW1vdXNlbW92ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVkMDY0NWU5Yjc2MTEzZjdjNDFl
ZGFkOWYyNmNmZmU5NGY3ZTY5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTYgQEAKK1Rlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBj
aGFuZ2luZyBjdXJzb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCdWcgODUz
NDMKKworCitURVNUIENBU0U6IE1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBm
aXJlIG1vdXNlbW92ZSBldmVudAorQ3Vyc29yIEluZm86IHR5cGU9UG9pbnRlciBob3RTcG90PTAs
MAorQ3Vyc29yIEluZm86IHR5cGU9SGVscCBob3RTcG90PTAsMAorCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFjYjZmYWRiMDExYjkzZjVhZDczNjljMjljMjYzODA1ZGZjZDQ4NmEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91c2Vtb3ZlLmh0
bWwKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5
bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODUzNDMiPkJ1ZyA4NTM0MzwvYT48L3A+Cis8ZGl2IGlkPSJ0ZXN0LWNvbnRh
aW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0iY3Vyc29yOmRlZmF1bHQiPk1vdXNl
IGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVudDwvZGl2
PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgordmFy
IENVUlNPUl9VUERBVEVfREVMQVkgPSA1MDsKKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCB0aGVy
ZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3IuIik7CisK
K2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJl
cXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgewor
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworLy8gQ2FuJ3QgZG8g
YW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYgKHdpbmRvdy5ldmVu
dFNlbmRlcikgeworICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rhcmdl
dCcpOworICAgIGRlYnVnKCdURVNUIENBU0U6ICcgKyBub2RlLnRleHRDb250ZW50KTsKKyAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbyhub2RlLm9mZnNldExlZnQgKyAzLCBub2RlLm9mZnNldFRv
cCArIDMpOworICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0
Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIo
J21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCdNb3VzZW1vdmUg
ZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNvcicpOworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKKyAgICBub2RlLnN0eWxlLmN1cnNvciA9ICdoZWxw
JzsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygnQ3Vyc29yIElu
Zm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZvKGRvY3VtZW50KSk7
CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICB9LCBDVVJTT1JfVVBEQVRFX0RFTEFZKTsKKworICAg
IC8vIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgY2hhbmdlIHRvIHJlc29sdmUuIEZha2UgbW91c2Vt
b3ZlIGV2ZW50IHRoYXQgY2F1c2VkIGJ1ZywgaXMgdXNpbmcgYSB0aW1lcgorICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNv
bnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0sIDE1MCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGRhZTU4Y2Nk
MTc1NWY5OTdjYTgyNjNkNGVkMTU4ZmJjM2I3NGIyOTkuLjAzYTFjM2Y3NTJjY2U2NWNjN2NjYzQ3
ZDQ2NGZlYWZmNTYzYzBhZTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0
YXRpb25zCkBAIC0xNDYwLDMgKzE0NjAsNiBAQCB3ZWJraXQub3JnL2IvMTExNzU0IGluc3BlY3Rv
ci9kZWJ1Z2dlci9kZWJ1Z2dlci1leHBhbmQtc2NvcGUuaHRtbCBbIENyYXNoIFBhc3MgXQogd2Vi
a2l0Lm9yZy9iLzExMTYwNiBmYXN0L2JvcmRlcnMvYm9yZGVyLWZpdC0yLmh0bWwgWyBGYWlsdXJl
IFBhc3MgXQogd2Via2l0Lm9yZy9iLzExMTYwNiBmYXN0L2JvcmRlcnMvYm9yZGVyLWZpdC5odG1s
IFsgRmFpbHVyZSBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xMTE2MDYgZmFzdC9yZXBhaW50L2JvcmRl
ci1maXQtbGluZXMuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCisKKyMgTmV3IHRlc3QgZmFpbGluZywg
bmVlZHMgaW52ZXN0aWdhdGlvbi4KK3dlYmtpdC5vcmcvYi8xMDM4NTcgZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLWNoYW5nZS5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196614</attachid>
            <date>2013-04-05 03:57:18 -0700</date>
            <delta_ts>2013-04-05 05:37:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101857-20130405135704.patch</filename>
            <type>text/plain</type>
            <size>22441</size>
            <attacher name="Aivo Paas">aivopaas</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3NzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjMyNzU4MzRiODcxN2Uw
ODFhODc3OTUyYThlOGZmNGMxOGI0M2E5ZS4uNTc2ZWUwY2ZhMTc2YzIyMTAwZDU5MWNiNTc2N2I4
MjQzMzllZDI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTA0LTA1ICBBaXZv
IFBhYXMgIDxhaXZvcGFhc0BnbWFpbC5jb20+CisKKyAgICAgICAgVXBkYXRpbmcgbW91c2UgY3Vy
c29yIG9uIHN0eWxlIGNoYW5nZXMgd2l0aG91dCBlbWl0dGluZyBmYWtlIG1vdXNlbW92ZSBldmVu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW91c2Ug
Y3Vyc29yIGNoYW5nZXMgaW4gc3R5bGVzIHVzZWQgdG8gYmUgcmVmbGVjdGVkIGluIFVJIHRocm91
Z2ggZGlzcGF0Y2hpbmcgYSBmYWtlCisgICAgICAgIG1vdXNlbW92ZSBldmVudC4gVGhlIG9sZCBh
cHByb2FjaCBoYXMgc29tZSBmbGF3czogaXQgZW1pdHMgYSBtb3VzZW1vdmUgZXZlbnQgaW4KKyAg
ICAgICAgamF2YXNjcmlwdCB3aGVuIHRoZXJlIGlzIG5vIG1vdXNlIG1vdmVtZW50IGludm9sdmVk
IChidWcgODUzNDMpOyB0aGUgZmFrZSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMgY2FuY2Vs
bGVkIHdoaWxlIHRoZXJlIGlzIGEgbW91c2UgYnV0dG9uIGhlbGQgZG93biAtIGN1cnNvciB3b24n
dCBjaGFuZ2UKKyAgICAgICAgdW50aWwgbW91c2UgaXMgbW92ZWQgb3IgdGhlIGJ1dHRvbiByZWxl
YXNlZCAoYnVnIDUzMzQxKS4KKworICAgICAgICBUaGUgbmV3IGFwcHJvYWNoIGRvZXMgbm90IHVz
ZSB0aGUgZmFrZSBtb3VzZW1vdmUgZXZlbnQuIEluc3RlYWQsIGl0IHVzZXMgb25seSB0aGUgbG9n
aWMKKyAgICAgICAgbmVlZGVkIGZvciB0aGUgYWN0dWFsIGN1cnNvciBjaGFuZ2UgdG8gaGFwcGVu
LgorCisgICAgICAgIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yIHdhcyByZWZhY3RvcmVkIHRv
IG5vdCB0YWtlIGEgd2hvbGUgbW91c2UgZXZlbnQgYnV0IGluc3RlYWQgd29yayB3aXRoCisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgc28gdGhhdCBFdmVudEhhbmRsZXI6OnVwZGF0ZUN1cnNvciBtdXN0
IG5vdCBjcmVhdGUgYSB1c2VsZXNzIFBsYXRmb3JtRXZlbnQuCisKKyAgICAgICAgRml4ZXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTM0MyAobW91c2Vtb3ZlIGV2
ZW50IG9uIGN1cnNvciBjaGFuZ2UpCisgICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEgKG5vIGN1cnNvciBjaGFuZ2Ugd2hlbiBtb3VzZSBi
dXR0b24gZG93bikKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8tbW91
c2Vtb3ZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpj
dXJzb3JVcGRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dXBkYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0
ZSk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNob3VsZFNldEN1cnNvcik6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL01vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0czo6aXNPdmVyTGluayk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNPdmVyTGluayk6
CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UpOgorCiAyMDEzLTA0LTA1ICBTZW9ranUgS3dvbiAgPHNlb2tqdS5rd29uQGdt
YWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBjcmFzaCBpbiBJbnNwZWN0b3JET01B
Z2VudDo6aW5uZXJIaWdobGlnaHRRdWFkIGFmdGVyIHIxNDc1NjYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAppbmRleCAzMGE2YTVjYTE5MTJlZTg5ZGJhNjk4NDY3Mjg5NjBmOWYyNmFj
NWI2Li42MmRkY2E1NDliYzVhMTc5ZTQ5OWY3YTVlNTM2YmNmNmQzMTkwMzJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0xNDQsNiArMTQ0LDEwIEBAIHVzaW5nIG5hbWVz
cGFjZSBTVkdOYW1lczsKIGNvbnN0IGRvdWJsZSBmYWtlTW91c2VNb3ZlU2hvcnRJbnRlcnZhbCA9
IDAuMTsKIGNvbnN0IGRvdWJsZSBmYWtlTW91c2VNb3ZlTG9uZ0ludGVydmFsID0gMC4yNTA7CiAK
Ky8vIFRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciBhIGN1cnNvciB1cGRhdGUgb24gc3R5
bGUgYW5kIGxheW91dCBjaGFuZ2VzCisvLyBTZXQgdG8gNTBIeiwgbm8gbmVlZCB0byBiZSBmYXN0
ZXIgdGhhbiBjb21tb24gc2NyZWVuIHJlZnJlc2ggcmF0ZQorY29uc3QgZG91YmxlIGN1cnNvclVw
ZGF0ZUludGVydmFsID0gMC4wMjsKKwogY29uc3QgaW50IG1heGltdW1DdXJzb3JTaXplID0gMTI4
OwogI2lmIEVOQUJMRShNT1VTRV9DVVJTT1JfU0NBTEUpCiAvLyBJdCdzIHByZXR0eSB1bmxpa2Vs
eSB0aGF0IGEgc2NhbGUgb2YgbGVzcyB0aGFuIG9uZSB3b3VsZCBldmVyIGJlIHVzZWQuIEJ1dCBh
bGwgd2UgcmVhbGx5CkBAIC0zMTksNiArMzIzLDcgQEAgRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRs
ZXIoRnJhbWUqIGZyYW1lKQogICAgICwgbV9tb3VzZURvd25XYXNTaW5nbGVDbGlja0luU2VsZWN0
aW9uKGZhbHNlKQogICAgICwgbV9zZWxlY3Rpb25Jbml0aWF0aW9uU3RhdGUoSGF2ZU5vdFN0YXJ0
ZWRTZWxlY3Rpb24pCiAgICAgLCBtX2hvdmVyVGltZXIodGhpcywgJkV2ZW50SGFuZGxlcjo6aG92
ZXJUaW1lckZpcmVkKQorICAgICwgbV9jdXJzb3JVcGRhdGVUaW1lcih0aGlzLCAmRXZlbnRIYW5k
bGVyOjpjdXJzb3JVcGRhdGVUaW1lckZpcmVkKQogICAgICwgbV9hdXRvc2Nyb2xsQ29udHJvbGxl
cihhZG9wdFB0cihuZXcgQXV0b3Njcm9sbENvbnRyb2xsZXIpKQogICAgICwgbV9tb3VzZURvd25N
YXlTdGFydEF1dG9zY3JvbGwoZmFsc2UpCiAgICAgLCBtX21vdXNlRG93bldhc0luU3ViZnJhbWUo
ZmFsc2UpCkBAIC0zNzQsNiArMzc5LDcgQEAgRHJhZ1N0YXRlJiBFdmVudEhhbmRsZXI6OmRyYWdT
dGF0ZSgpCiB2b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXIoKQogewogICAgIG1faG92ZXJUaW1lci5z
dG9wKCk7CisgICAgbV9jdXJzb3JVcGRhdGVUaW1lci5zdG9wKCk7CiAgICAgbV9mYWtlTW91c2VN
b3ZlRXZlbnRUaW1lci5zdG9wKCk7CiAjaWYgRU5BQkxFKENVUlNPUl9WSVNJQklMSVRZKQogICAg
IGNhbmNlbEF1dG9IaWRlQ3Vyc29yVGltZXIoKTsKQEAgLTEyNDEsNyArMTI0Nyw1MCBAQCBib29s
IEV2ZW50SGFuZGxlcjo6dXNlSGFuZEN1cnNvcihOb2RlKiBub2RlLCBib29sIGlzT3Zlckxpbmss
IGJvb2wgc2hpZnRLZXkpCiAgICAgcmV0dXJuICgoaXNPdmVyTGluayB8fCBpc1N1Ym1pdEltYWdl
KG5vZGUpKSAmJiAoIWVkaXRhYmxlIHx8IGVkaXRhYmxlTGlua0VuYWJsZWQpKTsKIH0KIAotT3B0
aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQordm9pZCBFdmVu
dEhhbmRsZXI6OmN1cnNvclVwZGF0ZVRpbWVyRmlyZWQoVGltZXI8RXZlbnRIYW5kbGVyPiopCit7
CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsK
KworICAgIHVwZGF0ZUN1cnNvcigpOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlQ3Vy
c29yKCkKK3sKKyAgICBpZiAobV9tb3VzZVBvc2l0aW9uSXNVbmtub3duKQorICAgICAgICByZXR1
cm47CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2
aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdmll
dy0+cmVuZGVyVmlldygpOworICAgIGlmICghcmVuZGVyVmlldykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCF2aWV3LT5zaG91bGRTZXRDdXJzb3IoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYm9vbCBzaGlmdEtleTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBhbHRLZXk7Cisg
ICAgYm9vbCBtZXRhS2V5OworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1v
ZGlmaWVyU3RhdGUoc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7CisKKyAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKworICAgIEhpdFRlc3RSZXF1ZXN0
IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fbGFzdEtub3duTW91c2VQb3NpdGlvbikpOwor
ICAgIHJlbmRlclZpZXctPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE9wdGlvbmFs
Q3Vyc29yIG9wdGlvbmFsQ3Vyc29yID0gc2VsZWN0Q3Vyc29yKHJlc3VsdCwgc2hpZnRLZXkpOwor
ICAgIGlmIChvcHRpb25hbEN1cnNvci5pc0N1cnNvckNoYW5nZSgpKSB7CisgICAgICAgIG1fY3Vy
cmVudE1vdXNlQ3Vyc29yID0gb3B0aW9uYWxDdXJzb3IuY3Vyc29yKCk7CisgICAgICAgIHZpZXct
PnNldEN1cnNvcihtX2N1cnJlbnRNb3VzZUN1cnNvcik7CisgICAgfQorfQorCitPcHRpb25hbEN1
cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGJvb2wgc2hpZnRLZXkpCiB7CiAgICAgaWYgKG1fcmVzaXplTGF5ZXIgJiYgbV9yZXNpemVM
YXllci0+aW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKQEAg
LTEyNTQsOCArMTMwMywxMSBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1
cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldgogICAgICAgICByZXR1
cm4gTm9DdXJzb3JDaGFuZ2U7CiAjZW5kaWYKIAotICAgIE5vZGUqIG5vZGUgPSBldmVudC50YXJn
ZXROb2RlKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUgPyBub2RlLT5yZW5k
ZXJlcigpIDogMDsKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LnRhcmdldE5vZGUoKTsKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKKworICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogICAgIGJvb2wgaG9yaXpvbnRh
bFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAg
Y29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8gaUJlYW1DdXJzb3IoKSA6IHZl
cnRpY2FsVGV4dEN1cnNvcigpOwpAQCAtMTI3OSw3ICsxMzMxLDcgQEAgT3B0aW9uYWxDdXJzb3Ig
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYgZXYKIAogICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICBDdXJzb3Igb3ZlcnJpZGVD
dXJzb3I7Ci0gICAgICAgIHN3aXRjaCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVkSW50UG9p
bnQoZXZlbnQubG9jYWxQb2ludCgpKSwgb3ZlcnJpZGVDdXJzb3IpKSB7CisgICAgICAgIHN3aXRj
aCAocmVuZGVyZXItPmdldEN1cnNvcihyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQo
KSksIG92ZXJyaWRlQ3Vyc29yKSkgewogICAgICAgICBjYXNlIFNldEN1cnNvckJhc2VkT25TdHls
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldEN1cnNvcjoKQEAgLTEzMjYs
MTkgKzEzNzgsMTkgQEAgT3B0aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3Io
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXYKIAogICAgIHN3aXRjaCAoc3R5
bGUgPyBzdHlsZS0+Y3Vyc29yKCkgOiBDVVJTT1JfQVVUTykgewogICAgIGNhc2UgQ1VSU09SX0FV
VE86IHsKLSAgICAgICAgYm9vbCBlZGl0YWJsZSA9IChub2RlICYmIG5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKTsKKyAgICAgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpOwogCi0gICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUsIGV2ZW50LmlzT3Zlckxp
bmsoKSwgZXZlbnQuZXZlbnQoKS5zaGlmdEtleSgpKSkKKyAgICAgICAgaWYgKHVzZUhhbmRDdXJz
b3Iobm9kZSwgcmVzdWx0LmlzT3ZlckxpbmsoKSwgc2hpZnRLZXkpKQogICAgICAgICAgICAgcmV0
dXJuIGhhbmRDdXJzb3IoKTsKIAogICAgICAgICBib29sIGluUmVzaXplciA9IGZhbHNlOwogICAg
ICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIg
PSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGlmIChGcmFt
ZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCi0gICAgICAgICAgICAgICAgICAgIGluUmVz
aXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXctPndpbmRvd1RvQ29udGVu
dHMoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgIGluUmVz
aXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHZpZXctPndpbmRvd1RvQ29udGVu
dHMocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChlZGl0YWJsZSB8fCAocmVuZGVyZXIgJiYgcmVuZGVy
ZXItPmlzVGV4dCgpICYmIG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpKSAmJiAhaW5SZXNpemVy
ICYmICFzY3JvbGxiYXIpCisgICAgICAgIGlmICgoZWRpdGFibGUgfHwgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5pc1RleHQoKSAmJiBub2RlLT5jYW5TdGFydFNlbGVjdGlvbigpKSkgJiYgIWluUmVz
aXplciAmJiAhcmVzdWx0LnNjcm9sbGJhcigpKQogICAgICAgICAgICAgcmV0dXJuIGlCZWFtOwog
ICAgICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwogICAgIH0KQEAgLTE3MDYsNiArMTc1OCw4
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAgICAgaWYgKG1faG92ZXJUaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX2hvdmVyVGltZXIuc3RvcCgpOwogCisgICAgbV9jdXJzb3JVcGRhdGVU
aW1lci5zdG9wKCk7CisKICAgICBjYW5jZWxGYWtlTW91c2VNb3ZlRXZlbnQoKTsKIAogI2lmIEVO
QUJMRShTVkcpCkBAIC0xNzc4LDcgKzE4MzIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQog
ICAgICAgICBpZiAoc2Nyb2xsYmFyICYmICFtX21vdXNlUHJlc3NlZCkKICAgICAgICAgICAgIHNj
cm9sbGJhci0+bW91c2VNb3ZlZChtb3VzZUV2ZW50KTsgLy8gSGFuZGxlIGhvdmVyIGVmZmVjdHMg
b24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB2aXN1YWwgZmVlZGJhY2sgb24gc2Nyb2xsYmFyIGhv
dmVyaW5nLgogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKSB7
Ci0gICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1cnNvciA9IHNlbGVjdEN1cnNv
cihtZXYsIHNjcm9sbGJhcik7CisgICAgICAgICAgICBPcHRpb25hbEN1cnNvciBvcHRpb25hbEN1
cnNvciA9IHNlbGVjdEN1cnNvcihtZXYuaGl0VGVzdFJlc3VsdCgpLCBtb3VzZUV2ZW50LnNoaWZ0
S2V5KCkpOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsQ3Vyc29yLmlzQ3Vyc29yQ2hhbmdlKCkp
IHsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRNb3VzZUN1cnNvciA9IG9wdGlvbmFsQ3Vyc29y
LmN1cnNvcigpOwogICAgICAgICAgICAgICAgIHZpZXctPnNldEN1cnNvcihtX2N1cnJlbnRNb3Vz
ZUN1cnNvcik7CkBAIC0yOTk4LDYgKzMwNTIsMTIgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNjaGVk
dWxlSG92ZXJTdGF0ZVVwZGF0ZSgpCiAgICAgICAgIG1faG92ZXJUaW1lci5zdGFydE9uZVNob3Qo
MCk7CiB9CiAKK3ZvaWQgRXZlbnRIYW5kbGVyOjpzY2hlZHVsZUN1cnNvclVwZGF0ZSgpCit7Cisg
ICAgaWYgKCFtX2N1cnNvclVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fY3Vyc29y
VXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KGN1cnNvclVwZGF0ZUludGVydmFsKTsKK30KKwogdm9p
ZCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbigpCiB7CiAgICAg
aWYgKG1fbW91c2VQcmVzc2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggYzdl
ZDc5MzU0ZWVlNjAyMTg2NTQyYmI0YzM4Mzc2ZGNmMzUzNTQwZS4uMTg1MzJmMzdjMzg2M2NjZGMz
YTFiNmJiZGFkZGNmMTJhZTQzNDQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBA
IC0xNDcsNiArMTQ3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIHNjaGVkdWxlSG92
ZXJTdGF0ZVVwZGF0ZSgpOworICAgIHZvaWQgc2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsKIAogICAg
IHZvaWQgc2V0UmVzaXppbmdGcmFtZVNldChIVE1MRnJhbWVTZXRFbGVtZW50Kik7CiAKQEAgLTI1
NCw2ICsyNTUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgdXNlSGFuZEN1cnNvcihO
b2RlKiwgYm9vbCBpc092ZXJMaW5rLCBib29sIHNoaWZ0S2V5KTsKKyAgICB2b2lkIHVwZGF0ZUN1
cnNvcigpOwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0yODAsOCAr
MjgyLDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2
ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAotICAgIE9wdGlvbmFs
Q3Vyc29yIHNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwg
U2Nyb2xsYmFyKik7CisgICAgT3B0aW9uYWxDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRl
c3RSZXN1bHQmLCBib29sIHNoaWZ0S2V5KTsKKwogICAgIHZvaWQgaG92ZXJUaW1lckZpcmVkKFRp
bWVyPEV2ZW50SGFuZGxlcj4qKTsKKyAgICB2b2lkIGN1cnNvclVwZGF0ZVRpbWVyRmlyZWQoVGlt
ZXI8RXZlbnRIYW5kbGVyPiopOwogCiAgICAgYm9vbCBsb2dpY2FsU2Nyb2xsT3ZlcmZsb3coU2Ny
b2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIE5vZGUqIHN0YXJ0aW5nTm9k
ZSA9IDApOwogICAgIApAQCAtNDE2LDYgKzQyMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Bh
blNjcm9sbEJ1dHRvblByZXNzZWQ7CiAKICAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1faG92ZXJU
aW1lcjsKKyAgICBUaW1lcjxFdmVudEhhbmRsZXI+IG1fY3Vyc29yVXBkYXRlVGltZXI7CiAKICAg
ICBPd25QdHI8QXV0b3Njcm9sbENvbnRyb2xsZXI+IG1fYXV0b3Njcm9sbENvbnRyb2xsZXI7CiAg
ICAgYm9vbCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAppbmRleCBkNWFlYjQxOGI4NGYzN2I3N2Q5ZWM5YzMyN2ZkNjkwYjNjMGY5Njk5Li41
OWZkNzhjMzhiOGM0YjRlYzU3MmY2Y2FjYTVmZWI4NWNjMmNmN2MxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCkBAIC0xNjI0LDYgKzE2MjQsMTIgQEAgSW50UG9pbnQgRnJhbWVWaWV3Ojps
YXN0S25vd25Nb3VzZVBvc2l0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkgOiBJbnRQb2ludCgp
OwogfQogCitib29sIEZyYW1lVmlldzo6c2hvdWxkU2V0Q3Vyc29yKCkgY29uc3QKK3sKKyAgICBQ
YWdlKiBwYWdlID0gZnJhbWUoKS0+cGFnZSgpOworICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmlz
T25zY3JlZW4oKSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKK30KKwog
Ym9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCiB7CiAgICAgaWYgKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHx8IG1fdmll
d3BvcnRDb25zdHJhaW5lZE9iamVjdHMtPmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKaW5kZXggYmJhM2JhZTQ0MzhiYWM3M2VjMjNhNmZmOTU2Yzc2MDQxMDFmOTBhNC4uMjk1MDQx
MDFhNjk3ZGQ5NjhhMWUyY2QwOTg2Yzc2ZDY5NTlmZjJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCkBAIC0zNDAsNiArMzQwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFJlcGFp
bnRUaHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2FkaW5nKGRv
dWJsZSBwKTsKIAogICAgIHZpcnR1YWwgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbigp
IGNvbnN0OworICAgIGJvb2wgc2hvdWxkU2V0Q3Vyc29yKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCmlu
ZGV4IGUzM2RkY2UyNDZmM2JlMTRiMmNiYjVmMWNhYzZjNzgwMmI0NmYzMDEuLmUwMzA1Njg3ZGE4
NmQ3MGM4YTUyNjJlN2FlOWFjNGUwZWM2YmM1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcApAQCAtMzUsNyArMzUsNyBA
QCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjpNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzKGNvbnN0IFBsYXRmb3JtTW91c2VFdgogCiBib29sIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHM6OmlzT3ZlckxpbmsoKSBjb25zdAogewotICAgIHJldHVybiBtX2hpdFRlc3RSZXN1bHQu
VVJMRWxlbWVudCgpICYmIG1faGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCktPmlzTGluaygpOwor
ICAgIHJldHVybiBtX2hpdFRlc3RSZXN1bHQuaXNPdmVyTGluaygpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNWZmMTljMDdmOGIyYTE0
MzAxNWFlZjEwOTM0Nzk4OThkYWFiZWJmMi4uNWY0NzdmOGVjMWU1ODM2YTZmNTgyZmE4NjgzZmI0
YWZiOWI3M2IwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNw
cApAQCAtNTEyLDYgKzUxMiwxMSBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzTGl2ZUxpbmsoKSBj
b25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBIaXRUZXN0UmVzdWx0Ojppc092ZXJM
aW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbm5lclVSTEVsZW1lbnQgJiYgbV9pbm5lclVS
TEVsZW1lbnQtPmlzTGluaygpOworfQorCiBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGVEaXNw
bGF5U3RyaW5nKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW5uZXJVUkxFbGVtZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKaW5kZXggMjVhNjk1NWE0YmM1YzY3NDU4
OWI1ZWM0YmFiZjYwMTEzMzc5N2VhYy4uNWNjNTA2YzIyNWY4NzZhMTgxNjE2NDZhYTYzOWM3N2Uz
NmQ4ODBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCkBAIC0x
MDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIEtVUkwgYWJzb2x1dGVMaW5rVVJMKCkgY29uc3Q7
CiAgICAgU3RyaW5nIHRleHRDb250ZW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0xpdmVMaW5rKCkg
Y29uc3Q7CisgICAgYm9vbCBpc092ZXJMaW5rKCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbnRlbnRF
ZGl0YWJsZSgpIGNvbnN0OwogICAgIHZvaWQgdG9nZ2xlTWVkaWFDb250cm9sc0Rpc3BsYXkoKSBj
b25zdDsKICAgICB2b2lkIHRvZ2dsZU1lZGlhTG9vcFBsYXliYWNrKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGZiOWYxMzkzMGIyOGU2Njli
MjQzMzMzZTdiNDdiNjQ2MDVjZjU4MDIuLjA3YzI5MDcxOGJkOTIxZDUyNTJmZjRkYzUzOWY3YmM0
NzcwNTBjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBA
IC0yMDAzLDcgKzIwMDMsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogCiAgICAgaWYgKG9s
ZFN0eWxlICYmICFhcmVDdXJzb3JzRXF1YWwob2xkU3R5bGUsIHN0eWxlKCkpKSB7CiAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKTsKKyAgICAgICAg
ICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2NoZWR1bGVDdXJzb3JVcGRhdGUoKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBhOWYwYTI5OGZlNjEyNTAxMTI5MzhjY2YzNWQ5ZTZhYjYyYjI0YzRmLi4x
ZTM4NmVkMmQxMjExZTc1YTg1MDM2Mzg0NWNjZTQ2YWU4NWY4YjY2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMTMtMDQtMDUgIEFpdm8gUGFhcyAgPGFpdm9wYWFzQGdtYWlsLmNvbT4KKworICAg
ICAgICBVcGRhdGluZyBtb3VzZSBjdXJzb3Igb24gc3R5bGUgY2hhbmdlcyB3aXRob3V0IGVtaXR0
aW5nIGZha2UgbW91c2Vtb3ZlIGV2ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDE4NTcKKyAgICAgICAgQ2hhbmdpbmcgQ1NTIGN1cnNvciBzaG91
bGQgd29yayBubyBtYXR0ZXIgaXMgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgb3Igbm90CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzM0MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZv
ciBjaGFuZ2luZyBjdXJzb3Igb24gbW91c2Vtb3ZlLCBtb3VzZWRvd24sIG1vdXNldXAgYW5kIG1v
dXNlbW92ZQorICAgICAgICB3aGlsZSBtb3VzZSBidXR0b24gYmVpbmcgaGVsZCBkb3duLiBBbHNv
IGFkZGVkIHRlc3QgdG8gdmVyaWZ5IHRoYXQgYSBtb3VzZW1vdmUKKyAgICAgICAgZXZlbnQgaXMg
bm90IGZpcmVkIGZvciBjaGFuZ2luZyBjdXJzb3Igd2hlbiBtb3VzZSBpcyBub3QgbW92aW5nLgor
CisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1u
by1tb3VzZW1vdmUuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnM6CisKIDIwMTMtMDQtMDUgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFuZ2UtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDhiN2FiZWE3MmE3MTAxNmRhMTQwMzQ5OTM1ZTYwMWE5M2MyOTQzZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1jaGFu
Z2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgdGhhdCBtb3VzZSBjdXJzb3Jz
IGFyZSBjaGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitCdWcgNTMzNDEKKworCitNb3VzZSBtb3ZlCitDdXJzb3IgSW5mbzog
dHlwZT1IYW5kIGhvdFNwb3Q9MCwwCisKK01vdXNlIGRvd24KK0N1cnNvciBJbmZvOiB0eXBlPVBy
b2dyZXNzIGhvdFNwb3Q9MCwwCisKK01vdXNlIGhvbGQgZG93biwgbW92ZQorQ3Vyc29yIEluZm86
IHR5cGU9SGFuZCBob3RTcG90PTAsMAorCitNb3VzZSB1cAorQ3Vyc29yIEluZm86IHR5cGU9SGVs
cCBob3RTcG90PTAsMAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vy
c29yLWNoYW5nZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNo
YW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NDc3MmE1YTNhNmIxZDU5NmViMjg4ZTk4NDEyNjRlMGE4
ZTYzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1j
dXJzb3ItY2hhbmdlLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzNDEiPkJ1ZyA1MzM0MTwvYT48L3A+Cis8ZGl2
IGlkPSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBvbk1vdXNlRG93bj0i
c3R5bGUuY3Vyc29yPSdwcm9ncmVzcyc7ZXZlbnQucHJldmVudERlZmF1bHQoKTsiIG9uTW91c2VN
b3ZlPSJzdHlsZS5jdXJzb3I9J3BvaW50ZXInOyIgb25Nb3VzZVVwPSJzdHlsZS5jdXJzb3I9J2hl
bHAnOyIgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyI+UGxheSB3aXRoIG1vdXNlIG9uIHRoaXMgZWxl
bWVudC4gQ3Vyc29ycyBjaGFuZ2Ugb24gZXZlbnRzIC0gbW91c2Vtb3ZlOiBwb2ludGVyKGhhbmQp
LCBtb3VzZWRvd246IHByb2dyZXNzLCBtb3VzZXVwOiBoZWxwLjwvZGl2PgorPC9kaXY+Cis8YnIv
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgordmFyIENVUlNPUl9VUERBVEVf
REVMQVkgPSA1MDsKKworZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBtb3VzZSBjdXJzb3JzIGFyZSBj
aGFuZ2VkIGNvcnJlY3RseSBvbiBtb3VzZSBldmVudHMuIik7CisKK2lmICghd2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJU
cmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gcnVuVGVzdChwcmVwYXJlLCBuZXh0
KSB7CisgICAgcHJlcGFyZSgpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAg
IGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5pbnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNv
ckluZm8oZG9jdW1lbnQpKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBuZXh0KCk7Cisg
ICAgfSwgQ1VSU09SX1VQREFURV9ERUxBWSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RzRG9uZSgpIHsK
KyAgICAvLyBUaGlzIHRleHQgaXMgcmVkdW5kYW50IHdpdGggdGhlIHRlc3Qgb3V0cHV0IC0gaGlk
ZSBpdAorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKKy8vIENhbid0IGRv
IGFueXRoaW5nIHVzZWZ1bCBoZXJlIHdpdGhvdXQgZXZlbnRTZW5kZXIKK2lmICh3aW5kb3cuZXZl
bnRTZW5kZXIpIHsKKyAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rh
cmdldCcpOworICAgIGV2ZW50U2VuZGVyLmRyYWdNb2RlID0gZmFsc2U7CisgICAgdmFyIHRlc3Rz
ID0gWworICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSBtb3Zl
Jyk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVm
dCArIDMsIHRhcmdldC5vZmZzZXRUb3AgKyAzKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBkZWJ1ZygnTW91c2UgZG93bicpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIu
bW91c2VEb3duKCk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWco
J01vdXNlIGhvbGQgZG93biwgbW92ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VN
b3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAxMywgdGFyZ2V0Lm9mZnNldFRvcCArIDMpOworICAg
ICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVnKCdNb3VzZSB1cCcpOworICAg
ICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgICB9CisgICAgXTsKKworICAg
IHZhciBpID0gMDsKKyAgICBmdW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAgICAgICAgaWYgKGkgPCB0
ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJ1blRlc3QodGVzdHNbaSsrXSwgbmV4dFRlc3Qp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdHNEb25lKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgbmV4dFRlc3QoKTsKK30KKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNv
ci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91
c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVkMDY0NWU5
Yjc2MTEzZjdjNDFlZGFkOWYyNmNmZmU5NGY3ZTY5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1uby1tb3VzZW1vdmUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQg
ZmlyZWQgd2hlbiBjaGFuZ2luZyBjdXJzb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitCdWcgODUzNDMKKworCitURVNUIENBU0U6IE1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Ig
c2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92ZSBldmVudAorQ3Vyc29yIEluZm86IHR5cGU9UG9pbnRl
ciBob3RTcG90PTAsMAorQ3Vyc29yIEluZm86IHR5cGU9SGVscCBob3RTcG90PTAsMAorCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLW5vLW1vdXNlbW92ZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFjYjZmYWRiMDExYjkzZjVhZDczNjljMjljMjYzODA1ZGZjZDQ4NmEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3Itbm8t
bW91c2Vtb3ZlLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8cD48YSBocmVmPSJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzNDMiPkJ1ZyA4NTM0MzwvYT48L3A+Cis8ZGl2IGlk
PSJ0ZXN0LWNvbnRhaW5lciI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0iY3Vyc29yOmRl
ZmF1bHQiPk1vdXNlIGlkbGUsIGNoYW5nZSBjdXJzb3Igc2hvdWxkIG5vdCBmaXJlIG1vdXNlbW92
ZSBldmVudDwvZGl2PgorPC9kaXY+Cis8YnIvPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0PgordmFyIENVUlNPUl9VUERBVEVfREVMQVkgPSA1MDsKKworZGVzY3JpcHRpb24oIlRl
c3QgdGhhdCB0aGVyZSBpcyBubyBtb3VzZW1vdmUgZXZlbnQgZmlyZWQgd2hlbiBjaGFuZ2luZyBj
dXJzb3IuIik7CisKK2lmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgdGVzdEZhaWxlZCgn
VGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7Cit9CisKK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30KKwor
Ly8gQ2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIGhlcmUgd2l0aG91dCBldmVudFNlbmRlcgoraWYg
KHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3RhcmdldCcpOworICAgIGRlYnVnKCdURVNUIENBU0U6ICcgKyBub2RlLnRleHRDb250
ZW50KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhub2RlLm9mZnNldExlZnQgKyAzLCBu
b2RlLm9mZnNldFRvcCArIDMpOworICAgIGRlYnVnKCdDdXJzb3IgSW5mbzogJyArIHdpbmRvdy5p
bnRlcm5hbHMuZ2V0Q3VycmVudEN1cnNvckluZm8oZG9jdW1lbnQpKTsKKyAgICBub2RlLmFkZEV2
ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVk
KCdNb3VzZW1vdmUgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGNoYW5naW5nIGN1cnNv
cicpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKKyAgICBub2RlLnN0eWxlLmN1
cnNvciA9ICdoZWxwJzsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1
ZygnQ3Vyc29yIEluZm86ICcgKyB3aW5kb3cuaW50ZXJuYWxzLmdldEN1cnJlbnRDdXJzb3JJbmZv
KGRvY3VtZW50KSk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICB9LCBDVVJTT1JfVVBEQVRFX0RF
TEFZKTsKKworICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgY2hhbmdlIHRvIHJlc29sdmUu
IEZha2UgbW91c2Vtb3ZlIGV2ZW50IHRoYXQgY2F1c2VkIGJ1ZywgaXMgdXNpbmcgYSB0aW1lcgor
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCd0ZXN0LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0sIDE1MCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IDEwYWIxOTY4MWQ4ODQ3MWJkNGQyZjM0NDJhNTcyODM2Y2JmMjM5MmQuLmE1MjZlYWIyMGFh
NjVhZjEyYmU1OTFmZjdlNTc1OGMzMWE4YjRlZTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNTAwLDMgKzE1MDAsNSBAQCB3ZWJraXQub3JnL2IvMTEz
MjI3IHRyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWwgWyBQYXNzIEZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzExMzIyNyB0cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5j
dGlvbi5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMTMyMjcgdHJhbnNpdGlv
bnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAKKyMg
TmV3IHRlc3QgZmFpbGluZywgbmVlZHMgaW52ZXN0aWdhdGlvbi4KK3dlYmtpdC5vcmcvYi8xMDM4
NTcgZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWNoYW5nZS5odG1sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>