<?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>82460</bug_id>
          
          <creation_ts>2012-03-28 06:31:23 -0700</creation_ts>
          <short_desc>[Chromium] Selectively retrieve text around a touched point</short_desc>
          <delta_ts>2012-05-10 09:37:38 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>78361</dependson>
          <blocked>82461</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Leandro Graciá Gil">leandrogracia</reporter>
          <assigned_to name="Leandro Graciá Gil">leandrogracia</assigned_to>
          <cc>abarth</cc>
    
    <cc>aelias</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>589908</commentid>
    <comment_count>0</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-28 06:31:23 -0700</bug_when>
    <thetext>Implement an embedding API for the new editing/SurroundingText class in WebCore, as well as the possibility of highlighting the retrieved text range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589946</commentid>
    <comment_count>1</comment_count>
      <attachid>134291</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-28 07:37:07 -0700</bug_when>
    <thetext>Created attachment 134291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589949</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-28 07:39:42 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590129</commentid>
    <comment_count>3</comment_count>
      <attachid>134291</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 10:50:17 -0700</bug_when>
    <thetext>Comment on attachment 134291
Patch

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

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:46
&gt; +    WebHitTestInfo();
&gt; +    WebHitTestInfo(const WebHitTestInfo&amp;);

Do we need to mark these functions as WEBKIT_EXPORT?  (I&apos;m not sure.)

&gt; Source/WebKit/chromium/public/WebView.h:437
&gt; +#if defined(ANDROID)

Why is this specific to Android?  Presumably the API makes sense on other platforms as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590141</commentid>
    <comment_count>4</comment_count>
      <attachid>134291</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 10:56:07 -0700</bug_when>
    <thetext>Comment on attachment 134291
Patch

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

This generally looks good.  I have a couple minor questions below.

&gt; Source/WebKit/chromium/src/WebSurroundingText.cpp:57
&gt; +    if (!node-&gt;inDocument() &amp;&amp; element &amp;&amp; element-&gt;inDocument())

How can a node&apos;s parent be inDocument() without the node itself being inDocument() ?

&gt; Source/WebKit/chromium/src/WebSurroundingText.cpp:59
&gt; +    m_private.reset(new SurroundingText(node-&gt;renderer()-&gt;positionForPoint(hitTestInfo.point()), maxLength));

Won&apos;t this crash if the node doesn&apos;t have a renderer?  Maybe that&apos;s impossible if the node is in a HitTestInfo (but then when do you need to check whether the node is inDocument)?  I wonder if you mean to be null-checking renderer() rather than checking inDocument().

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3470
&gt; +#if OS(ANDROID)

Again this shouldn&apos;t be Android-specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590143</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 10:56:59 -0700</bug_when>
    <thetext>(Also, I&apos;m going to ask fishd to double-check the review of the WebKit API aspects of this change.  I&apos;m still learning how to review those changes properly.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590269</commentid>
    <comment_count>6</comment_count>
      <attachid>134369</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-28 12:24:41 -0700</bug_when>
    <thetext>Created attachment 134369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590271</commentid>
    <comment_count>7</comment_count>
      <attachid>134291</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-28 12:24:59 -0700</bug_when>
    <thetext>Comment on attachment 134291
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:46
&gt;&gt; +    WebHitTestInfo(const WebHitTestInfo&amp;);
&gt; 
&gt; Do we need to mark these functions as WEBKIT_EXPORT?  (I&apos;m not sure.)

I&apos;ve never seen the constructors of WebKit embedders using WEBKIT_EXPORT, but I&apos;m not 100% sure either.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:437
&gt;&gt; +#if defined(ANDROID)
&gt; 
&gt; Why is this specific to Android?  Presumably the API makes sense on other platforms as well.

Fixed.

&gt;&gt; Source/WebKit/chromium/src/WebSurroundingText.cpp:57
&gt;&gt; +    if (!node-&gt;inDocument() &amp;&amp; element &amp;&amp; element-&gt;inDocument())
&gt; 
&gt; How can a node&apos;s parent be inDocument() without the node itself being inDocument() ?

This actually came from a code snippet in WebCore that said it was the correct way to do this. However, it seems it wasn&apos;t so correct since I can&apos;t find it anymore.

&gt;&gt; Source/WebKit/chromium/src/WebSurroundingText.cpp:59
&gt;&gt; +    m_private.reset(new SurroundingText(node-&gt;renderer()-&gt;positionForPoint(hitTestInfo.point()), maxLength));
&gt; 
&gt; Won&apos;t this crash if the node doesn&apos;t have a renderer?  Maybe that&apos;s impossible if the node is in a HitTestInfo (but then when do you need to check whether the node is inDocument)?  I wonder if you mean to be null-checking renderer() rather than checking inDocument().

I&apos;m following your suggestion. It makes more sense than the code snippet this was based on.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3470
&gt;&gt; +#if OS(ANDROID)
&gt; 
&gt; Again this shouldn&apos;t be Android-specific.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590386</commentid>
    <comment_count>8</comment_count>
      <attachid>134369</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-28 13:55:06 -0700</bug_when>
    <thetext>Comment on attachment 134369
Patch

Attachment 134369 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12159271</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590434</commentid>
    <comment_count>9</comment_count>
      <attachid>134400</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-28 14:23:18 -0700</bug_when>
    <thetext>Created attachment 134400
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590436</commentid>
    <comment_count>10</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-28 14:24:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=134400) [details]
&gt; Patch

Fixing the build issues in the bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592185</commentid>
    <comment_count>11</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-30 08:43:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Created an attachment (id=134400) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Fixing the build issues in the bot.

Any reviews on this when possible? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592224</commentid>
    <comment_count>12</comment_count>
      <attachid>134829</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-30 09:31:51 -0700</bug_when>
    <thetext>Created attachment 134829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592225</commentid>
    <comment_count>13</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-30 09:32:56 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=134829) [details]
&gt; Patch

Updated the exported names of some methods in WebSurroundingText to match the names in WebCore&apos;s SurroundingText after the review changes (hitOffsetInContent -&gt; positionOffsetInContent and minor variable name changes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593594</commentid>
    <comment_count>14</comment_count>
      <attachid>134829</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-04-02 10:52:27 -0700</bug_when>
    <thetext>Comment on attachment 134829
Patch

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

&gt; Source/WebKit/chromium/public/WebFrame.h:439
&gt; +    virtual void selectRange(const WebRange&amp;) = 0;

should we deprecate the former selectRange method in terms of this one?

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:45
&gt; +    WebHitTestInfo();

these will break the shared library build of chrome if not tagged with WEBKIT_EXPORT,
but we generally do not export constructors and destructors.  you should make these
in terms of assign and reset methods.  see WebNode.h

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:56
&gt; +    WEBKIT_EXPORT WebNode node() const;

what if more than one node got hit?

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:43
&gt; +    WebSurroundingText();

ditto

&gt; Source/WebKit/chromium/public/WebWidget.h:173
&gt; +    virtual WebHitTestInfo hitTestInfoForWindowPos(const WebPoint&amp;) { return WebHitTestInfo(); }

since hit testing returns dom nodes, i think this API belongs on WebView.
do you need it to live on WebWidget?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3470
&gt; +WebVector&lt;WebFloatQuad&gt; WebViewImpl::getTouchHighlightQuads(const WebRange&amp; webRange, WebColor&amp; outTapHighlightColor)

why is the parameter prefixed with &quot;out&quot;?  is this to convey the fact that it is
an output parameter?  normally, we don&apos;t use &quot;out&quot; and &quot;in&quot; prefixes like this.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3478
&gt; +    if (node &amp;&amp; node-&gt;renderer())

it seems like getting the tapHighlightColor is really a function of the firstNode
represented by the given range.  it really doesn&apos;t seem to have anything to do with
highlight quads (i.e., the second half of this function).  does it really make sense
for this function to aggregate both of these things?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3484
&gt; +    Frame* frame = page()-&gt;focusController()-&gt;focusedOrMainFrame();

how do you know that the given range corresponds to this frame?  shouldn&apos;t
you verify that?  should you perhaps get the frame from the range?

Range has a document(), which has a frame().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594557</commentid>
    <comment_count>15</comment_count>
      <attachid>135343</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-03 09:33:08 -0700</bug_when>
    <thetext>Created attachment 135343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594559</commentid>
    <comment_count>16</comment_count>
      <attachid>134829</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-03 09:34:00 -0700</bug_when>
    <thetext>Comment on attachment 134829
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebFrame.h:439
&gt;&gt; +    virtual void selectRange(const WebRange&amp;) = 0;
&gt; 
&gt; should we deprecate the former selectRange method in terms of this one?

I don&apos;t think so. I see other code making use of the former not related to the one that will use this API. For example, RenderViewImpl::OnSelectRange.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:45
&gt;&gt; +    WebHitTestInfo();
&gt; 
&gt; these will break the shared library build of chrome if not tagged with WEBKIT_EXPORT,
&gt; but we generally do not export constructors and destructors.  you should make these
&gt; in terms of assign and reset methods.  see WebNode.h

Making these in terms of init, assign and reset methods following the example of other embedders using WebPrivateOwnPtr.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:56
&gt;&gt; +    WEBKIT_EXPORT WebNode node() const;
&gt; 
&gt; what if more than one node got hit?

In this case we&apos;re interested to expose only the point-based hit result, not the rect-based one. Therefore the result is the inner node of the HitTestResult instead of a set of nodes. I&apos;m renaming the property to innerNode() make this clearer.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:43
&gt;&gt; +    WebSurroundingText();
&gt; 
&gt; ditto

Done.

&gt;&gt; Source/WebKit/chromium/public/WebWidget.h:173
&gt;&gt; +    virtual WebHitTestInfo hitTestInfoForWindowPos(const WebPoint&amp;) { return WebHitTestInfo(); }
&gt; 
&gt; since hit testing returns dom nodes, i think this API belongs on WebView.
&gt; do you need it to live on WebWidget?

Thanks for spotting this. This actually belongs to WebView and it seems I was missing the changes to WebViewImpl.h/cpp in this patch. Fixed.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3470
&gt;&gt; +WebVector&lt;WebFloatQuad&gt; WebViewImpl::getTouchHighlightQuads(const WebRange&amp; webRange, WebColor&amp; outTapHighlightColor)
&gt; 
&gt; why is the parameter prefixed with &quot;out&quot;?  is this to convey the fact that it is
&gt; an output parameter?  normally, we don&apos;t use &quot;out&quot; and &quot;in&quot; prefixes like this.

Fixed.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3478
&gt;&gt; +    if (node &amp;&amp; node-&gt;renderer())
&gt; 
&gt; it seems like getting the tapHighlightColor is really a function of the firstNode
&gt; represented by the given range.  it really doesn&apos;t seem to have anything to do with
&gt; highlight quads (i.e., the second half of this function).  does it really make sense
&gt; for this function to aggregate both of these things?

I&apos;m breaking down this method in two: one for getting the tap highlight color for a given node, and another to get the list of quads covering a text range.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3484
&gt;&gt; +    Frame* frame = page()-&gt;focusController()-&gt;focusedOrMainFrame();
&gt; 
&gt; how do you know that the given range corresponds to this frame?  shouldn&apos;t
&gt; you verify that?  should you perhaps get the frame from the range?
&gt; 
&gt; Range has a document(), which has a frame().

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595101</commentid>
    <comment_count>17</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-04-03 18:24:26 -0700</bug_when>
    <thetext>Drive-by comment: are you sure it&apos;s necessary to have WebSurroundingText and WebHitTestInfo classes at all?  How about just creating a WebViewImpl function that takes a point to hit test and returns surrounding text as a WebString?  Then you could examine this string on the Chrome side with all your detectors, without needing to manipulate WebKit objects there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595323</commentid>
    <comment_count>18</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-04 02:06:28 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Drive-by comment: are you sure it&apos;s necessary to have WebSurroundingText and WebHitTestInfo classes at all?  How about just creating a WebViewImpl function that takes a point to hit test and returns surrounding text as a WebString?  Then you could examine this string on the Chrome side with all your detectors, without needing to manipulate WebKit objects there.

I don&apos;t think that would be enough. The reason is that we don&apos;t need only the string containing the surrounding text, but also to be able to find where in the string we tapped and to get a proper range based on a substring of it. These last features (especially the last one) are the reason of why we need WebSurroundingText.

WebHitTestInfo on the other hand is required in order to provide other kind of checks based on, for example, the node being hit. We might want to perform some operations only if we don&apos;t have click listeners among the tapped node&apos;s ancestors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595331</commentid>
    <comment_count>19</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-04-04 02:22:13 -0700</bug_when>
    <thetext>I see.  Makes sense, thanks for the explanation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595557</commentid>
    <comment_count>20</comment_count>
      <attachid>135597</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-04 08:27:48 -0700</bug_when>
    <thetext>Created attachment 135597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595560</commentid>
    <comment_count>21</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-04 08:29:54 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=135597) [details]
&gt; Patch

Protected WebSurroundingText against a null visible position during construction. Also renamed WebHitTestInfo::point to localPoint in order to match WebCore naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603277</commentid>
    <comment_count>22</comment_count>
      <attachid>135597</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-04-16 10:44:59 -0700</bug_when>
    <thetext>Comment on attachment 135597
Patch

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

&gt; Source/WebKit/chromium/public/WebFrame.h:440
&gt;  

nit: please preserve two blank lines before section comment

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:29
&gt; +#include &quot;WebNode.h&quot;

nit: you can just forward declare WebNode, WebPoint and WebURL.  no need to #include here.

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:43
&gt; +class WebHitTestInfo {

is WebHitTestInfo the best name for this?  or perhaps it should be named
WebHitTestResult?  this might be a better name given that it is the return
value from a function named hitTest*, right?

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:45
&gt; +    WebHitTestInfo() { init(); }

why do you need to initialize in the constructor?  reset() makes
the object null (maybe you should have an isNull function?), so
it seems like the default constructor could also let the object
start out being null.  See WebHistoryItem for example.

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:59
&gt; +    WEBKIT_EXPORT WebNode innerNode() const;

what does inner node mean?  is there an outer node?  given only this
interface, innerNode seems like a peculiar name.  the comment doesn&apos;t
help at all.

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:61
&gt; +    // Point coordinates of the hit.

what coordinate system does this use?  is it document coordinates or
window (viewport) coordinates?

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:64
&gt; +    // True iff the hit was on an editable field or node.

nit: we generally avoid &quot;iff&quot;

what if the hit test was for an INPUT element?  would this be false?
is that why you are calling it &quot;isContentEditable&quot; instead of &quot;isEditable&quot;?

&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:74
&gt; +    WEBKIT_EXPORT void init();

nit: &quot;init&quot; -&gt; &quot;initialize&quot;

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:43
&gt; +    WebSurroundingText() { init(); }

why do you need to make the object non-null in the default constructor?
provide an isNull method since reset() can make the object null?

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:50
&gt; +    WEBKIT_EXPORT WebSurroundingText(const WebHitTestInfo&amp;, size_t maxLength);

nit: normally constructors are not exported from the webkit API:
http://trac.webkit.org/wiki/ChromiumWebKitAPI#Methods

there should instead be methods to initialize or assign values to
a WebSurroundingText object.

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:52
&gt; +    // Creates a new text content walker centered in the selected offset of the given text node.

why does the comment say &quot;text content walker&quot; instead of &quot;surrounding text&quot;?  it seems like
this function is the constructor for WebSurroundingText instead of WebTextContentWalker.
was that perhaps the old name of this class in an earlier revision of this patch?

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:56
&gt; +    // Text content retrieved by the walker.

nit: &quot;walker&quot;?

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:57
&gt; +    WEBKIT_EXPORT WebString content() const;

nit: perhaps this method should be named textContent.

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:59
&gt; +    // Position of the initial text node offset in the content string.

these two functions are a bit awkwardly named and confusing to understand.

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:63
&gt; +    WEBKIT_EXPORT WebRange rangeFromContentOffsets(size_t startOffsetInContent, size_t endOffsetInContent);

how is this different from WebRange::fromDocumentRange?

&gt; Source/WebKit/chromium/public/WebSurroundingText.h:66
&gt; +    WEBKIT_EXPORT void init();

nit: &quot;init&quot; -&gt; &quot;initialize&quot;

&gt; Source/WebKit/chromium/public/WebView.h:443
&gt; +    virtual WebHitTestInfo hitTestInfoForWindowPos(const WebPoint&amp;) = 0;

It seems like this function could just be named hitTest.  It is normal for
coordinates passed to a WebView or WebWidget to be in viewport space, which
is what &quot;ForWindowPos&quot; refers to.  You shouldn&apos;t need to repeat that here.
Plus, there is no companion function to hit test in document space.

&gt; Source/WebKit/chromium/public/WebView.h:449
&gt; +    virtual WebVector&lt;WebFloatQuad&gt; getTextQuadsForRange(const WebRange&amp;) = 0;

Why are you using WebFloatQuad here?  What are these coordinates?  Why not
use a WebRect or a WebFloatRect?

It is very unclear what the result is that this function computes.  Does it
describe a bounding region for the DOM range?

&gt; Source/WebKit/chromium/src/WebSurroundingText.cpp:47
&gt; +    VisiblePosition visiblePosition(node-&gt;renderer()-&gt;positionForPoint(hitTestInfo.localPoint()));

it seems like the only information that you really need from the hit test data structure
is a node and a point.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3514
&gt; +    WebColor tapHighlightColor = RenderStyle::initialTapHighlightColor().rgb();

this function does not seem to be dependent on the WebView at all.
it seems like it could either be a WebNode function or it should
live on some other interface.  probably some other interface since
WebNode is just supposed to be a reflection of a DOM node.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3516
&gt; +      return tapHighlightColor;

nit: indentation

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3536
&gt; +    range-&gt;textQuads(quads);

hmm... so WebCore makes this a function of Range.  we could similarly make it
a function of WebRange.  this function doesn&apos;t really depend on |this| at all!
you infer the Frame and the FrameView from the given Range!!

one thing that is perhaps awkward is that WebRange is meant to be a reflection
of a DOM range.  same issue that comes up with getNodeTapHighlightColor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604216</commentid>
    <comment_count>23</comment_count>
      <attachid>135597</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-17 12:04:17 -0700</bug_when>
    <thetext>Comment on attachment 135597
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebFrame.h:440
&gt;&gt;  
&gt; 
&gt; nit: please preserve two blank lines before section comment

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:29
&gt;&gt; +#include &quot;WebNode.h&quot;
&gt; 
&gt; nit: you can just forward declare WebNode, WebPoint and WebURL.  no need to #include here.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:43
&gt;&gt; +class WebHitTestInfo {
&gt; 
&gt; is WebHitTestInfo the best name for this?  or perhaps it should be named
&gt; WebHitTestResult?  this might be a better name given that it is the return
&gt; value from a function named hitTest*, right?

Agreed. Changing it.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:45
&gt;&gt; +    WebHitTestInfo() { init(); }
&gt; 
&gt; why do you need to initialize in the constructor?  reset() makes
&gt; the object null (maybe you should have an isNull function?), so
&gt; it seems like the default constructor could also let the object
&gt; start out being null.  See WebHistoryItem for example.

Fixed as suggested.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:59
&gt;&gt; +    WEBKIT_EXPORT WebNode innerNode() const;
&gt; 
&gt; what does inner node mean?  is there an outer node?  given only this
&gt; interface, innerNode seems like a peculiar name.  the comment doesn&apos;t
&gt; help at all.

Renaming to node and clarifying a bit the comment.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:61
&gt;&gt; +    // Point coordinates of the hit.
&gt; 
&gt; what coordinate system does this use?  is it document coordinates or
&gt; window (viewport) coordinates?

These are coordinates relative to the node.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:64
&gt;&gt; +    // True iff the hit was on an editable field or node.
&gt; 
&gt; nit: we generally avoid &quot;iff&quot;
&gt; 
&gt; what if the hit test was for an INPUT element?  would this be false?
&gt; is that why you are calling it &quot;isContentEditable&quot; instead of &quot;isEditable&quot;?

After double-checking, it looks like we can get rid of this and a few other entries in this file.

&gt;&gt; Source/WebKit/chromium/public/WebHitTestInfo.h:74
&gt;&gt; +    WEBKIT_EXPORT void init();
&gt; 
&gt; nit: &quot;init&quot; -&gt; &quot;initialize&quot;

Done.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:43
&gt;&gt; +    WebSurroundingText() { init(); }
&gt; 
&gt; why do you need to make the object non-null in the default constructor?
&gt; provide an isNull method since reset() can make the object null?

Fixed as suggested.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:50
&gt;&gt; +    WEBKIT_EXPORT WebSurroundingText(const WebHitTestInfo&amp;, size_t maxLength);
&gt; 
&gt; nit: normally constructors are not exported from the webkit API:
&gt; http://trac.webkit.org/wiki/ChromiumWebKitAPI#Methods
&gt; 
&gt; there should instead be methods to initialize or assign values to
&gt; a WebSurroundingText object.

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:52
&gt;&gt; +    // Creates a new text content walker centered in the selected offset of the given text node.
&gt; 
&gt; why does the comment say &quot;text content walker&quot; instead of &quot;surrounding text&quot;?  it seems like
&gt; this function is the constructor for WebSurroundingText instead of WebTextContentWalker.
&gt; was that perhaps the old name of this class in an earlier revision of this patch?

Sorry, this &quot;text content walker&quot; was the old name of the SurroundingText class in WebCore before it got reviewed and landed. Updating the comments.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:56
&gt;&gt; +    // Text content retrieved by the walker.
&gt; 
&gt; nit: &quot;walker&quot;?

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:57
&gt;&gt; +    WEBKIT_EXPORT WebString content() const;
&gt; 
&gt; nit: perhaps this method should be named textContent.

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:59
&gt;&gt; +    // Position of the initial text node offset in the content string.
&gt; 
&gt; these two functions are a bit awkwardly named and confusing to understand.

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:63
&gt;&gt; +    WEBKIT_EXPORT WebRange rangeFromContentOffsets(size_t startOffsetInContent, size_t endOffsetInContent);
&gt; 
&gt; how is this different from WebRange::fromDocumentRange?

This is not related to the current selection, and the range it returns is purely based on a substring of the returned text content.

&gt;&gt; Source/WebKit/chromium/public/WebSurroundingText.h:66
&gt;&gt; +    WEBKIT_EXPORT void init();
&gt; 
&gt; nit: &quot;init&quot; -&gt; &quot;initialize&quot;

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:443
&gt;&gt; +    virtual WebHitTestInfo hitTestInfoForWindowPos(const WebPoint&amp;) = 0;
&gt; 
&gt; It seems like this function could just be named hitTest.  It is normal for
&gt; coordinates passed to a WebView or WebWidget to be in viewport space, which
&gt; is what &quot;ForWindowPos&quot; refers to.  You shouldn&apos;t need to repeat that here.
&gt; Plus, there is no companion function to hit test in document space.

This method is being removed as further code (in a later patch) is moving to WebViewImpl.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:449
&gt;&gt; +    virtual WebVector&lt;WebFloatQuad&gt; getTextQuadsForRange(const WebRange&amp;) = 0;
&gt; 
&gt; Why are you using WebFloatQuad here?  What are these coordinates?  Why not
&gt; use a WebRect or a WebFloatRect?
&gt; 
&gt; It is very unclear what the result is that this function computes.  Does it
&gt; describe a bounding region for the DOM range?

WebFloatQuad it&apos;s a wrapper around the FloatQuad type that the DOM range. Unlike rects, FloatQuads provide a transform-friendly result. Check Range::textQuads for details.

&gt;&gt; Source/WebKit/chromium/src/WebSurroundingText.cpp:47
&gt;&gt; +    VisiblePosition visiblePosition(node-&gt;renderer()-&gt;positionForPoint(hitTestInfo.localPoint()));
&gt; 
&gt; it seems like the only information that you really need from the hit test data structure
&gt; is a node and a point.

Yes, I&apos;m cleaning the structure up.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3514
&gt;&gt; +    WebColor tapHighlightColor = RenderStyle::initialTapHighlightColor().rgb();
&gt; 
&gt; this function does not seem to be dependent on the WebView at all.
&gt; it seems like it could either be a WebNode function or it should
&gt; live on some other interface.  probably some other interface since
&gt; WebNode is just supposed to be a reflection of a DOM node.

I&apos;m temporarily removing this method. It will be added later in a separate patch introducing the rest of the content detection functionality. Following your advice it won&apos;t be a member of WebViewImpl, but moving it to WebNode doesn&apos;t sound good either. Perhaps a static method in WebViewImpl.cpp?

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3516
&gt;&gt; +      return tapHighlightColor;
&gt; 
&gt; nit: indentation

Fixed.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3536
&gt;&gt; +    range-&gt;textQuads(quads);
&gt; 
&gt; hmm... so WebCore makes this a function of Range.  we could similarly make it
&gt; a function of WebRange.  this function doesn&apos;t really depend on |this| at all!
&gt; you infer the Frame and the FrameView from the given Range!!
&gt; 
&gt; one thing that is perhaps awkward is that WebRange is meant to be a reflection
&gt; of a DOM range.  same issue that comes up with getNodeTapHighlightColor.

Agreed, it makes more sense to move this to WebRange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604218</commentid>
    <comment_count>24</comment_count>
      <attachid>137574</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-17 12:04:49 -0700</bug_when>
    <thetext>Created attachment 137574
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611653</commentid>
    <comment_count>25</comment_count>
      <attachid>137574</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-04-27 10:38:11 -0700</bug_when>
    <thetext>Comment on attachment 137574
Patch

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

&gt; Source/WebKit/chromium/src/WebRange.cpp:124
&gt; +

nit: delete extra new line

&gt; Source/WebKit/chromium/src/WebSurroundingText.cpp:43
&gt; +void WebSurroundingText::initialize(const WebHitTestResult&amp; hitTestInfo, size_t maxLength)

it could also make sense for these to be static create functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611750</commentid>
    <comment_count>26</comment_count>
      <attachid>137574</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-27 11:52:19 -0700</bug_when>
    <thetext>Comment on attachment 137574
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebRange.cpp:124
&gt;&gt; +
&gt; 
&gt; nit: delete extra new line

Fixing directly in the commit.

&gt;&gt; Source/WebKit/chromium/src/WebSurroundingText.cpp:43
&gt;&gt; +void WebSurroundingText::initialize(const WebHitTestResult&amp; hitTestInfo, size_t maxLength)
&gt; 
&gt; it could also make sense for these to be static create functions.

After checking other similar files in chromium/src it looks like it&apos;s more usual and appropriate to use initialize for cases like this. Static create methods are normally used when there is a constructor to build the WebKit embedder object from a reference-counted WebCore object, so that we could create embedder objects as we please for a WebCore object. In this case the embedder creates and owns the WebCore object, making not much sense to have such constructor. So, I&apos;ll leave it as initialize and proceed with landing. If you have any objections please let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611757</commentid>
    <comment_count>27</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-27 11:55:48 -0700</bug_when>
    <thetext>Committed r115463: &lt;http://trac.webkit.org/changeset/115463&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611774</commentid>
    <comment_count>28</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-04-27 12:23:10 -0700</bug_when>
    <thetext>Reverted r115463 for reason:

Broke Mac build.

Committed r115467: &lt;http://trac.webkit.org/changeset/115467&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611787</commentid>
    <comment_count>29</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-04-27 12:43:36 -0700</bug_when>
    <thetext>Committed r115472: &lt;http://trac.webkit.org/changeset/115472&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620635</commentid>
    <comment_count>30</comment_count>
      <attachid>137574</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2012-05-10 09:34:50 -0700</bug_when>
    <thetext>Comment on attachment 137574
Patch

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

&gt; Source/WebKit/chromium/public/WebHitTestResult.h:38
&gt; +class WebPoint;

I think this should be &apos;struct WebPoint&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620639</commentid>
    <comment_count>31</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-05-10 09:37:38 -0700</bug_when>
    <thetext>That&apos;s exactly what was fixed when landing this for the second time. The mac bot (apparently clang) detected that problem and a similar one. Both are fixed in the landed code.

(In reply to comment #30)
&gt; (From update of attachment 137574 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=137574&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebHitTestResult.h:38
&gt; &gt; +class WebPoint;
&gt; 
&gt; I think this should be &apos;struct WebPoint&apos;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134291</attachid>
            <date>2012-03-28 07:37:07 -0700</date>
            <delta_ts>2012-03-28 12:24:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82460-20120328153706.patch</filename>
            <type>text/plain</type>
            <size>23427</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDVmMGFjYmM5NGE1Yjg0MDkwYmJkODI3N2U4MGMyNjY1YThiNmUxMDguLmRjOTgzZTZmYjkzNjEy
OWZjNzQzZWMxMGMxNzc0NzdkMjQ3OGNiYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTItMDMtMjggIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9n
cmFjaWFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVjdGl2ZWx5IHJldHJpZXZlIHRleHQg
YXJvdW5kIGEgdG91Y2hlZCBwb2ludC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBhbiBlbWJlZGRpbmcgQVBJIHRvIFdlYkNvcmUncyBT
dXJyb3VuZGluZ1RleHQsIGFkZGluZyBhbHNvCisgICAgICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBz
ZWxlY3QgYW5kIGhpZ2hsaWdodCB0aGUgcmV0cmlldmVkIHRleHQgcmFuZ2UuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAoV2Vi
RnJhbWUpOgorICAgICAgICAqIHB1YmxpYy9XZWJIaXRUZXN0SW5mby5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkhpdFRlc3RJbmZv
KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3Vycm91bmRpbmdUZXh0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3Vycm91bmRpbmdU
ZXh0KToKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYlZpZXcpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAg
KFdlYldpZGdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldDo6aGl0VGVzdEluZm9Gb3JX
aW5kb3dQb3MpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAoV2ViRnJhbWVJbXBsKToKKyAgICAg
ICAgKiBzcmMvV2ViSGl0VGVzdEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpXZWJIaXRUZXN0SW5mbyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpsaW5rVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SGl0VGVzdEluZm86On5XZWJIaXRUZXN0SW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjppbWFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpub2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86OnBvaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSGl0VGVzdEluZm86OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSGl0VGVzdEluZm86Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjpvcGVyYXRvciBIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKiBzcmMvV2ViU3Vycm91
bmRpbmdUZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdXJyb3VuZGluZ1RleHQ6OldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6fldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6Y29udGVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN1cnJvdW5kaW5nVGV4dDo6aGl0T2Zmc2V0SW5Db250ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3Vycm91bmRpbmdUZXh0OjpyYW5nZUZyb21Db250ZW50T2Zmc2V0cyk6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKToKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKwogMjAxMi0wMy0yNyAgSmFtZXMg
Um9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVHJh
bnNmZXIgd2hlZWwgZmxpbmcgdmlhIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBiNGRiM2U0YWI1MjM4Njc0ZjBmY2IxZDdjNTll
ZGZjYWFjNzg0YTA2Li5mNzg2ZDU2MDllMTZmMjE3ODc4YTQ1MDcwZWVmZjA3YjhiMjI1YWM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xNzMsNiArMTczLDcgQEAKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJHbHlwaENhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
SGlzdG9yeUl0ZW0uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIaXRUZXN0SW5mby5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJQ0VPcHRpb25zLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmgnLApAQCAtMjYzLDYgKzI2NCw3IEBACiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdlTmFtZXNwYWNlLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViU3RvcmFnZVF1b3RhVHlwZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGlj
L1dlYlN1cnJvdW5kaW5nVGV4dC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0cmVh
bVRleHR1cmVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJUZXh0QWZmaW5p
dHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJUZXh0Q2FzZVNlbnNpdGl2aXR5Lmgn
LApAQCAtNTYxLDYgKzU2Myw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHbHlwaENhY2hl
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0uY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYkhpdFRlc3RJbmZvLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQ
Qm9keS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSFRUUExvYWRJbmZvLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcCcsCkBAIC02
NzAsNiArNjczLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1w
bC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1w
bC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViVGhyZWFkU2FmZURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXggMGQ1NDA2ZDUy
MDY4MmM5NTAxNTQ2YjQwODI1MzI4NTA5NTVmNmJlNS4uZTIyZjBkMTc1YjY0N2JkZDUxZmQzYzg1
Njg5NjA1OGQ4ZDRiNDk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZS5oCkBAIC00MzYsNiArNDM2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNlbGVj
dFJhbmdlKGNvbnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9pbnQmIGVuZCkgPSAwOwog
CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJikgPSAwOworCiAK
ICAgICAvLyBQcmludGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSGl0VGVzdEluZm8uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkhpdFRlc3RJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFlZWFlOTM1NjFiNzBiMjhmOWRhZmFhY2M4
MGE1M2EyOWRiMDkzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkhpdFRlc3RJbmZvLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkhpdFRl
c3RJbmZvX2gKKyNkZWZpbmUgV2ViSGl0VGVzdEluZm9faAorCisjaW5jbHVkZSAiV2ViTm9kZS5o
IgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
UHJpdmF0ZU93blB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworLy8gUHJvcGVydGllcyBvZiBhIGhpdCB0ZXN0IHJlc3VsdCwgaS5lLiBwcm9wZXJ0aWVz
IG9mIHRoZSBub2RlcyBhdCBhIGdpdmVuIHBvaW50CisvLyAodGhlIGhpdCBwb2ludCkgb24gdGhl
IHBhZ2UuIEJvdGggdXJscyBtYXkgYmUgcG9wdWxhdGVkIGF0IHRoZSBzYW1lIHRpbWUsIGZvcgor
Ly8gZXhhbXBsZSBpbiB0aGUgaW5zdGFuY2Ugb2YgYW4gPGltZz4gaW5zaWRlIGFuIDxhPi4KK2Ns
YXNzIFdlYkhpdFRlc3RJbmZvIHsKK3B1YmxpYzoKKyAgICBXZWJIaXRUZXN0SW5mbygpOworICAg
IFdlYkhpdFRlc3RJbmZvKGNvbnN0IFdlYkhpdFRlc3RJbmZvJik7CisgICAgfldlYkhpdFRlc3RJ
bmZvKCk7CisKKyAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBsaW5rIHJldHVybmVkIGJ5
IHRoZSBoaXQgdGVzdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlVSTCBsaW5rVVJMKCkgY29uc3Q7
CisKKyAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBpbWFnZSByZXR1cm5lZCBieSB0aGUg
aGl0IHRlc3QuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJVUkwgaW1hZ2VVUkwoKSBjb25zdDsKKwor
ICAgIC8vIFRoZSBub2RlIHRoYXQgZ290IGhpdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYk5vZGUg
bm9kZSgpIGNvbnN0OworCisgICAgLy8gUG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIGhpdC4KKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYlBvaW50IHBvaW50KCkgY29uc3Q7CisKKyAgICAvLyBUcnVlIGlm
ZiB0aGUgaGl0IHdhcyBvbiBhbiBlZGl0YWJsZSBmaWVsZCBvciBub2RlLgorICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisgICAgV2ViSGl0VGVzdEluZm8oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dCYpOworICAgIFdlYkhpdFRlc3RJbmZvJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdCYpOworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQoKSBjb25zdDsK
KyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdXJyb3Vu
ZGluZ1RleHQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN1cnJvdW5kaW5n
VGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlmODliMjVjYTdkZTZlNzcxNWQ3MTgxYmIwN2Y2N2NhN2JkNzA4
NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
dXJyb3VuZGluZ1RleHQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlN1cnJvdW5kaW5nVGV4dF9oCisjZGVmaW5lIFdlYlN1cnJvdW5kaW5nVGV4dF9oCisKKyNp
bmNsdWRlICJXZWJOb2RlLmgiCisjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJQcml2YXRlT3duUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFN1cnJvdW5kaW5nVGV4dDsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkhpdFRlc3RJbmZvOworCitjbGFzcyBXZWJTdXJy
b3VuZGluZ1RleHQgeworcHVibGljOgorICAgIFdlYlN1cnJvdW5kaW5nVGV4dCgpOworICAgIH5X
ZWJTdXJyb3VuZGluZ1RleHQoKTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgdGV4dCBjb250ZW50
IHdhbGtlciBjZW50ZXJlZCBpbiB0aGUgcG9zaXRpb24gZGVzY3JpYmVkIGJ5IHRoZSBoaXQgdGVz
dC4KKyAgICAvLyBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNvbnRlbnRzIHJldHJpZXZlZCBi
eSB0aGUgd2Fsa2VyIGlzIGRlZmluZWQgYnkgbWF4TGVuZ3RoLgorICAgIFdFQktJVF9FWFBPUlQg
V2ViU3Vycm91bmRpbmdUZXh0KGNvbnN0IFdlYkhpdFRlc3RJbmZvJiwgc2l6ZV90IG1heExlbmd0
aCk7CisKKyAgICAvLyBDcmVhdGVzIGEgbmV3IHRleHQgY29udGVudCB3YWxrZXIgY2VudGVyZWQg
aW4gdGhlIHNlbGVjdGVkIG9mZnNldCBvZiB0aGUgZ2l2ZW4gdGV4dCBub2RlLgorICAgIC8vIFRo
ZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29udGVudHMgcmV0cmlldmVkIGJ5IHRoZSB3YWxrZXIg
aXMgZGVmaW5lZCBieSBtYXhMZW5ndGguCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdXJyb3VuZGlu
Z1RleHQoV2ViTm9kZSB0ZXh0Tm9kZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG1heExlbmd0aCk7
CisKKyAgICAvLyBUZXh0IGNvbnRlbnQgcmV0cmlldmVkIGJ5IHRoZSB3YWxrZXIuCisgICAgV0VC
S0lUX0VYUE9SVCBXZWJTdHJpbmcgY29udGVudCgpIGNvbnN0OworCisgICAgLy8gUG9zaXRpb24g
b2YgdGhlIGluaXRpYWwgdGV4dCBub2RlIG9mZnNldCBpbiB0aGUgY29udGVudCBzdHJpbmcuCisg
ICAgV0VCS0lUX0VYUE9SVCBzaXplX3QgaGl0T2Zmc2V0SW5Db250ZW50KCkgY29uc3Q7CisKKyAg
ICAvLyBDb252ZXJ0IHN0YXJ0L2VuZCBwb3NpdGlvbnMgaW4gdGhlIGNvbnRlbnQgdGV4dCBzdHJp
bmcgaW50byBhIFdlYktpdCB0ZXh0IHJhbmdlLgorICAgIFdFQktJVF9FWFBPUlQgV2ViUmFuZ2Ug
cmFuZ2VGcm9tQ29udGVudE9mZnNldHMoc2l6ZV90IHN0YXJ0SW5Db250ZW50LCBzaXplX3QgZW5k
SW5Db250ZW50KTsKKworcHJvdGVjdGVkOgorICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6
U3Vycm91bmRpbmdUZXh0PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKaW5kZXggNGQ5
OTVlMGZmYjUzNjZlYjVmNTZkMTVhZTliN2Y2N2RjOTliNzUxNC4uOWUxYzJjMTNlNDkxNTcxMWQy
MTA1MjI4YmM4YTA0ZWI0YjY4MTczOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXcuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKIGNs
YXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBlcm1pc3Npb25D
bGllbnQ7CitjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xhc3MgV2ViU3Bl
bGxDaGVja0NsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsKQEAgLTQzMyw2ICs0MzQsMTMgQEAgcHVi
bGljOgogICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yKSBidXQgbXVzdCBiZSBjb21wbGV0ZWQgYnkg
dGhlIFdlYlZpZXcuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZmVyQWN0aXZlV2hlZWxGbGluZ0Fu
aW1hdGlvbihjb25zdCBXZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyYpID0gMDsKIAorI2lm
IGRlZmluZWQoQU5EUk9JRCkKKyAgICAvLyBUb3VjaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFJldHVybnMg
dGhlIGxpc3Qgb2YgcXVhZHMgcmVxdWlyZWQgdG8gaGlnaGxpZ2h0IGEgZ2l2ZW4gdGV4dCByYW5n
ZS4KKyAgICB2aXJ0dWFsIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IGdldFRvdWNoSGlnaGxpZ2h0
UXVhZHMoY29uc3QgV2ViUmFuZ2UmLCBXZWJDb2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29sb3IpID0g
MDsKKyNlbmRpZgorCiAgICAgLy8gVmlzaWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gU2V0cyB0aGUgdmlz
aWJpbGl0eSBvZiB0aGUgV2ViVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldpZGdldC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
V2lkZ2V0LmgKaW5kZXggY2JjZjc0NjQxYWM5MTJmMmYzYzgxMWQ5MjAyODIzZGZlZTk2MWRmMS4u
ZGU5N2M5YWI1YjhlYjhlMmJjYjFkNjE1ZjhmOWZhZjgzNjM0ZmQ5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUg
V2ViV2lkZ2V0X2gKIAogI2luY2x1ZGUgIldlYkNvbXBvc2l0aW9uVW5kZXJsaW5lLmgiCisjaW5j
bHVkZSAiV2ViSGl0VGVzdEluZm8uaCIKICNpbmNsdWRlICJXZWJUZXh0SW5wdXRUeXBlLmgiCiAj
aW5jbHVkZSAiV2ViVGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNhbnZh
cy5oIgpAQCAtMTY4LDYgKzE2OSw5IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSBjdXJy
ZW50IHRleHQgaW5wdXQgdHlwZSBvZiB0aGlzIFdlYldpZGdldC4KICAgICB2aXJ0dWFsIFdlYlRl
eHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgpIHsgcmV0dXJuIFdlYktpdDo6V2ViVGV4dElucHV0
VHlwZU5vbmU7IH0KIAorICAgIC8vIFJldHVybnMgdGhlIGhpdCB0ZXN0IHJlc3VsdCBmb3IgYSBn
aXZlbiBwb2ludC4KKyAgICB2aXJ0dWFsIFdlYkhpdFRlc3RJbmZvIGhpdFRlc3RJbmZvRm9yV2lu
ZG93UG9zKGNvbnN0IFdlYlBvaW50JikgeyByZXR1cm4gV2ViSGl0VGVzdEluZm8oKTsgfQorCiAg
ICAgLy8gUmV0dXJucyB0aGUgc3RhcnQgYW5kIGVuZCBib3VuZHMgb2YgdGhlIGN1cnJlbnQgc2Vs
ZWN0aW9uLgogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gcmFuZ2UgaXMgZW1wdHksIGl0IHJldHVy
bnMgdGhlIGNhcmV0IGJvdW5kcy4KICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0aW9uQm91bmRzKFdl
YlJlY3QmIHN0YXJ0LCBXZWJSZWN0JiBlbmQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCAzOTg5N2M4MjM2
MmE4MzJjYmUyZjFjOWMxMjUzOGRhYWEyYTc2OGIxLi5iNjA1ODdlZjE1MGQwZjY1YjNjNjc0NzBh
ODQ5YWVjMTAxYTA3MDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5jcHAKQEAgLTEzODAsNiArMTM4MCwxMyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6c2VsZWN0
UmFuZ2UoY29uc3QgV2ViUG9pbnQmIHN0YXJ0LCBjb25zdCBXZWJQb2ludCYgZW5kKQogICAgICAg
ICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogfQogCit2b2lkIFdlYkZyYW1lSW1wbDo6c2VsZWN0UmFuZ2UoY29uc3Qg
V2ViUmFuZ2UmIHdlYlJhbmdlKQoreworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzdGF0aWNf
Y2FzdDxQYXNzUmVmUHRyPFJhbmdlPiA+KHdlYlJhbmdlKTsKKyAgICBpZiAocmFuZ2UpCisgICAg
ICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBX
ZWJDb3JlOjpWUF9ERUZBVUxUX0FGRklOSVRZLCBmYWxzZSk7Cit9CisKIFZpc2libGVQb3NpdGlv
biBXZWJGcmFtZUltcGw6OnZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KGNvbnN0IFdlYlBv
aW50JiBwb2ludCkKIHsKICAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhp
dFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6TW92ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmgKaW5kZXggNzAwZjZlYTQwMzdlN2IyOGI5MGJkYzhmOTQ5OTRjOGFlZTlh
MzFmMi4uZjdkYjNlNDM3NzJhODVhM2MwNGFjMTAyMTY1NzQyYTVmZDlkNTRkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKQEAgLTE2NSw2ICsxNjUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgc2VsZWN0aW9uQXNNYXJrdXAoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0V29yZEFyb3VuZENhcmV0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9pbnQmIGVu
ZCk7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJik7CiAgICAg
dmlydHVhbCBpbnQgcHJpbnRCZWdpbihjb25zdCBXZWJTaXplJiBwYWdlU2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYk5vZGUmIGNvbnN0cmFpblRvTm9kZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBwcmludGVyRFBJLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSGl0VGVzdEluZm8uY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSGl0VGVzdEluZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3YzFmZDA4NWQxZmRh
YjFiN2ZiMzg1NTIzODkyZTY4ZjkyMmE5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJIaXRUZXN0SW5mby5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoK
KyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisq
CisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdEluZm8uaCIKKworI2luY2x1ZGUg
IkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiS1VSTC5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRl
ICJWaXNpYmxlUG9zaXRpb24uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJIaXRUZXN0SW5mbzo6V2ViSGl0VGVzdEluZm8oKQoreworfQor
CitXZWJIaXRUZXN0SW5mbzo6V2ViSGl0VGVzdEluZm8oY29uc3QgV2ViSGl0VGVzdEluZm8mIHRl
c3RJbmZvKQorICAgIDogbV9wcml2YXRlKG5ldyBIaXRUZXN0UmVzdWx0KHRlc3RJbmZvKSkKK3sK
K30KKworV2ViVVJMIFdlYkhpdFRlc3RJbmZvOjpsaW5rVVJMKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5hYnNvbHV0ZUxpbmtVUkwoKTsKK30KKworV2ViSGl0VGVzdEluZm86On5X
ZWJIaXRUZXN0SW5mbygpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KDApOworfQorCitXZWJVUkwg
V2ViSGl0VGVzdEluZm86OmltYWdlVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5hYnNvbHV0ZUltYWdlVVJMKCk7Cit9CisKK1dlYk5vZGUgV2ViSGl0VGVzdEluZm86Om5vZGUo
KSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+aW5uZXJOb2RlKCkpOwor
fQorCitXZWJQb2ludCBXZWJIaXRUZXN0SW5mbzo6cG9pbnQoKSBjb25zdAoreworICAgIHJldHVy
biBXZWJQb2ludChtX3ByaXZhdGUtPmxvY2FsUG9pbnQoKSk7Cit9CisKK2Jvb2wgV2ViSGl0VGVz
dEluZm86OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpOworfQorCitXZWJIaXRUZXN0SW5mbzo6V2ViSGl0VGVzdElu
Zm8oY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQoreworICAgIG1fcHJpdmF0ZS5yZXNldChu
ZXcgSGl0VGVzdFJlc3VsdChyZXN1bHQpKTsKK30KKworV2ViSGl0VGVzdEluZm8mIFdlYkhpdFRl
c3RJbmZvOjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQoreworICAgIG1f
cHJpdmF0ZS5yZXNldChuZXcgSGl0VGVzdFJlc3VsdChyZXN1bHQpKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK1dlYkhpdFRlc3RJbmZvOjpvcGVyYXRvciBIaXRUZXN0UmVzdWx0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gKm1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdXJyb3VuZGlu
Z1RleHQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3Vycm91bmRpbmdUZXh0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43ZTk0ZDkwODUzYzJiMmIzOGMyZTRkYThhZDliOWQ4ODBlYzE3MDMx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3Vycm91
bmRpbmdUZXh0LmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3Vycm91bmRpbmdUZXh0LmgiCisKKyNpbmNsdWRlICJF
bGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU3Vycm91bmRpbmdUZXh0LmgiCisjaW5jbHVk
ZSAiVGV4dC5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgIldlYkhp
dFRlc3RJbmZvLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViU3Vycm91bmRpbmdUZXh0OjpXZWJTdXJyb3VuZGluZ1RleHQoKQoreworfQor
CitXZWJTdXJyb3VuZGluZ1RleHQ6On5XZWJTdXJyb3VuZGluZ1RleHQoKQoreworICAgIG1fcHJp
dmF0ZS5yZXNldCgwKTsKK30KKworV2ViU3Vycm91bmRpbmdUZXh0OjpXZWJTdXJyb3VuZGluZ1Rl
eHQoY29uc3QgV2ViSGl0VGVzdEluZm8mIGhpdFRlc3RJbmZvLCBzaXplX3QgbWF4TGVuZ3RoKQor
eworICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0SW5mby5ub2RlKCkudW53cmFwPE5vZGU+KCk7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0g
bm9kZS0+cGFyZW50RWxlbWVudCgpOworICAgIGlmICghbm9kZS0+aW5Eb2N1bWVudCgpICYmIGVs
ZW1lbnQgJiYgZWxlbWVudC0+aW5Eb2N1bWVudCgpKQorICAgICAgICBub2RlID0gZWxlbWVudDsK
KyAgICBtX3ByaXZhdGUucmVzZXQobmV3IFN1cnJvdW5kaW5nVGV4dChub2RlLT5yZW5kZXJlcigp
LT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RJbmZvLnBvaW50KCkpLCBtYXhMZW5ndGgpKTsKK30K
KworV2ViU3Vycm91bmRpbmdUZXh0OjpXZWJTdXJyb3VuZGluZ1RleHQoV2ViTm9kZSB0ZXh0Tm9k
ZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG1heExlbmd0aCkKK3sKKyAgICBOb2RlKiBub2RlID0g
dGV4dE5vZGUudW53cmFwPE5vZGU+KCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1RleHRO
b2RlKCkgfHwgb2Zmc2V0ID49IG5vZGUtPm5vZGVWYWx1ZSgpLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3IFN1cnJvdW5kaW5nVGV4dChWaXNpYmxl
UG9zaXRpb24oUG9zaXRpb24odG9UZXh0KG5vZGUpLCBvZmZzZXQpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpLCBET1dOU1RSRUFNKSwgbWF4TGVuZ3RoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJT
dXJyb3VuZGluZ1RleHQ6OmNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmNvbnRlbnQoKTsKK30KKworc2l6ZV90IFdlYlN1cnJvdW5kaW5nVGV4dDo6aGl0T2Zmc2V0SW5D
b250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wb3NpdGlvbk9mZnNldElu
Q29udGVudCgpOworfQorCitXZWJSYW5nZSBXZWJTdXJyb3VuZGluZ1RleHQ6OnJhbmdlRnJvbUNv
bnRlbnRPZmZzZXRzKHNpemVfdCBzdGFydEluQ29udGVudCwgc2l6ZV90IGVuZEluQ29udGVudCkK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5yYW5nZUZyb21Db250ZW50T2Zmc2V0cyhzdGFydElu
Q29udGVudCwgZW5kSW5Db250ZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggYzBjNDM5NmVhNWI2
NDVhYjEwMzRjYzQ1YmU5NWY0YTExNzNkMzU0Zi4uOWM5NTFhY2U4ZTJkZjc1MTU4NGZjMmQxOTdl
ODU4ZDg5YjlhMTUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcApAQCAtMzQ2Nyw2ICszNDY3LDM0IEBAIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3
SW1wbDo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKQogICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0KCkuZ2V0KCkpOwogfQogCisjaWYgT1MoQU5EUk9JRCkKK1dlYlZlY3RvcjxX
ZWJGbG9hdFF1YWQ+IFdlYlZpZXdJbXBsOjpnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKGNvbnN0IFdl
YlJhbmdlJiB3ZWJSYW5nZSwgV2ViQ29sb3ImIG91dFRhcEhpZ2hsaWdodENvbG9yKQoreworICAg
IG91dFRhcEhpZ2hsaWdodENvbG9yID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUYXBIaWdobGlnaHRD
b2xvcigpLnJnYigpOworICAgIGlmICh3ZWJSYW5nZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+KCk7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
c3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxSYW5nZT4gPih3ZWJSYW5nZSk7CisgICAgTm9kZSogbm9k
ZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsKKyAgICBpZiAobm9kZSAmJiBub2RlLT5yZW5kZXJlcigp
KQorICAgICAgICBvdXRUYXBIaWdobGlnaHRDb2xvciA9IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCktPnRhcEhpZ2hsaWdodENvbG9yKCkucmdiKCk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBx
dWFkczsKKyAgICByYW5nZS0+dGV4dFF1YWRzKHF1YWRzKTsKKworICAgIEZyYW1lKiBmcmFtZSA9
IHBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkgeworICAgICAgICBxdWFk
c1tpXS5zZXRQMShmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2lu
dChxdWFkc1tpXS5wMSgpKSkpOworICAgICAgICBxdWFkc1tpXS5zZXRQMihmcmFtZS0+dmlldygp
LT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5wMigpKSkpOworICAg
ICAgICBxdWFkc1tpXS5zZXRQMyhmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5k
ZWRJbnRQb2ludChxdWFkc1tpXS5wMygpKSkpOworICAgICAgICBxdWFkc1tpXS5zZXRQNChmcmFt
ZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5wNCgp
KSkpOworICAgIH0KKworICAgIHJldHVybiBxdWFkczsKK30KKyNlbmRpZgorCisKIHZvaWQgV2Vi
Vmlld0ltcGw6OnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2li
aWxpdHlTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlz
SW5pdGlhbFN0YXRlKSB7CiAgICAgaWYgKCFwYWdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAppbmRleCAzMDgyZDRlMDEzNWFmZWRiYTI1MzA4OTRjZTYwMDNiZTQy
Yjg1MWFkLi5mYjA0YzkwMmU5YzU1MmNjOWEyOWJjMzA3MjhiNTg2OGFiNDVkZDc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTQ2OCw2ICs0NjgsMTEgQEAg
cHVibGljOgogCiAgICAgUGFzc093blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29t
cG9zaXRvckdyYXBoaWNzQ29udGV4dDNEKCk7CiAKKyNpZiBPUyhBTkRST0lEKQorICAgIC8vIFJl
dHVybnMgdGhlIGxpc3Qgb2YgcXVhZHMgcmVxdWlyZWQgdG8gaGlnaGxpZ2h0IGEgZ2l2ZW4gdGV4
dCByYW5nZS4KKyAgICB2aXJ0dWFsIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IGdldFRvdWNoSGln
aGxpZ2h0UXVhZHMoY29uc3QgV2ViUmFuZ2UmLCBXZWJDb2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29s
b3IpID0gMDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2liaWxpdHlTdGF0ZShX
ZWJQYWdlVmlzaWJpbGl0eVN0YXRlLCBib29sKTsKIAogICAgIFdlYkNvcmU6OlBvcHVwQ29udGFp
bmVyKiBzZWxlY3RQb3B1cCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0UG9wdXAuZ2V0KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134369</attachid>
            <date>2012-03-28 12:24:41 -0700</date>
            <delta_ts>2012-03-28 14:23:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82460-20120328202439.patch</filename>
            <type>text/plain</type>
            <size>23227</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDVmMGFjYmM5NGE1Yjg0MDkwYmJkODI3N2U4MGMyNjY1YThiNmUxMDguLmRjOTgzZTZmYjkzNjEy
OWZjNzQzZWMxMGMxNzc0NzdkMjQ3OGNiYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTItMDMtMjggIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9n
cmFjaWFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVjdGl2ZWx5IHJldHJpZXZlIHRleHQg
YXJvdW5kIGEgdG91Y2hlZCBwb2ludC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBhbiBlbWJlZGRpbmcgQVBJIHRvIFdlYkNvcmUncyBT
dXJyb3VuZGluZ1RleHQsIGFkZGluZyBhbHNvCisgICAgICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBz
ZWxlY3QgYW5kIGhpZ2hsaWdodCB0aGUgcmV0cmlldmVkIHRleHQgcmFuZ2UuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAoV2Vi
RnJhbWUpOgorICAgICAgICAqIHB1YmxpYy9XZWJIaXRUZXN0SW5mby5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkhpdFRlc3RJbmZv
KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3Vycm91bmRpbmdUZXh0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3Vycm91bmRpbmdU
ZXh0KToKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYlZpZXcpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAg
KFdlYldpZGdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldDo6aGl0VGVzdEluZm9Gb3JX
aW5kb3dQb3MpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAoV2ViRnJhbWVJbXBsKToKKyAgICAg
ICAgKiBzcmMvV2ViSGl0VGVzdEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpXZWJIaXRUZXN0SW5mbyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpsaW5rVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SGl0VGVzdEluZm86On5XZWJIaXRUZXN0SW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjppbWFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpub2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86OnBvaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSGl0VGVzdEluZm86OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSGl0VGVzdEluZm86Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjpvcGVyYXRvciBIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKiBzcmMvV2ViU3Vycm91
bmRpbmdUZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdXJyb3VuZGluZ1RleHQ6OldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6fldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6Y29udGVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN1cnJvdW5kaW5nVGV4dDo6aGl0T2Zmc2V0SW5Db250ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3Vycm91bmRpbmdUZXh0OjpyYW5nZUZyb21Db250ZW50T2Zmc2V0cyk6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKToKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKwogMjAxMi0wMy0yNyAgSmFtZXMg
Um9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVHJh
bnNmZXIgd2hlZWwgZmxpbmcgdmlhIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBiNGRiM2U0YWI1MjM4Njc0ZjBmY2IxZDdjNTll
ZGZjYWFjNzg0YTA2Li5mNzg2ZDU2MDllMTZmMjE3ODc4YTQ1MDcwZWVmZjA3YjhiMjI1YWM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xNzMsNiArMTczLDcgQEAKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJHbHlwaENhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
SGlzdG9yeUl0ZW0uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIaXRUZXN0SW5mby5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJQ0VPcHRpb25zLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmgnLApAQCAtMjYzLDYgKzI2NCw3IEBACiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdlTmFtZXNwYWNlLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViU3RvcmFnZVF1b3RhVHlwZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGlj
L1dlYlN1cnJvdW5kaW5nVGV4dC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0cmVh
bVRleHR1cmVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJUZXh0QWZmaW5p
dHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJUZXh0Q2FzZVNlbnNpdGl2aXR5Lmgn
LApAQCAtNTYxLDYgKzU2Myw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHbHlwaENhY2hl
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0uY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYkhpdFRlc3RJbmZvLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQ
Qm9keS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSFRUUExvYWRJbmZvLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcCcsCkBAIC02
NzAsNiArNjczLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1w
bC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1w
bC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViVGhyZWFkU2FmZURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXggMGQ1NDA2ZDUy
MDY4MmM5NTAxNTQ2YjQwODI1MzI4NTA5NTVmNmJlNS4uZTIyZjBkMTc1YjY0N2JkZDUxZmQzYzg1
Njg5NjA1OGQ4ZDRiNDk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZS5oCkBAIC00MzYsNiArNDM2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNlbGVj
dFJhbmdlKGNvbnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9pbnQmIGVuZCkgPSAwOwog
CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJikgPSAwOworCiAK
ICAgICAvLyBQcmludGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSGl0VGVzdEluZm8uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkhpdFRlc3RJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFlZWFlOTM1NjFiNzBiMjhmOWRhZmFhY2M4
MGE1M2EyOWRiMDkzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkhpdFRlc3RJbmZvLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkhpdFRl
c3RJbmZvX2gKKyNkZWZpbmUgV2ViSGl0VGVzdEluZm9faAorCisjaW5jbHVkZSAiV2ViTm9kZS5o
IgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
UHJpdmF0ZU93blB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworLy8gUHJvcGVydGllcyBvZiBhIGhpdCB0ZXN0IHJlc3VsdCwgaS5lLiBwcm9wZXJ0aWVz
IG9mIHRoZSBub2RlcyBhdCBhIGdpdmVuIHBvaW50CisvLyAodGhlIGhpdCBwb2ludCkgb24gdGhl
IHBhZ2UuIEJvdGggdXJscyBtYXkgYmUgcG9wdWxhdGVkIGF0IHRoZSBzYW1lIHRpbWUsIGZvcgor
Ly8gZXhhbXBsZSBpbiB0aGUgaW5zdGFuY2Ugb2YgYW4gPGltZz4gaW5zaWRlIGFuIDxhPi4KK2Ns
YXNzIFdlYkhpdFRlc3RJbmZvIHsKK3B1YmxpYzoKKyAgICBXZWJIaXRUZXN0SW5mbygpOworICAg
IFdlYkhpdFRlc3RJbmZvKGNvbnN0IFdlYkhpdFRlc3RJbmZvJik7CisgICAgfldlYkhpdFRlc3RJ
bmZvKCk7CisKKyAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBsaW5rIHJldHVybmVkIGJ5
IHRoZSBoaXQgdGVzdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlVSTCBsaW5rVVJMKCkgY29uc3Q7
CisKKyAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBpbWFnZSByZXR1cm5lZCBieSB0aGUg
aGl0IHRlc3QuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJVUkwgaW1hZ2VVUkwoKSBjb25zdDsKKwor
ICAgIC8vIFRoZSBub2RlIHRoYXQgZ290IGhpdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYk5vZGUg
bm9kZSgpIGNvbnN0OworCisgICAgLy8gUG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIGhpdC4KKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYlBvaW50IHBvaW50KCkgY29uc3Q7CisKKyAgICAvLyBUcnVlIGlm
ZiB0aGUgaGl0IHdhcyBvbiBhbiBlZGl0YWJsZSBmaWVsZCBvciBub2RlLgorICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisgICAgV2ViSGl0VGVzdEluZm8oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dCYpOworICAgIFdlYkhpdFRlc3RJbmZvJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdCYpOworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQoKSBjb25zdDsK
KyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdXJyb3Vu
ZGluZ1RleHQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN1cnJvdW5kaW5n
VGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlmODliMjVjYTdkZTZlNzcxNWQ3MTgxYmIwN2Y2N2NhN2JkNzA4
NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
dXJyb3VuZGluZ1RleHQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlN1cnJvdW5kaW5nVGV4dF9oCisjZGVmaW5lIFdlYlN1cnJvdW5kaW5nVGV4dF9oCisKKyNp
bmNsdWRlICJXZWJOb2RlLmgiCisjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJQcml2YXRlT3duUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFN1cnJvdW5kaW5nVGV4dDsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkhpdFRlc3RJbmZvOworCitjbGFzcyBXZWJTdXJy
b3VuZGluZ1RleHQgeworcHVibGljOgorICAgIFdlYlN1cnJvdW5kaW5nVGV4dCgpOworICAgIH5X
ZWJTdXJyb3VuZGluZ1RleHQoKTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgdGV4dCBjb250ZW50
IHdhbGtlciBjZW50ZXJlZCBpbiB0aGUgcG9zaXRpb24gZGVzY3JpYmVkIGJ5IHRoZSBoaXQgdGVz
dC4KKyAgICAvLyBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNvbnRlbnRzIHJldHJpZXZlZCBi
eSB0aGUgd2Fsa2VyIGlzIGRlZmluZWQgYnkgbWF4TGVuZ3RoLgorICAgIFdFQktJVF9FWFBPUlQg
V2ViU3Vycm91bmRpbmdUZXh0KGNvbnN0IFdlYkhpdFRlc3RJbmZvJiwgc2l6ZV90IG1heExlbmd0
aCk7CisKKyAgICAvLyBDcmVhdGVzIGEgbmV3IHRleHQgY29udGVudCB3YWxrZXIgY2VudGVyZWQg
aW4gdGhlIHNlbGVjdGVkIG9mZnNldCBvZiB0aGUgZ2l2ZW4gdGV4dCBub2RlLgorICAgIC8vIFRo
ZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29udGVudHMgcmV0cmlldmVkIGJ5IHRoZSB3YWxrZXIg
aXMgZGVmaW5lZCBieSBtYXhMZW5ndGguCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdXJyb3VuZGlu
Z1RleHQoV2ViTm9kZSB0ZXh0Tm9kZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG1heExlbmd0aCk7
CisKKyAgICAvLyBUZXh0IGNvbnRlbnQgcmV0cmlldmVkIGJ5IHRoZSB3YWxrZXIuCisgICAgV0VC
S0lUX0VYUE9SVCBXZWJTdHJpbmcgY29udGVudCgpIGNvbnN0OworCisgICAgLy8gUG9zaXRpb24g
b2YgdGhlIGluaXRpYWwgdGV4dCBub2RlIG9mZnNldCBpbiB0aGUgY29udGVudCBzdHJpbmcuCisg
ICAgV0VCS0lUX0VYUE9SVCBzaXplX3QgaGl0T2Zmc2V0SW5Db250ZW50KCkgY29uc3Q7CisKKyAg
ICAvLyBDb252ZXJ0IHN0YXJ0L2VuZCBwb3NpdGlvbnMgaW4gdGhlIGNvbnRlbnQgdGV4dCBzdHJp
bmcgaW50byBhIFdlYktpdCB0ZXh0IHJhbmdlLgorICAgIFdFQktJVF9FWFBPUlQgV2ViUmFuZ2Ug
cmFuZ2VGcm9tQ29udGVudE9mZnNldHMoc2l6ZV90IHN0YXJ0SW5Db250ZW50LCBzaXplX3QgZW5k
SW5Db250ZW50KTsKKworcHJvdGVjdGVkOgorICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6
U3Vycm91bmRpbmdUZXh0PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKaW5kZXggNGQ5
OTVlMGZmYjUzNjZlYjVmNTZkMTVhZTliN2Y2N2RjOTliNzUxNC4uOGNjZGE3NzFjYTQxMTY3OWYx
MjAxMzg5NDQxN2I4M2I2NTcwZDAxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXcuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKIGNs
YXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBlcm1pc3Npb25D
bGllbnQ7CitjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xhc3MgV2ViU3Bl
bGxDaGVja0NsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsKQEAgLTQzMyw2ICs0MzQsMTEgQEAgcHVi
bGljOgogICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yKSBidXQgbXVzdCBiZSBjb21wbGV0ZWQgYnkg
dGhlIFdlYlZpZXcuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZmVyQWN0aXZlV2hlZWxGbGluZ0Fu
aW1hdGlvbihjb25zdCBXZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyYpID0gMDsKIAorICAg
IC8vIFRvdWNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBxdWFkcyByZXF1
aXJlZCB0byBoaWdobGlnaHQgYSBnaXZlbiB0ZXh0IHJhbmdlLgorICAgIHZpcnR1YWwgV2ViVmVj
dG9yPFdlYkZsb2F0UXVhZD4gZ2V0VG91Y2hIaWdobGlnaHRRdWFkcyhjb25zdCBXZWJSYW5nZSYs
IFdlYkNvbG9yJiBvdXRUYXBIaWdobGlnaHRDb2xvcikgPSAwOworCiAgICAgLy8gVmlzaWJpbGl0
eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiAgICAgLy8gU2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgV2ViVmlldy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKaW5kZXggY2JjZjc0NjQxYWM5MTJm
MmYzYzgxMWQ5MjAyODIzZGZlZTk2MWRmMS4uZGU5N2M5YWI1YjhlYjhlMmJjYjFkNjE1ZjhmOWZh
ZjgzNjM0ZmQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
V2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgV2ViV2lkZ2V0X2gKIAogI2luY2x1ZGUgIldlYkNv
bXBvc2l0aW9uVW5kZXJsaW5lLmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdEluZm8uaCIKICNpbmNs
dWRlICJXZWJUZXh0SW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiV2ViVGV4dERpcmVjdGlvbi5oIgog
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkNhbnZhcy5oIgpAQCAtMTY4LDYgKzE2OSw5IEBAIHB1Ymxp
YzoKICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHRleHQgaW5wdXQgdHlwZSBvZiB0aGlzIFdl
YldpZGdldC4KICAgICB2aXJ0dWFsIFdlYlRleHRJbnB1dFR5cGUgdGV4dElucHV0VHlwZSgpIHsg
cmV0dXJuIFdlYktpdDo6V2ViVGV4dElucHV0VHlwZU5vbmU7IH0KIAorICAgIC8vIFJldHVybnMg
dGhlIGhpdCB0ZXN0IHJlc3VsdCBmb3IgYSBnaXZlbiBwb2ludC4KKyAgICB2aXJ0dWFsIFdlYkhp
dFRlc3RJbmZvIGhpdFRlc3RJbmZvRm9yV2luZG93UG9zKGNvbnN0IFdlYlBvaW50JikgeyByZXR1
cm4gV2ViSGl0VGVzdEluZm8oKTsgfQorCiAgICAgLy8gUmV0dXJucyB0aGUgc3RhcnQgYW5kIGVu
ZCBib3VuZHMgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgogICAgIC8vIElmIHRoZSBzZWxlY3Rp
b24gcmFuZ2UgaXMgZW1wdHksIGl0IHJldHVybnMgdGhlIGNhcmV0IGJvdW5kcy4KICAgICB2aXJ0
dWFsIGJvb2wgc2VsZWN0aW9uQm91bmRzKFdlYlJlY3QmIHN0YXJ0LCBXZWJSZWN0JiBlbmQpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmNwcAppbmRleCAzOTg5N2M4MjM2MmE4MzJjYmUyZjFjOWMxMjUzOGRhYWEyYTc2OGIx
Li5iNjA1ODdlZjE1MGQwZjY1YjNjNjc0NzBhODQ5YWVjMTAxYTA3MDE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTEzODAsNiArMTM4MCwxMyBA
QCB2b2lkIFdlYkZyYW1lSW1wbDo6c2VsZWN0UmFuZ2UoY29uc3QgV2ViUG9pbnQmIHN0YXJ0LCBj
b25zdCBXZWJQb2ludCYgZW5kKQogICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2Vs
ZWN0aW9uKHNlbGVjdGlvbiwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogfQogCit2b2lkIFdlYkZy
YW1lSW1wbDo6c2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmIHdlYlJhbmdlKQoreworICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBzdGF0aWNfY2FzdDxQYXNzUmVmUHRyPFJhbmdlPiA+KHdlYlJh
bmdlKTsKKyAgICBpZiAocmFuZ2UpCisgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRT
ZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBXZWJDb3JlOjpWUF9ERUZBVUxUX0FGRklOSVRZLCBm
YWxzZSk7Cit9CisKIFZpc2libGVQb3NpdGlvbiBXZWJGcmFtZUltcGw6OnZpc2libGVQb3NpdGlv
bkZvcldpbmRvd1BvaW50KGNvbnN0IFdlYlBvaW50JiBwb2ludCkKIHsKICAgICBIaXRUZXN0UmVx
dWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6TW92ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKaW5kZXggNzAwZjZlYTQw
MzdlN2IyOGI5MGJkYzhmOTQ5OTRjOGFlZTlhMzFmMi4uZjdkYjNlNDM3NzJhODVhM2MwNGFjMTAy
MTY1NzQyYTVmZDlkNTRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmgKQEAgLTE2NSw2ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJTdHJpbmcg
c2VsZWN0aW9uQXNNYXJrdXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0V29yZEFy
b3VuZENhcmV0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlBvaW50
JiBzdGFydCwgY29uc3QgV2ViUG9pbnQmIGVuZCk7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJh
bmdlKGNvbnN0IFdlYlJhbmdlJik7CiAgICAgdmlydHVhbCBpbnQgcHJpbnRCZWdpbihjb25zdCBX
ZWJTaXplJiBwYWdlU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYk5v
ZGUmIGNvbnN0cmFpblRvTm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlu
dGVyRFBJLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSGl0VGVz
dEluZm8uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSGl0VGVzdEluZm8uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmI3YzFmZDA4NWQxZmRhYjFiN2ZiMzg1NTIzODkyZTY4ZjkyMmE5ZDUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIaXRUZXN0SW5m
by5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyog
YXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
SGl0VGVzdEluZm8uaCIKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJIaXRUZXN0SW5m
bzo6V2ViSGl0VGVzdEluZm8oKQoreworfQorCitXZWJIaXRUZXN0SW5mbzo6V2ViSGl0VGVzdElu
Zm8oY29uc3QgV2ViSGl0VGVzdEluZm8mIHRlc3RJbmZvKQorICAgIDogbV9wcml2YXRlKG5ldyBI
aXRUZXN0UmVzdWx0KHRlc3RJbmZvKSkKK3sKK30KKworV2ViVVJMIFdlYkhpdFRlc3RJbmZvOjps
aW5rVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hYnNvbHV0ZUxpbmtVUkwo
KTsKK30KKworV2ViSGl0VGVzdEluZm86On5XZWJIaXRUZXN0SW5mbygpCit7CisgICAgbV9wcml2
YXRlLnJlc2V0KDApOworfQorCitXZWJVUkwgV2ViSGl0VGVzdEluZm86OmltYWdlVVJMKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hYnNvbHV0ZUltYWdlVVJMKCk7Cit9CisKK1dl
Yk5vZGUgV2ViSGl0VGVzdEluZm86Om5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2Rl
KG1fcHJpdmF0ZS0+aW5uZXJOb2RlKCkpOworfQorCitXZWJQb2ludCBXZWJIaXRUZXN0SW5mbzo6
cG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBXZWJQb2ludChtX3ByaXZhdGUtPmxvY2FsUG9p
bnQoKSk7Cit9CisKK2Jvb2wgV2ViSGl0VGVzdEluZm86OmlzQ29udGVudEVkaXRhYmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworfQorCitX
ZWJIaXRUZXN0SW5mbzo6V2ViSGl0VGVzdEluZm8oY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
KQoreworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgSGl0VGVzdFJlc3VsdChyZXN1bHQpKTsKK30K
KworV2ViSGl0VGVzdEluZm8mIFdlYkhpdFRlc3RJbmZvOjpvcGVyYXRvcj0oY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0KQoreworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgSGl0VGVzdFJlc3Vs
dChyZXN1bHQpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkhpdFRlc3RJbmZvOjpvcGVy
YXRvciBIaXRUZXN0UmVzdWx0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fcHJpdmF0ZS5nZXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU3Vycm91bmRpbmdUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjFiY2Y0MjhhZTE2
ODI0NWEwZmQ4ZjMyZjkxNWZkMGUyMTFlMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU3Vycm91bmRpbmdUZXh0LmNwcApAQCAtMCwwICsxLDgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3Vycm91
bmRpbmdUZXh0LmgiCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgor
I2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAi
U3Vycm91bmRpbmdUZXh0LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlZpc2libGVQ
b3NpdGlvbi5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RJbmZvLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViU3Vycm91bmRpbmdUZXh0OjpX
ZWJTdXJyb3VuZGluZ1RleHQoKQoreworfQorCitXZWJTdXJyb3VuZGluZ1RleHQ6On5XZWJTdXJy
b3VuZGluZ1RleHQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworV2ViU3Vycm91
bmRpbmdUZXh0OjpXZWJTdXJyb3VuZGluZ1RleHQoY29uc3QgV2ViSGl0VGVzdEluZm8mIGhpdFRl
c3RJbmZvLCBzaXplX3QgbWF4TGVuZ3RoKQoreworICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0SW5m
by5ub2RlKCkudW53cmFwPE5vZGU+KCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJl
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3IFN1cnJvdW5k
aW5nVGV4dChub2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RJbmZvLnBv
aW50KCkpLCBtYXhMZW5ndGgpKTsKK30KKworV2ViU3Vycm91bmRpbmdUZXh0OjpXZWJTdXJyb3Vu
ZGluZ1RleHQoV2ViTm9kZSB0ZXh0Tm9kZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG1heExlbmd0
aCkKK3sKKyAgICBOb2RlKiBub2RlID0gdGV4dE5vZGUudW53cmFwPE5vZGU+KCk7CisgICAgaWYg
KCFub2RlIHx8ICFub2RlLT5pc1RleHROb2RlKCkgfHwgb2Zmc2V0ID49IG5vZGUtPm5vZGVWYWx1
ZSgpLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3
IFN1cnJvdW5kaW5nVGV4dChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24odG9UZXh0KG5vZGUpLCBv
ZmZzZXQpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBET1dOU1RSRUFNKSwgbWF4TGVuZ3Ro
KSk7Cit9CisKK1dlYlN0cmluZyBXZWJTdXJyb3VuZGluZ1RleHQ6OmNvbnRlbnQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnQoKTsKK30KKworc2l6ZV90IFdlYlN1cnJv
dW5kaW5nVGV4dDo6aGl0T2Zmc2V0SW5Db250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5wb3NpdGlvbk9mZnNldEluQ29udGVudCgpOworfQorCitXZWJSYW5nZSBXZWJTdXJy
b3VuZGluZ1RleHQ6OnJhbmdlRnJvbUNvbnRlbnRPZmZzZXRzKHNpemVfdCBzdGFydEluQ29udGVu
dCwgc2l6ZV90IGVuZEluQ29udGVudCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5yYW5nZUZy
b21Db250ZW50T2Zmc2V0cyhzdGFydEluQ29udGVudCwgZW5kSW5Db250ZW50KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKaW5kZXggYzBjNDM5NmVhNWI2NDVhYjEwMzRjYzQ1YmU5NWY0YTExNzNkMzU0Zi4uOTll
MzZiYmY5MDQwZTQwOWVhMzIwNjM4MGU2MjliZGM3ZmM0MGZlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzQ2Nyw2ICszNDY3LDMxIEBAIFdlYkdy
YXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKQog
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0Nv
bnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCkuZ2V0KCkpOwogfQogCitXZWJW
ZWN0b3I8V2ViRmxvYXRRdWFkPiBXZWJWaWV3SW1wbDo6Z2V0VG91Y2hIaWdobGlnaHRRdWFkcyhj
b25zdCBXZWJSYW5nZSYgd2ViUmFuZ2UsIFdlYkNvbG9yJiBvdXRUYXBIaWdobGlnaHRDb2xvcikK
K3sKKyAgICBvdXRUYXBIaWdobGlnaHRDb2xvciA9IFJlbmRlclN0eWxlOjppbml0aWFsVGFwSGln
aGxpZ2h0Q29sb3IoKS5yZ2IoKTsKKyAgICBpZiAod2ViUmFuZ2UuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBXZWJWZWN0b3I8V2ViRmxvYXRRdWFkPigpOworCisgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8UmFuZ2U+ID4od2ViUmFuZ2UpOworICAgIE5v
ZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7CisgICAgaWYgKG5vZGUgJiYgbm9kZS0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgb3V0VGFwSGlnaGxpZ2h0Q29sb3IgPSBub2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT50YXBIaWdobGlnaHRDb2xvcigpLnJnYigpOworCisgICAgVmVjdG9yPEZsb2F0
UXVhZD4gcXVhZHM7CisgICAgcmFuZ2UtPnRleHRRdWFkcyhxdWFkcyk7CisKKyAgICBGcmFtZSog
ZnJhbWUgPSBwYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgcXVhZHNbaV0uc2V0UDEoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVk
SW50UG9pbnQocXVhZHNbaV0ucDEoKSkpKTsKKyAgICAgICAgcXVhZHNbaV0uc2V0UDIoZnJhbWUt
PnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVkSW50UG9pbnQocXVhZHNbaV0ucDIoKSkp
KTsKKyAgICAgICAgcXVhZHNbaV0uc2V0UDMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhyb3VuZGVkSW50UG9pbnQocXVhZHNbaV0ucDMoKSkpKTsKKyAgICAgICAgcXVhZHNbaV0uc2V0
UDQoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVkSW50UG9pbnQocXVhZHNb
aV0ucDQoKSkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcXVhZHM7Cit9CisKIHZvaWQgV2ViVmll
d0ltcGw6OnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxp
dHlTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzSW5p
dGlhbFN0YXRlKSB7CiAgICAgaWYgKCFwYWdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaAppbmRleCAzMDgyZDRlMDEzNWFmZWRiYTI1MzA4OTRjZTYwMDNiZTQyYjg1
MWFkLi5kMTA2OTdlYTllNzBiMDI1N2IwOTU3N2IzMmY3YjY2NDQ1YzRjYmJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTQ2OCw2ICs0NjgsOSBAQCBwdWJs
aWM6CiAKICAgICBQYXNzT3duUHRyPFdlYkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVDb21wb3Np
dG9yR3JhcGhpY3NDb250ZXh0M0QoKTsKIAorICAgIC8vIFJldHVybnMgdGhlIGxpc3Qgb2YgcXVh
ZHMgcmVxdWlyZWQgdG8gaGlnaGxpZ2h0IGEgZ2l2ZW4gdGV4dCByYW5nZS4KKyAgICB2aXJ0dWFs
IFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IGdldFRvdWNoSGlnaGxpZ2h0UXVhZHMoY29uc3QgV2Vi
UmFuZ2UmLCBXZWJDb2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29sb3IpID0gMDsKKwogICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSwgYm9vbCk7
CiAKICAgICBXZWJDb3JlOjpQb3B1cENvbnRhaW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdFBvcHVwLmdldCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134400</attachid>
            <date>2012-03-28 14:23:18 -0700</date>
            <delta_ts>2012-03-30 09:31:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82460-20120328222316.patch</filename>
            <type>text/plain</type>
            <size>23668</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDVmMGFjYmM5NGE1Yjg0MDkwYmJkODI3N2U4MGMyNjY1YThiNmUxMDguLmRjOTgzZTZmYjkzNjEy
OWZjNzQzZWMxMGMxNzc0NzdkMjQ3OGNiYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTItMDMtMjggIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9n
cmFjaWFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVjdGl2ZWx5IHJldHJpZXZlIHRleHQg
YXJvdW5kIGEgdG91Y2hlZCBwb2ludC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBhbiBlbWJlZGRpbmcgQVBJIHRvIFdlYkNvcmUncyBT
dXJyb3VuZGluZ1RleHQsIGFkZGluZyBhbHNvCisgICAgICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBz
ZWxlY3QgYW5kIGhpZ2hsaWdodCB0aGUgcmV0cmlldmVkIHRleHQgcmFuZ2UuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAoV2Vi
RnJhbWUpOgorICAgICAgICAqIHB1YmxpYy9XZWJIaXRUZXN0SW5mby5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkhpdFRlc3RJbmZv
KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3Vycm91bmRpbmdUZXh0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3Vycm91bmRpbmdU
ZXh0KToKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYlZpZXcpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAg
KFdlYldpZGdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldDo6aGl0VGVzdEluZm9Gb3JX
aW5kb3dQb3MpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAoV2ViRnJhbWVJbXBsKToKKyAgICAg
ICAgKiBzcmMvV2ViSGl0VGVzdEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpXZWJIaXRUZXN0SW5mbyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpsaW5rVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SGl0VGVzdEluZm86On5XZWJIaXRUZXN0SW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjppbWFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpub2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86OnBvaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSGl0VGVzdEluZm86OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSGl0VGVzdEluZm86Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjpvcGVyYXRvciBIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKiBzcmMvV2ViU3Vycm91
bmRpbmdUZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdXJyb3VuZGluZ1RleHQ6OldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6fldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6Y29udGVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN1cnJvdW5kaW5nVGV4dDo6aGl0T2Zmc2V0SW5Db250ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3Vycm91bmRpbmdUZXh0OjpyYW5nZUZyb21Db250ZW50T2Zmc2V0cyk6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKToKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKwogMjAxMi0wMy0yNyAgSmFtZXMg
Um9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVHJh
bnNmZXIgd2hlZWwgZmxpbmcgdmlhIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBiNGRiM2U0YWI1MjM4Njc0ZjBmY2IxZDdjNTll
ZGZjYWFjNzg0YTA2Li5mNzg2ZDU2MDllMTZmMjE3ODc4YTQ1MDcwZWVmZjA3YjhiMjI1YWM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xNzMsNiArMTczLDcgQEAKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJHbHlwaENhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
SGlzdG9yeUl0ZW0uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIaXRUZXN0SW5mby5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJQ0VPcHRpb25zLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmgnLApAQCAtMjYzLDYgKzI2NCw3IEBACiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdlTmFtZXNwYWNlLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViU3RvcmFnZVF1b3RhVHlwZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGlj
L1dlYlN1cnJvdW5kaW5nVGV4dC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0cmVh
bVRleHR1cmVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJUZXh0QWZmaW5p
dHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJUZXh0Q2FzZVNlbnNpdGl2aXR5Lmgn
LApAQCAtNTYxLDYgKzU2Myw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHbHlwaENhY2hl
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0uY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYkhpdFRlc3RJbmZvLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQ
Qm9keS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSFRUUExvYWRJbmZvLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJJQ0VDYW5kaWRhdGVEZXNjcmlwdG9yLmNwcCcsCkBAIC02
NzAsNiArNjczLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1w
bC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZVF1b3RhQ2FsbGJhY2tzSW1w
bC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViVGhyZWFkU2FmZURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXggMGQ1NDA2ZDUy
MDY4MmM5NTAxNTQ2YjQwODI1MzI4NTA5NTVmNmJlNS4uZTIyZjBkMTc1YjY0N2JkZDUxZmQzYzg1
Njg5NjA1OGQ4ZDRiNDk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZS5oCkBAIC00MzYsNiArNDM2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNlbGVj
dFJhbmdlKGNvbnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9pbnQmIGVuZCkgPSAwOwog
CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJikgPSAwOworCiAK
ICAgICAvLyBQcmludGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSGl0VGVzdEluZm8uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkhpdFRlc3RJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFlZWFlOTM1NjFiNzBiMjhmOWRhZmFhY2M4
MGE1M2EyOWRiMDkzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkhpdFRlc3RJbmZvLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkhpdFRl
c3RJbmZvX2gKKyNkZWZpbmUgV2ViSGl0VGVzdEluZm9faAorCisjaW5jbHVkZSAiV2ViTm9kZS5o
IgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
UHJpdmF0ZU93blB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworLy8gUHJvcGVydGllcyBvZiBhIGhpdCB0ZXN0IHJlc3VsdCwgaS5lLiBwcm9wZXJ0aWVz
IG9mIHRoZSBub2RlcyBhdCBhIGdpdmVuIHBvaW50CisvLyAodGhlIGhpdCBwb2ludCkgb24gdGhl
IHBhZ2UuIEJvdGggdXJscyBtYXkgYmUgcG9wdWxhdGVkIGF0IHRoZSBzYW1lIHRpbWUsIGZvcgor
Ly8gZXhhbXBsZSBpbiB0aGUgaW5zdGFuY2Ugb2YgYW4gPGltZz4gaW5zaWRlIGFuIDxhPi4KK2Ns
YXNzIFdlYkhpdFRlc3RJbmZvIHsKK3B1YmxpYzoKKyAgICBXZWJIaXRUZXN0SW5mbygpOworICAg
IFdlYkhpdFRlc3RJbmZvKGNvbnN0IFdlYkhpdFRlc3RJbmZvJik7CisgICAgfldlYkhpdFRlc3RJ
bmZvKCk7CisKKyAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBsaW5rIHJldHVybmVkIGJ5
IHRoZSBoaXQgdGVzdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlVSTCBsaW5rVVJMKCkgY29uc3Q7
CisKKyAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBpbWFnZSByZXR1cm5lZCBieSB0aGUg
aGl0IHRlc3QuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJVUkwgaW1hZ2VVUkwoKSBjb25zdDsKKwor
ICAgIC8vIFRoZSBub2RlIHRoYXQgZ290IGhpdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYk5vZGUg
bm9kZSgpIGNvbnN0OworCisgICAgLy8gUG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIGhpdC4KKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYlBvaW50IHBvaW50KCkgY29uc3Q7CisKKyAgICAvLyBUcnVlIGlm
ZiB0aGUgaGl0IHdhcyBvbiBhbiBlZGl0YWJsZSBmaWVsZCBvciBub2RlLgorICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisgICAgV2ViSGl0VGVzdEluZm8oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dCYpOworICAgIFdlYkhpdFRlc3RJbmZvJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdCYpOworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQoKSBjb25zdDsK
KyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdXJyb3Vu
ZGluZ1RleHQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN1cnJvdW5kaW5n
VGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlmODliMjVjYTdkZTZlNzcxNWQ3MTgxYmIwN2Y2N2NhN2JkNzA4
NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
dXJyb3VuZGluZ1RleHQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlN1cnJvdW5kaW5nVGV4dF9oCisjZGVmaW5lIFdlYlN1cnJvdW5kaW5nVGV4dF9oCisKKyNp
bmNsdWRlICJXZWJOb2RlLmgiCisjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJQcml2YXRlT3duUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFN1cnJvdW5kaW5nVGV4dDsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkhpdFRlc3RJbmZvOworCitjbGFzcyBXZWJTdXJy
b3VuZGluZ1RleHQgeworcHVibGljOgorICAgIFdlYlN1cnJvdW5kaW5nVGV4dCgpOworICAgIH5X
ZWJTdXJyb3VuZGluZ1RleHQoKTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgdGV4dCBjb250ZW50
IHdhbGtlciBjZW50ZXJlZCBpbiB0aGUgcG9zaXRpb24gZGVzY3JpYmVkIGJ5IHRoZSBoaXQgdGVz
dC4KKyAgICAvLyBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNvbnRlbnRzIHJldHJpZXZlZCBi
eSB0aGUgd2Fsa2VyIGlzIGRlZmluZWQgYnkgbWF4TGVuZ3RoLgorICAgIFdFQktJVF9FWFBPUlQg
V2ViU3Vycm91bmRpbmdUZXh0KGNvbnN0IFdlYkhpdFRlc3RJbmZvJiwgc2l6ZV90IG1heExlbmd0
aCk7CisKKyAgICAvLyBDcmVhdGVzIGEgbmV3IHRleHQgY29udGVudCB3YWxrZXIgY2VudGVyZWQg
aW4gdGhlIHNlbGVjdGVkIG9mZnNldCBvZiB0aGUgZ2l2ZW4gdGV4dCBub2RlLgorICAgIC8vIFRo
ZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29udGVudHMgcmV0cmlldmVkIGJ5IHRoZSB3YWxrZXIg
aXMgZGVmaW5lZCBieSBtYXhMZW5ndGguCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdXJyb3VuZGlu
Z1RleHQoV2ViTm9kZSB0ZXh0Tm9kZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG1heExlbmd0aCk7
CisKKyAgICAvLyBUZXh0IGNvbnRlbnQgcmV0cmlldmVkIGJ5IHRoZSB3YWxrZXIuCisgICAgV0VC
S0lUX0VYUE9SVCBXZWJTdHJpbmcgY29udGVudCgpIGNvbnN0OworCisgICAgLy8gUG9zaXRpb24g
b2YgdGhlIGluaXRpYWwgdGV4dCBub2RlIG9mZnNldCBpbiB0aGUgY29udGVudCBzdHJpbmcuCisg
ICAgV0VCS0lUX0VYUE9SVCBzaXplX3QgaGl0T2Zmc2V0SW5Db250ZW50KCkgY29uc3Q7CisKKyAg
ICAvLyBDb252ZXJ0IHN0YXJ0L2VuZCBwb3NpdGlvbnMgaW4gdGhlIGNvbnRlbnQgdGV4dCBzdHJp
bmcgaW50byBhIFdlYktpdCB0ZXh0IHJhbmdlLgorICAgIFdFQktJVF9FWFBPUlQgV2ViUmFuZ2Ug
cmFuZ2VGcm9tQ29udGVudE9mZnNldHMoc2l6ZV90IHN0YXJ0SW5Db250ZW50LCBzaXplX3QgZW5k
SW5Db250ZW50KTsKKworcHJvdGVjdGVkOgorICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6
U3Vycm91bmRpbmdUZXh0PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKaW5kZXggNGQ5
OTVlMGZmYjUzNjZlYjVmNTZkMTVhZTliN2Y2N2RjOTliNzUxNC4uMjI0ZTE0ZGUyMDQ1MDkwNjll
NTVhYzJlMWJiNjBjNjg0MGZhNWUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXcuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRpb24uaCIK
ICNpbmNsdWRlICJXZWJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCiAjaW5jbHVkZSAiV2ViV2lkZ2V0
LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCiAKQEAgLTUw
LDYgKzUxLDcgQEAgY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJOb2RlOwog
Y2xhc3MgV2ViUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50OworY2xhc3Mg
V2ViUmFuZ2U7CiBjbGFzcyBXZWJTZXR0aW5nczsKIGNsYXNzIFdlYlNwZWxsQ2hlY2tDbGllbnQ7
CiBjbGFzcyBXZWJTdHJpbmc7CkBAIC00MzMsNiArNDM1LDExIEBAIHB1YmxpYzoKICAgICAvLyBi
eSB0aGUgY29tcG9zaXRvcikgYnV0IG11c3QgYmUgY29tcGxldGVkIGJ5IHRoZSBXZWJWaWV3Lgog
ICAgIHZpcnR1YWwgdm9pZCB0cmFuc2ZlckFjdGl2ZVdoZWVsRmxpbmdBbmltYXRpb24oY29uc3Qg
V2ViQWN0aXZlV2hlZWxGbGluZ1BhcmFtZXRlcnMmKSA9IDA7CiAKKyAgICAvLyBUb3VjaCAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIC8vIFJldHVybnMgdGhlIGxpc3Qgb2YgcXVhZHMgcmVxdWlyZWQgdG8gaGlnaGxp
Z2h0IGEgZ2l2ZW4gdGV4dCByYW5nZS4KKyAgICB2aXJ0dWFsIFdlYlZlY3RvcjxXZWJGbG9hdFF1
YWQ+IGdldFRvdWNoSGlnaGxpZ2h0UXVhZHMoY29uc3QgV2ViUmFuZ2UmLCBXZWJDb2xvciYgb3V0
VGFwSGlnaGxpZ2h0Q29sb3IpID0gMDsKKwogICAgIC8vIFZpc2liaWxpdHkgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8v
IFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIFdlYlZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IGNiY2Y3NDY0MWFjOTEyZjJmM2M4MTFkOTIwMjgy
M2RmZWU5NjFkZjEuLmRlOTdjOWFiNWI4ZWI4ZTJiY2IxZDYxNWY4ZjlmYWY4MzYzNGZkOTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCkBAIC0zMiw2ICszMiw3
IEBACiAjZGVmaW5lIFdlYldpZGdldF9oCiAKICNpbmNsdWRlICJXZWJDb21wb3NpdGlvblVuZGVy
bGluZS5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RJbmZvLmgiCiAjaW5jbHVkZSAiV2ViVGV4dElu
cHV0VHlwZS5oIgogI2luY2x1ZGUgIldlYlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJDYW52YXMuaCIKQEAgLTE2OCw2ICsxNjksOSBAQCBwdWJsaWM6CiAgICAgLy8gUmV0
dXJucyB0aGUgY3VycmVudCB0ZXh0IGlucHV0IHR5cGUgb2YgdGhpcyBXZWJXaWRnZXQuCiAgICAg
dmlydHVhbCBXZWJUZXh0SW5wdXRUeXBlIHRleHRJbnB1dFR5cGUoKSB7IHJldHVybiBXZWJLaXQ6
OldlYlRleHRJbnB1dFR5cGVOb25lOyB9CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBoaXQgdGVzdCBy
ZXN1bHQgZm9yIGEgZ2l2ZW4gcG9pbnQuCisgICAgdmlydHVhbCBXZWJIaXRUZXN0SW5mbyBoaXRU
ZXN0SW5mb0ZvcldpbmRvd1Bvcyhjb25zdCBXZWJQb2ludCYpIHsgcmV0dXJuIFdlYkhpdFRlc3RJ
bmZvKCk7IH0KKwogICAgIC8vIFJldHVybnMgdGhlIHN0YXJ0IGFuZCBlbmQgYm91bmRzIG9mIHRo
ZSBjdXJyZW50IHNlbGVjdGlvbi4KICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIHJhbmdlIGlzIGVt
cHR5LCBpdCByZXR1cm5zIHRoZSBjYXJldCBib3VuZHMuCiAgICAgdmlydHVhbCBib29sIHNlbGVj
dGlvbkJvdW5kcyhXZWJSZWN0JiBzdGFydCwgV2ViUmVjdCYgZW5kKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5k
ZXggMzk4OTdjODIzNjJhODMyY2JlMmYxYzljMTI1MzhkYWFhMmE3NjhiMS4uYjYwNTg3ZWYxNTBk
MGY2NWIzYzY3NDcwYTg0OWFlYzEwMWEwNzAxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwCkBAIC0xMzgwLDYgKzEzODAsMTMgQEAgdm9pZCBXZWJGcmFt
ZUltcGw6OnNlbGVjdFJhbmdlKGNvbnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9pbnQm
IGVuZCkKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rp
b24sIENoYXJhY3RlckdyYW51bGFyaXR5KTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6OnNlbGVj
dFJhbmdlKGNvbnN0IFdlYlJhbmdlJiB3ZWJSYW5nZSkKK3sKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxSYW5nZT4gPih3ZWJSYW5nZSk7CisgICAgaWYg
KHJhbmdlKQorICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0ZWRSYW5nZShy
YW5nZS5nZXQoKSwgV2ViQ29yZTo6VlBfREVGQVVMVF9BRkZJTklUWSwgZmFsc2UpOworfQorCiBW
aXNpYmxlUG9zaXRpb24gV2ViRnJhbWVJbXBsOjp2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQb2lu
dChjb25zdCBXZWJQb2ludCYgcG9pbnQpCiB7CiAgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RS
ZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6Ok1vdmU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDcwMGY2ZWE0MDM3ZTdiMjhiOTBiZGM4
Zjk0OTk0YzhhZWU5YTMxZjIuLmY3ZGIzZTQzNzcyYTg1YTNjMDRhYzEwMjE2NTc0MmE1ZmQ5ZDU0
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCkBAIC0xNjUs
NiArMTY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViU3RyaW5nIHNlbGVjdGlvbkFzTWFy
a3VwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNlbGVjdFdvcmRBcm91bmRDYXJldCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJQb2ludCYgc3RhcnQsIGNvbnN0
IFdlYlBvaW50JiBlbmQpOworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJS
YW5nZSYpOwogICAgIHZpcnR1YWwgaW50IHByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJOb2RlJiBjb25zdHJhaW5U
b05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpbnRlckRQSSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhpdFRlc3RJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhpdFRlc3RJbmZvLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
N2MxZmQwODVkMWZkYWIxYjdmYjM4NTUyMzg5MmU2OGY5MjJhOWQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSGl0VGVzdEluZm8uY3BwCkBAIC0wLDAg
KzEsOTUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RJbmZvLmgi
CisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViSGl0VGVzdEluZm86OldlYkhpdFRlc3RJ
bmZvKCkKK3sKK30KKworV2ViSGl0VGVzdEluZm86OldlYkhpdFRlc3RJbmZvKGNvbnN0IFdlYkhp
dFRlc3RJbmZvJiB0ZXN0SW5mbykKKyAgICA6IG1fcHJpdmF0ZShuZXcgSGl0VGVzdFJlc3VsdCh0
ZXN0SW5mbykpCit7Cit9CisKK1dlYlVSTCBXZWJIaXRUZXN0SW5mbzo6bGlua1VSTCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+YWJzb2x1dGVMaW5rVVJMKCk7Cit9CisKK1dlYkhp
dFRlc3RJbmZvOjp+V2ViSGl0VGVzdEluZm8oKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsK
K30KKworV2ViVVJMIFdlYkhpdFRlc3RJbmZvOjppbWFnZVVSTCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+YWJzb2x1dGVJbWFnZVVSTCgpOworfQorCitXZWJOb2RlIFdlYkhpdFRl
c3RJbmZvOjpub2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPmlu
bmVyTm9kZSgpKTsKK30KKworV2ViUG9pbnQgV2ViSGl0VGVzdEluZm86OnBvaW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV2ViUG9pbnQobV9wcml2YXRlLT5sb2NhbFBvaW50KCkpOworfQorCiti
b29sIFdlYkhpdFRlc3RJbmZvOjppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+aXNDb250ZW50RWRpdGFibGUoKTsKK30KKworV2ViSGl0VGVzdEluZm86
OldlYkhpdFRlc3RJbmZvKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBtX3By
aXZhdGUucmVzZXQobmV3IEhpdFRlc3RSZXN1bHQocmVzdWx0KSk7Cit9CisKK1dlYkhpdFRlc3RJ
bmZvJiBXZWJIaXRUZXN0SW5mbzo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3IEhpdFRlc3RSZXN1bHQocmVzdWx0KSk7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitXZWJIaXRUZXN0SW5mbzo6b3BlcmF0b3IgSGl0VGVzdFJl
c3VsdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX3ByaXZhdGUuZ2V0KCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU3Vycm91bmRpbmdUZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN1
cnJvdW5kaW5nVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIxYmNmNDI4YWUxNjgyNDVhMGZkOGYzMmY5
MTVmZDBlMjExZTJmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlN1cnJvdW5kaW5nVGV4dC5oIgor
CisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSYW5n
ZS5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlN1cnJvdW5kaW5nVGV4
dC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKyNp
bmNsdWRlICJXZWJIaXRUZXN0SW5mby5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlN1cnJvdW5kaW5nVGV4dDo6V2ViU3Vycm91bmRpbmdU
ZXh0KCkKK3sKK30KKworV2ViU3Vycm91bmRpbmdUZXh0Ojp+V2ViU3Vycm91bmRpbmdUZXh0KCkK
K3sKKyAgICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKK1dlYlN1cnJvdW5kaW5nVGV4dDo6V2Vi
U3Vycm91bmRpbmdUZXh0KGNvbnN0IFdlYkhpdFRlc3RJbmZvJiBoaXRUZXN0SW5mbywgc2l6ZV90
IG1heExlbmd0aCkKK3sKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdEluZm8ubm9kZSgpLnVud3Jh
cDxOb2RlPigpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBTdXJyb3VuZGluZ1RleHQobm9kZS0+
cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0SW5mby5wb2ludCgpKSwgbWF4TGVu
Z3RoKSk7Cit9CisKK1dlYlN1cnJvdW5kaW5nVGV4dDo6V2ViU3Vycm91bmRpbmdUZXh0KFdlYk5v
ZGUgdGV4dE5vZGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBtYXhMZW5ndGgpCit7CisgICAgTm9k
ZSogbm9kZSA9IHRleHROb2RlLnVud3JhcDxOb2RlPigpOworICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aXNUZXh0Tm9kZSgpIHx8IG9mZnNldCA+PSBub2RlLT5ub2RlVmFsdWUoKS5sZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBTdXJyb3VuZGluZ1Rl
eHQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHRvVGV4dChub2RlKSwgb2Zmc2V0KS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgRE9XTlNUUkVBTSksIG1heExlbmd0aCkpOworfQorCitXZWJT
dHJpbmcgV2ViU3Vycm91bmRpbmdUZXh0Ojpjb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5jb250ZW50KCk7Cit9CisKK3NpemVfdCBXZWJTdXJyb3VuZGluZ1RleHQ6Omhp
dE9mZnNldEluQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cG9zaXRp
b25PZmZzZXRJbkNvbnRlbnQoKTsKK30KKworV2ViUmFuZ2UgV2ViU3Vycm91bmRpbmdUZXh0Ojpy
YW5nZUZyb21Db250ZW50T2Zmc2V0cyhzaXplX3Qgc3RhcnRJbkNvbnRlbnQsIHNpemVfdCBlbmRJ
bkNvbnRlbnQpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cmFuZ2VGcm9tQ29udGVudE9mZnNl
dHMoc3RhcnRJbkNvbnRlbnQsIGVuZEluQ29udGVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGMw
YzQzOTZlYTViNjQ1YWIxMDM0Y2M0NWJlOTVmNGExMTczZDM1NGYuLjk5ZTM2YmJmOTA0MGU0MDll
YTMyMDYzODBlNjI5YmRjN2ZjNDBmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKQEAgLTM0NjcsNiArMzQ2NywzMSBAQCBXZWJHcmFwaGljc0NvbnRleHQz
RCogV2ViVmlld0ltcGw6OnNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCkKICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpLmdldCgpKTsKIH0KIAorV2ViVmVjdG9yPFdlYkZsb2F0
UXVhZD4gV2ViVmlld0ltcGw6OmdldFRvdWNoSGlnaGxpZ2h0UXVhZHMoY29uc3QgV2ViUmFuZ2Um
IHdlYlJhbmdlLCBXZWJDb2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29sb3IpCit7CisgICAgb3V0VGFw
SGlnaGxpZ2h0Q29sb3IgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRhcEhpZ2hsaWdodENvbG9yKCku
cmdiKCk7CisgICAgaWYgKHdlYlJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV2ViVmVj
dG9yPFdlYkZsb2F0UXVhZD4oKTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzdGF0aWNf
Y2FzdDxQYXNzUmVmUHRyPFJhbmdlPiA+KHdlYlJhbmdlKTsKKyAgICBOb2RlKiBub2RlID0gcmFu
Z2UtPmZpcnN0Tm9kZSgpOworICAgIGlmIChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkpCisgICAg
ICAgIG91dFRhcEhpZ2hsaWdodENvbG9yID0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGFw
SGlnaGxpZ2h0Q29sb3IoKS5yZ2IoKTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwor
ICAgIHJhbmdlLT50ZXh0UXVhZHMocXVhZHMpOworCisgICAgRnJhbWUqIGZyYW1lID0gcGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHF1YWRzW2ldLnNl
dFAxKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1YWRz
W2ldLnAxKCkpKSk7CisgICAgICAgIHF1YWRzW2ldLnNldFAyKGZyYW1lLT52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1YWRzW2ldLnAyKCkpKSk7CisgICAgICAgIHF1
YWRzW2ldLnNldFAzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocm91bmRlZEludFBv
aW50KHF1YWRzW2ldLnAzKCkpKSk7CisgICAgICAgIHF1YWRzW2ldLnNldFA0KGZyYW1lLT52aWV3
KCktPmNvbnRlbnRzVG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1YWRzW2ldLnA0KCkpKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHF1YWRzOworfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRWaXNp
YmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0luaXRpYWxTdGF0ZSkgewog
ICAgIGlmICghcGFnZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
aW5kZXggMzA4MmQ0ZTAxMzVhZmVkYmEyNTMwODk0Y2U2MDAzYmU0MmI4NTFhZC4uNTk3ZDkyOTcy
MDk4M2VkMmI5NzM3OTZhODVjNmMwM2VkMDg4NTg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFdlYlZpZXdJbXBs
X2gKIAogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xpY3kuaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgogI2luY2x1
ZGUgInBsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJM
YXllclRyZWVWaWV3Q2xpZW50LmgiCkBAIC00NjgsNiArNDY5LDkgQEAgcHVibGljOgogCiAgICAg
UGFzc093blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29tcG9zaXRvckdyYXBoaWNz
Q29udGV4dDNEKCk7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBsaXN0IG9mIHF1YWRzIHJlcXVpcmVk
IHRvIGhpZ2hsaWdodCBhIGdpdmVuIHRleHQgcmFuZ2UuCisgICAgdmlydHVhbCBXZWJWZWN0b3I8
V2ViRmxvYXRRdWFkPiBnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKGNvbnN0IFdlYlJhbmdlJiwgV2Vi
Q29sb3ImIG91dFRhcEhpZ2hsaWdodENvbG9yKTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNp
YmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSwgYm9vbCk7CiAKICAgICBXZWJDb3Jl
OjpQb3B1cENvbnRhaW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBv
cHVwLmdldCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134829</attachid>
            <date>2012-03-30 09:31:51 -0700</date>
            <delta_ts>2012-04-03 09:34:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82460-20120330173149.patch</filename>
            <type>text/plain</type>
            <size>23719</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDVmMGFjYmM5NGE1Yjg0MDkwYmJkODI3N2U4MGMyNjY1YThiNmUxMDguLjYwYjA3MTFmNWQ3NmE4
ZjU0OGE3Y2JjOWQxNzg2YjNhZDQ1YTljZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTItMDMtMzAgIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9n
cmFjaWFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVjdGl2ZWx5IHJldHJpZXZlIHRleHQg
YXJvdW5kIGEgdG91Y2hlZCBwb2ludC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBhbiBlbWJlZGRpbmcgQVBJIHRvIFdlYkNvcmUncyBT
dXJyb3VuZGluZ1RleHQsIGFkZGluZyBhbHNvCisgICAgICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBz
ZWxlY3QgYW5kIGhpZ2hsaWdodCB0aGUgcmV0cmlldmVkIHRleHQgcmFuZ2UuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAoV2Vi
RnJhbWUpOgorICAgICAgICAqIHB1YmxpYy9XZWJIaXRUZXN0SW5mby5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkhpdFRlc3RJbmZv
KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3Vycm91bmRpbmdUZXh0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3Vycm91bmRpbmdU
ZXh0KToKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYlZpZXcpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAg
KFdlYldpZGdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldDo6aGl0VGVzdEluZm9Gb3JX
aW5kb3dQb3MpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAoV2ViRnJhbWVJbXBsKToKKyAgICAg
ICAgKiBzcmMvV2ViSGl0VGVzdEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpXZWJIaXRUZXN0SW5mbyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpsaW5rVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SGl0VGVzdEluZm86On5XZWJIaXRUZXN0SW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjppbWFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpub2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86OnBvaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSGl0VGVzdEluZm86OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSGl0VGVzdEluZm86Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjpvcGVyYXRvciBIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKiBzcmMvV2ViU3Vycm91
bmRpbmdUZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdXJyb3VuZGluZ1RleHQ6OldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6fldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6Y29udGVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN1cnJvdW5kaW5nVGV4dDo6cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTdXJyb3VuZGluZ1RleHQ6OnJhbmdlRnJvbUNvbnRlbnRPZmZzZXRzKToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
Z2V0VG91Y2hIaWdobGlnaHRRdWFkcyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEyLTAzLTI3ICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBUcmFuc2ZlciB3aGVlbCBmbGluZyB2aWEgV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckNsaWVu
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGI0ZGIzZTRhYjUyMzg2NzRmMGZjYjFk
N2M1OWVkZmNhYWM3ODRhMDYuLmY3ODZkNTYwOWUxNmYyMTc4NzhhNDUwNzBlZWZmMDdiOGIyMjVh
YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTE3Myw2ICsxNzMsNyBAQAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkdseXBoQ2FjaGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJIaXN0b3J5SXRlbS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkhpdFRlc3RJ
bmZvLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSUNFQ2FuZGlkYXRlRGVzY3JpcHRv
ci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklDRU9wdGlvbnMuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaCcsCkBAIC0yNjMsNiArMjY0LDcgQEAK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0b3JhZ2VOYW1lc3BhY2UuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFja3MuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdlUXVvdGFUeXBlLmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViU3Vycm91bmRpbmdUZXh0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
U3RyZWFtVGV4dHVyZUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRleHRB
ZmZpbml0eS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRleHRDYXNlU2Vuc2l0aXZp
dHkuaCcsCkBAIC01NjEsNiArNTYzLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdseXBo
Q2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIaXN0b3J5SXRlbS5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViSGl0VGVzdEluZm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkhUVFBCb2R5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQTG9hZEluZm8uY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYklDRUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwJywK
QEAgLTY3MCw2ICs2NzMsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZU5hbWVz
cGFjZUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFj
a3NJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFj
a3NJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViU3Vycm91bmRpbmdUZXh0LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUZXh0UnVuLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJUaHJlYWRTYWZlRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJM
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAppbmRleCAwZDU0
MDZkNTIwNjgyYzk1MDE1NDZiNDA4MjUzMjg1MDk1NWY2YmU1Li5lMjJmMGQxNzViNjQ3YmRkNTFm
ZDNjODU2ODk2MDU4ZDhkNGI0OTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkZyYW1lLmgKQEAgLTQzNiw2ICs0MzYsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2VsZWN0UmFuZ2UoY29uc3QgV2ViUG9pbnQmIHN0YXJ0LCBjb25zdCBXZWJQb2ludCYgZW5kKSA9
IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmKSA9IDA7
CisKIAogICAgIC8vIFByaW50aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJIaXRUZXN0SW5mby5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSGl0VGVzdEluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWVlYWU5MzU2MWI3MGIyOGY5ZGFm
YWFjYzgwYTUzYTI5ZGIwOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSGl0VGVzdEluZm8uaApAQCAtMCwwICsxLDc2IEBACisvKgorKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKgorKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
SGl0VGVzdEluZm9faAorI2RlZmluZSBXZWJIaXRUZXN0SW5mb19oCisKKyNpbmNsdWRlICJXZWJO
b2RlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUG9pbnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJQcml2YXRlT3duUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisvLyBQcm9wZXJ0aWVzIG9mIGEgaGl0IHRlc3QgcmVzdWx0LCBpLmUuIHByb3Bl
cnRpZXMgb2YgdGhlIG5vZGVzIGF0IGEgZ2l2ZW4gcG9pbnQKKy8vICh0aGUgaGl0IHBvaW50KSBv
biB0aGUgcGFnZS4gQm90aCB1cmxzIG1heSBiZSBwb3B1bGF0ZWQgYXQgdGhlIHNhbWUgdGltZSwg
Zm9yCisvLyBleGFtcGxlIGluIHRoZSBpbnN0YW5jZSBvZiBhbiA8aW1nPiBpbnNpZGUgYW4gPGE+
LgorY2xhc3MgV2ViSGl0VGVzdEluZm8geworcHVibGljOgorICAgIFdlYkhpdFRlc3RJbmZvKCk7
CisgICAgV2ViSGl0VGVzdEluZm8oY29uc3QgV2ViSGl0VGVzdEluZm8mKTsKKyAgICB+V2ViSGl0
VGVzdEluZm8oKTsKKworICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhlIGxpbmsgcmV0dXJu
ZWQgYnkgdGhlIGhpdCB0ZXN0LgorICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIGxpbmtVUkwoKSBj
b25zdDsKKworICAgIC8vIFRoZSBhYnNvbHV0ZSBVUkwgb2YgdGhlIGltYWdlIHJldHVybmVkIGJ5
IHRoZSBoaXQgdGVzdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlVSTCBpbWFnZVVSTCgpIGNvbnN0
OworCisgICAgLy8gVGhlIG5vZGUgdGhhdCBnb3QgaGl0LgorICAgIFdFQktJVF9FWFBPUlQgV2Vi
Tm9kZSBub2RlKCkgY29uc3Q7CisKKyAgICAvLyBQb2ludCBjb29yZGluYXRlcyBvZiB0aGUgaGl0
LgorICAgIFdFQktJVF9FWFBPUlQgV2ViUG9pbnQgcG9pbnQoKSBjb25zdDsKKworICAgIC8vIFRy
dWUgaWZmIHRoZSBoaXQgd2FzIG9uIGFuIGVkaXRhYmxlIGZpZWxkIG9yIG5vZGUuCisgICAgV0VC
S0lUX0VYUE9SVCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CisKKyNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KKyAgICBXZWJIaXRUZXN0SW5mbyhjb25zdCBXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0Jik7CisgICAgV2ViSGl0VGVzdEluZm8mIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0Jik7CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCgpIGNv
bnN0OworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQ+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN1
cnJvdW5kaW5nVGV4dC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3Vycm91
bmRpbmdUZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUxOTc3NDVkY2RhNWNmNmRjMzliNWI5MDI5ZTJiYjQ1
MjRmNWQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlN1cnJvdW5kaW5nVGV4dC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViU3Vycm91bmRpbmdUZXh0X2gKKyNkZWZpbmUgV2ViU3Vycm91bmRpbmdUZXh0X2gK
KworI2luY2x1ZGUgIldlYk5vZGUuaCIKKyNpbmNsdWRlICJXZWJSYW5nZS5oIgorI2luY2x1ZGUg
InBsYXRmb3JtL1dlYlByaXZhdGVPd25QdHIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJp
bmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3Vycm91bmRpbmdUZXh0OworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSGl0VGVzdEluZm87CisKK2NsYXNzIFdl
YlN1cnJvdW5kaW5nVGV4dCB7CitwdWJsaWM6CisgICAgV2ViU3Vycm91bmRpbmdUZXh0KCk7Cisg
ICAgfldlYlN1cnJvdW5kaW5nVGV4dCgpOworCisgICAgLy8gQ3JlYXRlcyBhIG5ldyB0ZXh0IGNv
bnRlbnQgd2Fsa2VyIGNlbnRlcmVkIGluIHRoZSBwb3NpdGlvbiBkZXNjcmliZWQgYnkgdGhlIGhp
dCB0ZXN0LgorICAgIC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29udGVudHMgcmV0cmll
dmVkIGJ5IHRoZSB3YWxrZXIgaXMgZGVmaW5lZCBieSBtYXhMZW5ndGguCisgICAgV0VCS0lUX0VY
UE9SVCBXZWJTdXJyb3VuZGluZ1RleHQoY29uc3QgV2ViSGl0VGVzdEluZm8mLCBzaXplX3QgbWF4
TGVuZ3RoKTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgdGV4dCBjb250ZW50IHdhbGtlciBjZW50
ZXJlZCBpbiB0aGUgc2VsZWN0ZWQgb2Zmc2V0IG9mIHRoZSBnaXZlbiB0ZXh0IG5vZGUuCisgICAg
Ly8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBjb250ZW50cyByZXRyaWV2ZWQgYnkgdGhlIHdh
bGtlciBpcyBkZWZpbmVkIGJ5IG1heExlbmd0aC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlN1cnJv
dW5kaW5nVGV4dChXZWJOb2RlIHRleHROb2RlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbWF4TGVu
Z3RoKTsKKworICAgIC8vIFRleHQgY29udGVudCByZXRyaWV2ZWQgYnkgdGhlIHdhbGtlci4KKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBjb250ZW50KCkgY29uc3Q7CisKKyAgICAvLyBQb3Np
dGlvbiBvZiB0aGUgaW5pdGlhbCB0ZXh0IG5vZGUgb2Zmc2V0IGluIHRoZSBjb250ZW50IHN0cmlu
Zy4KKyAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBwb3NpdGlvbk9mZnNldEluQ29udGVudCgpIGNv
bnN0OworCisgICAgLy8gQ29udmVydCBzdGFydC9lbmQgcG9zaXRpb25zIGluIHRoZSBjb250ZW50
IHRleHQgc3RyaW5nIGludG8gYSBXZWJLaXQgdGV4dCByYW5nZS4KKyAgICBXRUJLSVRfRVhQT1JU
IFdlYlJhbmdlIHJhbmdlRnJvbUNvbnRlbnRPZmZzZXRzKHNpemVfdCBzdGFydE9mZnNldEluQ29u
dGVudCwgc2l6ZV90IGVuZE9mZnNldEluQ29udGVudCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJQ
cml2YXRlT3duUHRyPFdlYkNvcmU6OlN1cnJvdW5kaW5nVGV4dD4gbV9wcml2YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVmlldy5oCmluZGV4IDRkOTk1ZTBmZmI1MzY2ZWI1ZjU2ZDE1YWU5YjdmNjdkYzk5Yjc1
MTQuLjIyNGUxNGRlMjA0NTA5MDY5ZTU1YWMyZTFiYjYwYzY4NDBmYTVlMDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJXZWJEcmFnT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVZpc2liaWxpdHlTdGF0ZS5o
IgogI2luY2x1ZGUgIldlYldpZGdldC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkZsb2F0UXVh
ZC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlZlY3Rvci5oIgogCkBAIC01MCw2ICs1MSw3IEBAIGNsYXNzIFdlYkdyYXBoaWNzQ29udGV4
dDNEOwogY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGVy
bWlzc2lvbkNsaWVudDsKK2NsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU2V0dGluZ3M7CiBjbGFz
cyBXZWJTcGVsbENoZWNrQ2xpZW50OwogY2xhc3MgV2ViU3RyaW5nOwpAQCAtNDMzLDYgKzQzNSwx
MSBAQCBwdWJsaWM6CiAgICAgLy8gYnkgdGhlIGNvbXBvc2l0b3IpIGJ1dCBtdXN0IGJlIGNvbXBs
ZXRlZCBieSB0aGUgV2ViVmlldy4KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmZXJBY3RpdmVXaGVl
bEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdlYkFjdGl2ZVdoZWVsRmxpbmdQYXJhbWV0ZXJzJikgPSAw
OwogCisgICAgLy8gVG91Y2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSZXR1cm5zIHRoZSBsaXN0IG9mIHF1
YWRzIHJlcXVpcmVkIHRvIGhpZ2hsaWdodCBhIGdpdmVuIHRleHQgcmFuZ2UuCisgICAgdmlydHVh
bCBXZWJWZWN0b3I8V2ViRmxvYXRRdWFkPiBnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKGNvbnN0IFdl
YlJhbmdlJiwgV2ViQ29sb3ImIG91dFRhcEhpZ2hsaWdodENvbG9yKSA9IDA7CisKICAgICAvLyBW
aXNpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKICAgICAvLyBTZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBXZWJWaWV3
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCBjYmNmNzQ2
NDFhYzkxMmYyZjNjODExZDkyMDI4MjNkZmVlOTYxZGYxLi5kZTk3YzlhYjViOGViOGUyYmNiMWQ2
MTVmOGY5ZmFmODM2MzRmZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJXaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJX
aWRnZXQuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBXZWJXaWRnZXRfaAogCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0SW5mby5o
IgogI2luY2x1ZGUgIldlYlRleHRJbnB1dFR5cGUuaCIKICNpbmNsdWRlICJXZWJUZXh0RGlyZWN0
aW9uLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCkBAIC0xNjgsNiArMTY5LDkg
QEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgdGV4dCBpbnB1dCB0eXBlIG9m
IHRoaXMgV2ViV2lkZ2V0LgogICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRU
eXBlKCkgeyByZXR1cm4gV2ViS2l0OjpXZWJUZXh0SW5wdXRUeXBlTm9uZTsgfQogCisgICAgLy8g
UmV0dXJucyB0aGUgaGl0IHRlc3QgcmVzdWx0IGZvciBhIGdpdmVuIHBvaW50LgorICAgIHZpcnR1
YWwgV2ViSGl0VGVzdEluZm8gaGl0VGVzdEluZm9Gb3JXaW5kb3dQb3MoY29uc3QgV2ViUG9pbnQm
KSB7IHJldHVybiBXZWJIaXRUZXN0SW5mbygpOyB9CisKICAgICAvLyBSZXR1cm5zIHRoZSBzdGFy
dCBhbmQgZW5kIGJvdW5kcyBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uCiAgICAgLy8gSWYgdGhl
IHNlbGVjdGlvbiByYW5nZSBpcyBlbXB0eSwgaXQgcmV0dXJucyB0aGUgY2FyZXQgYm91bmRzLgog
ICAgIHZpcnR1YWwgYm9vbCBzZWxlY3Rpb25Cb3VuZHMoV2ViUmVjdCYgc3RhcnQsIFdlYlJlY3Qm
IGVuZCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IDM5ODk3YzgyMzYyYTgzMmNiZTJmMWM5YzEyNTM4ZGFh
YTJhNzY4YjEuLmI2MDU4N2VmMTUwZDBmNjViM2M2NzQ3MGE4NDlhZWMxMDFhMDcwMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtMTM4MCw2ICsx
MzgwLDEzIEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpzZWxlY3RSYW5nZShjb25zdCBXZWJQb2ludCYg
c3RhcnQsIGNvbnN0IFdlYlBvaW50JiBlbmQpCiAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigp
LT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiB9CiAKK3Zv
aWQgV2ViRnJhbWVJbXBsOjpzZWxlY3RSYW5nZShjb25zdCBXZWJSYW5nZSYgd2ViUmFuZ2UpCit7
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8UmFuZ2U+
ID4od2ViUmFuZ2UpOworICAgIGlmIChyYW5nZSkKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFdlYkNvcmU6OlZQX0RFRkFVTFRfQUZG
SU5JVFksIGZhbHNlKTsKK30KKwogVmlzaWJsZVBvc2l0aW9uIFdlYkZyYW1lSW1wbDo6dmlzaWJs
ZVBvc2l0aW9uRm9yV2luZG93UG9pbnQoY29uc3QgV2ViUG9pbnQmIHBvaW50KQogewogICAgIEhp
dFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0
OjpNb3ZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAppbmRleCA3
MDBmNmVhNDAzN2U3YjI4YjkwYmRjOGY5NDk5NGM4YWVlOWEzMWYyLi5mN2RiM2U0Mzc3MmE4NWEz
YzA0YWMxMDIxNjU3NDJhNWZkOWQ1NGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuaApAQCAtMTY1LDYgKzE2NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdl
YlN0cmluZyBzZWxlY3Rpb25Bc01hcmt1cCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZWxl
Y3RXb3JkQXJvdW5kQ2FyZXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3Qg
V2ViUG9pbnQmIHN0YXJ0LCBjb25zdCBXZWJQb2ludCYgZW5kKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmKTsKICAgICB2aXJ0dWFsIGludCBwcmludEJlZ2lu
KGNvbnN0IFdlYlNpemUmIHBhZ2VTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2ViTm9kZSYgY29uc3RyYWluVG9Ob2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHByaW50ZXJEUEksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJIaXRUZXN0SW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIaXRUZXN0
SW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjdjMWZkMDg1ZDFmZGFiMWI3ZmIzODU1MjM4OTJlNjhmOTIy
YTlkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhp
dFRlc3RJbmZvLmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworKiBhcmUgbWV0OgorKgorKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJIaXRUZXN0SW5mby5oIgorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm9kZS5oIgor
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkhp
dFRlc3RJbmZvOjpXZWJIaXRUZXN0SW5mbygpCit7Cit9CisKK1dlYkhpdFRlc3RJbmZvOjpXZWJI
aXRUZXN0SW5mbyhjb25zdCBXZWJIaXRUZXN0SW5mbyYgdGVzdEluZm8pCisgICAgOiBtX3ByaXZh
dGUobmV3IEhpdFRlc3RSZXN1bHQodGVzdEluZm8pKQoreworfQorCitXZWJVUkwgV2ViSGl0VGVz
dEluZm86OmxpbmtVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmFic29sdXRl
TGlua1VSTCgpOworfQorCitXZWJIaXRUZXN0SW5mbzo6fldlYkhpdFRlc3RJbmZvKCkKK3sKKyAg
ICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKK1dlYlVSTCBXZWJIaXRUZXN0SW5mbzo6aW1hZ2VV
UkwoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmFic29sdXRlSW1hZ2VVUkwoKTsK
K30KKworV2ViTm9kZSBXZWJIaXRUZXN0SW5mbzo6bm9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYk5vZGUobV9wcml2YXRlLT5pbm5lck5vZGUoKSk7Cit9CisKK1dlYlBvaW50IFdlYkhpdFRl
c3RJbmZvOjpwb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlBvaW50KG1fcHJpdmF0ZS0+
bG9jYWxQb2ludCgpKTsKK30KKworYm9vbCBXZWJIaXRUZXN0SW5mbzo6aXNDb250ZW50RWRpdGFi
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQ29udGVudEVkaXRhYmxlKCk7
Cit9CisKK1dlYkhpdFRlc3RJbmZvOjpXZWJIaXRUZXN0SW5mbyhjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBIaXRUZXN0UmVzdWx0KHJlc3Vs
dCkpOworfQorCitXZWJIaXRUZXN0SW5mbyYgV2ViSGl0VGVzdEluZm86Om9wZXJhdG9yPShjb25z
dCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBIaXRU
ZXN0UmVzdWx0KHJlc3VsdCkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViSGl0VGVzdElu
Zm86Om9wZXJhdG9yIEhpdFRlc3RSZXN1bHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9wcml2
YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ZGRk
NmEzMmFhZmVlYjg4ZGM4ZmQ0MWNkMjU5MDMzZmRmNTNmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwCkBAIC0wLDAg
KzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJTdXJyb3VuZGluZ1RleHQuaCIKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNp
bmNsdWRlICJTdXJyb3VuZGluZ1RleHQuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAi
VmlzaWJsZVBvc2l0aW9uLmgiCisjaW5jbHVkZSAiV2ViSGl0VGVzdEluZm8uaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJTdXJyb3VuZGlu
Z1RleHQ6OldlYlN1cnJvdW5kaW5nVGV4dCgpCit7Cit9CisKK1dlYlN1cnJvdW5kaW5nVGV4dDo6
fldlYlN1cnJvdW5kaW5nVGV4dCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KDApOworfQorCitX
ZWJTdXJyb3VuZGluZ1RleHQ6OldlYlN1cnJvdW5kaW5nVGV4dChjb25zdCBXZWJIaXRUZXN0SW5m
byYgaGl0VGVzdEluZm8sIHNpemVfdCBtYXhMZW5ndGgpCit7CisgICAgTm9kZSogbm9kZSA9IGhp
dFRlc3RJbmZvLm5vZGUoKS51bndyYXA8Tm9kZT4oKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcg
U3Vycm91bmRpbmdUZXh0KG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVz
dEluZm8ucG9pbnQoKSksIG1heExlbmd0aCkpOworfQorCitXZWJTdXJyb3VuZGluZ1RleHQ6Oldl
YlN1cnJvdW5kaW5nVGV4dChXZWJOb2RlIHRleHROb2RlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qg
bWF4TGVuZ3RoKQoreworICAgIE5vZGUqIG5vZGUgPSB0ZXh0Tm9kZS51bndyYXA8Tm9kZT4oKTsK
KyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUoKSB8fCBvZmZzZXQgPj0gbm9kZS0+
bm9kZVZhbHVlKCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJpdmF0ZS5y
ZXNldChuZXcgU3Vycm91bmRpbmdUZXh0KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbih0b1RleHQo
bm9kZSksIG9mZnNldCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIERPV05TVFJFQU0pLCBt
YXhMZW5ndGgpKTsKK30KKworV2ViU3RyaW5nIFdlYlN1cnJvdW5kaW5nVGV4dDo6Y29udGVudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudCgpOworfQorCitzaXplX3Qg
V2ViU3Vycm91bmRpbmdUZXh0Ojpwb3NpdGlvbk9mZnNldEluQ29udGVudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQoKTsKK30KKworV2Vi
UmFuZ2UgV2ViU3Vycm91bmRpbmdUZXh0OjpyYW5nZUZyb21Db250ZW50T2Zmc2V0cyhzaXplX3Qg
c3RhcnRPZmZzZXRJbkNvbnRlbnQsIHNpemVfdCBlbmRPZmZzZXRJbkNvbnRlbnQpCit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+cmFuZ2VGcm9tQ29udGVudE9mZnNldHMoc3RhcnRPZmZzZXRJbkNv
bnRlbnQsIGVuZE9mZnNldEluQ29udGVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGMwYzQzOTZl
YTViNjQ1YWIxMDM0Y2M0NWJlOTVmNGExMTczZDM1NGYuLjk5ZTM2YmJmOTA0MGU0MDllYTMyMDYz
ODBlNjI5YmRjN2ZjNDBmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAKQEAgLTM0NjcsNiArMzQ2NywzMSBAQCBXZWJHcmFwaGljc0NvbnRleHQzRCogV2Vi
Vmlld0ltcGw6OnNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCkKICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldCgpLmdldCgpKTsKIH0KIAorV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4g
V2ViVmlld0ltcGw6OmdldFRvdWNoSGlnaGxpZ2h0UXVhZHMoY29uc3QgV2ViUmFuZ2UmIHdlYlJh
bmdlLCBXZWJDb2xvciYgb3V0VGFwSGlnaGxpZ2h0Q29sb3IpCit7CisgICAgb3V0VGFwSGlnaGxp
Z2h0Q29sb3IgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRhcEhpZ2hsaWdodENvbG9yKCkucmdiKCk7
CisgICAgaWYgKHdlYlJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV2ViVmVjdG9yPFdl
YkZsb2F0UXVhZD4oKTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzdGF0aWNfY2FzdDxQ
YXNzUmVmUHRyPFJhbmdlPiA+KHdlYlJhbmdlKTsKKyAgICBOb2RlKiBub2RlID0gcmFuZ2UtPmZp
cnN0Tm9kZSgpOworICAgIGlmIChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIG91
dFRhcEhpZ2hsaWdodENvbG9yID0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGFwSGlnaGxp
Z2h0Q29sb3IoKS5yZ2IoKTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHJh
bmdlLT50ZXh0UXVhZHMocXVhZHMpOworCisgICAgRnJhbWUqIGZyYW1lID0gcGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHF1YWRzW2ldLnNldFAxKGZy
YW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1YWRzW2ldLnAx
KCkpKSk7CisgICAgICAgIHF1YWRzW2ldLnNldFAyKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9X
aW5kb3cocm91bmRlZEludFBvaW50KHF1YWRzW2ldLnAyKCkpKSk7CisgICAgICAgIHF1YWRzW2ld
LnNldFAzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1
YWRzW2ldLnAzKCkpKSk7CisgICAgICAgIHF1YWRzW2ldLnNldFA0KGZyYW1lLT52aWV3KCktPmNv
bnRlbnRzVG9XaW5kb3cocm91bmRlZEludFBvaW50KHF1YWRzW2ldLnA0KCkpKSk7CisgICAgfQor
CisgICAgcmV0dXJuIHF1YWRzOworfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5
U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0luaXRpYWxTdGF0ZSkgewogICAgIGlm
ICghcGFnZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXgg
MzA4MmQ0ZTAxMzVhZmVkYmEyNTMwODk0Y2U2MDAzYmU0MmI4NTFhZC4uNTk3ZDkyOTcyMDk4M2Vk
MmI5NzM3OTZhODVjNmMwM2VkMDg4NTg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFdlYlZpZXdJbXBsX2gKIAog
I2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xpY3kuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJG
bG9hdFF1YWQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgogI2luY2x1ZGUgInBs
YXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllclRy
ZWVWaWV3Q2xpZW50LmgiCkBAIC00NjgsNiArNDY5LDkgQEAgcHVibGljOgogCiAgICAgUGFzc093
blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29tcG9zaXRvckdyYXBoaWNzQ29udGV4
dDNEKCk7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBsaXN0IG9mIHF1YWRzIHJlcXVpcmVkIHRvIGhp
Z2hsaWdodCBhIGdpdmVuIHRleHQgcmFuZ2UuCisgICAgdmlydHVhbCBXZWJWZWN0b3I8V2ViRmxv
YXRRdWFkPiBnZXRUb3VjaEhpZ2hsaWdodFF1YWRzKGNvbnN0IFdlYlJhbmdlJiwgV2ViQ29sb3Im
IG91dFRhcEhpZ2hsaWdodENvbG9yKTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmlsaXR5
U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSwgYm9vbCk7CiAKICAgICBXZWJDb3JlOjpQb3B1
cENvbnRhaW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBvcHVwLmdl
dCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135343</attachid>
            <date>2012-04-03 09:33:08 -0700</date>
            <delta_ts>2012-04-04 08:27:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82460-20120403173307.patch</filename>
            <type>text/plain</type>
            <size>24688</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGNkY2UyYTZjOGZlOGVhYjc4MzE0NDBmNjA3YzhjNzhlYWNhMTYzMGIuLjBiNTQ5YWVmYjA2MDFm
NWNiMjk1NTJlMmJhOWUyMTc5YTI2ODRmNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMTItMDQtMDMgIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9n
cmFjaWFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVjdGl2ZWx5IHJldHJpZXZlIHRleHQg
YXJvdW5kIGEgdG91Y2hlZCBwb2ludC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBhbiBlbWJlZGRpbmcgQVBJIHRvIFdlYkNvcmUncyBT
dXJyb3VuZGluZ1RleHQsIGFkZGluZyBhbHNvCisgICAgICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBz
ZWxlY3QgYW5kIGhpZ2hsaWdodCB0aGUgcmV0cmlldmVkIHRleHQgcmFuZ2UuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAoV2Vi
RnJhbWUpOgorICAgICAgICAqIHB1YmxpYy9XZWJIaXRUZXN0SW5mby5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkhpdFRlc3RJbmZv
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86OldlYkhpdFRlc3RJbmZvKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86On5XZWJIaXRUZXN0SW5mbyk6CisgICAgICAg
ICogcHVibGljL1dlYlN1cnJvdW5kaW5nVGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6V2ViU3Vycm91bmRpbmdUZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3Vycm91bmRpbmdUZXh0Ojp+V2ViU3Vycm91bmRpbmdUZXh0KToK
KyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYlZpZXcpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBzcmMv
V2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxlY3RS
YW5nZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuaDoK
KyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisgICAgICAgICogc3JjL1dlYkhpdFRlc3RJbmZvLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0
SW5mbzo6bGlua1VSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjppbWFnZVVS
TCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjppbm5lck5vZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJIaXRUZXN0SW5mbzo6cG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJI
aXRUZXN0SW5mbzo6aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRU
ZXN0SW5mbzo6V2ViSGl0VGVzdEluZm8pOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0SW5m
bzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86Om9wZXJhdG9y
IEhpdFRlc3RSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0SW5mbzo6aW5pdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjphc3NpZ24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJIaXRUZXN0SW5mbzo6cmVzZXQpOgorICAgICAgICAqIHNyYy9XZWJTdXJyb3VuZGlu
Z1RleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN1cnJvdW5kaW5nVGV4dDo6V2ViU3Vycm91bmRpbmdUZXh0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3Vycm91bmRpbmdUZXh0Ojpjb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Vycm91
bmRpbmdUZXh0Ojpwb3NpdGlvbk9mZnNldEluQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN1cnJvdW5kaW5nVGV4dDo6cmFuZ2VGcm9tQ29udGVudE9mZnNldHMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTdXJyb3VuZGluZ1RleHQ6OmluaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdXJy
b3VuZGluZ1RleHQ6OnJlc2V0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGl0VGVzdEluZm9Gb3JXaW5kb3dQb3MpOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmdldE5vZGVUYXBI
aWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpnZXRUZXh0UXVh
ZHNGb3JSYW5nZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJW
aWV3SW1wbCk6CisKIDIwMTItMDQtMDMgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYlZpZXdJbXBsIGRvZXNuJ3Qgbm90aWZ5IHRoZSBwYWdlIHRoYXQgdGhl
IHVzZXIgaGFzIGNhbmNlbGVkIGZ1bGxzY3JlZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
aW5kZXggZTAyYTIzY2E2MTE5MTZjOTU1YWIxOWZmZTI4OGJmM2NmNTkzNDFiMy4uZDI1NTkyMTgx
OWQyMjZhMzdmMjdlYmZhZjMyYTBjNDMwZjRmNWJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMTY3LDYgKzE2Nyw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9s
b2NhdGlvblBvc2l0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2x5cGhDYWNo
ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkhpc3RvcnlJdGVtLmgnLAorICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViSGl0VGVzdEluZm8uaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJJREJDYWxsYmFja3MuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJD
dXJzb3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oJywKQEAg
LTI1Myw2ICsyNTQsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3RvcmFnZU5hbWVz
cGFjZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNr
cy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0b3JhZ2VRdW90YVR5cGUuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdXJyb3VuZGluZ1RleHQuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJTdHJlYW1UZXh0dXJlQ2xpZW50LmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVGV4dEFmZmluaXR5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
VGV4dENhc2VTZW5zaXRpdml0eS5oJywKQEAgLTU0NCw2ICs1NDYsNyBAQAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViR2x5cGhDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpc3RvcnlJdGVt
LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJIaXRUZXN0SW5mby5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViSWNvbkxvYWRpbmdDb21wbGV0aW9uSW1wbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViSWNvbkxvYWRpbmdDb21wbGV0aW9uSW1wbC5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3BwJywKQEAgLTY0NCw2ICs2NDcsNyBA
QAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZU5hbWVzcGFjZUltcGwuaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFja3NJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlUXVvdGFDYWxsYmFja3NJbXBsLmgnLAorICAgICAg
ICAgICAgICAgICdzcmMvV2ViU3Vycm91bmRpbmdUZXh0LmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJUZXh0UnVuLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGlt
aW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXggMGQ1NDA2ZDUy
MDY4MmM5NTAxNTQ2YjQwODI1MzI4NTA5NTVmNmJlNS4uNDI1NzU3MjE0YTYyYjJkODI4ZWVmYzJl
MDRkYjJiYzlmNWFmNjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZS5oCkBAIC00MzYsNiArNDM2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNlbGVj
dFJhbmdlKGNvbnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9pbnQmIGVuZCkgPSAwOwog
CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJikgPSAwOwogCiAg
ICAgLy8gUHJpbnRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkhpdFRlc3RJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJIaXRUZXN0SW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5YjcxNGI0Mjk1ZTk2MzljNTJiMWNhZGYxYjA1
ZjU3ZGM1ZWVjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJIaXRUZXN0SW5mby5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJIaXRUZXN0
SW5mb19oCisjZGVmaW5lIFdlYkhpdFRlc3RJbmZvX2gKKworI2luY2x1ZGUgIldlYk5vZGUuaCIK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQb2ludC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBy
aXZhdGVPd25QdHIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgSGl0VGVzdFJlc3VsdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKKy8vIFByb3BlcnRpZXMgb2YgYSBoaXQgdGVzdCByZXN1bHQsIGkuZS4gcHJvcGVydGllcyBv
ZiB0aGUgbm9kZXMgYXQgYSBnaXZlbiBwb2ludAorLy8gKHRoZSBoaXQgcG9pbnQpIG9uIHRoZSBw
YWdlLiBCb3RoIHVybHMgbWF5IGJlIHBvcHVsYXRlZCBhdCB0aGUgc2FtZSB0aW1lLCBmb3IKKy8v
IGV4YW1wbGUgaW4gdGhlIGluc3RhbmNlIG9mIGFuIDxpbWc+IGluc2lkZSBhbiA8YT4uCitjbGFz
cyBXZWJIaXRUZXN0SW5mbyB7CitwdWJsaWM6CisgICAgV2ViSGl0VGVzdEluZm8oKSB7IGluaXQo
KTsgfQorICAgIFdlYkhpdFRlc3RJbmZvKGNvbnN0IFdlYkhpdFRlc3RJbmZvJiBpbmZvKSB7IGFz
c2lnbihpbmZvKTsgfQorICAgIH5XZWJIaXRUZXN0SW5mbygpIHsgcmVzZXQoKTsgfQorCisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJIaXRUZXN0SW5mbyYpOworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworCisgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0
aGUgbGluayByZXR1cm5lZCBieSB0aGUgaGl0IHRlc3QuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJV
UkwgbGlua1VSTCgpIGNvbnN0OworCisgICAgLy8gVGhlIGFic29sdXRlIFVSTCBvZiB0aGUgaW1h
Z2UgcmV0dXJuZWQgYnkgdGhlIGhpdCB0ZXN0LgorICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIGlt
YWdlVVJMKCkgY29uc3Q7CisKKyAgICAvLyBUaGUgaW5uZXIgbm9kZSBvZiB0aGUgdGVzdCByZXN1
bHQuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJOb2RlIGlubmVyTm9kZSgpIGNvbnN0OworCisgICAg
Ly8gUG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIGhpdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlBv
aW50IHBvaW50KCkgY29uc3Q7CisKKyAgICAvLyBUcnVlIGlmZiB0aGUgaGl0IHdhcyBvbiBhbiBl
ZGl0YWJsZSBmaWVsZCBvciBub2RlLgorICAgIFdFQktJVF9FWFBPUlQgYm9vbCBpc0NvbnRlbnRF
ZGl0YWJsZSgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViSGl0
VGVzdEluZm8oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOworICAgIFdlYkhpdFRlc3RJ
bmZvJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYpOworICAgIG9wZXJh
dG9yIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQoKSBjb25zdDsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXQoKTsKKworICAgIFdlYlByaXZhdGVPd25QdHI8
V2ViQ29yZTo6SGl0VGVzdFJlc3VsdD4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViU3Vycm91bmRpbmdUZXh0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJTdXJyb3VuZGluZ1RleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTE2NzAwMzg5YzdkZWFjNzIyNTUxMWNl
ZTlkMDIzMjY1M2E1OGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU3Vycm91bmRpbmdUZXh0LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJTdXJyb3VuZGluZ1RleHRfaAorI2RlZmluZSBXZWJTdXJyb3VuZGlu
Z1RleHRfaAorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorI2luY2x1ZGUgIldlYlJhbmdlLmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViUHJpdmF0ZU93blB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTdXJyb3VuZGluZ1Rl
eHQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJIaXRUZXN0SW5mbzsKKwor
Y2xhc3MgV2ViU3Vycm91bmRpbmdUZXh0IHsKK3B1YmxpYzoKKyAgICBXZWJTdXJyb3VuZGluZ1Rl
eHQoKSB7IGluaXQoKTsgfQorICAgIH5XZWJTdXJyb3VuZGluZ1RleHQoKSB7IHJlc2V0KCk7IH0K
KworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworCisgICAgLy8gQ3JlYXRlcyBhIG5l
dyB0ZXh0IGNvbnRlbnQgd2Fsa2VyIGNlbnRlcmVkIGluIHRoZSBwb3NpdGlvbiBkZXNjcmliZWQg
YnkgdGhlIGhpdCB0ZXN0LgorICAgIC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29udGVu
dHMgcmV0cmlldmVkIGJ5IHRoZSB3YWxrZXIgaXMgZGVmaW5lZCBieSBtYXhMZW5ndGguCisgICAg
V0VCS0lUX0VYUE9SVCBXZWJTdXJyb3VuZGluZ1RleHQoY29uc3QgV2ViSGl0VGVzdEluZm8mLCBz
aXplX3QgbWF4TGVuZ3RoKTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgdGV4dCBjb250ZW50IHdh
bGtlciBjZW50ZXJlZCBpbiB0aGUgc2VsZWN0ZWQgb2Zmc2V0IG9mIHRoZSBnaXZlbiB0ZXh0IG5v
ZGUuCisgICAgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBjb250ZW50cyByZXRyaWV2ZWQg
YnkgdGhlIHdhbGtlciBpcyBkZWZpbmVkIGJ5IG1heExlbmd0aC4KKyAgICBXRUJLSVRfRVhQT1JU
IFdlYlN1cnJvdW5kaW5nVGV4dChXZWJOb2RlIHRleHROb2RlLCBzaXplX3Qgb2Zmc2V0LCBzaXpl
X3QgbWF4TGVuZ3RoKTsKKworICAgIC8vIFRleHQgY29udGVudCByZXRyaWV2ZWQgYnkgdGhlIHdh
bGtlci4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBjb250ZW50KCkgY29uc3Q7CisKKyAg
ICAvLyBQb3NpdGlvbiBvZiB0aGUgaW5pdGlhbCB0ZXh0IG5vZGUgb2Zmc2V0IGluIHRoZSBjb250
ZW50IHN0cmluZy4KKyAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBwb3NpdGlvbk9mZnNldEluQ29u
dGVudCgpIGNvbnN0OworCisgICAgLy8gQ29udmVydCBzdGFydC9lbmQgcG9zaXRpb25zIGluIHRo
ZSBjb250ZW50IHRleHQgc3RyaW5nIGludG8gYSBXZWJLaXQgdGV4dCByYW5nZS4KKyAgICBXRUJL
SVRfRVhQT1JUIFdlYlJhbmdlIHJhbmdlRnJvbUNvbnRlbnRPZmZzZXRzKHNpemVfdCBzdGFydE9m
ZnNldEluQ29udGVudCwgc2l6ZV90IGVuZE9mZnNldEluQ29udGVudCk7CisKK3Byb3RlY3RlZDoK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdCgpOworCisgICAgV2ViUHJpdmF0ZU93blB0cjxX
ZWJDb3JlOjpTdXJyb3VuZGluZ1RleHQ+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApp
bmRleCA3MjlmNTE2Nzc5ZTE3Nzg5ZGViOGQ3ZTllMTc0MDAzOTY5Nzk5NWRlLi41OGYyZDVhZWQw
YTkxMDEwMzJkZTQ4NDY3YzVjN2JkYjJmM2U1NGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVmlldy5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViRHJhZ09wZXJh
dGlvbi5oIgogI2luY2x1ZGUgIldlYlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlICJX
ZWJXaWRnZXQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIK
IApAQCAtNTAsNiArNTEsNyBAQCBjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdl
Yk5vZGU7CiBjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBlcm1pc3Npb25DbGllbnQ7
CitjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xhc3MgV2ViU3BlbGxDaGVj
a0NsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsKQEAgLTQzNSw2ICs0MzcsMTcgQEAgcHVibGljOgog
ICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yKSBidXQgbXVzdCBiZSBjb21wbGV0ZWQgYnkgdGhlIFdl
YlZpZXcuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZmVyQWN0aXZlV2hlZWxGbGluZ0FuaW1hdGlv
bihjb25zdCBXZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyYpID0gMDsKIAorICAgIC8vIFRv
dWNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgLy8gUmV0dXJucyB0aGUgaGl0IHRlc3QgcmVzdWx0IGZvciBhIGdp
dmVuIHBvaW50LgorICAgIHZpcnR1YWwgV2ViSGl0VGVzdEluZm8gaGl0VGVzdEluZm9Gb3JXaW5k
b3dQb3MoY29uc3QgV2ViUG9pbnQmKSA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSB0YXAgaGln
aGxpZ2h0IGNvbG9yIGZvciBhIG5vZGUuCisgICAgdmlydHVhbCBXZWJDb2xvciBnZXROb2RlVGFw
SGlnaGxpZ2h0Q29sb3IoY29uc3QgV2ViTm9kZSYpID0gMDsKKworICAgIC8vIFJldHVybnMgdGhl
IGxpc3Qgb2YgcXVhZHMgY292ZXJpbmcgdGhlIHRleHQgb2YgYSBnaXZlbiByYW5nZS4KKyAgICB2
aXJ0dWFsIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IGdldFRleHRRdWFkc0ZvclJhbmdlKGNvbnN0
IFdlYlJhbmdlJikgPSAwOworCiAgICAgLy8gVmlzaWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gU2V0cyB0
aGUgdmlzaWJpbGl0eSBvZiB0aGUgV2ViVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViV2lkZ2V0LmgKaW5kZXggY2JjZjc0NjQxYWM5MTJmMmYzYzgxMWQ5MjAyODIzZGZlZTk2
MWRmMS4uM2QwOGY2NDkyMDgxNTM1YjI5OGU3NWRmODdkNGY1YWE5NmYxYjZhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNk
ZWZpbmUgV2ViV2lkZ2V0X2gKIAogI2luY2x1ZGUgIldlYkNvbXBvc2l0aW9uVW5kZXJsaW5lLmgi
CisjaW5jbHVkZSAiV2ViSGl0VGVzdEluZm8uaCIKICNpbmNsdWRlICJXZWJUZXh0SW5wdXRUeXBl
LmgiCiAjaW5jbHVkZSAiV2ViVGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YkNhbnZhcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAK
aW5kZXggYjdhMzFmZmYxNTAxNDViMTBhZmI0MDY3NzIyOTdmNGI0MTZjZWEwYS4uZWRhN2RiNmI5
OTgwZGI2NzhjNjQzNzRkODEzMjBlMTE2MzQxMGNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCkBAIC0xMzgyLDYgKzEzODIsMTMgQEAgdm9pZCBXZWJG
cmFtZUltcGw6OnNlbGVjdFJhbmdlKGNvbnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9p
bnQmIGVuZCkKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxl
Y3Rpb24sIENoYXJhY3RlckdyYW51bGFyaXR5KTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6OnNl
bGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJiB3ZWJSYW5nZSkKK3sKKyAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxSYW5nZT4gPih3ZWJSYW5nZSk7CisgICAg
aWYgKHJhbmdlKQorICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0ZWRSYW5n
ZShyYW5nZS5nZXQoKSwgV2ViQ29yZTo6VlBfREVGQVVMVF9BRkZJTklUWSwgZmFsc2UpOworfQor
CiBWaXNpYmxlUG9zaXRpb24gV2ViRnJhbWVJbXBsOjp2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQ
b2ludChjb25zdCBXZWJQb2ludCYgcG9pbnQpCiB7CiAgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRl
c3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6Ok1vdmU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDcwMGY2ZWE0MDM3ZTdiMjhiOTBi
ZGM4Zjk0OTk0YzhhZWU5YTMxZjIuLmY3ZGIzZTQzNzcyYTg1YTNjMDRhYzEwMjE2NTc0MmE1ZmQ5
ZDU0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCkBAIC0x
NjUsNiArMTY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViU3RyaW5nIHNlbGVjdGlvbkFz
TWFya3VwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNlbGVjdFdvcmRBcm91bmRDYXJldCgp
OwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJQb2ludCYgc3RhcnQsIGNv
bnN0IFdlYlBvaW50JiBlbmQpOworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RSYW5nZShjb25zdCBX
ZWJSYW5nZSYpOwogICAgIHZpcnR1YWwgaW50IHByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFn
ZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJOb2RlJiBjb25zdHJh
aW5Ub05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpbnRlckRQSSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhpdFRlc3RJbmZvLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhpdFRlc3RJbmZvLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zNDIwMmRiYjNmYTY2NzliNDg0N2M0YzAyNjUxYTUyNWJhNDc2YjM5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSGl0VGVzdEluZm8uY3BwCkBAIC0w
LDAgKzEsOTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6Cisq
CisqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RJbmZv
LmgiCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVVJMIFdlYkhpdFRlc3RJbmZvOjps
aW5rVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hYnNvbHV0ZUxpbmtVUkwo
KTsKK30KKworV2ViVVJMIFdlYkhpdFRlc3RJbmZvOjppbWFnZVVSTCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+YWJzb2x1dGVJbWFnZVVSTCgpOworfQorCitXZWJOb2RlIFdlYkhp
dFRlc3RJbmZvOjppbm5lck5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJp
dmF0ZS0+aW5uZXJOb2RlKCkpOworfQorCitXZWJQb2ludCBXZWJIaXRUZXN0SW5mbzo6cG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBXZWJQb2ludChtX3ByaXZhdGUtPmxvY2FsUG9pbnQoKSk7
Cit9CisKK2Jvb2wgV2ViSGl0VGVzdEluZm86OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworfQorCitXZWJIaXRU
ZXN0SW5mbzo6V2ViSGl0VGVzdEluZm8oY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQorewor
ICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgSGl0VGVzdFJlc3VsdChyZXN1bHQpKTsKK30KKworV2Vi
SGl0VGVzdEluZm8mIFdlYkhpdFRlc3RJbmZvOjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0KQoreworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgSGl0VGVzdFJlc3VsdChyZXN1
bHQpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkhpdFRlc3RJbmZvOjpvcGVyYXRvciBI
aXRUZXN0UmVzdWx0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fcHJpdmF0ZS5nZXQoKTsKK30K
Kwordm9pZCBXZWJIaXRUZXN0SW5mbzo6aW5pdCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KG5l
dyBIaXRUZXN0UmVzdWx0KCkpOworfQorCit2b2lkIFdlYkhpdFRlc3RJbmZvOjphc3NpZ24oY29u
c3QgV2ViSGl0VGVzdEluZm8mIGluZm8pCit7CisgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBIaXRU
ZXN0UmVzdWx0KGluZm8pKTsKK30KKwordm9pZCBXZWJIaXRUZXN0SW5mbzo6cmVzZXQoKQorewor
ICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3Vycm91bmRpbmdUZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZGVhYWQ3ZjczZjRlZDNiODY5NWZmODQ5ZGVkNmYxZTMzZGM0MmQwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3Vycm91bmRpbmdUZXh0
LmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViU3Vycm91bmRpbmdUZXh0LmgiCisKKyNpbmNsdWRlICJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiU3Vycm91bmRpbmdUZXh0LmgiCisjaW5jbHVkZSAiVGV4dC5o
IgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RJbmZv
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViU3Vycm91bmRpbmdUZXh0OjpXZWJTdXJyb3VuZGluZ1RleHQoY29uc3QgV2ViSGl0VGVzdElu
Zm8mIGhpdFRlc3RJbmZvLCBzaXplX3QgbWF4TGVuZ3RoKQoreworICAgIE5vZGUqIG5vZGUgPSBo
aXRUZXN0SW5mby5pbm5lck5vZGUoKS51bndyYXA8Tm9kZT4oKTsKKyAgICBpZiAoIW5vZGUgfHwg
IW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJpdmF0ZS5yZXNl
dChuZXcgU3Vycm91bmRpbmdUZXh0KG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQo
aGl0VGVzdEluZm8ucG9pbnQoKSksIG1heExlbmd0aCkpOworfQorCitXZWJTdXJyb3VuZGluZ1Rl
eHQ6OldlYlN1cnJvdW5kaW5nVGV4dChXZWJOb2RlIHRleHROb2RlLCBzaXplX3Qgb2Zmc2V0LCBz
aXplX3QgbWF4TGVuZ3RoKQoreworICAgIE5vZGUqIG5vZGUgPSB0ZXh0Tm9kZS51bndyYXA8Tm9k
ZT4oKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUoKSB8fCBvZmZzZXQgPj0g
bm9kZS0+bm9kZVZhbHVlKCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJp
dmF0ZS5yZXNldChuZXcgU3Vycm91bmRpbmdUZXh0KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbih0
b1RleHQobm9kZSksIG9mZnNldCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIERPV05TVFJF
QU0pLCBtYXhMZW5ndGgpKTsKK30KKworV2ViU3RyaW5nIFdlYlN1cnJvdW5kaW5nVGV4dDo6Y29u
dGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudCgpOworfQorCitz
aXplX3QgV2ViU3Vycm91bmRpbmdUZXh0Ojpwb3NpdGlvbk9mZnNldEluQ29udGVudCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQoKTsKK30K
KworV2ViUmFuZ2UgV2ViU3Vycm91bmRpbmdUZXh0OjpyYW5nZUZyb21Db250ZW50T2Zmc2V0cyhz
aXplX3Qgc3RhcnRPZmZzZXRJbkNvbnRlbnQsIHNpemVfdCBlbmRPZmZzZXRJbkNvbnRlbnQpCit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cmFuZ2VGcm9tQ29udGVudE9mZnNldHMoc3RhcnRPZmZz
ZXRJbkNvbnRlbnQsIGVuZE9mZnNldEluQ29udGVudCk7Cit9CisKK3ZvaWQgV2ViU3Vycm91bmRp
bmdUZXh0Ojppbml0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3IFN1cnJvdW5kaW5nVGV4
dChWaXNpYmxlUG9zaXRpb24oKSwgMCkpOworfQorCit2b2lkIFdlYlN1cnJvdW5kaW5nVGV4dDo6
cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXgg
ZjkwNmQwZDA4YWM1YTAyODY0NGMwMjMzMzE1YjNkZWM5NzI5YzMwNS4uNTA0N2ZkZTVkZDUyNjdl
YWU1MWIzZGIzNTU3MjVkMjJkMmViNWYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcApAQCAtMzUwNCw2ICszNTA0LDQ2IEBAIFdlYkdyYXBoaWNzQ29udGV4
dDNEKiBXZWJWaWV3SW1wbDo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKQogICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCkuZ2V0KCkpOwogfQogCitXZWJIaXRUZXN0SW5mbyBX
ZWJWaWV3SW1wbDo6aGl0VGVzdEluZm9Gb3JXaW5kb3dQb3MoY29uc3QgV2ViUG9pbnQmIHBvcykK
K3sKKyAgICByZXR1cm4gaGl0VGVzdFJlc3VsdEZvcldpbmRvd1Bvcyhwb3MpOworfQorCitXZWJD
b2xvciBXZWJWaWV3SW1wbDo6Z2V0Tm9kZVRhcEhpZ2hsaWdodENvbG9yKGNvbnN0IFdlYk5vZGUm
IHdlYk5vZGUpCit7CisgICAgV2ViQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IgPSBSZW5kZXJTdHls
ZTo6aW5pdGlhbFRhcEhpZ2hsaWdodENvbG9yKCkucmdiKCk7CisgICAgaWYgKHdlYk5vZGUuaXNO
dWxsKCkpCisgICAgICByZXR1cm4gdGFwSGlnaGxpZ2h0Q29sb3I7CisKKyAgICBjb25zdCBOb2Rl
KiBub2RlID0gd2ViTm9kZS5jb25zdFVud3JhcDxOb2RlPigpOworICAgIGlmIChub2RlICYmIG5v
ZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHRhcEhpZ2hsaWdodENvbG9yID0gbm9kZS0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+dGFwSGlnaGxpZ2h0Q29sb3IoKS5yZ2IoKTsKKworICAgIHJldHVybiB0
YXBIaWdobGlnaHRDb2xvcjsKK30KKworV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4gV2ViVmlld0lt
cGw6OmdldFRleHRRdWFkc0ZvclJhbmdlKGNvbnN0IFdlYlJhbmdlJiB3ZWJSYW5nZSkKK3sKKyAg
ICBpZiAod2ViUmFuZ2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXZWJWZWN0b3I8V2ViRmxv
YXRRdWFkPigpOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHN0YXRpY19jYXN0PFBhc3NS
ZWZQdHI8UmFuZ2U+ID4od2ViUmFuZ2UpOworICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdlLT5vd25l
ckRvY3VtZW50KCkgPyByYW5nZS0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpIDogMDsKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4oKTsKKwor
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHJhbmdlLT50ZXh0UXVhZHMocXVhZHMp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBxdWFkc1tpXS5zZXRQMShmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5k
ZWRJbnRQb2ludChxdWFkc1tpXS5wMSgpKSkpOworICAgICAgICBxdWFkc1tpXS5zZXRQMihmcmFt
ZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5wMigp
KSkpOworICAgICAgICBxdWFkc1tpXS5zZXRQMyhmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KHJvdW5kZWRJbnRQb2ludChxdWFkc1tpXS5wMygpKSkpOworICAgICAgICBxdWFkc1tpXS5z
ZXRQNChmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJvdW5kZWRJbnRQb2ludChxdWFk
c1tpXS5wNCgpKSkpOworICAgIH0KKworICAgIHJldHVybiBxdWFkczsKK30KKwogdm9pZCBXZWJW
aWV3SW1wbDo6c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJp
bGl0eVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNJ
bml0aWFsU3RhdGUpIHsKICAgICBpZiAoIXBhZ2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCmluZGV4IDdmNzdkZWNiMzdhMjA5MDZhMGEwOGE4Y2RmMGM3ZDRmYzg4
NjEyYWMuLmE5ZjZkMDY3YTVmMTU3Yzg4ZGI2N2Y2MjI5YTNmZDUzMGRhN2FiN2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzIsNiArMzIsNyBAQAogI2Rl
ZmluZSBXZWJWaWV3SW1wbF9oCiAKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uUG9saWN5LmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
TGF5ZXIuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgiCiAjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIgpAQCAtNDgzLDYgKzQ4NCwxNSBA
QCBwdWJsaWM6CiAKICAgICBQYXNzT3duUHRyPFdlYkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVD
b21wb3NpdG9yR3JhcGhpY3NDb250ZXh0M0QoKTsKIAorICAgIC8vIFJldHVybnMgdGhlIGhpdCB0
ZXN0IHJlc3VsdCBmb3IgYSBnaXZlbiBwb2ludC4KKyAgICB2aXJ0dWFsIFdlYkhpdFRlc3RJbmZv
IGhpdFRlc3RJbmZvRm9yV2luZG93UG9zKGNvbnN0IFdlYlBvaW50Jik7CisKKyAgICAvLyBSZXR1
cm5zIHRoZSB0YXAgaGlnaGxpZ2h0IGNvbG9yIGZvciBhIG5vZGUuCisgICAgdmlydHVhbCBXZWJD
b2xvciBnZXROb2RlVGFwSGlnaGxpZ2h0Q29sb3IoY29uc3QgV2ViTm9kZSYpOworCisgICAgLy8g
UmV0dXJucyB0aGUgbGlzdCBvZiBxdWFkcyBjb3ZlcmluZyB0aGUgdGV4dCBvZiBhIGdpdmVuIHJh
bmdlLgorICAgIHZpcnR1YWwgV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4gZ2V0VGV4dFF1YWRzRm9y
UmFuZ2UoY29uc3QgV2ViUmFuZ2UmKTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmlsaXR5
U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSwgYm9vbCk7CiAKICAgICBXZWJDb3JlOjpQb3B1
cENvbnRhaW5lciogc2VsZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBvcHVwLmdl
dCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135597</attachid>
            <date>2012-04-04 08:27:48 -0700</date>
            <delta_ts>2012-04-17 12:04:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82460-20120404162747.patch</filename>
            <type>text/plain</type>
            <size>24923</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGNkY2UyYTZjOGZlOGVhYjc4MzE0NDBmNjA3YzhjNzhlYWNhMTYzMGIuLmE4Njg4MzY5YWE5Y2Jl
NzRmYzQyMzFkZDhlYWEzYWFlNmZkNTZmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMTItMDQtMDQgIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9n
cmFjaWFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVjdGl2ZWx5IHJldHJpZXZlIHRleHQg
YXJvdW5kIGEgdG91Y2hlZCBwb2ludC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBhbiBlbWJlZGRpbmcgQVBJIHRvIFdlYkNvcmUncyBT
dXJyb3VuZGluZ1RleHQsIGFkZGluZyBhbHNvCisgICAgICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBz
ZWxlY3QgYW5kIGhpZ2hsaWdodCB0aGUgcmV0cmlldmVkIHRleHQgcmFuZ2UuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAoV2Vi
RnJhbWUpOgorICAgICAgICAqIHB1YmxpYy9XZWJIaXRUZXN0SW5mby5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkhpdFRlc3RJbmZv
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86OldlYkhpdFRlc3RJbmZvKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86On5XZWJIaXRUZXN0SW5mbyk6CisgICAgICAg
ICogcHVibGljL1dlYlN1cnJvdW5kaW5nVGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6V2ViU3Vycm91bmRpbmdUZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3Vycm91bmRpbmdUZXh0Ojp+V2ViU3Vycm91bmRpbmdUZXh0KToK
KyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYlZpZXcpOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBzcmMv
V2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxlY3RS
YW5nZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuaDoK
KyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisgICAgICAgICogc3JjL1dlYkhpdFRlc3RJbmZvLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0
SW5mbzo6bGlua1VSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjppbWFnZVVS
TCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjppbm5lck5vZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJIaXRUZXN0SW5mbzo6bG9jYWxQb2ludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkhpdFRlc3RJbmZvOjppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkhpdFRlc3RJbmZvOjpXZWJIaXRUZXN0SW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRl
c3RJbmZvOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0SW5mbzo6b3Bl
cmF0b3IgSGl0VGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpp
bml0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdEluZm86OmFzc2lnbik6CisgICAgICAg
IChXZWJLaXQ6OldlYkhpdFRlc3RJbmZvOjpyZXNldCk6CisgICAgICAgICogc3JjL1dlYlN1cnJv
dW5kaW5nVGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViU3Vycm91bmRpbmdUZXh0OjpXZWJTdXJyb3VuZGluZ1RleHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTdXJyb3VuZGluZ1RleHQ6OmNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
dXJyb3VuZGluZ1RleHQ6OnBvc2l0aW9uT2Zmc2V0SW5Db250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViU3Vycm91bmRpbmdUZXh0OjpyYW5nZUZyb21Db250ZW50T2Zmc2V0cyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlN1cnJvdW5kaW5nVGV4dDo6aW5pdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN1cnJvdW5kaW5nVGV4dDo6cmVzZXQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoaXRUZXN0SW5mb0ZvcldpbmRvd1Bvcyk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0Tm9k
ZVRhcEhpZ2hsaWdodENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmdldFRl
eHRRdWFkc0ZvclJhbmdlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAg
KFdlYlZpZXdJbXBsKToKKwogMjAxMi0wNC0wMyAgQmlsbCBCdWRnZSAgPGJidWRnZUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgV2ViVmlld0ltcGwgZG9lc24ndCBub3RpZnkgdGhlIHBhZ2UgdGhh
dCB0aGUgdXNlciBoYXMgY2FuY2VsZWQgZnVsbHNjcmVlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCBlMDJhMjNjYTYxMTkxNmM5NTVhYjE5ZmZlMjg4YmYzY2Y1OTM0MWIzLi5kMjU1
OTIxODE5ZDIyNmEzN2YyN2ViZmFmMzJhMGM0MzBmNGY1YmUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCkBAIC0xNjcsNiArMTY3LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dl
Ykdlb2xvY2F0aW9uUG9zaXRpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHbHlw
aENhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSGlzdG9yeUl0ZW0uaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIaXRUZXN0SW5mby5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYklEQkNhbGxiYWNrcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YklEQkN1cnNvci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYklEQkRhdGFiYXNlLmgn
LApAQCAtMjUzLDYgKzI1NCw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdl
TmFtZXNwYWNlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3RvcmFnZVF1b3RhQ2Fs
bGJhY2tzLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3RvcmFnZVF1b3RhVHlwZS5o
JywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlN1cnJvdW5kaW5nVGV4dC5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYlN0cmVhbVRleHR1cmVDbGllbnQuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJUZXh0QWZmaW5pdHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJUZXh0Q2FzZVNlbnNpdGl2aXR5LmgnLApAQCAtNTQ0LDYgKzU0Niw3IEBACiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJHbHlwaENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSGlzdG9y
eUl0ZW0uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkhpdFRlc3RJbmZvLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJJY29uTG9hZGluZ0NvbXBsZXRpb25JbXBsLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJJY29uTG9hZGluZ0NvbXBsZXRpb25JbXBsLmgnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5jcHAnLApAQCAtNjQ0LDYgKzY0
Nyw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlTmFtZXNwYWNlSW1wbC5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlRleHRSdW4uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTExv
YWRUaW1pbmcuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJl
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAppbmRleCAwZDU0
MDZkNTIwNjgyYzk1MDE1NDZiNDA4MjUzMjg1MDk1NWY2YmU1Li40MjU3NTcyMTRhNjJiMmQ4Mjhl
ZWZjMmUwNGRiMmJjOWY1YWY2MzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkZyYW1lLmgKQEAgLTQzNiw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2VsZWN0UmFuZ2UoY29uc3QgV2ViUG9pbnQmIHN0YXJ0LCBjb25zdCBXZWJQb2ludCYgZW5kKSA9
IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmKSA9IDA7
CiAKICAgICAvLyBQcmludGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSGl0VGVzdEluZm8uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkhpdFRlc3RJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjk1Y2MyNThkZTRmNGIwNWY5MmE1MTEx
MDk5NjViMjBhNjFhOWQ5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkhpdFRlc3RJbmZvLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkhp
dFRlc3RJbmZvX2gKKyNkZWZpbmUgV2ViSGl0VGVzdEluZm9faAorCisjaW5jbHVkZSAiV2ViTm9k
ZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0v
V2ViUHJpdmF0ZU93blB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworLy8gUHJvcGVydGllcyBvZiBhIGhpdCB0ZXN0IHJlc3VsdCwgaS5lLiBwcm9wZXJ0
aWVzIG9mIHRoZSBub2RlcyBhdCBhIGdpdmVuIHBvaW50CisvLyAodGhlIGhpdCBwb2ludCkgb24g
dGhlIHBhZ2UuIEJvdGggdXJscyBtYXkgYmUgcG9wdWxhdGVkIGF0IHRoZSBzYW1lIHRpbWUsIGZv
cgorLy8gZXhhbXBsZSBpbiB0aGUgaW5zdGFuY2Ugb2YgYW4gPGltZz4gaW5zaWRlIGFuIDxhPi4K
K2NsYXNzIFdlYkhpdFRlc3RJbmZvIHsKK3B1YmxpYzoKKyAgICBXZWJIaXRUZXN0SW5mbygpIHsg
aW5pdCgpOyB9CisgICAgV2ViSGl0VGVzdEluZm8oY29uc3QgV2ViSGl0VGVzdEluZm8mIGluZm8p
IHsgYXNzaWduKGluZm8pOyB9CisgICAgfldlYkhpdFRlc3RJbmZvKCkgeyByZXNldCgpOyB9CisK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkhpdFRlc3RJbmZvJik7Cisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisKKyAgICAvLyBUaGUgYWJzb2x1dGUgVVJM
IG9mIHRoZSBsaW5rIHJldHVybmVkIGJ5IHRoZSBoaXQgdGVzdC4KKyAgICBXRUJLSVRfRVhQT1JU
IFdlYlVSTCBsaW5rVVJMKCkgY29uc3Q7CisKKyAgICAvLyBUaGUgYWJzb2x1dGUgVVJMIG9mIHRo
ZSBpbWFnZSByZXR1cm5lZCBieSB0aGUgaGl0IHRlc3QuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJV
UkwgaW1hZ2VVUkwoKSBjb25zdDsKKworICAgIC8vIFRoZSBpbm5lciBub2RlIG9mIHRoZSB0ZXN0
IHJlc3VsdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYk5vZGUgaW5uZXJOb2RlKCkgY29uc3Q7CisK
KyAgICAvLyBQb2ludCBjb29yZGluYXRlcyBvZiB0aGUgaGl0LgorICAgIFdFQktJVF9FWFBPUlQg
V2ViUG9pbnQgbG9jYWxQb2ludCgpIGNvbnN0OworCisgICAgLy8gVHJ1ZSBpZmYgdGhlIGhpdCB3
YXMgb24gYW4gZWRpdGFibGUgZmllbGQgb3Igbm9kZS4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wg
aXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgor
ICAgIFdlYkhpdFRlc3RJbmZvKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmKTsKKyAgICBX
ZWJIaXRUZXN0SW5mbyYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmKTsK
KyAgICBvcGVyYXRvciBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0KCkgY29uc3Q7CisjZW5kaWYKKwor
cHJvdGVjdGVkOgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0KCk7CisKKyAgICBXZWJQcml2
YXRlT3duUHRyPFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ+IG1fcHJpdmF0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlN1cnJvdW5kaW5nVGV4dC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU3Vycm91bmRpbmdUZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkxNjcwMDM4OWM3ZGVh
YzcyMjU1MTFjZWU5ZDAyMzI2NTNhNThhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlN1cnJvdW5kaW5nVGV4dC5oCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3Vycm91bmRpbmdUZXh0X2gKKyNkZWZpbmUgV2Vi
U3Vycm91bmRpbmdUZXh0X2gKKworI2luY2x1ZGUgIldlYk5vZGUuaCIKKyNpbmNsdWRlICJXZWJS
YW5nZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlByaXZhdGVPd25QdHIuaCIKKyNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3Vy
cm91bmRpbmdUZXh0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSGl0VGVz
dEluZm87CisKK2NsYXNzIFdlYlN1cnJvdW5kaW5nVGV4dCB7CitwdWJsaWM6CisgICAgV2ViU3Vy
cm91bmRpbmdUZXh0KCkgeyBpbml0KCk7IH0KKyAgICB+V2ViU3Vycm91bmRpbmdUZXh0KCkgeyBy
ZXNldCgpOyB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworICAgIC8vIENy
ZWF0ZXMgYSBuZXcgdGV4dCBjb250ZW50IHdhbGtlciBjZW50ZXJlZCBpbiB0aGUgcG9zaXRpb24g
ZGVzY3JpYmVkIGJ5IHRoZSBoaXQgdGVzdC4KKyAgICAvLyBUaGUgbWF4aW11bSBsZW5ndGggb2Yg
dGhlIGNvbnRlbnRzIHJldHJpZXZlZCBieSB0aGUgd2Fsa2VyIGlzIGRlZmluZWQgYnkgbWF4TGVu
Z3RoLgorICAgIFdFQktJVF9FWFBPUlQgV2ViU3Vycm91bmRpbmdUZXh0KGNvbnN0IFdlYkhpdFRl
c3RJbmZvJiwgc2l6ZV90IG1heExlbmd0aCk7CisKKyAgICAvLyBDcmVhdGVzIGEgbmV3IHRleHQg
Y29udGVudCB3YWxrZXIgY2VudGVyZWQgaW4gdGhlIHNlbGVjdGVkIG9mZnNldCBvZiB0aGUgZ2l2
ZW4gdGV4dCBub2RlLgorICAgIC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29udGVudHMg
cmV0cmlldmVkIGJ5IHRoZSB3YWxrZXIgaXMgZGVmaW5lZCBieSBtYXhMZW5ndGguCisgICAgV0VC
S0lUX0VYUE9SVCBXZWJTdXJyb3VuZGluZ1RleHQoV2ViTm9kZSB0ZXh0Tm9kZSwgc2l6ZV90IG9m
ZnNldCwgc2l6ZV90IG1heExlbmd0aCk7CisKKyAgICAvLyBUZXh0IGNvbnRlbnQgcmV0cmlldmVk
IGJ5IHRoZSB3YWxrZXIuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgY29udGVudCgpIGNv
bnN0OworCisgICAgLy8gUG9zaXRpb24gb2YgdGhlIGluaXRpYWwgdGV4dCBub2RlIG9mZnNldCBp
biB0aGUgY29udGVudCBzdHJpbmcuCisgICAgV0VCS0lUX0VYUE9SVCBzaXplX3QgcG9zaXRpb25P
ZmZzZXRJbkNvbnRlbnQoKSBjb25zdDsKKworICAgIC8vIENvbnZlcnQgc3RhcnQvZW5kIHBvc2l0
aW9ucyBpbiB0aGUgY29udGVudCB0ZXh0IHN0cmluZyBpbnRvIGEgV2ViS2l0IHRleHQgcmFuZ2Uu
CisgICAgV0VCS0lUX0VYUE9SVCBXZWJSYW5nZSByYW5nZUZyb21Db250ZW50T2Zmc2V0cyhzaXpl
X3Qgc3RhcnRPZmZzZXRJbkNvbnRlbnQsIHNpemVfdCBlbmRPZmZzZXRJbkNvbnRlbnQpOworCitw
cm90ZWN0ZWQ6CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXQoKTsKKworICAgIFdlYlByaXZh
dGVPd25QdHI8V2ViQ29yZTo6U3Vycm91bmRpbmdUZXh0PiBtX3ByaXZhdGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJWaWV3LmgKaW5kZXggNzI5ZjUxNjc3OWUxNzc4OWRlYjhkN2U5ZTE3NDAwMzk2OTc5OTVkZS4u
NThmMmQ1YWVkMGE5MTAxMDMyZGU0ODQ2N2M1YzdiZGIyZjNlNTRhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldl
YkRyYWdPcGVyYXRpb24uaCIKICNpbmNsdWRlICJXZWJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCiAj
aW5jbHVkZSAiV2ViV2lkZ2V0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRRdWFkLmgi
CiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
VmVjdG9yLmgiCiAKQEAgLTUwLDYgKzUxLDcgQEAgY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7
CiBjbGFzcyBXZWJOb2RlOwogY2xhc3MgV2ViUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJQZXJtaXNz
aW9uQ2xpZW50OworY2xhc3MgV2ViUmFuZ2U7CiBjbGFzcyBXZWJTZXR0aW5nczsKIGNsYXNzIFdl
YlNwZWxsQ2hlY2tDbGllbnQ7CiBjbGFzcyBXZWJTdHJpbmc7CkBAIC00MzUsNiArNDM3LDE3IEBA
IHB1YmxpYzoKICAgICAvLyBieSB0aGUgY29tcG9zaXRvcikgYnV0IG11c3QgYmUgY29tcGxldGVk
IGJ5IHRoZSBXZWJWaWV3LgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2ZlckFjdGl2ZVdoZWVsRmxp
bmdBbmltYXRpb24oY29uc3QgV2ViQWN0aXZlV2hlZWxGbGluZ1BhcmFtZXRlcnMmKSA9IDA7CiAK
KyAgICAvLyBUb3VjaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFJldHVybnMgdGhlIGhpdCB0ZXN0IHJlc3Vs
dCBmb3IgYSBnaXZlbiBwb2ludC4KKyAgICB2aXJ0dWFsIFdlYkhpdFRlc3RJbmZvIGhpdFRlc3RJ
bmZvRm9yV2luZG93UG9zKGNvbnN0IFdlYlBvaW50JikgPSAwOworCisgICAgLy8gUmV0dXJucyB0
aGUgdGFwIGhpZ2hsaWdodCBjb2xvciBmb3IgYSBub2RlLgorICAgIHZpcnR1YWwgV2ViQ29sb3Ig
Z2V0Tm9kZVRhcEhpZ2hsaWdodENvbG9yKGNvbnN0IFdlYk5vZGUmKSA9IDA7CisKKyAgICAvLyBS
ZXR1cm5zIHRoZSBsaXN0IG9mIHF1YWRzIGNvdmVyaW5nIHRoZSB0ZXh0IG9mIGEgZ2l2ZW4gcmFu
Z2UuCisgICAgdmlydHVhbCBXZWJWZWN0b3I8V2ViRmxvYXRRdWFkPiBnZXRUZXh0UXVhZHNGb3JS
YW5nZShjb25zdCBXZWJSYW5nZSYpID0gMDsKKwogICAgIC8vIFZpc2liaWxpdHkgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAg
IC8vIFNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIFdlYlZpZXcuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IGNiY2Y3NDY0MWFjOTEyZjJmM2M4MTFkOTIw
MjgyM2RmZWU5NjFkZjEuLjNkMDhmNjQ5MjA4MTUzNWIyOThlNzVkZjg3ZDRmNWFhOTZmMWI2YTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCkBAIC0zMiw2ICsz
Miw3IEBACiAjZGVmaW5lIFdlYldpZGdldF9oCiAKICNpbmNsdWRlICJXZWJDb21wb3NpdGlvblVu
ZGVybGluZS5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RJbmZvLmgiCiAjaW5jbHVkZSAiV2ViVGV4
dElucHV0VHlwZS5oIgogI2luY2x1ZGUgIldlYlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJDYW52YXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuY3BwCmluZGV4IGI3YTMxZmZmMTUwMTQ1YjEwYWZiNDA2NzcyMjk3ZjRiNDE2Y2VhMGEu
LmVkYTdkYjZiOTk4MGRiNjc4YzY0Mzc0ZDgxMzIwZTExNjM0MTBjYmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtMTM4Miw2ICsxMzgyLDEzIEBA
IHZvaWQgV2ViRnJhbWVJbXBsOjpzZWxlY3RSYW5nZShjb25zdCBXZWJQb2ludCYgc3RhcnQsIGNv
bnN0IFdlYlBvaW50JiBlbmQpCiAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxl
Y3Rpb24oc2VsZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiB9CiAKK3ZvaWQgV2ViRnJh
bWVJbXBsOjpzZWxlY3RSYW5nZShjb25zdCBXZWJSYW5nZSYgd2ViUmFuZ2UpCit7CisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8UmFuZ2U+ID4od2ViUmFu
Z2UpOworICAgIGlmIChyYW5nZSkKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNl
bGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFdlYkNvcmU6OlZQX0RFRkFVTFRfQUZGSU5JVFksIGZh
bHNlKTsKK30KKwogVmlzaWJsZVBvc2l0aW9uIFdlYkZyYW1lSW1wbDo6dmlzaWJsZVBvc2l0aW9u
Rm9yV2luZG93UG9pbnQoY29uc3QgV2ViUG9pbnQmIHBvaW50KQogewogICAgIEhpdFRlc3RSZXF1
ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpNb3ZlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAppbmRleCA3MDBmNmVhNDAz
N2U3YjI4YjkwYmRjOGY5NDk5NGM4YWVlOWEzMWYyLi5mN2RiM2U0Mzc3MmE4NWEzYzA0YWMxMDIx
NjU3NDJhNWZkOWQ1NGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuaApAQCAtMTY1LDYgKzE2NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYlN0cmluZyBz
ZWxlY3Rpb25Bc01hcmt1cCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RXb3JkQXJv
dW5kQ2FyZXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUG9pbnQm
IHN0YXJ0LCBjb25zdCBXZWJQb2ludCYgZW5kKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFu
Z2UoY29uc3QgV2ViUmFuZ2UmKTsKICAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdl
YlNpemUmIHBhZ2VTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViTm9k
ZSYgY29uc3RyYWluVG9Ob2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByaW50
ZXJEUEksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIaXRUZXN0
SW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIaXRUZXN0SW5mby5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTI2YWNlYzU5OWM2YjVkNDQxM2E3ZTE1MjM0YWZlNmQ3YTJjM2YzZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhpdFRlc3RJbmZv
LmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBh
cmUgbWV0OgorKgorKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJI
aXRUZXN0SW5mby5oIgorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlVSTCBXZWJIaXRU
ZXN0SW5mbzo6bGlua1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+YWJzb2x1
dGVMaW5rVVJMKCk7Cit9CisKK1dlYlVSTCBXZWJIaXRUZXN0SW5mbzo6aW1hZ2VVUkwoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmFic29sdXRlSW1hZ2VVUkwoKTsKK30KKworV2Vi
Tm9kZSBXZWJIaXRUZXN0SW5mbzo6aW5uZXJOb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2Vi
Tm9kZShtX3ByaXZhdGUtPmlubmVyTm9kZSgpKTsKK30KKworV2ViUG9pbnQgV2ViSGl0VGVzdElu
Zm86OmxvY2FsUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBXZWJQb2ludChtX3ByaXZhdGUt
PmxvY2FsUG9pbnQoKSk7Cit9CisKK2Jvb2wgV2ViSGl0VGVzdEluZm86OmlzQ29udGVudEVkaXRh
YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0NvbnRlbnRFZGl0YWJsZSgp
OworfQorCitXZWJIaXRUZXN0SW5mbzo6V2ViSGl0VGVzdEluZm8oY29uc3QgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0KQoreworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgSGl0VGVzdFJlc3VsdChyZXN1
bHQpKTsKK30KKworV2ViSGl0VGVzdEluZm8mIFdlYkhpdFRlc3RJbmZvOjpvcGVyYXRvcj0oY29u
c3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQoreworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgSGl0
VGVzdFJlc3VsdChyZXN1bHQpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkhpdFRlc3RJ
bmZvOjpvcGVyYXRvciBIaXRUZXN0UmVzdWx0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fcHJp
dmF0ZS5nZXQoKTsKK30KKwordm9pZCBXZWJIaXRUZXN0SW5mbzo6aW5pdCgpCit7CisgICAgbV9w
cml2YXRlLnJlc2V0KG5ldyBIaXRUZXN0UmVzdWx0KCkpOworfQorCit2b2lkIFdlYkhpdFRlc3RJ
bmZvOjphc3NpZ24oY29uc3QgV2ViSGl0VGVzdEluZm8mIGluZm8pCit7CisgICAgbV9wcml2YXRl
LnJlc2V0KG5ldyBIaXRUZXN0UmVzdWx0KGluZm8pKTsKK30KKwordm9pZCBXZWJIaXRUZXN0SW5m
bzo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdXJy
b3VuZGluZ1RleHQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3Vycm91bmRp
bmdUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzhlMzFmMzZkN2IxOWU5MzJkYWZjNWRiNWZmNmZjMTUz
NTdjOGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U3Vycm91bmRpbmdUZXh0LmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3Vycm91bmRpbmdUZXh0LmgiCisKKyNpbmNs
dWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisj
aW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU3Vycm91bmRpbmdUZXh0LmgiCisj
aW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUg
IldlYkhpdFRlc3RJbmZvLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViU3Vycm91bmRpbmdUZXh0OjpXZWJTdXJyb3VuZGluZ1RleHQoY29u
c3QgV2ViSGl0VGVzdEluZm8mIGhpdFRlc3RJbmZvLCBzaXplX3QgbWF4TGVuZ3RoKQoreworICAg
IE5vZGUqIG5vZGUgPSBoaXRUZXN0SW5mby5pbm5lck5vZGUoKS51bndyYXA8Tm9kZT4oKTsKKyAg
ICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24obm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRp
b25Gb3JQb2ludChoaXRUZXN0SW5mby5sb2NhbFBvaW50KCkpKTsKKyAgICBpZiAodmlzaWJsZVBv
c2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUucmVzZXQo
bmV3IFN1cnJvdW5kaW5nVGV4dCh2aXNpYmxlUG9zaXRpb24sIG1heExlbmd0aCkpOworfQorCitX
ZWJTdXJyb3VuZGluZ1RleHQ6OldlYlN1cnJvdW5kaW5nVGV4dChXZWJOb2RlIHRleHROb2RlLCBz
aXplX3Qgb2Zmc2V0LCBzaXplX3QgbWF4TGVuZ3RoKQoreworICAgIE5vZGUqIG5vZGUgPSB0ZXh0
Tm9kZS51bndyYXA8Tm9kZT4oKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUo
KSB8fCBvZmZzZXQgPj0gbm9kZS0+bm9kZVZhbHVlKCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgU3Vycm91bmRpbmdUZXh0KFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbih0b1RleHQobm9kZSksIG9mZnNldCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIERPV05TVFJFQU0pLCBtYXhMZW5ndGgpKTsKK30KKworV2ViU3RyaW5nIFdlYlN1cnJv
dW5kaW5nVGV4dDo6Y29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQo
KSA/IFdlYlN0cmluZyhtX3ByaXZhdGUtPmNvbnRlbnQoKSkgOiBXZWJTdHJpbmcoKTsKK30KKwor
c2l6ZV90IFdlYlN1cnJvdW5kaW5nVGV4dDo6cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCkgPyBtX3ByaXZhdGUtPnBvc2l0aW9uT2Zm
c2V0SW5Db250ZW50KCkgOiAwOworfQorCitXZWJSYW5nZSBXZWJTdXJyb3VuZGluZ1RleHQ6OnJh
bmdlRnJvbUNvbnRlbnRPZmZzZXRzKHNpemVfdCBzdGFydE9mZnNldEluQ29udGVudCwgc2l6ZV90
IGVuZE9mZnNldEluQ29udGVudCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpID8gV2Vi
UmFuZ2UobV9wcml2YXRlLT5yYW5nZUZyb21Db250ZW50T2Zmc2V0cyhzdGFydE9mZnNldEluQ29u
dGVudCwgZW5kT2Zmc2V0SW5Db250ZW50KSkgOiBXZWJSYW5nZSgpOworfQorCit2b2lkIFdlYlN1
cnJvdW5kaW5nVGV4dDo6aW5pdCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBTdXJyb3Vu
ZGluZ1RleHQoVmlzaWJsZVBvc2l0aW9uKCksIDApKTsKK30KKwordm9pZCBXZWJTdXJyb3VuZGlu
Z1RleHQ6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CmluZGV4IGY5MDZkMGQwOGFjNWEwMjg2NDRjMDIzMzMxNWIzZGVjOTcyOWMzMDUuLjUwNDdmZGU1
ZGQ1MjY3ZWFlNTFiM2RiMzU1NzI1ZDIyZDJlYjVmMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTM1MDQsNiArMzUwNCw0NiBAQCBXZWJHcmFwaGlj
c0NvbnRleHQzRCogV2ViVmlld0ltcGw6OnNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCkKICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0
M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpLmdldCgpKTsKIH0KIAorV2ViSGl0VGVz
dEluZm8gV2ViVmlld0ltcGw6OmhpdFRlc3RJbmZvRm9yV2luZG93UG9zKGNvbnN0IFdlYlBvaW50
JiBwb3MpCit7CisgICAgcmV0dXJuIGhpdFRlc3RSZXN1bHRGb3JXaW5kb3dQb3MocG9zKTsKK30K
KworV2ViQ29sb3IgV2ViVmlld0ltcGw6OmdldE5vZGVUYXBIaWdobGlnaHRDb2xvcihjb25zdCBX
ZWJOb2RlJiB3ZWJOb2RlKQoreworICAgIFdlYkNvbG9yIHRhcEhpZ2hsaWdodENvbG9yID0gUmVu
ZGVyU3R5bGU6OmluaXRpYWxUYXBIaWdobGlnaHRDb2xvcigpLnJnYigpOworICAgIGlmICh3ZWJO
b2RlLmlzTnVsbCgpKQorICAgICAgcmV0dXJuIHRhcEhpZ2hsaWdodENvbG9yOworCisgICAgY29u
c3QgTm9kZSogbm9kZSA9IHdlYk5vZGUuY29uc3RVbndyYXA8Tm9kZT4oKTsKKyAgICBpZiAobm9k
ZSAmJiBub2RlLT5yZW5kZXJlcigpKQorICAgICAgICB0YXBIaWdobGlnaHRDb2xvciA9IG5vZGUt
PnJlbmRlcmVyKCktPnN0eWxlKCktPnRhcEhpZ2hsaWdodENvbG9yKCkucmdiKCk7CisKKyAgICBy
ZXR1cm4gdGFwSGlnaGxpZ2h0Q29sb3I7Cit9CisKK1dlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IFdl
YlZpZXdJbXBsOjpnZXRUZXh0UXVhZHNGb3JSYW5nZShjb25zdCBXZWJSYW5nZSYgd2ViUmFuZ2Up
Cit7CisgICAgaWYgKHdlYlJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV2ViVmVjdG9y
PFdlYkZsb2F0UXVhZD4oKTsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzdGF0aWNfY2Fz
dDxQYXNzUmVmUHRyPFJhbmdlPiA+KHdlYlJhbmdlKTsKKyAgICBGcmFtZSogZnJhbWUgPSByYW5n
ZS0+b3duZXJEb2N1bWVudCgpID8gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSA6IDA7
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+
KCk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICByYW5nZS0+dGV4dFF1YWRz
KHF1YWRzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgcXVhZHNbaV0uc2V0UDEoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhyb3VuZGVkSW50UG9pbnQocXVhZHNbaV0ucDEoKSkpKTsKKyAgICAgICAgcXVhZHNbaV0uc2V0
UDIoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVkSW50UG9pbnQocXVhZHNb
aV0ucDIoKSkpKTsKKyAgICAgICAgcXVhZHNbaV0uc2V0UDMoZnJhbWUtPnZpZXcoKS0+Y29udGVu
dHNUb1dpbmRvdyhyb3VuZGVkSW50UG9pbnQocXVhZHNbaV0ucDMoKSkpKTsKKyAgICAgICAgcXVh
ZHNbaV0uc2V0UDQoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVkSW50UG9p
bnQocXVhZHNbaV0ucDQoKSkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcXVhZHM7Cit9CisKIHZv
aWQgV2ViVmlld0ltcGw6OnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRl
IHZpc2liaWxpdHlTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGlzSW5pdGlhbFN0YXRlKSB7CiAgICAgaWYgKCFwYWdlKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA3Zjc3ZGVjYjM3YTIwOTA2YTBhMDhhOGNkZjBj
N2Q0ZmM4ODYxMmFjLi5hOWY2ZDA2N2E1ZjE1N2M4OGRiNjdmNjIyOWEzZmQ1MzBkYTdhYjdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTMyLDYgKzMyLDcg
QEAKICNkZWZpbmUgV2ViVmlld0ltcGxfaAogCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlvblBvbGlj
eS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgInBsYXRm
b3JtL1dlYkxheWVyLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oIgog
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaCIKQEAgLTQ4Myw2ICs0
ODQsMTUgQEAgcHVibGljOgogCiAgICAgUGFzc093blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4g
Y3JlYXRlQ29tcG9zaXRvckdyYXBoaWNzQ29udGV4dDNEKCk7CiAKKyAgICAvLyBSZXR1cm5zIHRo
ZSBoaXQgdGVzdCByZXN1bHQgZm9yIGEgZ2l2ZW4gcG9pbnQuCisgICAgdmlydHVhbCBXZWJIaXRU
ZXN0SW5mbyBoaXRUZXN0SW5mb0ZvcldpbmRvd1Bvcyhjb25zdCBXZWJQb2ludCYpOworCisgICAg
Ly8gUmV0dXJucyB0aGUgdGFwIGhpZ2hsaWdodCBjb2xvciBmb3IgYSBub2RlLgorICAgIHZpcnR1
YWwgV2ViQ29sb3IgZ2V0Tm9kZVRhcEhpZ2hsaWdodENvbG9yKGNvbnN0IFdlYk5vZGUmKTsKKwor
ICAgIC8vIFJldHVybnMgdGhlIGxpc3Qgb2YgcXVhZHMgY292ZXJpbmcgdGhlIHRleHQgb2YgYSBn
aXZlbiByYW5nZS4KKyAgICB2aXJ0dWFsIFdlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IGdldFRleHRR
dWFkc0ZvclJhbmdlKGNvbnN0IFdlYlJhbmdlJik7CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlz
aWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGUsIGJvb2wpOwogCiAgICAgV2ViQ29y
ZTo6UG9wdXBDb250YWluZXIqIHNlbGVjdFBvcHVwKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RQ
b3B1cC5nZXQoKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137574</attachid>
            <date>2012-04-17 12:04:49 -0700</date>
            <delta_ts>2012-05-10 09:34:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82460-20120417200447.patch</filename>
            <type>text/plain</type>
            <size>21919</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0Mzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDc2MGNkYTU0M2YwNWZjOGQxYzE5MzFhZDdiZWM3MzVhNjRjNDY0OGIuLjcwYmY5NzNhYjNiY2E3
OTYwOThiZWE0ODViNjcxOGJkZWRjZTQ1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMTItMDQtMTcgIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5kcm9n
cmFjaWFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVjdGl2ZWx5IHJldHJpZXZlIHRleHQg
YXJvdW5kIGEgdG91Y2hlZCBwb2ludC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyNDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBhbiBlbWJlZGRpbmcgQVBJIHRvIFdlYkNvcmUncyBT
dXJyb3VuZGluZ1RleHQsIGFkZGluZyBhbHNvCisgICAgICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBz
ZWxlY3QgYW5kIGhpZ2hsaWdodCB0aGUgcmV0cmlldmVkIHRleHQgcmFuZ2UuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAoV2Vi
RnJhbWUpOgorICAgICAgICAqIHB1YmxpYy9XZWJIaXRUZXN0UmVzdWx0Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViSGl0VGVzdFJl
c3VsdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OldlYkhpdFRlc3RSZXN1
bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0Ojp+V2ViSGl0VGVzdFJlc3Vs
dCk6CisgICAgICAgICogcHVibGljL1dlYlJhbmdlLmg6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViUmFuZ2UpOgorICAgICAgICAqIHB1YmxpYy9XZWJTdXJyb3VuZGluZ1RleHQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJTdXJyb3VuZGluZ1RleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdXJyb3VuZGluZ1RleHQ6
OldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN1cnJvdW5kaW5nVGV4
dDo6fldlYlN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2VsZWN0UmFuZ2UpOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAgICAgIChXZWJGcmFtZUltcGwpOgor
ICAgICAgICAqIHNyYy9XZWJIaXRUZXN0UmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0Ojpub2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6bG9jYWxQb2ludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkhpdFRlc3RSZXN1bHQ6OldlYkhpdFRlc3RSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXRUZXN0
UmVzdWx0OjpvcGVyYXRvciBIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0
VGVzdFJlc3VsdDo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6
YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6cmVzZXQpOgorICAg
ICAgICAqIHNyYy9XZWJSYW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJhbmdlOjp0ZXh0
UXVhZHMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvV2ViU3Vycm91bmRpbmdU
ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
dXJyb3VuZGluZ1RleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdXJyb3Vu
ZGluZ1RleHQ6OnRleHRDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Vycm91bmRpbmdU
ZXh0OjpoaXRPZmZzZXRJblRleHRDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Vycm91
bmRpbmdUZXh0OjpyYW5nZUZyb21Db250ZW50T2Zmc2V0cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN1cnJvdW5kaW5nVGV4dDo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Vycm91bmRp
bmdUZXh0OjpyZXNldCk6CisKIDIwMTItMDQtMTcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQ2FsZW5kYXIgUGlja2VyOiBQb3B1cCBwb3Np
dGlvbiBpcyB3cm9uZyB3aGVuIHRoZXJlIGFyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmlu
ZGV4IDljYmFlZDc1ZjNiZjVjYWEzZDZkZTJiOTAwZmM4ZDc5YTRiN2VhZTYuLmQ3M2YzZmFhZGMz
NzVjYzczMTM3ODYwZDExYjI4M2Q2MDE0NTdlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAKQEAgLTE3MCw2ICsxNzAsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2VvbG9j
YXRpb25Qb3NpdGlvbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkdseXBoQ2FjaGUu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJIaXN0b3J5SXRlbS5oJywKKyAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkhpdFRlc3RSZXN1bHQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJJREJDYWxsYmFja3MuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJD
dXJzb3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oJywKQEAg
LTI2Myw2ICsyNjQsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3RvcmFnZU5hbWVz
cGFjZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNr
cy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0b3JhZ2VRdW90YVR5cGUuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdXJyb3VuZGluZ1RleHQuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJTdHJlYW1UZXh0dXJlQ2xpZW50LmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVGV4dEFmZmluaXR5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
VGV4dENhc2VTZW5zaXRpdml0eS5oJywKQEAgLTU2MCw2ICs1NjIsNyBAQAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViR2x5cGhDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpc3RvcnlJdGVt
LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJIaXRUZXN0UmVzdWx0LmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJJY29uTG9hZGluZ0NvbXBsZXRpb25JbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJJY29uTG9hZGluZ0NvbXBsZXRpb25JbXBsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5jcHAnLApAQCAtNjYxLDYgKzY2NCw3
IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5o
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuaCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYlRleHRSdW4uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVS
TExvYWRUaW1pbmcuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0
dXJlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJG
cmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAppbmRleCAx
OWE3YzM3MDI5YzU3YWRkYzk4ZTY3MTZhODA2YWExYzAwMjkyZWJkLi4zMzZmMjFmOTFkYmVjYWUw
ZjFhMmJkODM0ZWEyNzYxYTZkZjA2YzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkZyYW1lLmgKQEAgLTQ0Niw2ICs0NDYsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUG9pbnQmIHN0YXJ0LCBjb25zdCBXZWJQb2ludCYgZW5k
KSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmKSA9
IDA7CisKIAogICAgIC8vIFByaW50aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJIaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJIaXRUZXN0UmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGMxZTFmYmM3ZjJkMWE1
YWRlMDM5ZmFhNWFkNGI1MWNkNGU1OGIzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkhpdFRlc3RSZXN1bHQuaApAQCAtMCwwICsxLDcxIEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKgorKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViSGl0VGVzdFJlc3VsdF9oCisjZGVmaW5lIFdlYkhpdFRlc3RSZXN1bHRfaAorCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViUHJpdmF0ZU93blB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViTm9kZTsKK2NsYXNzIFdlYlBvaW50OworCisvLyBQcm9wZXJ0aWVzIG9mIGEgaGl0IHRl
c3QgcmVzdWx0LCBpLmUuIHByb3BlcnRpZXMgb2YgdGhlIG5vZGVzIGF0IGEgZ2l2ZW4gcG9pbnQK
Ky8vICh0aGUgaGl0IHBvaW50KSBvbiB0aGUgcGFnZS4gQm90aCB1cmxzIG1heSBiZSBwb3B1bGF0
ZWQgYXQgdGhlIHNhbWUgdGltZSwgZm9yCisvLyBleGFtcGxlIGluIHRoZSBpbnN0YW5jZSBvZiBh
biA8aW1nPiBpbnNpZGUgYW4gPGE+LgorY2xhc3MgV2ViSGl0VGVzdFJlc3VsdCB7CitwdWJsaWM6
CisgICAgV2ViSGl0VGVzdFJlc3VsdCgpIHsgfQorICAgIFdlYkhpdFRlc3RSZXN1bHQoY29uc3Qg
V2ViSGl0VGVzdFJlc3VsdCYgaW5mbykgeyBhc3NpZ24oaW5mbyk7IH0KKyAgICB+V2ViSGl0VGVz
dFJlc3VsdCgpIHsgcmVzZXQoKTsgfQorCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihj
b25zdCBXZWJIaXRUZXN0UmVzdWx0Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7
CisgICAgV0VCS0lUX0VYUE9SVCBib29sIGlzTnVsbCgpIGNvbnN0OworCisgICAgLy8gVGhlIG5v
ZGUgdGhhdCB3YXMgaGl0IChvbmx5IG9uZSBmb3IgcG9pbnQtYmFzZWQgdGVzdHMpLgorICAgIFdF
QktJVF9FWFBPUlQgV2ViTm9kZSBub2RlKCkgY29uc3Q7CisKKyAgICAvLyBDb29yZGluYXRlcyBv
ZiB0aGUgcG9pbnQgdGhhdCB3YXMgaGl0LiBSZWxhdGl2ZSB0byB0aGUgbm9kZS4KKyAgICBXRUJL
SVRfRVhQT1JUIFdlYlBvaW50IGxvY2FsUG9pbnQoKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorICAgIFdlYkhpdFRlc3RSZXN1bHQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdCYpOworICAgIFdlYkhpdFRlc3RSZXN1bHQmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0Jik7CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCgpIGNv
bnN0OworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQ+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJh
bmdlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJSYW5nZS5oCmluZGV4IDkw
N2RmZDU2M2UwMGNmODZkMWE1M2EzNzAzMTkzNWUzYTc5NjU4YTEuLmY1YzRiYmI5OWI2MGM4YzA2
MDA0YTY1OTEzZDA0ODNlYTBkZTczOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlJhbmdlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUmFuZ2UuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBXZWJSYW5nZV9oCiAKICNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3Iu
aCIKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFz
cyBSYW5nZTsgfQpAQCAtNDAsNiArNDEsNyBAQCBuYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2Ns
YXNzIFdlYkZsb2F0UXVhZDsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViTm9kZTsKIGNsYXNz
IFdlYlJhbmdlUHJpdmF0ZTsKQEAgLTczLDYgKzc1LDggQEAgcHVibGljOgogCiAgICAgV0VCS0lU
X0VYUE9SVCBzdGF0aWMgV2ViUmFuZ2UgZnJvbURvY3VtZW50UmFuZ2UoV2ViRnJhbWUqLCBpbnQg
c3RhcnQsIGludCBsZW5ndGgpOwogCisgICAgV0VCS0lUX0VYUE9SVCBXZWJWZWN0b3I8V2ViRmxv
YXRRdWFkPiB0ZXh0UXVhZHMoKSBjb25zdDsKKwogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgog
ICAgIFdlYlJhbmdlKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4mKTsKICAg
ICBXZWJSYW5nZSYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN1cnJv
dW5kaW5nVGV4dC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3Vycm91bmRp
bmdUZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQyYTNjNTI3NDNlMDU0NWMwMzU5NTQwMTMxYWUzZTM4NTYx
MmQ4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlN1cnJvdW5kaW5nVGV4dC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViU3Vycm91bmRpbmdUZXh0X2gKKyNkZWZpbmUgV2ViU3Vycm91bmRpbmdUZXh0X2gKKwor
I2luY2x1ZGUgIldlYk5vZGUuaCIKKyNpbmNsdWRlICJXZWJSYW5nZS5oIgorI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlByaXZhdGVPd25QdHIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3Vycm91bmRpbmdUZXh0OworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSGl0VGVzdFJlc3VsdDsKKworY2xhc3MgV2Vi
U3Vycm91bmRpbmdUZXh0IHsKK3B1YmxpYzoKKyAgICBXZWJTdXJyb3VuZGluZ1RleHQoKSB7IH0K
KyAgICB+V2ViU3Vycm91bmRpbmdUZXh0KCkgeyByZXNldCgpOyB9CisKKyAgICBXRUJLSVRfRVhQ
T1JUIGJvb2wgaXNOdWxsKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7
CisKKyAgICAvLyBJbml0aWFsaXplcyB0aGUgb2JqZWN0IGdvIGdldCB0aGUgc3Vycm91bmRpbmcg
dGV4dCBjZW50ZXJlZCBpbiB0aGUgcG9zaXRpb24gZGVzY3JpYmVkIGJ5IHRoZSBoaXQgdGVzdC4K
KyAgICAvLyBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNvbnRlbnRzIHJldHJpZXZlZCBpcyBk
ZWZpbmVkIGJ5IG1heExlbmd0aC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZShj
b25zdCBXZWJIaXRUZXN0UmVzdWx0Jiwgc2l6ZV90IG1heExlbmd0aCk7CisKKyAgICAvLyBJbml0
aWFsaXplcyB0aGUgb2JqZWN0IGdvIGdldCB0aGUgc3Vycm91bmRpbmcgdGV4dCBjZW50ZXJlZCBp
biB0aGUgc2VsZWN0ZWQgb2Zmc2V0IG9mIHRoZSBnaXZlbiBub2RlLgorICAgIC8vIFRoZSBtYXhp
bXVtIGxlbmd0aCBvZiB0aGUgY29udGVudHMgcmV0cmlldmVkIGlzIGRlZmluZWQgYnkgbWF4TGVu
Z3RoLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKFdlYk5vZGUgdGV4dE5vZGUs
IHNpemVfdCBvZmZzZXQsIHNpemVfdCBtYXhMZW5ndGgpOworCisgICAgLy8gU3Vycm91bmRpbmcg
dGV4dCBjb250ZW50IHJldHJpZXZlZC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyB0ZXh0
Q29udGVudCgpIGNvbnN0OworCisgICAgLy8gT2Zmc2V0IGluIHRoZSB0ZXh0IGNvbnRlbnQgb2Yg
dGhlIGluaXRpYWwgaGl0IHBvc2l0aW9uIChvciBwcm92aWRlZCBvZmZzZXQgaW4gdGhlIG5vZGUp
LgorICAgIFdFQktJVF9FWFBPUlQgc2l6ZV90IGhpdE9mZnNldEluVGV4dENvbnRlbnQoKSBjb25z
dDsKKworICAgIC8vIENvbnZlcnQgc3RhcnQvZW5kIHBvc2l0aW9ucyBpbiB0aGUgY29udGVudCB0
ZXh0IHN0cmluZyBpbnRvIGEgV2ViS2l0IHRleHQgcmFuZ2UuCisgICAgV0VCS0lUX0VYUE9SVCBX
ZWJSYW5nZSByYW5nZUZyb21Db250ZW50T2Zmc2V0cyhzaXplX3Qgc3RhcnRPZmZzZXRJbkNvbnRl
bnQsIHNpemVfdCBlbmRPZmZzZXRJbkNvbnRlbnQpOworCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJp
dmF0ZU93blB0cjxXZWJDb3JlOjpTdXJyb3VuZGluZ1RleHQ+IG1fcHJpdmF0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXcuaAppbmRleCBiYWQ4YjUzYmRjY2FlZDA4ZDcyNzkyY2M3YzhmZTNkZTBiODkzMTY2
Li41ZWUzZDEwOTg1ODU2MjA0NGZjY2RhZTdhZWM1MjZiNjEzMDVjM2Y2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIFdlYkdy
YXBoaWNzQ29udGV4dDNEOwogY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYlBhZ2VPdmVybGF5Owog
Y2xhc3MgV2ViUGVybWlzc2lvbkNsaWVudDsKK2NsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU2V0
dGluZ3M7CiBjbGFzcyBXZWJTcGVsbENoZWNrQ2xpZW50OwogY2xhc3MgV2ViU3RyaW5nOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggM2Y5ZDlkMzEx
MWViMGJjZTE4Zjc2NmUzM2M5MzE1OGM5YjczOTgxYS4uZGJmOWMyZjBjZjE3ZmQ0OGQ0NWE1NmMz
MThhNmJiNjdmYThiMDc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuY3BwCkBAIC0xMzkxLDYgKzEzOTEsMTMgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnNlbGVj
dFJhbmdlKGNvbnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9pbnQmIGVuZCkKICAgICAg
ICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKGNvbnN0
IFdlYlJhbmdlJiB3ZWJSYW5nZSkKK3sKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc3RhdGlj
X2Nhc3Q8UGFzc1JlZlB0cjxSYW5nZT4gPih3ZWJSYW5nZSk7CisgICAgaWYgKHJhbmdlKQorICAg
ICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwg
V2ViQ29yZTo6VlBfREVGQVVMVF9BRkZJTklUWSwgZmFsc2UpOworfQorCiBWaXNpYmxlUG9zaXRp
b24gV2ViRnJhbWVJbXBsOjp2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQb2ludChjb25zdCBXZWJQ
b2ludCYgcG9pbnQpCiB7CiAgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBo
aXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6Ok1vdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5oCmluZGV4IDNhYmM2YzQ5MzQ0ZDFlMzY5MDY0NzkxYWVlZmEwYjNhMDA0
MDI5MGIuLmViZTllYTFiYmNiYmYyNDNiMTI0NjQ1Yjc5OTBlMjVhMjMyOWU4NTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCkBAIC0xNzAsNiArMTcwLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgV2ViU3RyaW5nIHNlbGVjdGlvbkFzTWFya3VwKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHNlbGVjdFdvcmRBcm91bmRDYXJldCgpOwogICAgIHZpcnR1YWwg
dm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJQb2ludCYgc3RhcnQsIGNvbnN0IFdlYlBvaW50JiBl
bmQpOworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJSYW5nZSYpOwogICAg
IHZpcnR1YWwgaW50IHByaW50QmVnaW4oY29uc3QgV2ViU2l6ZSYgcGFnZVNpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJOb2RlJiBjb25zdHJhaW5Ub05vZGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpbnRlckRQSSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSGl0VGVzdFJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTgyN2UyNWE2
MWJjOTAwYmE1NTE5ODU3ZTBhYzc3OWU3OWU4Y2EzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhpdFRlc3RSZXN1bHQuY3BwCkBAIC0wLDAgKzEsODQg
QEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKwor
I2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
KyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbmNsdWRlICJXZWJOb2RlLmgiCisKKyNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJQb2ludC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYk5vZGUgV2ViSGl0VGVzdFJlc3VsdDo6bm9kZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5pbm5lck5vZGUoKSk7Cit9
CisKK1dlYlBvaW50IFdlYkhpdFRlc3RSZXN1bHQ6OmxvY2FsUG9pbnQoKSBjb25zdAoreworICAg
IHJldHVybiBXZWJQb2ludChtX3ByaXZhdGUtPmxvY2FsUG9pbnQoKSk7Cit9CisKK1dlYkhpdFRl
c3RSZXN1bHQ6OldlYkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQor
eworICAgIG1fcHJpdmF0ZS5yZXNldChuZXcgSGl0VGVzdFJlc3VsdChyZXN1bHQpKTsKK30KKwor
V2ViSGl0VGVzdFJlc3VsdCYgV2ViSGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3IEhpdFRlc3RSZXN1
bHQocmVzdWx0KSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJIaXRUZXN0UmVzdWx0Ojpv
cGVyYXRvciBIaXRUZXN0UmVzdWx0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fcHJpdmF0ZS5n
ZXQoKTsKK30KKworYm9vbCBXZWJIaXRUZXN0UmVzdWx0Ojppc051bGwoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9wcml2YXRlLmdldCgpOworfQorCit2b2lkIFdlYkhpdFRlc3RSZXN1bHQ6OmFz
c2lnbihjb25zdCBXZWJIaXRUZXN0UmVzdWx0JiBpbmZvKQoreworICAgIG1fcHJpdmF0ZS5yZXNl
dChuZXcgSGl0VGVzdFJlc3VsdChpbmZvKSk7Cit9CisKK3ZvaWQgV2ViSGl0VGVzdFJlc3VsdDo6
cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSYW5nZS5jcHAKaW5kZXggMDVhNDIx
MjUxY2QxMTJiZTEzZmJkMTE2ZmEzZGJmOTNiYWExMDhkMS4uMTg3NWQ3NjY3ZWVkN2VkMTYzNmRi
NWM4ZGE0Zjc2MTdmMWM5OTIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJhbmdl
LmNwcApAQCAtMzMsMTAgKzMzLDEyIEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNp
bmNsdWRlICJXZWJOb2RlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRRdWFkLmgiCiAj
aW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KIApAQCAtOTksNiArMTAxLDI4IEBAIFdlYlJhbmdlIFdlYlJhbmdlOjpmcm9tRG9jdW1lbnRS
YW5nZShXZWJGcmFtZSogZnJhbWUsIGludCBzdGFydCwgaW50IGxlbmd0aCkKICAgICByZXR1cm4g
VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZSwgc3RhcnQsIGxl
bmd0aCk7CiB9CiAKK1dlYlZlY3RvcjxXZWJGbG9hdFF1YWQ+IFdlYlJhbmdlOjp0ZXh0UXVhZHMo
KSBjb25zdAoreworICAgIGlmIChpc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYlZlY3RvcjxX
ZWJGbG9hdFF1YWQ+KCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBtX3ByaXZhdGUtPm93bmVyRG9j
dW1lbnQoKSA/IG1fcHJpdmF0ZS0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpIDogMDsKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gV2ViVmVjdG9yPFdlYkZsb2F0UXVhZD4oKTsKKwor
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIG1fcHJpdmF0ZS0+dGV4dFF1YWRzKHF1
YWRzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgcXVhZHNbaV0uc2V0UDEoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhy
b3VuZGVkSW50UG9pbnQocXVhZHNbaV0ucDEoKSkpKTsKKyAgICAgICAgcXVhZHNbaV0uc2V0UDIo
ZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVkSW50UG9pbnQocXVhZHNbaV0u
cDIoKSkpKTsKKyAgICAgICAgcXVhZHNbaV0uc2V0UDMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNU
b1dpbmRvdyhyb3VuZGVkSW50UG9pbnQocXVhZHNbaV0ucDMoKSkpKTsKKyAgICAgICAgcXVhZHNb
aV0uc2V0UDQoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyb3VuZGVkSW50UG9pbnQo
cXVhZHNbaV0ucDQoKSkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcXVhZHM7Cit9CisKKwogV2Vi
UmFuZ2U6OldlYlJhbmdlKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4mIHJh
bmdlKQogICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYlJhbmdlUHJpdmF0ZSo+KHJhbmdl
LmxlYWtSZWYoKSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTdXJyb3VuZGluZ1RleHQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3Vy
cm91bmRpbmdUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMGZlMDlkZDRjZTBhMTM2YTM1NDE4N2NiNTQ0
NWZiMGVmYTdmM2NkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU3Vycm91bmRpbmdUZXh0LmNwcApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3Vycm91bmRpbmdUZXh0LmgiCisK
KyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJhbmdl
LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU3Vycm91bmRpbmdUZXh0
LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2lu
Y2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dm9pZCBXZWJTdXJyb3VuZGluZ1RleHQ6OmluaXRpYWxpemUoY29uc3QgV2ViSGl0VGVzdFJlc3Vs
dCYgaGl0VGVzdEluZm8sIHNpemVfdCBtYXhMZW5ndGgpCit7CisgICAgTm9kZSogbm9kZSA9IGhp
dFRlc3RJbmZvLm5vZGUoKS51bndyYXA8Tm9kZT4oKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zaXRpb24obm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0SW5m
by5sb2NhbFBvaW50KCkpKTsKKyAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUucmVzZXQobmV3IFN1cnJvdW5kaW5nVGV4dCh2
aXNpYmxlUG9zaXRpb24sIG1heExlbmd0aCkpOworfQorCit2b2lkIFdlYlN1cnJvdW5kaW5nVGV4
dDo6aW5pdGlhbGl6ZShXZWJOb2RlIHRleHROb2RlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbWF4
TGVuZ3RoKQoreworICAgIE5vZGUqIG5vZGUgPSB0ZXh0Tm9kZS51bndyYXA8Tm9kZT4oKTsKKyAg
ICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUoKSB8fCBvZmZzZXQgPj0gbm9kZS0+bm9k
ZVZhbHVlKCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJpdmF0ZS5yZXNl
dChuZXcgU3Vycm91bmRpbmdUZXh0KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbih0b1RleHQobm9k
ZSksIG9mZnNldCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIERPV05TVFJFQU0pLCBtYXhM
ZW5ndGgpKTsKK30KKworV2ViU3RyaW5nIFdlYlN1cnJvdW5kaW5nVGV4dDo6dGV4dENvbnRlbnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnQoKTsKK30KKworc2l6ZV90
IFdlYlN1cnJvdW5kaW5nVGV4dDo6aGl0T2Zmc2V0SW5UZXh0Q29udGVudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQoKTsKK30KKworV2Vi
UmFuZ2UgV2ViU3Vycm91bmRpbmdUZXh0OjpyYW5nZUZyb21Db250ZW50T2Zmc2V0cyhzaXplX3Qg
c3RhcnRPZmZzZXRJbkNvbnRlbnQsIHNpemVfdCBlbmRPZmZzZXRJbkNvbnRlbnQpCit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+cmFuZ2VGcm9tQ29udGVudE9mZnNldHMoc3RhcnRPZmZzZXRJbkNv
bnRlbnQsIGVuZE9mZnNldEluQ29udGVudCk7Cit9CisKK2Jvb2wgV2ViU3Vycm91bmRpbmdUZXh0
Ojppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiAhbV9wcml2YXRlLmdldCgpOworfQorCit2
b2lkIFdlYlN1cnJvdW5kaW5nVGV4dDo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgw
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="142672"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="144802"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>