<?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>52148</bug_id>
          
          <creation_ts>2011-01-10 07:53:13 -0800</creation_ts>
          <short_desc>[Gtk] Implement support for Embedded Objects</short_desc>
          <delta_ts>2011-04-11 14:02:40 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>57955</dependson>
          <blocked>30796</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Joanmarie Diggs">jdiggs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enrica</cc>
    
    <cc>mario</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>331626</commentid>
    <comment_count>0</comment_count>
      <attachid>78400</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2011-01-10 07:53:13 -0800</bug_when>
    <thetext>Created attachment 78400
test case

WebKitGtk currently does not have support for embedded objects. In particular, given the attached test case:

1. The AtkText implementation for each paragraph should contain an embedded object character for each embedded object:

* Here&apos;s our logo: &lt;eoc&gt; It reminds me of airport security screenings.

* Choose: &lt;eoc&gt; &lt;eoc&gt; (pick one or more)

* Choose: &lt;eoc&gt; &lt;eoc&gt; (just pick one)

* Choose: &lt;eoc&gt; &lt;eoc&gt; (just pick one)

2. Each embedded object should implement AtkHyperlink.

3. Each paragraph should implement AtkHypertext.

(I realize this is likely at least three bugs/rfes. But I will let Mario triage and make this an embedded object metabug if and how he sees fit. :-) )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331627</commentid>
    <comment_count>1</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2011-01-10 07:54:32 -0800</bug_when>
    <thetext>D&apos;oh! On the last item, the expected text is:

Choose: &lt;eoc&gt; (just pick one)

Sorry for the spam....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333133</commentid>
    <comment_count>2</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-01-12 10:08:56 -0800</bug_when>
    <thetext>Thanks for filing this. Adding myself to CC now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333616</commentid>
    <comment_count>3</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-01-13 03:05:01 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Created an attachment (id=78400) [details]
&gt; test case
&gt; 
&gt; WebKitGtk currently does not have support for embedded objects. In particular, given the attached test case:
&gt; 
&gt; 1. The AtkText implementation for each paragraph should contain an embedded object character for each embedded object:

You mean some kind of special character like those found in ff, right? 
Something like this:

 In [2]: t.getText(0, -1)
 Out[2]: &quot;Here&apos;s our logo: \xef\xbf\xbc It reminds me of airport security
          screenings. &quot;

&gt; * Here&apos;s our logo: &lt;eoc&gt; It reminds me of airport security screenings.
&gt; 
&gt; * Choose: &lt;eoc&gt; &lt;eoc&gt; (pick one or more)
&gt; 
&gt; * Choose: &lt;eoc&gt; &lt;eoc&gt; (just pick one)
&gt; 
&gt; * Choose: &lt;eoc&gt; &lt;eoc&gt; (just pick one)

My main question is &quot;how that special character helps to screen readers&quot;? 
I guess the answer is that ORCA would use it to know that it should dive in the object to extract more info (actually I recall you talking to me about this in Seville, not sure if I recall correctly, though :-)), but I wonder whether it shouldn&apos;t be better to provide a textual representation for them.

Of course, I&apos;m talking from my vast ignorance on the issue :-), and I realize that then we&apos;d need to agree on a specific text representation for each kind of object (e.g. &apos;checked/unchecked&apos; for check boxes, &apos;selected/unselected&apos; for radio buttons...) but asking is not harmful either.


&gt; 2. Each embedded object should implement AtkHyperlink.

Is this really always needed for each embedded object of any kind? 

I can see it for the image, but don&apos;t know how this interface would be implemented for other objects, such as the check boxes or the radio buttons (e.g. what should they return in the atk_hyperlink_get_uri() method?).

Taking a look at the following document (look for the text &quot;Check one or more&quot; to easily find the part I&apos;m talking about)...

http://accessibility.linuxfoundation.org/~gk4/a11y/ddc06/guide/atkguideddc06.html

...it seems they suggest using AthHyperText/Link stuff for the case of the image, but not for check buttons and their associated text, which would just implement AtkAction and AtkText, respectively.

But of course, we could decide to do something else. Just pointing out that link as a reference trying to confirm things.


&gt; 3. Each paragraph should implement AtkHypertext.

Makes sense.


&gt; (I realize this is likely at least three bugs/rfes. But I will let Mario triage and make this an embedded object metabug if and how he sees fit. :-) )

At the moment, things are not perfectly clear so I&apos;ll keep this one as reference, but as soon as this translates into actual code and patches you can be sure I&apos;ll probably file more specific bugs depending on this one.

Thanks again, and sorry for the delay from my side on this topic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334962</commentid>
    <comment_count>4</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2011-01-15 16:08:05 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; You mean some kind of special character like those found in ff, right? 

Yup, FF and OOo Writer.

&gt; Something like this:
&gt; 
&gt;  In [2]: t.getText(0, -1)
&gt;  Out[2]: &quot;Here&apos;s our logo: \xef\xbf\xbc It reminds me of airport security
&gt;           screenings. &quot;

Yup.

&gt; My main question is &quot;how that special character helps to screen readers&quot;? 

It&apos;s a placeholder. For instance, in the case of a radio button, we need to know there&apos;s an object of ATK_ROLE_RADIO_BUTTON, where it is exactly (and thus where to present it). We also need a means to get that radio button (i.e. the AtkObject representation of that radio button) so we can also tell the user it&apos;s state (checked/unchecked, required, etc.)

&gt; I guess the answer is that ORCA would use it to know that it should dive in the object to extract more info (actually I recall you talking to me about this in Seville, not sure if I recall correctly, though :-))

You do. :-)

&gt;but I wonder whether it shouldn&apos;t be better to provide a textual representation for them.

Well, it&apos;s up to the screen reader to handle how to present the state, allow users to have &apos;brief&apos; and &apos;verbose&apos; output, represent embedded objects in braille (often as symbols &lt; &gt; and &lt;x&gt;, rather than text), etc., etc., etc. That something WebKitGtk should take on?? ;-) (rhetorical question)

&gt; Of course, I&apos;m talking from my vast ignorance on the issue :-), and I realize that then we&apos;d need to agree on a specific text representation for each kind of object (e.g. &apos;checked/unchecked&apos; for check boxes, &apos;selected/unselected&apos; for radio buttons...) but asking is not harmful either.

And you&apos;d also have to get all those strings localized into all the languages gnome is localized into, and figure out brief braille symbols, and verbose braille symbols. In a way, I&apos;d love to be able to say, &quot;Yeah, you&apos;re right, this isn&apos;t Orca&apos;s job; it&apos;s WebKitGtk&apos;s.&quot; :-) But right now, I&apos;m pretty sure we&apos;re stuck with it Orca-side. Feel free to keep trying to convince me I&apos;m wrong, as I might let you win. ;-)

It&apos;s never, ever harmful to ask questions. I hope I&apos;ve answered them. If not, ask again and I shall try again.

&gt; &gt; 2. Each embedded object should implement AtkHyperlink.
&gt; 
&gt; Is this really always needed for each embedded object of any kind? 

What we really need is:

* atk_hyperlink_get_start_index()
* atk_hyperlink_get_end_index()
* atk_hyperlink_get_object()

&gt; I can see it for the image, but don&apos;t know how this interface would be implemented for other objects, such as the check boxes or the radio buttons (e.g. what should they return in the atk_hyperlink_get_uri() method?).

Since the return type is a string, and since these objects would not have an associated uri, I would think it would return an empty string.

What we really care about is where is the thing w.r.t. the text (start, end indices) and to be able to say &quot;give me that object&quot; for the purpose of presenting its role, states, coming up with its braille representation, etc., etc.

HTH. Thanks!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335713</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-01-18 01:43:53 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; 
&gt; &gt; You mean some kind of special character like those found in ff, right? 
&gt; 
&gt; Yup, FF and OOo Writer.
&gt; 
&gt; &gt; Something like this:
&gt; &gt; 
&gt; &gt;  In [2]: t.getText(0, -1)
&gt; &gt;  Out[2]: &quot;Here&apos;s our logo: \xef\xbf\xbc It reminds me of airport security
&gt; &gt;           screenings. &quot;
&gt; 
&gt; Yup.
&gt; 
&gt; &gt; My main question is &quot;how that special character helps to screen readers&quot;? 
&gt; 
&gt; It&apos;s a placeholder. For instance, in the case of a radio button, we need
&gt; to know there&apos;s an object of ATK_ROLE_RADIO_BUTTON, where it is exactly
&gt; (and thus where to present it).

Ok.

&gt; We also need a means to get that radio button (i.e. the AtkObject
&gt; representation of that radio button) so we can also tell the user
&gt; it&apos;s state (checked/unchecked, required, etc.)

That should work well enough through the atk_hyperlink_get_object() method, I guess

&gt; &gt; but I wonder whether it shouldn&apos;t be better to provide a textual
&gt; &gt; representation for them.
&gt; 
&gt; Well, it&apos;s up to the screen reader to handle how to present the state, allow
&gt; users to have &apos;brief&apos; and &apos;verbose&apos; output, represent embedded objects in
&gt; braille (often as symbols &lt; &gt; and &lt;x&gt;, rather than text), etc., etc., etc.
&gt; That something WebKitGtk should take on?? ;-) (rhetorical question)

Yeah, forget about my proposal. I don&apos;t really think now such a thing should be done in WKGTK&apos;s side.

&gt; &gt; Of course, I&apos;m talking from my vast ignorance on the issue :-), and I
&gt; &gt; realize that then we&apos;d need to agree on a specific text representation for
&gt; &gt; each kind of object (e.g. &apos;checked/unchecked&apos; for check boxes, 
&gt; &gt; &apos;selected/unselected&apos; for radio buttons...) but asking is not harmful
&gt; &gt; either.
&gt; 
&gt; And you&apos;d also have to get all those strings localized into all the
&gt; languages gnome is localized into, and figure out brief braille symbols,
&gt; and verbose braille symbols. In a way, I&apos;d love to be able to say, &quot;Yeah,
&gt; you&apos;re right, this isn&apos;t Orca&apos;s job; it&apos;s WebKitGtk&apos;s.&quot; :-) But right now,
&gt; I&apos;m pretty sure we&apos;re stuck with it Orca-side. Feel free to keep trying
&gt; to convince me I&apos;m wrong, as I might let you win. ;-)

No, no... :-) I think you&apos;re perfectly right, and therefore I&apos;m perfectly wrong. Actually I also thought of the l10n problem at some point after posting my question, and you just confirmed my doubts :-)

&gt; It&apos;s never, ever harmful to ask questions. I hope I&apos;ve answered them.
&gt; If not, ask again and I shall try again.

You have. Thanks

&gt; &gt; &gt; 2. Each embedded object should implement AtkHyperlink.
&gt; &gt; 
&gt; &gt; Is this really always needed for each embedded object of any kind? 
&gt; 
&gt; What we really need is:
&gt; 
&gt; * atk_hyperlink_get_start_index()
&gt; * atk_hyperlink_get_end_index()
&gt; * atk_hyperlink_get_object()
&gt; 

Good to know, thanks for confirming.

&gt; &gt; I can see it for the image, but don&apos;t know how this interface would
&gt; &gt; be implemented for other objects, such as the check boxes or the
&gt; &gt; radio buttons (e.g. what should they return in the
&gt; &gt; atk_hyperlink_get_uri() method?).
&gt; 
&gt; Since the return type is a string, and since these objects would not
&gt; have an associated uri, I would think it would return an empty string.

Ok.

&gt; What we really care about is where is the thing w.r.t. the text (start,
&gt; end indices) and to be able to say &quot;give me that object&quot; for the
&gt; purpose of presenting its role, states, coming up with its braille
&gt; representation, etc., etc.

Now I understand much better the problem and a way to a possible and actual solution.

Thanks for the awesome feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365128</commentid>
    <comment_count>6</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-03-10 06:32:54 -0800</bug_when>
    <thetext>I have a working implementation of a patch for this bug, but before attaching it I&apos;d like to comment some things on top of this description, for clarity.

(In reply to comment #0)
&gt; [...]
&gt; 1. The AtkText implementation for each paragraph should contain an embedded object character for each embedded object:
&gt; 
&gt; * Here&apos;s our logo: &lt;eoc&gt; It reminds me of airport security screenings.
&gt; 
&gt; * Choose: &lt;eoc&gt; &lt;eoc&gt; (pick one or more)
&gt; 
&gt; * Choose: &lt;eoc&gt; &lt;eoc&gt; (just pick one)
&gt; 
&gt; * Choose: &lt;eoc&gt; &lt;eoc&gt; (just pick one)

As I commented via mail to Joanie, there&apos;s a problem for this and it&apos;s that, even though the example uses &lt;input type=&quot;radiobutton&quot;&gt;text&lt;/input&gt; to associate the &apos;text&apos; string with the button, in practise such relationship doesn&apos;t get reflected in the DOM tree since the &lt;/input&gt; end tag is not correct, hence it will be ignored.

According to the HTML spec:
http://www.w3.org/TR/html4/interact/forms.html#h-17.4

 &quot;17.4 The INPUT element
  [...]
  Start tag: required, End tag: forbidden&quot;
                       ^^^^^^^^^^^^^^^^^^

That explains while in the DOM, rendering and a11y trees the object associated to the INPUT element has no child with the text, but just a sibling holding both the text that was originally between the &lt;input&gt; and &lt;/input&gt; marks, as well as any other text that might be present in that line.

Hence, I think that we have no other option that representing this as firefox currently does, something like:

   * Choose: &lt;eoc&gt;apples &lt;eoc&gt;oranges (just pick one)

...and then AT&apos;s would need to do some extra work to figure out which text is related to which input elements. In the case of the GTK toolkit is different because both check and radio buttons have internal attributes for holding a (optional) string as a label, but for the case of HTML that&apos;s not that way, and we can&apos;t either make assumptions like &quot;the text at the right/left side of the button&quot;, or the like. 

Guess that the only option would be to explicitly use the &lt;label&gt; tag to &apos;label&apos; those objects in some way...

&gt; 2. Each embedded object should implement AtkHyperlink.

Done in the current patch. Evey embedded object implements this the AtkHyperlinkImpl interface, allowing to get a instance of the AtkHyperlink class for every embedded object.

Also, every instance of the AtkHyperlink class can return the associated AtkObject by calling to atk_hyperlink_get_object().

&gt; 3. Each paragraph should implement AtkHypertext.

Done.

&gt; (I realize this is likely at least three bugs/rfes. But I will let Mario triage and make this an embedded object metabug if and how he sees fit. :-) )

I think it&apos;s ok having it under the same bug :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365289</commentid>
    <comment_count>7</comment_count>
      <attachid>85344</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-03-10 10:20:01 -0800</bug_when>
    <thetext>Created attachment 85344
Patch proposal + Unit test

Attaching patch proposal + Unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380049</commentid>
    <comment_count>8</comment_count>
      <attachid>85344</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-04-05 19:23:18 -0700</bug_when>
    <thetext>Comment on attachment 85344
Patch proposal + Unit test

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

Accessibility changes generally look pretty good. You should get someone else to take a look at the text iterator changes to make sure something isn&apos;t being missed. Accessibility side (modulus changes) have my review

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1156
&gt; +#endif

Seems like we should have a method like textIteratorBehavior() that will consolidate this logic

&gt; Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:2408
&gt; +

Instead of referencing AccessibilityRenderObject in platform code, which i don&apos;t like, I think we should either have a method renderer() on AccessibilityObject or isRendererReplaced() on accessibility object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380356</commentid>
    <comment_count>9</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-04-06 07:45:43 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 85344 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85344&amp;action=review
&gt; 
&gt; Accessibility changes generally look pretty good. You should get someone else 
&gt; to take a look at the text iterator changes to make sure something isn&apos;t 
&gt; being missed. Accessibility side (modulus changes) have my review

Thanks. Adding Enrica Casucci to CC, as the person that already took a look into other patches I wrote in the past, related to text editing.

&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1156
&gt; &gt; +#endif
&gt; 
&gt; Seems like we should have a method like textIteratorBehavior() that will
&gt; consolidate this logic

Ok.

&gt; &gt; Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:2408
&gt; &gt; +
&gt; 
&gt; Instead of referencing AccessibilityRenderObject in platform code, which i 
&gt; don&apos;t like, I think we should either have a method renderer() on 
&gt; AccessibilityObject or isRendererReplaced() on accessibility object.

Ok, but as AccessibilityRenderObject is also being referenced in several other parts of the GTK&apos;s wrapper, I wonder whether this change shouldn&apos;t go in a separate patch to this one, and now focus in fixing this bug.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380484</commentid>
    <comment_count>10</comment_count>
      <attachid>88447</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-04-06 09:33:23 -0700</bug_when>
    <thetext>Created attachment 88447
Patch proposal + Unit test

Attaching a new patch with some changes over it, based on Chris&apos;s previous comments.

(In reply to comment #9)
&gt; [...]
&gt; &gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1156
&gt; &gt; &gt; +#endif
&gt; &gt; 
&gt; &gt; Seems like we should have a method like textIteratorBehavior() that will
&gt; &gt; consolidate this logic
&gt; 
&gt; Ok.

Done.

&gt; &gt; &gt; Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:2408
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Instead of referencing AccessibilityRenderObject in platform code, which i 
&gt; &gt; don&apos;t like, I think we should either have a method renderer() on 
&gt; &gt; AccessibilityObject or isRendererReplaced() on accessibility object.
&gt; 
&gt; Ok, but as AccessibilityRenderObject is also being referenced in several
&gt; other parts of the GTK&apos;s wrapper, I wonder whether this change shouldn&apos;t
&gt; go in a separate patch to this one, and now focus in fixing this bug.

Done, by reporting a new bug (bug 57955) for fixing that, providing a patch there (currently pending on review) and developing the new patch for this bug on top of that one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380485</commentid>
    <comment_count>11</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-04-06 09:34:04 -0700</bug_when>
    <thetext>Setting dependency on bug 57955, since the current patch here was developed on top of the patch currently proposed for fixing that other one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382252</commentid>
    <comment_count>12</comment_count>
      <attachid>88447</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-04-08 08:30:31 -0700</bug_when>
    <thetext>Comment on attachment 88447
Patch proposal + Unit test

changes look good to me. if we can just get someone familiar with text editing code to ensure that&apos;s the best way to handle this case, this should be r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382289</commentid>
    <comment_count>13</comment_count>
      <attachid>88447</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-04-08 09:27:24 -0700</bug_when>
    <thetext>Comment on attachment 88447
Patch proposal + Unit test

The changes look reasonable to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383306</commentid>
    <comment_count>14</comment_count>
      <attachid>88447</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-04-11 11:26:10 -0700</bug_when>
    <thetext>Comment on attachment 88447
Patch proposal + Unit test

r=me, considering feedback from enrica</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383494</commentid>
    <comment_count>15</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2011-04-11 14:02:40 -0700</bug_when>
    <thetext>Committed r83493: &lt;http://trac.webkit.org/changeset/83493&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>78400</attachid>
            <date>2011-01-10 07:53:13 -0800</date>
            <delta_ts>2011-01-10 07:53:13 -0800</delta_ts>
            <desc>test case</desc>
            <filename>eoc_test.html</filename>
            <type>text/html</type>
            <size>843</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGhlYWQ+CiAgICA8dGl0bGU+RW1iZWRkZWQgT2JqZWN0IENoYXJhY3RlcnMgVGVz
dDwvdGl0bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+CiAgICAgIEhlcmUncyBvdXIgbG9n
bzogPGltZyBzcmM9Imh0dHA6Ly9saXZlLmdub21lLm9yZy9BY2Nlc3NpYmlsaXR5P2FjdGlvbj1B
dHRhY2hGaWxlJmRvPWdldCZ0YXJnZXQ9bG9nby5wbmciIGFsdD0iR05PTUUgYTExeSB0ZWFtIGxv
Z28iIC8+IEl0IHJlbWluZHMgbWUgb2YgYWlycG9ydCBzZWN1cml0eSBzY3JlZW5pbmdzLgogICAg
PC9wPgogICAgPHA+CiAgICAgIENob29zZToKICAgICAgPGlucHV0IHZhbHVlPSJhcHBsZXMiIHR5
cGU9ImNoZWNrYm94Ij5hcHBsZXM8L2lucHV0PgogICAgICA8aW5wdXQgdmFsdWU9Im9yYW5nZXMi
IHR5cGU9ImNoZWNrYm94Ij5vcmFuZ2VzPC9pbnB1dD4KICAgICAgKHBpY2sgb25lIG9yIG1vcmUp
CiAgICA8L3A+CiAgICA8cD4KICAgICAgQ2hvb3NlOgogICAgICA8aW5wdXQgbmFtZT0icmNob2lj
ZSIgdmFsdWU9ImFwcGxlcyIgdHlwZT0icmFkaW8iPmFwcGxlczwvaW5wdXQ+CiAgICAgIDxpbnB1
dCBuYW1lPSJyY2hvaWNlIiB2YWx1ZT0ib3JhbmdlcyIgdHlwZT0icmFkaW8iPm9yYW5nZXM8L2lu
cHV0PgogICAgICAoanVzdCBwaWNrIG9uZSkKICAgIDwvcD4KICAgIDxwPgogICAgICBDaG9vc2U6
CiAgICAgIDxzZWxlY3QgbmFtZT0iZnJ1aXQiPgogICAgICAgIDxvcHRpb24+YXBwbGVzPC9vcHRp
b24+CiAgICAgICAgPG9wdGlvbj5vcmFuZ2VzPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PgogICAg
ICAoanVzdCBwaWNrIG9uZSkKICAgIDwvcD4KICA8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85344</attachid>
            <date>2011-03-10 10:20:01 -0800</date>
            <delta_ts>2011-04-06 09:33:23 -0700</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0001-2011-03-10-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>26193</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBkYjhlYjgxZjNhZjk2ZjY2OWRhODY2MDVjNzY5MTdjYjVjMWM3YzllIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUaHUsIDEwIE1hciAyMDExIDE4OjQ3OjQ1ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMS0wMy0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR3RrXSBJbXBs
ZW1lbnQgc3VwcG9ydCBmb3IgRW1iZWRkZWQgT2JqZWN0cwogICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE0OAoKICAgICAgICBFeHBvc2Ugc3BlY2lhbCBP
QkpFQ1QgY2hhcmFjdGVyIGZvciByZXBsYWNlZCBlbGVtZW50cywgaW1wbGVtZW50aW5nCiAgICAg
ICAgQXRrVGV4dCBhbmQgQXRrSHlwZXJsaW5rIHdoZW4gcmVxdWlyZWQuCgogICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dFVuZGVyRWxlbWVudCk6IFVzZSB0aGUK
ICAgICAgICBuZXcgYmVoYXZpb3VyIFRleHRJdGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXJzIGZvcgogICAgICAgIGVuc3VyaW5nIHRoYXQgb2JqZWN0IHJlcGxhY2VtZW50IGNo
YXJhY3RlcnMgZ2V0IGVtaXR0ZWQgZm9yIEdUSy4KICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWUpOiBEaXR0by4KICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24pOgogICAg
ICAgIENvbnNpZGVyIHJlcGxhY2VkIGVsZW1lbnRzIHdoZW4gY2FsY3VsYXRpbmcgcmFuZ2UgbGVu
Z3RoIGluIEdUSy4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQXRrLmNwcDoKICAgICAgICAodGV4dEZvclJlbmRlcmVyKTogT3VwdXQgdGhlICdv
YmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyBmb3IKICAgICAgICByZXBsYWNlZCBvYmplY3Rz
LgogICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KTogQ29uc2lkZXIgcmVwbGFj
ZWQgZWxlbWVudHMgd2hlbgogICAgICAgIGNhbGN1bGF0aW5nIHJhbmdlIGxlbmd0aCBpbiBHVEsu
CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rKTogUmVtb3ZlIHdyb25n
IGV4dHJhIGNoZWNrIHRoYXQKICAgICAgICB3ZXJlIGNhdXNpbmcgb25seSBsaW5rcyB0byBiZSBj
b25zaWRlcmVkLgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzKTog
UmVwbGFjZSB3cm9uZyAnaXNMaW5rKCknCiAgICAgICAgY2hlY2sgd2l0aCB0aGUgcmlnaHQgb25l
LCBieSBjaGVja2luZyB0aGF0IHRoZSByaWdodCBBVEsgaW50ZXJmYWNlCiAgICAgICAgaXMgYmVp
bmcgaW1wbGVtZW50ZWQgYnkgdGhlIEF0a09iamVjdC4KICAgICAgICAoZ2V0SW50ZXJmYWNlTWFz
a0Zyb21PYmplY3QpOiBJbXBsZW1lbnQgdGhlIEh5cGVybGluayBpbnRlcmZhY2UKICAgICAgICBi
b3RoIGZvciBsaW5rcyBhbmQgcmVwbGFjZWQgb2JqZWN0cy4KICAgICAgICAob2JqZWN0QW5kT2Zm
c2V0VW5pZ25vcmVkKTogQ29uc2lkZXIgcmVwbGFjZWQgZWxlbWVudHMgd2hlbgogICAgICAgIGNh
bGN1bGF0aW5nIHJhbmdlIGxlbmd0aCBpbiBHVEsuCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcDoKICAgICAgICAoZ2V0UmFuZ2VMZW5ndGhG
b3JPYmplY3QpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0U3RhcnRJbmRl
eCk6IFVzZQogICAgICAgIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZSgpIGluc3RlYWQgb2Yg
Zmlyc3RQb3NpdGlvbkluTm9kZSgpLCB0bwogICAgICAgIHByb3Blcmx5IHdvcmsgd2l0aCBub24g
ZWRpdGFibGUgY29udGVudHMuCiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRF
bmRJbmRleCk6IERpdHRvLgogICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDogTmV3IHZh
bHVlIGluIHRoZSBUZXh0SXRlcmF0b3JCZWhhdmlvcgogICAgICAgIGVudW1lcmF0aW9uIChUZXh0
SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycykgYW5kIG5ldwogICAgICAg
IHByaXZhdGUgdmFyaWFibGUgdG8gY29uc2lkZXIgdGhhdCBuZXcgb3B0aW9uIGludGVybmFsbHku
CiAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlRl
eHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKTogSW5pdGlhbGl6ZSB0aGUgbmV3IHByaXZhdGUKICAg
ICAgICBhdHRyaWJ1dGUgbV9lbWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycyBpbiBjb25z
dHJ1Y3RvcnMuCiAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRF
bGVtZW50KTogRW1pdCB0aGUgJ29iamVjdAogICAgICAgIHJlcGxhY2VtZW50IGNoYXJhY3Rlcicg
d2hlbiBtX2VtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzLgoKMjAxMS0wMy0xMCAgTWFy
aW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR3RrXSBJbXBsZW1lbnQgc3VwcG9ydCBmb3Ig
RW1iZWRkZWQgT2JqZWN0cwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MjE0OAoKICAgICAgICBOZXcgYWNjZXNzaWJpbGl0eSB1bml0IHRlc3QgZm9yIGVt
YmVkZGVkIG9iamVjdHMuCgogICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgogICAgICAgICh0ZXN0
V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKTogTmV3IHVuaXQgdGVzdC4KICAgICAgICAobWFpbik6
IEFkZCB0aGUgbmV3IHRlc3QuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDQ2ICsrKysrKysrKysKIC4uLi9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwICAgIHwgICAyOCArKysrKystCiAuLi4vZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCAgICAgICAgICB8ICAgNTIgKysrKysrKy0t
LS0KIC4uLi9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAgICAgICAgICAgICAgIHwg
ICAgNyArLQogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwICAgICAgICAg
ICAgfCAgICA3ICsrCiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oICAgICAg
ICAgICAgICB8ICAgIDUgKy0KIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxMyArKysKIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsu
YyAgICAgICAgICAgICAgICAgIHwgICA4OSArKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBj
aGFuZ2VkLCAyMjEgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDk1ZmFhOWEuLjE1OTg2ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMS0wMy0x
MCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gSW1wbGVtZW50IHN1
cHBvcnQgZm9yIEVtYmVkZGVkIE9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUyMTQ4CisKKyAgICAgICAgRXhwb3NlIHNwZWNpYWwgT0JKRUNU
IGNoYXJhY3RlciBmb3IgcmVwbGFjZWQgZWxlbWVudHMsIGltcGxlbWVudGluZworICAgICAgICBB
dGtUZXh0IGFuZCBBdGtIeXBlcmxpbmsgd2hlbiByZXF1aXJlZC4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KTogVXNlIHRoZQor
ICAgICAgICBuZXcgYmVoYXZpb3VyIFRleHRJdGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXJzIGZvcgorICAgICAgICBlbnN1cmluZyB0aGF0IG9iamVjdCByZXBsYWNlbWVudCBj
aGFyYWN0ZXJzIGdldCBlbWl0dGVkIGZvciBHVEsuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24pOgor
ICAgICAgICBDb25zaWRlciByZXBsYWNlZCBlbGVtZW50cyB3aGVuIGNhbGN1bGF0aW5nIHJhbmdl
IGxlbmd0aCBpbiBHVEsuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAodGV4dEZvclJlbmRlcmVyKTogT3VwdXQg
dGhlICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyBmb3IKKyAgICAgICAgcmVwbGFjZWQg
b2JqZWN0cy4KKyAgICAgICAgKGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QpOiBDb25zaWRl
ciByZXBsYWNlZCBlbGVtZW50cyB3aGVuCisgICAgICAgIGNhbGN1bGF0aW5nIHJhbmdlIGxlbmd0
aCBpbiBHVEsuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluayk6IFJl
bW92ZSB3cm9uZyBleHRyYSBjaGVjayB0aGF0CisgICAgICAgIHdlcmUgY2F1c2luZyBvbmx5IGxp
bmtzIHRvIGJlIGNvbnNpZGVyZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0
R2V0TkxpbmtzKTogUmVwbGFjZSB3cm9uZyAnaXNMaW5rKCknCisgICAgICAgIGNoZWNrIHdpdGgg
dGhlIHJpZ2h0IG9uZSwgYnkgY2hlY2tpbmcgdGhhdCB0aGUgcmlnaHQgQVRLIGludGVyZmFjZQor
ICAgICAgICBpcyBiZWluZyBpbXBsZW1lbnRlZCBieSB0aGUgQXRrT2JqZWN0LgorICAgICAgICAo
Z2V0SW50ZXJmYWNlTWFza0Zyb21PYmplY3QpOiBJbXBsZW1lbnQgdGhlIEh5cGVybGluayBpbnRl
cmZhY2UKKyAgICAgICAgYm90aCBmb3IgbGlua3MgYW5kIHJlcGxhY2VkIG9iamVjdHMuCisgICAg
ICAgIChvYmplY3RBbmRPZmZzZXRVbmlnbm9yZWQpOiBDb25zaWRlciByZXBsYWNlZCBlbGVtZW50
cyB3aGVuCisgICAgICAgIGNhbGN1bGF0aW5nIHJhbmdlIGxlbmd0aCBpbiBHVEsuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHA6CisgICAg
ICAgIChnZXRSYW5nZUxlbmd0aEZvck9iamVjdCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
SHlwZXJsaW5rR2V0U3RhcnRJbmRleCk6IFVzZQorICAgICAgICBmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUoKSBpbnN0ZWFkIG9mIGZpcnN0UG9zaXRpb25Jbk5vZGUoKSwgdG8KKyAgICAgICAg
cHJvcGVybHkgd29yayB3aXRoIG5vbiBlZGl0YWJsZSBjb250ZW50cy4KKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVIeXBlcmxpbmtHZXRFbmRJbmRleCk6IERpdHRvLgorICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmg6IE5ldyB2YWx1ZSBpbiB0aGUgVGV4dEl0ZXJhdG9yQmVoYXZpb3IK
KyAgICAgICAgZW51bWVyYXRpb24gKFRleHRJdGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXJzKSBhbmQgbmV3CisgICAgICAgIHByaXZhdGUgdmFyaWFibGUgdG8gY29uc2lkZXIg
dGhhdCBuZXcgb3B0aW9uIGludGVybmFsbHkuCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IpOiBJ
bml0aWFsaXplIHRoZSBuZXcgcHJpdmF0ZQorICAgICAgICBhdHRyaWJ1dGUgbV9lbWl0c09iamVj
dFJlcGxhY2VtZW50Q2hhcmFjdGVycyBpbiBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0SXRlcmF0b3I6OmhhbmRsZVJlcGxhY2VkRWxlbWVudCk6IEVtaXQgdGhlICdvYmplY3QK
KyAgICAgICAgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyB3aGVuIG1fZW1pdHNPYmplY3RSZXBsYWNl
bWVudENoYXJhY3RlcnMuCisKIDIwMTEtMDMtMDcgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNh
bXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgRUZMIGJ1aWxkIGZpeC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCmluZGV4IGE2MjY5NTAuLjkwYjNiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApA
QCAtMTAyNCw3ICsxMDI0LDE1IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0
ZXh0VW5kZXJFbGVtZW50KCkgY29uc3QKICAgICAgICAgICAgIC8vIGNhdGNoIHN0YWxlIFdlYkNv
cmVBWE9iamVjdCAoc2VlIDxyZGFyOi8vcHJvYmxlbS8zOTYwMTk2PikKICAgICAgICAgICAgIGlm
IChmcmFtZS0+ZG9jdW1lbnQoKSAhPSBub2RlLT5kb2N1bWVudCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgICAgIHJldHVybiBwbGFpblRleHQocmFuZ2VPZkNv
bnRlbnRzKG5vZGUpLmdldCgpLCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KTsK
KworICAgICAgICAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3VyID0gVGV4dEl0ZXJh
dG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gZW1pdCByZXBsYWNlZCBlbGVtZW50cyBmb3IgR1RLLCBhbmQgcHJl
c2VudAorICAgICAgICAgICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0IHJlcGxhY2VtZW50IGNo
YXJhY3RlcicgKDB4RkZGQykuCisgICAgICAgICAgICBiZWhhdmlvdXIgPSBzdGF0aWNfY2FzdDxU
ZXh0SXRlcmF0b3JCZWhhdmlvcj4oYmVoYXZpb3VyIHwgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlcnMpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gcGxhaW5U
ZXh0KHJhbmdlT2ZDb250ZW50cyhub2RlKS5nZXQoKSwgYmVoYXZpb3VyKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTExMzgsOCArMTE0NiwxNSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAgICAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kVmlzaWJsZVBvc2l0aW9uID0gbV9yZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhJ
TlRfTUFYLCBJTlRfTUFYKTsKICAgICAgICAgaWYgKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLmlzTnVs
bCgpIHx8IGVuZFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBwbGFpblRleHQobWFrZVJhbmdlKHN0
YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pLmdldCgpLCBUZXh0SXRlcmF0
b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KTsKKworICAgICAgICBUZXh0SXRlcmF0b3JCZWhhdmlv
ciBiZWhhdmlvdXIgPSBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5OworCisjaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgcmVwbGFjZWQgZWxlbWVu
dHMgZm9yIEdUSywgYW5kIHByZXNlbnQKKyAgICAgICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0
IHJlcGxhY2VtZW50IGNoYXJhY3RlcicgKDB4RkZGQykuCisgICAgICAgIGJlaGF2aW91ciA9IHN0
YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihiZWhhdmlvdXIgfCBUZXh0SXRlcmF0b3JF
bWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJu
IHBsYWluVGV4dChtYWtlUmFuZ2Uoc3RhcnRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3Np
dGlvbikuZ2V0KCksIGJlaGF2aW91cik7CiAgICAgfQogICAgIAogICAgIGlmIChpc1RleHRDb250
cm9sKCkpCkBAIC0yNDkxLDcgKzI1MDYsMTQgQEAgaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG8KICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX3JlbmRlcmVyLT5kb2N1bWVu
dCgpKTsKICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwgMCwgZWMpOwogICAgIHJhbmdlLT5zZXRF
bmQoaW5kZXhQb3NpdGlvbi5hbmNob3JOb2RlKCksIGluZGV4UG9zaXRpb24uZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSwgZWMpOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIFdlIG5lZWQg
dG8gY29uc2lkZXIgcmVwbGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYXMgdGhleSB3aWxsIGJlCisg
ICAgLy8gcHJlc2VudGVkIHdpdGggdGhlICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAo
MHhGRkZDKS4KKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQo
KSwgdHJ1ZSk7CisjZWxzZQogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJh
bmdlLmdldCgpKTsKKyNlbmRpZgogfQogCiBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJh
bmdlJiB2aXNpYmxlUG9zaXRpb25SYW5nZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmNwcAppbmRleCAxZDIzNjEyLi4xMmQwNmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJBdGsuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIgogI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIgorI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVz
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKICNp
bmNsdWRlICJFZGl0b3IuaCIKQEAgLTEwNTYsNiArMTA1Nyw5IEBAIGdjaGFyKiB0ZXh0Rm9yUmVu
ZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgaWYgKG9iamVjdC0+aXNUZXh0
KCkpCiAgICAgICAgICAgICByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG9iamVjdCk7CiAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG9iamVjdC0+aXNSZXBsYWNlZCgpKQorICAgICAg
ICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF91bmljaGFyKHJlc3VsdFRleHQsIG9iamVjdFJlcGxh
Y2VtZW50Q2hhcmFjdGVyKTsKKwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBjaGls
ZHJlbiwgaWYgYW55LCB0byBjb25zaWRlciB3aGVuCiAgICAgICAgICAgICAvLyBjdXJyZW50IG9i
amVjdCBpcyBub3QgYSB0ZXh0IG9iamVjdCBidXQgc29tZSBvZiBpdHMKICAgICAgICAgICAgIC8v
IGNoaWxkcmVuIGFyZSwgaW4gb3JkZXIgbm90IHRvIG1pc3MgdGhvc2UgcG9ydGlvbnMgb2YKQEAg
LTEwNjYsNyArMTA3MCw3IEBAIGdjaGFyKiB0ZXh0Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgSW5s
aW5lVGV4dEJveCogYm94ID0gcmVuZGVyVGV4dC0+Zmlyc3RUZXh0Qm94KCk7CisgICAgICAgIElu
bGluZVRleHRCb3gqIGJveCA9IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT5maXJzdFRleHRCb3go
KSA6IDA7CiAgICAgICAgIHdoaWxlIChib3gpIHsKICAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0g
Y29udmVydFVuaUNoYXJUb1VURjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0
LT50ZXh0TGVuZ3RoKCksIGJveC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7CiAgICAgICAgICAgICBn
X3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgdGV4dCk7CkBAIC0xNjI3LDcgKzE2MzEsNyBAQCBz
dGF0aWMgdm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QsIFZpc2libAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VJblBhcmVudCA9
IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgcGFyZW50Rmlyc3RQb3NpdGlvbiwgbm9k
ZVJhbmdlU3RhcnQpOwogCiAgICAgLy8gU2V0IHZhbHVlcyBmb3Igc3RhcnQgYW5kIGVuZCBvZmZz
ZXRzLgotICAgIHN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZUlu
UGFyZW50LmdldCgpKTsKKyAgICBzdGFydE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgocmFuZ2VJblBhcmVudC5nZXQoKSwgdHJ1ZSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGFkanVz
dCB0aGUgb2Zmc2V0cyBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCiAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChjb3JlT2JqZWN0KS0+cmVu
ZGVyZXIoKTsKQEAgLTE2MzcsNyArMTY0MSw3IEBAIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9m
ZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsCiAg
ICAgfQogCiAgICAgUmVmUHRyPFJhbmdlPiBub2RlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUt
PmRvY3VtZW50KCksIG5vZGVSYW5nZVN0YXJ0LCBub2RlUmFuZ2VFbmQpOwotICAgIGVuZE9mZnNl
dCA9IHN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChub2RlUmFuZ2UuZ2V0
KCkpOworICAgIGVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChub2RlUmFuZ2UuZ2V0KCksIHRydWUpOwogfQogCiBzdGF0aWMgZ2ludCB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF9uX3NlbGVjdGlvbnMoQXRrVGV4dCogdGV4dCkKQEAgLTIxNzEsMTUg
KzIxNzUsMTUgQEAgc3RhdGljIEF0a0h5cGVybGluayogd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4
dEdldExpbmsoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRleHQsIGcKICAgICBnaW50IGN1cnJlbnRMaW5r
ID0gLTE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVDaGlsZCA9IGNoaWxkcmVuLmF0
KGkpLmdldCgpOwotICAgICAgICBpZiAoIWNvcmVDaGlsZC0+YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpICYmIGNvcmVDaGlsZC0+aXNMaW5rKCkpIHsKKyAgICAgICAgaWYgKCFjb3JlQ2hpbGQtPmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAgQXRrT2JqZWN0KiBheE9iamVj
dCA9IGNvcmVDaGlsZC0+d3JhcHBlcigpOworICAgICAgICAgICAgaWYgKCFheE9iamVjdCB8fCAh
QVRLX0lTX0hZUEVSTElOS19JTVBMKGF4T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKwogICAgICAgICAgICAgY3VycmVudExpbmsrKzsKICAgICAgICAgICAgIGlmIChpbmRleCAh
PSBjdXJyZW50TGluaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAg
QXRrT2JqZWN0KiBheE9iamVjdCA9IGNvcmVDaGlsZC0+d3JhcHBlcigpOwotICAgICAgICAgICAg
aWYgKCFheE9iamVjdCB8fCAhQVRLX0lTX0hZUEVSTElOS19JTVBMKGF4T2JqZWN0KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLQogICAgICAgICAgICAgcmV0dXJuIGF0a19oeXBlcmxpbmtf
aW1wbF9nZXRfaHlwZXJsaW5rKEFUS19IWVBFUkxJTktfSU1QTChheE9iamVjdCkpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjE5Niw4ICsyMjAwLDExIEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vz
c2libGVIeXBlcnRleHRHZXROTGlua3MoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRleHQpCiAgICAgZ2lu
dCBsaW5rc0ZvdW5kID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNp
emUoKTsgaSsrKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVDaGlsZCA9IGNo
aWxkcmVuLmF0KGkpLmdldCgpOwotICAgICAgICBpZiAoIWNvcmVDaGlsZC0+YWNjZXNzaWJpbGl0
eUlzSWdub3JlZCgpICYmIGNvcmVDaGlsZC0+aXNMaW5rKCkpCi0gICAgICAgICAgICBsaW5rc0Zv
dW5kKys7CisgICAgICAgIGlmICghY29yZUNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkp
IHsKKyAgICAgICAgICAgIEF0a09iamVjdCogYXhPYmplY3QgPSBjb3JlQ2hpbGQtPndyYXBwZXIo
KTsKKyAgICAgICAgICAgIGlmIChheE9iamVjdCAmJiBBVEtfSVNfSFlQRVJMSU5LX0lNUEwoYXhP
YmplY3QpKQorICAgICAgICAgICAgICAgIGxpbmtzRm91bmQrKzsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIHJldHVybiBsaW5rc0ZvdW5kOwpAQCAtMjM4MiwyNSArMjM4OSwzMiBAQCBzdGF0aWMg
Z3VpbnQxNiBnZXRJbnRlcmZhY2VNYXNrRnJvbU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0KQogICAgIC8vIHRoZSBXZWJLaXRBY2Nlc3NpYmxlIGNsYXNzIGFuZCBsZXQgV2Vi
Q29yZSBkZWNpZGUgd2hhdCB0byBkby4KICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0FD
VElPTjsKIAotICAgIC8vIEh5cGVybGluawotICAgIGlmIChjb3JlT2JqZWN0LT5pc0xpbmsoKSkK
LSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9IWVBFUkxJTks7Ci0KICAgICAvLyBT
ZWxlY3Rpb24KICAgICBpZiAoY29yZU9iamVjdC0+aXNMaXN0Qm94KCkgfHwgY29yZU9iamVjdC0+
aXNNZW51TGlzdCgpKQogICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1NFTEVDVElP
TjsKIAorICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIGF4UmVuZGVyT2JqZWN0ID0gMDsK
KyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gMDsKKworICAgIC8vIEdldCByZW5kZXJlciBp
ZiBhdmFpbGFibGUuCisgICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKSB7CisgICAgICAgIGF4UmVuZGVyT2JqZWN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCo+KGNvcmVPYmplY3QpOworICAgICAgICByZW5kZXJlciA9IGF4UmVu
ZGVyT2JqZWN0LT5yZW5kZXJlcigpOworICAgIH0KKworICAgIC8vIEh5cGVybGluayAobGlua3Mg
YW5kIGVtYmVkZGVkIG9iamVjdHMpLgorICAgIGlmIChjb3JlT2JqZWN0LT5pc0xpbmsoKSB8fCAo
cmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkpCisgICAgICAgIGludGVyZmFjZU1h
c2sgfD0gMSA8PCBXQUlfSFlQRVJMSU5LOworCiAgICAgLy8gVGV4dCAmIEVkaXRhYmxlIFRleHQK
ICAgICBpZiAocm9sZSA9PSBTdGF0aWNUZXh0Um9sZSB8fCBjb3JlT2JqZWN0LT5pc01lbnVMaXN0
T3B0aW9uKCkpCiAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfVEVYVDsKLSAgICBl
bHNlIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAg
IGVsc2UgaWYgKGF4UmVuZGVyT2JqZWN0KSB7CiAgICAgICAgIGlmIChjb3JlT2JqZWN0LT5pc1Rl
eHRDb250cm9sKCkpIHsKICAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfVEVY
VDsKICAgICAgICAgICAgIGlmICghY29yZU9iamVjdC0+aXNSZWFkT25seSgpKQogICAgICAgICAg
ICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfRURJVEFCTEVfVEVYVDsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIGF4UmVuZGVy
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KGNvcmVPYmpl
Y3QpOwotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGF4UmVuZGVyT2JqZWN0
LT5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKHJvbGUgIT0gVGFibGVSb2xlKSB7CiAgICAg
ICAgICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9IWVBFUlRFWFQ7CiAgICAgICAg
ICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5jaGlsZHJlbklubGluZSgpKQpAQCAt
MjU0NCwxMCArMjU1OCwxMCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RBbmRPZmZzZXRV
bmlnbm9yZWQoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgaQogICAgICAgICAgICAg
b2Zmc2V0ID0gMDsKICAgICAgICAgZWxzZSBpZiAoIWlzU3RhcnRPZkxpbmUoZW5kUG9zaXRpb24p
KSB7CiAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9z
aXRpb24sIGVuZFBvc2l0aW9uLnByZXZpb3VzKCkpOwotICAgICAgICAgICAgb2Zmc2V0ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSkgKyAxOworICAgICAgICAgICAgb2Zm
c2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSkgKyAxOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VS
YW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0gICAgICAgICAgICBvZmZzZXQgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIG9mZnNl
dCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwogICAgICAg
ICB9CiAKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCmluZGV4IDU5Mjc0MzAuLjli
YzUxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgog
I2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKICNp
bmNsdWRlIDxhdGsvYXRrLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgpAQCAtMTk4LDcgKzE5OSw3IEBA
IHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRPYmplY3QoQXRr
SHlwZXJsaW5rKiBsaW5rLCBnaW50IGluCiBzdGF0aWMgZ2ludCBnZXRSYW5nZUxlbmd0aEZvck9i
amVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmosIFJhbmdlKiByYW5nZSkKIHsKICAgICAvLyBU
aGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBhY3R1YWwgbGVuZ3RoIGluIG1vc3Qgb2YgdGhlIGNhc2Vz
Ci0gICAgaW50IGJhc2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlKTsK
KyAgICBpbnQgYmFzZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UsIHRy
dWUpOwogCiAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBoeXBlcmxpbmsgYmVsb25n
cyB0byBhIGxpc3QgaXRlbS4KICAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBjb25zaWRlciB0aGUg
bGVuZ3RoIG9mIHRoZSBpdGVtJ3MgbWFya2VyCkBAIC0yMzQsNyArMjM1LDcgQEAgc3RhdGljIGdp
bnQgd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0dldFN0YXJ0SW5kZXgoQXRrSHlwZXJsaW5rKiBs
aW5rKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9u
SW5Ob2RlKG5vZGUtPnBhcmVudE5vZGUoKSksIGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSkpOwor
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCks
IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlLT5wYXJlbnROb2RlKCkpLCBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSkpOwogICAgIHJldHVybiBnZXRSYW5nZUxlbmd0aEZv
ck9iamVjdChjb3JlT2JqZWN0LCByYW5nZS5nZXQoKSk7CiB9CiAKQEAgLTI1MCw3ICsyNTEsNyBA
QCBzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0RW5kSW5kZXgoQXRrSHlw
ZXJsaW5rKiBsaW5rKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBmaXJz
dFBvc2l0aW9uSW5Ob2RlKG5vZGUtPnBhcmVudE5vZGUoKSksIGxhc3RQb3NpdGlvbkluTm9kZShu
b2RlKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9j
dW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUtPnBhcmVudE5vZGUoKSks
IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSkpOwogICAgIHJldHVybiBnZXRSYW5nZUxl
bmd0aEZvck9iamVjdChjb3JlT2JqZWN0LCByYW5nZS5nZXQoKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBhOTU0NmI4Li5lZjEzZmY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0yNTYsNiArMjU2LDcgQEAgVGV4
dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IoKQogICAgICwgbV9lbWl0c1RleHRXaXRob3V0VHJhbnNj
b2RpbmcoZmFsc2UpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRlcihmYWxzZSkKICAgICAsIG1f
aWdub3Jlc1N0eWxlVmlzaWJpbGl0eShmYWxzZSkKKyAgICAsIG1fZW1pdHNPYmplY3RSZXBsYWNl
bWVudENoYXJhY3RlcnMoZmFsc2UpCiB7CiB9CiAKQEAgLTI3NCw2ICsyNzUsNyBAQCBUZXh0SXRl
cmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgVGV4dEl0ZXJhdG9yQmVoYXZpb3Ig
YmVoYXZpb3IpCiAgICAgLCBtX2VtaXRzVGV4dFdpdGhvdXRUcmFuc2NvZGluZyhiZWhhdmlvciAm
IFRleHRJdGVyYXRvckVtaXRzVGV4dHNXaXRob3V0VHJhbnNjb2RpbmcpCiAgICAgLCBtX2hhbmRs
ZWRGaXJzdExldHRlcihmYWxzZSkKICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShiZWhh
dmlvciAmIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCisgICAgLCBtX2VtaXRz
T2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yRW1pdHNP
YmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMpCiB7CiAgICAgaWYgKCFyKQogICAgICAgICByZXR1
cm47CkBAIC02MzgsNiArNjQwLDExIEBAIGJvb2wgVGV4dEl0ZXJhdG9yOjpoYW5kbGVSZXBsYWNl
ZEVsZW1lbnQoKQogCiAgICAgbV9oYXNFbWl0dGVkID0gdHJ1ZTsKIAorICAgIGlmIChtX2VtaXRz
T2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzICYmIHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1Jl
cGxhY2VkKCkpIHsKKyAgICAgICAgZW1pdENoYXJhY3RlcihvYmplY3RSZXBsYWNlbWVudENoYXJh
Y3RlciwgbV9ub2RlLT5wYXJlbnROb2RlKCksIG1fbm9kZSwgMCwgMSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKwogICAgIGlmIChtX2VtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgcmVwbGFjZWQgZWxlbWVudHMgdG8g
YmVoYXZlIGxpa2UgcHVuY3R1YXRpb24gZm9yIGJvdW5kYXJ5IAogICAgICAgICAvLyBmaW5kaW5n
LCBhbmQgdG8gc2ltcGx5IHRha2UgdXAgc3BhY2UgZm9yIHRoZSBzZWxlY3Rpb24gcHJlc2VydmF0
aW9uIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggYjBjMzEwYS4uNDBk
MzEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC00MSw3ICs0MSw4
IEBAIGVudW0gVGV4dEl0ZXJhdG9yQmVoYXZpb3IgewogICAgIFRleHRJdGVyYXRvckVtaXRzQ2hh
cmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zID0gMSA8PCAwLAogICAgIFRleHRJdGVy
YXRvckVudGVyc1RleHRDb250cm9scyA9IDEgPDwgMSwKICAgICBUZXh0SXRlcmF0b3JFbWl0c1Rl
eHRzV2l0aG91dFRyYW5zY29kaW5nID0gMSA8PCAyLAotICAgIFRleHRJdGVyYXRvcklnbm9yZXNT
dHlsZVZpc2liaWxpdHkgPSAxIDw8IDMKKyAgICBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNp
YmlsaXR5ID0gMSA8PCAzLAorICAgIFRleHRJdGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXJzID0gMSA8PCA0CiB9OwogICAgIAogLy8gRklYTUU6IENhbid0IHJlYWxseSBhbnN3
ZXIgdGhpcyBxdWVzdGlvbiBjb3JyZWN0bHkgd2l0aG91dCBrbm93aW5nIHRoZSB3aGl0ZS1zcGFj
ZSBtb2RlLgpAQCAtMTgwLDYgKzE4MSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhbmRsZWRG
aXJzdExldHRlcjsKICAgICAvLyBVc2VkIHdoZW4gdGhlIHZpc2liaWxpdHkgb2YgdGhlIHN0eWxl
IHNob3VsZCBub3QgYWZmZWN0IHRleHQgZ2F0aGVyaW5nLgogICAgIGJvb2wgbV9pZ25vcmVzU3R5
bGVWaXNpYmlsaXR5OworICAgIC8vIFVzZWQgd2hlbiBlbWl0dGluZyB0aGUgc3BlY2lhbCAweEZG
RkMgY2hhcmFjdGVyIGlzIHJlcXVpcmVkLgorICAgIGJvb2wgbV9lbWl0c09iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVyczsKIH07CiAKIC8vIEl0ZXJhdGVzIHRocm91Z2ggdGhlIERPTSByYW5nZSwg
cmV0dXJuaW5nIGFsbCB0aGUgdGV4dCwgYW5kIDAtbGVuZ3RoIGJvdW5kYXJpZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwppbmRleCBjNTNlZDA2Li4zYzA0MmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMTEtMDMtMTAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
dGtdIEltcGxlbWVudCBzdXBwb3J0IGZvciBFbWJlZGRlZCBPYmplY3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE0OAorCisgICAgICAgIE5ldyBh
Y2Nlc3NpYmlsaXR5IHVuaXQgdGVzdCBmb3IgZW1iZWRkZWQgb2JqZWN0cy4KKworICAgICAgICAq
IHRlc3RzL3Rlc3RhdGsuYzoKKyAgICAgICAgKHRlc3RXZWJraXRBdGtFbWJlZGRlZE9iamVjdHMp
OiBOZXcgdW5pdCB0ZXN0LgorICAgICAgICAobWFpbik6IEFkZCB0aGUgbmV3IHRlc3QuCisKIDIw
MTEtMDMtMDEgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RhdGsuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwppbmRl
eCA3OWNhNjdkLi5hNjU2YjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0YXRrLmMKKysrIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCkBAIC01MCw2
ICs1MCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c1dpdGhFeHRyYW5lb3VzV2hpdGVT
cGFjZXMgPSAiPGh0bWw+PGhlYWQ+PGJvZHk+PHA+VGhpCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBj
b21ib0JveFNlbGVjdG9yID0gIjxodG1sPjxib2R5PjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2
YWx1ZT0nZm9vJz5mb288L29wdGlvbj48b3B0aW9uIHZhbHVlPSdiYXInPmJhcjwvb3B0aW9uPjwv
c2VsZWN0PjwvYm9keT48L2h0bWw+IjsKIAorc3RhdGljIGNvbnN0IGNoYXIqIGVtYmVkZGVkT2Jq
ZWN0cyA9ICI8aHRtbD48Ym9keT48cD5DaG9vc2U6IDxpbnB1dCB2YWx1ZT0nZm9vJyB0eXBlPSdj
aGVja2JveCcvPmZvbyA8aW5wdXQgdmFsdWU9J2JhcicgdHlwZT0nY2hlY2tib3gnLz5iYXIgKHBp
Y2sgb25lKTwvcD48cD5DaG9vc2U6IDxzZWxlY3QgbmFtZT0nZm9vJz48b3B0aW9uPmJhcjwvb3B0
aW9uPjxvcHRpb24+YmF6PC9vcHRpb24+PC9zZWxlY3Q+IChwaWNrIG9uZSk8L3A+PHA+PGlucHV0
IG5hbWU9J2Zvb2JhcmJ1dHRvbicgdmFsdWU9J2Zvb2JhcicgdHlwZT0nYnV0dG9uJy8+PC9wPjwv
Ym9keT48L2h0bWw+IjsKKwogc3RhdGljIGNvbnN0IGNoYXIqIGZvcm1XaXRoVGV4dElucHV0cyA9
ICI8aHRtbD48Ym9keT48Zm9ybT48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZW50cnknIC8+PC9m
b3JtPjwvYm9keT48L2h0bWw+IjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGh5cGVydGV4dEFuZEh5
cGVybGlua3MgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBubyBsaW5rcyBhdCBh
bGw8L3A+PHA+PGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+QSBsaW5lPC9hPiB3aXRoIDxh
IGhyZWY9J2h0dHA6Ly9iYXIuYmF6LmZvby8nPmEgbGluayBpbiB0aGUgbWlkZGxlPC9hPiBhcyB3
ZWxsIGFzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIDxhIGhyZWY9J2h0dHA6Ly9iYXouZm9vLmJhci8n
PmF0IHRoZSBlbmQ8L2E+PC9wPjwvYm9keT48L2h0bWw+IjsKQEAgLTQ4MCw2ICs0ODIsOTIgQEAg
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NvbWJvQm94KCkKICAgICBnX29iamVjdF91bnJlZih3
ZWJWaWV3KTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cygp
Cit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0
a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lk
Z2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBlbWJlZGRlZE9iamVjdHMsIDAs
IDAsIDApOworCisgICAgLyogV2FpdCBmb3IgdGhlIGFjY2Vzc2libGUgb2JqZWN0cyB0byBiZSBj
cmVhdGVkLiAqLworICAgIHdhaXRGb3JBY2Nlc3NpYmxlT2JqZWN0cygpOworCisgICAgQXRrT2Jq
ZWN0KiBvYmplY3QgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2ViVmll
dykpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgxID0g
QVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApKTsKKyAg
ICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lT
X0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisKKyAgICBjb25zdCBnY2hhciogZXhwZWN0ZWRUZXh0
ID0gIkNob29zZTogXDM1N1wyNzdcMjc0Zm9vIFwzNTdcMjc3XDI3NGJhciAocGljayBvbmUpIjsK
KyAgICBjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQocGFyYWdyYXBoMSwgMCwgLTEpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgZXhwZWN0ZWRUZXh0KTsKKyAgICBnX2ZyZWUo
dGV4dCk7CisKKyAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRL
X0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0s
IDIpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmso
QVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElO
SyhoTGluaykpOworICAgIEF0a09iamVjdCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dl
dF9vYmplY3QoaExpbmssIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3Qp
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtf
Uk9MRV9DSEVDS19CT1gpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9z
dGFydF9pbmRleChoTGluayksID09LCA4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVy
bGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKKworICAgIEF0
a1RleHQqIHBhcmFncmFwaDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9iamVjdCwgMSkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDIpKTsK
KyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKKworICAgIGV4cGVj
dGVkVGV4dCA9ICJDaG9vc2U6IFwzNTdcMjc3XDI3NCAocGljayBvbmUpIjsKKyAgICB0ZXh0ID0g
YXRrX3RleHRfZ2V0X3RleHQocGFyYWdyYXBoMiwgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXh0LCA9PSwgZXhwZWN0ZWRUZXh0KTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICBuTGlu
a3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMikp
OworICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAxKTsKKworICAgIGhMaW5rID0gYXRr
X2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAwKTsKKyAgICBn
X2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7CisgICAgaExpbmtPYmplY3QgPSBhdGtfaHlw
ZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExp
bmtPYmplY3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0
KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJs
aW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09LCA4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDkpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsK
KworICAgIEF0a1RleHQqIHBhcmFncmFwaDMgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMikpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFn
cmFwaDMpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDMpKTsKKwor
ICAgIGV4cGVjdGVkVGV4dCA9ICJcMzU3XDI3N1wyNzQiOworICAgIHRleHQgPSBhdGtfdGV4dF9n
ZXRfdGV4dChwYXJhZ3JhcGgzLCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09
LCBleHBlY3RlZFRleHQpOworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIG5MaW5rcyA9IGF0a19o
eXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgzKSk7CisgICAgZ19h
c3NlcnRfY21waW50KG5MaW5rcywgPT0sIDEpOworCisgICAgaExpbmsgPSBhdGtfaHlwZXJ0ZXh0
X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMyksIDApOworICAgIGdfYXNzZXJ0KEFU
S19IWVBFUkxJTksoaExpbmspKTsKKyAgICBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0
X29iamVjdChoTGluaywgMCk7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkp
OworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19S
T0xFX1BVU0hfQlVUVE9OKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRf
c3RhcnRfaW5kZXgoaExpbmspLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBl
cmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAgICBn
X29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgy
KTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgzKTsKKyAgICBnX29iamVjdF91bnJlZih3
ZWJWaWV3KTsKK30KKwogc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldEZv
cm1zKCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7CkBAIC0xNTU4LDYgKzE2NDYsNyBAQCBpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJl
dE9mZnNldHMiLCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKTsKICAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2VzIiwgdGVz
dFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2VzKTsKICAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NvbWJvQm94IiwgdGVzdFdlYmtpdEF0a0NvbWJvQm94
KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2VtYmVkZGVkT2JqZWN0cyIsIHRl
c3RXZWJraXRBdGtFbWJlZGRlZE9iamVjdHMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvZ2V0VGV4dEF0T2Zmc2V0IiwgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldCk7CiAg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXRGb3JtcyIsIHRl
c3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRGb3Jtcyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXROZXdsaW5lcyIsIHRlc3RXZWJraXRBdGtHZXRUZXh0
QXRPZmZzZXROZXdsaW5lcyk7Ci0tIAoxLjcuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88447</attachid>
            <date>2011-04-06 09:33:23 -0700</date>
            <delta_ts>2011-04-11 11:26:10 -0700</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0001-2011-04-06-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>25096</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBlNDI3MzM1ZTcyMDkzZWQ1NDQ1ZWY5NzRkODYzNGMwYWE3NmNkMDdmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDYgQXByIDIwMTEgMTQ6MDI6NDEgKzAyMDAKU3ViamVjdDogW1BBVENI
XSAyMDExLTA0LTA2ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHdGtdIEltcGxl
bWVudCBzdXBwb3J0IGZvciBFbWJlZGRlZCBPYmplY3RzCiAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTQ4CgogICAgICAgIEV4cG9zZSBzcGVjaWFsIE9C
SkVDVCBjaGFyYWN0ZXIgZm9yIHJlcGxhY2VkIGVsZW1lbnRzLCBpbXBsZW1lbnRpbmcKICAgICAg
ICBBdGtUZXh0IGFuZCBBdGtIeXBlcmxpbmsgd2hlbiByZXF1aXJlZC4KCiAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgogICAgICAgIChXZWJDb3Jl
Ojp0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24s
CiAgICAgICAgdG8gcmV0dXJuIHRoZSByaWdodCBiZWhhdmlvciwgZGVwZW5kaW5nIG9uIHRoZSBw
bGF0Zm9ybSwgc28gaXQKICAgICAgICBlbnN1cmVzIHRoYXQgb2JqZWN0IHJlcGxhY2VtZW50IGNo
YXJhY3RlcnMgZ2V0IGVtaXR0ZWQgZm9yIEdUSy4KICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6dGV4dFVuZGVyRWxlbWVudCk6IFVzZSB0aGUKICAgICAgICBuZXcg
aGVscGVyIGZ1bmN0aW9uIHRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlLgogICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1ZSk6IERpdHRv
LgogICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclZp
c2libGVQb3NpdGlvbik6CiAgICAgICAgQ29uc2lkZXIgcmVwbGFjZWQgZWxlbWVudHMgd2hlbiBj
YWxjdWxhdGluZyByYW5nZSBsZW5ndGggaW4gR1RLLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKICAgICAgICAodGV4dEZvclJl
bmRlcmVyKTogT3VwdXQgdGhlICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyBmb3IKICAg
ICAgICByZXBsYWNlZCBvYmplY3RzLgogICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2Jq
ZWN0KTogQ29uc2lkZXIgcmVwbGFjZWQgZWxlbWVudHMgd2hlbgogICAgICAgIGNhbGN1bGF0aW5n
IHJhbmdlIGxlbmd0aCBpbiBHVEsuCiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRH
ZXRMaW5rKTogUmVtb3ZlIHdyb25nIGV4dHJhIGNoZWNrIHRoYXQKICAgICAgICB3ZXJlIGNhdXNp
bmcgb25seSBsaW5rcyB0byBiZSBjb25zaWRlcmVkLgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
SHlwZXJ0ZXh0R2V0TkxpbmtzKTogUmVwbGFjZSB3cm9uZyAnaXNMaW5rKCknCiAgICAgICAgY2hl
Y2sgd2l0aCB0aGUgcmlnaHQgb25lLCBieSBjaGVja2luZyB0aGF0IHRoZSByaWdodCBBVEsgaW50
ZXJmYWNlCiAgICAgICAgaXMgYmVpbmcgaW1wbGVtZW50ZWQgYnkgdGhlIEF0a09iamVjdC4KICAg
ICAgICAoZ2V0SW50ZXJmYWNlTWFza0Zyb21PYmplY3QpOiBJbXBsZW1lbnQgdGhlIEh5cGVybGlu
ayBpbnRlcmZhY2UKICAgICAgICBib3RoIGZvciBsaW5rcyBhbmQgcmVwbGFjZWQgb2JqZWN0cy4K
ICAgICAgICAob2JqZWN0QW5kT2Zmc2V0VW5pZ25vcmVkKTogQ29uc2lkZXIgcmVwbGFjZWQgZWxl
bWVudHMgd2hlbgogICAgICAgIGNhbGN1bGF0aW5nIHJhbmdlIGxlbmd0aCBpbiBHVEsuCgogICAg
ICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHA6CiAg
ICAgICAgKGdldFJhbmdlTGVuZ3RoRm9yT2JqZWN0KTogRW5zdXJlIHNwYWNlcyBhcmUgdXNlZCBm
b3IgcmVwbGFjZWQKICAgICAgICBlbGVtZW50cyB3aGVuIGNhbGxpbmcgdG8gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCgpLgoKICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6IE5ldyB2
YWx1ZSBpbiB0aGUgVGV4dEl0ZXJhdG9yQmVoYXZpb3IKICAgICAgICBlbnVtZXJhdGlvbiAoVGV4
dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMpIGFuZCBuZXcKICAgICAg
ICBwcml2YXRlIHZhcmlhYmxlIHRvIGNvbnNpZGVyIHRoYXQgbmV3IG9wdGlvbiBpbnRlcm5hbGx5
LgogICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgogICAgICAgIChXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcik6IEluaXRpYWxpemUgdGhlIG5ldyBwcml2YXRlCiAg
ICAgICAgYXR0cmlidXRlIG1fZW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMgaW4gY29u
c3RydWN0b3JzLgogICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmhhbmRsZVJlcGxhY2Vk
RWxlbWVudCk6IEVtaXQgdGhlICdvYmplY3QKICAgICAgICByZXBsYWNlbWVudCBjaGFyYWN0ZXIn
IHdoZW4gbV9lbWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycy4KCjIwMTEtMDQtMDYgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0d0a10gSW1wbGVtZW50IHN1cHBvcnQgZm9y
IEVtYmVkZGVkIE9iamVjdHMKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTIxNDgKCiAgICAgICAgTmV3IGFjY2Vzc2liaWxpdHkgdW5pdCB0ZXN0IGZvciBl
bWJlZGRlZCBvYmplY3RzLgoKICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKICAgICAgICAodGVz
dFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk6IE5ldyB1bml0IHRlc3QuCiAgICAgICAgKG1haW4p
OiBBZGRlZCB0aGUgbmV3IHVuaXQgdGVzdC4KLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDggKysrKysrKysrKysKIC4uLi9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwICAgIHwgICAyOCArKysrKystCiAu
Li4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCAgICAgICAgICB8ICAgNDgg
KysrKysrKy0tLS0KIC4uLi9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAgICAgICAg
ICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
ICAgICAgICAgICAgfCAgICA3ICsrCiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oICAgICAgICAgICAgICB8ICAgIDUgKy0KIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArKysKIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RhdGsuYyAgICAgICAgICAgICAgICAgIHwgICA4OSArKysrKysrKysrKysrKysrKysrKwog
OCBmaWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDkyNDIzMWEuLjI2MmE4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw1NCBAQAog
CiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIFtHdGtdIElt
cGxlbWVudCBzdXBwb3J0IGZvciBFbWJlZGRlZCBPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE0OAorCisgICAgICAgIEV4cG9zZSBzcGVj
aWFsIE9CSkVDVCBjaGFyYWN0ZXIgZm9yIHJlcGxhY2VkIGVsZW1lbnRzLCBpbXBsZW1lbnRpbmcK
KyAgICAgICAgQXRrVGV4dCBhbmQgQXRrSHlwZXJsaW5rIHdoZW4gcmVxdWlyZWQuCisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UpOiBOZXcgaGVscGVy
IGZ1bmN0aW9uLAorICAgICAgICB0byByZXR1cm4gdGhlIHJpZ2h0IGJlaGF2aW9yLCBkZXBlbmRp
bmcgb24gdGhlIHBsYXRmb3JtLCBzbyBpdAorICAgICAgICBlbnN1cmVzIHRoYXQgb2JqZWN0IHJl
cGxhY2VtZW50IGNoYXJhY3RlcnMgZ2V0IGVtaXR0ZWQgZm9yIEdUSy4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQpOiBVc2UgdGhl
CisgICAgICAgIG5ldyBoZWxwZXIgZnVuY3Rpb24gdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJp
bmdWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICBDb25zaWRlciByZXBsYWNl
ZCBlbGVtZW50cyB3aGVuIGNhbGN1bGF0aW5nIHJhbmdlIGxlbmd0aCBpbiBHVEsuCisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6
CisgICAgICAgICh0ZXh0Rm9yUmVuZGVyZXIpOiBPdXB1dCB0aGUgJ29iamVjdCByZXBsYWNlbWVu
dCBjaGFyYWN0ZXInIGZvcgorICAgICAgICByZXBsYWNlZCBvYmplY3RzLgorICAgICAgICAoZ2V0
U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCk6IENvbnNpZGVyIHJlcGxhY2VkIGVsZW1lbnRzIHdo
ZW4KKyAgICAgICAgY2FsY3VsYXRpbmcgcmFuZ2UgbGVuZ3RoIGluIEdUSy4KKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rKTogUmVtb3ZlIHdyb25nIGV4dHJhIGNoZWNr
IHRoYXQKKyAgICAgICAgd2VyZSBjYXVzaW5nIG9ubHkgbGlua3MgdG8gYmUgY29uc2lkZXJlZC4K
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3MpOiBSZXBsYWNlIHdy
b25nICdpc0xpbmsoKScKKyAgICAgICAgY2hlY2sgd2l0aCB0aGUgcmlnaHQgb25lLCBieSBjaGVj
a2luZyB0aGF0IHRoZSByaWdodCBBVEsgaW50ZXJmYWNlCisgICAgICAgIGlzIGJlaW5nIGltcGxl
bWVudGVkIGJ5IHRoZSBBdGtPYmplY3QuCisgICAgICAgIChnZXRJbnRlcmZhY2VNYXNrRnJvbU9i
amVjdCk6IEltcGxlbWVudCB0aGUgSHlwZXJsaW5rIGludGVyZmFjZQorICAgICAgICBib3RoIGZv
ciBsaW5rcyBhbmQgcmVwbGFjZWQgb2JqZWN0cy4KKyAgICAgICAgKG9iamVjdEFuZE9mZnNldFVu
aWdub3JlZCk6IENvbnNpZGVyIHJlcGxhY2VkIGVsZW1lbnRzIHdoZW4KKyAgICAgICAgY2FsY3Vs
YXRpbmcgcmFuZ2UgbGVuZ3RoIGluIEdUSy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwOgorICAgICAgICAoZ2V0UmFuZ2VMZW5ndGhG
b3JPYmplY3QpOiBFbnN1cmUgc3BhY2VzIGFyZSB1c2VkIGZvciByZXBsYWNlZAorICAgICAgICBl
bGVtZW50cyB3aGVuIGNhbGxpbmcgdG8gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCgpLgorCisg
ICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDogTmV3IHZhbHVlIGluIHRoZSBUZXh0SXRl
cmF0b3JCZWhhdmlvcgorICAgICAgICBlbnVtZXJhdGlvbiAoVGV4dEl0ZXJhdG9yRW1pdHNPYmpl
Y3RSZXBsYWNlbWVudENoYXJhY3RlcnMpIGFuZCBuZXcKKyAgICAgICAgcHJpdmF0ZSB2YXJpYWJs
ZSB0byBjb25zaWRlciB0aGF0IG5ldyBvcHRpb24gaW50ZXJuYWxseS4KKyAgICAgICAgKiBlZGl0
aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OlRl
eHRJdGVyYXRvcik6IEluaXRpYWxpemUgdGhlIG5ldyBwcml2YXRlCisgICAgICAgIGF0dHJpYnV0
ZSBtX2VtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzIGluIGNvbnN0cnVjdG9ycy4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50KTogRW1p
dCB0aGUgJ29iamVjdAorICAgICAgICByZXBsYWNlbWVudCBjaGFyYWN0ZXInIHdoZW4gbV9lbWl0
c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycy4KKworMjAxMS0wNC0wNiAgTWFyaW8gU2FuY2hl
eiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgW0dUS10gRG8gbm90IHJlZmVyZW5jZSBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0IGZyb20gcGxhdGZvcm0gZGVwZW5kZW50IGNvZGUKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTU1CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCmluZGV4IGMzNzk0MmYuLmMwZWVlNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAt
MTAxMSw2ICsxMDExLDE5IEBAIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omhp
ZXJhcmNoaWNhbExldmVsKCkgY29uc3QKICAgICByZXR1cm4gbGV2ZWw7CiB9CiAKK3N0YXRpYyBU
ZXh0SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpCit7
CisgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JJZ25vcmVz
U3R5bGVWaXNpYmlsaXR5OworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIFdlIG5lZWQgdG8g
ZW1pdCByZXBsYWNlZCBlbGVtZW50cyBmb3IgR1RLLCBhbmQgcHJlc2VudAorICAgIC8vIHRoZW0g
d2l0aCB0aGUgJ29iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXInICgweEZGRkMpLgorICAgIGJl
aGF2aW9yID0gc3RhdGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KGJlaGF2aW9yIHwgVGV4
dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gYmVoYXZpb3I7Cit9CisKIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojp0ZXh0VW5kZXJFbGVtZW50KCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC0x
MDI1LDcgKzEwMzgsOCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dFVu
ZGVyRWxlbWVudCgpIGNvbnN0CiAgICAgICAgICAgICAvLyBjYXRjaCBzdGFsZSBXZWJDb3JlQVhP
YmplY3QgKHNlZSA8cmRhcjovL3Byb2JsZW0vMzk2MDE5Nj4pCiAgICAgICAgICAgICBpZiAoZnJh
bWUtPmRvY3VtZW50KCkgIT0gbm9kZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgICAgICAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlT2ZDb250ZW50
cyhub2RlKS5nZXQoKSwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSk7CisKKyAg
ICAgICAgICAgIHJldHVybiBwbGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKG5vZGUpLmdldCgpLCB0
ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTExMzksOCArMTE1Myw5IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpzdHJpbmdWYWx1ZSgpIGNvbnN0CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxl
UG9zaXRpb24gPSBtX3JlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKElOVF9NQVgsIElO
VF9NQVgpOwogICAgICAgICBpZiAoc3RhcnRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkgfHwgZW5k
VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHBsYWluVGV4dChtYWtlUmFuZ2Uoc3RhcnRWaXNpYmxl
UG9zaXRpb24sIGVuZFZpc2libGVQb3NpdGlvbikuZ2V0KCksIFRleHRJdGVyYXRvcklnbm9yZXNT
dHlsZVZpc2liaWxpdHkpOworCisgICAgICAgIHJldHVybiBwbGFpblRleHQobWFrZVJhbmdlKHN0
YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pLmdldCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkpOwogICAg
IH0KICAgICAKICAgICBpZiAoaXNUZXh0Q29udHJvbCgpKQpAQCAtMjQ5Miw3ICsyNTA3LDE0IEBA
IGludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdl
OjpjcmVhdGUobV9yZW5kZXJlci0+ZG9jdW1lbnQoKSk7CiAgICAgcmFuZ2UtPnNldFN0YXJ0KG5v
ZGUsIDAsIGVjKTsKICAgICByYW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24uYW5jaG9yTm9kZSgp
LCBpbmRleFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKworI2lmIFBM
QVRGT1JNKEdUSykKKyAgICAvLyBXZSBuZWVkIHRvIGNvbnNpZGVyIHJlcGxhY2VkIGVsZW1lbnRz
IGZvciBHVEssIGFzIHRoZXkgd2lsbCBiZQorICAgIC8vIHByZXNlbnRlZCB3aXRoIHRoZSAnb2Jq
ZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlcicgKDB4RkZGQykuCisgICAgcmV0dXJuIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOworI2Vsc2UKICAgICByZXR1cm4g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSk7CisjZW5kaWYKIH0KIAogSW50
UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25S
YW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgdmlzaWJsZVBvc2l0aW9uUmFuZ2UpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggNmQ2NjJlNC4uZjNi
ZjQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVSb3cu
aCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCkBAIC0xMDUxLDYg
KzEwNTIsOSBAQCBnY2hhciogdGV4dEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiAgICAgICAgIGlmIChvYmplY3QtPmlzVGV4dCgpKQogICAgICAgICAgICAgcmVuZGVyVGV4dCA9
IHRvUmVuZGVyVGV4dChvYmplY3QpOwogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChv
YmplY3QtPmlzUmVwbGFjZWQoKSkKKyAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfdW5p
Y2hhcihyZXN1bHRUZXh0LCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcik7CisKICAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgY2hpbGRyZW4sIGlmIGFueSwgdG8gY29uc2lkZXIgd2hl
bgogICAgICAgICAgICAgLy8gY3VycmVudCBvYmplY3QgaXMgbm90IGEgdGV4dCBvYmplY3QgYnV0
IHNvbWUgb2YgaXRzCiAgICAgICAgICAgICAvLyBjaGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0
byBtaXNzIHRob3NlIHBvcnRpb25zIG9mCkBAIC0xMDYxLDcgKzEwNjUsNyBAQCBnY2hhciogdGV4
dEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCi0gICAgICAgIElubGluZVRleHRCb3gqIGJveCA9IHJlbmRlclRleHQt
PmZpcnN0VGV4dEJveCgpOworICAgICAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSByZW5kZXJUZXh0
ID8gcmVuZGVyVGV4dC0+Zmlyc3RUZXh0Qm94KCkgOiAwOwogICAgICAgICB3aGlsZSAoYm94KSB7
CiAgICAgICAgICAgICBnY2hhciogdGV4dCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJlbmRlclRl
eHQtPmNoYXJhY3RlcnMoKSwgcmVuZGVyVGV4dC0+dGV4dExlbmd0aCgpLCBib3gtPnN0YXJ0KCks
IGJveC0+ZW5kKCkpOwogICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIHRl
eHQpOwpAQCAtMTYyMCw3ICsxNjI0LDcgQEAgc3RhdGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0
c0Zvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmwKICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlSW5QYXJlbnQgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50
KCksIHBhcmVudEZpcnN0UG9zaXRpb24sIG5vZGVSYW5nZVN0YXJ0KTsKIAogICAgIC8vIFNldCB2
YWx1ZXMgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cy4KLSAgICBzdGFydE9mZnNldCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBhcmVudC5nZXQoKSk7CisgICAgc3RhcnRPZmZz
ZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlSW5QYXJlbnQuZ2V0KCksIHRydWUp
OwogCiAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNldHMgZm9yIHRoZSBsaXN0IGl0
ZW0gbWFya2VyLgogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlT2JqZWN0LT5yZW5k
ZXJlcigpOwpAQCAtMTYzMCw3ICsxNjM0LDcgQEAgc3RhdGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zm
c2V0c0Zvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmwKICAg
ICB9CiAKICAgICBSZWZQdHI8UmFuZ2U+IG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+
ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgZW5kT2Zmc2V0
ID0gc3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5nZS5nZXQo
KSk7CisgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG5vZGVSYW5nZS5nZXQoKSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBnaW50IHdlYmtpdF9hY2Nl
c3NpYmxlX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhBdGtUZXh0KiB0ZXh0KQpAQCAtMjE2NCwxNSAr
MjE2OCwxNSBAQCBzdGF0aWMgQXRrSHlwZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0
R2V0TGluayhBdGtIeXBlcnRleHQqIGh5cGVydGV4dCwgZwogICAgIGdpbnQgY3VycmVudExpbmsg
PSAtMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKysp
IHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZUNoaWxkID0gY2hpbGRyZW4uYXQo
aSkuZ2V0KCk7Ci0gICAgICAgIGlmICghY29yZUNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkgJiYgY29yZUNoaWxkLT5pc0xpbmsoKSkgeworICAgICAgICBpZiAoIWNvcmVDaGlsZC0+YWNj
ZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7CisgICAgICAgICAgICBBdGtPYmplY3QqIGF4T2JqZWN0
ID0gY29yZUNoaWxkLT53cmFwcGVyKCk7CisgICAgICAgICAgICBpZiAoIWF4T2JqZWN0IHx8ICFB
VEtfSVNfSFlQRVJMSU5LX0lNUEwoYXhPYmplY3QpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCiAgICAgICAgICAgICBjdXJyZW50TGluaysrOwogICAgICAgICAgICAgaWYgKGluZGV4ICE9
IGN1cnJlbnRMaW5rKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBB
dGtPYmplY3QqIGF4T2JqZWN0ID0gY29yZUNoaWxkLT53cmFwcGVyKCk7Ci0gICAgICAgICAgICBp
ZiAoIWF4T2JqZWN0IHx8ICFBVEtfSVNfSFlQRVJMSU5LX0lNUEwoYXhPYmplY3QpKQotICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotCiAgICAgICAgICAgICByZXR1cm4gYXRrX2h5cGVybGlua19p
bXBsX2dldF9oeXBlcmxpbmsoQVRLX0hZUEVSTElOS19JTVBMKGF4T2JqZWN0KSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMTg5LDggKzIxOTMsMTEgQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNz
aWJsZUh5cGVydGV4dEdldE5MaW5rcyhBdGtIeXBlcnRleHQqIGh5cGVydGV4dCkKICAgICBnaW50
IGxpbmtzRm91bmQgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZUNoaWxkID0gY2hp
bGRyZW4uYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGlmICghY29yZUNoaWxkLT5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkgJiYgY29yZUNoaWxkLT5pc0xpbmsoKSkKLSAgICAgICAgICAgIGxpbmtzRm91
bmQrKzsKKyAgICAgICAgaWYgKCFjb3JlQ2hpbGQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkg
eworICAgICAgICAgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGNvcmVDaGlsZC0+d3JhcHBlcigp
OworICAgICAgICAgICAgaWYgKGF4T2JqZWN0ICYmIEFUS19JU19IWVBFUkxJTktfSU1QTChheE9i
amVjdCkpCisgICAgICAgICAgICAgICAgbGlua3NGb3VuZCsrOworICAgICAgICB9CiAgICAgfQog
CiAgICAgcmV0dXJuIGxpbmtzRm91bmQ7CkBAIC0yNDM3LDI1ICsyNDQ0LDI4IEBAIHN0YXRpYyBn
dWludDE2IGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QpCiAgICAgLy8gdGhlIFdlYktpdEFjY2Vzc2libGUgY2xhc3MgYW5kIGxldCBXZWJD
b3JlIGRlY2lkZSB3aGF0IHRvIGRvLgogICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfQUNU
SU9OOwogCi0gICAgLy8gSHlwZXJsaW5rCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzTGluaygpKQot
ICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0hZUEVSTElOSzsKLQogICAgIC8vIFNl
bGVjdGlvbgogICAgIGlmIChjb3JlT2JqZWN0LT5pc0xpc3RCb3goKSB8fCBjb3JlT2JqZWN0LT5p
c01lbnVMaXN0KCkpCiAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfU0VMRUNUSU9O
OwogCisgICAgLy8gR2V0IHJlbmRlcmVyIGlmIGF2YWlsYWJsZS4KKyAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gMDsKKyAgICBpZiAoY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpCisgICAgICAgIHJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKKwor
ICAgIC8vIEh5cGVybGluayAobGlua3MgYW5kIGVtYmVkZGVkIG9iamVjdHMpLgorICAgIGlmIChj
b3JlT2JqZWN0LT5pc0xpbmsoKSB8fCAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzUmVwbGFjZWQo
KSkpCisgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfSFlQRVJMSU5LOworCiAgICAg
Ly8gVGV4dCAmIEVkaXRhYmxlIFRleHQKICAgICBpZiAocm9sZSA9PSBTdGF0aWNUZXh0Um9sZSB8
fCBjb3JlT2JqZWN0LT5pc01lbnVMaXN0T3B0aW9uKCkpCiAgICAgICAgIGludGVyZmFjZU1hc2sg
fD0gMSA8PCBXQUlfVEVYVDsKLSAgICBlbHNlIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QoKSkgeworICAgIGVsc2UgewogICAgICAgICBpZiAoY29yZU9iamVjdC0+
aXNUZXh0Q29udHJvbCgpKSB7CiAgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJ
X1RFWFQ7CiAgICAgICAgICAgICBpZiAoIWNvcmVPYmplY3QtPmlzUmVhZE9ubHkoKSkKICAgICAg
ICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0VESVRBQkxFX1RFWFQ7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBheFJl
bmRlck9iamVjdCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqPihjb3Jl
T2JqZWN0KTsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBheFJlbmRlck9i
amVjdC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmIChyb2xlICE9IFRhYmxlUm9sZSkgewog
ICAgICAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfSFlQRVJURVhUOwogICAg
ICAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSkK
QEAgLTI2MDMsMTAgKzI2MTMsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0QW5kT2Zm
c2V0VW5pZ25vcmVkKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIGkKICAgICAgICAg
ICAgIG9mZnNldCA9IDA7CiAgICAgICAgIGVsc2UgaWYgKCFpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0
aW9uKSkgewogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbi5wcmV2aW91cygpKTsKLSAgICAgICAgICAgIG9mZnNldCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCkpICsgMTsKKyAgICAgICAgICAg
IG9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpICsg
MTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBt
YWtlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotICAgICAgICAgICAgb2Zmc2V0
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBv
ZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKTsKICAg
ICAgICAgfQogCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAppbmRleCA1ZDM2ZTlk
Li4yNmU3ZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcApAQCAtMTk4LDcgKzE5OCw3
IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRPYmplY3Qo
QXRrSHlwZXJsaW5rKiBsaW5rLCBnaW50IGluCiBzdGF0aWMgZ2ludCBnZXRSYW5nZUxlbmd0aEZv
ck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmosIFJhbmdlKiByYW5nZSkKIHsKICAgICAv
LyBUaGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBhY3R1YWwgbGVuZ3RoIGluIG1vc3Qgb2YgdGhlIGNh
c2VzCi0gICAgaW50IGJhc2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdl
KTsKKyAgICBpbnQgYmFzZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2Us
IHRydWUpOwogCiAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBoeXBlcmxpbmsgYmVs
b25ncyB0byBhIGxpc3QgaXRlbS4KICAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBjb25zaWRlciB0
aGUgbGVuZ3RoIG9mIHRoZSBpdGVtJ3MgbWFya2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHAKaW5kZXggMWIyNWM4Ny4uYjY4YTBjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjU2LDYgKzI1Niw3IEBAIFRleHRJdGVyYXRvcjo6VGV4
dEl0ZXJhdG9yKCkKICAgICAsIG1fZW1pdHNUZXh0V2l0aG91dFRyYW5zY29kaW5nKGZhbHNlKQog
ICAgICwgbV9oYW5kbGVkRmlyc3RMZXR0ZXIoZmFsc2UpCiAgICAgLCBtX2lnbm9yZXNTdHlsZVZp
c2liaWxpdHkoZmFsc2UpCisgICAgLCBtX2VtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJz
KGZhbHNlKQogewogfQogCkBAIC0yNzQsNiArMjc1LDcgQEAgVGV4dEl0ZXJhdG9yOjpUZXh0SXRl
cmF0b3IoY29uc3QgUmFuZ2UqIHIsIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKQogICAg
ICwgbV9lbWl0c1RleHRXaXRob3V0VHJhbnNjb2RpbmcoYmVoYXZpb3IgJiBUZXh0SXRlcmF0b3JF
bWl0c1RleHRzV2l0aG91dFRyYW5zY29kaW5nKQogICAgICwgbV9oYW5kbGVkRmlyc3RMZXR0ZXIo
ZmFsc2UpCiAgICAgLCBtX2lnbm9yZXNTdHlsZVZpc2liaWxpdHkoYmVoYXZpb3IgJiBUZXh0SXRl
cmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQorICAgICwgbV9lbWl0c09iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVycyhiZWhhdmlvciAmIFRleHRJdGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1l
bnRDaGFyYWN0ZXJzKQogewogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtNjM4LDYg
KzY0MCwxMSBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50KCkKIAog
ICAgIG1faGFzRW1pdHRlZCA9IHRydWU7CiAKKyAgICBpZiAobV9lbWl0c09iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVycyAmJiByZW5kZXJlciAmJiByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSB7Cisg
ICAgICAgIGVtaXRDaGFyYWN0ZXIob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsIG1fbm9kZS0+
cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAsIDEpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKICAgICBpZiAobV9lbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucykg
ewogICAgICAgICAvLyBXZSB3YW50IHJlcGxhY2VkIGVsZW1lbnRzIHRvIGJlaGF2ZSBsaWtlIHB1
bmN0dWF0aW9uIGZvciBib3VuZGFyeSAKICAgICAgICAgLy8gZmluZGluZywgYW5kIHRvIHNpbXBs
eSB0YWtlIHVwIHNwYWNlIGZvciB0aGUgc2VsZWN0aW9uIHByZXNlcnZhdGlvbiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDBmMWE2ZmQuLmFkOGI4NzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtNDEsNyArNDEsOCBAQCBlbnVtIFRleHRJ
dGVyYXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyA9IDEgPDwgMCwKICAgICBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0
Q29udHJvbHMgPSAxIDw8IDEsCiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNUZXh0c1dpdGhvdXRUcmFu
c2NvZGluZyA9IDEgPDwgMiwKLSAgICBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5
ID0gMSA8PCAzCisgICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwg
MywKKyAgICBUZXh0SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycyA9IDEg
PDwgNAogfTsKICAgICAKIC8vIEZJWE1FOiBDYW4ndCByZWFsbHkgYW5zd2VyIHRoaXMgcXVlc3Rp
b24gY29ycmVjdGx5IHdpdGhvdXQga25vd2luZyB0aGUgd2hpdGUtc3BhY2UgbW9kZS4KQEAgLTE3
OCw2ICsxNzksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYW5kbGVkRmlyc3RMZXR0ZXI7CiAg
ICAgLy8gVXNlZCB3aGVuIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzdHlsZSBzaG91bGQgbm90IGFm
ZmVjdCB0ZXh0IGdhdGhlcmluZy4KICAgICBib29sIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eTsK
KyAgICAvLyBVc2VkIHdoZW4gZW1pdHRpbmcgdGhlIHNwZWNpYWwgMHhGRkZDIGNoYXJhY3RlciBp
cyByZXF1aXJlZC4KKyAgICBib29sIG1fZW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnM7
CiB9OwogCiAvLyBJdGVyYXRlcyB0aHJvdWdoIHRoZSBET00gcmFuZ2UsIHJldHVybmluZyBhbGwg
dGhlIHRleHQsIGFuZCAwLWxlbmd0aCBib3VuZGFyaWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggY2E5
NDRhMC4uYmFhMGYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTA0
LTA2ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR3RrXSBJbXBsZW1lbnQg
c3VwcG9ydCBmb3IgRW1iZWRkZWQgT2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxNDgKKworICAgICAgICBOZXcgYWNjZXNzaWJpbGl0eSB1
bml0IHRlc3QgZm9yIGVtYmVkZGVkIG9iamVjdHMuCisKKyAgICAgICAgKiB0ZXN0cy90ZXN0YXRr
LmM6CisgICAgICAgICh0ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKTogTmV3IHVuaXQgdGVz
dC4KKyAgICAgICAgKG1haW4pOiBBZGRlZCB0aGUgbmV3IHVuaXQgdGVzdC4KKwogMjAxMS0wNC0w
NSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKaW5kZXggMTYx
YjRiOC4uNjAzYzZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
ay5jCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwpAQCAtNTAsNiArNTAs
OCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNXaXRoRXh0cmFuZW91c1doaXRlU3BhY2Vz
ID0gIjxodG1sPjxoZWFkPjxib2R5PjxwPlRoaQogCiBzdGF0aWMgY29uc3QgY2hhciogY29tYm9C
b3hTZWxlY3RvciA9ICI8aHRtbD48Ym9keT48c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9
J2Zvbyc+Zm9vPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nYmFyJz5iYXI8L29wdGlvbj48L3NlbGVj
dD48L2JvZHk+PC9odG1sPiI7CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBlbWJlZGRlZE9iamVjdHMg
PSAiPGh0bWw+PGJvZHk+PHA+Q2hvb3NlOiA8aW5wdXQgdmFsdWU9J2ZvbycgdHlwZT0nY2hlY2ti
b3gnLz5mb28gPGlucHV0IHZhbHVlPSdiYXInIHR5cGU9J2NoZWNrYm94Jy8+YmFyIChwaWNrIG9u
ZSk8L3A+PHA+Q2hvb3NlOiA8c2VsZWN0IG5hbWU9J2Zvbyc+PG9wdGlvbj5iYXI8L29wdGlvbj48
b3B0aW9uPmJhejwvb3B0aW9uPjwvc2VsZWN0PiAocGljayBvbmUpPC9wPjxwPjxpbnB1dCBuYW1l
PSdmb29iYXJidXR0b24nIHZhbHVlPSdmb29iYXInIHR5cGU9J2J1dHRvbicvPjwvcD48L2JvZHk+
PC9odG1sPiI7CisKIHN0YXRpYyBjb25zdCBjaGFyKiBmb3JtV2l0aFRleHRJbnB1dHMgPSAiPGh0
bWw+PGJvZHk+PGZvcm0+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2VudHJ5JyAvPjwvZm9ybT48
L2JvZHk+PC9odG1sPiI7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBoeXBlcnRleHRBbmRIeXBlcmxp
bmtzID0gIjxodG1sPjxib2R5PjxwPkEgcGFyYWdyYXBoIHdpdGggbm8gbGlua3MgYXQgYWxsPC9w
PjxwPjxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPkEgbGluZTwvYT4gd2l0aCA8YSBocmVm
PSdodHRwOi8vYmFyLmJhei5mb28vJz5hIGxpbmsgaW4gdGhlIG1pZGRsZTwvYT4gYXMgd2VsbCBh
cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCA8YSBocmVmPSdodHRwOi8vYmF6LmZvby5iYXIvJz5hdCB0
aGUgZW5kPC9hPjwvcD48b2w+PGxpPkxpc3QgaXRlbSB3aXRoIGEgPHNwYW4+PGEgaHJlZj0naHR0
cDovL2Zvby5iYXIuYmF6Lyc+bGluayBpbnNpZGUgYSBzcGFuIG5vZGU8L2E+PC9zcGFuPjwvbGk+
PC9vbD48L2JvZHk+PC9odG1sPiI7CkBAIC00ODAsNiArNDgyLDkyIEBAIHN0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtDb21ib0JveCgpCiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CiB9CiAK
K3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtFbWJlZGRlZE9iamVjdHMoKQoreworICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcod2ViVmlldywgZW1iZWRkZWRPYmplY3RzLCAwLCAwLCAwKTsKKworICAg
IC8qIFdhaXQgZm9yIHRoZSBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gYmUgY3JlYXRlZC4gKi8KKyAg
ICB3YWl0Rm9yQWNjZXNzaWJsZU9iamVjdHMoKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0g
Z3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBnX2Fz
c2VydChvYmplY3QpOworCisgICAgQXRrVGV4dCogcGFyYWdyYXBoMSA9IEFUS19URVhUKGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRL
X0lTX1RFWFQocGFyYWdyYXBoMSkpOworICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFy
YWdyYXBoMSkpOworCisgICAgY29uc3QgZ2NoYXIqIGV4cGVjdGVkVGV4dCA9ICJDaG9vc2U6IFwz
NTdcMjc3XDI3NGZvbyBcMzU3XDI3N1wyNzRiYXIgKHBpY2sgb25lKSI7CisgICAgY2hhciogdGV4
dCA9IGF0a190ZXh0X2dldF90ZXh0KHBhcmFncmFwaDEsIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodGV4dCwgPT0sIGV4cGVjdGVkVGV4dCk7CisgICAgZ19mcmVlKHRleHQpOworCisgICAg
Z2ludCBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFy
YWdyYXBoMSkpOworICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAyKTsKKworICAgIEF0
a0h5cGVybGluayogaExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQo
cGFyYWdyYXBoMSksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmspKTsKKyAg
ICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5r
LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7CisgICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfQ0hFQ0tfQk9Y
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExp
bmspLCA9PSwgOCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9p
bmRleChoTGluayksID09LCA5KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19n
ZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlw
ZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAgICBBdGtUZXh0KiBwYXJhZ3Jh
cGgyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEp
KTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgyKSk7CisgICAgZ19hc3NlcnQo
QVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7CisKKyAgICBleHBlY3RlZFRleHQgPSAiQ2hv
b3NlOiBcMzU3XDI3N1wyNzQgKHBpY2sgb25lKSI7CisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90
ZXh0KHBhcmFncmFwaDIsIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sIGV4
cGVjdGVkVGV4dCk7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgbkxpbmtzID0gYXRrX2h5cGVy
dGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7CisKKyAgICBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0
X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0hZ
UEVSTElOSyhoTGluaykpOworICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2Jq
ZWN0KGhMaW5rLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7Cisg
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVf
Q09NQk9fQk9YKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRf
aW5kZXgoaExpbmspLCA9PSwgOCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtf
Z2V0X2VuZF9pbmRleChoTGluayksID09LCA5KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAgICBBdGtUZXh0
KiBwYXJhZ3JhcGgzID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
YmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgzKSk7CisgICAg
Z19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgzKSk7CisKKyAgICBleHBlY3RlZFRl
eHQgPSAiXDM1N1wyNzdcMjc0IjsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQocGFyYWdy
YXBoMywgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgZXhwZWN0ZWRUZXh0
KTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9u
X2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMykpOworICAgIGdfYXNzZXJ0X2NtcGludChu
TGlua3MsID09LCAxKTsKKworICAgIGhMaW5rID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtf
SFlQRVJURVhUKHBhcmFncmFwaDMpLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhM
aW5rKSk7CisgICAgaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmss
IDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKKyAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9QVVNIX0JVVFRP
Tik7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhM
aW5rKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRf
aW5kZXgoaExpbmspLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtf
Z2V0X25fYW5jaG9ycyhoTGluayksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5
cGVybGlua19nZXRfdXJpKGhMaW5rLCAwKSwgPT0sIDApOworCisgICAgZ19vYmplY3RfdW5yZWYo
cGFyYWdyYXBoMSk7CisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMik7CisgICAgZ19vYmpl
Y3RfdW5yZWYocGFyYWdyYXBoMyk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisK
IHN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRGb3JtcygpCiB7CiAgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwpAQCAtMTU3OSw2ICsxNjY3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvY2FyZXRPZmZzZXRzIiwgdGVz
dFdlYmtpdEF0a0NhcmV0T2Zmc2V0cyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9jYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNwYWNlcyIsIHRlc3RXZWJraXRBdGtDYXJl
dE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNwYWNlcyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9jb21ib0JveCIsIHRlc3RXZWJraXRBdGtDb21ib0JveCk7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9lbWJlZGRlZE9iamVjdHMiLCB0ZXN0V2Via2l0QXRrRW1i
ZWRkZWRPYmplY3RzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFRleHRB
dE9mZnNldCIsIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXQpOwogICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0T2Zmc2V0Rm9ybXMiLCB0ZXN0V2Via2l0QXRrR2V0
VGV4dEF0T2Zmc2V0Rm9ybXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0
VGV4dEF0T2Zmc2V0TmV3bGluZXMiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0TmV3bGlu
ZXMpOwotLSAKMS43LjQKCg==
</data>
<flag name="review"
          id="80947"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>