<?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>73349</bug_id>
          
          <creation_ts>2011-11-29 12:35:14 -0800</creation_ts>
          <short_desc>compareBorders() is called too often during painting</short_desc>
          <delta_ts>2012-01-17 11:18:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tables</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>71244</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robert Hogan">robert</reporter>
          <assigned_to name="Robert Hogan">robert</assigned_to>
          <cc>abecsi</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>mitz</cc>
    
    <cc>robert</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>511007</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-11-29 12:35:14 -0800</bug_when>
    <thetext>bug 71244 encountered performance issues when dealing with large tables that have collapsed borders. The problem seems to lie in the intensive use of compareBorders() in RenderTableCell::paintCollapsedBorders().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511079</commentid>
    <comment_count>1</comment_count>
      <attachid>117039</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-11-29 13:42:17 -0800</bug_when>
    <thetext>Created attachment 117039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511202</commentid>
    <comment_count>2</comment_count>
      <attachid>117039</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-11-29 16:34:15 -0800</bug_when>
    <thetext>Comment on attachment 117039
Patch

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

r- for the unneeded size increase for each cell which is a definite NO.

&gt; Source/WebCore/rendering/RenderTable.h:206
&gt; +    }

Nit: Would be better on a single line.

&gt; Source/WebCore/rendering/RenderTableCell.cpp:901
&gt; +    // The parent table is being laid out, so update our collapsed border cache.

Looks like you could add this ASSERT here:

ASSERT(!needsLayout());

&gt; Source/WebCore/rendering/RenderTableCell.cpp:939
&gt; +    }

It would be better to share this code with the previous function. That would provide a single point of failure + likely enhance our checks (like being able to add more ASSERTs).

&gt; Source/WebCore/rendering/RenderTableCell.h:119
&gt; +    void collectBorderValues(RenderTable::CollapsedBorderValues&amp;);

I would prefer to keep the const here and match logical constness definition. You will need to add the mutable property on your collapsed*Borders.

&gt; Source/WebCore/rendering/RenderTableCell.h:187
&gt; +    CollapsedBorderValue m_collapsedBottomBorder;

No! You are adding 4 bytes to each table cell. Tables are already using a lot of memory and there is no way we are going to add more to it. Border collapse are not likely to be the common case (it&apos;s not the initial value for border-collapse) and you are increasing *every* table regardless of that. I would better see the cached borders attached to the section / table itself or in a rare field that gets allocated only if the table needs it (hack the styleDidChange / styleWillChange to properly allocate / deallocate the object).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513042</commentid>
    <comment_count>3</comment_count>
      <attachid>117474</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-12-01 13:21:44 -0800</bug_when>
    <thetext>Created attachment 117474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513133</commentid>
    <comment_count>4</comment_count>
      <attachid>117474</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-01 14:39:47 -0800</bug_when>
    <thetext>Comment on attachment 117474
Patch

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

&gt; Source/WebCore/rendering/RenderTable.h:203
&gt; +    bool invalidCollapsedBorders()

The name of a boolean member function should finish the sentence “table &lt;xxx&gt;” so the name would be something like “has invalid collapsed borders” or “needs to recompute collapsed borders”.

    bool hasInvalidCollapsedBorders() const

or

    bool needsToRecomputeCollapsedBorders() const

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1316
&gt; +    m_cellCollapsedBorders.set(cell, newCellInfo);

There’s a storage leak here if the map already has a stale CellCollapsedBorders for this cell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513173</commentid>
    <comment_count>5</comment_count>
      <attachid>117474</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-01 15:10:05 -0800</bug_when>
    <thetext>Comment on attachment 117474
Patch

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

More comments. How do you enforce that no one actually call collapsed*Border and end up missing the cached values?

We are getting closer but there are still a lot of rough edges (it is a difficult change though).

&gt;&gt; Source/WebCore/rendering/RenderTable.h:203
&gt;&gt; +    bool invalidCollapsedBorders()
&gt; 
&gt; The name of a boolean member function should finish the sentence “table &lt;xxx&gt;” so the name would be something like “has invalid collapsed borders” or “needs to recompute collapsed borders”.
&gt; 
&gt;     bool hasInvalidCollapsedBorders() const
&gt; 
&gt; or
&gt; 
&gt;     bool needsToRecomputeCollapsedBorders() const

Also this should be on one line and const. I will let you pick the right name.

&gt; Source/WebCore/rendering/RenderTableCell.cpp:900
&gt; +    // The parent table is being laid out, so update our collapsed border cache.

This looks bogus. We lazily update our borders during painting. Also you really don&apos;t want to ASSERT you are in the middle of a layout as some fields may be dirty!

&gt; Source/WebCore/rendering/RenderTableCell.cpp:905
&gt; +    addBorderStyle(borderValues, borders-&gt;right());

This changes looks wrong: you used to return the start border not the top border. Depending on your writing mode, those will be different.

&gt; Source/WebCore/rendering/RenderTableCell.cpp:933
&gt; +        collapsedBorders = section()-&gt;cellCollapsedBorders(this);

These lines need to be wrapped in a new method to hide the caching mechanism (the caller should not care about it).

&gt; Source/WebCore/rendering/RenderTableCell.cpp:938
&gt; +    CollapsedBorderValue collapsedRightBorder = collapsedBorders-&gt;right();

Kudos on the better naming.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:76
&gt; +    deleteAllCellCollapsedBorders();

This would be unneeded if ~HashMap hold instances.

&gt; Source/WebCore/rendering/RenderTableSection.h:133
&gt; +    CellCollapsedBorders* cellCollapsedBorders(const RenderTableCell*);

I prefer collapsedBorderForCell which makes it more obvious what it does.

&gt; Source/WebCore/rendering/RenderTableSection.h:193
&gt; +    HashMap&lt;const RenderTableCell*, CellCollapsedBorders*&gt; m_cellCollapsedBorders;

It would be better to store the instance of CellCollapsedBorders and not a pointer to it here. It would make the code easier to read and more bullet-proof (you don&apos;t expect your cache to return a NULL pointer).

&gt; Source/WebCore/rendering/style/CollapsedBorderValue.h:83
&gt; +    CollapsedBorderValue m_right;

I would rather see us store the start, end, before, after values as those are the &quot;primary&quot; values. top, bottom, left, right are dependent on your writing mode and this looks like an unneeded dependency here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520283</commentid>
    <comment_count>6</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-12-13 12:24:00 -0800</bug_when>
    <thetext>This bug is invalid now due to revisions at 71244.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520886</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-14 05:55:36 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; This bug is invalid now due to revisions at 71244.

I don&apos;t think it is. This bug may not be blocking bug 71244 anymore but we are still not caching the borders / calling compareBorders and it is hurting us (see bug 38810 or bug 66184 as 2 examples of that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527209</commentid>
    <comment_count>8</comment_count>
      <attachid>120555</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-12-26 06:49:26 -0800</bug_when>
    <thetext>Created attachment 120555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527401</commentid>
    <comment_count>9</comment_count>
      <attachid>120555</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-27 10:13:07 -0800</bug_when>
    <thetext>Comment on attachment 120555
Patch

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

I like the new approach a bit better as it guarantees we won&apos;t miss the cache. The logic could be made a lot more readable though.

&gt; Source/WebCore/rendering/RenderTable.cpp:299
&gt; +    // and cached when recomputing the table&apos;s width.

s/width/logical width/.

Also the comment is actually lacking half of the explanation: computing the logical width assures that we do resolve the collapsed borders in the inline base direction (before/after cells) not in the block flow direction.

I would really love to have a comment explaining why *all* borders will be computed during layout. This would make sense as unfortunately there is no safe-guard against forgetting to compute a cell&apos;s border in your new caching code. I am not sure how difficult this would be to add so I am leaving this for you to see.

&gt; Source/WebCore/rendering/RenderTable.h:203
&gt; +    bool hasInvalidCollapsedBorders() { return !m_collapsedBordersValid; }

should be |const|

&gt; Source/WebCore/rendering/RenderTableCell.cpp:422
&gt; -            return result;
&gt; +            return cellCollapsedBorders-&gt;start(result);
&gt;      } else if (isStartColumn) {
&gt;          // (3) Our row&apos;s start border.
&gt;          result = chooseBorder(result, CollapsedBorderValue(parent()-&gt;style()-&gt;borderStart(), includeColor ? parent()-&gt;style()-&gt;visitedDependentColor(startColorProperty) : Color(), BROW));
&gt;          if (!result.exists())
&gt; -            return result;
&gt; -        
&gt; +            return cellCollapsedBorders-&gt;start(result);
&gt; +
&gt;          // (4) Our row group&apos;s start border.
&gt;          result = chooseBorder(result, CollapsedBorderValue(section()-&gt;style()-&gt;borderStart(), includeColor ? section()-&gt;style()-&gt;visitedDependentColor(startColorProperty) : Color(), BROWGROUP));
&gt;          if (!result.exists())
&gt; -            return result;
&gt; +            return cellCollapsedBorders-&gt;start(result);

This is globally an anti-pattern. You have to catch each and every |return| to properly cache your new value which makes the code hard to read and very sloppy. The computation should be moved to a new method (computeCollapsed*Border) and collapsed*Border should be the one querying the cache and recomputing as needed.

&gt; Source/WebCore/rendering/RenderTableCell.cpp:900
&gt;  void RenderTableCell::collectBorderValues(RenderTable::CollapsedBorderValues&amp; borderValues) const
&gt;  {
&gt; +    ASSERT(table()-&gt;needsLayout());

If I am reading the code correctly, collectBorderValues can only be called during painting which makes this ASSERT very strange.

&gt; Source/WebCore/rendering/RenderTableCell.cpp:945
&gt; -     
&gt; +    

Unneeded &amp; unrelated change. You are also not going far enough in your white space removal.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1347
&gt; +    return &amp;result.first-&gt;second;

Your logic is quite twisted here. I am not sure why it should be fine to request a collapsed border that is not in our cache.

&gt; Source/WebCore/rendering/RenderTableSection.h:133
&gt; +    CellCollapsedBorders* cellCollapsedBorders(const RenderTableCell*);

You don&apos;t expect this function to return 0 or some garbage. It looks like it should return a reference in this case.

&gt; Source/WebCore/rendering/style/CollapsedBorderValue.h:82
&gt; +    CollapsedBorderValue end(CollapsedBorderValue end) { m_end = end; return m_end; }

Setters should start with &quot;set&quot; per our coding style! It would make your change more readable.

I am really not a huge fan of returning the value in those setters...

&gt; Source/WebCore/rendering/style/CollapsedBorderValue.h:87
&gt; +    bool exists() const { return m_start.exists() &amp;&amp; m_end.exists() &amp;&amp; m_before.exists() &amp;&amp; m_end.exists(); }

This function is unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527449</commentid>
    <comment_count>10</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-12-27 12:45:00 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I would really love to have a comment explaining why *all* borders will be computed during layout. This would make sense as unfortunately there is no safe-guard against forgetting to compute a cell&apos;s border in your new caching code. I am not sure how difficult this would be to add so I am leaving this for you to see.

Right, and since the intention is only to avoid recalculating the borders during painting I&apos;ve changed the approach to be less prone to providing cached values when updated values are intended. Now paintCollapsedBorders() uses the cached values explicitly, in all other cases they are recalculated. I think this ensures that other callers will always get an up-to-date value for the border. If there is a layout or style change, the values will always get recomputed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527450</commentid>
    <comment_count>11</comment_count>
      <attachid>120612</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-12-27 12:46:13 -0800</bug_when>
    <thetext>Created attachment 120612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527574</commentid>
    <comment_count>12</comment_count>
      <attachid>120612</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-28 00:27:02 -0800</bug_when>
    <thetext>Comment on attachment 120612
Patch

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

It looks like some of the previous change got lost (the ASSERT for example, the change in RenderTable::layout, ...).

&gt; Source/WebCore/rendering/RenderTableCell.cpp:327
&gt; -        if (table &amp;&amp; !table-&gt;selfNeedsLayout() &amp;&amp; !table-&gt;normalChildNeedsLayout()&amp;&amp; oldStyle &amp;&amp; oldStyle-&gt;border() != style()-&gt;border())
&gt; +        if (table &amp;&amp; !table-&gt;selfNeedsLayout() &amp;&amp; !table-&gt;normalChildNeedsLayout())

I don&apos;t think this change is right, this would invalidate our cached borders needlessly AFAICT.

&gt; Source/WebCore/rendering/RenderTableCell.cpp:397
&gt; +    ASSERT(cellCollapsedBorders.start().exists());

I fear that this ASSERT could be reached if you set &quot;border-style: hidden&quot; on a cell to disable collapsed borders or am completely wrong?

&gt; Source/WebCore/rendering/RenderTableCell.h:114
&gt; +    CollapsedBorderValue cachedCollapsedStartBorder() const;
&gt; +    CollapsedBorderValue cachedCollapsedEndBorder() const;
&gt; +    CollapsedBorderValue cachedCollapsedBeforeBorder() const;
&gt; +    CollapsedBorderValue cachedCollapsedAfterBorder() const;

I don&apos;t think we need yet others (collapsed) borders related functions. Why can&apos;t the &quot;normal&quot; functions be used and hide the implementation details that we cache the collapsed borders?

&gt; Source/WebCore/rendering/RenderTableCell.h:124
&gt; +    CollapsedBorderValue computeCollapsedStartBorder(IncludeBorderColorOrNot = IncludeBorderColor) const;
&gt; +    CollapsedBorderValue computeCollapsedEndBorder(IncludeBorderColorOrNot = IncludeBorderColor) const;
&gt; +    CollapsedBorderValue computeCollapsedBeforeBorder(IncludeBorderColorOrNot = IncludeBorderColor) const;
&gt; +    CollapsedBorderValue computeCollapsedAfterBorder(IncludeBorderColorOrNot = IncludeBorderColor) const;

Those should be private as don&apos;t want callers to call them needlessly.

&gt; Source/WebCore/rendering/RenderTableCell.h:135
&gt; +    CollapsedBorderValue cachedCollapsedLeftBorder() const;
&gt; +    CollapsedBorderValue cachedCollapsedRightBorder() const;
&gt; +    CollapsedBorderValue cachedCollapsedTopBorder() const;
&gt; +    CollapsedBorderValue cachedCollapsedBottomBorder() const;
&gt; +

Same question as with the other cachedCollapsed*Border functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527606</commentid>
    <comment_count>13</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-12-28 03:44:06 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 120612 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120612&amp;action=review
&gt; 
&gt; It looks like some of the previous change got lost (the ASSERT for example, the change in RenderTable::layout, ...).

Yes, the ASSERT was cruft (:/). The change in RenderTable::layout is no longer necessary because the use of cached collapsed border values now occurs only during painting, instead of depending on m_invalidCollapsedBorders being false when the caller requests the collapsed border values.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableCell.cpp:327
&gt; &gt; -        if (table &amp;&amp; !table-&gt;selfNeedsLayout() &amp;&amp; !table-&gt;normalChildNeedsLayout()&amp;&amp; oldStyle &amp;&amp; oldStyle-&gt;border() != style()-&gt;border())
&gt; &gt; +        if (table &amp;&amp; !table-&gt;selfNeedsLayout() &amp;&amp; !table-&gt;normalChildNeedsLayout())
&gt; 
&gt; I don&apos;t think this change is right, this would invalidate our cached borders needlessly AFAICT.

fast/table/simple_repaint.html is a case where updating the cell&apos;s background necessitates recalculating the collapsed borders. It might be possible to work out a specific set of style changes which require updating collapsed borders and test only for those but my worry is that I would miss one and break something. By updating for any style change to the cell I&apos;m missing out on the performance gain for all style changes but I&apos;m not worsening performance overall. The borders are cached for painting now, so where the style changes they are still only calculated once. The only downside is incurring the qsort for the border values on all style changes. I think this is less than the overhead of calculating the borders themselves as the number of unique collapsed borders to be sorted is generally very small since they are distinct only on style, width and precedence.


&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableCell.cpp:397
&gt; &gt; +    ASSERT(cellCollapsedBorders.start().exists());
&gt; 
&gt; I fear that this ASSERT could be reached if you set &quot;border-style: hidden&quot; on a cell to disable collapsed borders or am completely wrong?

You&apos;re right unfortunately. I think I can use the &apos;cache miss&apos; return value from HashMap::add() to ensure that the cache contains something here.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableCell.h:114
&gt; &gt; +    CollapsedBorderValue cachedCollapsedStartBorder() const;
&gt; &gt; +    CollapsedBorderValue cachedCollapsedEndBorder() const;
&gt; &gt; +    CollapsedBorderValue cachedCollapsedBeforeBorder() const;
&gt; &gt; +    CollapsedBorderValue cachedCollapsedAfterBorder() const;
&gt; 
&gt; I don&apos;t think we need yet others (collapsed) borders related functions. Why can&apos;t the &quot;normal&quot; functions be used and hide the implementation details that we cache the collapsed borders?

I understand your preference for this, but I think the it&apos;s important that the use of cached values for painting (vs computed values during layout or after a style change) is explicit here in order to avoid using cached values when a calculated value is needed. It seems fragile to depend on the state of m_invalidCollapsedBorders to enforce this, so I think it&apos;s safer to make it explicit when painting the borders. After all, during painting is when we expect to make the performance saving so better to not expose the cache to other users of the collapsed border functions.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableCell.h:124
&gt; &gt; +    CollapsedBorderValue computeCollapsedStartBorder(IncludeBorderColorOrNot = IncludeBorderColor) const;
&gt; &gt; +    CollapsedBorderValue computeCollapsedEndBorder(IncludeBorderColorOrNot = IncludeBorderColor) const;
&gt; &gt; +    CollapsedBorderValue computeCollapsedBeforeBorder(IncludeBorderColorOrNot = IncludeBorderColor) const;
&gt; &gt; +    CollapsedBorderValue computeCollapsedAfterBorder(IncludeBorderColorOrNot = IncludeBorderColor) const;
&gt; 
&gt; Those should be private as don&apos;t want callers to call them needlessly.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableCell.h:135
&gt; &gt; +    CollapsedBorderValue cachedCollapsedLeftBorder() const;
&gt; &gt; +    CollapsedBorderValue cachedCollapsedRightBorder() const;
&gt; &gt; +    CollapsedBorderValue cachedCollapsedTopBorder() const;
&gt; &gt; +    CollapsedBorderValue cachedCollapsedBottomBorder() const;
&gt; &gt; +
&gt; 
&gt; Same question as with the other cachedCollapsed*Border functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527862</commentid>
    <comment_count>14</comment_count>
      <attachid>120612</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-29 02:31:48 -0800</bug_when>
    <thetext>Comment on attachment 120612
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderTableCell.cpp:327
&gt;&gt;&gt; +        if (table &amp;&amp; !table-&gt;selfNeedsLayout() &amp;&amp; !table-&gt;normalChildNeedsLayout())
&gt;&gt; 
&gt;&gt; I don&apos;t think this change is right, this would invalidate our cached borders needlessly AFAICT.
&gt; 
&gt; fast/table/simple_repaint.html is a case where updating the cell&apos;s background necessitates recalculating the collapsed borders. It might be possible to work out a specific set of style changes which require updating collapsed borders and test only for those but my worry is that I would miss one and break something. By updating for any style change to the cell I&apos;m missing out on the performance gain for all style changes but I&apos;m not worsening performance overall. The borders are cached for painting now, so where the style changes they are still only calculated once. The only downside is incurring the qsort for the border values on all style changes. I think this is less than the overhead of calculating the borders themselves as the number of unique collapsed borders to be sorted is generally very small since they are distinct only on style, width and precedence.

I am not sure I understand the issue with fast/table/simple_repaint.html. The cell&apos;s background color should not influence your collapsed borders and yet you seem to imply so.

You make a very good point about the correctness and the performance impact. I would rather see the check adapted but at least adding a comment as to why you choose to do it this way would satisfy me. Make sure David Hyatt is fine with this change as he is the one who suggested it in https://bugs.webkit.org/show_bug.cgi?id=64546#c25

&gt;&gt;&gt; Source/WebCore/rendering/RenderTableCell.cpp:397
&gt;&gt;&gt; +    ASSERT(cellCollapsedBorders.start().exists());
&gt;&gt; 
&gt;&gt; I fear that this ASSERT could be reached if you set &quot;border-style: hidden&quot; on a cell to disable collapsed borders or am completely wrong?
&gt; 
&gt; You&apos;re right unfortunately. I think I can use the &apos;cache miss&apos; return value from HashMap::add() to ensure that the cache contains something here.

Your implementation has one logical flaw which shows up here is: you can&apos;t currently tell when you actually expect a cache miss or cache hit in your HashMap.

It looks like you populate your cache only in one place (RenderTableCell::collectBorderValues) but your code doesn&apos;t use this information. I think your logic could be greatly simplified (also your assertions could be tightened) if you used that.

&gt;&gt;&gt; Source/WebCore/rendering/RenderTableCell.h:114
&gt;&gt;&gt; +    CollapsedBorderValue cachedCollapsedAfterBorder() const;
&gt;&gt; 
&gt;&gt; I don&apos;t think we need yet others (collapsed) borders related functions. Why can&apos;t the &quot;normal&quot; functions be used and hide the implementation details that we cache the collapsed borders?
&gt; 
&gt; I understand your preference for this, but I think the it&apos;s important that the use of cached values for painting (vs computed values during layout or after a style change) is explicit here in order to avoid using cached values when a calculated value is needed. It seems fragile to depend on the state of m_invalidCollapsedBorders to enforce this, so I think it&apos;s safer to make it explicit when painting the borders. After all, during painting is when we expect to make the performance saving so better to not expose the cache to other users of the collapsed border functions.

This is a sound argument. Your ChangeLog needs to mention that by design your cache is only used during painting.

I am still not satisfied with splitting totally the logic as this will induce some unneeded complexity, some copy &amp; paste bugs and some bloat. Ideally we would like to reuse the existing functions by adding a parameter to say if you want to use the cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528200</commentid>
    <comment_count>15</comment_count>
      <attachid>120813</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-12-30 11:57:56 -0800</bug_when>
    <thetext>Created attachment 120813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528276</commentid>
    <comment_count>16</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2011-12-31 07:36:47 -0800</bug_when>
    <thetext>Hi Julien,

I&apos;ve slimmed the patch down quite a bit and stayed with the principle of enforcing cached border values when painting. A cache miss during painting will cause an assert, otherwise if a full border computation was requested the result will be cached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528825</commentid>
    <comment_count>17</comment_count>
      <attachid>120813</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-01-03 09:43:16 -0800</bug_when>
    <thetext>Comment on attachment 120813
Patch

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

I like your new patch, it&apos;s cleaner and way more readable!

The patch seems to be missing one part: removing the cache border values from the map when a cell is destroyed. This is a blocker as you could grow your memory without bounds in this approach.

&gt; Source/WebCore/rendering/RenderTableCell.cpp:548
&gt; +        section()-&gt;setCollapsedBorder(this, CBSBefore, result);

What is the performance implication of doing a table lookup every time this code path is hit? (same for the other collapsedBeforeBorder)

Wouldn&apos;t storing the new values during a collectCollapsedBorder achieve the same effect without the previous potential slow-down? (I am likely missing something here but I would like to know if the potential table lookup could be removed from the &quot;common&quot; code path)

&gt; Source/WebCore/rendering/RenderTableCell.cpp:969
&gt; +    CollapsedBorderValue leftVal = collapsedLeftBorder(IncludeBorderColor, UseCachedBorderValue);
&gt; +    CollapsedBorderValue rightVal = collapsedRightBorder(IncludeBorderColor, UseCachedBorderValue);
&gt; +    CollapsedBorderValue topVal = collapsedTopBorder(IncludeBorderColor, UseCachedBorderValue);
&gt; +    CollapsedBorderValue bottomVal = collapsedBottomBorder(IncludeBorderColor, UseCachedBorderValue);

If those are the only call sites where your new arguement is |UseCachedBorderValue| then it would be better to just inline this case here.

&gt; Source/WebCore/rendering/RenderTableSection.h:197
&gt; +    // It is held at TableSection level to spare memory consumption by table cells.

s/TableSection/RenderTableSection/ (a section is a WebKit concept, the spec calls it row group)

&gt; Source/WebCore/rendering/RenderTableSection.h:198
&gt; +    HashMap&lt;pair&lt;const RenderTableCell*, int&gt;, CollapsedBorderValue &gt; m_cellCollapsedBorders;

It should be m_cellsCollapsedBorders to be consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528901</commentid>
    <comment_count>18</comment_count>
      <attachid>120813</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-01-03 11:26:23 -0800</bug_when>
    <thetext>Comment on attachment 120813
Patch

r- based on &quot;The patch seems to be missing one part&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528959</commentid>
    <comment_count>19</comment_count>
      <attachid>120813</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-03 12:29:45 -0800</bug_when>
    <thetext>Comment on attachment 120813
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderTableCell.cpp:548
&gt;&gt; +        section()-&gt;setCollapsedBorder(this, CBSBefore, result);
&gt; 
&gt; What is the performance implication of doing a table lookup every time this code path is hit? (same for the other collapsedBeforeBorder)
&gt; 
&gt; Wouldn&apos;t storing the new values during a collectCollapsedBorder achieve the same effect without the previous potential slow-down? (I am likely missing something here but I would like to know if the potential table lookup could be removed from the &quot;common&quot; code path)

Unfortunately this patch doesn&apos;t &apos;only compute the border when calling collectBorderValues&apos;, it only does: &apos;use the cached border values when painting&apos;. &apos;Only compute in collectBorderValues&apos; is the next step after this but it&apos;s quite tricky, as the borders are often computed/updated outside layout. I&apos;m not even sure it will be possible to achieve in a satisfactory way so I have started with this as a performance gain in its own right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529002</commentid>
    <comment_count>20</comment_count>
      <attachid>120813</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-03 13:27:18 -0800</bug_when>
    <thetext>Comment on attachment 120813
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderTableCell.cpp:969
&gt;&gt; +    CollapsedBorderValue bottomVal = collapsedBottomBorder(IncludeBorderColor, UseCachedBorderValue);
&gt; 
&gt; If those are the only call sites where your new arguement is |UseCachedBorderValue| then it would be better to just inline this case here.

These are indirect calls to collapsed[Before|After|Start|End]Border depending on writing mode, so inlining would require creating similarly named functions with hardcoded parameters calling into collapsed[Before|After|Start|End]Border, no? Given the indirection I can&apos;t see a good way of doing this that doesn&apos;t create four new unnecessary-looking functions so I must be missing your point here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531648</commentid>
    <comment_count>21</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-07 06:42:17 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; 
&gt; These are indirect calls to collapsed[Before|After|Start|End]Border depending on writing mode, so inlining would require creating similarly named functions with hardcoded parameters calling into collapsed[Before|After|Start|End]Border, no? Given the indirection I can&apos;t see a good way of doing this that doesn&apos;t create four new unnecessary-looking functions so I must be missing your point here!

Dumb response - please ignore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531649</commentid>
    <comment_count>22</comment_count>
      <attachid>121550</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-07 07:19:00 -0800</bug_when>
    <thetext>Created attachment 121550
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531650</commentid>
    <comment_count>23</comment_count>
      <attachid>121551</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-07 07:22:41 -0800</bug_when>
    <thetext>Created attachment 121551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531651</commentid>
    <comment_count>24</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-07 07:24:03 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=121551) [details]
&gt; Patch

Hi Julien,

See the ChangeLog for the changes I&apos;ve made to address your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531652</commentid>
    <comment_count>25</comment_count>
      <attachid>121551</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-07 07:25:37 -0800</bug_when>
    <thetext>Comment on attachment 121551
Patch

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

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1345
&gt; +    for (int side = CBSBefore; side &lt; CBSEnd; ++side)

Whoops, that should be &lt;=.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531653</commentid>
    <comment_count>26</comment_count>
      <attachid>121552</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-07 07:32:42 -0800</bug_when>
    <thetext>Created attachment 121552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533277</commentid>
    <comment_count>27</comment_count>
      <attachid>121552</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-01-10 12:00:21 -0800</bug_when>
    <thetext>Comment on attachment 121552
Patch

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

I am fine with the new patch. I would love to see the potential performance degradation measured or at least investigated before giving the final r+ and added to the ChangeLog (also the performance benefit would be nice to give somewhere).

&gt; Source/WebCore/rendering/RenderTableCell.cpp:401
&gt; +    if (includeColor)
&gt; +        section()-&gt;setCollapsedBorder(this, CBSStart, result);

Adding a table lookup here could slow down some operations. Have you checked that it does not make us regress some of the already optimized code paths? (see https://bugs.webkit.org/show_bug.cgi?id=74813 for an example)

&gt; Source/WebCore/rendering/RenderTableCell.cpp:716
&gt; +inline CollapsedBorderValue RenderTableCell::collapsedLeftBorder(RenderStyle* tableStyle) const
&gt;  {
&gt; -    RenderStyle* tableStyle = table()-&gt;style();
&gt;      if (tableStyle-&gt;isHorizontalWritingMode())
&gt; -        return tableStyle-&gt;isLeftToRightDirection() ? collapsedStartBorder(includeColor) : collapsedEndBorder(includeColor);
&gt; -    return tableStyle-&gt;isFlippedBlocksWritingMode() ? collapsedAfterBorder(includeColor) : collapsedBeforeBorder(includeColor);
&gt; +        return tableStyle-&gt;isLeftToRightDirection() ? collapsedStartBorder(IncludeBorderColor, UseCachedBorderValue) : collapsedEndBorder(IncludeBorderColor, UseCachedBorderValue);
&gt; +    return tableStyle-&gt;isFlippedBlocksWritingMode() ? collapsedAfterBorder(IncludeBorderColor, UseCachedBorderValue) : collapsedBeforeBorder(IncludeBorderColor, UseCachedBorderValue);
&gt;  }

You could inline your cache checks here (section()-&gt;cachedCollapsedBorder(this, ...);)  and remove a branch from the common case. I don&apos;t mind keeping the argument in collapsed*Border as this could enable more call-sites to use it.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1345
&gt; +    for (int side = CBSBefore; side &lt;= CBSEnd; ++side)

s/int/CollapsedBorderSide/ ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533349</commentid>
    <comment_count>28</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-10 13:49:53 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableCell.cpp:401
&gt; &gt; +    if (includeColor)
&gt; &gt; +        section()-&gt;setCollapsedBorder(this, CBSStart, result);
&gt; 
&gt; Adding a table lookup here could slow down some operations. Have you checked that it does not make us regress some of the already optimized code paths? (see https://bugs.webkit.org/show_bug.cgi?id=74813 for an example)

The only code paths that compute a border and look up the cache (in the process of setting it) are style change, layout, and calculation of the table&apos;s width. The optimized path introduced in 74813 is unaffected - it still just computes a border and returns it. The big, and only, winner is paintCollapsedBorders() which never computes a border now - it just does a straight cache lookup. There are no other paths to this code that I&apos;m aware of. So it seems like a straightforward performance gain to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534046</commentid>
    <comment_count>29</comment_count>
      <attachid>122053</attachid>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-11 11:12:30 -0800</bug_when>
    <thetext>Created attachment 122053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534869</commentid>
    <comment_count>30</comment_count>
      <attachid>122053</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-01-12 08:38:15 -0800</bug_when>
    <thetext>Comment on attachment 122053
Patch

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

&gt; Source/WebCore/ChangeLog:26
&gt; +         Compute, and also cache if the full border including color was computed. 

Compute, and cache _ if ...

(looks like a noun is missing and should be put instead of the placeholder (disclaimer, I am a non-native English speaker))

&gt; Source/WebCore/rendering/RenderTableCell.cpp:63
&gt; +        recalcSection-&gt;removeCellCollapsedBorders(this);

You should check that the table has collapsing borders before calling removeCellCollapsedBorders (adding 4 table lookups for nothing).

&gt; Source/WebCore/rendering/RenderTableCell.h:176
&gt; +    CollapsedBorderValue collapsedLeftBorder(RenderStyle*) const;
&gt; +    CollapsedBorderValue collapsedRightBorder(RenderStyle*) const;
&gt; +    CollapsedBorderValue collapsedTopBorder(RenderStyle*) const;
&gt; +    CollapsedBorderValue collapsedBottomBorder(RenderStyle*) const;

Those should be renamed cachedCollapsed*Border as they use in the cache now.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1346
&gt; +        m_cellsCollapsedBorders.take(make_pair(cell, side));

This should be m_cellsCollapsedBorders.remove as we don&apos;t need the return value from take.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1356
&gt; +    HashMap&lt;pair&lt;const RenderTableCell*, int&gt;, CollapsedBorderValue&gt;::iterator it = m_cellsCollapsedBorders.find(make_pair(cell, side));

All the 3 previous functions should ASSERT that our table has collapsing borders.

&gt; Source/WebCore/rendering/RenderTableSection.h:141
&gt; +    void removeCellCollapsedBorders(const RenderTableCell*);
&gt; +    void setCollapsedBorder(const RenderTableCell*, CollapsedBorderSide, CollapsedBorderValue);

For consistency, those 2 functions should be named: removeCachedCellCollapsedBorders and setCachedCollapsedBorder.

If you have more consistent and better naming, feel free to use it (I am not entirely satisfied by the 2 previous names).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536259</commentid>
    <comment_count>31</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2012-01-15 05:49:59 -0800</bug_when>
    <thetext>Committed r105029: &lt;http://trac.webkit.org/changeset/105029&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537218</commentid>
    <comment_count>32</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-01-17 11:18:45 -0800</bug_when>
    <thetext>After this change when using fixed layout some pages hit an assert in RenderTableSection.cpp:

https://bugs.webkit.org/show_bug.cgi?id=76405</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117039</attachid>
            <date>2011-11-29 13:42:17 -0800</date>
            <delta_ts>2011-12-01 13:21:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20111129214215.patch</filename>
            <type>text/plain</type>
            <size>8936</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTU5ODgwMGEyOWFkMjI5
YjNkYWZjODRhNzdiNmQ4ZTJiZjgyMTlhYi4uMmMwNjJlMzRjZmYxN2U2MDY1OTlhZGY5NTZlYjM2
Mzg3ODZkMjI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDExLTExLTI5ICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSBjYWxjdWxh
dGVkIGV2ZXJ5IHRpbWUgdGhlIGNvbGxhcHNlZCBib3JkZXJzIGFyZSBwYWludGVkLgorICAgICAg
ICBUaGlzIGlzIHVubmVjZXNzYXJ5LCB0aGV5IG9ubHkgY2hhbmdlIHdpdGggdGhlIGxheW91dCBv
ciBzdHlsZSBzbyBjYWxjdWxhdGUgYW5kCisgICAgICAgIGNhY2hlIHRoZW0gd2hlbmV2ZXIgdGhl
IGxheW91dCBvciBzdHlsZSBjaGFuZ2VzIGFuZCB1c2UgdGhlIGNhY2hlZCB2YWx1ZXMgd2hlbgor
ICAgICAgICBwYWludGluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhp
c3RpbmcgY29sbGFwc2VkIGJvcmRlciB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmludmFsaWRDb2xsYXBz
ZWRCb3JkZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6UmVuZGVyVGFibGVDZWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGVjdEJvcmRlclZhbHVlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVyKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6CisKIDIwMTEtMTEtMjggIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gSXNvbGF0ZVRy
YWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSgpLCBwcmVjZWRlZCBieSBhc3NlcnRpb24gZmFp
bHVyZSAobV9uZXN0ZWRJc29sYXRlQ291bnQgPj0gMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmgKaW5kZXggMmRlOTAwY2ViNGI4ZWY0MTY4YjQ2MTc4OWUzYjUyNWM1N2M0MjA5
NS4uYTQ1YWIyMTFiNTI2YzU0ZDExYjY2Y2IyZDU2OTJkZmZmOWE2ODNkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTIwMCw2ICsyMDAsMTAgQEAgcHVibGljOgog
ICAgICAgICBtX2NvbGxhcHNlZEJvcmRlcnNWYWxpZCA9IGZhbHNlOwogICAgICAgICBtX2NvbGxh
cHNlZEJvcmRlcnMuY2xlYXIoKTsKICAgICB9CisgICAgYm9vbCBpbnZhbGlkQ29sbGFwc2VkQm9y
ZGVycygpCisgICAgeworICAgICAgICByZXR1cm4gIW1fY29sbGFwc2VkQm9yZGVyc1ZhbGlkOwor
ICAgIH0KICAgICBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSogY3VycmVudEJvcmRlclZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Qm9yZGVyOyB9CiAgICAgCiAgICAgYm9vbCBoYXNT
ZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGVhZCB8fCBtX2Zvb3QgfHwgbV9maXJzdEJvZHk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKaW5kZXgg
MjA0MWMxOTdlN2NiNTkzMDAzOTVjMTRkNTZiZTYwYmE5MjcyMTVhNy4uOWIxZTY1N2M4OTdjZjEz
YzRmMTQxMWUwMzJjNDg0YTA4OTI0NDdkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTQ5LDYgKzQ5LDEwIEBAIFJlbmRlclRhYmxlQ2VsbDo6
UmVuZGVyVGFibGVDZWxsKE5vZGUqIG5vZGUpCiAgICAgLCBtX2hhc0Fzc29jaWF0ZWRUYWJsZUNl
bGxFbGVtZW50KG5vZGUgJiYgKG5vZGUtPmhhc1RhZ05hbWUodGRUYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUodGhUYWcpKSkKICAgICAsIG1faW50cmluc2ljUGFkZGluZ0JlZm9yZSgwKQogICAgICwg
bV9pbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoMCkKKyAgICAsIG1fY29sbGFwc2VkTGVmdEJvcmRlcigp
CisgICAgLCBtX2NvbGxhcHNlZFJpZ2h0Qm9yZGVyKCkKKyAgICAsIG1fY29sbGFwc2VkVG9wQm9y
ZGVyKCkKKyAgICAsIG1fY29sbGFwc2VkQm90dG9tQm9yZGVyKCkKIHsKIH0KIApAQCAtODkyLDEy
ICs4OTYsMTggQEAgc3RhdGljIHZvaWQgYWRkQm9yZGVyU3R5bGUoUmVuZGVyVGFibGU6OkNvbGxh
cHNlZEJvcmRlclZhbHVlcyYgYm9yZGVyVmFsdWVzLAogICAgIGJvcmRlclZhbHVlcy5hcHBlbmQo
Ym9yZGVyVmFsdWUpOwogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGVjdEJvcmRlclZh
bHVlcyhSZW5kZXJUYWJsZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWVzJiBib3JkZXJWYWx1ZXMpIGNv
bnN0Cit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGVjdEJvcmRlclZhbHVlcyhSZW5kZXJUYWJs
ZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWVzJiBib3JkZXJWYWx1ZXMpCiB7Ci0gICAgYWRkQm9yZGVy
U3R5bGUoYm9yZGVyVmFsdWVzLCBjb2xsYXBzZWRTdGFydEJvcmRlcigpKTsKLSAgICBhZGRCb3Jk
ZXJTdHlsZShib3JkZXJWYWx1ZXMsIGNvbGxhcHNlZEVuZEJvcmRlcigpKTsKLSAgICBhZGRCb3Jk
ZXJTdHlsZShib3JkZXJWYWx1ZXMsIGNvbGxhcHNlZEJlZm9yZUJvcmRlcigpKTsKLSAgICBhZGRC
b3JkZXJTdHlsZShib3JkZXJWYWx1ZXMsIGNvbGxhcHNlZEFmdGVyQm9yZGVyKCkpOworICAgIC8v
IFRoZSBwYXJlbnQgdGFibGUgaXMgYmVpbmcgbGFpZCBvdXQsIHNvIHVwZGF0ZSBvdXIgY29sbGFw
c2VkIGJvcmRlciBjYWNoZS4KKyAgICBtX2NvbGxhcHNlZExlZnRCb3JkZXIgPSBjb2xsYXBzZWRM
ZWZ0Qm9yZGVyKCk7CisgICAgbV9jb2xsYXBzZWRSaWdodEJvcmRlciA9IGNvbGxhcHNlZFJpZ2h0
Qm9yZGVyKCk7CisgICAgbV9jb2xsYXBzZWRUb3BCb3JkZXIgPSBjb2xsYXBzZWRUb3BCb3JkZXIo
KTsKKyAgICBtX2NvbGxhcHNlZEJvdHRvbUJvcmRlciA9IGNvbGxhcHNlZEJvdHRvbUJvcmRlcigp
OworCisgICAgYWRkQm9yZGVyU3R5bGUoYm9yZGVyVmFsdWVzLCBtX2NvbGxhcHNlZExlZnRCb3Jk
ZXIpOworICAgIGFkZEJvcmRlclN0eWxlKGJvcmRlclZhbHVlcywgbV9jb2xsYXBzZWRSaWdodEJv
cmRlcik7CisgICAgYWRkQm9yZGVyU3R5bGUoYm9yZGVyVmFsdWVzLCBtX2NvbGxhcHNlZFRvcEJv
cmRlcik7CisgICAgYWRkQm9yZGVyU3R5bGUoYm9yZGVyVmFsdWVzLCBtX2NvbGxhcHNlZEJvdHRv
bUJvcmRlcik7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGFyZUJvcmRlclZhbHVlc0ZvclFTb3J0KGNv
bnN0IHZvaWQqIHBhLCBjb25zdCB2b2lkKiBwYikKQEAgLTkyMCwzOSArOTMwLDQyIEBAIHZvaWQg
UmVuZGVyVGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY29uCiAgICAgaWYgKCF0YWJsZSgpLT5jdXJyZW50Qm9yZGVyVmFsdWUo
KSB8fCBncmFwaGljc0NvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGxlZnRWYWwgPSBjb2xsYXBzZWRMZWZ0
Qm9yZGVyKCk7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmlnaHRWYWwgPSBjb2xsYXBzZWRS
aWdodEJvcmRlcigpOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHRvcFZhbCA9IGNvbGxhcHNl
ZFRvcEJvcmRlcigpOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvdHRvbVZhbCA9IGNvbGxh
cHNlZEJvdHRvbUJvcmRlcigpOwotICAgICAKKyAgICAvLyBPbmx5IHVwZGF0ZSBvdXIgY29sbGFw
c2VkIGJvcmRlciBjYWNoZSBpZiB0aGUgc3R5bGUgb3IgbGF5b3V0IGhhcyBjaGFuZ2VkLgorICAg
IGlmICh0YWJsZSgpLT5pbnZhbGlkQ29sbGFwc2VkQm9yZGVycygpKSB7CisgICAgICAgIG1fY29s
bGFwc2VkTGVmdEJvcmRlciA9IGNvbGxhcHNlZExlZnRCb3JkZXIoKTsKKyAgICAgICAgbV9jb2xs
YXBzZWRSaWdodEJvcmRlciA9IGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKCk7CisgICAgICAgIG1fY29s
bGFwc2VkVG9wQm9yZGVyID0gY29sbGFwc2VkVG9wQm9yZGVyKCk7CisgICAgICAgIG1fY29sbGFw
c2VkQm90dG9tQm9yZGVyID0gY29sbGFwc2VkQm90dG9tQm9yZGVyKCk7CisgICAgfQorICAgIAog
ICAgIC8vIEFkanVzdCBvdXIgeC95L3dpZHRoL2hlaWdodCBzbyB0aGF0IHdlIHBhaW50IHRoZSBj
b2xsYXBzZWQgYm9yZGVycyBhdCB0aGUgY29ycmVjdCBsb2NhdGlvbi4KLSAgICBMYXlvdXRVbml0
IHRvcFdpZHRoID0gdG9wVmFsLndpZHRoKCk7Ci0gICAgTGF5b3V0VW5pdCBib3R0b21XaWR0aCA9
IGJvdHRvbVZhbC53aWR0aCgpOwotICAgIExheW91dFVuaXQgbGVmdFdpZHRoID0gbGVmdFZhbC53
aWR0aCgpOwotICAgIExheW91dFVuaXQgcmlnaHRXaWR0aCA9IHJpZ2h0VmFsLndpZHRoKCk7Cisg
ICAgTGF5b3V0VW5pdCB0b3BXaWR0aCA9IG1fY29sbGFwc2VkVG9wQm9yZGVyLndpZHRoKCk7Cisg
ICAgTGF5b3V0VW5pdCBib3R0b21XaWR0aCA9IG1fY29sbGFwc2VkQm90dG9tQm9yZGVyLndpZHRo
KCk7CisgICAgTGF5b3V0VW5pdCBsZWZ0V2lkdGggPSBtX2NvbGxhcHNlZExlZnRCb3JkZXIud2lk
dGgoKTsKKyAgICBMYXlvdXRVbml0IHJpZ2h0V2lkdGggPSBtX2NvbGxhcHNlZFJpZ2h0Qm9yZGVy
LndpZHRoKCk7CiAgICAgCiAgICAgTGF5b3V0VW5pdCB4ID0gcGFpbnRSZWN0LngoKSAtIGxlZnRX
aWR0aCAvIDI7CiAgICAgTGF5b3V0VW5pdCB5ID0gcGFpbnRSZWN0LnkoKSAtIHRvcFdpZHRoIC8g
MjsKICAgICBMYXlvdXRVbml0IHcgPSBwYWludFJlY3Qud2lkdGgoKSArIGxlZnRXaWR0aCAvIDIg
KyAocmlnaHRXaWR0aCArIDEpIC8gMjsKICAgICBMYXlvdXRVbml0IGggPSBwYWludFJlY3QuaGVp
Z2h0KCkgKyB0b3BXaWR0aCAvIDIgKyAoYm90dG9tV2lkdGggKyAxKSAvIDI7CiAgICAgCi0gICAg
RUJvcmRlclN0eWxlIHRvcFN0eWxlID0gY29sbGFwc2VkQm9yZGVyU3R5bGUodG9wVmFsLnN0eWxl
KCkpOwotICAgIEVCb3JkZXJTdHlsZSBib3R0b21TdHlsZSA9IGNvbGxhcHNlZEJvcmRlclN0eWxl
KGJvdHRvbVZhbC5zdHlsZSgpKTsKLSAgICBFQm9yZGVyU3R5bGUgbGVmdFN0eWxlID0gY29sbGFw
c2VkQm9yZGVyU3R5bGUobGVmdFZhbC5zdHlsZSgpKTsKLSAgICBFQm9yZGVyU3R5bGUgcmlnaHRT
dHlsZSA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKHJpZ2h0VmFsLnN0eWxlKCkpOworICAgIEVCb3Jk
ZXJTdHlsZSB0b3BTdHlsZSA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKG1fY29sbGFwc2VkVG9wQm9y
ZGVyLnN0eWxlKCkpOworICAgIEVCb3JkZXJTdHlsZSBib3R0b21TdHlsZSA9IGNvbGxhcHNlZEJv
cmRlclN0eWxlKG1fY29sbGFwc2VkQm90dG9tQm9yZGVyLnN0eWxlKCkpOworICAgIEVCb3JkZXJT
dHlsZSBsZWZ0U3R5bGUgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShtX2NvbGxhcHNlZExlZnRCb3Jk
ZXIuc3R5bGUoKSk7CisgICAgRUJvcmRlclN0eWxlIHJpZ2h0U3R5bGUgPSBjb2xsYXBzZWRCb3Jk
ZXJTdHlsZShtX2NvbGxhcHNlZFJpZ2h0Qm9yZGVyLnN0eWxlKCkpOwogICAgIAotICAgIGJvb2wg
cmVuZGVyVG9wID0gdG9wU3R5bGUgPiBCSElEREVOICYmICF0b3BWYWwuaXNUcmFuc3BhcmVudCgp
OwotICAgIGJvb2wgcmVuZGVyQm90dG9tID0gYm90dG9tU3R5bGUgPiBCSElEREVOICYmICFib3R0
b21WYWwuaXNUcmFuc3BhcmVudCgpOwotICAgIGJvb2wgcmVuZGVyTGVmdCA9IGxlZnRTdHlsZSA+
IEJISURERU4gJiYgIWxlZnRWYWwuaXNUcmFuc3BhcmVudCgpOwotICAgIGJvb2wgcmVuZGVyUmln
aHQgPSByaWdodFN0eWxlID4gQkhJRERFTiAmJiAhcmlnaHRWYWwuaXNUcmFuc3BhcmVudCgpOwor
ICAgIGJvb2wgcmVuZGVyVG9wID0gdG9wU3R5bGUgPiBCSElEREVOICYmICFtX2NvbGxhcHNlZFRv
cEJvcmRlci5pc1RyYW5zcGFyZW50KCk7CisgICAgYm9vbCByZW5kZXJCb3R0b20gPSBib3R0b21T
dHlsZSA+IEJISURERU4gJiYgIW1fY29sbGFwc2VkQm90dG9tQm9yZGVyLmlzVHJhbnNwYXJlbnQo
KTsKKyAgICBib29sIHJlbmRlckxlZnQgPSBsZWZ0U3R5bGUgPiBCSElEREVOICYmICFtX2NvbGxh
cHNlZExlZnRCb3JkZXIuaXNUcmFuc3BhcmVudCgpOworICAgIGJvb2wgcmVuZGVyUmlnaHQgPSBy
aWdodFN0eWxlID4gQkhJRERFTiAmJiAhbV9jb2xsYXBzZWRSaWdodEJvcmRlci5pc1RyYW5zcGFy
ZW50KCk7CiAKICAgICAvLyBXZSBuZXZlciBwYWludCBkaWFnb25hbHMgYXQgdGhlIGpvaW5zLiAg
V2Ugc2ltcGx5IGxldCB0aGUgYm9yZGVyIHdpdGggdGhlIGhpZ2hlc3QKICAgICAvLyBwcmVjZWRl
bmNlIHBhaW50IG9uIHRvcCBvZiBib3JkZXJzIHdpdGggbG93ZXIgcHJlY2VkZW5jZS4gIAogICAg
IENvbGxhcHNlZEJvcmRlcnMgYm9yZGVyczsKLSAgICBib3JkZXJzLmFkZEJvcmRlcih0b3BWYWws
IEJTVG9wLCByZW5kZXJUb3AsIHgsIHksIHggKyB3LCB5ICsgdG9wV2lkdGgsIHRvcFN0eWxlKTsK
LSAgICBib3JkZXJzLmFkZEJvcmRlcihib3R0b21WYWwsIEJTQm90dG9tLCByZW5kZXJCb3R0b20s
IHgsIHkgKyBoIC0gYm90dG9tV2lkdGgsIHggKyB3LCB5ICsgaCwgYm90dG9tU3R5bGUpOwotICAg
IGJvcmRlcnMuYWRkQm9yZGVyKGxlZnRWYWwsIEJTTGVmdCwgcmVuZGVyTGVmdCwgeCwgeSwgeCAr
IGxlZnRXaWR0aCwgeSArIGgsIGxlZnRTdHlsZSk7Ci0gICAgYm9yZGVycy5hZGRCb3JkZXIocmln
aHRWYWwsIEJTUmlnaHQsIHJlbmRlclJpZ2h0LCB4ICsgdyAtIHJpZ2h0V2lkdGgsIHksIHggKyB3
LCB5ICsgaCwgcmlnaHRTdHlsZSk7CisgICAgYm9yZGVycy5hZGRCb3JkZXIobV9jb2xsYXBzZWRU
b3BCb3JkZXIsIEJTVG9wLCByZW5kZXJUb3AsIHgsIHksIHggKyB3LCB5ICsgdG9wV2lkdGgsIHRv
cFN0eWxlKTsKKyAgICBib3JkZXJzLmFkZEJvcmRlcihtX2NvbGxhcHNlZEJvdHRvbUJvcmRlciwg
QlNCb3R0b20sIHJlbmRlckJvdHRvbSwgeCwgeSArIGggLSBib3R0b21XaWR0aCwgeCArIHcsIHkg
KyBoLCBib3R0b21TdHlsZSk7CisgICAgYm9yZGVycy5hZGRCb3JkZXIobV9jb2xsYXBzZWRMZWZ0
Qm9yZGVyLCBCU0xlZnQsIHJlbmRlckxlZnQsIHgsIHksIHggKyBsZWZ0V2lkdGgsIHkgKyBoLCBs
ZWZ0U3R5bGUpOworICAgIGJvcmRlcnMuYWRkQm9yZGVyKG1fY29sbGFwc2VkUmlnaHRCb3JkZXIs
IEJTUmlnaHQsIHJlbmRlclJpZ2h0LCB4ICsgdyAtIHJpZ2h0V2lkdGgsIHksIHggKyB3LCB5ICsg
aCwgcmlnaHRTdHlsZSk7CiAKICAgICBib29sIGFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlhc0xp
bmVzKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmgKaW5kZXggZWE5NzdjMTFhZTc1NjhlZWIwZTA5NWE4M2IwNTgxMTQ3MDNi
NDgxZi4uYTg1MmVkZTM5NTg2YTQzZjcyZTcwODAzZDI5OTZmZTdiMzlmNjAwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaApAQCAtMTE2LDcgKzExNiw3IEBA
IHB1YmxpYzoKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRUb3BCb3JkZXIoKSBj
b25zdDsKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRCb3R0b21Cb3JkZXIoKSBj
b25zdDsKIAotICAgIHZvaWQgY29sbGVjdEJvcmRlclZhbHVlcyhSZW5kZXJUYWJsZTo6Q29sbGFw
c2VkQm9yZGVyVmFsdWVzJikgY29uc3Q7CisgICAgdm9pZCBjb2xsZWN0Qm9yZGVyVmFsdWVzKFJl
bmRlclRhYmxlOjpDb2xsYXBzZWRCb3JkZXJWYWx1ZXMmKTsKICAgICBzdGF0aWMgdm9pZCBzb3J0
Qm9yZGVyVmFsdWVzKFJlbmRlclRhYmxlOjpDb2xsYXBzZWRCb3JkZXJWYWx1ZXMmKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKQEAgLTE4MCw2ICsxODAsMTIgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faGFzQXNzb2NpYXRlZFRhYmxlQ2VsbEVsZW1lbnQgOiAxOwogICAgIGludCBtX2lu
dHJpbnNpY1BhZGRpbmdCZWZvcmU7CiAgICAgaW50IG1faW50cmluc2ljUGFkZGluZ0FmdGVyOwor
CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgbV9jb2xsYXBzZWRMZWZ0Qm9yZGVyOworICAgIENv
bGxhcHNlZEJvcmRlclZhbHVlIG1fY29sbGFwc2VkUmlnaHRCb3JkZXI7CisgICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgbV9jb2xsYXBzZWRUb3BCb3JkZXI7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFs
dWUgbV9jb2xsYXBzZWRCb3R0b21Cb3JkZXI7CisKIH07CiAKIGlubGluZSBSZW5kZXJUYWJsZUNl
bGwqIHRvUmVuZGVyVGFibGVDZWxsKFJlbmRlck9iamVjdCogb2JqZWN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117474</attachid>
            <date>2011-12-01 13:21:44 -0800</date>
            <delta_ts>2011-12-26 06:49:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20111201212142.patch</filename>
            <type>text/plain</type>
            <size>12687</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTU5ODgwMGEyOWFkMjI5
YjNkYWZjODRhNzdiNmQ4ZTJiZjgyMTlhYi4uYjljMzQxNTExZDdkYTNmYTcxMzE0NDJkZmMxZjBk
NDU1MzgyOTM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDExLTExLTI5ICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSBjYWxjdWxh
dGVkIGV2ZXJ5IHRpbWUgdGhlIGNvbGxhcHNlZCBib3JkZXJzIGFyZSBwYWludGVkLgorICAgICAg
ICBUaGlzIGlzIHVubmVjZXNzYXJ5LCB0aGV5IG9ubHkgY2hhbmdlIHdpdGggdGhlIGxheW91dCBv
ciBzdHlsZSBzbyBjYWxjdWxhdGUgYW5kCisgICAgICAgIGNhY2hlIHRoZW0gd2hlbmV2ZXIgdGhl
IGxheW91dCBvciBzdHlsZSBjaGFuZ2VzIGFuZCB1c2UgdGhlIGNhY2hlZCB2YWx1ZXMgd2hlbgor
ICAgICAgICBwYWludGluZy4gVGhlIGNhY2hlIGlzIHN0b3JlZCBpbiB0aGUgdGFibGUgc2VjdGlv
biBzbyB0aGF0IHRoZSBtZW1vcnkgZm9vdHByaW50CisgICAgICAgIG9mIGEgdGFibGUgaXMgb25s
eSBpbmNyZWFzZWQgd2hlbiBpdCBoYXMgY29sbGFwc2luZyBib3JkZXJzLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyBjb2xsYXBzZWQgYm9yZGVyIHRlc3RzLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6aW52YWxpZENvbGxhcHNlZEJvcmRlcnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxs
Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpj
b2xsZWN0Qm9yZGVyVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6
cGFpbnRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6flJlbmRlclRhYmxlU2VjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNlbGxDb2xsYXBzZWRCb3JkZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6dXBkYXRlQ2VsbENvbGxh
cHNlZEJvcmRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZW1v
dmVDZWxsQ29sbGFwc2VkQm9yZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNl
Y3Rpb246OmRlbGV0ZUFsbENlbGxDb2xsYXBzZWRCb3JkZXJzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0NvbGxh
cHNlZEJvcmRlclZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDZWxsQ29sbGFwc2VkQm9yZGVy
czo6Q2VsbENvbGxhcHNlZEJvcmRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbENvbGxhcHNl
ZEJvcmRlcnM6OnRvcCk6CisgICAgICAgIChXZWJDb3JlOjpDZWxsQ29sbGFwc2VkQm9yZGVyczo6
Ym90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxDb2xsYXBzZWRCb3JkZXJzOjpsZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNlbGxDb2xsYXBzZWRCb3JkZXJzOjpyaWdodCk6CisKIDIwMTEt
MTEtMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2gg
aW4gSXNvbGF0ZVRyYWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSgpLCBwcmVjZWRlZCBieSBh
c3NlcnRpb24gZmFpbHVyZSAobV9uZXN0ZWRJc29sYXRlQ291bnQgPj0gMSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXggMmRlOTAwY2ViNGI4ZWY0MTY4YjQ2MTc4OWUz
YjUyNWM1N2M0MjA5NS4uYTQ1YWIyMTFiNTI2YzU0ZDExYjY2Y2IyZDU2OTJkZmZmOWE2ODNkMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTIwMCw2ICsyMDAsMTAg
QEAgcHVibGljOgogICAgICAgICBtX2NvbGxhcHNlZEJvcmRlcnNWYWxpZCA9IGZhbHNlOwogICAg
ICAgICBtX2NvbGxhcHNlZEJvcmRlcnMuY2xlYXIoKTsKICAgICB9CisgICAgYm9vbCBpbnZhbGlk
Q29sbGFwc2VkQm9yZGVycygpCisgICAgeworICAgICAgICByZXR1cm4gIW1fY29sbGFwc2VkQm9y
ZGVyc1ZhbGlkOworICAgIH0KICAgICBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSogY3VycmVu
dEJvcmRlclZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Qm9yZGVyOyB9CiAgICAgCiAg
ICAgYm9vbCBoYXNTZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGVhZCB8fCBtX2Zvb3QgfHwg
bV9maXJzdEJvZHk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5jcHAKaW5kZXggMjA0MWMxOTdlN2NiNTkzMDAzOTVjMTRkNTZiZTYwYmE5MjcyMTVhNy4uMjJk
ZDY2NTI2Yzk0NTM5MGYzNDlhZTc0YTFjMGJkZmRjNThlNDI5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTU4LDggKzU4LDEwIEBAIHZvaWQg
UmVuZGVyVGFibGVDZWxsOjp3aWxsQmVEZXN0cm95ZWQoKQogCiAgICAgUmVuZGVyQmxvY2s6Ondp
bGxCZURlc3Ryb3llZCgpOwogCi0gICAgaWYgKHJlY2FsY1NlY3Rpb24pCisgICAgaWYgKHJlY2Fs
Y1NlY3Rpb24pIHsKICAgICAgICAgcmVjYWxjU2VjdGlvbi0+c2V0TmVlZHNDZWxsUmVjYWxjKCk7
CisgICAgICAgIHJlY2FsY1NlY3Rpb24tPnJlbW92ZUNlbGxDb2xsYXBzZWRCb3JkZXJzKHRoaXMp
OworICAgIH0KIH0KIAogdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpjb2xTcGFuKCkgY29uc3QK
QEAgLTg5NCwxMCArODk2LDEzIEBAIHN0YXRpYyB2b2lkIGFkZEJvcmRlclN0eWxlKFJlbmRlclRh
YmxlOjpDb2xsYXBzZWRCb3JkZXJWYWx1ZXMmIGJvcmRlclZhbHVlcywKIAogdm9pZCBSZW5kZXJU
YWJsZUNlbGw6OmNvbGxlY3RCb3JkZXJWYWx1ZXMoUmVuZGVyVGFibGU6OkNvbGxhcHNlZEJvcmRl
clZhbHVlcyYgYm9yZGVyVmFsdWVzKSBjb25zdAogewotICAgIGFkZEJvcmRlclN0eWxlKGJvcmRl
clZhbHVlcywgY29sbGFwc2VkU3RhcnRCb3JkZXIoKSk7Ci0gICAgYWRkQm9yZGVyU3R5bGUoYm9y
ZGVyVmFsdWVzLCBjb2xsYXBzZWRFbmRCb3JkZXIoKSk7Ci0gICAgYWRkQm9yZGVyU3R5bGUoYm9y
ZGVyVmFsdWVzLCBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoKSk7Ci0gICAgYWRkQm9yZGVyU3R5bGUo
Ym9yZGVyVmFsdWVzLCBjb2xsYXBzZWRBZnRlckJvcmRlcigpKTsKKyAgICBBU1NFUlQodGFibGUo
KS0+bmVlZHNMYXlvdXQoKSk7CisgICAgLy8gVGhlIHBhcmVudCB0YWJsZSBpcyBiZWluZyBsYWlk
IG91dCwgc28gdXBkYXRlIG91ciBjb2xsYXBzZWQgYm9yZGVyIGNhY2hlLgorICAgIENlbGxDb2xs
YXBzZWRCb3JkZXJzKiBib3JkZXJzID0gc2VjdGlvbigpLT51cGRhdGVDZWxsQ29sbGFwc2VkQm9y
ZGVycyh0aGlzKTsKKyAgICBhZGRCb3JkZXJTdHlsZShib3JkZXJWYWx1ZXMsIGJvcmRlcnMtPnRv
cCgpKTsKKyAgICBhZGRCb3JkZXJTdHlsZShib3JkZXJWYWx1ZXMsIGJvcmRlcnMtPmJvdHRvbSgp
KTsKKyAgICBhZGRCb3JkZXJTdHlsZShib3JkZXJWYWx1ZXMsIGJvcmRlcnMtPmxlZnQoKSk7Cisg
ICAgYWRkQm9yZGVyU3R5bGUoYm9yZGVyVmFsdWVzLCBib3JkZXJzLT5yaWdodCgpKTsKIH0KIAog
c3RhdGljIGludCBjb21wYXJlQm9yZGVyVmFsdWVzRm9yUVNvcnQoY29uc3Qgdm9pZCogcGEsIGNv
bnN0IHZvaWQqIHBiKQpAQCAtOTIwLDM5ICs5MjUsNDYgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OnBhaW50Q29sbGFwc2VkQm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBj
b24KICAgICBpZiAoIXRhYmxlKCktPmN1cnJlbnRCb3JkZXJWYWx1ZSgpIHx8IGdyYXBoaWNzQ29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQ29s
bGFwc2VkQm9yZGVyVmFsdWUgbGVmdFZhbCA9IGNvbGxhcHNlZExlZnRCb3JkZXIoKTsKLSAgICBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSByaWdodFZhbCA9IGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKCk7Ci0g
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgdG9wVmFsID0gY29sbGFwc2VkVG9wQm9yZGVyKCk7Ci0g
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm90dG9tVmFsID0gY29sbGFwc2VkQm90dG9tQm9yZGVy
KCk7Ci0gICAgIAorICAgIC8vIE9ubHkgdXBkYXRlIG91ciBjb2xsYXBzZWQgYm9yZGVyIGNhY2hl
IGlmIHRoZSBzdHlsZSBvciBsYXlvdXQgaGFzIGNoYW5nZWQuCisgICAgQ2VsbENvbGxhcHNlZEJv
cmRlcnMqIGNvbGxhcHNlZEJvcmRlcnM7CisgICAgaWYgKHRhYmxlKCktPmludmFsaWRDb2xsYXBz
ZWRCb3JkZXJzKCkpCisgICAgICAgIGNvbGxhcHNlZEJvcmRlcnMgPSBzZWN0aW9uKCktPnVwZGF0
ZUNlbGxDb2xsYXBzZWRCb3JkZXJzKHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgY29sbGFwc2Vk
Qm9yZGVycyA9IHNlY3Rpb24oKS0+Y2VsbENvbGxhcHNlZEJvcmRlcnModGhpcyk7CisKKyAgICBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRUb3BCb3JkZXIgPSBjb2xsYXBzZWRCb3JkZXJz
LT50b3AoKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRCb3R0b21Cb3JkZXIg
PSBjb2xsYXBzZWRCb3JkZXJzLT5ib3R0b20oKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBj
b2xsYXBzZWRMZWZ0Qm9yZGVyID0gY29sbGFwc2VkQm9yZGVycy0+bGVmdCgpOworICAgIENvbGxh
cHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFJpZ2h0Qm9yZGVyID0gY29sbGFwc2VkQm9yZGVycy0+
cmlnaHQoKTsKKyAgICAKICAgICAvLyBBZGp1c3Qgb3VyIHgveS93aWR0aC9oZWlnaHQgc28gdGhh
dCB3ZSBwYWludCB0aGUgY29sbGFwc2VkIGJvcmRlcnMgYXQgdGhlIGNvcnJlY3QgbG9jYXRpb24u
Ci0gICAgTGF5b3V0VW5pdCB0b3BXaWR0aCA9IHRvcFZhbC53aWR0aCgpOwotICAgIExheW91dFVu
aXQgYm90dG9tV2lkdGggPSBib3R0b21WYWwud2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IGxlZnRX
aWR0aCA9IGxlZnRWYWwud2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IHJpZ2h0V2lkdGggPSByaWdo
dFZhbC53aWR0aCgpOworICAgIExheW91dFVuaXQgdG9wV2lkdGggPSBjb2xsYXBzZWRUb3BCb3Jk
ZXIud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGJvdHRvbVdpZHRoID0gY29sbGFwc2VkQm90dG9t
Qm9yZGVyLndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBsZWZ0V2lkdGggPSBjb2xsYXBzZWRMZWZ0
Qm9yZGVyLndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCByaWdodFdpZHRoID0gY29sbGFwc2VkUmln
aHRCb3JkZXIud2lkdGgoKTsKICAgICAKICAgICBMYXlvdXRVbml0IHggPSBwYWludFJlY3QueCgp
IC0gbGVmdFdpZHRoIC8gMjsKICAgICBMYXlvdXRVbml0IHkgPSBwYWludFJlY3QueSgpIC0gdG9w
V2lkdGggLyAyOwogICAgIExheW91dFVuaXQgdyA9IHBhaW50UmVjdC53aWR0aCgpICsgbGVmdFdp
ZHRoIC8gMiArIChyaWdodFdpZHRoICsgMSkgLyAyOwogICAgIExheW91dFVuaXQgaCA9IHBhaW50
UmVjdC5oZWlnaHQoKSArIHRvcFdpZHRoIC8gMiArIChib3R0b21XaWR0aCArIDEpIC8gMjsKICAg
ICAKLSAgICBFQm9yZGVyU3R5bGUgdG9wU3R5bGUgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZSh0b3BW
YWwuc3R5bGUoKSk7Ci0gICAgRUJvcmRlclN0eWxlIGJvdHRvbVN0eWxlID0gY29sbGFwc2VkQm9y
ZGVyU3R5bGUoYm90dG9tVmFsLnN0eWxlKCkpOwotICAgIEVCb3JkZXJTdHlsZSBsZWZ0U3R5bGUg
PSBjb2xsYXBzZWRCb3JkZXJTdHlsZShsZWZ0VmFsLnN0eWxlKCkpOwotICAgIEVCb3JkZXJTdHls
ZSByaWdodFN0eWxlID0gY29sbGFwc2VkQm9yZGVyU3R5bGUocmlnaHRWYWwuc3R5bGUoKSk7Cisg
ICAgRUJvcmRlclN0eWxlIHRvcFN0eWxlID0gY29sbGFwc2VkQm9yZGVyU3R5bGUoY29sbGFwc2Vk
VG9wQm9yZGVyLnN0eWxlKCkpOworICAgIEVCb3JkZXJTdHlsZSBib3R0b21TdHlsZSA9IGNvbGxh
cHNlZEJvcmRlclN0eWxlKGNvbGxhcHNlZEJvdHRvbUJvcmRlci5zdHlsZSgpKTsKKyAgICBFQm9y
ZGVyU3R5bGUgbGVmdFN0eWxlID0gY29sbGFwc2VkQm9yZGVyU3R5bGUoY29sbGFwc2VkTGVmdEJv
cmRlci5zdHlsZSgpKTsKKyAgICBFQm9yZGVyU3R5bGUgcmlnaHRTdHlsZSA9IGNvbGxhcHNlZEJv
cmRlclN0eWxlKGNvbGxhcHNlZFJpZ2h0Qm9yZGVyLnN0eWxlKCkpOwogICAgIAotICAgIGJvb2wg
cmVuZGVyVG9wID0gdG9wU3R5bGUgPiBCSElEREVOICYmICF0b3BWYWwuaXNUcmFuc3BhcmVudCgp
OwotICAgIGJvb2wgcmVuZGVyQm90dG9tID0gYm90dG9tU3R5bGUgPiBCSElEREVOICYmICFib3R0
b21WYWwuaXNUcmFuc3BhcmVudCgpOwotICAgIGJvb2wgcmVuZGVyTGVmdCA9IGxlZnRTdHlsZSA+
IEJISURERU4gJiYgIWxlZnRWYWwuaXNUcmFuc3BhcmVudCgpOwotICAgIGJvb2wgcmVuZGVyUmln
aHQgPSByaWdodFN0eWxlID4gQkhJRERFTiAmJiAhcmlnaHRWYWwuaXNUcmFuc3BhcmVudCgpOwor
ICAgIGJvb2wgcmVuZGVyVG9wID0gdG9wU3R5bGUgPiBCSElEREVOICYmICFjb2xsYXBzZWRUb3BC
b3JkZXIuaXNUcmFuc3BhcmVudCgpOworICAgIGJvb2wgcmVuZGVyQm90dG9tID0gYm90dG9tU3R5
bGUgPiBCSElEREVOICYmICFjb2xsYXBzZWRCb3R0b21Cb3JkZXIuaXNUcmFuc3BhcmVudCgpOwor
ICAgIGJvb2wgcmVuZGVyTGVmdCA9IGxlZnRTdHlsZSA+IEJISURERU4gJiYgIWNvbGxhcHNlZExl
ZnRCb3JkZXIuaXNUcmFuc3BhcmVudCgpOworICAgIGJvb2wgcmVuZGVyUmlnaHQgPSByaWdodFN0
eWxlID4gQkhJRERFTiAmJiAhY29sbGFwc2VkUmlnaHRCb3JkZXIuaXNUcmFuc3BhcmVudCgpOwog
CiAgICAgLy8gV2UgbmV2ZXIgcGFpbnQgZGlhZ29uYWxzIGF0IHRoZSBqb2lucy4gIFdlIHNpbXBs
eSBsZXQgdGhlIGJvcmRlciB3aXRoIHRoZSBoaWdoZXN0CiAgICAgLy8gcHJlY2VkZW5jZSBwYWlu
dCBvbiB0b3Agb2YgYm9yZGVycyB3aXRoIGxvd2VyIHByZWNlZGVuY2UuICAKICAgICBDb2xsYXBz
ZWRCb3JkZXJzIGJvcmRlcnM7Ci0gICAgYm9yZGVycy5hZGRCb3JkZXIodG9wVmFsLCBCU1RvcCwg
cmVuZGVyVG9wLCB4LCB5LCB4ICsgdywgeSArIHRvcFdpZHRoLCB0b3BTdHlsZSk7Ci0gICAgYm9y
ZGVycy5hZGRCb3JkZXIoYm90dG9tVmFsLCBCU0JvdHRvbSwgcmVuZGVyQm90dG9tLCB4LCB5ICsg
aCAtIGJvdHRvbVdpZHRoLCB4ICsgdywgeSArIGgsIGJvdHRvbVN0eWxlKTsKLSAgICBib3JkZXJz
LmFkZEJvcmRlcihsZWZ0VmFsLCBCU0xlZnQsIHJlbmRlckxlZnQsIHgsIHksIHggKyBsZWZ0V2lk
dGgsIHkgKyBoLCBsZWZ0U3R5bGUpOwotICAgIGJvcmRlcnMuYWRkQm9yZGVyKHJpZ2h0VmFsLCBC
U1JpZ2h0LCByZW5kZXJSaWdodCwgeCArIHcgLSByaWdodFdpZHRoLCB5LCB4ICsgdywgeSArIGgs
IHJpZ2h0U3R5bGUpOworICAgIGJvcmRlcnMuYWRkQm9yZGVyKGNvbGxhcHNlZFRvcEJvcmRlciwg
QlNUb3AsIHJlbmRlclRvcCwgeCwgeSwgeCArIHcsIHkgKyB0b3BXaWR0aCwgdG9wU3R5bGUpOwor
ICAgIGJvcmRlcnMuYWRkQm9yZGVyKGNvbGxhcHNlZEJvdHRvbUJvcmRlciwgQlNCb3R0b20sIHJl
bmRlckJvdHRvbSwgeCwgeSArIGggLSBib3R0b21XaWR0aCwgeCArIHcsIHkgKyBoLCBib3R0b21T
dHlsZSk7CisgICAgYm9yZGVycy5hZGRCb3JkZXIoY29sbGFwc2VkTGVmdEJvcmRlciwgQlNMZWZ0
LCByZW5kZXJMZWZ0LCB4LCB5LCB4ICsgbGVmdFdpZHRoLCB5ICsgaCwgbGVmdFN0eWxlKTsKKyAg
ICBib3JkZXJzLmFkZEJvcmRlcihjb2xsYXBzZWRSaWdodEJvcmRlciwgQlNSaWdodCwgcmVuZGVy
UmlnaHQsIHggKyB3IC0gcmlnaHRXaWR0aCwgeSwgeCArIHcsIHkgKyBoLCByaWdodFN0eWxlKTsK
IAogICAgIGJvb2wgYW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzTGluZXMoZ3JhcGhpY3NDb250
ZXh0KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAKaW5kZXggMzFjZmU4MGU5ODYxMzYyNWQyMGU0NzdiNzk1ZGU3Yjg0NDFlMGI4Ni4u
MWNjNWFlNDI2YWNhNGQzMjBjZDg5ZDJlOGFkMzgxNmZhNGUxN2JjOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTczLDYgKzczLDcg
QEAgUmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24oTm9kZSogbm9kZSkKIAog
UmVuZGVyVGFibGVTZWN0aW9uOjp+UmVuZGVyVGFibGVTZWN0aW9uKCkKIHsKKyAgICBkZWxldGVB
bGxDZWxsQ29sbGFwc2VkQm9yZGVycygpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKQEAgLTEzMDEsNCArMTMwMiwzMCBAQCB1bnNpZ25lZCBSZW5kZXJUYWJsZVNlY3Rp
b246OnJvd0luZGV4Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cqIHJvdykgY29ucwog
ICAgIHJldHVybiAwOwogfQogCitDZWxsQ29sbGFwc2VkQm9yZGVycyogUmVuZGVyVGFibGVTZWN0
aW9uOjpjZWxsQ29sbGFwc2VkQm9yZGVycyhjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpCit7
CisgICAgQ2VsbENvbGxhcHNlZEJvcmRlcnMqIGNlbGxJbmZvID0gIG1fY2VsbENvbGxhcHNlZEJv
cmRlcnMuZ2V0KGNlbGwpOworICAgIGlmICghY2VsbEluZm8pCisgICAgICAgIGNlbGxJbmZvID0g
IHVwZGF0ZUNlbGxDb2xsYXBzZWRCb3JkZXJzKGNlbGwpOworICAgIHJldHVybiBjZWxsSW5mbzsK
K30KKworQ2VsbENvbGxhcHNlZEJvcmRlcnMqIFJlbmRlclRhYmxlU2VjdGlvbjo6dXBkYXRlQ2Vs
bENvbGxhcHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQoreworICAgIENl
bGxDb2xsYXBzZWRCb3JkZXJzKiBuZXdDZWxsSW5mbyA9IG5ldyBDZWxsQ29sbGFwc2VkQm9yZGVy
cyhjZWxsLT5jb2xsYXBzZWRUb3BCb3JkZXIoKSwgY2VsbC0+Y29sbGFwc2VkQm90dG9tQm9yZGVy
KCksIGNlbGwtPmNvbGxhcHNlZExlZnRCb3JkZXIoKSwgY2VsbC0+Y29sbGFwc2VkUmlnaHRCb3Jk
ZXIoKSk7CisgICAgbV9jZWxsQ29sbGFwc2VkQm9yZGVycy5zZXQoY2VsbCwgbmV3Q2VsbEluZm8p
OworICAgIHJldHVybiBuZXdDZWxsSW5mbzsKK30KKwordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246
OnJlbW92ZUNlbGxDb2xsYXBzZWRCb3JkZXJzKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkK
K3sKKyAgICBkZWxldGUgbV9jZWxsQ29sbGFwc2VkQm9yZGVycy50YWtlKGNlbGwpOworfQorCit2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6ZGVsZXRlQWxsQ2VsbENvbGxhcHNlZEJvcmRlcnMoKQor
eworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NlbGxDb2xsYXBzZWRCb3JkZXJzKTsKKyAgICBtX2Nl
bGxDb2xsYXBzZWRCb3JkZXJzLmNsZWFyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCA4
NmYzNDM0Mzc3MDZkYmYyNTBkYzA1MWIwNjBhNWJlMmZkOWZjMzFiLi4xZTFiNjE3Y2E2YjY1ZGU4
NWJiNjZjYTQ2Mjg3MjI3ZWU0YzRiYTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0xMzAsNiArMTMwLDExIEBAIHB1YmxpYzoKIAogICAg
IHVuc2lnbmVkIHJvd0luZGV4Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cqKSBjb25z
dDsKIAorICAgIENlbGxDb2xsYXBzZWRCb3JkZXJzKiBjZWxsQ29sbGFwc2VkQm9yZGVycyhjb25z
dCBSZW5kZXJUYWJsZUNlbGwqKTsKKyAgICBDZWxsQ29sbGFwc2VkQm9yZGVycyogdXBkYXRlQ2Vs
bENvbGxhcHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKik7CisgICAgdm9pZCByZW1v
dmVDZWxsQ29sbGFwc2VkQm9yZGVycyhjb25zdCBSZW5kZXJUYWJsZUNlbGwqKTsKKyAgICB2b2lk
IGRlbGV0ZUFsbENlbGxDb2xsYXBzZWRCb3JkZXJzKCk7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKIApAQCAtMTgyLDYgKzE4NywxMSBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsOwogCiAgICAgYm9vbCBt
X2hhc011bHRpcGxlQ2VsbExldmVsczsKKworICAgIC8vIFRoaXMgbWFwIGhvbGRzIHRoZSBjb2xs
YXBzZWQgYm9yZGVyIHZhbHVlcyBmb3IgY2VsbHMgd2l0aCBjb2xsYXBzZWQgYm9yZGVycy4KKyAg
ICAvLyBJdCBpcyBoZWxkIGF0IFRhYmxlU2VjdGlvbiBsZXZlbCB0byBzcGFyZSBtZW1vcnkgY29u
c3VtcHRpb24gYnkgdGFibGUgY2VsbHMuCisgICAgSGFzaE1hcDxjb25zdCBSZW5kZXJUYWJsZUNl
bGwqLCBDZWxsQ29sbGFwc2VkQm9yZGVycyo+IG1fY2VsbENvbGxhcHNlZEJvcmRlcnM7CisgICAg
CiB9OwogCiBpbmxpbmUgUmVuZGVyVGFibGVTZWN0aW9uKiB0b1JlbmRlclRhYmxlU2VjdGlvbihS
ZW5kZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmgKaW5kZXggZTAwOTAyZjEwYTRjNzUzMTNlNmY2
MGE4MGJiOTNiYjMwOWVkMzI5Mi4uYmFhNDJkNmJiMjdmMjVhMjdkODJjYTA5NjRhODdmMjQ5YWRi
NmNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNl
ZEJvcmRlclZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxh
cHNlZEJvcmRlclZhbHVlLmgKQEAgLTYxLDYgKzYxLDI4IEBAIHByaXZhdGU6CiAgICAgRUJvcmRl
clByZWNlZGVuY2UgbV9wcmVjZWRlbmNlOwogfTsKIAorY2xhc3MgQ2VsbENvbGxhcHNlZEJvcmRl
cnMgeworcHVibGljOgorICAgIENlbGxDb2xsYXBzZWRCb3JkZXJzKGNvbnN0IENvbGxhcHNlZEJv
cmRlclZhbHVlJiB0b3AsIGNvbnN0IENvbGxhcHNlZEJvcmRlclZhbHVlJiBib3R0b20sIGNvbnN0
IENvbGxhcHNlZEJvcmRlclZhbHVlJiBsZWZ0LCBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYg
cmlnaHQpCisgICAgICAgIDogbV90b3AodG9wKQorICAgICAgICAsIG1fYm90dG9tKGJvdHRvbSkK
KyAgICAgICAgLCBtX2xlZnQobGVmdCkKKyAgICAgICAgLCBtX3JpZ2h0KHJpZ2h0KQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgdG9wKCkgY29uc3QgeyBy
ZXR1cm4gbV90b3A7IH0KKyAgICBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgYm90dG9tKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3R0b207IH0KKyAgICBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSYgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdDsgfQorICAgIGNvbnN0IENvbGxhcHNlZEJv
cmRlclZhbHVlJiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQ7IH0KKworcHJpdmF0ZToK
KyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBtX3RvcDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBtX2JvdHRvbTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBtX2xlZnQ7CisgICAgQ29sbGFw
c2VkQm9yZGVyVmFsdWUgbV9yaWdodDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIENvbGxhcHNlZEJvcmRlclZhbHVlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120555</attachid>
            <date>2011-12-26 06:49:26 -0800</date>
            <delta_ts>2011-12-27 12:46:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20111226144924.patch</filename>
            <type>text/plain</type>
            <size>25104</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRlMjc2ZjM4NWEzNTU2
YWM3NTIwZTY2NWUzZDBjMWM2MDdjNTg4Mi4uZDAxZjg1NzRkZmFkZThjZGQwM2M4MmM4MGY1ZjU3
NDFkNWMzZDgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDExLTEyLTI2ICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSBjYWxjdWxh
dGVkIGV2ZXJ5IHRpbWUgdGhlIGNvbGxhcHNlZCBib3JkZXJzIGFyZSBwYWludGVkLgorICAgICAg
ICBUaGlzIGlzIHVubmVjZXNzYXJ5LCB0aGV5IG9ubHkgY2hhbmdlIHdpdGggdGhlIGxheW91dCBv
ciBzdHlsZSBzbyBjYWxjdWxhdGUgYW5kCisgICAgICAgIGNhY2hlIHRoZW0gd2hlbmV2ZXIgdGhl
IGxheW91dCBvciBzdHlsZSBjaGFuZ2VzIGFuZCB1c2UgdGhlIGNhY2hlZCB2YWx1ZXMgd2hlbgor
ICAgICAgICBwYWludGluZy4gVGhlIGNhY2hlIGlzIHN0b3JlZCBpbiB0aGUgdGFibGUgc2VjdGlv
biBzbyB0aGF0IHRoZSBtZW1vcnkgZm9vdHByaW50CisgICAgICAgIG9mIGEgdGFibGUgaXMgb25s
eSBpbmNyZWFzZWQgd2hlbiBpdCBoYXMgY29sbGFwc2luZyBib3JkZXJzLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyBjb2xsYXBzZWQgYm9yZGVyIHRlc3RzLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnJl
Y2FsY0NvbGxhcHNlZEJvcmRlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Omhhc0ludmFsaWRDb2xsYXBzZWRCb3Jk
ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkU3RhcnRCb3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRFbmRCb3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCZWZvcmVCb3JkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRBZnRlckJvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxlY3RCb3JkZXJWYWx1ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmRlcnMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjZWxsQ29sbGFwc2VkQm9yZGVycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sbGFw
c2VkQm9yZGVyVmFsdWU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbENvbGxh
cHNlZEJvcmRlcnM6OkNlbGxDb2xsYXBzZWRCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNl
bGxDb2xsYXBzZWRCb3JkZXJzOjpiZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbENvbGxh
cHNlZEJvcmRlcnM6OmFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxDb2xsYXBzZWRCb3Jk
ZXJzOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDZWxsQ29sbGFwc2VkQm9yZGVyczo6ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxDb2xsYXBzZWRCb3JkZXJzOjpleGlzdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2VsbENvbGxhcHNlZEJvcmRlcnM6Om9wZXJhdG9yPT0pOgorCiAyMDEx
LTEyLTIxICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdS
RVNTSU9OIChyOTQ0OTIpOiBUZXh0IGlzIHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGluIHNvbWUgYnV0
dG9ucyBpbiB0aGUgTWFjIEFwcCBTdG9yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHAKaW5kZXggMzJmN2FiMWI0NDVkMTFhNGZlYzQyYzA4NThhZmRhNTdhZjdkMThiNi4u
YjlkZWRiNDJlMmFmZDY2OTA5ZTIxYzhiOGUxNDg2ODFkODU1ZDgxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0yOTUsNiArMjk1LDEwIEBAIHZvaWQgUmVu
ZGVyVGFibGU6OmxheW91dCgpCiAKICAgICBpbml0TWF4TWFyZ2luVmFsdWVzKCk7CiAgICAgCisg
ICAgLy8gTGF5b3V0IHdhcyBjaGFuZ2VkLCBzbyBwcm9iYWJseSBib3JkZXJzIHRvby4gRG8gdGhp
cyBoZXJlIHNvIHRoYXQgdGhlIG5ldyBib3JkZXIgdmFsdWVzIGFyZSBwaWNrZWQgdXAKKyAgICAv
LyBhbmQgY2FjaGVkIHdoZW4gcmVjb21wdXRpbmcgdGhlIHRhYmxlJ3Mgd2lkdGguCisgICAgaW52
YWxpZGF0ZUNvbGxhcHNlZEJvcmRlcnMoKTsKKyAgICAKICAgICBMYXlvdXRVbml0IG9sZExvZ2lj
YWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpOwogICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKIApA
QCAtNDE5LDggKzQyMyw2IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICB1cGRh
dGVMYXllclRyYW5zZm9ybSgpOwogCi0gICAgLy8gTGF5b3V0IHdhcyBjaGFuZ2VkLCBzbyBwcm9i
YWJseSBib3JkZXJzIHRvby4KLSAgICBpbnZhbGlkYXRlQ29sbGFwc2VkQm9yZGVycygpOwogCiAg
ICAgY29tcHV0ZU92ZXJmbG93KGNsaWVudExvZ2ljYWxCb3R0b20oKSk7CiAKQEAgLTQ0Niw3ICs0
NDgsNiBAQCB2b2lkIFJlbmRlclRhYmxlOjpyZWNhbGNDb2xsYXBzZWRCb3JkZXJzKCkKIHsKICAg
ICBpZiAobV9jb2xsYXBzZWRCb3JkZXJzVmFsaWQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bGxhcHNlZEJvcmRlcnNWYWxpZCA9IHRydWU7CiAgICAgbV9jb2xsYXBzZWRCb3JkZXJzLmNsZWFy
KCk7CiAgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVu
KCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIG8gPSBmaXJzdENoaWxkKCk7IG8gJiYgbyAhPSBz
dG9wOyBvID0gby0+bmV4dEluUHJlT3JkZXIoKSkgewpAQCAtNDU0LDYgKzQ1NSw3IEBAIHZvaWQg
UmVuZGVyVGFibGU6OnJlY2FsY0NvbGxhcHNlZEJvcmRlcnMoKQogICAgICAgICAgICAgdG9SZW5k
ZXJUYWJsZUNlbGwobyktPmNvbGxlY3RCb3JkZXJWYWx1ZXMobV9jb2xsYXBzZWRCb3JkZXJzKTsK
ICAgICB9CiAgICAgUmVuZGVyVGFibGVDZWxsOjpzb3J0Qm9yZGVyVmFsdWVzKG1fY29sbGFwc2Vk
Qm9yZGVycyk7CisgICAgbV9jb2xsYXBzZWRCb3JkZXJzVmFsaWQgPSB0cnVlOwogfQogCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXggMmRlOTAwY2ViNGI4ZWY0MTY4
YjQ2MTc4OWUzYjUyNWM1N2M0MjA5NS4uNzFlZjc2NmY3OTRjZDUzMGZmOGQyYmMyODJhY2QxZDlh
Y2FkZDg0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTIwMCw2
ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29sbGFwc2VkQm9yZGVyc1ZhbGlkID0gZmFs
c2U7CiAgICAgICAgIG1fY29sbGFwc2VkQm9yZGVycy5jbGVhcigpOwogICAgIH0KKyAgICBib29s
IGhhc0ludmFsaWRDb2xsYXBzZWRCb3JkZXJzKCkgeyByZXR1cm4gIW1fY29sbGFwc2VkQm9yZGVy
c1ZhbGlkOyB9CiAgICAgY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUqIGN1cnJlbnRCb3JkZXJW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEJvcmRlcjsgfQogICAgIAogICAgIGJvb2wg
aGFzU2VjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2hlYWQgfHwgbV9mb290IHx8IG1fZmlyc3RC
b2R5OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCmlu
ZGV4IGY0M2U1YzFhMDJlOThmOWM2YTQ5NDU0YzkzYTE3OGZhYWI0OWFlOTQuLmFiMmY1ZWQ0ZDJk
MmM2MTY0YzZiOWQyZDNlMWJhNDg1YmYyYTg0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC0zOTQsNiArMzk0LDkgQEAgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9y
ZGVyQ29sb3JPck4KIHsKICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0aGlzLT50YWJsZSgpOwog
ICAgIGJvb2wgaXNTdGFydENvbHVtbiA9IGNvbCgpID09IDA7CisgICAgQ2VsbENvbGxhcHNlZEJv
cmRlcnMqIGNlbGxDb2xsYXBzZWRCb3JkZXJzID0gc2VjdGlvbigpLT5jZWxsQ29sbGFwc2VkQm9y
ZGVycyh0aGlzKTsKKyAgICBpZiAoIXRhYmxlLT5oYXNJbnZhbGlkQ29sbGFwc2VkQm9yZGVycygp
KQorICAgICAgICByZXR1cm4gY2VsbENvbGxhcHNlZEJvcmRlcnMtPnN0YXJ0KCk7CiAKICAgICAv
LyBGb3IgdGhlIHN0YXJ0IGJvcmRlciwgd2UgbmVlZCB0byBjaGVjaywgaW4gb3JkZXIgb2YgcHJl
Y2VkZW5jZToKICAgICAvLyAoMSkgT3VyIHN0YXJ0IGJvcmRlci4KQEAgLTQwNiwxNyArNDA5LDE3
IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkU3RhcnRC
b3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOCiAgICAgICAgIENvbGxhcHNlZEJvcmRlclZhbHVl
IHByZXZDZWxsQm9yZGVyID0gQ29sbGFwc2VkQm9yZGVyVmFsdWUocHJldkNlbGwtPnN0eWxlKCkt
PmJvcmRlckVuZCgpLCBpbmNsdWRlQ29sb3IgPyBwcmV2Q2VsbC0+c3R5bGUoKS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKGVuZENvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQkNFTEwpOwogICAgICAg
ICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocHJldkNlbGxCb3JkZXIsIHJlc3VsdCk7CiAgICAgICAg
IGlmICghcmVzdWx0LmV4aXN0cygpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+c3RhcnQocmVzdWx0KTsKICAgICB9
IGVsc2UgaWYgKGlzU3RhcnRDb2x1bW4pIHsKICAgICAgICAgLy8gKDMpIE91ciByb3cncyBzdGFy
dCBib3JkZXIuCiAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNl
ZEJvcmRlclZhbHVlKHBhcmVudCgpLT5zdHlsZSgpLT5ib3JkZXJTdGFydCgpLCBpbmNsdWRlQ29s
b3IgPyBwYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKHN0YXJ0Q29sb3JQ
cm9wZXJ0eSkgOiBDb2xvcigpLCBCUk9XKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygp
KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgCisgICAgICAgICAgICByZXR1
cm4gY2VsbENvbGxhcHNlZEJvcmRlcnMtPnN0YXJ0KHJlc3VsdCk7CisKICAgICAgICAgLy8gKDQp
IE91ciByb3cgZ3JvdXAncyBzdGFydCBib3JkZXIuCiAgICAgICAgIHJlc3VsdCA9IGNob29zZUJv
cmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKHNlY3Rpb24oKS0+c3R5bGUoKS0+Ym9y
ZGVyU3RhcnQoKSwgaW5jbHVkZUNvbG9yID8gc2VjdGlvbigpLT5zdHlsZSgpLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3Ioc3RhcnRDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJST1dHUk9VUCkpOwog
ICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICByZXR1cm4gY2VsbENvbGxhcHNlZEJvcmRlcnMtPnN0YXJ0KHJlc3VsdCk7
CiAgICAgfQogICAgIAogICAgIC8vICg1KSBPdXIgY29sdW1uIGFuZCBjb2x1bW4gZ3JvdXAncyBz
dGFydCBib3JkZXJzLgpAQCAtNDI2LDExICs0MjksMTEgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUg
UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JP
ck4KICAgICBpZiAoY29sRWx0ICYmIHN0YXJ0Q29sRWRnZSkgewogICAgICAgICByZXN1bHQgPSBj
aG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShjb2xFbHQtPnN0eWxlKCkt
PmJvcmRlclN0YXJ0KCksIGluY2x1ZGVDb2xvciA/IGNvbEVsdC0+c3R5bGUoKS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKHN0YXJ0Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCQ09MKSk7CiAgICAg
ICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+c3RhcnQocmVzdWx0KTsKICAg
ICAgICAgaWYgKGNvbEVsdC0+cGFyZW50KCktPmlzVGFibGVDb2woKSAmJiAhY29sRWx0LT5wcmV2
aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3Vs
dCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY29sRWx0LT5wYXJlbnQoKS0+c3R5bGUoKS0+Ym9yZGVy
U3RhcnQoKSwgaW5jbHVkZUNvbG9yID8gY29sRWx0LT5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKHN0YXJ0Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCQ09MR1JPVVAp
KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQotICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNlbGxDb2xsYXBzZWRCb3JkZXJz
LT5zdGFydChyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNDQxLDIyICs0NDQs
MjUgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRTdGFy
dEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck4KICAgICAgICAgICAgIENvbGxhcHNlZEJvcmRl
clZhbHVlIGVuZEJvcmRlciA9IENvbGxhcHNlZEJvcmRlclZhbHVlKGNvbEVsdC0+c3R5bGUoKS0+
Ym9yZGVyRW5kKCksIGluY2x1ZGVDb2xvciA/IGNvbEVsdC0+c3R5bGUoKS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKGVuZENvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQkNPTCk7CiAgICAgICAgICAg
ICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoZW5kQm9yZGVyLCByZXN1bHQpOwogICAgICAgICAgICAg
aWYgKCFyZXN1bHQuZXhpc3RzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY2VsbENvbGxhcHNlZEJvcmRlcnMtPnN0YXJ0KHJlc3VsdCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyAoNykgVGhlIHRhYmxlJ3Mgc3Rh
cnQgYm9yZGVyLgogICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSh0YWJsZS0+c3R5bGUoKS0+Ym9yZGVyU3RhcnQoKSwgaW5jbHVkZUNvbG9y
ID8gdGFibGUtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihzdGFydENvbG9yUHJvcGVy
dHkpIDogQ29sb3IoKSwgQlRBQkxFKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFw
c2VkQm9yZGVycy0+c3RhcnQocmVzdWx0KTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKKworICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+c3RhcnQocmVzdWx0KTsKIH0K
IAogQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRFbmRCb3Jk
ZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAogewogICAgIFJl
bmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRhYmxlKCk7CiAgICAgYm9vbCBpc0VuZENvbHVtbiA9
IHRhYmxlLT5jb2xUb0VmZkNvbChjb2woKSArIGNvbFNwYW4oKSAtIDEpID09IHRhYmxlLT5udW1F
ZmZDb2xzKCkgLSAxOworICAgIENlbGxDb2xsYXBzZWRCb3JkZXJzKiBjZWxsQ29sbGFwc2VkQm9y
ZGVycyA9IHNlY3Rpb24oKS0+Y2VsbENvbGxhcHNlZEJvcmRlcnModGhpcyk7CisgICAgaWYgKCF0
YWJsZS0+aGFzSW52YWxpZENvbGxhcHNlZEJvcmRlcnMoKSkKKyAgICAgICAgcmV0dXJuIGNlbGxD
b2xsYXBzZWRCb3JkZXJzLT5lbmQoKTsKIAogICAgIC8vIEZvciBlbmQgYm9yZGVyLCB3ZSBuZWVk
IHRvIGNoZWNrLCBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgogICAgIC8vICgxKSBPdXIgZW5kIGJv
cmRlci4KQEAgLTQ3MSwxOCArNDc3LDE4IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRh
YmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90CiAgICAg
ICAgICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBzdGFydEJvcmRlciA9IENvbGxhcHNlZEJvcmRl
clZhbHVlKG5leHRDZWxsLT5zdHlsZSgpLT5ib3JkZXJTdGFydCgpLCBpbmNsdWRlQ29sb3IgPyBu
ZXh0Q2VsbC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKHN0YXJ0Q29sb3JQcm9wZXJ0
eSkgOiBDb2xvcigpLCBCQ0VMTCk7CiAgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIo
cmVzdWx0LCBzdGFydEJvcmRlcik7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIHJldHVybiBj
ZWxsQ29sbGFwc2VkQm9yZGVycy0+ZW5kKHJlc3VsdCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyAoMykgT3VyIHJvdydzIGVuZCBib3JkZXIuCiAgICAgICAgIHJlc3VsdCA9
IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKHBhcmVudCgpLT5zdHls
ZSgpLT5ib3JkZXJFbmQoKSwgaW5jbHVkZUNvbG9yID8gcGFyZW50KCktPnN0eWxlKCktPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihlbmRDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJST1cpKTsKICAg
ICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgcmV0dXJuIGNlbGxDb2xsYXBzZWRCb3JkZXJzLT5lbmQocmVzdWx0KTsKICAg
ICAgICAgCiAgICAgICAgIC8vICg0KSBPdXIgcm93IGdyb3VwJ3MgZW5kIGJvcmRlci4KICAgICAg
ICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoc2Vj
dGlvbigpLT5zdHlsZSgpLT5ib3JkZXJFbmQoKSwgaW5jbHVkZUNvbG9yID8gc2VjdGlvbigpLT5z
dHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoZW5kQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigp
LCBCUk9XR1JPVVApKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCi0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGNlbGxDb2xsYXBzZWRCb3JkZXJz
LT5lbmQocmVzdWx0KTsKICAgICB9CiAgICAgCiAgICAgLy8gKDUpIE91ciBjb2x1bW4gYW5kIGNv
bHVtbiBncm91cCdzIGVuZCBib3JkZXJzLgpAQCAtNDkyLDExICs0OTgsMTEgQEAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJv
cmRlckNvbG9yT3JOb3QKICAgICBpZiAoY29sRWx0ICYmIGVuZENvbEVkZ2UpIHsKICAgICAgICAg
cmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY29sRWx0
LT5zdHlsZSgpLT5ib3JkZXJFbmQoKSwgaW5jbHVkZUNvbG9yID8gY29sRWx0LT5zdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoZW5kQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCQ09MKSk7
CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+ZW5kKHJlc3VsdCk7
CiAgICAgICAgIGlmIChjb2xFbHQtPnBhcmVudCgpLT5pc1RhYmxlQ29sKCkgJiYgIWNvbEVsdC0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3Vs
dCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY29sRWx0LT5wYXJlbnQoKS0+c3R5bGUoKS0+Ym9yZGVy
RW5kKCksIGluY2x1ZGVDb2xvciA/IGNvbEVsdC0+cGFyZW50KCktPnN0eWxlKCktPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihlbmRDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJDT0xHUk9VUCkpOwog
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2VsbENvbGxhcHNlZEJvcmRlcnMtPmVu
ZChyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNTA3LDIxICs1MTMsMjUgQEAg
Q29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRFbmRCb3JkZXIo
SW5jbHVkZUJvcmRlckNvbG9yT3JOb3QKICAgICAgICAgICAgIENvbGxhcHNlZEJvcmRlclZhbHVl
IHN0YXJ0Qm9yZGVyID0gQ29sbGFwc2VkQm9yZGVyVmFsdWUoY29sRWx0LT5zdHlsZSgpLT5ib3Jk
ZXJTdGFydCgpLCBpbmNsdWRlQ29sb3IgPyBjb2xFbHQtPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihzdGFydENvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQkNPTCk7CiAgICAgICAgICAg
ICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBzdGFydEJvcmRlcik7CiAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+ZW5kKHJlc3VsdCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyAoNykgVGhlIHRhYmxlJ3MgZW5k
IGJvcmRlci4KICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUodGFibGUtPnN0eWxlKCktPmJvcmRlckVuZCgpLCBpbmNsdWRlQ29sb3IgPyB0
YWJsZS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGVuZENvbG9yUHJvcGVydHkpIDog
Q29sb3IoKSwgQlRBQkxFKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9y
ZGVycy0+ZW5kKHJlc3VsdCk7CiAgICAgfQogICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIGNlbGxDb2xsYXBzZWRCb3JkZXJzLT5lbmQocmVzdWx0KTsKIH0KIAogQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVk
ZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAogewogICAgIFJlbmRlclRhYmxl
KiB0YWJsZSA9IHRoaXMtPnRhYmxlKCk7CisgICAgQ2VsbENvbGxhcHNlZEJvcmRlcnMqIGNlbGxD
b2xsYXBzZWRCb3JkZXJzID0gc2VjdGlvbigpLT5jZWxsQ29sbGFwc2VkQm9yZGVycyh0aGlzKTsK
KworICAgIGlmICghdGFibGUtPmhhc0ludmFsaWRDb2xsYXBzZWRCb3JkZXJzKCkpCisgICAgICAg
IHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+YmVmb3JlKCk7CiAKICAgICAvLyBGb3IgYmVm
b3JlIGJvcmRlciwgd2UgbmVlZCB0byBjaGVjaywgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKICAg
ICAvLyAoMSkgT3VyIGJlZm9yZSBib3JkZXIuCkBAIC01MzQsMTMgKzU0NCwxMyBAQCBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNs
dWRlQm9yZGVyQ29sb3JPcgogICAgICAgICAvLyAoMikgQSBiZWZvcmUgY2VsbCdzIGFmdGVyIGJv
cmRlci4KICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKENvbGxhcHNlZEJvcmRlclZhbHVl
KHByZXZDZWxsLT5zdHlsZSgpLT5ib3JkZXJBZnRlcigpLCBpbmNsdWRlQ29sb3IgPyBwcmV2Q2Vs
bC0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGFmdGVyQ29sb3JQcm9wZXJ0eSkgOiBD
b2xvcigpLCBCQ0VMTCksIHJlc3VsdCk7CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFw
c2VkQm9yZGVycy0+YmVmb3JlKHJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIC8vICgzKSBPdXIg
cm93J3MgYmVmb3JlIGJvcmRlci4KICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBD
b2xsYXBzZWRCb3JkZXJWYWx1ZShwYXJlbnQoKS0+c3R5bGUoKS0+Ym9yZGVyQmVmb3JlKCksIGlu
Y2x1ZGVDb2xvciA/IHBhcmVudCgpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYmVm
b3JlQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCUk9XKSk7CiAgICAgaWYgKCFyZXN1bHQuZXhp
c3RzKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBjZWxsQ29sbGFw
c2VkQm9yZGVycy0+YmVmb3JlKHJlc3VsdCk7CiAgICAgCiAgICAgLy8gKDQpIFRoZSBwcmV2aW91
cyByb3cncyBhZnRlciBib3JkZXIuCiAgICAgaWYgKHByZXZDZWxsKSB7CkBAIC01NTMsNyArNTYz
LDcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCZWZv
cmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3IKICAgICAgICAgaWYgKHByZXZSb3cpIHsKICAg
ICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihDb2xsYXBzZWRCb3JkZXJWYWx1ZShwcmV2
Um93LT5zdHlsZSgpLT5ib3JkZXJBZnRlcigpLCBpbmNsdWRlQ29sb3IgPyBwcmV2Um93LT5zdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYWZ0ZXJDb2xvclByb3BlcnR5KSA6IENvbG9yKCks
IEJST1cpLCByZXN1bHQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2VsbENv
bGxhcHNlZEJvcmRlcnMtPmJlZm9yZShyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogICAgIApA
QCAtNTYzLDE0ICs1NzMsMTQgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxs
Ojpjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3IKICAgICAgICAgLy8g
KDUpIE91ciByb3cgZ3JvdXAncyBiZWZvcmUgYm9yZGVyLgogICAgICAgICByZXN1bHQgPSBjaG9v
c2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShjdXJyU2VjdGlvbi0+c3R5bGUo
KS0+Ym9yZGVyQmVmb3JlKCksIGluY2x1ZGVDb2xvciA/IGN1cnJTZWN0aW9uLT5zdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoYmVmb3JlQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCUk9X
R1JPVVApKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIGNlbGxDb2xsYXBzZWRCb3JkZXJzLT5iZWZv
cmUocmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIC8vICg2KSBQcmV2aW91cyByb3cgZ3JvdXAn
cyBhZnRlciBib3JkZXIuCiAgICAgICAgIGN1cnJTZWN0aW9uID0gdGFibGUtPnNlY3Rpb25BYm92
ZShjdXJyU2VjdGlvbik7CiAgICAgICAgIGlmIChjdXJyU2VjdGlvbikgewogICAgICAgICAgICAg
cmVzdWx0ID0gY2hvb3NlQm9yZGVyKENvbGxhcHNlZEJvcmRlclZhbHVlKGN1cnJTZWN0aW9uLT5z
dHlsZSgpLT5ib3JkZXJBZnRlcigpLCBpbmNsdWRlQ29sb3IgPyBjdXJyU2VjdGlvbi0+c3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGFmdGVyQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBC
Uk9XR1JPVVApLCByZXN1bHQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2Vs
bENvbGxhcHNlZEJvcmRlcnMtPmJlZm9yZShyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtNTgwLDI2ICs1OTAsMjkgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVD
ZWxsOjpjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3IKICAgICAgICAg
aWYgKGNvbEVsdCkgewogICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwg
Q29sbGFwc2VkQm9yZGVyVmFsdWUoY29sRWx0LT5zdHlsZSgpLT5ib3JkZXJCZWZvcmUoKSwgaW5j
bHVkZUNvbG9yID8gY29sRWx0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYmVmb3Jl
Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCQ09MKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3Vs
dC5leGlzdHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+YmVmb3JlKHJlc3VsdCk7CiAgICAgICAg
ICAgICBpZiAoY29sRWx0LT5wYXJlbnQoKS0+aXNUYWJsZUNvbCgpKSB7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY29s
RWx0LT5wYXJlbnQoKS0+c3R5bGUoKS0+Ym9yZGVyQmVmb3JlKCksIGluY2x1ZGVDb2xvciA/IGNv
bEVsdC0+cGFyZW50KCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihiZWZvcmVDb2xv
clByb3BlcnR5KSA6IENvbG9yKCksIEJDT0xHUk9VUCkpOwogICAgICAgICAgICAgICAgIGlmICgh
cmVzdWx0LmV4aXN0cygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbENvbGxhcHNlZEJvcmRlcnMtPmJlZm9yZShyZXN1
bHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyAoOSkg
VGhlIHRhYmxlJ3MgYmVmb3JlIGJvcmRlci4KICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVy
KHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUodGFibGUtPnN0eWxlKCktPmJvcmRlckJlZm9y
ZSgpLCBpbmNsdWRlQ29sb3IgPyB0YWJsZS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KGJlZm9yZUNvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQlRBQkxFKSk7CiAgICAgICAgIGlmICgh
cmVzdWx0LmV4aXN0cygpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+YmVmb3JlKHJlc3VsdCk7CiAgICAgfQogICAg
IAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNlbGxDb2xsYXBzZWRCb3JkZXJzLT5i
ZWZvcmUocmVzdWx0KTsKIH0KIAogQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxs
Ojpjb2xsYXBzZWRBZnRlckJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29s
b3IpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdGhpcy0+dGFibGUoKTsKKyAg
ICBDZWxsQ29sbGFwc2VkQm9yZGVycyogY2VsbENvbGxhcHNlZEJvcmRlcnMgPSBzZWN0aW9uKCkt
PmNlbGxDb2xsYXBzZWRCb3JkZXJzKHRoaXMpOworICAgIGlmICghdGFibGUtPmhhc0ludmFsaWRD
b2xsYXBzZWRCb3JkZXJzKCkpCisgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+
YWZ0ZXIoKTsKIAogICAgIC8vIEZvciBhZnRlciBib3JkZXIsIHdlIG5lZWQgdG8gY2hlY2ssIGlu
IG9yZGVyIG9mIHByZWNlZGVuY2U6CiAgICAgLy8gKDEpIE91ciBhZnRlciBib3JkZXIuCkBAIC02
MTIsMTkgKzYyNSwxOSBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNv
bGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTgogICAgICAgICAvLyAoMikg
QW4gYWZ0ZXIgY2VsbCdzIGJlZm9yZSBib3JkZXIuCiAgICAgICAgIHJlc3VsdCA9IGNob29zZUJv
cmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKG5leHRDZWxsLT5zdHlsZSgpLT5ib3Jk
ZXJCZWZvcmUoKSwgaW5jbHVkZUNvbG9yID8gbmV4dENlbGwtPnN0eWxlKCktPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihiZWZvcmVDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJDRUxMKSk7CiAgICAg
ICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+YWZ0ZXIocmVzdWx0KTsKICAg
ICB9CiAgICAgCiAgICAgLy8gKDMpIE91ciByb3cncyBhZnRlciBib3JkZXIuIChGSVhNRTogRGVh
bCB3aXRoIHJvd3NwYW4hKQogICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxh
cHNlZEJvcmRlclZhbHVlKHBhcmVudCgpLT5zdHlsZSgpLT5ib3JkZXJBZnRlcigpLCBpbmNsdWRl
Q29sb3IgPyBwYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGFmdGVyQ29s
b3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCUk9XKSk7CiAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9y
ZGVycy0+YWZ0ZXIocmVzdWx0KTsKICAgICAKICAgICAvLyAoNCkgVGhlIG5leHQgcm93J3MgYmVm
b3JlIGJvcmRlci4KICAgICBpZiAobmV4dENlbGwpIHsKICAgICAgICAgcmVzdWx0ID0gY2hvb3Nl
Qm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUobmV4dENlbGwtPnBhcmVudCgpLT5z
dHlsZSgpLT5ib3JkZXJCZWZvcmUoKSwgaW5jbHVkZUNvbG9yID8gbmV4dENlbGwtPnBhcmVudCgp
LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYmVmb3JlQ29sb3JQcm9wZXJ0eSkgOiBD
b2xvcigpLCBCUk9XKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVy
cy0+YWZ0ZXIocmVzdWx0KTsKICAgICB9CiAgICAgCiAgICAgLy8gTm93IGNoZWNrIHJvdyBncm91
cHMuCkBAIC02MzMsMTQgKzY0NiwxNCBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJs
ZUNlbGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTgogICAgICAg
ICAvLyAoNSkgT3VyIHJvdyBncm91cCdzIGFmdGVyIGJvcmRlci4KICAgICAgICAgcmVzdWx0ID0g
Y2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY3VyclNlY3Rpb24tPnN0
eWxlKCktPmJvcmRlckFmdGVyKCksIGluY2x1ZGVDb2xvciA/IGN1cnJTZWN0aW9uLT5zdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoYWZ0ZXJDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJS
T1dHUk9VUCkpOwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gY2VsbENvbGxhcHNlZEJvcmRlcnMtPmFm
dGVyKHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICAvLyAoNikgRm9sbG93aW5nIHJvdyBncm91
cCdzIGJlZm9yZSBib3JkZXIuCiAgICAgICAgIGN1cnJTZWN0aW9uID0gdGFibGUtPnNlY3Rpb25C
ZWxvdyhjdXJyU2VjdGlvbik7CiAgICAgICAgIGlmIChjdXJyU2VjdGlvbikgewogICAgICAgICAg
ICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY3Vy
clNlY3Rpb24tPnN0eWxlKCktPmJvcmRlckJlZm9yZSgpLCBpbmNsdWRlQ29sb3IgPyBjdXJyU2Vj
dGlvbi0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKGJlZm9yZUNvbG9yUHJvcGVydHkp
IDogQ29sb3IoKSwgQlJPV0dST1VQKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIHJldHVy
biBjZWxsQ29sbGFwc2VkQm9yZGVycy0+YWZ0ZXIocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0K
ICAgICAKQEAgLTY0OSwyMSArNjYyLDIyIEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRh
YmxlQ2VsbDo6Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOCiAgICAg
ICAgIFJlbmRlclRhYmxlQ29sKiBjb2xFbHQgPSB0YWJsZS0+Y29sRWxlbWVudChjb2woKSk7CiAg
ICAgICAgIGlmIChjb2xFbHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihy
ZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKGNvbEVsdC0+c3R5bGUoKS0+Ym9yZGVyQWZ0ZXIo
KSwgaW5jbHVkZUNvbG9yID8gY29sRWx0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
YWZ0ZXJDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJDT0wpKTsKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LmV4aXN0cygpKSByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQu
ZXhpc3RzKCkpIAorICAgICAgICAgICAgICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy0+
YWZ0ZXIocmVzdWx0KTsKICAgICAgICAgICAgIGlmIChjb2xFbHQtPnBhcmVudCgpLT5pc1RhYmxl
Q29sKCkpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBD
b2xsYXBzZWRCb3JkZXJWYWx1ZShjb2xFbHQtPnBhcmVudCgpLT5zdHlsZSgpLT5ib3JkZXJBZnRl
cigpLCBpbmNsdWRlQ29sb3IgPyBjb2xFbHQtPnBhcmVudCgpLT5zdHlsZSgpLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoYWZ0ZXJDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJDT0xHUk9VUCkpOwog
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbENvbGxhcHNl
ZEJvcmRlcnMtPmFmdGVyKHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIC8vICg5KSBUaGUgdGFibGUncyBhZnRlciBib3JkZXIuCiAgICAgICAgIHJl
c3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKHRhYmxlLT5z
dHlsZSgpLT5ib3JkZXJBZnRlcigpLCBpbmNsdWRlQ29sb3IgPyB0YWJsZS0+c3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKGFmdGVyQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCVEFCTEUp
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgcmV0dXJuIGNlbGxDb2xsYXBzZWRCb3JkZXJzLT5hZnRlcihyZXN1
bHQpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OyAgICAKKyAgIAorICAgIHJldHVy
biBjZWxsQ29sbGFwc2VkQm9yZGVycy0+YWZ0ZXIocmVzdWx0KTsgICAgCiB9CiAKIENvbGxhcHNl
ZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkTGVmdEJvcmRlcihJbmNsdWRl
Qm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CkBAIC04ODMsNiArODk3LDcgQEAg
c3RhdGljIHZvaWQgYWRkQm9yZGVyU3R5bGUoUmVuZGVyVGFibGU6OkNvbGxhcHNlZEJvcmRlclZh
bHVlcyYgYm9yZGVyVmFsdWVzLAogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGVjdEJvcmRl
clZhbHVlcyhSZW5kZXJUYWJsZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWVzJiBib3JkZXJWYWx1ZXMp
IGNvbnN0CiB7CisgICAgQVNTRVJUKHRhYmxlKCktPm5lZWRzTGF5b3V0KCkpOwogICAgIGFkZEJv
cmRlclN0eWxlKGJvcmRlclZhbHVlcywgY29sbGFwc2VkU3RhcnRCb3JkZXIoKSk7CiAgICAgYWRk
Qm9yZGVyU3R5bGUoYm9yZGVyVmFsdWVzLCBjb2xsYXBzZWRFbmRCb3JkZXIoKSk7CiAgICAgYWRk
Qm9yZGVyU3R5bGUoYm9yZGVyVmFsdWVzLCBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoKSk7CkBAIC05
MjcsNyArOTQyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVy
cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG8KICAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSByaWdodFZhbCA9IGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKCk7CiAgICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgdG9wVmFsID0gY29sbGFwc2VkVG9wQm9yZGVyKCk7CiAgICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgYm90dG9tVmFsID0gY29sbGFwc2VkQm90dG9tQm9yZGVyKCk7Ci0gICAgIAor
ICAgIAogICAgIC8vIEFkanVzdCBvdXIgeC95L3dpZHRoL2hlaWdodCBzbyB0aGF0IHdlIHBhaW50
IHRoZSBjb2xsYXBzZWQgYm9yZGVycyBhdCB0aGUgY29ycmVjdCBsb2NhdGlvbi4KICAgICBMYXlv
dXRVbml0IHRvcFdpZHRoID0gdG9wVmFsLndpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCBib3R0b21X
aWR0aCA9IGJvdHRvbVZhbC53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCBmYzEzY2Y3ODE1ZmViZjBjODVlM2Q2NzBjNzIy
MjU3YjE0NjI2NDI3Li5kYWVhNTQyMjg4MzhkMzcyNGY0ZGU1NWEyYzIxYjBmOGNlZmQwNGYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApA
QCAtMTM0MCw0ICsxMzQwLDExIEBAIHVuc2lnbmVkIFJlbmRlclRhYmxlU2VjdGlvbjo6cm93SW5k
ZXhGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVJvdyogcm93KSBjb25zCiAgICAgcmV0dXJu
IDA7CiB9CiAKK0NlbGxDb2xsYXBzZWRCb3JkZXJzKiBSZW5kZXJUYWJsZVNlY3Rpb246OmNlbGxD
b2xsYXBzZWRCb3JkZXJzKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkKK3sKKyAgICBDZWxs
Q29sbGFwc2VkQm9yZGVycyBuZXdDZWxsSW5mbzsKKyAgICBwYWlyPEhhc2hNYXA8Y29uc3QgUmVu
ZGVyVGFibGVDZWxsKiwgQ2VsbENvbGxhcHNlZEJvcmRlcnM+OjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gbV9jZWxsQ29sbGFwc2VkQm9yZGVycy5hZGQoY2VsbCwgbmV3Q2VsbEluZm8pOworICAg
IHJldHVybiAmcmVzdWx0LmZpcnN0LT5zZWNvbmQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRl
eCA4NmYzNDM0Mzc3MDZkYmYyNTBkYzA1MWIwNjBhNWJlMmZkOWZjMzFiLi40NDlhNjk0MTVmNThj
NTYyNWYwM2YwNWE5YjljOTNiNzYxOGExMjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0xMzAsNiArMTMwLDggQEAgcHVibGljOgogCiAg
ICAgdW5zaWduZWQgcm93SW5kZXhGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVJvdyopIGNv
bnN0OwogCisgICAgQ2VsbENvbGxhcHNlZEJvcmRlcnMqIGNlbGxDb2xsYXBzZWRCb3JkZXJzKGNv
bnN0IFJlbmRlclRhYmxlQ2VsbCopOworICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSk7CiAKQEAgLTE4Miw2ICsxODQsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZm9yY2VT
bG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbDsKIAogICAgIGJvb2wgbV9oYXNNdWx0aXBs
ZUNlbGxMZXZlbHM7CisKKyAgICAvLyBUaGlzIG1hcCBob2xkcyB0aGUgY29sbGFwc2VkIGJvcmRl
ciB2YWx1ZXMgZm9yIGNlbGxzIHdpdGggY29sbGFwc2VkIGJvcmRlcnMuCisgICAgLy8gSXQgaXMg
aGVsZCBhdCBUYWJsZVNlY3Rpb24gbGV2ZWwgdG8gc3BhcmUgbWVtb3J5IGNvbnN1bXB0aW9uIGJ5
IHRhYmxlIGNlbGxzLgorICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwgQ2VsbENv
bGxhcHNlZEJvcmRlcnM+IG1fY2VsbENvbGxhcHNlZEJvcmRlcnM7CisgICAgCiB9OwogCiBpbmxp
bmUgUmVuZGVyVGFibGVTZWN0aW9uKiB0b1JlbmRlclRhYmxlU2VjdGlvbihSZW5kZXJPYmplY3Qq
IG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db2xs
YXBzZWRCb3JkZXJWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxh
cHNlZEJvcmRlclZhbHVlLmgKaW5kZXggYzg0NTU1ZTBjNjc3MDNiM2Q0Zjg0ZTJmZjFhMzA4NGVk
NTc2OGUwOC4uZjk3NDk0M2I5ZDExZmYwZmQ3ZGVmODc2YmM1MDQ3MDM4MDFjODg1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZh
bHVlLmgKQEAgLTU1LDEyICs1NSw0OCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2JvcmRl
ci53aWR0aCgpID09IG8ubV9ib3JkZXIud2lkdGgoKSAmJiBtX2JvcmRlci5zdHlsZSgpID09IG8u
bV9ib3JkZXIuc3R5bGUoKSAmJiBtX3ByZWNlZGVuY2UgPT0gby5tX3ByZWNlZGVuY2U7CiAgICAg
fQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbGxhcHNlZEJvcmRlclZhbHVlJiBvKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYm9yZGVyLndpZHRoKCkgPT0gby5tX2JvcmRl
ci53aWR0aCgpICYmIG1fYm9yZGVyLnN0eWxlKCkgPT0gby5tX2JvcmRlci5zdHlsZSgpICYmIG1f
cHJlY2VkZW5jZSA9PSBvLm1fcHJlY2VkZW5jZSAmJiBtX2JvcmRlckNvbG9yID09IG8ubV9ib3Jk
ZXJDb2xvcjsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQm9yZGVyVmFsdWUgbV9ib3JkZXI7CiAg
ICAgQ29sb3IgbV9ib3JkZXJDb2xvcjsKICAgICBFQm9yZGVyUHJlY2VkZW5jZSBtX3ByZWNlZGVu
Y2U7CiB9OwogCitjbGFzcyBDZWxsQ29sbGFwc2VkQm9yZGVycyB7CitwdWJsaWM6CisgICAgQ2Vs
bENvbGxhcHNlZEJvcmRlcnMoKQorICAgICAgICA6IG1fYmVmb3JlKENvbGxhcHNlZEJvcmRlclZh
bHVlKCkpCisgICAgICAgICwgbV9hZnRlcihDb2xsYXBzZWRCb3JkZXJWYWx1ZSgpKQorICAgICAg
ICAsIG1fc3RhcnQoQ29sbGFwc2VkQm9yZGVyVmFsdWUoKSkKKyAgICAgICAgLCBtX2VuZChDb2xs
YXBzZWRCb3JkZXJWYWx1ZSgpKQorICAgIHsKKyAgICB9CisKKyAgICBDb2xsYXBzZWRCb3JkZXJW
YWx1ZSBiZWZvcmUoQ29sbGFwc2VkQm9yZGVyVmFsdWUgYmVmb3JlKSB7IG1fYmVmb3JlID0gYmVm
b3JlOyByZXR1cm4gbV9iZWZvcmU7IH0KKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBhZnRlcihD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBhZnRlcikgeyBtX2FmdGVyID0gYWZ0ZXI7IHJldHVybiBtX2Fm
dGVyO30KKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBzdGFydChDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBzdGFydCkgeyBtX3N0YXJ0ID0gc3RhcnQ7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgQ29sbGFw
c2VkQm9yZGVyVmFsdWUgZW5kKENvbGxhcHNlZEJvcmRlclZhbHVlIGVuZCkgeyBtX2VuZCA9IGVu
ZDsgcmV0dXJuIG1fZW5kOyB9CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYmVmb3JlKCkgY29u
c3QgeyByZXR1cm4gbV9iZWZvcmU7IH0KKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBhZnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWZ0ZXI7IH0KKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBzdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorICAgIGJvb2wgZXhpc3RzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydC5leGlzdHMoKSAmJiBtX2VuZC5leGlzdHMoKSAmJiBtX2JlZm9yZS5leGlz
dHMoKSAmJiBtX2VuZC5leGlzdHMoKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENl
bGxDb2xsYXBzZWRCb3JkZXJzJiBvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmVm
b3JlID09IG8ubV9iZWZvcmUgJiYgbV9hZnRlciA9PSBvLm1fYWZ0ZXIgJiYgbV9zdGFydCA9PSBv
Lm1fc3RhcnQgJiYgbV9lbmQgPT0gby5tX2VuZDsKKyAgICB9Citwcml2YXRlOgorICAgIENvbGxh
cHNlZEJvcmRlclZhbHVlIG1fYmVmb3JlOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIG1fYWZ0
ZXI7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgbV9zdGFydDsKKyAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSBtX2VuZDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IENvbGxhcHNlZEJvcmRlclZhbHVlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120612</attachid>
            <date>2011-12-27 12:46:13 -0800</date>
            <delta_ts>2011-12-30 11:57:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20111227204611.patch</filename>
            <type>text/plain</type>
            <size>17284</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRlMjc2ZjM4NWEzNTU2
YWM3NTIwZTY2NWUzZDBjMWM2MDdjNTg4Mi4uNjRlZmIyYzYxOWM1M2Y0NDUwMDBhMmVkNmFhY2Rj
YjM3N2RmNzZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDExLTEyLTI2ICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSByZS1jYWxj
dWxhdGVkIGV2ZXJ5IHRpbWUgdGhleSBhcmUgcGFpbnRlZC4KKyAgICAgICAgVGhpcyBpcyB1bm5l
Y2Vzc2FyeSwgdGhleSBvbmx5IGNoYW5nZSB3aXRoIHRoZSBsYXlvdXQgb3Igc3R5bGUgc28gY2Fs
Y3VsYXRlIGFuZAorICAgICAgICBjYWNoZSB0aGVtIHdoZW5ldmVyIHRoZSBsYXlvdXQgb3Igc3R5
bGUgY2hhbmdlcyBhbmQgdXNlIHRoZSBjYWNoZWQgdmFsdWVzIHdoZW4KKyAgICAgICAgcGFpbnRp
bmcuIFRoZSBjYWNoZSBpcyBzdG9yZWQgaW4gdGhlIHRhYmxlIHNlY3Rpb24gc28gdGhhdCB0aGUg
bWVtb3J5IGZvb3RwcmludAorICAgICAgICBvZiBhIHRhYmxlIGlzIG9ubHkgaW5jcmVhc2VkIHdo
ZW4gaXQgaGFzIGNvbGxhcHNpbmcgYm9yZGVycy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNv
dmVyZWQgYnkgZXhpc3RpbmcgY29sbGFwc2VkIGJvcmRlciB0ZXN0cy4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjpzdHlsZURpZENoYW5nZSk6IAorICAgICAgICBFbnN1cmUgY29sbGFwc2VkIGJvcmRl
cnMgYXJlIHJlY2FsY3VsYXRlZCB3aGVuIHRoZSBzdHlsZSBjaGFuZ2VzLCBub3QganVzdCB3aGVu
IHRoZQorICAgICAgICBib3JkZXIgY2hhbmdlcy4gZmFzdC90YWJsZS9zaW1wbGVfcmVwYWludC5o
dG1sIGlzIGFuIGV4YW1wbGUgb2YgYSBjYXNlIHdoZXJlIGNoYW5naW5nCisgICAgICAgIHRoZSBj
ZWxsJ3MgYmFja2dyb3VuZCBjYW4gY2F1c2UgdGhlIGJvcmRlcnMgdG8gcmVxdWlyZSByZWNhbGN1
bGF0aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjYWNoZWRDb2xsYXBz
ZWRTdGFydEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxh
cHNlZFN0YXJ0Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29t
cHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6Y2FjaGVkQ29sbGFwc2VkRW5kQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEVuZEJvcmRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OmNhY2hlZENvbGxhcHNlZEJlZm9yZUJvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJlZm9yZUJvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRCZWZvcmVCb3Jk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjYWNoZWRDb2xsYXBzZWRB
ZnRlckJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNl
ZEFmdGVyQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0
ZUNvbGxhcHNlZEFmdGVyQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2Vs
bDo6Y2FjaGVkQ29sbGFwc2VkTGVmdEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZUNlbGw6OmNhY2hlZENvbGxhcHNlZFJpZ2h0Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6Y2FjaGVkQ29sbGFwc2VkVG9wQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y2FjaGVkQ29sbGFwc2VkQm90dG9tQm9yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkZXJzKTog
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVTZWN0aW9uOjpjZWxsQ29sbGFwc2VkQm9yZGVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRC
b3JkZXJWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbENvbGxhcHNlZEJvcmRlcnM6OkNlbGxD
b2xsYXBzZWRCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxDb2xsYXBzZWRCb3JkZXJz
OjpzZXRCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbENvbGxhcHNlZEJvcmRlcnM6OnNl
dEFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxDb2xsYXBzZWRCb3JkZXJzOjpzZXRTdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpDZWxsQ29sbGFwc2VkQm9yZGVyczo6c2V0RW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNlbGxDb2xsYXBzZWRCb3JkZXJzOjpiZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2VsbENvbGxhcHNlZEJvcmRlcnM6OmFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNlbGxDb2xsYXBzZWRCb3JkZXJzOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDZWxsQ29s
bGFwc2VkQm9yZGVyczo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxDb2xsYXBzZWRCb3Jk
ZXJzOjpvcGVyYXRvcj09KToKKwogMjAxMS0xMi0yMSAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjk0NDkyKTogVGV4dCBpcyBzaGlmdGVk
IHRvIHRoZSByaWdodCBpbiBzb21lIGJ1dHRvbnMgaW4gdGhlIE1hYyBBcHAgU3RvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKaW5kZXggZjQzZTVjMWEw
MmU5OGY5YzZhNDk0NTRjOTNhMTc4ZmFhYjQ5YWU5NC4uNDVkZjk2OTQ1N2E2N2JiYjU2MzFhOTE2
ZDJhOTE1ZjUwMzliYTg2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAKQEAgLTMyMCwxMCArMzIwLDExIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
CiAgICAgaWYgKHBhcmVudCgpICYmIHNlY3Rpb24oKSAmJiBvbGRTdHlsZSAmJiBzdHlsZSgpLT5o
ZWlnaHQoKSAhPSBvbGRTdHlsZS0+aGVpZ2h0KCkgJiYgcm93V2FzU2V0KCkpCiAgICAgICAgIHNl
Y3Rpb24oKS0+cm93TG9naWNhbEhlaWdodENoYW5nZWQocm93KCkpOwogCi0gICAgLy8gSWYgYm9y
ZGVyIHdhcyBjaGFuZ2VkLCBub3RpZnkgdGFibGUuCisgICAgLy8gQW55IGNoYW5nZSB0byB0aGUg
Y2VsbCdzIHN0eWxlIG1heSBhZmZlY3QgY29sbGFwc2VkIGJvcmRlcnMsIGludmFsaWRhdGUgc28g
dGhhdCB1cGRhdGVkIHZhbHVlcyBjYW4KKyAgICAvLyBiZSBjYWNoZWQgZm9yIHxwYWludENvbGxh
cHNlZEJvcmRlcnN8CiAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgIFJlbmRlclRhYmxlKiB0
YWJsZSA9IHRoaXMtPnRhYmxlKCk7Ci0gICAgICAgIGlmICh0YWJsZSAmJiAhdGFibGUtPnNlbGZO
ZWVkc0xheW91dCgpICYmICF0YWJsZS0+bm9ybWFsQ2hpbGROZWVkc0xheW91dCgpJiYgb2xkU3R5
bGUgJiYgb2xkU3R5bGUtPmJvcmRlcigpICE9IHN0eWxlKCktPmJvcmRlcigpKQorICAgICAgICBp
ZiAodGFibGUgJiYgIXRhYmxlLT5zZWxmTmVlZHNMYXlvdXQoKSAmJiAhdGFibGUtPm5vcm1hbENo
aWxkTmVlZHNMYXlvdXQoKSkKICAgICAgICAgICAgIHRhYmxlLT5pbnZhbGlkYXRlQ29sbGFwc2Vk
Qm9yZGVycygpOwogICAgIH0KIH0KQEAgLTM5MCw4ICszOTEsMjMgQEAgc3RhdGljIENvbGxhcHNl
ZEJvcmRlclZhbHVlIGNob29zZUJvcmRlcihjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgYm9y
ZGVyMSwgY28KICAgICByZXR1cm4gYm9yZGVyLnN0eWxlKCkgPT0gQkhJRERFTiA/IENvbGxhcHNl
ZEJvcmRlclZhbHVlKCkgOiBib3JkZXI7CiB9CiAKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y2FjaGVkQ29sbGFwc2VkU3RhcnRCb3JkZXIoKSBjb25zdAoreworICAgIENl
bGxDb2xsYXBzZWRCb3JkZXJzJiBjZWxsQ29sbGFwc2VkQm9yZGVycyA9IHNlY3Rpb24oKS0+Y2Vs
bENvbGxhcHNlZEJvcmRlcnModGhpcyk7CisgICAgQVNTRVJUKGNlbGxDb2xsYXBzZWRCb3JkZXJz
LnN0YXJ0KCkuZXhpc3RzKCkpOworICAgIHJldHVybiBjZWxsQ29sbGFwc2VkQm9yZGVycy5zdGFy
dCgpOworfQorCiBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNl
ZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QK
IHsKKyAgICBDZWxsQ29sbGFwc2VkQm9yZGVycyYgY2VsbENvbGxhcHNlZEJvcmRlcnMgPSBzZWN0
aW9uKCktPmNlbGxDb2xsYXBzZWRCb3JkZXJzKHRoaXMpOworICAgIENvbGxhcHNlZEJvcmRlclZh
bHVlIHJlc3VsdCA9IGNvbXB1dGVDb2xsYXBzZWRTdGFydEJvcmRlcihpbmNsdWRlQ29sb3IpOwor
ICAgIGNlbGxDb2xsYXBzZWRCb3JkZXJzLnNldFN0YXJ0KHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRl
Q29sbGFwc2VkU3RhcnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9y
KSBjb25zdAorewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRhYmxlKCk7CiAgICAg
Ym9vbCBpc1N0YXJ0Q29sdW1uID0gY29sKCkgPT0gMDsKIApAQCAtNDUzLDggKzQ2OSwyMyBAQCBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9yZGVy
KEluY2x1ZGVCb3JkZXJDb2xvck9yTgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0NvbGxhcHNl
ZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y2FjaGVkQ29sbGFwc2VkRW5kQm9yZGVyKCkg
Y29uc3QKK3sKKyAgICBDZWxsQ29sbGFwc2VkQm9yZGVycyYgY2VsbENvbGxhcHNlZEJvcmRlcnMg
PSBzZWN0aW9uKCktPmNlbGxDb2xsYXBzZWRCb3JkZXJzKHRoaXMpOworICAgIEFTU0VSVChjZWxs
Q29sbGFwc2VkQm9yZGVycy5lbmQoKS5leGlzdHMoKSk7CisgICAgcmV0dXJuIGNlbGxDb2xsYXBz
ZWRCb3JkZXJzLmVuZCgpOworfQorCiBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29s
b3IpIGNvbnN0CiB7CisgICAgQ2VsbENvbGxhcHNlZEJvcmRlcnMmIGNlbGxDb2xsYXBzZWRCb3Jk
ZXJzID0gc2VjdGlvbigpLT5jZWxsQ29sbGFwc2VkQm9yZGVycyh0aGlzKTsKKyAgICBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRlQ29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVD
b2xvcik7CisgICAgY2VsbENvbGxhcHNlZEJvcmRlcnMuc2V0RW5kKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpj
b21wdXRlQ29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVD
b2xvcikgY29uc3QKK3sKICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0aGlzLT50YWJsZSgpOwog
ICAgIGJvb2wgaXNFbmRDb2x1bW4gPSB0YWJsZS0+Y29sVG9FZmZDb2woY29sKCkgKyBjb2xTcGFu
KCkgLSAxKSA9PSB0YWJsZS0+bnVtRWZmQ29scygpIC0gMTsKIApAQCAtNTE5LDggKzU1MCwyMyBA
QCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEVuZEJvcmRl
cihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0NvbGxh
cHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y2FjaGVkQ29sbGFwc2VkQmVmb3JlQm9y
ZGVyKCkgY29uc3QKK3sKKyAgICBDZWxsQ29sbGFwc2VkQm9yZGVycyYgY2VsbENvbGxhcHNlZEJv
cmRlcnMgPSBzZWN0aW9uKCktPmNlbGxDb2xsYXBzZWRCb3JkZXJzKHRoaXMpOworICAgIEFTU0VS
VChjZWxsQ29sbGFwc2VkQm9yZGVycy5iZWZvcmUoKS5leGlzdHMoKSk7CisgICAgcmV0dXJuIGNl
bGxDb2xsYXBzZWRCb3JkZXJzLmJlZm9yZSgpOworfQorCiBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBS
ZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JP
ck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CiB7CisgICAgQ2VsbENvbGxhcHNlZEJvcmRlcnMmIGNl
bGxDb2xsYXBzZWRCb3JkZXJzID0gc2VjdGlvbigpLT5jZWxsQ29sbGFwc2VkQm9yZGVycyh0aGlz
KTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRlQ29sbGFwc2VkQmVm
b3JlQm9yZGVyKGluY2x1ZGVDb2xvcik7CisgICAgY2VsbENvbGxhcHNlZEJvcmRlcnMuc2V0QmVm
b3JlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFs
dWUgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQ29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK3sKICAgICBSZW5kZXJUYWJsZSog
dGFibGUgPSB0aGlzLT50YWJsZSgpOwogCiAgICAgLy8gRm9yIGJlZm9yZSBib3JkZXIsIHdlIG5l
ZWQgdG8gY2hlY2ssIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CkBAIC01OTcsOCArNjQzLDIzIEBA
IENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQmVmb3JlQm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorQ29sbGFw
c2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjYWNoZWRDb2xsYXBzZWRBZnRlckJvcmRl
cigpIGNvbnN0Cit7CisgICAgQ2VsbENvbGxhcHNlZEJvcmRlcnMmIGNlbGxDb2xsYXBzZWRCb3Jk
ZXJzID0gc2VjdGlvbigpLT5jZWxsQ29sbGFwc2VkQm9yZGVycyh0aGlzKTsKKyAgICBBU1NFUlQo
Y2VsbENvbGxhcHNlZEJvcmRlcnMuYWZ0ZXIoKS5leGlzdHMoKSk7CisgICAgcmV0dXJuIGNlbGxD
b2xsYXBzZWRCb3JkZXJzLmFmdGVyKCk7Cit9CisKIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3Qg
aW5jbHVkZUNvbG9yKSBjb25zdAogeworICAgIENlbGxDb2xsYXBzZWRCb3JkZXJzJiBjZWxsQ29s
bGFwc2VkQm9yZGVycyA9IHNlY3Rpb24oKS0+Y2VsbENvbGxhcHNlZEJvcmRlcnModGhpcyk7Cisg
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29tcHV0ZUNvbGxhcHNlZEFmdGVyQm9y
ZGVyKGluY2x1ZGVDb2xvcik7CisgICAgY2VsbENvbGxhcHNlZEJvcmRlcnMuc2V0QWZ0ZXIocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5k
ZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRBZnRlckJvcmRlcihJbmNsdWRlQm9yZGVyQ29s
b3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0Cit7CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0g
dGhpcy0+dGFibGUoKTsKIAogICAgIC8vIEZvciBhZnRlciBib3JkZXIsIHdlIG5lZWQgdG8gY2hl
Y2ssIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CkBAIC02NjYsNiArNzI3LDM4IEBAIENvbGxhcHNl
ZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVk
ZUJvcmRlckNvbG9yT3JOCiAgICAgcmV0dXJuIHJlc3VsdDsgICAgCiB9CiAKK0NvbGxhcHNlZEJv
cmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y2FjaGVkQ29sbGFwc2VkTGVmdEJvcmRlcigpIGNv
bnN0Cit7CisgICAgUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUgPSB0YWJsZSgpLT5zdHlsZSgpOwor
ICAgIGlmICh0YWJsZVN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBy
ZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY2FjaGVkQ29sbGFw
c2VkU3RhcnRCb3JkZXIoKSA6IGNhY2hlZENvbGxhcHNlZEVuZEJvcmRlcigpOworICAgIHJldHVy
biB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY2FjaGVkQ29sbGFw
c2VkQWZ0ZXJCb3JkZXIoKSA6IGNhY2hlZENvbGxhcHNlZEJlZm9yZUJvcmRlcigpOworfQorCitD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNhY2hlZENvbGxhcHNlZFJpZ2h0
Qm9yZGVyKCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCkt
PnN0eWxlKCk7CisgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
CisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBj
YWNoZWRDb2xsYXBzZWRFbmRCb3JkZXIoKSA6IGNhY2hlZENvbGxhcHNlZFN0YXJ0Qm9yZGVyKCk7
CisgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBj
YWNoZWRDb2xsYXBzZWRCZWZvcmVCb3JkZXIoKSA6IGNhY2hlZENvbGxhcHNlZEFmdGVyQm9yZGVy
KCk7Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y2FjaGVkQ29s
bGFwc2VkVG9wQm9yZGVyKCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9
IHRhYmxlKCktPnN0eWxlKCk7CisgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSgpID8gY2FjaGVkQ29sbGFwc2VkQWZ0ZXJCb3JkZXIoKSA6IGNhY2hlZENvbGxhcHNl
ZEJlZm9yZUJvcmRlcigpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyBjYWNoZWRDb2xsYXBzZWRTdGFydEJvcmRlcigpIDogY2FjaGVkQ29sbGFwc2Vk
RW5kQm9yZGVyKCk7Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6
Y2FjaGVkQ29sbGFwc2VkQm90dG9tQm9yZGVyKCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHlsZSog
dGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CisgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY2FjaGVkQ29sbGFwc2VkQmVmb3JlQm9yZGVyKCkgOiBj
YWNoZWRDb2xsYXBzZWRBZnRlckJvcmRlcigpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjYWNoZWRDb2xsYXBzZWRFbmRCb3JkZXIoKSA6IGNhY2hl
ZENvbGxhcHNlZFN0YXJ0Qm9yZGVyKCk7Cit9CisKIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y29sbGFwc2VkTGVmdEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBp
bmNsdWRlQ29sb3IpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUgPSB0YWJs
ZSgpLT5zdHlsZSgpOwpAQCAtOTIzLDExICsxMDE2LDExIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxs
OjpwYWludENvbGxhcHNlZEJvcmRlcnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvCiAKICAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3QoYWRqdXN0ZWRQYWlu
dE9mZnNldCwgc2l6ZSgpKTsKIAotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGxlZnRWYWwgPSBj
b2xsYXBzZWRMZWZ0Qm9yZGVyKCk7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmlnaHRWYWwg
PSBjb2xsYXBzZWRSaWdodEJvcmRlcigpOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHRvcFZh
bCA9IGNvbGxhcHNlZFRvcEJvcmRlcigpOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvdHRv
bVZhbCA9IGNvbGxhcHNlZEJvdHRvbUJvcmRlcigpOwotICAgICAKKyAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSBsZWZ0VmFsID0gY2FjaGVkQ29sbGFwc2VkTGVmdEJvcmRlcigpOworICAgIENvbGxh
cHNlZEJvcmRlclZhbHVlIHJpZ2h0VmFsID0gY2FjaGVkQ29sbGFwc2VkUmlnaHRCb3JkZXIoKTsK
KyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSB0b3BWYWwgPSBjYWNoZWRDb2xsYXBzZWRUb3BCb3Jk
ZXIoKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBib3R0b21WYWwgPSBjYWNoZWRDb2xsYXBz
ZWRCb3R0b21Cb3JkZXIoKTsKKyAgICAKICAgICAvLyBBZGp1c3Qgb3VyIHgveS93aWR0aC9oZWln
aHQgc28gdGhhdCB3ZSBwYWludCB0aGUgY29sbGFwc2VkIGJvcmRlcnMgYXQgdGhlIGNvcnJlY3Qg
bG9jYXRpb24uCiAgICAgTGF5b3V0VW5pdCB0b3BXaWR0aCA9IHRvcFZhbC53aWR0aCgpOwogICAg
IExheW91dFVuaXQgYm90dG9tV2lkdGggPSBib3R0b21WYWwud2lkdGgoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAppbmRleCAzNTFlYTUwNDZiOTg2YTgxYzE0
MGJiMDYzY2NmMGQ4NGE4ZjlhNTkwLi40NzcwNTg4NTFhYTdkNTg4MTM1OTg2ZmQ4YTY0NjI5NDVj
NDI1NDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBA
IC0xMDgsMTYgKzEwOCwzMSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmQmVm
b3JlKGJvb2wgb3V0ZXIpIGNvbnN0OwogICAgIExheW91dFVuaXQgYm9yZGVySGFsZkFmdGVyKGJv
b2wgb3V0ZXIpIGNvbnN0OwogCisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY2FjaGVkQ29sbGFw
c2VkU3RhcnRCb3JkZXIoKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjYWNoZWRD
b2xsYXBzZWRFbmRCb3JkZXIoKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjYWNo
ZWRDb2xsYXBzZWRCZWZvcmVCb3JkZXIoKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBjYWNoZWRDb2xsYXBzZWRBZnRlckJvcmRlcigpIGNvbnN0OworCiAgICAgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUgY29sbGFwc2VkU3RhcnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJ
bmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwogICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxh
cHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xv
cikgY29uc3Q7CiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQmVmb3JlQm9yZGVy
KEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKICAg
ICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRBZnRlckJvcmRlcihJbmNsdWRlQm9yZGVy
Q29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7CiAKKyAgICBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSBjb21wdXRlQ29sbGFwc2VkU3RhcnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9y
T3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZh
bHVlIGNvbXB1dGVDb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJ
bmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbXB1
dGVDb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRl
Qm9yZGVyQ29sb3IpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbXB1dGVDb2xs
YXBzZWRBZnRlckJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJD
b2xvcikgY29uc3Q7CisKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRMZWZ0Qm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsK
ICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRSaWdodEJvcmRlcihJbmNsdWRlQm9y
ZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7CiAgICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgY29sbGFwc2VkVG9wQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0g
SW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xs
YXBzZWRCb3R0b21Cb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVy
Q29sb3IpIGNvbnN0OwogCisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY2FjaGVkQ29sbGFwc2Vk
TGVmdEJvcmRlcigpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNhY2hlZENvbGxh
cHNlZFJpZ2h0Qm9yZGVyKCkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY2FjaGVk
Q29sbGFwc2VkVG9wQm9yZGVyKCkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY2Fj
aGVkQ29sbGFwc2VkQm90dG9tQm9yZGVyKCkgY29uc3Q7CisKICAgICB2b2lkIGNvbGxlY3RCb3Jk
ZXJWYWx1ZXMoUmVuZGVyVGFibGU6OkNvbGxhcHNlZEJvcmRlclZhbHVlcyYpIGNvbnN0OwogICAg
IHN0YXRpYyB2b2lkIHNvcnRCb3JkZXJWYWx1ZXMoUmVuZGVyVGFibGU6OkNvbGxhcHNlZEJvcmRl
clZhbHVlcyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwCmluZGV4IGZjMTNjZjc4MTVmZWJmMGM4NWUzZDY3MGM3MjIyNTdiMTQ2MjY0Mjcu
LmQwMjQ1MjdkN2I3NzM1MzQxMGU3ZDk4MmIyMTIxZjRlMzgyODI1MzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xMzQwLDQgKzEz
NDAsMTEgQEAgdW5zaWduZWQgUmVuZGVyVGFibGVTZWN0aW9uOjpyb3dJbmRleEZvclJlbmRlcmVy
KGNvbnN0IFJlbmRlclRhYmxlUm93KiByb3cpIGNvbnMKICAgICByZXR1cm4gMDsKIH0KIAorQ2Vs
bENvbGxhcHNlZEJvcmRlcnMmIFJlbmRlclRhYmxlU2VjdGlvbjo6Y2VsbENvbGxhcHNlZEJvcmRl
cnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQoreworICAgIENlbGxDb2xsYXBzZWRCb3Jk
ZXJzIG5ld0NlbGxJbmZvOworICAgIHBhaXI8SGFzaE1hcDxjb25zdCBSZW5kZXJUYWJsZUNlbGwq
LCBDZWxsQ29sbGFwc2VkQm9yZGVycz46Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2NlbGxD
b2xsYXBzZWRCb3JkZXJzLmFkZChjZWxsLCBuZXdDZWxsSW5mbyk7CisgICAgcmV0dXJuIHJlc3Vs
dC5maXJzdC0+c2Vjb25kOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKaW5kZXggODZmMzQzNDM3NzA2
ZGJmMjUwZGMwNTFiMDYwYTViZTJmZDlmYzMxYi4uYzhkZWNhOWQxYWM2YzMzZGFiMzlkYTk3MWY5
OWY2MjE4MmFkNWQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uaApAQCAtMTMwLDYgKzEzMCw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHJv
d0luZGV4Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cqKSBjb25zdDsKIAorICAgIENl
bGxDb2xsYXBzZWRCb3JkZXJzJiBjZWxsQ29sbGFwc2VkQm9yZGVycyhjb25zdCBSZW5kZXJUYWJs
ZUNlbGwqKTsKKyAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCkBAIC0x
ODIsNiArMTg0LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZvcmNlU2xvd1BhaW50UGF0aFdp
dGhPdmVyZmxvd2luZ0NlbGw7CiAKICAgICBib29sIG1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzOwor
CisgICAgLy8gVGhpcyBtYXAgaG9sZHMgdGhlIGNvbGxhcHNlZCBib3JkZXIgdmFsdWVzIGZvciBj
ZWxscyB3aXRoIGNvbGxhcHNlZCBib3JkZXJzLgorICAgIC8vIEl0IGlzIGhlbGQgYXQgVGFibGVT
ZWN0aW9uIGxldmVsIHRvIHNwYXJlIG1lbW9yeSBjb25zdW1wdGlvbiBieSB0YWJsZSBjZWxscy4K
KyAgICBIYXNoTWFwPGNvbnN0IFJlbmRlclRhYmxlQ2VsbCosIENlbGxDb2xsYXBzZWRCb3JkZXJz
PiBtX2NlbGxDb2xsYXBzZWRCb3JkZXJzOworICAgIAogfTsKIAogaW5saW5lIFJlbmRlclRhYmxl
U2VjdGlvbiogdG9SZW5kZXJUYWJsZVNlY3Rpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ29sbGFwc2VkQm9yZGVyVmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1
ZS5oCmluZGV4IGM4NDU1NWUwYzY3NzAzYjNkNGY4NGUyZmYxYTMwODRlZDU3NjhlMDguLjEyZWQz
NmE2NWQyNjJhMDMzZTFhMzliZDFmNGE2NzFhYjVkNDJkN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oCkBAIC01NSwx
MiArNTUsNDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9ib3JkZXIud2lkdGgoKSA9PSBv
Lm1fYm9yZGVyLndpZHRoKCkgJiYgbV9ib3JkZXIuc3R5bGUoKSA9PSBvLm1fYm9yZGVyLnN0eWxl
KCkgJiYgbV9wcmVjZWRlbmNlID09IG8ubV9wcmVjZWRlbmNlOwogICAgIH0KIAorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgbykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2JvcmRlci53aWR0aCgpID09IG8ubV9ib3JkZXIud2lkdGgoKSAmJiBt
X2JvcmRlci5zdHlsZSgpID09IG8ubV9ib3JkZXIuc3R5bGUoKSAmJiBtX3ByZWNlZGVuY2UgPT0g
by5tX3ByZWNlZGVuY2UgJiYgbV9ib3JkZXJDb2xvciA9PSBvLm1fYm9yZGVyQ29sb3I7CisgICAg
fQorCiBwcml2YXRlOgogICAgIEJvcmRlclZhbHVlIG1fYm9yZGVyOwogICAgIENvbG9yIG1fYm9y
ZGVyQ29sb3I7CiAgICAgRUJvcmRlclByZWNlZGVuY2UgbV9wcmVjZWRlbmNlOwogfTsKIAorY2xh
c3MgQ2VsbENvbGxhcHNlZEJvcmRlcnMgeworcHVibGljOgorICAgIENlbGxDb2xsYXBzZWRCb3Jk
ZXJzKCkKKyAgICAgICAgOiBtX2JlZm9yZShDb2xsYXBzZWRCb3JkZXJWYWx1ZSgpKQorICAgICAg
ICAsIG1fYWZ0ZXIoQ29sbGFwc2VkQm9yZGVyVmFsdWUoKSkKKyAgICAgICAgLCBtX3N0YXJ0KENv
bGxhcHNlZEJvcmRlclZhbHVlKCkpCisgICAgICAgICwgbV9lbmQoQ29sbGFwc2VkQm9yZGVyVmFs
dWUoKSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRCZWZvcmUoQ29sbGFwc2VkQm9yZGVy
VmFsdWUgYmVmb3JlKSB7IG1fYmVmb3JlID0gYmVmb3JlOyB9CisgICAgdm9pZCBzZXRBZnRlcihD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBhZnRlcikgeyBtX2FmdGVyID0gYWZ0ZXI7IH0KKyAgICB2b2lk
IHNldFN0YXJ0KENvbGxhcHNlZEJvcmRlclZhbHVlIHN0YXJ0KSB7IG1fc3RhcnQgPSBzdGFydDsg
fQorICAgIHZvaWQgc2V0RW5kKENvbGxhcHNlZEJvcmRlclZhbHVlIGVuZCkgeyBtX2VuZCA9IGVu
ZDsgfQorICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YmVmb3JlOyB9CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYWZ0ZXIoKSBjb25zdCB7IHJldHVy
biBtX2FmdGVyOyB9CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgc3RhcnQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXJ0OyB9CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDZWxsQ29sbGFwc2Vk
Qm9yZGVycyYgbykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JlZm9yZSA9PSBvLm1f
YmVmb3JlICYmIG1fYWZ0ZXIgPT0gby5tX2FmdGVyICYmIG1fc3RhcnQgPT0gby5tX3N0YXJ0ICYm
IG1fZW5kID09IG8ubV9lbmQ7CisgICAgfQorcHJpdmF0ZToKKyAgICBDb2xsYXBzZWRCb3JkZXJW
YWx1ZSBtX2JlZm9yZTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBtX2FmdGVyOworICAgIENv
bGxhcHNlZEJvcmRlclZhbHVlIG1fc3RhcnQ7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgbV9l
bmQ7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDb2xsYXBzZWRC
b3JkZXJWYWx1ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120813</attachid>
            <date>2011-12-30 11:57:56 -0800</date>
            <delta_ts>2012-01-07 07:18:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20111230195753.patch</filename>
            <type>text/plain</type>
            <size>18187</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmVjMjc4MmY5MTRjZTI1
ZTk5ZDliMDRiMzY2N2Q2YWQxNDUzNDZlNC4uMTY1MjJlMjFjMjRjOTFlZmM4OWFjZWNjYTFiYWRj
YWQzOTk5YzhiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDExLTEyLTMwICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSByZS1jYWxj
dWxhdGVkIGV2ZXJ5IHRpbWUgdGhleSBhcmUgcGFpbnRlZC4KKyAgICAgICAgVGhpcyBpcyB1bm5l
Y2Vzc2FyeSwgdGhleSBvbmx5IGNoYW5nZSB3aXRoIHRoZSBsYXlvdXQgb3Igc3R5bGUgc28gY2Fs
Y3VsYXRlIGFuZAorICAgICAgICBjYWNoZSB0aGVtIHdoZW5ldmVyIHRoZSBsYXlvdXQgb3Igc3R5
bGUgY2hhbmdlcyBhbmQgdXNlIHRoZSBjYWNoZWQgdmFsdWVzIHdoZW4KKyAgICAgICAgcGFpbnRp
bmcuIFRoZSBjYWNoZSBpcyBzdG9yZWQgaW4gdGhlIHRhYmxlIHNlY3Rpb24gc28gdGhhdCB0aGUg
bWVtb3J5IGZvb3RwcmludAorICAgICAgICBvZiBhIHRhYmxlIGlzIG9ubHkgaW5jcmVhc2VkIHdo
ZW4gaXQgaGFzIGNvbGxhcHNpbmcgYm9yZGVycy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNv
dmVyZWQgYnkgZXhpc3RpbmcgY29sbGFwc2VkIGJvcmRlciB0ZXN0cy4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjpjb2xsYXBzZWRTdGFydEJvcmRlcik6CisgICAgICAgICBSZXR1cm4gdGhlIGNhY2hl
ZCB2YWx1ZSBpZiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlciwgb3RoZXJ3aXNlIGNvbXB1dGUsIGFu
ZCBhbHNvCisgICAgICAgICBjYWNoZSBpZiB0aGUgZnVsbCBib3JkZXIgaW5jbHVkaW5nIGNvbG9y
IHdhcyBjb21wdXRlZC4gQ29tcHV0ZSBhbmQgY2FjaGUgaXMgdGhlCisgICAgICAgICBkZWZhdWx0
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQ29sbGFwc2VkU3Rh
cnRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRF
bmRCb3JkZXIpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb21w
dXRlQ29sbGFwc2VkRW5kQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2Vs
bDo6Y29sbGFwc2VkQmVmb3JlQm9yZGVyKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEJlZm9yZUJvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVyKTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEFmdGVyQm9yZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkTGVmdEJvcmRl
cik6CisgICAgICAgICBQYXNzIG9uIHdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgY2FjaGUgZnJv
bSB0aGUgY2FsbGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBz
ZWRSaWdodEJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6
OmNvbGxhcHNlZFRvcEJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZUNlbGw6OmNvbGxhcHNlZEJvdHRvbUJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVycyk6CisgICAgICAgICBUaGlzIGZ1
bmN0aW9uIGFsd2F5cyB1c2VzIHRoZSBjb2xsYXBzZWQgYm9yZGVyIGNhY2hlIG5vdy4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6CisgICAgICAgICBNYWtlIHRoZSBjb2xs
YXBzZWQgYm9yZGVyIGZ1bmN0aW9ucyBwcml2YXRlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9u
OjpzZXRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0
aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAgVGhpcyB3aWxsIGFzc2VydCBp
ZiB0aGVyZSBpcyBubyBjYWNoZWQgY29sbGFwc2VkIGJvcmRlciBmb3IgdGhlIHNpZGUgb2YgdGhl
IAorICAgICAgICAgY2VsbCByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICBIYXNoTWFwIHdvdWxkbid0IGxl
dCBtZSB1c2UgQ29sbGFwc2VkQm9yZGVyU2lkZSBpbiB0aGUga2V5IHZhbHVlIGZvciB0aGUgY2Fj
aGUKKyAgICAgICAgIHNvIHVzZSBpbnQgaW5zdGVhZC4KKwogMjAxMS0xMi0yOCAgQ2FpbyBNYXJj
ZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAg
ICAgICAgIFVzZSBIYXNoTWFwPE93blB0cj4gZm9yIFVzZXJTY3JpcHRNYXAgYW5kIFVzZXJTdHls
ZVNoZWV0TWFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
CmluZGV4IGY0M2U1YzFhMDJlOThmOWM2YTQ5NDU0YzkzYTE3OGZhYWI0OWFlOTQuLmYxNWY4ODdm
NDQwNmFjOGE0OGQ2NTQwZDVhYjVjM2Y4OTg5YzEyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC0zOTAsNyArMzkwLDE3IEBAIHN0YXRpYyBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBjaG9vc2VCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFs
dWUmIGJvcmRlcjEsIGNvCiAgICAgcmV0dXJuIGJvcmRlci5zdHlsZSgpID09IEJISURERU4gPyBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSgpIDogYm9yZGVyOwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1
ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xv
ck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRh
YmxlQ2VsbDo6Y29sbGFwc2VkU3RhcnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5j
bHVkZUNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90IHVzZUNhY2hlKSBjb25zdAorewor
ICAgIGlmICh1c2VDYWNoZSkKKyAgICAgICByZXR1cm4gc2VjdGlvbigpLT5jYWNoZWRDb2xsYXBz
ZWRCb3JkZXIodGhpcywgQ0JTU3RhcnQpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJlc3Vs
dCA9IGNvbXB1dGVDb2xsYXBzZWRTdGFydEJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgIGlmIChp
bmNsdWRlQ29sb3IpCisgICAgICAgIHNlY3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMs
IENCU1N0YXJ0LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NvbGxhcHNlZEJv
cmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKElu
Y2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKIHsKICAgICBSZW5kZXJU
YWJsZSogdGFibGUgPSB0aGlzLT50YWJsZSgpOwogICAgIGJvb2wgaXNTdGFydENvbHVtbiA9IGNv
bCgpID09IDA7CkBAIC00NTMsNyArNDYzLDE3IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y29sbGFwc2VkU3RhcnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVD
ZWxsOjpjb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNv
bG9yKSBjb25zdAorQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBz
ZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yLCBVc2VDYWNo
ZWRCb3JkZXJWYWx1ZU9yTm90IHVzZUNhY2hlKSBjb25zdAoreworICAgIGlmICh1c2VDYWNoZSkK
KyAgICAgICByZXR1cm4gc2VjdGlvbigpLT5jYWNoZWRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JT
RW5kKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRlQ29sbGFwc2Vk
RW5kQm9yZGVyKGluY2x1ZGVDb2xvcik7CisgICAgaWYgKGluY2x1ZGVDb2xvcikKKyAgICAgICAg
c2VjdGlvbigpLT5zZXRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTRW5kLCByZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2Vs
bDo6Y29tcHV0ZUNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNs
dWRlQ29sb3IpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdGhpcy0+dGFibGUo
KTsKICAgICBib29sIGlzRW5kQ29sdW1uID0gdGFibGUtPmNvbFRvRWZmQ29sKGNvbCgpICsgY29s
U3BhbigpIC0gMSkgPT0gdGFibGUtPm51bUVmZkNvbHMoKSAtIDE7CkBAIC01MTksNyArNTM5LDE3
IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ29s
bGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCZWZvcmVCb3JkZXIo
SW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAorQ29sbGFwc2VkQm9y
ZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJv
cmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90IHVz
ZUNhY2hlKSBjb25zdAoreworICAgIGlmICh1c2VDYWNoZSkKKyAgICAgICByZXR1cm4gc2VjdGlv
bigpLT5jYWNoZWRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTQmVmb3JlKTsKKyAgICBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRlQ29sbGFwc2VkQmVmb3JlQm9yZGVyKGluY2x1
ZGVDb2xvcik7CisgICAgaWYgKGluY2x1ZGVDb2xvcikKKyAgICAgICAgc2VjdGlvbigpLT5zZXRD
b2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTQmVmb3JlLCByZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNv
bGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3Ip
IGNvbnN0CiB7CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdGhpcy0+dGFibGUoKTsKIApAQCAt
NTk3LDcgKzYyNywxNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNv
bGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPcgogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
QWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAor
Q29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRBZnRlckJvcmRl
cihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZh
bHVlT3JOb3QgdXNlQ2FjaGUpIGNvbnN0Cit7CisgICAgaWYgKHVzZUNhY2hlKQorICAgICAgIHJl
dHVybiBzZWN0aW9uKCktPmNhY2hlZENvbGxhcHNlZEJvcmRlcih0aGlzLCBDQlNBZnRlcik7Cisg
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29tcHV0ZUNvbGxhcHNlZEFmdGVyQm9y
ZGVyKGluY2x1ZGVDb2xvcik7CisgICAgaWYgKGluY2x1ZGVDb2xvcikKKyAgICAgICAgc2VjdGlv
bigpLT5zZXRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTQWZ0ZXIsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpj
b21wdXRlQ29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVk
ZUNvbG9yKSBjb25zdAogewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRhYmxlKCk7
CiAKQEAgLTY2NiwzNiArNzA2LDM2IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxl
Q2VsbDo6Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOCiAgICAgcmV0
dXJuIHJlc3VsdDsgICAgCiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2Vs
bDo6Y29sbGFwc2VkTGVmdEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29s
b3IpIGNvbnN0CitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNl
ZExlZnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yLCBVc2VDYWNo
ZWRCb3JkZXJWYWx1ZU9yTm90IHVzZUNhY2hlKSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiB0
YWJsZVN0eWxlID0gdGFibGUoKS0+c3R5bGUoKTsKICAgICBpZiAodGFibGVTdHlsZS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKGluY2x1ZGVDb2xvcikgOiBj
b2xsYXBzZWRFbmRCb3JkZXIoaW5jbHVkZUNvbG9yKTsKLSAgICByZXR1cm4gdGFibGVTdHlsZS0+
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEFmdGVyQm9yZGVyKGluY2x1
ZGVDb2xvcikgOiBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoaW5jbHVkZUNvbG9yKTsKKyAgICAgICAg
cmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZFN0
YXJ0Qm9yZGVyKGluY2x1ZGVDb2xvciwgdXNlQ2FjaGUpIDogY29sbGFwc2VkRW5kQm9yZGVyKGlu
Y2x1ZGVDb2xvciwgdXNlQ2FjaGUpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9yLCB1
c2VDYWNoZSkgOiBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoaW5jbHVkZUNvbG9yLCB1c2VDYWNoZSk7
CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkUmln
aHRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAorQ29s
bGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRSaWdodEJvcmRlcihJ
bmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVl
T3JOb3QgdXNlQ2FjaGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUgPSB0
YWJsZSgpLT5zdHlsZSgpOwogICAgIGlmICh0YWJsZVN0eWxlLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQotICAgICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xvcikgOiBjb2xsYXBzZWRTdGFydEJv
cmRlcihpbmNsdWRlQ29sb3IpOwotICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQmVmb3JlQm9yZGVyKGluY2x1ZGVDb2xvcikgOiBj
b2xsYXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgICAgICByZXR1cm4gdGFibGVT
dHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1
ZGVDb2xvciwgdXNlQ2FjaGUpIDogY29sbGFwc2VkU3RhcnRCb3JkZXIoaW5jbHVkZUNvbG9yLCB1
c2VDYWNoZSk7CisgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkgPyBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoaW5jbHVkZUNvbG9yLCB1c2VDYWNoZSkgOiBj
b2xsYXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IsIHVzZUNhY2hlKTsKIH0KIAotQ29sbGFw
c2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRUb3BCb3JkZXIoSW5jbHVk
ZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAorQ29sbGFwc2VkQm9yZGVyVmFs
dWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRUb3BCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9y
T3JOb3QgaW5jbHVkZUNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90IHVzZUNhY2hlKSBj
b25zdAogewogICAgIFJlbmRlclN0eWxlKiB0YWJsZVN0eWxlID0gdGFibGUoKS0+c3R5bGUoKTsK
ICAgICBpZiAodGFibGVTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAg
cmV0dXJuIHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBjb2xsYXBz
ZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkQmVmb3JlQm9yZGVyKGluY2x1
ZGVDb2xvcik7Ci0gICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKGluY2x1ZGVDb2xvcikgOiBjb2xsYXBzZWRFbmRCb3Jk
ZXIoaW5jbHVkZUNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCkgPyBjb2xsYXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IsIHVz
ZUNhY2hlKSA6IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihpbmNsdWRlQ29sb3IsIHVzZUNhY2hlKTsK
KyAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29sbGFw
c2VkU3RhcnRCb3JkZXIoaW5jbHVkZUNvbG9yLCB1c2VDYWNoZSkgOiBjb2xsYXBzZWRFbmRCb3Jk
ZXIoaW5jbHVkZUNvbG9yLCB1c2VDYWNoZSk7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJl
bmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQm90dG9tQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9y
Tm90IGluY2x1ZGVDb2xvcikgY29uc3QKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxl
Q2VsbDo6Y29sbGFwc2VkQm90dG9tQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1
ZGVDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB1c2VDYWNoZSkgY29uc3QKIHsKICAg
ICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAgICAgaWYgKHRh
YmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiB0YWJs
ZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQmVmb3JlQm9y
ZGVyKGluY2x1ZGVDb2xvcikgOiBjb2xsYXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IpOwot
ICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBz
ZWRFbmRCb3JkZXIoaW5jbHVkZUNvbG9yKSA6IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKGluY2x1ZGVD
b2xvcik7CisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpID8gY29sbGFwc2VkQmVmb3JlQm9yZGVyKGluY2x1ZGVDb2xvciwgdXNlQ2FjaGUpIDog
Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9yLCB1c2VDYWNoZSk7CisgICAgcmV0dXJu
IHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZEVuZEJvcmRl
cihpbmNsdWRlQ29sb3IsIHVzZUNhY2hlKSA6IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKGluY2x1ZGVD
b2xvciwgdXNlQ2FjaGUpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVy
TGVmdCgpIGNvbnN0CkBAIC05MjMsMTAgKzk2MywxMCBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6
cGFpbnRDb2xsYXBzZWRCb3JkZXJzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
bwogCiAgICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBMYXlvdXRSZWN0KGFkanVzdGVkUGFpbnRP
ZmZzZXQsIHNpemUoKSk7CiAKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBsZWZ0VmFsID0gY29s
bGFwc2VkTGVmdEJvcmRlcigpOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJpZ2h0VmFsID0g
Y29sbGFwc2VkUmlnaHRCb3JkZXIoKTsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSB0b3BWYWwg
PSBjb2xsYXBzZWRUb3BCb3JkZXIoKTsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBib3R0b21W
YWwgPSBjb2xsYXBzZWRCb3R0b21Cb3JkZXIoKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBs
ZWZ0VmFsID0gY29sbGFwc2VkTGVmdEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hl
ZEJvcmRlclZhbHVlKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSByaWdodFZhbCA9IGNvbGxh
cHNlZFJpZ2h0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUp
OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHRvcFZhbCA9IGNvbGxhcHNlZFRvcEJvcmRlcihJ
bmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKTsKKyAgICBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSBib3R0b21WYWwgPSBjb2xsYXBzZWRCb3R0b21Cb3JkZXIoSW5jbHVkZUJvcmRl
ckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSk7CiAgICAgIAogICAgIC8vIEFkanVzdCBvdXIg
eC95L3dpZHRoL2hlaWdodCBzbyB0aGF0IHdlIHBhaW50IHRoZSBjb2xsYXBzZWQgYm9yZGVycyBh
dCB0aGUgY29ycmVjdCBsb2NhdGlvbi4KICAgICBMYXlvdXRVbml0IHRvcFdpZHRoID0gdG9wVmFs
LndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKaW5k
ZXggMzUxZWE1MDQ2Yjk4NmE4MWMxNDBiYjA2M2NjZjBkODRhOGY5YTU5MC4uZjM4MWFlNDY2YjZm
YjdkMWI1ODNiMjVlNzNjZDZhOTVjMjU4MGVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuaApAQCAtMzYsNiArMzYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgdW5zZXRSb3dJbmRleCA9IDB4N0ZGRkZGRkY7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4
Um93SW5kZXggPSAweDdGRkZGRkZFOyAvLyAyLDE0Nyw0ODMsNjQ2CiAKIGVudW0gSW5jbHVkZUJv
cmRlckNvbG9yT3JOb3QgeyBEb05vdEluY2x1ZGVCb3JkZXJDb2xvciwgSW5jbHVkZUJvcmRlckNv
bG9yIH07CitlbnVtIFVzZUNhY2hlZEJvcmRlclZhbHVlT3JOb3QgeyBEb05vdFVzZUNhY2hlZEJv
cmRlclZhbHVlLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSB9OwogCiBjbGFzcyBSZW5kZXJUYWJsZUNl
bGwgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgpAQCAtOTgsMjYgKzk5LDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBib3JkZXJCZWZvcmUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgYm9yZGVyQWZ0ZXIoKSBjb25zdDsKIAotICAgIExheW91dFVuaXQg
Ym9yZGVySGFsZkxlZnQoYm9vbCBvdXRlcikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJI
YWxmUmlnaHQoYm9vbCBvdXRlcikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmVG9w
KGJvb2wgb3V0ZXIpIGNvbnN0OwotICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJvdHRvbShib29s
IG91dGVyKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgYm9yZGVySGFsZlN0YXJ0KGJvb2wgb3V0
ZXIpIGNvbnN0OwotICAgIExheW91dFVuaXQgYm9yZGVySGFsZkVuZChib29sIG91dGVyKSBjb25z
dDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZCZWZvcmUoYm9vbCBvdXRlcikgY29uc3Q7Ci0g
ICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmQWZ0ZXIoYm9vbCBvdXRlcikgY29uc3Q7Ci0KLSAgICBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29s
b3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUgY29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVk
ZUJvcmRlckNvbG9yKSBjb25zdDsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRC
ZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3Ip
IGNvbnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEFmdGVyQm9yZGVyKElu
Y2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKLQotICAg
IENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZExlZnRCb3JkZXIoSW5jbHVkZUJvcmRlckNv
bG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwotICAgIENvbGxhcHNlZEJvcmRl
clZhbHVlIGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5j
bHVkZUJvcmRlckNvbG9yKSBjb25zdDsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBz
ZWRUb3BCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3Ip
IGNvbnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEJvdHRvbUJvcmRlcihJ
bmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7Ci0KICAg
ICB2b2lkIGNvbGxlY3RCb3JkZXJWYWx1ZXMoUmVuZGVyVGFibGU6OkNvbGxhcHNlZEJvcmRlclZh
bHVlcyYpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHNvcnRCb3JkZXJWYWx1ZXMoUmVuZGVyVGFi
bGU6OkNvbGxhcHNlZEJvcmRlclZhbHVlcyYpOwogCkBAIC0xNzUsNiArMTU2LDMxIEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBMYXlvdXRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKIAor
ICAgIExheW91dFVuaXQgYm9yZGVySGFsZkxlZnQoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5
b3V0VW5pdCBib3JkZXJIYWxmUmlnaHQoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5p
dCBib3JkZXJIYWxmVG9wKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVy
SGFsZkJvdHRvbShib29sIG91dGVyKSBjb25zdDsKKworICAgIExheW91dFVuaXQgYm9yZGVySGFs
ZlN0YXJ0KGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVySGFsZkVuZChi
b29sIG91dGVyKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZCZWZvcmUoYm9vbCBv
dXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmQWZ0ZXIoYm9vbCBvdXRlcikg
Y29uc3Q7CisKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRTdGFydEJvcmRlcihJ
bmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9y
ZGVyVmFsdWVPck5vdCA9IERvTm90VXNlQ2FjaGVkQm9yZGVyVmFsdWUpIGNvbnN0OworICAgIENv
bGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JP
ck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCA9IERv
Tm90VXNlQ2FjaGVkQm9yZGVyVmFsdWUpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVl
IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVC
b3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCA9IERvTm90VXNlQ2FjaGVkQm9y
ZGVyVmFsdWUpIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEFmdGVy
Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VD
YWNoZWRCb3JkZXJWYWx1ZU9yTm90ID0gRG9Ob3RVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgY29uc3Q7
CisKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRMZWZ0Qm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1
ZU9yTm90ID0gRG9Ob3RVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgY29uc3Q7CisgICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgY29sbGFwc2VkUmlnaHRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3Qg
PSBJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlT3JOb3QgPSBEb05vdFVz
ZUNhY2hlZEJvcmRlclZhbHVlKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xs
YXBzZWRUb3BCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29s
b3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlT3JOb3QgPSBEb05vdFVzZUNhY2hlZEJvcmRlclZhbHVl
KSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRCb3R0b21Cb3JkZXIo
SW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJv
cmRlclZhbHVlT3JOb3QgPSBEb05vdFVzZUNhY2hlZEJvcmRlclZhbHVlKSBjb25zdDsKKworICAg
IENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbXB1dGVDb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRl
Qm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7CisgICAgQ29sbGFw
c2VkQm9yZGVyVmFsdWUgY29tcHV0ZUNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29s
b3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUgY29tcHV0ZUNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5v
dCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUg
Y29tcHV0ZUNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5j
bHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKwogICAgIHVuc2lnbmVkIG1fcm93IDogMzE7CiAgICAg
Ym9vbCBtX2NlbGxXaWR0aENoYW5nZWQgOiAxOwogICAgIHVuc2lnbmVkIG1fY29sdW1uIDogMzE7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmlu
ZGV4IGZjMTNjZjc4MTVmZWJmMGM4NWUzZDY3MGM3MjIyNTdiMTQ2MjY0MjcuLjJhY2NkMThlZDYx
NmQ2NjUwMmRjOWU3OWJlZGNhYmE4ZDM0MWExYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xMzQwLDQgKzEzNDAsMTYgQEAgdW5z
aWduZWQgUmVuZGVyVGFibGVTZWN0aW9uOjpyb3dJbmRleEZvclJlbmRlcmVyKGNvbnN0IFJlbmRl
clRhYmxlUm93KiByb3cpIGNvbnMKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OnNldENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGws
IENvbGxhcHNlZEJvcmRlclNpZGUgc2lkZSwgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyKQor
eworICAgIG1fY2VsbENvbGxhcHNlZEJvcmRlcnMuc2V0KG1ha2VfcGFpcihjZWxsLCBzaWRlKSwg
Ym9yZGVyKTsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlU2VjdGlvbjo6
Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgQ29sbGFw
c2VkQm9yZGVyU2lkZSBzaWRlKQoreworICAgIEhhc2hNYXA8cGFpcjxjb25zdCBSZW5kZXJUYWJs
ZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZT46Oml0ZXJhdG9yIGl0ID0gbV9jZWxs
Q29sbGFwc2VkQm9yZGVycy5maW5kKG1ha2VfcGFpcihjZWxsLCBzaWRlKSk7CisgICAgQVNTRVJU
KGl0ICE9IG1fY2VsbENvbGxhcHNlZEJvcmRlcnMuZW5kKCkpOworICAgIHJldHVybiBpdC0+c2Vj
b25kOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKaW5kZXggODZmMzQzNDM3NzA2ZGJmMjUwZGMwNTFi
MDYwYTViZTJmZDlmYzMxYi4uYWZmYTUxNWVhYjg2MTNkMGRkNTkyNzlhY2JmYzAxZGQ4N2E3MDhj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaApA
QCAtMzAsNiArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIENvbGxhcHNl
ZEJvcmRlclNpZGUgeworICAgIENCU0JlZm9yZSwKKyAgICBDQlNBZnRlciwKKyAgICBDQlNTdGFy
dCwKKyAgICBDQlNFbmQKK307CisKIGNsYXNzIFJlbmRlclRhYmxlQ2VsbDsKIGNsYXNzIFJlbmRl
clRhYmxlUm93OwogCkBAIC0xMzAsNiArMTM3LDkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
cm93SW5kZXhGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVJvdyopIGNvbnN0OwogCisgICAg
dm9pZCBzZXRDb2xsYXBzZWRCb3JkZXIoY29uc3QgUmVuZGVyVGFibGVDZWxsKiwgQ29sbGFwc2Vk
Qm9yZGVyU2lkZSwgQ29sbGFwc2VkQm9yZGVyVmFsdWUpOworICAgIENvbGxhcHNlZEJvcmRlclZh
bHVlJiBjYWNoZWRDb2xsYXBzZWRCb3JkZXIoY29uc3QgUmVuZGVyVGFibGVDZWxsKiwgQ29sbGFw
c2VkQm9yZGVyU2lkZSk7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCkBA
IC0xODIsNiArMTkyLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZvcmNlU2xvd1BhaW50UGF0
aFdpdGhPdmVyZmxvd2luZ0NlbGw7CiAKICAgICBib29sIG1faGFzTXVsdGlwbGVDZWxsTGV2ZWxz
OworCisgICAgLy8gVGhpcyBtYXAgaG9sZHMgdGhlIGNvbGxhcHNlZCBib3JkZXIgdmFsdWVzIGZv
ciBjZWxscyB3aXRoIGNvbGxhcHNlZCBib3JkZXJzLgorICAgIC8vIEl0IGlzIGhlbGQgYXQgVGFi
bGVTZWN0aW9uIGxldmVsIHRvIHNwYXJlIG1lbW9yeSBjb25zdW1wdGlvbiBieSB0YWJsZSBjZWxs
cy4KKyAgICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwgaW50PiwgQ29sbGFw
c2VkQm9yZGVyVmFsdWUgPiBtX2NlbGxDb2xsYXBzZWRCb3JkZXJzOwogfTsKIAogaW5saW5lIFJl
bmRlclRhYmxlU2VjdGlvbiogdG9SZW5kZXJUYWJsZVNlY3Rpb24oUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121550</attachid>
            <date>2012-01-07 07:19:00 -0800</date>
            <delta_ts>2012-01-07 07:22:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20120107151858.patch</filename>
            <type>text/plain</type>
            <size>18613</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjk3MDQwZjE3MjIyOGI1
MTg2YzI1YzZhNWQ3ZDdiMmNmNjI3YTAwNC4uODMxOWE2NzcxYmY4MGE5NTgzZGZlNGRkMWY1ZTFl
MmNhOWZmNGI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTEyLTMwICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSByZS1jYWxj
dWxhdGVkIGV2ZXJ5IHRpbWUgdGhleSBhcmUgcGFpbnRlZC4KKyAgICAgICAgVGhpcyBpcyB1bm5l
Y2Vzc2FyeSwgdGhleSBvbmx5IGNoYW5nZSB3aXRoIHRoZSBsYXlvdXQgb3Igc3R5bGUgc28gY2Fs
Y3VsYXRlIGFuZAorICAgICAgICBjYWNoZSB0aGVtIHdoZW5ldmVyIHRoZSBsYXlvdXQgb3Igc3R5
bGUgY2hhbmdlcyBhbmQgdXNlIHRoZSBjYWNoZWQgdmFsdWVzIHdoZW4KKyAgICAgICAgcGFpbnRp
bmcuIFRoZSBjYWNoZSBpcyBzdG9yZWQgaW4gdGhlIHRhYmxlIHNlY3Rpb24gc28gdGhhdCB0aGUg
bWVtb3J5IGZvb3RwcmludAorICAgICAgICBvZiBhIHRhYmxlIGlzIG9ubHkgaW5jcmVhc2VkIHdo
ZW4gaXQgaGFzIGNvbGxhcHNpbmcgYm9yZGVycy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNv
dmVyZWQgYnkgZXhpc3RpbmcgY29sbGFwc2VkIGJvcmRlciB0ZXN0cy4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjp3aWxsQmVEZXN0cm95ZWQpOiByZW1vdmUgZW50cmllcyBmcm9tIGNvbGxhcHNlZCBi
b3JkZXIgY2FjaGUKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
U3RhcnRCb3JkZXIpOgorICAgICAgICAgUmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUgaWYgcmVxdWVz
dGVkIGJ5IHRoZSBjYWxsZXIsIG90aGVyd2lzZSBjb21wdXRlLCBhbmQgYWxzbworICAgICAgICAg
Y2FjaGUgaWYgdGhlIGZ1bGwgYm9yZGVyIGluY2x1ZGluZyBjb2xvciB3YXMgY29tcHV0ZWQuIENv
bXB1dGUgYW5kIGNhY2hlIGlzIHRoZQorICAgICAgICAgZGVmYXVsdC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEVuZEJv
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJlZm9y
ZUJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1
dGVDb2xsYXBzZWRCZWZvcmVCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpjb2xsYXBzZWRBZnRlckJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRBZnRlckJvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZExlZnRCb3JkZXIpOgorICAgICAgICAgUGFz
cyBvbiB3aGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlIGNhY2hlIGZyb20gdGhlIGNhbGxlci4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkUmlnaHRCb3JkZXIpOiBk
aXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRUb3BCb3Jk
ZXIpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRC
b3R0b21Cb3JkZXIpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpw
YWludENvbGxhcHNlZEJvcmRlcnMpOgorICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgdXNl
cyB0aGUgY29sbGFwc2VkIGJvcmRlciBjYWNoZSBub3cuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAgTWFrZSB0aGUgY29sbGFwc2VkIGJvcmRlciBmdW5j
dGlvbnMgcHJpdmF0ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVtb3ZlQ2VsbENvbGxh
cHNlZEJvcmRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRD
b2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpj
YWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAgVGhpcyB3aWxsIGFzc2VydCBpZiB0aGVy
ZSBpcyBubyBjYWNoZWQgY29sbGFwc2VkIGJvcmRlciBmb3IgdGhlIHNpZGUgb2YgdGhlIAorICAg
ICAgICAgY2VsbCByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICBIYXNoTWFwIHdvdWxkbid0IGxldCBtZSB1
c2UgQ29sbGFwc2VkQm9yZGVyU2lkZSBpbiB0aGUga2V5IHZhbHVlIGZvciB0aGUgY2FjaGUKKyAg
ICAgICAgIHNvIHVzZSBpbnQgaW5zdGVhZC4KKwogMjAxMS0xMi0yMiAgUm9iZXJ0IEhvZ2FuICA8
cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgSGVhcC11c2UtYWZ0ZXItZnJlZSBpbiBXZWJD
b3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCBmNDNlNWMxYTAyZTk4ZjljNmE0OTQ1NGM5M2Ex
NzhmYWFiNDlhZTk0Li4zYjEzZDk4NzRlNTMyZDMzODYzYzhkZmVjYTBjNWE2ODk5ODgzYzdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNTgs
OCArNTgsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OndpbGxCZURlc3Ryb3llZCgpCiAKICAg
ICBSZW5kZXJCbG9jazo6d2lsbEJlRGVzdHJveWVkKCk7CiAKLSAgICBpZiAocmVjYWxjU2VjdGlv
bikKKyAgICBpZiAocmVjYWxjU2VjdGlvbikgewogICAgICAgICByZWNhbGNTZWN0aW9uLT5zZXRO
ZWVkc0NlbGxSZWNhbGMoKTsKKyAgICAgICAgcmVjYWxjU2VjdGlvbi0+cmVtb3ZlQ2VsbENvbGxh
cHNlZEJvcmRlcnModGhpcyk7CisgICAgfQogfQogCiB1bnNpZ25lZCBSZW5kZXJUYWJsZUNlbGw6
OmNvbFNwYW4oKSBjb25zdApAQCAtMzkwLDcgKzM5MiwxNyBAQCBzdGF0aWMgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUgY2hvb3NlQm9yZGVyKGNvbnN0IENvbGxhcHNlZEJvcmRlclZhbHVlJiBib3JkZXIx
LCBjbwogICAgIHJldHVybiBib3JkZXIuc3R5bGUoKSA9PSBCSElEREVOID8gQ29sbGFwc2VkQm9y
ZGVyVmFsdWUoKSA6IGJvcmRlcjsKIH0KIAotQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFi
bGVDZWxsOjpjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNs
dWRlQ29sb3IpIGNvbnN0CitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNv
bGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvciwg
VXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB1c2VDYWNoZSkgY29uc3QKK3sKKyAgICBpZiAodXNl
Q2FjaGUpCisgICAgICAgcmV0dXJuIHNlY3Rpb24oKS0+Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKHRo
aXMsIENCU1N0YXJ0KTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRl
Q29sbGFwc2VkU3RhcnRCb3JkZXIoaW5jbHVkZUNvbG9yKTsKKyAgICBpZiAoaW5jbHVkZUNvbG9y
KQorICAgICAgICBzZWN0aW9uKCktPnNldENvbGxhcHNlZEJvcmRlcih0aGlzLCBDQlNTdGFydCwg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBS
ZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVy
Q29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGFibGUqIHRhYmxl
ID0gdGhpcy0+dGFibGUoKTsKICAgICBib29sIGlzU3RhcnRDb2x1bW4gPSBjb2woKSA9PSAwOwpA
QCAtNDUzLDcgKzQ2NSwxNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6
OmNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTgogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFw
c2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QK
K0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVy
KEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFs
dWVPck5vdCB1c2VDYWNoZSkgY29uc3QKK3sKKyAgICBpZiAodXNlQ2FjaGUpCisgICAgICAgcmV0
dXJuIHNlY3Rpb24oKS0+Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0VuZCk7CisgICAg
Q29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29tcHV0ZUNvbGxhcHNlZEVuZEJvcmRlcihp
bmNsdWRlQ29sb3IpOworICAgIGlmIChpbmNsdWRlQ29sb3IpCisgICAgICAgIHNlY3Rpb24oKS0+
c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0VuZCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVD
b2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBj
b25zdAogewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRhYmxlKCk7CiAgICAgYm9v
bCBpc0VuZENvbHVtbiA9IHRhYmxlLT5jb2xUb0VmZkNvbChjb2woKSArIGNvbFNwYW4oKSAtIDEp
ID09IHRhYmxlLT5udW1FZmZDb2xzKCkgLSAxOwpAQCAtNTE5LDcgKzU0MSwxNyBAQCBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRl
Qm9yZGVyQ29sb3JPck5vdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNvbGxhcHNlZEJvcmRl
clZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3Jk
ZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJl
bmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9y
Tm90IGluY2x1ZGVDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB1c2VDYWNoZSkgY29u
c3QKK3sKKyAgICBpZiAodXNlQ2FjaGUpCisgICAgICAgcmV0dXJuIHNlY3Rpb24oKS0+Y2FjaGVk
Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0JlZm9yZSk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFs
dWUgcmVzdWx0ID0gY29tcHV0ZUNvbGxhcHNlZEJlZm9yZUJvcmRlcihpbmNsdWRlQ29sb3IpOwor
ICAgIGlmIChpbmNsdWRlQ29sb3IpCisgICAgICAgIHNlY3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9y
ZGVyKHRoaXMsIENCU0JlZm9yZSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRCZWZv
cmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAogewog
ICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRhYmxlKCk7CiAKQEAgLTU5Nyw3ICs2Mjks
MTcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCZWZv
cmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3IKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1D
b2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVy
KEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK0NvbGxhcHNlZEJv
cmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJv
cmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90IHVz
ZUNhY2hlKSBjb25zdAoreworICAgIGlmICh1c2VDYWNoZSkKKyAgICAgICByZXR1cm4gc2VjdGlv
bigpLT5jYWNoZWRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTQWZ0ZXIpOworICAgIENvbGxhcHNl
ZEJvcmRlclZhbHVlIHJlc3VsdCA9IGNvbXB1dGVDb2xsYXBzZWRBZnRlckJvcmRlcihpbmNsdWRl
Q29sb3IpOworICAgIGlmIChpbmNsdWRlQ29sb3IpCisgICAgICAgIHNlY3Rpb24oKS0+c2V0Q29s
bGFwc2VkQm9yZGVyKHRoaXMsIENCU0FmdGVyLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxh
cHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29u
c3QKIHsKICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0aGlzLT50YWJsZSgpOwogCkBAIC02NjYs
MzYgKzcwOCwzMiBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxh
cHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTgogICAgIHJldHVybiByZXN1bHQ7
ICAgIAogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNl
ZExlZnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAor
aW5saW5lIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkTGVm
dEJvcmRlcihSZW5kZXJTdHlsZSogdGFibGVTdHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHls
ZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRTdGFydEJvcmRlcihpbmNsdWRlQ29sb3Ip
IDogY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xvcik7Ci0gICAgcmV0dXJuIHRhYmxlU3R5
bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBjb2xsYXBzZWRBZnRlckJvcmRlcihp
bmNsdWRlQ29sb3IpIDogY29sbGFwc2VkQmVmb3JlQm9yZGVyKGluY2x1ZGVDb2xvcik7CisgICAg
ICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBz
ZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKSA6
IGNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZh
bHVlKTsKKyAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSA/IGNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9y
ZGVyVmFsdWUpIDogY29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNl
Q2FjaGVkQm9yZGVyVmFsdWUpOwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJs
ZUNlbGw6OmNvbGxhcHNlZFJpZ2h0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1
ZGVDb2xvcikgY29uc3QKK2lubGluZSBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbGxhcHNlZFJpZ2h0Qm9yZGVyKFJlbmRlclN0eWxlKiB0YWJsZVN0eWxlKSBjb25zdAog
ewotICAgIFJlbmRlclN0eWxlKiB0YWJsZVN0eWxlID0gdGFibGUoKS0+c3R5bGUoKTsKICAgICBp
ZiAodGFibGVTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJu
IHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZEVuZEJvcmRl
cihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkU3RhcnRCb3JkZXIoaW5jbHVkZUNvbG9yKTsKLSAg
ICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxh
cHNlZEJlZm9yZUJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5j
bHVkZUNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IGNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hl
ZEJvcmRlclZhbHVlKSA6IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwg
VXNlQ2FjaGVkQm9yZGVyVmFsdWUpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJD
b2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpIDogY29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVk
ZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSk7CiB9CiAKLUNvbGxhcHNlZEJvcmRl
clZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkVG9wQm9yZGVyKEluY2x1ZGVCb3JkZXJD
b2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK2lubGluZSBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFRvcEJvcmRlcihSZW5kZXJTdHlsZSogdGFibGVT
dHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0
eWxlKCk7CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0g
ICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8g
Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9yKSA6IGNvbGxhcHNlZEJlZm9yZUJvcmRl
cihpbmNsdWRlQ29sb3IpOwotICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyBjb2xsYXBzZWRTdGFydEJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2Vk
RW5kQm9yZGVyKGluY2x1ZGVDb2xvcik7CisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJv
cmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgOiBjb2xsYXBzZWRCZWZvcmVCb3JkZXIo
SW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSk7CisgICAgcmV0dXJuIHRh
YmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZFN0YXJ0Qm9yZGVy
KEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpIDogY29sbGFwc2VkRW5k
Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpOwogfQogCi1D
b2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJvdHRvbUJvcmRl
cihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CitpbmxpbmUgQ29s
bGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCb3R0b21Cb3JkZXIo
UmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHRhYmxl
U3R5bGUgPSB0YWJsZSgpLT5zdHlsZSgpOwogICAgIGlmICh0YWJsZVN0eWxlLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihpbmNsdWRlQ29sb3IpIDog
Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9yKTsKLSAgICByZXR1cm4gdGFibGVTdHls
ZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVD
b2xvcikgOiBjb2xsYXBzZWRTdGFydEJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgICAgICByZXR1
cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEJl
Zm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKSA6IGNv
bGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFs
dWUpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBj
b2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1
ZSkgOiBjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJv
cmRlclZhbHVlKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckxlZnQo
KSBjb25zdApAQCAtOTIzLDEwICs5NjEsMTEgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50
Q29sbGFwc2VkQm9yZGVycyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG8KIAog
ICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gTGF5b3V0UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0
LCBzaXplKCkpOwogCi0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgbGVmdFZhbCA9IGNvbGxhcHNl
ZExlZnRCb3JkZXIoKTsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSByaWdodFZhbCA9IGNvbGxh
cHNlZFJpZ2h0Qm9yZGVyKCk7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgdG9wVmFsID0gY29s
bGFwc2VkVG9wQm9yZGVyKCk7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm90dG9tVmFsID0g
Y29sbGFwc2VkQm90dG9tQm9yZGVyKCk7CisgICAgUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUgPSB0
YWJsZSgpLT5zdHlsZSgpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGxlZnRWYWwgPSBjb2xs
YXBzZWRMZWZ0Qm9yZGVyKHRhYmxlU3R5bGUpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJp
Z2h0VmFsID0gY29sbGFwc2VkUmlnaHRCb3JkZXIodGFibGVTdHlsZSk7CisgICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgdG9wVmFsID0gY29sbGFwc2VkVG9wQm9yZGVyKHRhYmxlU3R5bGUpOworICAg
IENvbGxhcHNlZEJvcmRlclZhbHVlIGJvdHRvbVZhbCA9IGNvbGxhcHNlZEJvdHRvbUJvcmRlcih0
YWJsZVN0eWxlKTsKICAgICAgCiAgICAgLy8gQWRqdXN0IG91ciB4L3kvd2lkdGgvaGVpZ2h0IHNv
IHRoYXQgd2UgcGFpbnQgdGhlIGNvbGxhcHNlZCBib3JkZXJzIGF0IHRoZSBjb3JyZWN0IGxvY2F0
aW9uLgogICAgIExheW91dFVuaXQgdG9wV2lkdGggPSB0b3BWYWwud2lkdGgoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAppbmRleCAzNTFlYTUwNDZiOTg2YTgx
YzE0MGJiMDYzY2NmMGQ4NGE4ZjlhNTkwLi41MTU5ODNjYmY3ZTAzOTc1N2FmMDg1NmEwMjZmMDEz
ZGNjNDE0OTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
CkBAIC0zNiw2ICszNiw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1bnNldFJvd0luZGV4ID0g
MHg3RkZGRkZGRjsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSb3dJbmRleCA9IDB4N0ZGRkZG
RkU7IC8vIDIsMTQ3LDQ4Myw2NDYKIAogZW51bSBJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCB7IERv
Tm90SW5jbHVkZUJvcmRlckNvbG9yLCBJbmNsdWRlQm9yZGVyQ29sb3IgfTsKK2VudW0gVXNlQ2Fj
aGVkQm9yZGVyVmFsdWVPck5vdCB7IERvTm90VXNlQ2FjaGVkQm9yZGVyVmFsdWUsIFVzZUNhY2hl
ZEJvcmRlclZhbHVlIH07CiAKIGNsYXNzIFJlbmRlclRhYmxlQ2VsbCA6IHB1YmxpYyBSZW5kZXJC
bG9jayB7CiBwdWJsaWM6CkBAIC05OCwyNiArOTksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBM
YXlvdXRVbml0IGJvcmRlckJlZm9yZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBi
b3JkZXJBZnRlcigpIGNvbnN0OwogCi0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmTGVmdChib29s
IG91dGVyKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZSaWdodChib29sIG91dGVy
KSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZUb3AoYm9vbCBvdXRlcikgY29uc3Q7
Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmQm90dG9tKGJvb2wgb3V0ZXIpIGNvbnN0OwotCi0g
ICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmU3RhcnQoYm9vbCBvdXRlcikgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBib3JkZXJIYWxmRW5kKGJvb2wgb3V0ZXIpIGNvbnN0OwotICAgIExheW91dFVuaXQg
Ym9yZGVySGFsZkJlZm9yZShib29sIG91dGVyKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRl
ckhhbGZBZnRlcihib29sIG91dGVyKSBjb25zdDsKLQotICAgIENvbGxhcHNlZEJvcmRlclZhbHVl
IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJv
cmRlckNvbG9yKSBjb25zdDsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRFbmRC
b3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0
OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRl
Qm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7Ci0gICAgQ29sbGFw
c2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JO
b3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwotCi0gICAgQ29sbGFwc2VkQm9yZGVyVmFs
dWUgY29sbGFwc2VkTGVmdEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVC
b3JkZXJDb2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkUmln
aHRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNv
bnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFRvcEJvcmRlcihJbmNsdWRl
Qm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7Ci0gICAgQ29sbGFw
c2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQm90dG9tQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9y
Tm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKLQogICAgIHZvaWQgY29sbGVjdEJvcmRl
clZhbHVlcyhSZW5kZXJUYWJsZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWVzJikgY29uc3Q7CiAgICAg
c3RhdGljIHZvaWQgc29ydEJvcmRlclZhbHVlcyhSZW5kZXJUYWJsZTo6Q29sbGFwc2VkQm9yZGVy
VmFsdWVzJik7CiAKQEAgLTE3NSw2ICsxNTYsMzEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIExh
eW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVj
dEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91
dFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCisgICAgTGF5b3V0VW5pdCBib3Jk
ZXJIYWxmTGVmdChib29sIG91dGVyKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZS
aWdodChib29sIG91dGVyKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZUb3AoYm9v
bCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmQm90dG9tKGJvb2wgb3V0
ZXIpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmU3RhcnQoYm9vbCBvdXRlcikg
Y29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmRW5kKGJvb2wgb3V0ZXIpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJlZm9yZShib29sIG91dGVyKSBjb25zdDsKKyAgICBM
YXlvdXRVbml0IGJvcmRlckhhbGZBZnRlcihib29sIG91dGVyKSBjb25zdDsKKworICAgIENvbGxh
cHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9y
Tm90ID0gSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90ID0gRG9O
b3RVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUg
Y29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRl
ckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90ID0gRG9Ob3RVc2VDYWNoZWRCb3JkZXJW
YWx1ZSkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQmVmb3JlQm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNo
ZWRCb3JkZXJWYWx1ZU9yTm90ID0gRG9Ob3RVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgY29uc3Q7Cisg
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRl
ckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlT3JO
b3QgPSBEb05vdFVzZUNhY2hlZEJvcmRlclZhbHVlKSBjb25zdDsKKworICAgIENvbGxhcHNlZEJv
cmRlclZhbHVlIGNvbGxhcHNlZExlZnRCb3JkZXIoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRSaWdodEJvcmRlcihSZW5kZXJTdHlsZSopIGNv
bnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFRvcEJvcmRlcihSZW5kZXJT
dHlsZSopIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEJvdHRvbUJv
cmRlcihSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29t
cHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVk
ZUJvcmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb21wdXRlQ29s
bGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNv
bG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb21wdXRlQ29sbGFwc2VkQmVm
b3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBj
b25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb21wdXRlQ29sbGFwc2VkQWZ0ZXJCb3Jk
ZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0Owor
CiAgICAgdW5zaWduZWQgbV9yb3cgOiAzMTsKICAgICBib29sIG1fY2VsbFdpZHRoQ2hhbmdlZCA6
IDE7CiAgICAgdW5zaWduZWQgbV9jb2x1bW4gOiAzMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggZmMxM2NmNzgxNWZlYmYwYzg1ZTNk
NjcwYzcyMjI1N2IxNDYyNjQyNy4uZDI0YjlmMTIyZGVlMWZkZjg5YTFiZmI3NGEwNWU3NmE1Y2Jh
YzNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAKQEAgLTEzNDAsNCArMTM0MCwyMiBAQCB1bnNpZ25lZCBSZW5kZXJUYWJsZVNlY3Rpb246
OnJvd0luZGV4Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cqIHJvdykgY29ucwogICAg
IHJldHVybiAwOwogfQogCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVtb3ZlQ2VsbENvbGxh
cHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQoreworICAgIGZvciAoaW50
IHNpZGUgPSBDQlNCZWZvcmU7IHNpZGUgPCBDQlNFbmQ7ICsrc2lkZSkKKyAgICAgICAgbV9jZWxs
c0NvbGxhcHNlZEJvcmRlcnMudGFrZShtYWtlX3BhaXIoY2VsbCwgc2lkZSkpOworfQorCit2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q29sbGFwc2VkQm9yZGVyKGNvbnN0IFJlbmRlclRhYmxl
Q2VsbCogY2VsbCwgQ29sbGFwc2VkQm9yZGVyU2lkZSBzaWRlLCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBib3JkZXIpCit7CisgICAgbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuc2V0KG1ha2VfcGFpcihj
ZWxsLCBzaWRlKSwgYm9yZGVyKTsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFsdWUmIFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCog
Y2VsbCwgQ29sbGFwc2VkQm9yZGVyU2lkZSBzaWRlKQoreworICAgIEhhc2hNYXA8cGFpcjxjb25z
dCBSZW5kZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZT46Oml0ZXJhdG9y
IGl0ID0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZmluZChtYWtlX3BhaXIoY2VsbCwgc2lkZSkp
OworICAgIEFTU0VSVChpdCAhPSBtX2NlbGxzQ29sbGFwc2VkQm9yZGVycy5lbmQoKSk7CisgICAg
cmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCA4NmYzNDM0Mzc3
MDZkYmYyNTBkYzA1MWIwNjBhNWJlMmZkOWZjMzFiLi41MDI4MzY2MjMyYjBkNjJlMDdkNDFmYzZl
ODkyMWJmNmQ5YWY4Y2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5oCkBAIC0zMCw2ICszMCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2VudW0gQ29sbGFwc2VkQm9yZGVyU2lkZSB7CisgICAgQ0JTQmVmb3JlLAorICAgIENCU0FmdGVy
LAorICAgIENCU1N0YXJ0LAorICAgIENCU0VuZAorfTsKKwogY2xhc3MgUmVuZGVyVGFibGVDZWxs
OwogY2xhc3MgUmVuZGVyVGFibGVSb3c7CiAKQEAgLTEzMCw2ICsxMzcsMTAgQEAgcHVibGljOgog
CiAgICAgdW5zaWduZWQgcm93SW5kZXhGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVJvdyop
IGNvbnN0OwogCisgICAgdm9pZCByZW1vdmVDZWxsQ29sbGFwc2VkQm9yZGVycyhjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqKTsKKyAgICB2b2lkIHNldENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJU
YWJsZUNlbGwqLCBDb2xsYXBzZWRCb3JkZXJTaWRlLCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSk7Cisg
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGNhY2hlZENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqLCBDb2xsYXBzZWRCb3JkZXJTaWRlKTsKKwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7CiAKQEAgLTE4Miw2ICsxOTMsMTAgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbDsKIAogICAgIGJvb2wgbV9o
YXNNdWx0aXBsZUNlbGxMZXZlbHM7CisKKyAgICAvLyBUaGlzIG1hcCBob2xkcyB0aGUgY29sbGFw
c2VkIGJvcmRlciB2YWx1ZXMgZm9yIGNlbGxzIHdpdGggY29sbGFwc2VkIGJvcmRlcnMuCisgICAg
Ly8gSXQgaXMgaGVsZCBhdCBSZW5kZXJUYWJsZVNlY3Rpb24gbGV2ZWwgdG8gc3BhcmUgbWVtb3J5
IGNvbnN1bXB0aW9uIGJ5IHRhYmxlIGNlbGxzLgorICAgIEhhc2hNYXA8cGFpcjxjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSA+IG1fY2VsbHNDb2xsYXBz
ZWRCb3JkZXJzOwogfTsKIAogaW5saW5lIFJlbmRlclRhYmxlU2VjdGlvbiogdG9SZW5kZXJUYWJs
ZVNlY3Rpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121551</attachid>
            <date>2012-01-07 07:22:41 -0800</date>
            <delta_ts>2012-01-07 07:32:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20120107152239.patch</filename>
            <type>text/plain</type>
            <size>18865</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjk3MDQwZjE3MjIyOGI1
MTg2YzI1YzZhNWQ3ZDdiMmNmNjI3YTAwNC4uNmMzOTRhNzM2Njc4YjBiMmJkYmQ0MTViYjIyOTcw
Yzk5NDU2ZTA5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDExLTEyLTMwICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSByZS1jYWxj
dWxhdGVkIGV2ZXJ5IHRpbWUgdGhleSBhcmUgcGFpbnRlZC4KKyAgICAgICAgVGhpcyBpcyB1bm5l
Y2Vzc2FyeSwgdGhleSBvbmx5IGNoYW5nZSB3aXRoIHRoZSBsYXlvdXQgb3Igc3R5bGUgc28gY2Fs
Y3VsYXRlIGFuZAorICAgICAgICBjYWNoZSB0aGVtIHdoZW5ldmVyIHRoZSBsYXlvdXQgb3Igc3R5
bGUgY2hhbmdlcyBhbmQgdXNlIHRoZSBjYWNoZWQgdmFsdWVzIHdoZW4KKyAgICAgICAgcGFpbnRp
bmcuIFRoZSBjYWNoZSBpcyBzdG9yZWQgaW4gdGhlIHRhYmxlIHNlY3Rpb24gc28gdGhhdCB0aGUg
bWVtb3J5IGZvb3RwcmludAorICAgICAgICBvZiBhIHRhYmxlIGlzIG9ubHkgaW5jcmVhc2VkIHdo
ZW4gaXQgaGFzIGNvbGxhcHNpbmcgYm9yZGVycy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNv
dmVyZWQgYnkgZXhpc3RpbmcgY29sbGFwc2VkIGJvcmRlciB0ZXN0cy4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjp3aWxsQmVEZXN0cm95ZWQpOiByZW1vdmUgZW50cmllcyBmcm9tIGNvbGxhcHNlZCBi
b3JkZXIgY2FjaGUKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
U3RhcnRCb3JkZXIpOgorICAgICAgICAgUmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUgaWYgcmVxdWVz
dGVkIGJ5IHRoZSBjYWxsZXIsIG90aGVyd2lzZSBjb21wdXRlLCBhbmQgYWxzbworICAgICAgICAg
Y2FjaGUgaWYgdGhlIGZ1bGwgYm9yZGVyIGluY2x1ZGluZyBjb2xvciB3YXMgY29tcHV0ZWQuIENv
bXB1dGUgYW5kIGNhY2hlIGlzIHRoZQorICAgICAgICAgZGVmYXVsdC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEVuZEJv
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJlZm9y
ZUJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1
dGVDb2xsYXBzZWRCZWZvcmVCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpjb2xsYXBzZWRBZnRlckJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRBZnRlckJvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZExlZnRCb3JkZXIpOgorICAgICAgICAgSW5s
aW5lIHRoZSBmdW5jdGlvbiBzaW5jZSBpdCBpcyBvbmx5IGNhbGxlZCBpbiBwYWludENvbGxhcHNl
ZEJvcmRlcnMgYW5kIHJlbW92ZQorICAgICAgICAgaW5jbHVkZUNvbG9yIGFzIGEgcGFyYW1ldGVy
LiBNb3ZlIHRoZSBjYWxsIHRvIHRoZSB0YWJsZSdzIHN0eWxlIHRvIHRoZSBjYWxsZXIgcmF0aGVy
CisgICAgICAgICB0aGFuIGNhbGwgaXQgNCB0aW1lcyBpbiBhIHJvdy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkUmlnaHRCb3JkZXIpOiBkaXR0bworICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRUb3BCb3JkZXIpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCb3R0b21Cb3JkZXIp
OiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludENvbGxhcHNl
ZEJvcmRlcnMpOgorICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgdXNlcyB0aGUgY29sbGFw
c2VkIGJvcmRlciBjYWNoZSBub3cuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oOgorICAgICAgICAgTWFrZSB0aGUgY29sbGFwc2VkIGJvcmRlciBmdW5jdGlvbnMgcHJpdmF0
ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVtb3ZlQ2VsbENvbGxhcHNlZEJvcmRlcnMp
OiBUaGUgY2FjaGUgaXMgZGVsZXRlZCBieSB0aGUgSGFzaE1hcAorICAgICAgICAgc2luY2UgaXQg
aXMgdGhlIG9ubHkgb3duZXIgb2YgdGhlIGNhY2hlZCBpdGVtLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAg
VGhpcyB3aWxsIGFzc2VydCBpZiB0aGVyZSBpcyBubyBjYWNoZWQgY29sbGFwc2VkIGJvcmRlciBm
b3IgdGhlIHNpZGUgb2YgdGhlIAorICAgICAgICAgY2VsbCByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxl
ci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICBI
YXNoTWFwIHdvdWxkbid0IGxldCBtZSB1c2UgQ29sbGFwc2VkQm9yZGVyU2lkZSBpbiB0aGUga2V5
IHZhbHVlIGZvciB0aGUgY2FjaGUKKyAgICAgICAgIHNvIHVzZSBpbnQgaW5zdGVhZC4KKwogMjAx
MS0xMi0yMiAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgSGVh
cC11c2UtYWZ0ZXItZnJlZSBpbiBXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCBmNDNl
NWMxYTAyZTk4ZjljNmE0OTQ1NGM5M2ExNzhmYWFiNDlhZTk0Li4zYjEzZDk4NzRlNTMyZDMzODYz
YzhkZmVjYTBjNWE2ODk5ODgzYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmNwcApAQCAtNTgsOCArNTgsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OndpbGxCZURlc3Ryb3llZCgpCiAKICAgICBSZW5kZXJCbG9jazo6d2lsbEJlRGVzdHJveWVkKCk7
CiAKLSAgICBpZiAocmVjYWxjU2VjdGlvbikKKyAgICBpZiAocmVjYWxjU2VjdGlvbikgewogICAg
ICAgICByZWNhbGNTZWN0aW9uLT5zZXROZWVkc0NlbGxSZWNhbGMoKTsKKyAgICAgICAgcmVjYWxj
U2VjdGlvbi0+cmVtb3ZlQ2VsbENvbGxhcHNlZEJvcmRlcnModGhpcyk7CisgICAgfQogfQogCiB1
bnNpZ25lZCBSZW5kZXJUYWJsZUNlbGw6OmNvbFNwYW4oKSBjb25zdApAQCAtMzkwLDcgKzM5Miwx
NyBAQCBzdGF0aWMgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY2hvb3NlQm9yZGVyKGNvbnN0IENvbGxh
cHNlZEJvcmRlclZhbHVlJiBib3JkZXIxLCBjbwogICAgIHJldHVybiBib3JkZXIuc3R5bGUoKSA9
PSBCSElEREVOID8gQ29sbGFwc2VkQm9yZGVyVmFsdWUoKSA6IGJvcmRlcjsKIH0KIAotQ29sbGFw
c2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNs
dWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CitDb2xsYXBzZWRCb3JkZXJW
YWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJD
b2xvck9yTm90IGluY2x1ZGVDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB1c2VDYWNo
ZSkgY29uc3QKK3sKKyAgICBpZiAodXNlQ2FjaGUpCisgICAgICAgcmV0dXJuIHNlY3Rpb24oKS0+
Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU1N0YXJ0KTsKKyAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRlQ29sbGFwc2VkU3RhcnRCb3JkZXIoaW5jbHVkZUNvbG9y
KTsKKyAgICBpZiAoaW5jbHVkZUNvbG9yKQorICAgICAgICBzZWN0aW9uKCktPnNldENvbGxhcHNl
ZEJvcmRlcih0aGlzLCBDQlNTdGFydCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRT
dGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CiB7
CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdGhpcy0+dGFibGUoKTsKICAgICBib29sIGlzU3Rh
cnRDb2x1bW4gPSBjb2woKSA9PSAwOwpAQCAtNDUzLDcgKzQ2NSwxNyBAQCBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3Jk
ZXJDb2xvck9yTgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVl
IFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9y
Tm90IGluY2x1ZGVDb2xvcikgY29uc3QKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxl
Q2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVD
b2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB1c2VDYWNoZSkgY29uc3QKK3sKKyAgICBp
ZiAodXNlQ2FjaGUpCisgICAgICAgcmV0dXJuIHNlY3Rpb24oKS0+Y2FjaGVkQ29sbGFwc2VkQm9y
ZGVyKHRoaXMsIENCU0VuZCk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29t
cHV0ZUNvbGxhcHNlZEVuZEJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgIGlmIChpbmNsdWRlQ29s
b3IpCisgICAgICAgIHNlY3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0VuZCwg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBS
ZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNv
bG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAogewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9
IHRoaXMtPnRhYmxlKCk7CiAgICAgYm9vbCBpc0VuZENvbHVtbiA9IHRhYmxlLT5jb2xUb0VmZkNv
bChjb2woKSArIGNvbFNwYW4oKSAtIDEpID09IHRhYmxlLT5udW1FZmZDb2xzKCkgLSAxOwpAQCAt
NTE5LDcgKzU0MSwxNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNv
bGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
QmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QK
K0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQmVmb3JlQm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvciwgVXNlQ2FjaGVkQm9yZGVy
VmFsdWVPck5vdCB1c2VDYWNoZSkgY29uc3QKK3sKKyAgICBpZiAodXNlQ2FjaGUpCisgICAgICAg
cmV0dXJuIHNlY3Rpb24oKS0+Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0JlZm9yZSk7
CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29tcHV0ZUNvbGxhcHNlZEJlZm9y
ZUJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgIGlmIChpbmNsdWRlQ29sb3IpCisgICAgICAgIHNl
Y3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0JlZm9yZSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbXB1dGVDb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3Qg
aW5jbHVkZUNvbG9yKSBjb25zdAogewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRh
YmxlKCk7CiAKQEAgLTU5Nyw3ICs2MjksMTcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVy
VGFibGVDZWxsOjpjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3IKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVD
b2xvcikgY29uc3QKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFw
c2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yLCBVc2VD
YWNoZWRCb3JkZXJWYWx1ZU9yTm90IHVzZUNhY2hlKSBjb25zdAoreworICAgIGlmICh1c2VDYWNo
ZSkKKyAgICAgICByZXR1cm4gc2VjdGlvbigpLT5jYWNoZWRDb2xsYXBzZWRCb3JkZXIodGhpcywg
Q0JTQWZ0ZXIpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJlc3VsdCA9IGNvbXB1dGVDb2xs
YXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgIGlmIChpbmNsdWRlQ29sb3IpCisg
ICAgICAgIHNlY3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0FmdGVyLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xv
ck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKIHsKICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0
aGlzLT50YWJsZSgpOwogCkBAIC02NjYsMzYgKzcwOCwzMiBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xv
ck9yTgogICAgIHJldHVybiByZXN1bHQ7ICAgIAogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBS
ZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZExlZnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JO
b3QgaW5jbHVkZUNvbG9yKSBjb25zdAoraW5saW5lIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y29sbGFwc2VkTGVmdEJvcmRlcihSZW5kZXJTdHlsZSogdGFibGVTdHlsZSkg
Y29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7
CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAg
IHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRT
dGFydEJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xv
cik7Ci0gICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkg
PyBjb2xsYXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkQmVmb3JlQm9y
ZGVyKGluY2x1ZGVDb2xvcik7CisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3Is
IFVzZUNhY2hlZEJvcmRlclZhbHVlKSA6IGNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVy
Q29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKTsKKyAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNG
bGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpIDogY29sbGFwc2VkQmVmb3JlQm9yZGVy
KEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpOwogfQogCi1Db2xsYXBz
ZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFJpZ2h0Qm9yZGVyKEluY2x1
ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK2lubGluZSBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFJpZ2h0Qm9yZGVyKFJlbmRlclN0
eWxlKiB0YWJsZVN0eWxlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiB0YWJsZVN0eWxlID0g
dGFibGUoKS0+c3R5bGUoKTsKICAgICBpZiAodGFibGVTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IGNvbGxhcHNlZEVuZEJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkU3RhcnRC
b3JkZXIoaW5jbHVkZUNvbG9yKTsKLSAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihpbmNsdWRlQ29sb3IpIDog
Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHRhYmxl
U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZEVuZEJvcmRlcihJbmNs
dWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKSA6IGNvbGxhcHNlZFN0YXJ0Qm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpOworICAgIHJldHVy
biB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQmVm
b3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpIDogY29s
bGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1
ZSk7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
VG9wQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK2lu
bGluZSBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFRvcEJv
cmRlcihSZW5kZXJTdHlsZSogdGFibGVTdHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSog
dGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9y
KSA6IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihpbmNsdWRlQ29sb3IpOwotICAgIHJldHVybiB0YWJs
ZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRTdGFydEJvcmRlcihp
bmNsdWRlQ29sb3IpIDogY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xvcik7CisgICAgICAg
IHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFw
c2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSkg
OiBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3Jk
ZXJWYWx1ZSk7CisgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9y
ZGVyVmFsdWUpIDogY29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2Fj
aGVkQm9yZGVyVmFsdWUpOwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbGxhcHNlZEJvdHRvbUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRl
Q29sb3IpIGNvbnN0CitpbmxpbmUgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxs
Ojpjb2xsYXBzZWRCb3R0b21Cb3JkZXIoUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUpIGNvbnN0CiB7
Ci0gICAgUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUgPSB0YWJsZSgpLT5zdHlsZSgpOwogICAgIGlm
ICh0YWJsZVN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4g
dGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEJlZm9y
ZUJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9y
KTsKLSAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29s
bGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xvcikgOiBjb2xsYXBzZWRTdGFydEJvcmRlcihpbmNs
dWRlQ29sb3IpOworICAgICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSA/IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3IsIFVz
ZUNhY2hlZEJvcmRlclZhbHVlKSA6IGNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJD
b2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNv
bG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgOiBjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRl
Qm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5k
ZXJUYWJsZUNlbGw6OmJvcmRlckxlZnQoKSBjb25zdApAQCAtOTIzLDEwICs5NjEsMTEgQEAgdm9p
ZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVycyhQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG8KIAogICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gTGF5b3V0
UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkpOwogCi0gICAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUgbGVmdFZhbCA9IGNvbGxhcHNlZExlZnRCb3JkZXIoKTsKLSAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSByaWdodFZhbCA9IGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKCk7Ci0gICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgdG9wVmFsID0gY29sbGFwc2VkVG9wQm9yZGVyKCk7Ci0gICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgYm90dG9tVmFsID0gY29sbGFwc2VkQm90dG9tQm9yZGVyKCk7CisgICAgUmVu
ZGVyU3R5bGUqIHRhYmxlU3R5bGUgPSB0YWJsZSgpLT5zdHlsZSgpOworICAgIENvbGxhcHNlZEJv
cmRlclZhbHVlIGxlZnRWYWwgPSBjb2xsYXBzZWRMZWZ0Qm9yZGVyKHRhYmxlU3R5bGUpOworICAg
IENvbGxhcHNlZEJvcmRlclZhbHVlIHJpZ2h0VmFsID0gY29sbGFwc2VkUmlnaHRCb3JkZXIodGFi
bGVTdHlsZSk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgdG9wVmFsID0gY29sbGFwc2VkVG9w
Qm9yZGVyKHRhYmxlU3R5bGUpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvdHRvbVZhbCA9
IGNvbGxhcHNlZEJvdHRvbUJvcmRlcih0YWJsZVN0eWxlKTsKICAgICAgCiAgICAgLy8gQWRqdXN0
IG91ciB4L3kvd2lkdGgvaGVpZ2h0IHNvIHRoYXQgd2UgcGFpbnQgdGhlIGNvbGxhcHNlZCBib3Jk
ZXJzIGF0IHRoZSBjb3JyZWN0IGxvY2F0aW9uLgogICAgIExheW91dFVuaXQgdG9wV2lkdGggPSB0
b3BWYWwud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
aAppbmRleCAzNTFlYTUwNDZiOTg2YTgxYzE0MGJiMDYzY2NmMGQ4NGE4ZjlhNTkwLi41MTU5ODNj
YmY3ZTAzOTc1N2FmMDg1NmEwMjZmMDEzZGNjNDE0OTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBAIC0zNiw2ICszNiw3IEBAIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCB1bnNldFJvd0luZGV4ID0gMHg3RkZGRkZGRjsKIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhSb3dJbmRleCA9IDB4N0ZGRkZGRkU7IC8vIDIsMTQ3LDQ4Myw2NDYKIAogZW51bSBJbmNs
dWRlQm9yZGVyQ29sb3JPck5vdCB7IERvTm90SW5jbHVkZUJvcmRlckNvbG9yLCBJbmNsdWRlQm9y
ZGVyQ29sb3IgfTsKK2VudW0gVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB7IERvTm90VXNlQ2Fj
aGVkQm9yZGVyVmFsdWUsIFVzZUNhY2hlZEJvcmRlclZhbHVlIH07CiAKIGNsYXNzIFJlbmRlclRh
YmxlQ2VsbCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CkBAIC05OCwyNiArOTksNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGJvcmRlckJlZm9yZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBib3JkZXJBZnRlcigpIGNvbnN0OwogCi0gICAgTGF5b3V0
VW5pdCBib3JkZXJIYWxmTGVmdChib29sIG91dGVyKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJv
cmRlckhhbGZSaWdodChib29sIG91dGVyKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckhh
bGZUb3AoYm9vbCBvdXRlcikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmQm90dG9t
KGJvb2wgb3V0ZXIpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmU3RhcnQoYm9v
bCBvdXRlcikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmRW5kKGJvb2wgb3V0ZXIp
IGNvbnN0OwotICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJlZm9yZShib29sIG91dGVyKSBjb25z
dDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZBZnRlcihib29sIG91dGVyKSBjb25zdDsKLQot
ICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3Jk
ZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKLSAgICBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSBjb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJ
bmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxh
cHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJD
b2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQWZ0ZXJCb3Jk
ZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0Owot
Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkTGVmdEJvcmRlcihJbmNsdWRlQm9y
ZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgY29sbGFwc2VkUmlnaHRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3Qg
PSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNv
bGxhcHNlZFRvcEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJD
b2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQm90dG9tQm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsK
LQogICAgIHZvaWQgY29sbGVjdEJvcmRlclZhbHVlcyhSZW5kZXJUYWJsZTo6Q29sbGFwc2VkQm9y
ZGVyVmFsdWVzJikgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgc29ydEJvcmRlclZhbHVlcyhSZW5k
ZXJUYWJsZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWVzJik7CiAKQEAgLTE3NSw2ICsxNTYsMzEgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0
OwogCisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmTGVmdChib29sIG91dGVyKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGJvcmRlckhhbGZSaWdodChib29sIG91dGVyKSBjb25zdDsKKyAgICBMYXlv
dXRVbml0IGJvcmRlckhhbGZUb3AoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBi
b3JkZXJIYWxmQm90dG9tKGJvb2wgb3V0ZXIpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBib3Jk
ZXJIYWxmU3RhcnQoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxm
RW5kKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJlZm9yZShi
b29sIG91dGVyKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZBZnRlcihib29sIG91
dGVyKSBjb25zdDsKKworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFN0YXJ0Qm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNo
ZWRCb3JkZXJWYWx1ZU9yTm90ID0gRG9Ob3RVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgY29uc3Q7Cisg
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJD
b2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90
ID0gRG9Ob3RVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUgY29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5j
bHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90ID0gRG9Ob3RVc2VDYWNo
ZWRCb3JkZXJWYWx1ZSkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2Vk
QWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3Is
IFVzZUNhY2hlZEJvcmRlclZhbHVlT3JOb3QgPSBEb05vdFVzZUNhY2hlZEJvcmRlclZhbHVlKSBj
b25zdDsKKworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZExlZnRCb3JkZXIoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRSaWdo
dEJvcmRlcihSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNv
bGxhcHNlZFRvcEJvcmRlcihSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRl
clZhbHVlIGNvbGxhcHNlZEJvdHRvbUJvcmRlcihSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAg
Q29sbGFwc2VkQm9yZGVyVmFsdWUgY29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSBjb21wdXRlQ29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xv
ck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJW
YWx1ZSBjb21wdXRlQ29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90
ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBj
b21wdXRlQ29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNs
dWRlQm9yZGVyQ29sb3IpIGNvbnN0OworCiAgICAgdW5zaWduZWQgbV9yb3cgOiAzMTsKICAgICBi
b29sIG1fY2VsbFdpZHRoQ2hhbmdlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2x1bW4gOiAzMTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5k
ZXggZmMxM2NmNzgxNWZlYmYwYzg1ZTNkNjcwYzcyMjI1N2IxNDYyNjQyNy4uZDI0YjlmMTIyZGVl
MWZkZjg5YTFiZmI3NGEwNWU3NmE1Y2JhYzNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTEzNDAsNCArMTM0MCwyMiBAQCB1bnNp
Z25lZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJvd0luZGV4Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVy
VGFibGVSb3cqIHJvdykgY29ucwogICAgIHJldHVybiAwOwogfQogCit2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6cmVtb3ZlQ2VsbENvbGxhcHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxs
KiBjZWxsKQoreworICAgIGZvciAoaW50IHNpZGUgPSBDQlNCZWZvcmU7IHNpZGUgPCBDQlNFbmQ7
ICsrc2lkZSkKKyAgICAgICAgbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMudGFrZShtYWtlX3BhaXIo
Y2VsbCwgc2lkZSkpOworfQorCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q29sbGFwc2Vk
Qm9yZGVyKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgQ29sbGFwc2VkQm9yZGVyU2lkZSBz
aWRlLCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBib3JkZXIpCit7CisgICAgbV9jZWxsc0NvbGxhcHNl
ZEJvcmRlcnMuc2V0KG1ha2VfcGFpcihjZWxsLCBzaWRlKSwgYm9yZGVyKTsKK30KKworQ29sbGFw
c2VkQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2VkQm9yZGVy
KGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgQ29sbGFwc2VkQm9yZGVyU2lkZSBzaWRlKQor
eworICAgIEhhc2hNYXA8cGFpcjxjb25zdCBSZW5kZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZT46Oml0ZXJhdG9yIGl0ID0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZmlu
ZChtYWtlX3BhaXIoY2VsbCwgc2lkZSkpOworICAgIEFTU0VSVChpdCAhPSBtX2NlbGxzQ29sbGFw
c2VkQm9yZGVycy5lbmQoKSk7CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uaAppbmRleCA4NmYzNDM0Mzc3MDZkYmYyNTBkYzA1MWIwNjBhNWJlMmZkOWZjMzFiLi41
MDI4MzY2MjMyYjBkNjJlMDdkNDFmYzZlODkyMWJmNmQ5YWY4Y2EyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0zMCw2ICszMCwxMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2VudW0gQ29sbGFwc2VkQm9yZGVyU2lkZSB7CisgICAg
Q0JTQmVmb3JlLAorICAgIENCU0FmdGVyLAorICAgIENCU1N0YXJ0LAorICAgIENCU0VuZAorfTsK
KwogY2xhc3MgUmVuZGVyVGFibGVDZWxsOwogY2xhc3MgUmVuZGVyVGFibGVSb3c7CiAKQEAgLTEz
MCw2ICsxMzcsMTAgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgcm93SW5kZXhGb3JSZW5kZXJl
cihjb25zdCBSZW5kZXJUYWJsZVJvdyopIGNvbnN0OwogCisgICAgdm9pZCByZW1vdmVDZWxsQ29s
bGFwc2VkQm9yZGVycyhjb25zdCBSZW5kZXJUYWJsZUNlbGwqKTsKKyAgICB2b2lkIHNldENvbGxh
cHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsZUNlbGwqLCBDb2xsYXBzZWRCb3JkZXJTaWRlLCBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGNhY2hlZENv
bGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsZUNlbGwqLCBDb2xsYXBzZWRCb3JkZXJTaWRl
KTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKQEAgLTE4Miw2ICsxOTMs
MTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93
aW5nQ2VsbDsKIAogICAgIGJvb2wgbV9oYXNNdWx0aXBsZUNlbGxMZXZlbHM7CisKKyAgICAvLyBU
aGlzIG1hcCBob2xkcyB0aGUgY29sbGFwc2VkIGJvcmRlciB2YWx1ZXMgZm9yIGNlbGxzIHdpdGgg
Y29sbGFwc2VkIGJvcmRlcnMuCisgICAgLy8gSXQgaXMgaGVsZCBhdCBSZW5kZXJUYWJsZVNlY3Rp
b24gbGV2ZWwgdG8gc3BhcmUgbWVtb3J5IGNvbnN1bXB0aW9uIGJ5IHRhYmxlIGNlbGxzLgorICAg
IEhhc2hNYXA8cGFpcjxjb25zdCBSZW5kZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSA+IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzOwogfTsKIAogaW5saW5lIFJlbmRlclRh
YmxlU2VjdGlvbiogdG9SZW5kZXJUYWJsZVNlY3Rpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121552</attachid>
            <date>2012-01-07 07:32:42 -0800</date>
            <delta_ts>2012-01-11 11:12:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20120107153239.patch</filename>
            <type>text/plain</type>
            <size>18866</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjk3MDQwZjE3MjIyOGI1
MTg2YzI1YzZhNWQ3ZDdiMmNmNjI3YTAwNC4uNmMzOTRhNzM2Njc4YjBiMmJkYmQ0MTViYjIyOTcw
Yzk5NDU2ZTA5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDExLTEyLTMwICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSByZS1jYWxj
dWxhdGVkIGV2ZXJ5IHRpbWUgdGhleSBhcmUgcGFpbnRlZC4KKyAgICAgICAgVGhpcyBpcyB1bm5l
Y2Vzc2FyeSwgdGhleSBvbmx5IGNoYW5nZSB3aXRoIHRoZSBsYXlvdXQgb3Igc3R5bGUgc28gY2Fs
Y3VsYXRlIGFuZAorICAgICAgICBjYWNoZSB0aGVtIHdoZW5ldmVyIHRoZSBsYXlvdXQgb3Igc3R5
bGUgY2hhbmdlcyBhbmQgdXNlIHRoZSBjYWNoZWQgdmFsdWVzIHdoZW4KKyAgICAgICAgcGFpbnRp
bmcuIFRoZSBjYWNoZSBpcyBzdG9yZWQgaW4gdGhlIHRhYmxlIHNlY3Rpb24gc28gdGhhdCB0aGUg
bWVtb3J5IGZvb3RwcmludAorICAgICAgICBvZiBhIHRhYmxlIGlzIG9ubHkgaW5jcmVhc2VkIHdo
ZW4gaXQgaGFzIGNvbGxhcHNpbmcgYm9yZGVycy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNv
dmVyZWQgYnkgZXhpc3RpbmcgY29sbGFwc2VkIGJvcmRlciB0ZXN0cy4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjp3aWxsQmVEZXN0cm95ZWQpOiByZW1vdmUgZW50cmllcyBmcm9tIGNvbGxhcHNlZCBi
b3JkZXIgY2FjaGUKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
U3RhcnRCb3JkZXIpOgorICAgICAgICAgUmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUgaWYgcmVxdWVz
dGVkIGJ5IHRoZSBjYWxsZXIsIG90aGVyd2lzZSBjb21wdXRlLCBhbmQgYWxzbworICAgICAgICAg
Y2FjaGUgaWYgdGhlIGZ1bGwgYm9yZGVyIGluY2x1ZGluZyBjb2xvciB3YXMgY29tcHV0ZWQuIENv
bXB1dGUgYW5kIGNhY2hlIGlzIHRoZQorICAgICAgICAgZGVmYXVsdC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEVuZEJv
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJlZm9y
ZUJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1
dGVDb2xsYXBzZWRCZWZvcmVCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpjb2xsYXBzZWRBZnRlckJvcmRlcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRBZnRlckJvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZExlZnRCb3JkZXIpOgorICAgICAgICAgSW5s
aW5lIHRoZSBmdW5jdGlvbiBzaW5jZSBpdCBpcyBvbmx5IGNhbGxlZCBpbiBwYWludENvbGxhcHNl
ZEJvcmRlcnMgYW5kIHJlbW92ZQorICAgICAgICAgaW5jbHVkZUNvbG9yIGFzIGEgcGFyYW1ldGVy
LiBNb3ZlIHRoZSBjYWxsIHRvIHRoZSB0YWJsZSdzIHN0eWxlIHRvIHRoZSBjYWxsZXIgcmF0aGVy
CisgICAgICAgICB0aGFuIGNhbGwgaXQgNCB0aW1lcyBpbiBhIHJvdy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkUmlnaHRCb3JkZXIpOiBkaXR0bworICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRUb3BCb3JkZXIpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCb3R0b21Cb3JkZXIp
OiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludENvbGxhcHNl
ZEJvcmRlcnMpOgorICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgdXNlcyB0aGUgY29sbGFw
c2VkIGJvcmRlciBjYWNoZSBub3cuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oOgorICAgICAgICAgTWFrZSB0aGUgY29sbGFwc2VkIGJvcmRlciBmdW5jdGlvbnMgcHJpdmF0
ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVtb3ZlQ2VsbENvbGxhcHNlZEJvcmRlcnMp
OiBUaGUgY2FjaGUgaXMgZGVsZXRlZCBieSB0aGUgSGFzaE1hcAorICAgICAgICAgc2luY2UgaXQg
aXMgdGhlIG9ubHkgb3duZXIgb2YgdGhlIGNhY2hlZCBpdGVtLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWNoZWRDb2xsYXBzZWRCb3JkZXIpOgorICAgICAgICAg
VGhpcyB3aWxsIGFzc2VydCBpZiB0aGVyZSBpcyBubyBjYWNoZWQgY29sbGFwc2VkIGJvcmRlciBm
b3IgdGhlIHNpZGUgb2YgdGhlIAorICAgICAgICAgY2VsbCByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxl
ci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICBI
YXNoTWFwIHdvdWxkbid0IGxldCBtZSB1c2UgQ29sbGFwc2VkQm9yZGVyU2lkZSBpbiB0aGUga2V5
IHZhbHVlIGZvciB0aGUgY2FjaGUKKyAgICAgICAgIHNvIHVzZSBpbnQgaW5zdGVhZC4KKwogMjAx
MS0xMi0yMiAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgSGVh
cC11c2UtYWZ0ZXItZnJlZSBpbiBXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCBmNDNl
NWMxYTAyZTk4ZjljNmE0OTQ1NGM5M2ExNzhmYWFiNDlhZTk0Li4zYjEzZDk4NzRlNTMyZDMzODYz
YzhkZmVjYTBjNWE2ODk5ODgzYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmNwcApAQCAtNTgsOCArNTgsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OndpbGxCZURlc3Ryb3llZCgpCiAKICAgICBSZW5kZXJCbG9jazo6d2lsbEJlRGVzdHJveWVkKCk7
CiAKLSAgICBpZiAocmVjYWxjU2VjdGlvbikKKyAgICBpZiAocmVjYWxjU2VjdGlvbikgewogICAg
ICAgICByZWNhbGNTZWN0aW9uLT5zZXROZWVkc0NlbGxSZWNhbGMoKTsKKyAgICAgICAgcmVjYWxj
U2VjdGlvbi0+cmVtb3ZlQ2VsbENvbGxhcHNlZEJvcmRlcnModGhpcyk7CisgICAgfQogfQogCiB1
bnNpZ25lZCBSZW5kZXJUYWJsZUNlbGw6OmNvbFNwYW4oKSBjb25zdApAQCAtMzkwLDcgKzM5Miwx
NyBAQCBzdGF0aWMgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY2hvb3NlQm9yZGVyKGNvbnN0IENvbGxh
cHNlZEJvcmRlclZhbHVlJiBib3JkZXIxLCBjbwogICAgIHJldHVybiBib3JkZXIuc3R5bGUoKSA9
PSBCSElEREVOID8gQ29sbGFwc2VkQm9yZGVyVmFsdWUoKSA6IGJvcmRlcjsKIH0KIAotQ29sbGFw
c2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNs
dWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CitDb2xsYXBzZWRCb3JkZXJW
YWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJD
b2xvck9yTm90IGluY2x1ZGVDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB1c2VDYWNo
ZSkgY29uc3QKK3sKKyAgICBpZiAodXNlQ2FjaGUpCisgICAgICAgcmV0dXJuIHNlY3Rpb24oKS0+
Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU1N0YXJ0KTsKKyAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRlQ29sbGFwc2VkU3RhcnRCb3JkZXIoaW5jbHVkZUNvbG9y
KTsKKyAgICBpZiAoaW5jbHVkZUNvbG9yKQorICAgICAgICBzZWN0aW9uKCktPnNldENvbGxhcHNl
ZEJvcmRlcih0aGlzLCBDQlNTdGFydCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRT
dGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CiB7
CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdGhpcy0+dGFibGUoKTsKICAgICBib29sIGlzU3Rh
cnRDb2x1bW4gPSBjb2woKSA9PSAwOwpAQCAtNDUzLDcgKzQ2NSwxNyBAQCBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3Jk
ZXJDb2xvck9yTgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVl
IFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9y
Tm90IGluY2x1ZGVDb2xvcikgY29uc3QKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxl
Q2VsbDo6Y29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVD
b2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB1c2VDYWNoZSkgY29uc3QKK3sKKyAgICBp
ZiAodXNlQ2FjaGUpCisgICAgICAgcmV0dXJuIHNlY3Rpb24oKS0+Y2FjaGVkQ29sbGFwc2VkQm9y
ZGVyKHRoaXMsIENCU0VuZCk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29t
cHV0ZUNvbGxhcHNlZEVuZEJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgIGlmIChpbmNsdWRlQ29s
b3IpCisgICAgICAgIHNlY3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0VuZCwg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBS
ZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNv
bG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAogewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9
IHRoaXMtPnRhYmxlKCk7CiAgICAgYm9vbCBpc0VuZENvbHVtbiA9IHRhYmxlLT5jb2xUb0VmZkNv
bChjb2woKSArIGNvbFNwYW4oKSAtIDEpID09IHRhYmxlLT5udW1FZmZDb2xzKCkgLSAxOwpAQCAt
NTE5LDcgKzU0MSwxNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNv
bGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
QmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QK
K0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQmVmb3JlQm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvciwgVXNlQ2FjaGVkQm9yZGVy
VmFsdWVPck5vdCB1c2VDYWNoZSkgY29uc3QKK3sKKyAgICBpZiAodXNlQ2FjaGUpCisgICAgICAg
cmV0dXJuIHNlY3Rpb24oKS0+Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0JlZm9yZSk7
CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29tcHV0ZUNvbGxhcHNlZEJlZm9y
ZUJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgIGlmIChpbmNsdWRlQ29sb3IpCisgICAgICAgIHNl
Y3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0JlZm9yZSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbXB1dGVDb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3Qg
aW5jbHVkZUNvbG9yKSBjb25zdAogewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRh
YmxlKCk7CiAKQEAgLTU5Nyw3ICs2MjksMTcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVy
VGFibGVDZWxsOjpjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3IKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVD
b2xvcikgY29uc3QKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFw
c2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yLCBVc2VD
YWNoZWRCb3JkZXJWYWx1ZU9yTm90IHVzZUNhY2hlKSBjb25zdAoreworICAgIGlmICh1c2VDYWNo
ZSkKKyAgICAgICByZXR1cm4gc2VjdGlvbigpLT5jYWNoZWRDb2xsYXBzZWRCb3JkZXIodGhpcywg
Q0JTQWZ0ZXIpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJlc3VsdCA9IGNvbXB1dGVDb2xs
YXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgIGlmIChpbmNsdWRlQ29sb3IpCisg
ICAgICAgIHNlY3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0FmdGVyLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xv
ck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKIHsKICAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0
aGlzLT50YWJsZSgpOwogCkBAIC02NjYsMzYgKzcwOCwzMiBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xv
ck9yTgogICAgIHJldHVybiByZXN1bHQ7ICAgIAogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBS
ZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZExlZnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JO
b3QgaW5jbHVkZUNvbG9yKSBjb25zdAoraW5saW5lIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y29sbGFwc2VkTGVmdEJvcmRlcihSZW5kZXJTdHlsZSogdGFibGVTdHlsZSkg
Y29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7
CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAg
IHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRT
dGFydEJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xv
cik7Ci0gICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkg
PyBjb2xsYXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkQmVmb3JlQm9y
ZGVyKGluY2x1ZGVDb2xvcik7CisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3Is
IFVzZUNhY2hlZEJvcmRlclZhbHVlKSA6IGNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVy
Q29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKTsKKyAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNG
bGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpIDogY29sbGFwc2VkQmVmb3JlQm9yZGVy
KEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpOwogfQogCi1Db2xsYXBz
ZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFJpZ2h0Qm9yZGVyKEluY2x1
ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK2lubGluZSBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFJpZ2h0Qm9yZGVyKFJlbmRlclN0
eWxlKiB0YWJsZVN0eWxlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiB0YWJsZVN0eWxlID0g
dGFibGUoKS0+c3R5bGUoKTsKICAgICBpZiAodGFibGVTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IGNvbGxhcHNlZEVuZEJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkU3RhcnRC
b3JkZXIoaW5jbHVkZUNvbG9yKTsKLSAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihpbmNsdWRlQ29sb3IpIDog
Y29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHRhYmxl
U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZEVuZEJvcmRlcihJbmNs
dWRlQm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKSA6IGNvbGxhcHNlZFN0YXJ0Qm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpOworICAgIHJldHVy
biB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQmVm
b3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpIDogY29s
bGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1
ZSk7CiB9CiAKLUNvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2Vk
VG9wQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKK2lu
bGluZSBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFRvcEJv
cmRlcihSZW5kZXJTdHlsZSogdGFibGVTdHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSog
dGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9y
KSA6IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihpbmNsdWRlQ29sb3IpOwotICAgIHJldHVybiB0YWJs
ZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRTdGFydEJvcmRlcihp
bmNsdWRlQ29sb3IpIDogY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xvcik7CisgICAgICAg
IHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gY29sbGFw
c2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSkg
OiBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3Jk
ZXJWYWx1ZSk7CisgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2FjaGVkQm9y
ZGVyVmFsdWUpIDogY29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvciwgVXNlQ2Fj
aGVkQm9yZGVyVmFsdWUpOwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbGxhcHNlZEJvdHRvbUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRl
Q29sb3IpIGNvbnN0CitpbmxpbmUgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxs
Ojpjb2xsYXBzZWRCb3R0b21Cb3JkZXIoUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUpIGNvbnN0CiB7
Ci0gICAgUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUgPSB0YWJsZSgpLT5zdHlsZSgpOwogICAgIGlm
ICh0YWJsZVN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4g
dGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEJlZm9y
ZUJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9y
KTsKLSAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29s
bGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xvcikgOiBjb2xsYXBzZWRTdGFydEJvcmRlcihpbmNs
dWRlQ29sb3IpOworICAgICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSA/IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3IsIFVz
ZUNhY2hlZEJvcmRlclZhbHVlKSA6IGNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJD
b2xvciwgVXNlQ2FjaGVkQm9yZGVyVmFsdWUpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNv
bG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgOiBjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRl
Qm9yZGVyQ29sb3IsIFVzZUNhY2hlZEJvcmRlclZhbHVlKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5k
ZXJUYWJsZUNlbGw6OmJvcmRlckxlZnQoKSBjb25zdApAQCAtOTIzLDEwICs5NjEsMTEgQEAgdm9p
ZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVycyhQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG8KIAogICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gTGF5b3V0
UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkpOwogCi0gICAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUgbGVmdFZhbCA9IGNvbGxhcHNlZExlZnRCb3JkZXIoKTsKLSAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSByaWdodFZhbCA9IGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKCk7Ci0gICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgdG9wVmFsID0gY29sbGFwc2VkVG9wQm9yZGVyKCk7Ci0gICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgYm90dG9tVmFsID0gY29sbGFwc2VkQm90dG9tQm9yZGVyKCk7CisgICAgUmVu
ZGVyU3R5bGUqIHRhYmxlU3R5bGUgPSB0YWJsZSgpLT5zdHlsZSgpOworICAgIENvbGxhcHNlZEJv
cmRlclZhbHVlIGxlZnRWYWwgPSBjb2xsYXBzZWRMZWZ0Qm9yZGVyKHRhYmxlU3R5bGUpOworICAg
IENvbGxhcHNlZEJvcmRlclZhbHVlIHJpZ2h0VmFsID0gY29sbGFwc2VkUmlnaHRCb3JkZXIodGFi
bGVTdHlsZSk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgdG9wVmFsID0gY29sbGFwc2VkVG9w
Qm9yZGVyKHRhYmxlU3R5bGUpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvdHRvbVZhbCA9
IGNvbGxhcHNlZEJvdHRvbUJvcmRlcih0YWJsZVN0eWxlKTsKICAgICAgCiAgICAgLy8gQWRqdXN0
IG91ciB4L3kvd2lkdGgvaGVpZ2h0IHNvIHRoYXQgd2UgcGFpbnQgdGhlIGNvbGxhcHNlZCBib3Jk
ZXJzIGF0IHRoZSBjb3JyZWN0IGxvY2F0aW9uLgogICAgIExheW91dFVuaXQgdG9wV2lkdGggPSB0
b3BWYWwud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
aAppbmRleCAzNTFlYTUwNDZiOTg2YTgxYzE0MGJiMDYzY2NmMGQ4NGE4ZjlhNTkwLi41MTU5ODNj
YmY3ZTAzOTc1N2FmMDg1NmEwMjZmMDEzZGNjNDE0OTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBAIC0zNiw2ICszNiw3IEBAIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCB1bnNldFJvd0luZGV4ID0gMHg3RkZGRkZGRjsKIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhSb3dJbmRleCA9IDB4N0ZGRkZGRkU7IC8vIDIsMTQ3LDQ4Myw2NDYKIAogZW51bSBJbmNs
dWRlQm9yZGVyQ29sb3JPck5vdCB7IERvTm90SW5jbHVkZUJvcmRlckNvbG9yLCBJbmNsdWRlQm9y
ZGVyQ29sb3IgfTsKK2VudW0gVXNlQ2FjaGVkQm9yZGVyVmFsdWVPck5vdCB7IERvTm90VXNlQ2Fj
aGVkQm9yZGVyVmFsdWUsIFVzZUNhY2hlZEJvcmRlclZhbHVlIH07CiAKIGNsYXNzIFJlbmRlclRh
YmxlQ2VsbCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CkBAIC05OCwyNiArOTksNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGJvcmRlckJlZm9yZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBib3JkZXJBZnRlcigpIGNvbnN0OwogCi0gICAgTGF5b3V0
VW5pdCBib3JkZXJIYWxmTGVmdChib29sIG91dGVyKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJv
cmRlckhhbGZSaWdodChib29sIG91dGVyKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckhh
bGZUb3AoYm9vbCBvdXRlcikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmQm90dG9t
KGJvb2wgb3V0ZXIpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmU3RhcnQoYm9v
bCBvdXRlcikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmRW5kKGJvb2wgb3V0ZXIp
IGNvbnN0OwotICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJlZm9yZShib29sIG91dGVyKSBjb25z
dDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZBZnRlcihib29sIG91dGVyKSBjb25zdDsKLQot
ICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3Jk
ZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKLSAgICBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSBjb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJ
bmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxh
cHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJD
b2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQWZ0ZXJCb3Jk
ZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0Owot
Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkTGVmdEJvcmRlcihJbmNsdWRlQm9y
ZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2Vk
Qm9yZGVyVmFsdWUgY29sbGFwc2VkUmlnaHRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3Qg
PSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNv
bGxhcHNlZFRvcEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3JkZXJD
b2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkQm90dG9tQm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsK
LQogICAgIHZvaWQgY29sbGVjdEJvcmRlclZhbHVlcyhSZW5kZXJUYWJsZTo6Q29sbGFwc2VkQm9y
ZGVyVmFsdWVzJikgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgc29ydEJvcmRlclZhbHVlcyhSZW5k
ZXJUYWJsZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWVzJik7CiAKQEAgLTE3NSw2ICsxNTYsMzEgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0
OwogCisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmTGVmdChib29sIG91dGVyKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGJvcmRlckhhbGZSaWdodChib29sIG91dGVyKSBjb25zdDsKKyAgICBMYXlv
dXRVbml0IGJvcmRlckhhbGZUb3AoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBi
b3JkZXJIYWxmQm90dG9tKGJvb2wgb3V0ZXIpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBib3Jk
ZXJIYWxmU3RhcnQoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxm
RW5kKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJlZm9yZShi
b29sIG91dGVyKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGJvcmRlckhhbGZBZnRlcihib29sIG91
dGVyKSBjb25zdDsKKworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFN0YXJ0Qm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNo
ZWRCb3JkZXJWYWx1ZU9yTm90ID0gRG9Ob3RVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgY29uc3Q7Cisg
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJD
b2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90
ID0gRG9Ob3RVc2VDYWNoZWRCb3JkZXJWYWx1ZSkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUgY29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5j
bHVkZUJvcmRlckNvbG9yLCBVc2VDYWNoZWRCb3JkZXJWYWx1ZU9yTm90ID0gRG9Ob3RVc2VDYWNo
ZWRCb3JkZXJWYWx1ZSkgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2Vk
QWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3Is
IFVzZUNhY2hlZEJvcmRlclZhbHVlT3JOb3QgPSBEb05vdFVzZUNhY2hlZEJvcmRlclZhbHVlKSBj
b25zdDsKKworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZExlZnRCb3JkZXIoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRSaWdo
dEJvcmRlcihSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNv
bGxhcHNlZFRvcEJvcmRlcihSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRl
clZhbHVlIGNvbGxhcHNlZEJvdHRvbUJvcmRlcihSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAg
Q29sbGFwc2VkQm9yZGVyVmFsdWUgY29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSBjb21wdXRlQ29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xv
ck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJW
YWx1ZSBjb21wdXRlQ29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90
ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBj
b21wdXRlQ29sbGFwc2VkQWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNs
dWRlQm9yZGVyQ29sb3IpIGNvbnN0OworCiAgICAgdW5zaWduZWQgbV9yb3cgOiAzMTsKICAgICBi
b29sIG1fY2VsbFdpZHRoQ2hhbmdlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2x1bW4gOiAzMTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5k
ZXggZmMxM2NmNzgxNWZlYmYwYzg1ZTNkNjcwYzcyMjI1N2IxNDYyNjQyNy4uMDA0NmVlNzcyODQ1
ZjZhZDZmYjhhYWM5MTMxNjAyNTA5NzBlNWE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTEzNDAsNCArMTM0MCwyMiBAQCB1bnNp
Z25lZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJvd0luZGV4Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVy
VGFibGVSb3cqIHJvdykgY29ucwogICAgIHJldHVybiAwOwogfQogCit2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6cmVtb3ZlQ2VsbENvbGxhcHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxs
KiBjZWxsKQoreworICAgIGZvciAoaW50IHNpZGUgPSBDQlNCZWZvcmU7IHNpZGUgPD0gQ0JTRW5k
OyArK3NpZGUpCisgICAgICAgIG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLnRha2UobWFrZV9wYWly
KGNlbGwsIHNpZGUpKTsKK30KKwordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldENvbGxhcHNl
ZEJvcmRlcihjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIENvbGxhcHNlZEJvcmRlclNpZGUg
c2lkZSwgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyKQoreworICAgIG1fY2VsbHNDb2xsYXBz
ZWRCb3JkZXJzLnNldChtYWtlX3BhaXIoY2VsbCwgc2lkZSksIGJvcmRlcik7Cit9CisKK0NvbGxh
cHNlZEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVNlY3Rpb246OmNhY2hlZENvbGxhcHNlZEJvcmRl
cihjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIENvbGxhcHNlZEJvcmRlclNpZGUgc2lkZSkK
K3sKKyAgICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwgaW50PiwgQ29sbGFw
c2VkQm9yZGVyVmFsdWU+OjppdGVyYXRvciBpdCA9IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLmZp
bmQobWFrZV9wYWlyKGNlbGwsIHNpZGUpKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9jZWxsc0NvbGxh
cHNlZEJvcmRlcnMuZW5kKCkpOworICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmgKaW5kZXggODZmMzQzNDM3NzA2ZGJmMjUwZGMwNTFiMDYwYTViZTJmZDlmYzMxYi4u
NTAyODM2NjIzMmIwZDYyZTA3ZDQxZmM2ZTg5MjFiZjZkOWFmOGNhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaApAQCAtMzAsNiArMzAsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIENvbGxhcHNlZEJvcmRlclNpZGUgeworICAg
IENCU0JlZm9yZSwKKyAgICBDQlNBZnRlciwKKyAgICBDQlNTdGFydCwKKyAgICBDQlNFbmQKK307
CisKIGNsYXNzIFJlbmRlclRhYmxlQ2VsbDsKIGNsYXNzIFJlbmRlclRhYmxlUm93OwogCkBAIC0x
MzAsNiArMTM3LDEwIEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHJvd0luZGV4Rm9yUmVuZGVy
ZXIoY29uc3QgUmVuZGVyVGFibGVSb3cqKSBjb25zdDsKIAorICAgIHZvaWQgcmVtb3ZlQ2VsbENv
bGxhcHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKik7CisgICAgdm9pZCBzZXRDb2xs
YXBzZWRCb3JkZXIoY29uc3QgUmVuZGVyVGFibGVDZWxsKiwgQ29sbGFwc2VkQm9yZGVyU2lkZSwg
Q29sbGFwc2VkQm9yZGVyVmFsdWUpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlJiBjYWNoZWRD
b2xsYXBzZWRCb3JkZXIoY29uc3QgUmVuZGVyVGFibGVDZWxsKiwgQ29sbGFwc2VkQm9yZGVyU2lk
ZSk7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCkBAIC0xODIsNiArMTkz
LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxv
d2luZ0NlbGw7CiAKICAgICBib29sIG1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzOworCisgICAgLy8g
VGhpcyBtYXAgaG9sZHMgdGhlIGNvbGxhcHNlZCBib3JkZXIgdmFsdWVzIGZvciBjZWxscyB3aXRo
IGNvbGxhcHNlZCBib3JkZXJzLgorICAgIC8vIEl0IGlzIGhlbGQgYXQgUmVuZGVyVGFibGVTZWN0
aW9uIGxldmVsIHRvIHNwYXJlIG1lbW9yeSBjb25zdW1wdGlvbiBieSB0YWJsZSBjZWxscy4KKyAg
ICBIYXNoTWFwPHBhaXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwgaW50PiwgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUgPiBtX2NlbGxzQ29sbGFwc2VkQm9yZGVyczsKIH07CiAKIGlubGluZSBSZW5kZXJU
YWJsZVNlY3Rpb24qIHRvUmVuZGVyVGFibGVTZWN0aW9uKFJlbmRlck9iamVjdCogb2JqZWN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122053</attachid>
            <date>2012-01-11 11:12:30 -0800</date>
            <delta_ts>2012-01-12 08:38:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73349-20120111191228.patch</filename>
            <type>text/plain</type>
            <size>17651</size>
            <attacher name="Robert Hogan">robert</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjk3MDQwZjE3MjIyOGI1
MTg2YzI1YzZhNWQ3ZDdiMmNmNjI3YTAwNC4uMWI4MTcxYjVkY2QwNmUzNmRlZmY3NzQ2NjFlYjgy
MGFiMDlkZWJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDExLTEyLTMwICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KKworICAgICAgICBjb21wYXJlQm9yZGVycygp
IGlzIGNhbGxlZCB0b28gb2Z0ZW4gZHVyaW5nIHBhaW50aW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxhcHNlZCBib3JkZXJzIGFyZSByZS1jYWxj
dWxhdGVkIGV2ZXJ5IHRpbWUgdGhleSBhcmUgcGFpbnRlZC4KKyAgICAgICAgVGhpcyBpcyB1bm5l
Y2Vzc2FyeSwgdGhleSBvbmx5IGNoYW5nZSB3aXRoIHRoZSBsYXlvdXQgb3Igc3R5bGUgc28gY2Fs
Y3VsYXRlIGFuZAorICAgICAgICBjYWNoZSB0aGVtIHdoZW5ldmVyIHRoZSBsYXlvdXQgb3Igc3R5
bGUgY2hhbmdlcyBhbmQgdXNlIHRoZSBjYWNoZWQgdmFsdWVzIHdoZW4KKyAgICAgICAgcGFpbnRp
bmcuIFRoZSBjYWNoZSBpcyBzdG9yZWQgaW4gdGhlIHRhYmxlIHNlY3Rpb24gc28gdGhhdCB0aGUg
bWVtb3J5IGZvb3RwcmludAorICAgICAgICBvZiBhIHRhYmxlIGlzIG9ubHkgaW5jcmVhc2VkIHdo
ZW4gaXQgaGFzIGNvbGxhcHNpbmcgYm9yZGVycy4KKworICAgICAgICBUaGUgZ2FpbiBpbiBwZXJm
b3JtYW5jZSBoZXJlIGNvbnNpc3RzIG9mIHNraXBwaW5nIGNvbGxhcHNlZCBib3JkZXIgY29tcHV0
YXRpb24KKyAgICAgICAgZHVyaW5nIHBhaW50aW5nLiBUaGUgb25seSBwYXRoIHRoYXQgaW5jdXJz
IGEgc21hbGwgcGVyZm9ybWFuY2UgcGVuYWx0eSBpcyB0aGUgCisgICAgICAgIGFkZGl0aW9uYWwg
Z2V0L3NldCBvbiB0aGUgY2FjaGUgd2hlbiBhIGNvbGxhcHNlZCBib3JkZXIgaXMgY29tcHV0ZWQu
IFRoaXMgcGVuYWx0eSBvbmx5IGFwcGxpZXMKKyAgICAgICAgZHVyaW5nIHN0eWxlIGNoYW5nZSwg
bGF5b3V0LCBvciB3aGVuIHRoZSB3aWR0aCBvZiB0aGUgdGFibGUgaXMgY2FsY3VsYXRlZC4gVGhl
IGNvbXB1dGVkCisgICAgICAgIGJvcmRlciB2YWx1ZSBpcyBub3Qgc3RvcmVkIGluIHRoZSBjYWNo
ZSB3aGVuIGl0IGhhcyBiZWVuIGNhbGN1bGF0ZWQgd2l0aG91dCBpdHMgY29sb3IKKyAgICAgICAg
Zm9yIGJvcmRlckhhbGZTdGFydCBhbmQgY28uLCBzbyB0aGF0IGNvZGUgcGF0aCBpcyB1bmFmZmVj
dGVkIGJ5IHRoaXMgY2hhbmdlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBl
eGlzdGluZyBjb2xsYXBzZWQgYm9yZGVyIHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6Ondp
bGxCZURlc3Ryb3llZCk6IHJlbW92ZSBlbnRyaWVzIGZyb20gY29sbGFwc2VkIGJvcmRlciBjYWNo
ZQorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRTdGFydEJvcmRl
cik6CisgICAgICAgICBDb21wdXRlLCBhbmQgYWxzbyBjYWNoZSBpZiB0aGUgZnVsbCBib3JkZXIg
aW5jbHVkaW5nIGNvbG9yIHdhcyBjb21wdXRlZC4gCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRTdGFydEJvcmRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEVuZEJvcmRlcik6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRFbmRCb3JkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRCZWZvcmVCb3JkZXIpOiBk
aXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQ29sbGFwc2Vk
QmVmb3JlQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFw
c2VkQWZ0ZXJCb3JkZXIpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxs
Ojpjb21wdXRlQ29sbGFwc2VkQWZ0ZXJCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVDZWxsOjpjb2xsYXBzZWRMZWZ0Qm9yZGVyKToKKyAgICAgICAgIElubGluZSB0aGUgZnVu
Y3Rpb24gc2luY2UgaXQgaXMgb25seSBjYWxsZWQgaW4gcGFpbnRDb2xsYXBzZWRCb3JkZXJzIGFu
ZCByZW1vdmUKKyAgICAgICAgIGluY2x1ZGVDb2xvciBhcyBhIHBhcmFtZXRlci4gTW92ZSB0aGUg
Y2FsbCB0byB0aGUgdGFibGUncyBzdHlsZSB0byB0aGUgY2FsbGVyIHJhdGhlcgorICAgICAgICAg
dGhhbiBjYWxsIGl0IDQgdGltZXMgaW4gYSByb3cuIFVzZSB0aGUgY2FjaGVkIGJvcmRlciB2YWx1
ZXMgZGlyZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNl
ZFJpZ2h0Qm9yZGVyKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6
Y29sbGFwc2VkVG9wQm9yZGVyKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6Y29sbGFwc2VkQm90dG9tQm9yZGVyKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkZXJzKToKKyAgICAgICAgIFRoaXMgZnVu
Y3Rpb24gYWx3YXlzIHVzZXMgdGhlIGNvbGxhcHNlZCBib3JkZXIgY2FjaGUgbm93LgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgIE1ha2UgdGhlIGNvbGxh
cHNlZCBib3JkZXIgZnVuY3Rpb25zIHByaXZhdGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246
OnJlbW92ZUNlbGxDb2xsYXBzZWRCb3JkZXJzKTogVGhlIGNhY2hlIGlzIGRlbGV0ZWQgYnkgdGhl
IEhhc2hNYXAKKyAgICAgICAgIHNpbmNlIGl0IGlzIHRoZSBvbmx5IG93bmVyIG9mIHRoZSBjYWNo
ZWQgaXRlbS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q29sbGFw
c2VkQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FjaGVk
Q29sbGFwc2VkQm9yZGVyKToKKyAgICAgICAgIFRoaXMgd2lsbCBhc3NlcnQgaWYgdGhlcmUgaXMg
bm8gY2FjaGVkIGNvbGxhcHNlZCBib3JkZXIgZm9yIHRoZSBzaWRlIG9mIHRoZSAKKyAgICAgICAg
IGNlbGwgcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5oOgorICAgICAgICAgSGFzaE1hcCB3b3VsZG4ndCBsZXQgbWUgdXNlIENv
bGxhcHNlZEJvcmRlclNpZGUgaW4gdGhlIGtleSB2YWx1ZSBmb3IgdGhlIGNhY2hlCisgICAgICAg
ICBzbyB1c2UgaW50IGluc3RlYWQuCisKIDIwMTEtMTItMjIgIFJvYmVydCBIb2dhbiAgPHJvYmVy
dEB3ZWJraXQub3JnPgogCiAgICAgICAgIEhlYXAtdXNlLWFmdGVyLWZyZWUgaW4gV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAKaW5kZXggZjQzZTVjMWEwMmU5OGY5YzZhNDk0NTRjOTNhMTc4ZmFh
YjQ5YWU5NC4uNWYyMjEyOTgwZjAyZWEzYjM5NTcxMTQ0MmRmMWMyNDdlMzQ5MzE0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTU4LDggKzU4
LDEwIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjp3aWxsQmVEZXN0cm95ZWQoKQogCiAgICAgUmVu
ZGVyQmxvY2s6OndpbGxCZURlc3Ryb3llZCgpOwogCi0gICAgaWYgKHJlY2FsY1NlY3Rpb24pCisg
ICAgaWYgKHJlY2FsY1NlY3Rpb24pIHsKICAgICAgICAgcmVjYWxjU2VjdGlvbi0+c2V0TmVlZHND
ZWxsUmVjYWxjKCk7CisgICAgICAgIHJlY2FsY1NlY3Rpb24tPnJlbW92ZUNlbGxDb2xsYXBzZWRC
b3JkZXJzKHRoaXMpOworICAgIH0KIH0KIAogdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpjb2xT
cGFuKCkgY29uc3QKQEAgLTM5Miw2ICszOTQsMTQgQEAgc3RhdGljIENvbGxhcHNlZEJvcmRlclZh
bHVlIGNob29zZUJvcmRlcihjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgYm9yZGVyMSwgY28K
IAogQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRTdGFydEJv
cmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CiB7CisgICAg
Q29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVy
KGluY2x1ZGVDb2xvcik7CisgICAgaWYgKGluY2x1ZGVDb2xvcikKKyAgICAgICAgc2VjdGlvbigp
LT5zZXRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTU3RhcnQsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb21w
dXRlQ29sbGFwc2VkU3RhcnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNv
bG9yKSBjb25zdAorewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRoaXMtPnRhYmxlKCk7CiAg
ICAgYm9vbCBpc1N0YXJ0Q29sdW1uID0gY29sKCkgPT0gMDsKIApAQCAtNDU1LDYgKzQ2NSwxNCBA
QCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTgogCiBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJU
YWJsZUNlbGw6OmNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNs
dWRlQ29sb3IpIGNvbnN0CiB7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0gY29t
cHV0ZUNvbGxhcHNlZEVuZEJvcmRlcihpbmNsdWRlQ29sb3IpOworICAgIGlmIChpbmNsdWRlQ29s
b3IpCisgICAgICAgIHNlY3Rpb24oKS0+c2V0Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0VuZCwg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBS
ZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNv
bG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAorewogICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9
IHRoaXMtPnRhYmxlKCk7CiAgICAgYm9vbCBpc0VuZENvbHVtbiA9IHRhYmxlLT5jb2xUb0VmZkNv
bChjb2woKSArIGNvbFNwYW4oKSAtIDEpID09IHRhYmxlLT5udW1FZmZDb2xzKCkgLSAxOwogCkBA
IC01MjEsNiArNTM5LDE0IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6
Y29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90CiAKIENvbGxhcHNlZEJv
cmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKIHsKKyAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRlQ29sbGFwc2VkQmVmb3JlQm9yZGVyKGluY2x1ZGVDb2xv
cik7CisgICAgaWYgKGluY2x1ZGVDb2xvcikKKyAgICAgICAgc2VjdGlvbigpLT5zZXRDb2xsYXBz
ZWRCb3JkZXIodGhpcywgQ0JTQmVmb3JlLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNl
ZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0
Cit7CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdGhpcy0+dGFibGUoKTsKIAogICAgIC8vIEZv
ciBiZWZvcmUgYm9yZGVyLCB3ZSBuZWVkIHRvIGNoZWNrLCBpbiBvcmRlciBvZiBwcmVjZWRlbmNl
OgpAQCAtNTk5LDYgKzYyNSwxNCBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPcgogCiBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1
ZGVCb3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKIHsKKyAgICBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSByZXN1bHQgPSBjb21wdXRlQ29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNv
bG9yKTsKKyAgICBpZiAoaW5jbHVkZUNvbG9yKQorICAgICAgICBzZWN0aW9uKCktPnNldENvbGxh
cHNlZEJvcmRlcih0aGlzLCBDQlNBZnRlciwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBz
ZWRBZnRlckJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0
Cit7CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdGhpcy0+dGFibGUoKTsKIAogICAgIC8vIEZv
ciBhZnRlciBib3JkZXIsIHdlIG5lZWQgdG8gY2hlY2ssIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6
CkBAIC02NjYsMzYgKzcwMCwzMiBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNl
bGw6OmNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTgogICAgIHJldHVy
biByZXN1bHQ7ICAgIAogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6
OmNvbGxhcHNlZExlZnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9y
KSBjb25zdAoraW5saW5lIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29s
bGFwc2VkTGVmdEJvcmRlcihSZW5kZXJTdHlsZSogdGFibGVTdHlsZSkgY29uc3QKIHsKLSAgICBS
ZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAgICAgaWYgKHRhYmxl
U3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiB0YWJsZVN0
eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBzZWRTdGFydEJvcmRlcihpbmNs
dWRlQ29sb3IpIDogY29sbGFwc2VkRW5kQm9yZGVyKGluY2x1ZGVDb2xvcik7Ci0gICAgcmV0dXJu
IHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBjb2xsYXBzZWRBZnRl
ckJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2VkQmVmb3JlQm9yZGVyKGluY2x1ZGVDb2xv
cik7CisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBzZWN0aW9uKCktPmNhY2hlZENvbGxhcHNlZEJvcmRlcih0aGlzLCBDQlNTdGFydCkgOiBzZWN0
aW9uKCktPmNhY2hlZENvbGxhcHNlZEJvcmRlcih0aGlzLCBDQlNFbmQpOworICAgIHJldHVybiB0
YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gc2VjdGlvbigpLT5jYWNo
ZWRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTQWZ0ZXIpIDogc2VjdGlvbigpLT5jYWNoZWRDb2xs
YXBzZWRCb3JkZXIodGhpcywgQ0JTQmVmb3JlKTsKIH0KIAotQ29sbGFwc2VkQm9yZGVyVmFsdWUg
UmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRSaWdodEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JP
ck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0CitpbmxpbmUgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVu
ZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRSaWdodEJvcmRlcihSZW5kZXJTdHlsZSogdGFibGVTdHls
ZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxl
KCk7CiAgICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAg
ICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb2xsYXBz
ZWRFbmRCb3JkZXIoaW5jbHVkZUNvbG9yKSA6IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKGluY2x1ZGVD
b2xvcik7Ci0gICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkgPyBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoaW5jbHVkZUNvbG9yKSA6IGNvbGxhcHNlZEFmdGVy
Qm9yZGVyKGluY2x1ZGVDb2xvcik7CisgICAgICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBzZWN0aW9uKCktPmNhY2hlZENvbGxhcHNlZEJvcmRlcih0aGlz
LCBDQlNFbmQpIDogc2VjdGlvbigpLT5jYWNoZWRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTU3Rh
cnQpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
ID8gc2VjdGlvbigpLT5jYWNoZWRDb2xsYXBzZWRCb3JkZXIodGhpcywgQ0JTQmVmb3JlKSA6IHNl
Y3Rpb24oKS0+Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0FmdGVyKTsKIH0KIAotQ29s
bGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRUb3BCb3JkZXIoSW5j
bHVkZUJvcmRlckNvbG9yT3JOb3QgaW5jbHVkZUNvbG9yKSBjb25zdAoraW5saW5lIENvbGxhcHNl
ZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkVG9wQm9yZGVyKFJlbmRlclN0
eWxlKiB0YWJsZVN0eWxlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiB0YWJsZVN0eWxlID0g
dGFibGUoKS0+c3R5bGUoKTsKICAgICBpZiAodGFibGVTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkgPyBjb2xsYXBzZWRBZnRlckJvcmRlcihpbmNsdWRlQ29sb3IpIDogY29sbGFwc2Vk
QmVmb3JlQm9yZGVyKGluY2x1ZGVDb2xvcik7Ci0gICAgcmV0dXJuIHRhYmxlU3R5bGUtPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IGNvbGxhcHNlZFN0YXJ0Qm9yZGVyKGluY2x1ZGVDb2xvcikg
OiBjb2xsYXBzZWRFbmRCb3JkZXIoaW5jbHVkZUNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHRhYmxl
U3R5bGUtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBzZWN0aW9uKCktPmNhY2hlZENv
bGxhcHNlZEJvcmRlcih0aGlzLCBDQlNBZnRlcikgOiBzZWN0aW9uKCktPmNhY2hlZENvbGxhcHNl
ZEJvcmRlcih0aGlzLCBDQlNCZWZvcmUpOworICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBzZWN0aW9uKCktPmNhY2hlZENvbGxhcHNlZEJvcmRlcih0aGlz
LCBDQlNTdGFydCkgOiBzZWN0aW9uKCktPmNhY2hlZENvbGxhcHNlZEJvcmRlcih0aGlzLCBDQlNF
bmQpOwogfQogCi1Db2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNl
ZEJvdHRvbUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCBpbmNsdWRlQ29sb3IpIGNvbnN0
CitpbmxpbmUgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb2xsYXBzZWRC
b3R0b21Cb3JkZXIoUmVuZGVyU3R5bGUqIHRhYmxlU3R5bGUpIGNvbnN0CiB7Ci0gICAgUmVuZGVy
U3R5bGUqIHRhYmxlU3R5bGUgPSB0YWJsZSgpLT5zdHlsZSgpOwogICAgIGlmICh0YWJsZVN0eWxl
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4gdGFibGVTdHlsZS0+
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IGNvbGxhcHNlZEJlZm9yZUJvcmRlcihpbmNs
dWRlQ29sb3IpIDogY29sbGFwc2VkQWZ0ZXJCb3JkZXIoaW5jbHVkZUNvbG9yKTsKLSAgICByZXR1
cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29sbGFwc2VkRW5kQm9y
ZGVyKGluY2x1ZGVDb2xvcikgOiBjb2xsYXBzZWRTdGFydEJvcmRlcihpbmNsdWRlQ29sb3IpOwor
ICAgICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/
IHNlY3Rpb24oKS0+Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0JlZm9yZSkgOiBzZWN0
aW9uKCktPmNhY2hlZENvbGxhcHNlZEJvcmRlcih0aGlzLCBDQlNBZnRlcik7CisgICAgcmV0dXJu
IHRhYmxlU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHNlY3Rpb24oKS0+Y2FjaGVk
Q29sbGFwc2VkQm9yZGVyKHRoaXMsIENCU0VuZCkgOiBzZWN0aW9uKCktPmNhY2hlZENvbGxhcHNl
ZEJvcmRlcih0aGlzLCBDQlNTdGFydCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyVGFibGVDZWxs
Ojpib3JkZXJMZWZ0KCkgY29uc3QKQEAgLTkyMywxMCArOTUzLDExIEBAIHZvaWQgUmVuZGVyVGFi
bGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmRlcnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvCiAKICAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3QoYWRqdXN0
ZWRQYWludE9mZnNldCwgc2l6ZSgpKTsKIAotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGxlZnRW
YWwgPSBjb2xsYXBzZWRMZWZ0Qm9yZGVyKCk7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmln
aHRWYWwgPSBjb2xsYXBzZWRSaWdodEJvcmRlcigpOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVl
IHRvcFZhbCA9IGNvbGxhcHNlZFRvcEJvcmRlcigpOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVl
IGJvdHRvbVZhbCA9IGNvbGxhcHNlZEJvdHRvbUJvcmRlcigpOworICAgIFJlbmRlclN0eWxlKiB0
YWJsZVN0eWxlID0gdGFibGUoKS0+c3R5bGUoKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBs
ZWZ0VmFsID0gY29sbGFwc2VkTGVmdEJvcmRlcih0YWJsZVN0eWxlKTsKKyAgICBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSByaWdodFZhbCA9IGNvbGxhcHNlZFJpZ2h0Qm9yZGVyKHRhYmxlU3R5bGUpOwor
ICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHRvcFZhbCA9IGNvbGxhcHNlZFRvcEJvcmRlcih0YWJs
ZVN0eWxlKTsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBib3R0b21WYWwgPSBjb2xsYXBzZWRC
b3R0b21Cb3JkZXIodGFibGVTdHlsZSk7CiAgICAgIAogICAgIC8vIEFkanVzdCBvdXIgeC95L3dp
ZHRoL2hlaWdodCBzbyB0aGF0IHdlIHBhaW50IHRoZSBjb2xsYXBzZWQgYm9yZGVycyBhdCB0aGUg
Y29ycmVjdCBsb2NhdGlvbi4KICAgICBMYXlvdXRVbml0IHRvcFdpZHRoID0gdG9wVmFsLndpZHRo
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKaW5kZXggMzUx
ZWE1MDQ2Yjk4NmE4MWMxNDBiYjA2M2NjZjBkODRhOGY5YTU5MC4uOGJiYjRlZGYxODM0NmFjNjhj
MDU1ZDI5N2ZkNjg5ZmEwY2FjNjZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaApAQCAtOTgsMjYgKzk4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBib3JkZXJCZWZvcmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFVuaXQgYm9y
ZGVyQWZ0ZXIoKSBjb25zdDsKIAotICAgIExheW91dFVuaXQgYm9yZGVySGFsZkxlZnQoYm9vbCBv
dXRlcikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmUmlnaHQoYm9vbCBvdXRlcikg
Y29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmVG9wKGJvb2wgb3V0ZXIpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJvdHRvbShib29sIG91dGVyKSBjb25zdDsKLQotICAg
IExheW91dFVuaXQgYm9yZGVySGFsZlN0YXJ0KGJvb2wgb3V0ZXIpIGNvbnN0OwotICAgIExheW91
dFVuaXQgYm9yZGVySGFsZkVuZChib29sIG91dGVyKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJv
cmRlckhhbGZCZWZvcmUoYm9vbCBvdXRlcikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJI
YWxmQWZ0ZXIoYm9vbCBvdXRlcikgY29uc3Q7Ci0KLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBj
b2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5vdCA9IEluY2x1ZGVCb3Jk
ZXJDb2xvcikgY29uc3Q7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29sbGFwc2VkRW5kQm9y
ZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsK
LSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJv
cmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwotICAgIENvbGxhcHNl
ZEJvcmRlclZhbHVlIGNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90
ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKLQotICAgIENvbGxhcHNlZEJvcmRlclZhbHVl
IGNvbGxhcHNlZExlZnRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9y
ZGVyQ29sb3IpIGNvbnN0OwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFJpZ2h0
Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25z
dDsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRUb3BCb3JkZXIoSW5jbHVkZUJv
cmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0OwotICAgIENvbGxhcHNl
ZEJvcmRlclZhbHVlIGNvbGxhcHNlZEJvdHRvbUJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5v
dCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7Ci0KICAgICB2b2lkIGNvbGxlY3RCb3JkZXJW
YWx1ZXMoUmVuZGVyVGFibGU6OkNvbGxhcHNlZEJvcmRlclZhbHVlcyYpIGNvbnN0OwogICAgIHN0
YXRpYyB2b2lkIHNvcnRCb3JkZXJWYWx1ZXMoUmVuZGVyVGFibGU6OkNvbGxhcHNlZEJvcmRlclZh
bHVlcyYpOwogCkBAIC0xNzUsNiArMTU1LDMxIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBMYXlv
dXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRS
ZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKIAorICAgIExheW91dFVuaXQgYm9yZGVy
SGFsZkxlZnQoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmUmln
aHQoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJIYWxmVG9wKGJvb2wg
b3V0ZXIpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVySGFsZkJvdHRvbShib29sIG91dGVy
KSBjb25zdDsKKworICAgIExheW91dFVuaXQgYm9yZGVySGFsZlN0YXJ0KGJvb2wgb3V0ZXIpIGNv
bnN0OworICAgIExheW91dFVuaXQgYm9yZGVySGFsZkVuZChib29sIG91dGVyKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGJvcmRlckhhbGZCZWZvcmUoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgTGF5
b3V0VW5pdCBib3JkZXJIYWxmQWZ0ZXIoYm9vbCBvdXRlcikgY29uc3Q7CisKKyAgICBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sb3JPck5v
dCA9IEluY2x1ZGVCb3JkZXJDb2xvcikgY29uc3Q7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUg
Y29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRl
ckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRCZWZvcmVC
b3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNvbnN0
OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKworICAgIENvbGxh
cHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZExlZnRCb3JkZXIoUmVuZGVyU3R5bGUqKSBjb25zdDsK
KyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRSaWdodEJvcmRlcihSZW5kZXJTdHls
ZSopIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZFRvcEJvcmRlcihS
ZW5kZXJTdHlsZSopIGNvbnN0OworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEJv
dHRvbUJvcmRlcihSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgQ29sbGFwc2VkQm9yZGVyVmFs
dWUgY29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0g
SW5jbHVkZUJvcmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb21w
dXRlQ29sbGFwc2VkRW5kQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJv
cmRlckNvbG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb21wdXRlQ29sbGFw
c2VkQmVmb3JlQm9yZGVyKEluY2x1ZGVCb3JkZXJDb2xvck9yTm90ID0gSW5jbHVkZUJvcmRlckNv
bG9yKSBjb25zdDsKKyAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb21wdXRlQ29sbGFwc2VkQWZ0
ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckNvbG9yT3JOb3QgPSBJbmNsdWRlQm9yZGVyQ29sb3IpIGNv
bnN0OworCiAgICAgdW5zaWduZWQgbV9yb3cgOiAzMTsKICAgICBib29sIG1fY2VsbFdpZHRoQ2hh
bmdlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9jb2x1bW4gOiAzMTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggZmMxM2NmNzgxNWZlYmYw
Yzg1ZTNkNjcwYzcyMjI1N2IxNDYyNjQyNy4uMDA0NmVlNzcyODQ1ZjZhZDZmYjhhYWM5MTMxNjAy
NTA5NzBlNWE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKQEAgLTEzNDAsNCArMTM0MCwyMiBAQCB1bnNpZ25lZCBSZW5kZXJUYWJsZVNl
Y3Rpb246OnJvd0luZGV4Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cqIHJvdykgY29u
cwogICAgIHJldHVybiAwOwogfQogCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVtb3ZlQ2Vs
bENvbGxhcHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQoreworICAgIGZv
ciAoaW50IHNpZGUgPSBDQlNCZWZvcmU7IHNpZGUgPD0gQ0JTRW5kOyArK3NpZGUpCisgICAgICAg
IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLnRha2UobWFrZV9wYWlyKGNlbGwsIHNpZGUpKTsKK30K
Kwordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqIGNlbGwsIENvbGxhcHNlZEJvcmRlclNpZGUgc2lkZSwgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUgYm9yZGVyKQoreworICAgIG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLnNldChtYWtl
X3BhaXIoY2VsbCwgc2lkZSksIGJvcmRlcik7Cit9CisKK0NvbGxhcHNlZEJvcmRlclZhbHVlJiBS
ZW5kZXJUYWJsZVNlY3Rpb246OmNhY2hlZENvbGxhcHNlZEJvcmRlcihjb25zdCBSZW5kZXJUYWJs
ZUNlbGwqIGNlbGwsIENvbGxhcHNlZEJvcmRlclNpZGUgc2lkZSkKK3sKKyAgICBIYXNoTWFwPHBh
aXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwgaW50PiwgQ29sbGFwc2VkQm9yZGVyVmFsdWU+Ojpp
dGVyYXRvciBpdCA9IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLmZpbmQobWFrZV9wYWlyKGNlbGws
IHNpZGUpKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnMuZW5kKCkp
OworICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKaW5kZXggODZm
MzQzNDM3NzA2ZGJmMjUwZGMwNTFiMDYwYTViZTJmZDlmYzMxYi4uNTAyODM2NjIzMmIwZDYyZTA3
ZDQxZmM2ZTg5MjFiZjZkOWFmOGNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uaApAQCAtMzAsNiArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitlbnVtIENvbGxhcHNlZEJvcmRlclNpZGUgeworICAgIENCU0JlZm9yZSwKKyAgICBD
QlNBZnRlciwKKyAgICBDQlNTdGFydCwKKyAgICBDQlNFbmQKK307CisKIGNsYXNzIFJlbmRlclRh
YmxlQ2VsbDsKIGNsYXNzIFJlbmRlclRhYmxlUm93OwogCkBAIC0xMzAsNiArMTM3LDEwIEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIHJvd0luZGV4Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyVGFi
bGVSb3cqKSBjb25zdDsKIAorICAgIHZvaWQgcmVtb3ZlQ2VsbENvbGxhcHNlZEJvcmRlcnMoY29u
c3QgUmVuZGVyVGFibGVDZWxsKik7CisgICAgdm9pZCBzZXRDb2xsYXBzZWRCb3JkZXIoY29uc3Qg
UmVuZGVyVGFibGVDZWxsKiwgQ29sbGFwc2VkQm9yZGVyU2lkZSwgQ29sbGFwc2VkQm9yZGVyVmFs
dWUpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlJiBjYWNoZWRDb2xsYXBzZWRCb3JkZXIoY29u
c3QgUmVuZGVyVGFibGVDZWxsKiwgQ29sbGFwc2VkQm9yZGVyU2lkZSk7CisKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCkBAIC0xODIsNiArMTkzLDEwIEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGw7CiAKICAgICBi
b29sIG1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzOworCisgICAgLy8gVGhpcyBtYXAgaG9sZHMgdGhl
IGNvbGxhcHNlZCBib3JkZXIgdmFsdWVzIGZvciBjZWxscyB3aXRoIGNvbGxhcHNlZCBib3JkZXJz
LgorICAgIC8vIEl0IGlzIGhlbGQgYXQgUmVuZGVyVGFibGVTZWN0aW9uIGxldmVsIHRvIHNwYXJl
IG1lbW9yeSBjb25zdW1wdGlvbiBieSB0YWJsZSBjZWxscy4KKyAgICBIYXNoTWFwPHBhaXI8Y29u
c3QgUmVuZGVyVGFibGVDZWxsKiwgaW50PiwgQ29sbGFwc2VkQm9yZGVyVmFsdWUgPiBtX2NlbGxz
Q29sbGFwc2VkQm9yZGVyczsKIH07CiAKIGlubGluZSBSZW5kZXJUYWJsZVNlY3Rpb24qIHRvUmVu
ZGVyVGFibGVTZWN0aW9uKFJlbmRlck9iamVjdCogb2JqZWN0KQo=
</data>
<flag name="review"
          id="122747"
          type_id="1"
          status="+"
          setter="jchaffraix"
    />
    <flag name="commit-queue"
          id="122993"
          type_id="3"
          status="-"
          setter="jchaffraix"
    />
          </attachment>
      

    </bug>

</bugzilla>