<?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>84479</bug_id>
          
          <creation_ts>2012-04-20 12:36:55 -0700</creation_ts>
          <short_desc>[chromium] Some background filters require inflating damage on the surface behind them</short_desc>
          <delta_ts>2012-04-26 19:16:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>606814</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-20 12:36:55 -0700</bug_when>
    <thetext>[chromium] Some background filters require inflating damage on the surface behind them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606816</commentid>
    <comment_count>1</comment_count>
      <attachid>138145</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-20 12:40:07 -0700</bug_when>
    <thetext>Created attachment 138145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607796</commentid>
    <comment_count>2</comment_count>
      <attachid>138145</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-23 10:23:59 -0700</bug_when>
    <thetext>Comment on attachment 138145
Patch


Very awesome that you caught this problem before it bites =)  Here are my thoughts... otherwise it LGTM.


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

&gt; Source/WebCore/ChangeLog:3
&gt; +        [chromium] Some background filters require inflating damage on the surface behind them

&quot;on the surface behind them&quot; is probably misleading here... =)   If I understood correctly, should it say &quot;Some background filters require inflating damage that occurs behind it&quot;

&gt; Source/WebCore/ChangeLog:9
&gt; +        surface below it. We extend the damage tracker to expand damage in a

I think same is true for these two sentences, too.  sounds like we&apos;re expanding damage on the surface, where the surface is below the layer

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:64
&gt; +static inline bool expandPixelOutsetsWithFilters(IntRect&amp; pixelOutsets, const FilterOperations&amp; filters)
&gt; +{
&gt; +    if (!filters.hasFilterThatMovesPixels())
&gt; +        return false;
&gt; +

Personally I would prefer not to have a function that has two simultaneous purposes like this.  Could we separate this into two helper functions:
  bool needsToExpandDamage()
  void expandPixelOutsetsForFilters()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:79
&gt; +static inline bool expandDamageRectWithFilters(FloatRect&amp; damageRect, const FilterOperations&amp; filters)

Does this need to be a boolean?  It seems not to be used that way, and making it void we can remove that similar &quot;side-effecty two purposes&quot; feeling from it.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:206
&gt; +        if (contributingSurface &amp;&amp; expandPixelOutsetsWithFilters(pixelOutsets, layer-&gt;backgroundFilters())) {

Do we need to check whether this is actually a contributing renderSurface versus a contributing layer?   (for example, if for some wacky wild reason, we allow filters to exist on layers in the future)
  If you think we dont: could we remove this part of the condition?
  If you think we do: can we fold that into the needsToExpandDamage() function that I mentioned above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607809</commentid>
    <comment_count>3</comment_count>
      <attachid>138145</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 10:30:33 -0700</bug_when>
    <thetext>Comment on attachment 138145
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:64
&gt;&gt; +
&gt; 
&gt; Personally I would prefer not to have a function that has two simultaneous purposes like this.  Could we separate this into two helper functions:
&gt;   bool needsToExpandDamage()
&gt;   void expandPixelOutsetsForFilters()

Sure I&apos;ll split it up

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:79
&gt;&gt; +static inline bool expandDamageRectWithFilters(FloatRect&amp; damageRect, const FilterOperations&amp; filters)
&gt; 
&gt; Does this need to be a boolean?  It seems not to be used that way, and making it void we can remove that similar &quot;side-effecty two purposes&quot; feeling from it.

Yeh it can be void when we have needsToExpandDamage.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:206
&gt;&gt; +        if (contributingSurface &amp;&amp; expandPixelOutsetsWithFilters(pixelOutsets, layer-&gt;backgroundFilters())) {
&gt; 
&gt; Do we need to check whether this is actually a contributing renderSurface versus a contributing layer?   (for example, if for some wacky wild reason, we allow filters to exist on layers in the future)
&gt;   If you think we dont: could we remove this part of the condition?
&gt;   If you think we do: can we fold that into the needsToExpandDamage() function that I mentioned above?

I think it being a surface is important because if it&apos;s a layer then the damage stays in the surface below, so the code here would need to do something different. I will try come up with a less generic name than needsToExpandDamage to indicate it&apos;s for a surface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607998</commentid>
    <comment_count>4</comment_count>
      <attachid>138145</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 14:00:13 -0700</bug_when>
    <thetext>Comment on attachment 138145
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +        [chromium] Some background filters require inflating damage on the surface behind them
&gt; 
&gt; &quot;on the surface behind them&quot; is probably misleading here... =)   If I understood correctly, should it say &quot;Some background filters require inflating damage that occurs behind it&quot;

The only thing to consider is that the inflation happens in the space of the surface, not the &quot;blurring&quot; layer&apos;s space. So really the damage is inflated in the surface (through the lens of the layer above) kind of.. So I&apos;d prefer to keep the name as is.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:64
&gt;&gt;&gt; +
&gt;&gt; 
&gt;&gt; Personally I would prefer not to have a function that has two simultaneous purposes like this.  Could we separate this into two helper functions:
&gt;&gt;   bool needsToExpandDamage()
&gt;&gt;   void expandPixelOutsetsForFilters()
&gt; 
&gt; Sure I&apos;ll split it up

needsToExpandDamage() == filters.hasFilterThatMovesPixels() so I just used that directly.

This let me merge the 3 helper functions into a single expandPixelOutsetsWithFilters() so yay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608000</commentid>
    <comment_count>5</comment_count>
      <attachid>138420</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 14:00:28 -0700</bug_when>
    <thetext>Created attachment 138420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608005</commentid>
    <comment_count>6</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-23 14:05:03 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 138145 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138145&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:3
&gt; &gt;&gt; +        [chromium] Some background filters require inflating damage on the surface behind them
&gt; &gt; 
&gt; &gt; &quot;on the surface behind them&quot; is probably misleading here... =)   If I understood correctly, should it say &quot;Some background filters require inflating damage that occurs behind it&quot;
&gt; 
&gt; The only thing to consider is that the inflation happens in the space of the surface, not the &quot;blurring&quot; layer&apos;s space. So really the damage is inflated in the surface (through the lens of the layer above) kind of.. So I&apos;d prefer to keep the name as is.
&gt; 

OK not a big deal.  To me personally it still sounds like we&apos;re talking about a different surface that&apos;s behind the damage, which is not what we mean. =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610021</commentid>
    <comment_count>7</comment_count>
      <attachid>138420</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-25 13:40:30 -0700</bug_when>
    <thetext>Comment on attachment 138420
Patch

Can you explain to me why we need to damage the surface behind it? Those pixels aren&apos;t written to, just read from.  It seems like their correct values should already be in the backbuffer.  If anything, maybe we just need to unset the scissor before readback?  If you expand the actual damage, then I think we&apos;re going to consume more bandwidth writing to the backbuffer for pixels that aren&apos;t changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610024</commentid>
    <comment_count>8</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 13:46:17 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 138420 [details])
&gt; Can you explain to me why we need to damage the surface behind it? Those pixels aren&apos;t written to, just read from.  It seems like their correct values should already be in the backbuffer.  If anything, maybe we just need to unset the scissor before readback?  If you expand the actual damage, then I think we&apos;re going to consume more bandwidth writing to the backbuffer for pixels that aren&apos;t changed.

Sure, I think we do need to expand damage in the surface and I&apos;ll try explain.

Surface S has layer A inside it with a background blur.

S-----------------------+
|                       |
|     A-----+           |
|     | ... |           |
|     | .x. |           |
|     | ... |           |
|     +-----+           |
+-----------------------+

Pixel x gets damaged in S and is visible through A. A is going to read back all the period pixels around x, blur them, and write them back into S. So changed color in x will be reflected in all the period pixels as well. The damaged contents in the *surface* S will larger than the actual pixels that are modified from the perspective of the *layer* S.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610032</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-25 14:04:21 -0700</bug_when>
    <thetext>Ok, I see.  Do we also need to clamp to the size of A or does the filter outsets take care of that? (Also, why does filter outsets not return an IntRect?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610036</commentid>
    <comment_count>10</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 14:15:43 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Ok, I see.  Do we also need to clamp to the size of A or does the filter outsets take care of that? (Also, why does filter outsets not return an IntRect?)

We could, but we don&apos;t need to. We are being sloppy here.

Probably because it&apos;s not reeeeally a rect. It could though, but things like expanding a bounding box by some smaller rect&apos;s edge distance from its center is not such a clear operation. move(-left, -top) expand(left+right, top+bottom) is more clear than a rect for the general case I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610038</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 14:17:47 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Ok, I see.  Do we also need to clamp to the size of A or does the filter outsets take care of that? (Also, why does filter outsets not return an IntRect?)
&gt; 
&gt; We could, but we don&apos;t need to. We are being sloppy here.

Like if a damage rect is half under the layer, we only need to expand the half that is underneath. If it&apos;s not under at all we don&apos;t need to expand at all. I don&apos;t know if it&apos;s worth bothering with that though. The occlusion tracker currently takes an even more blunt approach and does the equivalent of damaging the whole surface heh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610039</commentid>
    <comment_count>12</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 14:18:32 -0700</bug_when>
    <thetext>Ever wish for an undo send button on b.w.o like you have in gmail? Occlusion tracker&apos;s blunt approach is for foreground filters, so it&apos;s a looser analogy..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610152</commentid>
    <comment_count>13</comment_count>
      <attachid>138420</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-25 16:40:16 -0700</bug_when>
    <thetext>Comment on attachment 138420
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:180
&gt; +        // Visit layers in front-to-back order.

To simplify this, would it be possible to process layers in back-to-front order and then immediately expand the damage rect when we come upon a contributing surface with background filters that move pixels rather than having to call this function again with an offset?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:196
&gt; +            expandDamageRectWithFilters(damageRectBelowFilters, layer-&gt;backgroundFilters());
&gt; +            damageRect.unite(damageRectBelowFilters);

Is it easy to clip the damage here to the layer size? If it&apos;s not a big deal, you should to avoid a bigger scissor than needed.  Even if occlusion tracking is more loose, I think there&apos;s still a win by being as conservative as possible with our damage rects.

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:416
&gt; +    FloatRect expectedDamageRect = FloatRect(100, 110, 12, 13);
&gt; +    expectedDamageRect.move(-outsetLeft, -outsetTop);
&gt; +    expectedDamageRect.expand(outsetLeft + outsetRight, outsetTop + outsetBottom);

This is kind of circular, in that you&apos;re just testing if filter.getOutsets is used.  Do you think it&apos;d be worth baking literal outsets into this test or asserting that the outsets are what you expect they are?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610156</commentid>
    <comment_count>14</comment_count>
      <attachid>138420</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 16:46:14 -0700</bug_when>
    <thetext>Comment on attachment 138420
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:180
&gt;&gt; +        // Visit layers in front-to-back order.
&gt; 
&gt; To simplify this, would it be possible to process layers in back-to-front order and then immediately expand the damage rect when we come upon a contributing surface with background filters that move pixels rather than having to call this function again with an offset?

Yes! I think that is a great idea.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:196
&gt;&gt; +            damageRect.unite(damageRectBelowFilters);
&gt; 
&gt; Is it easy to clip the damage here to the layer size? If it&apos;s not a big deal, you should to avoid a bigger scissor than needed.  Even if occlusion tracking is more loose, I think there&apos;s still a win by being as conservative as possible with our damage rects.

Hm.... damageRect.unite(union(damageRectBelowFilters, intersection(expandedDamageRectBelowFilters, layerRect))) !

&gt;&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:416
&gt;&gt; +    expectedDamageRect.expand(outsetLeft + outsetRight, outsetTop + outsetBottom);
&gt; 
&gt; This is kind of circular, in that you&apos;re just testing if filter.getOutsets is used.  Do you think it&apos;d be worth baking literal outsets into this test or asserting that the outsets are what you expect they are?

Well, I think that is testing FilterOperations, which isn&apos;t the goal here. It does seem a bit circular.. but its verifying that the damage matches what the FilterOperations says it should do. It seems scoped correctly here to me. The outsets as they are I think are also larger than what they need to be, and would be testing an implementation details of FilterOperations that isn&apos;t important here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610159</commentid>
    <comment_count>15</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-25 16:48:02 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:196
&gt; &gt;&gt; +            damageRect.unite(damageRectBelowFilters);
&gt; &gt; 
&gt; &gt; Is it easy to clip the damage here to the layer size? If it&apos;s not a big deal, you should to avoid a bigger scissor than needed.  Even if occlusion tracking is more loose, I think there&apos;s still a win by being as conservative as possible with our damage rects.
&gt; 
&gt; Hm.... damageRect.unite(union(damageRectBelowFilters, intersection(expandedDamageRectBelowFilters, layerRect))) !

(1) I think the more appropriate place to do this would be where the FIXME is written in updateDamageTrackingState().  

(2) However, last time I tried to do this, it broke things, so I left it as a FIXME.   I would prefer that we create a different bug for this, so that we can carefully test it and get it correct in an isolated change.  (feel free to assign it to me and nag me to do it sooner if needed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610160</commentid>
    <comment_count>16</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-25 16:49:16 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:196
&gt; &gt; &gt;&gt; +            damageRect.unite(damageRectBelowFilters);
&gt; &gt; &gt; 
&gt; &gt; &gt; Is it easy to clip the damage here to the layer size? If it&apos;s not a big deal, you should to avoid a bigger scissor than needed.  Even if occlusion tracking is more loose, I think there&apos;s still a win by being as conservative as possible with our damage rects.
&gt; &gt; 
&gt; &gt; Hm.... damageRect.unite(union(damageRectBelowFilters, intersection(expandedDamageRectBelowFilters, layerRect))) !
&gt; 
&gt; (1) I think the more appropriate place to do this would be where the FIXME is written in updateDamageTrackingState().  
&gt; 
&gt; (2) However, last time I tried to do this, it broke things, so I left it as a FIXME.   I would prefer that we create a different bug for this, so that we can carefully test it and get it correct in an isolated change.  (feel free to assign it to me and nag me to do it sooner if needed)


well, just to correct myself, the FIXME comment is on the top of the few lines of code, and the clamping should occur at the bottom of that same scope...  but maybe that was already clear to you guys</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610169</commentid>
    <comment_count>17</comment_count>
      <attachid>138420</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-25 16:56:56 -0700</bug_when>
    <thetext>Comment on attachment 138420
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:196
&gt;&gt;&gt; +            damageRect.unite(damageRectBelowFilters);
&gt;&gt; 
&gt;&gt; Is it easy to clip the damage here to the layer size? If it&apos;s not a big deal, you should to avoid a bigger scissor than needed.  Even if occlusion tracking is more loose, I think there&apos;s still a win by being as conservative as possible with our damage rects.
&gt; 
&gt; Hm.... damageRect.unite(union(damageRectBelowFilters, intersection(expandedDamageRectBelowFilters, layerRect))) !

Doh - sorry for the noise.  I see now you guys are talking about clamping in a different place than I was thinking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610283</commentid>
    <comment_count>18</comment_count>
      <attachid>138921</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 18:40:16 -0700</bug_when>
    <thetext>Created attachment 138921
Patch

-back to front!
-only expand damage under the blurring layer!

this is much more awesome, thanks enne. also made unit test more thorough to cover all this stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610706</commentid>
    <comment_count>19</comment_count>
      <attachid>138921</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-26 10:19:39 -0700</bug_when>
    <thetext>Comment on attachment 138921
Patch


This makes a lot of sense - very awesome.  I had some style nits...


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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:65
&gt; +    IntRect pixelOutsets(-left, -top, left + right, top + bottom);

I feel like this is quite misleading.  It encodes and obscures the real meaning of left, right, bottom top.   Those values are actually &quot;deltas&quot; of position, while an IntRect should always represent an actual rect with position and size.

I think it&apos;s much clearer to just skip creating the IntRect and use left, right, top, bottom directly in the move/expand operations immediately below.  =)

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:417
&gt; +    // Setting the update rect should cause the corresponding damage to the

I know this is the World&apos;s Most Trivial Nit, but would it be OK if we labeled each scenario with something like &quot;CASE 1:&quot;  &quot;CASE 2:&quot;   etc.?
Personally I find those visual cues really help make the code quite a bit more readable.

&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:419
&gt; +    // Since the damage extends to the right/bottom outside of the blured

s/blured/blurred</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610709</commentid>
    <comment_count>20</comment_count>
      <attachid>138921</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-26 10:24:00 -0700</bug_when>
    <thetext>Comment on attachment 138921
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDamageTracker.cpp:65
&gt;&gt; +    IntRect pixelOutsets(-left, -top, left + right, top + bottom);
&gt; 
&gt; I feel like this is quite misleading.  It encodes and obscures the real meaning of left, right, bottom top.   Those values are actually &quot;deltas&quot; of position, while an IntRect should always represent an actual rect with position and size.
&gt; 
&gt; I think it&apos;s much clearer to just skip creating the IntRect and use left, right, top, bottom directly in the move/expand operations immediately below.  =)

Oh sure, this was an artifact of old code where I was trying to merge pixel outsets. Done.

&gt;&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:417
&gt;&gt; +    // Setting the update rect should cause the corresponding damage to the
&gt; 
&gt; I know this is the World&apos;s Most Trivial Nit, but would it be OK if we labeled each scenario with something like &quot;CASE 1:&quot;  &quot;CASE 2:&quot;   etc.?
&gt; Personally I find those visual cues really help make the code quite a bit more readable.

done.

&gt;&gt; Source/WebKit/chromium/tests/CCDamageTrackerTest.cpp:419
&gt;&gt; +    // Since the damage extends to the right/bottom outside of the blured
&gt; 
&gt; s/blured/blurred

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610711</commentid>
    <comment_count>21</comment_count>
      <attachid>139022</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-26 10:24:22 -0700</bug_when>
    <thetext>Created attachment 139022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610712</commentid>
    <comment_count>22</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-26 10:26:37 -0700</bug_when>
    <thetext>
unofficially LGTM =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611173</commentid>
    <comment_count>23</comment_count>
      <attachid>139022</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-26 18:58:24 -0700</bug_when>
    <thetext>Comment on attachment 139022
Patch

Looks great.  R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611178</commentid>
    <comment_count>24</comment_count>
      <attachid>139022</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-26 19:16:19 -0700</bug_when>
    <thetext>Comment on attachment 139022
Patch

Clearing flags on attachment: 139022

Committed r115397: &lt;http://trac.webkit.org/changeset/115397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611179</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-26 19:16:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138145</attachid>
            <date>2012-04-20 12:40:07 -0700</date>
            <delta_ts>2012-04-23 14:00:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84479-20120420154006.patch</filename>
            <type>text/plain</type>
            <size>11585</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJiZTkzYjdlM2Y5M2Mz
OWVjOTRiMzc1MGM2ZmJiMGQxNzZhM2MzYS4uYTVkNWM4OGMxNmFhNTMyN2ZkZWQ3NGJlNDk3NDUz
MWRiYjJjZGEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMyIEBACiAyMDEyLTA0LTIwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gU29t
ZSBiYWNrZ3JvdW5kIGZpbHRlcnMgcmVxdWlyZSBpbmZsYXRpbmcgZGFtYWdlIG9uIHRoZSBzdXJm
YWNlIGJlaGluZCB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDQ3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEEgbGF5ZXIgd2l0aCBhIGJhY2tncm91bmQgYmx1ciB3aWxsIGV4cGFuZCB0aGUgZGFt
YWdlIGZyb20gcGl4ZWxzIGluIHRoZQorICAgICAgICBzdXJmYWNlIGJlbG93IGl0LiBXZSBleHRl
bmQgdGhlIGRhbWFnZSB0cmFja2VyIHRvIGV4cGFuZCBkYW1hZ2UgaW4gYQorICAgICAgICBzdXJm
YWNlIGJlbG93IHN1Y2ggbGF5ZXJzLgorCisgICAgICAgIHRyYWNrRGFtYWdlRnJvbUFjdGl2ZUxh
eWVycygpIGJlY29tZXMgYSByZWN1cnNpdmUgZnVuY3Rpb24gd2hlbiBzdWNoIGEKKyAgICAgICAg
YmFja2dyb3VuZCBmaWx0ZXIgaXMgcmVhY2hlZCwgYWxsb3dpbmcgdXMgdG8gYmx1ciB0aGUgZGFt
YWdlIGJlaGluZCB0aGUKKyAgICAgICAgbGF5ZXIgYnV0IG5vdCBhYm92ZSBpdC4KKworICAgICAg
ICBVbml0IHRlc3Q6IENDRGFtYWdlVHJhY2tlclRlc3QudmVyaWZ5RGFtYWdlRm9yQmFja2dyb3Vu
ZEJsdXJyZWRDaGlsZAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEYW1hZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFuZFBpeGVsT3V0c2V0
c1dpdGhGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhw
YW5kRGFtYWdlUmVjdEJ5UGl4ZWxPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFuZERh
bWFnZVJlY3RXaXRoRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6
OnVwZGF0ZURhbWFnZVRyYWNraW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VU
cmFja2VyOjp0cmFja0RhbWFnZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oOgorICAgICAgICAoQ0NEYW1h
Z2VUcmFja2VyKToKKworMjAxMi0wNC0yMCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVt
Lm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIFNvbWUgZmlsdGVycyByZXF1aXJlIGluZmxhdGlu
ZyBkYW1hZ2UgcmVjdCBpbiBDQ0RhbWFnZVRyYWNrZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MzczCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggZTBkMTg5M2M0M2NiNTBiOGI0YTIyYTAyNWQ1NWQ0YTUyNTE5MjYwOS4uMDJiMzhhODBj
YThiMWQzYWZlOTM2MDE0NzYxOGJiZTYxNGE1OTc1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsNSArMSwxNiBAQAogMjAxMi0wNC0yMCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNo
cm9taXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIFNvbWUgYmFja2dyb3VuZCBmaWx0ZXJz
IHJlcXVpcmUgaW5mbGF0aW5nIGRhbWFnZSBvbiB0aGUgc3VyZmFjZSBiZWhpbmQgdGhlbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ0NzkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDRGFt
YWdlVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisgICAg
ICAgIChXZWJLaXRUZXN0cyk6CisKKzIwMTItMDQtMjAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBj
aHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVtXSBTb21lIGZpbHRlcnMgcmVxdWlyZSBp
bmZsYXRpbmcgZGFtYWdlIHJlY3QgaW4gQ0NEYW1hZ2VUcmFja2VyCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDM3MwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1h
Z2VUcmFja2VyLmNwcAppbmRleCAxMWU3YjQxNTI1ZGQ5YmZiYzQ2OTY5Nzk1OGRlZmU5NjQ4ODQy
ZWE4Li42YTA4YWEyMTNiMzQ2Y2MzZTEwMzg5MTNiYmEzOWY2NWQwNTYwMGVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRy
YWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTU3LDYgKzU3LDM0IEBAIENDRGFtYWdlVHJhY2tl
cjo6fkNDRGFtYWdlVHJhY2tlcigpCiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBleHBhbmRQ
aXhlbE91dHNldHNXaXRoRmlsdGVycyhJbnRSZWN0JiBwaXhlbE91dHNldHMsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgaWYgKCFmaWx0ZXJzLmhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgdG9wLCByaWdo
dCwgYm90dG9tLCBsZWZ0OworICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBib3R0
b20sIGxlZnQpOworCisgICAgSW50UmVjdCBvdXRzZXRzKC1sZWZ0LCAtdG9wLCBsZWZ0ICsgcmln
aHQsIHRvcCArIGJvdHRvbSk7CisgICAgcGl4ZWxPdXRzZXRzLnVuaXRlKG91dHNldHMpOworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXhwYW5kRGFtYWdlUmVjdEJ5
UGl4ZWxPdXRzZXRzKEZsb2F0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgcGl4ZWxP
dXRzZXRzKQoreworICAgIGRhbWFnZVJlY3QubW92ZShwaXhlbE91dHNldHMueCgpLCBwaXhlbE91
dHNldHMueSgpKTsKKyAgICBkYW1hZ2VSZWN0LmV4cGFuZChwaXhlbE91dHNldHMud2lkdGgoKSwg
cGl4ZWxPdXRzZXRzLmhlaWdodCgpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGV4cGFuZERh
bWFnZVJlY3RXaXRoRmlsdGVycyhGbG9hdFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgSW50UmVjdCBwaXhlbE91dHNldHM7CisgICAgaWYg
KCFleHBhbmRQaXhlbE91dHNldHNXaXRoRmlsdGVycyhwaXhlbE91dHNldHMsIGZpbHRlcnMpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXhwYW5kRGFtYWdlUmVjdEJ5UGl4ZWxPdXRzZXRz
KGRhbWFnZVJlY3QsIHBpeGVsT3V0c2V0cyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQg
Q0NEYW1hZ2VUcmFja2VyOjp1cGRhdGVEYW1hZ2VUcmFja2luZ1N0YXRlKGNvbnN0IFZlY3RvcjxD
Q0xheWVySW1wbCo+JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCwgYm9vbCB0
YXJnZXRTdXJmYWNlUHJvcGVydHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50LCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRTdXJmYWNlQ29udGVudFJlY3QsIENDTGF5ZXJJbXBsKiB0YXJnZXRTdXJmYWNl
TWFza0xheWVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogewogICAgIC8vCkBA
IC0xMzgsNyArMTY2LDcgQEAgdm9pZCBDQ0RhbWFnZVRyYWNrZXI6OnVwZGF0ZURhbWFnZVRyYWNr
aW5nU3RhdGUoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWUKICAgICAgICAgbV9jdXJy
ZW50RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2spOwogICAg
ICAgICBtX2N1cnJlbnREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21MZWZ0b3Zl
clJlY3RzKTsKIAotICAgICAgICBleHBhbmREYW1hZ2VSZWN0V2l0aEZvcmVncm91bmRGaWx0ZXJz
KGZpbHRlcnMpOworICAgICAgICBleHBhbmREYW1hZ2VSZWN0V2l0aEZpbHRlcnMobV9jdXJyZW50
RGFtYWdlUmVjdCwgZmlsdGVycyk7CiAgICAgfQogCiAgICAgLy8gVGhlIG5leHQgaGlzdG9yeSBt
YXAgYmVjb21lcyB0aGUgY3VycmVudCBtYXAgZm9yIHRoZSBuZXh0IGZyYW1lLgpAQCAtMTYwLDE3
ICsxODgsMzAgQEAgdm9pZCBDQ0RhbWFnZVRyYWNrZXI6OnNhdmVSZWN0Rm9yTmV4dEZyYW1lKGlu
dCBsYXllcklELCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFMKICAgICBtX25leHRSZWN0SGlzdG9y
eS0+c2V0KGxheWVySUQsIHRhcmdldFNwYWNlUmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBDQ0RhbWFn
ZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUFjdGl2ZUxheWVycyhjb25zdCBWZWN0b3I8Q0NMYXll
ckltcGwqPiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpCitGbG9hdFJlY3Qg
Q0NEYW1hZ2VUcmFja2VyOjp0cmFja0RhbWFnZUZyb21BY3RpdmVMYXllcnMoY29uc3QgVmVjdG9y
PENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklELCBpbnQg
c3RhcnRpbmdPZmZzZXQpCiB7CiAgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3Qo
KTsKIAotICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXll
ckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIGxheWVy
ID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdOworICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9
IHN0YXJ0aW5nT2Zmc2V0OyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllcklu
ZGV4KSB7CisgICAgICAgIC8vIFZpc2l0IGxheWVycyBpbiBmcm9udC10by1iYWNrIG9yZGVyLgor
ICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJMaXN0LnNpemUoKSAt
IGxheWVySW5kZXggLSAxXTsKIAotICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpy
ZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdl
dFN1cmZhY2VMYXllcklEKSkKKyAgICAgICAgYm9vbCBjb250cmlidXRpbmdTdXJmYWNlID0gQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxDQ0xh
eWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2VMYXllcklEKTsKKyAgICAgICAgaWYgKGNvbnRy
aWJ1dGluZ1N1cmZhY2UpCiAgICAgICAgICAgICBleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNl
KGxheWVyLCBkYW1hZ2VSZWN0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZXh0ZW5kRGFt
YWdlRm9yTGF5ZXIobGF5ZXIsIGRhbWFnZVJlY3QpOworCisgICAgICAgIEludFJlY3QgcGl4ZWxP
dXRzZXRzOworICAgICAgICBpZiAoY29udHJpYnV0aW5nU3VyZmFjZSAmJiBleHBhbmRQaXhlbE91
dHNldHNXaXRoRmlsdGVycyhwaXhlbE91dHNldHMsIGxheWVyLT5iYWNrZ3JvdW5kRmlsdGVycygp
KSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGxheWVyIGhhcyBhIGJhY2tncm91bmQgZmlsdGVy
LCB0aGlzIG1heSBjYXVzZSBwaXhlbHMgaW4gb3VyIHN1cmZhY2UgdG8gYmUgZXhwYW5kZWQsIHNv
IHdlIHdpbGwgbmVlZCB0byBleHBhbmQgYW55IGRhbWFnZQorICAgICAgICAgICAgLy8gdGhhdCBl
eGlzdHMgYmVsb3cgdGhpcyBsYXllciBieSB0aGF0IGFtb3VudC4gV2UgcmVjdXJzaXZlbHkgdHJh
Y2tEYW1hZ2UgZm9yIHRoZSBsYXllcnMgYmVsb3cgdGhpcyBwb2ludCwgc28gd2UgY2FuIGV4cGFu
ZCB0aGUKKyAgICAgICAgICAgIC8vIGRhbWFnZSBhbmQgbWVyZ2Ugd2l0aCBpdC4KKyAgICAgICAg
ICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0QmVsb3dGaWx0ZXJzID0gdHJhY2tEYW1hZ2VGcm9tQWN0
aXZlTGF5ZXJzKGxheWVyTGlzdCwgdGFyZ2V0U3VyZmFjZUxheWVySUQsIGxheWVySW5kZXggKyAx
KTsKKyAgICAgICAgICAgIGV4cGFuZERhbWFnZVJlY3RCeVBpeGVsT3V0c2V0cyhkYW1hZ2VSZWN0
QmVsb3dGaWx0ZXJzLCBwaXhlbE91dHNldHMpOworICAgICAgICAgICAgZGFtYWdlUmVjdC51bml0
ZShkYW1hZ2VSZWN0QmVsb3dGaWx0ZXJzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgfQogCiAgICAgcmV0dXJuIGRhbWFnZVJlY3Q7CkBAIC0zMTAsMTcgKzM1MSw2IEBAIHZv
aWQgQ0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJ
bXBsKiBsYXllciwgRmxvYXRSZWN0CiAgICAgfQogfQogCi12b2lkIENDRGFtYWdlVHJhY2tlcjo6
ZXhwYW5kRGFtYWdlUmVjdFdpdGhGb3JlZ3JvdW5kRmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKQotewotICAgIC8vIEZpbHRlcnMgY2FuIHNwcmVhZCBkYW1hZ2UgYXJvdW5k
IGluIHRoZSBzdXJmYWNlLgotICAgIGlmIChmaWx0ZXJzLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpKSB7Ci0gICAgICAgIGludCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQ7Ci0gICAgICAgIGZp
bHRlcnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOwotICAgICAgICBtX2N1
cnJlbnREYW1hZ2VSZWN0Lm1vdmUoLWxlZnQsIC10b3ApOwotICAgICAgICBtX2N1cnJlbnREYW1h
Z2VSZWN0LmV4cGFuZChsZWZ0ICsgcmlnaHQsIHRvcCArIGJvdHRvbSk7Ci0gICAgfQotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCmluZGV4IDJjZjAwZjg5OTk4M2E5MmVh
MDZkMzJiNmM2MzVkNGNkZjcwNmEwY2EuLjVkYmJjOTg4MGZjNDVlNzE3ZGM0Mjc3ZDVlMTc0ZDky
NTQ1YThmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oCkBAIC01MSw3ICs1MSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ0NEYW1hZ2VUcmFja2VyKCk7CiAKLSAgICBGbG9hdFJl
Y3QgdHJhY2tEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+
JiBsYXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CisgICAgRmxvYXRSZWN0IHRy
YWNrRGFtYWdlRnJvbUFjdGl2ZUxheWVycyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5
ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQsIGludCBzdGFydGluZ09mZnNldCA9IDAp
OwogICAgIEZsb2F0UmVjdCB0cmFja0RhbWFnZUZyb21TdXJmYWNlTWFzayhDQ0xheWVySW1wbCog
dGFyZ2V0U3VyZmFjZU1hc2tMYXllcik7CiAgICAgRmxvYXRSZWN0IHRyYWNrRGFtYWdlRnJvbUxl
ZnRvdmVyUmVjdHMoKTsKIApAQCAtNjIsOCArNjIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZXh0
ZW5kRGFtYWdlRm9yTGF5ZXIoQ0NMYXllckltcGwqLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJl
Y3QpOwogICAgIHZvaWQgZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCos
IEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCk7CiAKLSAgICB2b2lkIGV4cGFuZERhbWFnZVJl
Y3RXaXRoRm9yZWdyb3VuZEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotCiAgICAg
Ly8gVG8gY29ycmVjdGx5IHRyYWNrIGV4cG9zZWQgcmVnaW9ucywgdHdvIGhhc2h0YWJsZXMgb2Yg
cmVjdHMgYXJlIG1haW50YWluZWQuCiAgICAgLy8gVGhlICJjdXJyZW50IiBtYXAgaXMgdXNlZCB0
byBjb21wdXRlIGV4cG9zZWQgcmVnaW9ucyBvZiB0aGUgY3VycmVudCBmcmFtZSwgd2hpbGUKICAg
ICAvLyB0aGUgIm5leHQiIG1hcCBpcyB1c2VkIHRvIGNvbGxlY3QgbGF5ZXIgcmVjdHMgdGhhdCBh
cmUgdXNlZCBpbiB0aGUgbmV4dCBmcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCmluZGV4IDkyZTI0MTcyYThjZDZiMDc5
N2Y0NzU4MmQxNGNlNzY4NDBkOWEwNTMuLjg3MThlNTY3MmRmODk0ZGM1ZTRiMDA3MzRhYjYzM2Vk
YmI3NDNhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1h
Z2VUcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Rh
bWFnZVRyYWNrZXJUZXN0LmNwcApAQCAtMzIxLDcgKzMyMSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRy
YWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCbHVycmVkU3VyZmFjZSkKICAgICBDQ0xheWVySW1w
bCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOwogCiAgICAgRmlsdGVyT3BlcmF0
aW9ucyBmaWx0ZXJzOwotICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDUsIFdlYkNvcmU6OlBlcmNlbnQpLCBGaWx0ZXJPcGVy
YXRpb246OkJMVVIpKTsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmx1ckZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg1LCBXZWJDb3JlOjpGaXhlZCksIEZpbHRlck9wZXJh
dGlvbjo6QkxVUikpOwogICAgIGludCBvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0
b20sIG91dHNldExlZnQ7CiAgICAgZmlsdGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0
UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CiAgICAgcm9vdC0+c2V0RmlsdGVycyhm
aWx0ZXJzKTsKQEAgLTM0MSw2ICszNDEsNDAgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3Qs
IHZlcmlmeURhbWFnZUZvckJsdXJyZWRTdXJmYWNlKQogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VR
KGV4cGVjdGVkRGFtYWdlUmVjdCwgcm9vdERhbWFnZVJlY3QpOwogfQogCitURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQmFja2dyb3VuZEJsdXJyZWRDaGlsZCkKK3sK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0
aFR3b1N1cmZhY2VzKCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVu
KClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClb
MV0uZ2V0KCk7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5v
cGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNSwg
V2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICBpbnQgb3V0c2V0
VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgIGZpbHRlcnMu
Z2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExl
ZnQpOworICAgIGNoaWxkMS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICAv
LyBTZXR0aW5nIHRoZSBmaWx0ZXIgd2lsbCBkYW1hZ2UgdGhlIHdob2xlIHN1cmZhY2UuCisgICAg
ZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKworICAgIC8vIFNldHRpbmcgdGhl
IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUgY29ycmVzcG9uZGluZyBkYW1hZ2UgdG8gdGhl
IHN1cmZhY2UsIGJsdXJyZWQgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNoaWxkJ3MgYmFja2dy
b3VuZCBibHVyIGZpbHRlci4KKyAgICByb290LT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgxMDAs
IDExMCwgMTIsIDEzKSk7CisKKyAgICAvLyBTZXR0aW5nIHRoZSB1cGRhdGUgcmVjdCBvbiBjaGls
ZDIsIHdoaWNoIGlzIGFib3ZlIGNoaWxkMSwgd2lsbCBub3QgZ2V0IGJsdXJyZWQgYnkgY2hpbGQx
LCBzbyBpdCBkb2VzIG5vdCBuZWVkIHRvIGdldCBleHBhbmRlZC4KKyAgICBjaGlsZDItPnNldFVw
ZGF0ZVJlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpKTsKKworICAgIGVtdWxhdGVEcmF3aW5nT25l
RnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290
LT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsK
KyAgICAvLyBEYW1hZ2UgcG9zaXRpb24gb24gdGhlIHN1cmZhY2Ugc2hvdWxkIGJlIGEgY29tcG9z
aXRpb24gb2YgdGhlIGRhbWFnZSBvbiB0aGUgcm9vdCBhbmQgb24gY2hpbGQyLgorICAgIC8vIERh
bWFnZSBvbiB0aGUgcm9vdCBzaG91bGQgYmU6IHBvc2l0aW9uIG9mIHVwZGF0ZVJlY3QgKDEwMCwg
MTEwKSwgYnV0IGV4cGFuZGVkIGJ5IHRoZSBibHVyIG91dHNldHMuCisgICAgRmxvYXRSZWN0IGV4
cGVjdGVkRGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgxMDAsIDExMCwgMTIsIDEzKTsKKyAgICBleHBl
Y3RlZERhbWFnZVJlY3QubW92ZSgtb3V0c2V0TGVmdCwgLW91dHNldFRvcCk7CisgICAgZXhwZWN0
ZWREYW1hZ2VSZWN0LmV4cGFuZChvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIG91dHNldFRvcCAr
IG91dHNldEJvdHRvbSk7CisgICAgLy8gRGFtYWdlIG9uIGNoaWxkMiBzaG91bGQgYmU6IHBvc2l0
aW9uIG9mIHVwZGF0ZVJlY3Qgb2Zmc2V0IGJ5IHRoZSBjaGlsZCdzIHBvc2l0aW9uICgxMSwgMTEp
LCBhbmQgbm90IGV4cGFuZGVkIGJ5IGFueXRoaW5nLgorICAgIGV4cGVjdGVkRGFtYWdlUmVjdC51
bml0ZShGbG9hdFJlY3QoMTEsIDExLCAxLCAxKSk7CisgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEo
ZXhwZWN0ZWREYW1hZ2VSZWN0LCByb290RGFtYWdlUmVjdCk7Cit9CisKIFRFU1RfRihDQ0RhbWFn
ZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JBZGRpbmdBbmRSZW1vdmluZ0xheWVyKQogewog
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZUFuZFNldFVwVGVzdFRyZWVXaXRo
T25lU3VyZmFjZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138420</attachid>
            <date>2012-04-23 14:00:28 -0700</date>
            <delta_ts>2012-04-25 18:40:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84479-20120423140027.patch</filename>
            <type>text/plain</type>
            <size>10905</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0OTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTRkMGI5MTc2YTg0YzBl
YzcxYTM0NTgxMGM1MGNhYThiZGQ0NzI2MC4uYTQxOWFmNDM3NDkwYWU1ODRjZmIwMDcwZTliN2Q0
YWM0MDBlYTVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA0LTIwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU29t
ZSBiYWNrZ3JvdW5kIGZpbHRlcnMgcmVxdWlyZSBpbmZsYXRpbmcgZGFtYWdlIG9uIHRoZSBzdXJm
YWNlIGJlaGluZCB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDQ3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEEgbGF5ZXIgd2l0aCBhIGJhY2tncm91bmQgYmx1ciB3aWxsIGV4cGFuZCB0aGUgZGFt
YWdlIGZyb20gcGl4ZWxzIGluIHRoZQorICAgICAgICBzdXJmYWNlIGJlbG93IGl0LiBXZSBleHRl
bmQgdGhlIGRhbWFnZSB0cmFja2VyIHRvIGV4cGFuZCBkYW1hZ2UgaW4gYQorICAgICAgICBzdXJm
YWNlIGJlbG93IHN1Y2ggbGF5ZXJzLgorCisgICAgICAgIHRyYWNrRGFtYWdlRnJvbUFjdGl2ZUxh
eWVycygpIGJlY29tZXMgYSByZWN1cnNpdmUgZnVuY3Rpb24gd2hlbiBzdWNoIGEKKyAgICAgICAg
YmFja2dyb3VuZCBmaWx0ZXIgaXMgcmVhY2hlZCwgYWxsb3dpbmcgdXMgdG8gYmx1ciB0aGUgZGFt
YWdlIGJlaGluZCB0aGUKKyAgICAgICAgbGF5ZXIgYnV0IG5vdCBhYm92ZSBpdC4KKworICAgICAg
ICBVbml0IHRlc3Q6IENDRGFtYWdlVHJhY2tlclRlc3QudmVyaWZ5RGFtYWdlRm9yQmFja2dyb3Vu
ZEJsdXJyZWRDaGlsZAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEYW1hZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFuZFBpeGVsT3V0c2V0
c1dpdGhGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhw
YW5kRGFtYWdlUmVjdEJ5UGl4ZWxPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFuZERh
bWFnZVJlY3RXaXRoRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6
OnVwZGF0ZURhbWFnZVRyYWNraW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VU
cmFja2VyOjp0cmFja0RhbWFnZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oOgorICAgICAgICAoQ0NEYW1h
Z2VUcmFja2VyKToKKwogMjAxMi0wNC0yMyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExNDkyOS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggY2YyNDVkOGZkYWI0ZWEyODRiYzI1NDQ3OGEx
Zjk2MTQ5MWQyYWI2ZC4uYTQ2MDkxNGEwYjU5MTAxMDEwYzFiNzllMWQ3N2Q2MDkzZWNlOWNmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNC0yMCAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNvbWUgYmFja2dyb3VuZCBmaWx0ZXJzIHJlcXVpcmUgaW5mbGF0aW5nIGRhbWFnZSBvbiB0aGUg
c3VyZmFjZSBiZWhpbmQgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODQ0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OlRFU1RfRik6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisKIDIwMTItMDQtMjMg
IElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBQcm9wZXJseSBpZ25vcmUgdW5zdXBwb3J0ZWQgYW5pbWF0aW9uIGRpcmVjdGlvbnMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Rh
bWFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAppbmRleCA4OGYwNjg1YTIyNTNmZDk0NmU0YTdhMzlk
ZDk5ODhjN2Q1M2Q5NjZjLi5mNGU4ZWIwYzNmMjljMTU4M2NiMGYwM2FkYjQwMDNjZDEwN2ZjNTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0RhbWFnZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTU4LDYgKzU4LDE2IEBAIEND
RGFtYWdlVHJhY2tlcjo6fkNDRGFtYWdlVHJhY2tlcigpCiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
dm9pZCBleHBhbmREYW1hZ2VSZWN0V2l0aEZpbHRlcnMoRmxvYXRSZWN0JiBkYW1hZ2VSZWN0LCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIGludCB0b3AsIHJpZ2h0LCBi
b3R0b20sIGxlZnQ7CisgICAgZmlsdGVycy5nZXRPdXRzZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCk7CisgICAgSW50UmVjdCBwaXhlbE91dHNldHMoLWxlZnQsIC10b3AsIGxlZnQgKyByaWdo
dCwgdG9wICsgYm90dG9tKTsKKworICAgIGRhbWFnZVJlY3QubW92ZShwaXhlbE91dHNldHMueCgp
LCBwaXhlbE91dHNldHMueSgpKTsKKyAgICBkYW1hZ2VSZWN0LmV4cGFuZChwaXhlbE91dHNldHMu
d2lkdGgoKSwgcGl4ZWxPdXRzZXRzLmhlaWdodCgpKTsKK30KKwogdm9pZCBDQ0RhbWFnZVRyYWNr
ZXI6OnVwZGF0ZURhbWFnZVRyYWNraW5nU3RhdGUoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4m
IGxheWVyTGlzdCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklELCBib29sIHRhcmdldFN1cmZhY2VQ
cm9wZXJ0eUNoYW5nZWRPbmx5RnJvbURlc2NlbmRhbnQsIGNvbnN0IEludFJlY3QmIHRhcmdldFN1
cmZhY2VDb250ZW50UmVjdCwgQ0NMYXllckltcGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIsIGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CiAgICAgLy8KQEAgLTEzOSw3ICsxNDks
OCBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFtYWdlVHJhY2tpbmdTdGF0ZShjb25z
dCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZQogICAgICAgICBtX2N1cnJlbnREYW1hZ2VSZWN0
LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21TdXJmYWNlTWFzayk7CiAgICAgICAgIG1fY3VycmVu
dERhbWFnZVJlY3QudW5pdGVJZk5vblplcm8oZGFtYWdlRnJvbUxlZnRvdmVyUmVjdHMpOwogCi0g
ICAgICAgIGV4cGFuZERhbWFnZVJlY3RXaXRoRm9yZWdyb3VuZEZpbHRlcnMoZmlsdGVycyk7Cisg
ICAgICAgIGlmIChmaWx0ZXJzLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQorICAgICAgICAg
ICAgZXhwYW5kRGFtYWdlUmVjdFdpdGhGaWx0ZXJzKG1fY3VycmVudERhbWFnZVJlY3QsIGZpbHRl
cnMpOwogICAgIH0KIAogICAgIC8vIFRoZSBuZXh0IGhpc3RvcnkgbWFwIGJlY29tZXMgdGhlIGN1
cnJlbnQgbWFwIGZvciB0aGUgbmV4dCBmcmFtZS4KQEAgLTE2MSwxNyArMTcyLDMwIEBAIHZvaWQg
Q0NEYW1hZ2VUcmFja2VyOjpzYXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5ZXJJRCwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRTCiAgICAgbV9uZXh0UmVjdEhpc3RvcnktPnNldChsYXllcklELCB0
YXJnZXRTcGFjZVJlY3QpOwogfQogCi1GbG9hdFJlY3QgQ0NEYW1hZ2VUcmFja2VyOjp0cmFja0Rh
bWFnZUZyb21BY3RpdmVMYXllcnMoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlz
dCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKQorRmxvYXRSZWN0IENDRGFtYWdlVHJhY2tlcjo6
dHJhY2tEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+JiBs
YXllckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCwgaW50IHN0YXJ0aW5nT2Zmc2V0KQog
ewogICAgIEZsb2F0UmVjdCBkYW1hZ2VSZWN0ID0gRmxvYXRSZWN0KCk7CiAKLSAgICBmb3IgKHVu
c2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKyts
YXllckluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFtsYXll
ckluZGV4XTsKKyAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSBzdGFydGluZ09mZnNldDsg
bGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAv
LyBWaXNpdCBsYXllcnMgaW4gZnJvbnQtdG8tYmFjayBvcmRlci4KKyAgICAgICAgQ0NMYXllcklt
cGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVyTGlzdC5zaXplKCkgLSBsYXllckluZGV4IC0gMV07
CiAKLSAgICAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRy
aWJ1dGVzVG9UYXJnZXQ8Q0NMYXllckltcGw+KGxheWVyLCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCkp
CisgICAgICAgIGJvb2wgY29udHJpYnV0aW5nU3VyZmFjZSA9IENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8Q0NMYXllckltcGw+KGxheWVyLCB0
YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CisgICAgICAgIGlmIChjb250cmlidXRpbmdTdXJmYWNlKQog
ICAgICAgICAgICAgZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShsYXllciwgZGFtYWdlUmVj
dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4dGVuZERhbWFnZUZvckxheWVyKGxheWVy
LCBkYW1hZ2VSZWN0KTsKKworICAgICAgICBpZiAoY29udHJpYnV0aW5nU3VyZmFjZSAmJiBsYXll
ci0+YmFja2dyb3VuZEZpbHRlcnMoKS5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkgeworICAg
ICAgICAgICAgLy8gSWYgdGhlIGxheWVyIGhhcyBhIGJhY2tncm91bmQgZmlsdGVyLCB0aGlzIG1h
eSBjYXVzZSBwaXhlbHMgaW4gb3VyIHN1cmZhY2UgdG8gYmUgZXhwYW5kZWQsIHNvIHdlIHdpbGwg
bmVlZCB0byBleHBhbmQgYW55IGRhbWFnZQorICAgICAgICAgICAgLy8gdGhhdCBleGlzdHMgYmVs
b3cgdGhpcyBsYXllciBieSB0aGF0IGFtb3VudC4gV2UgcmVjdXJzaXZlbHkgdHJhY2tEYW1hZ2Ug
Zm9yIHRoZSBsYXllcnMgYmVsb3cgdGhpcyBwb2ludCwgc28gd2UgY2FuIGV4cGFuZCB0aGUKKyAg
ICAgICAgICAgIC8vIGRhbWFnZSBhbmQgbWVyZ2Ugd2l0aCBpdC4KKyAgICAgICAgICAgIEZsb2F0
UmVjdCBkYW1hZ2VSZWN0QmVsb3dGaWx0ZXJzID0gdHJhY2tEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJz
KGxheWVyTGlzdCwgdGFyZ2V0U3VyZmFjZUxheWVySUQsIGxheWVySW5kZXggKyAxKTsKKworICAg
ICAgICAgICAgZXhwYW5kRGFtYWdlUmVjdFdpdGhGaWx0ZXJzKGRhbWFnZVJlY3RCZWxvd0ZpbHRl
cnMsIGxheWVyLT5iYWNrZ3JvdW5kRmlsdGVycygpKTsKKyAgICAgICAgICAgIGRhbWFnZVJlY3Qu
dW5pdGUoZGFtYWdlUmVjdEJlbG93RmlsdGVycyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHJldHVybiBkYW1hZ2VSZWN0OwpAQCAtMzExLDE3ICszMzUsNiBA
QCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShDQ0xh
eWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdAogICAgIH0KIH0KIAotdm9pZCBDQ0RhbWFnZVRyYWNr
ZXI6OmV4cGFuZERhbWFnZVJlY3RXaXRoRm9yZWdyb3VuZEZpbHRlcnMoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICAvLyBGaWx0ZXJzIGNhbiBzcHJlYWQgZGFtYWdlIGFy
b3VuZCBpbiB0aGUgc3VyZmFjZS4KLSAgICBpZiAoZmlsdGVycy5oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMoKSkgewotICAgICAgICBpbnQgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0OwotICAgICAg
ICBmaWx0ZXJzLmdldE91dHNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAg
bV9jdXJyZW50RGFtYWdlUmVjdC5tb3ZlKC1sZWZ0LCAtdG9wKTsKLSAgICAgICAgbV9jdXJyZW50
RGFtYWdlUmVjdC5leHBhbmQobGVmdCArIHJpZ2h0LCB0b3AgKyBib3R0b20pOwotICAgIH0KLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaAppbmRleCAyY2YwMGY4OTk5ODNh
OTJlYTA2ZDMyYjZjNjM1ZDRjZGY3MDZhMGNhLi41ZGJiYzk4ODBmYzQ1ZTcxN2RjNDI3N2Q1ZTE3
NGQ5MjU0NWE4ZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaApAQCAtNTEsNyArNTEs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENDRGFtYWdlVHJhY2tlcigpOwogCi0gICAgRmxv
YXRSZWN0IHRyYWNrRGFtYWdlRnJvbUFjdGl2ZUxheWVycyhjb25zdCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgbGF5ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpOworICAgIEZsb2F0UmVj
dCB0cmFja0RhbWFnZUZyb21BY3RpdmVMYXllcnMoY29uc3QgVmVjdG9yPENDTGF5ZXJJbXBsKj4m
IGxheWVyTGlzdCwgaW50IHRhcmdldFN1cmZhY2VMYXllcklELCBpbnQgc3RhcnRpbmdPZmZzZXQg
PSAwKTsKICAgICBGbG9hdFJlY3QgdHJhY2tEYW1hZ2VGcm9tU3VyZmFjZU1hc2soQ0NMYXllcklt
cGwqIHRhcmdldFN1cmZhY2VNYXNrTGF5ZXIpOwogICAgIEZsb2F0UmVjdCB0cmFja0RhbWFnZUZy
b21MZWZ0b3ZlclJlY3RzKCk7CiAKQEAgLTYyLDggKzYyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGV4dGVuZERhbWFnZUZvckxheWVyKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1h
Z2VSZWN0KTsKICAgICB2b2lkIGV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllcklt
cGwqLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJlY3QpOwogCi0gICAgdm9pZCBleHBhbmREYW1h
Z2VSZWN0V2l0aEZvcmVncm91bmRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKLQog
ICAgIC8vIFRvIGNvcnJlY3RseSB0cmFjayBleHBvc2VkIHJlZ2lvbnMsIHR3byBoYXNodGFibGVz
IG9mIHJlY3RzIGFyZSBtYWludGFpbmVkLgogICAgIC8vIFRoZSAiY3VycmVudCIgbWFwIGlzIHVz
ZWQgdG8gY29tcHV0ZSBleHBvc2VkIHJlZ2lvbnMgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWxl
CiAgICAgLy8gdGhlICJuZXh0IiBtYXAgaXMgdXNlZCB0byBjb2xsZWN0IGxheWVyIHJlY3RzIHRo
YXQgYXJlIHVzZWQgaW4gdGhlIG5leHQgZnJhbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAppbmRleCBkY2NmN2U2NGY2ZTI5
YzQzMDUzNDBjOTQwMTllNzMxNjY0MjMzMzY4Li40MGY0MDU2ODg3NDAwMThmOTUzNDczYTE4ZmE2
MDU5NTI5NGE0MDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
RGFtYWdlVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTM2NSw3ICszNjUsNyBAQCBURVNUX0YoQ0NEYW1h
Z2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQmx1cnJlZFN1cmZhY2UpCiAgICAgQ0NMYXll
ckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKIAogICAgIEZpbHRlck9w
ZXJhdGlvbnMgZmlsdGVyczsKLSAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmx1ckZp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg1LCBXZWJDb3JlOjpQZXJjZW50KSwgRmlsdGVy
T3BlcmF0aW9uOjpCTFVSKSk7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNSwgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJP
cGVyYXRpb246OkJMVVIpKTsKICAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0
Qm90dG9tLCBvdXRzZXRMZWZ0OwogICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91
dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQpOwogICAgIHJvb3QtPnNldEZpbHRl
cnMoZmlsdGVycyk7CkBAIC0zODUsNiArMzg1LDQwIEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJU
ZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCbHVycmVkU3VyZmFjZSkKICAgICBFWFBFQ1RfRkxPQVRfUkVD
VF9FUShleHBlY3RlZERhbWFnZVJlY3QsIHJvb3REYW1hZ2VSZWN0KTsKIH0KIAorVEVTVF9GKEND
RGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckJhY2tncm91bmRCbHVycmVkQ2hpbGQp
Cit7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJl
ZVdpdGhUd29TdXJmYWNlcygpOworICAgIENDTGF5ZXJJbXBsKiBjaGlsZDEgPSByb290LT5jaGls
ZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBjaGlsZDIgPSByb290LT5jaGlsZHJl
bigpWzFdLmdldCgpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRl
cnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3Ro
KDUsIFdlYkNvcmU6OkZpeGVkKSwgRmlsdGVyT3BlcmF0aW9uOjpCTFVSKSk7CisgICAgaW50IG91
dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdDsKKyAgICBmaWx0
ZXJzLmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRz
ZXRMZWZ0KTsKKyAgICBjaGlsZDEtPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisg
ICAgLy8gU2V0dGluZyB0aGUgZmlsdGVyIHdpbGwgZGFtYWdlIHRoZSB3aG9sZSBzdXJmYWNlLgor
ICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICAvLyBTZXR0aW5n
IHRoZSB1cGRhdGUgcmVjdCBzaG91bGQgY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZGFtYWdlIHRv
IHRoZSBzdXJmYWNlLCBibHVycmVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBjaGlsZCdzIGJh
Y2tncm91bmQgYmx1ciBmaWx0ZXIuCisgICAgcm9vdC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3Qo
MTAwLCAxMTAsIDEyLCAxMykpOworCisgICAgLy8gU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgb24g
Y2hpbGQyLCB3aGljaCBpcyBhYm92ZSBjaGlsZDEsIHdpbGwgbm90IGdldCBibHVycmVkIGJ5IGNo
aWxkMSwgc28gaXQgZG9lcyBub3QgbmVlZCB0byBnZXQgZXhwYW5kZWQuCisgICAgY2hpbGQyLT5z
ZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAxKSk7CisKKyAgICBlbXVsYXRlRHJhd2lu
Z09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0ID0g
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0
KCk7CisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIG9uIHRoZSBzdXJmYWNlIHNob3VsZCBiZSBhIGNv
bXBvc2l0aW9uIG9mIHRoZSBkYW1hZ2Ugb24gdGhlIHJvb3QgYW5kIG9uIGNoaWxkMi4KKyAgICAv
LyBEYW1hZ2Ugb24gdGhlIHJvb3Qgc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1cGRhdGVSZWN0ICgx
MDAsIDExMCksIGJ1dCBleHBhbmRlZCBieSB0aGUgYmx1ciBvdXRzZXRzLgorICAgIEZsb2F0UmVj
dCBleHBlY3RlZERhbWFnZVJlY3QgPSBGbG9hdFJlY3QoMTAwLCAxMTAsIDEyLCAxMyk7CisgICAg
ZXhwZWN0ZWREYW1hZ2VSZWN0Lm1vdmUoLW91dHNldExlZnQsIC1vdXRzZXRUb3ApOworICAgIGV4
cGVjdGVkRGFtYWdlUmVjdC5leHBhbmQob3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCBvdXRzZXRU
b3AgKyBvdXRzZXRCb3R0b20pOworICAgIC8vIERhbWFnZSBvbiBjaGlsZDIgc2hvdWxkIGJlOiBw
b3NpdGlvbiBvZiB1cGRhdGVSZWN0IG9mZnNldCBieSB0aGUgY2hpbGQncyBwb3NpdGlvbiAoMTEs
IDExKSwgYW5kIG5vdCBleHBhbmRlZCBieSBhbnl0aGluZy4KKyAgICBleHBlY3RlZERhbWFnZVJl
Y3QudW5pdGUoRmxvYXRSZWN0KDExLCAxMSwgMSwgMSkpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKGV4cGVjdGVkRGFtYWdlUmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQorCiBURVNUX0YoQ0NE
YW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVtb3ZpbmdMYXllcikK
IHsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVl
V2l0aE9uZVN1cmZhY2UoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138921</attachid>
            <date>2012-04-25 18:40:16 -0700</date>
            <delta_ts>2012-04-26 10:24:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84479-20120425184014.patch</filename>
            <type>text/plain</type>
            <size>11542</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmIyOTIzZmY1YmNiNzQw
NmIwZDY4Mzk4NTk3OWIzYzhiNjRhMjQyZi4uZDZhZWIwNjUxYTFiN2RmNDkxZWUyZGMzZDU4NzQy
YjE0MDY4N2U4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTIwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU29t
ZSBiYWNrZ3JvdW5kIGZpbHRlcnMgcmVxdWlyZSBpbmZsYXRpbmcgZGFtYWdlIG9uIHRoZSBzdXJm
YWNlIGJlaGluZCB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDQ3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEEgbGF5ZXIgd2l0aCBhIGJhY2tncm91bmQgYmx1ciB3aWxsIGV4cGFuZCB0aGUgZGFt
YWdlIGZyb20gcGl4ZWxzIGluIHRoZQorICAgICAgICBzdXJmYWNlIGJlbG93IGl0LiBXZSBleHRl
bmQgdGhlIGRhbWFnZSB0cmFja2VyIHRvIGV4cGFuZCBkYW1hZ2UgaW4gYQorICAgICAgICBzdXJm
YWNlIGJlbG93IHN1Y2ggbGF5ZXJzLgorCisgICAgICAgIFVuaXQgdGVzdDogQ0NEYW1hZ2VUcmFj
a2VyVGVzdC52ZXJpZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhwYW5kUGl4ZWxPdXRzZXRzV2l0aEZpbHRlcnMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmREYW1hZ2VSZWN0SW5zaWRlUmVjdFdp
dGhGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFuZERhbWFnZVJlY3RXaXRoRmlsdGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnVwZGF0ZURhbWFnZVRyYWNr
aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjp0cmFja0RhbWFn
ZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5oOgorICAgICAgICAoQ0NEYW1hZ2VUcmFja2VyKToKKwogMjAx
Mi0wNC0yNSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAog
ICAgICAgICBOb3QgcmV2aWV3ZWQsIGZpeCBXaW5kb3dzIGJ1aWxkIGFmdGVyIHIxMTUyMTUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY4MTlmZWM1MjYzYTVjNmZjZTU2YTNlNmVmN2Fk
Mzc1MzFlNDAyODQuLmQ0NTAxMmNmNGJjODVkZTI0YjVmM2EwNTZmN2I5NWQ3MDg5NzM2OTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQtMjAgIERh
bmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
b21lIGJhY2tncm91bmQgZmlsdGVycyByZXF1aXJlIGluZmxhdGluZyBkYW1hZ2Ugb24gdGhlIHN1
cmZhY2UgYmVoaW5kIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg0NDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB0ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpURVNUX0YpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorCiAyMDEyLTA0LTI1ICBN
YXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1d
IENhbGwgYWN0dWFsTWVtb3J5VXNhZ2VNQiBkaXJlY3RseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJh
Y2tlci5jcHAKaW5kZXggODhmMDY4NWEyMjUzZmQ5NDZlNGE3YTM5ZGQ5OTg4YzdkNTNkOTY2Yy4u
ZjgwN2RmNzJlODY4OGI3MDViNWQ3OTkzNzBkMDY4MTcxYzhlNDM5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuY3BwCkBAIC01OCw2ICs1OCwyNSBAQCBDQ0RhbWFnZVRyYWNrZXI6On5D
Q0RhbWFnZVRyYWNrZXIoKQogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZXhwYW5kRGFtYWdl
UmVjdFdpdGhGaWx0ZXJzKEZsb2F0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3sKKyAgICBpbnQgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0OworICAg
IGZpbHRlcnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOworICAgIEludFJl
Y3QgcGl4ZWxPdXRzZXRzKC1sZWZ0LCAtdG9wLCBsZWZ0ICsgcmlnaHQsIHRvcCArIGJvdHRvbSk7
CisKKyAgICBkYW1hZ2VSZWN0Lm1vdmUocGl4ZWxPdXRzZXRzLngoKSwgcGl4ZWxPdXRzZXRzLnko
KSk7CisgICAgZGFtYWdlUmVjdC5leHBhbmQocGl4ZWxPdXRzZXRzLndpZHRoKCksIHBpeGVsT3V0
c2V0cy5oZWlnaHQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHBhbmREYW1hZ2VSZWN0
SW5zaWRlUmVjdFdpdGhGaWx0ZXJzKEZsb2F0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWN0LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAg
IEZsb2F0UmVjdCBleHBhbmRlZERhbWFnZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgIGV4cGFuZERh
bWFnZVJlY3RXaXRoRmlsdGVycyhleHBhbmRlZERhbWFnZVJlY3QsIGZpbHRlcnMpOworICAgIGV4
cGFuZGVkRGFtYWdlUmVjdC5pbnRlcnNlY3QoZmlsdGVyUmVjdCk7CisKKyAgICBkYW1hZ2VSZWN0
LnVuaXRlKGV4cGFuZGVkRGFtYWdlUmVjdCk7Cit9CisKIHZvaWQgQ0NEYW1hZ2VUcmFja2VyOjp1
cGRhdGVEYW1hZ2VUcmFja2luZ1N0YXRlKGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXll
ckxpc3QsIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCwgYm9vbCB0YXJnZXRTdXJmYWNlUHJvcGVy
dHlDaGFuZ2VkT25seUZyb21EZXNjZW5kYW50LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNl
Q29udGVudFJlY3QsIENDTGF5ZXJJbXBsKiB0YXJnZXRTdXJmYWNlTWFza0xheWVyLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogewogICAgIC8vCkBAIC0xMzksNyArMTU4LDggQEAg
dm9pZCBDQ0RhbWFnZVRyYWNrZXI6OnVwZGF0ZURhbWFnZVRyYWNraW5nU3RhdGUoY29uc3QgVmVj
dG9yPENDTGF5ZXJJbXBsKj4mIGxheWUKICAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdC51bml0
ZUlmTm9uWmVybyhkYW1hZ2VGcm9tU3VyZmFjZU1hc2spOwogICAgICAgICBtX2N1cnJlbnREYW1h
Z2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZUZyb21MZWZ0b3ZlclJlY3RzKTsKIAotICAgICAg
ICBleHBhbmREYW1hZ2VSZWN0V2l0aEZvcmVncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworICAgICAg
ICBpZiAoZmlsdGVycy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgICAgIGV4
cGFuZERhbWFnZVJlY3RXaXRoRmlsdGVycyhtX2N1cnJlbnREYW1hZ2VSZWN0LCBmaWx0ZXJzKTsK
ICAgICB9CiAKICAgICAvLyBUaGUgbmV4dCBoaXN0b3J5IG1hcCBiZWNvbWVzIHRoZSBjdXJyZW50
IG1hcCBmb3IgdGhlIG5leHQgZnJhbWUuCkBAIC0xNjYsNiArMTg2LDcgQEAgRmxvYXRSZWN0IEND
RGFtYWdlVHJhY2tlcjo6dHJhY2tEYW1hZ2VGcm9tQWN0aXZlTGF5ZXJzKGNvbnN0IFZlY3RvcjxD
Q0xheWVySW1wbCoKICAgICBGbG9hdFJlY3QgZGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5z
aXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAvLyBWaXNpdCBsYXllcnMgaW4gYmFjay10
by1mcm9udCBvcmRlci4KICAgICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xh
eWVySW5kZXhdOwogCiAgICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1
cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0PENDTGF5ZXJJbXBsPihsYXllciwgdGFyZ2V0U3VyZmFj
ZUxheWVySUQpKQpAQCAtMjY5LDYgKzI5MCwxMSBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0
ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdAog
ICAgIEZsb2F0UmVjdCBzdXJmYWNlUmVjdEluVGFyZ2V0U3BhY2UgPSByZW5kZXJTdXJmYWNlLT5k
cmF3YWJsZUNvbnRlbnRSZWN0KCk7IC8vIGFscmVhZHkgaW5jbHVkZXMgcmVwbGljYSBpZiBpdCBl
eGlzdHMuCiAgICAgc2F2ZVJlY3RGb3JOZXh0RnJhbWUobGF5ZXItPmlkKCksIHN1cmZhY2VSZWN0
SW5UYXJnZXRTcGFjZSk7CiAKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaGFzIGEgYmFja2dyb3VuZCBm
aWx0ZXIsIHRoaXMgbWF5IGNhdXNlIHBpeGVscyBpbiBvdXIgc3VyZmFjZSB0byBiZSBleHBhbmRl
ZCwgc28gd2Ugd2lsbCBuZWVkIHRvIGV4cGFuZCBhbnkgZGFtYWdlCisgICAgLy8gdGhhdCBleGlz
dHMgYmVsb3cgdGhpcyBsYXllciBieSB0aGF0IGFtb3VudC4KKyAgICBpZiAobGF5ZXItPmJhY2tn
cm91bmRGaWx0ZXJzKCkuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCisgICAgICAgIGV4cGFu
ZERhbWFnZVJlY3RJbnNpZGVSZWN0V2l0aEZpbHRlcnModGFyZ2V0RGFtYWdlUmVjdCwgc3VyZmFj
ZVJlY3RJblRhcmdldFNwYWNlLCBsYXllci0+YmFja2dyb3VuZEZpbHRlcnMoKSk7CisKICAgICBG
bG9hdFJlY3QgZGFtYWdlUmVjdEluTG9jYWxTcGFjZTsKICAgICBpZiAoc3VyZmFjZUlzTmV3IHx8
IHJlbmRlclN1cmZhY2UtPnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWQoKSkgewogICAgICAgICAvLyBU
aGUgZW50aXJlIHN1cmZhY2UgY29udHJpYnV0ZXMgZGFtYWdlLgpAQCAtMzExLDE3ICszMzcsNiBA
QCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShDQ0xh
eWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdAogICAgIH0KIH0KIAotdm9pZCBDQ0RhbWFnZVRyYWNr
ZXI6OmV4cGFuZERhbWFnZVJlY3RXaXRoRm9yZWdyb3VuZEZpbHRlcnMoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICAvLyBGaWx0ZXJzIGNhbiBzcHJlYWQgZGFtYWdlIGFy
b3VuZCBpbiB0aGUgc3VyZmFjZS4KLSAgICBpZiAoZmlsdGVycy5oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMoKSkgewotICAgICAgICBpbnQgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0OwotICAgICAg
ICBmaWx0ZXJzLmdldE91dHNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAg
bV9jdXJyZW50RGFtYWdlUmVjdC5tb3ZlKC1sZWZ0LCAtdG9wKTsKLSAgICAgICAgbV9jdXJyZW50
RGFtYWdlUmVjdC5leHBhbmQobGVmdCArIHJpZ2h0LCB0b3AgKyBib3R0b20pOwotICAgIH0KLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaAppbmRleCAyY2YwMGY4OTk5ODNh
OTJlYTA2ZDMyYjZjNjM1ZDRjZGY3MDZhMGNhLi5mYWRlOGNkZmYzNmM2YWQxZTUxNzM4NTA3YjBk
N2NhZmMzMDdkMjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuaApAQCAtNjIsOCArNjIs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgZXh0ZW5kRGFtYWdlRm9yTGF5ZXIoQ0NMYXllckltcGwq
LCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJlY3QpOwogICAgIHZvaWQgZXh0ZW5kRGFtYWdlRm9y
UmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCosIEZsb2F0UmVjdCYgdGFyZ2V0RGFtYWdlUmVjdCk7
CiAKLSAgICB2b2lkIGV4cGFuZERhbWFnZVJlY3RXaXRoRm9yZWdyb3VuZEZpbHRlcnMoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYpOwotCiAgICAgLy8gVG8gY29ycmVjdGx5IHRyYWNrIGV4cG9zZWQg
cmVnaW9ucywgdHdvIGhhc2h0YWJsZXMgb2YgcmVjdHMgYXJlIG1haW50YWluZWQuCiAgICAgLy8g
VGhlICJjdXJyZW50IiBtYXAgaXMgdXNlZCB0byBjb21wdXRlIGV4cG9zZWQgcmVnaW9ucyBvZiB0
aGUgY3VycmVudCBmcmFtZSwgd2hpbGUKICAgICAvLyB0aGUgIm5leHQiIG1hcCBpcyB1c2VkIHRv
IGNvbGxlY3QgbGF5ZXIgcmVjdHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgbmV4dCBmcmFtZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3Qu
Y3BwCmluZGV4IGRjY2Y3ZTY0ZjZlMjljNDMwNTM0MGM5NDAxOWU3MzE2NjQyMzMzNjguLjYwMDY3
MDU0N2M3MGU1NDg2M2VmN2Y5M2Y1Y2NhNzQzYTA2NjU3OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcApAQCAtMzY1LDcg
KzM2NSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCbHVy
cmVkU3VyZmFjZSkKICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBd
LmdldCgpOwogCiAgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOwotICAgIGZpbHRlcnMub3Bl
cmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDUsIFdl
YkNvcmU6OlBlcmNlbnQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICBmaWx0ZXJzLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg1LCBX
ZWJDb3JlOjpGaXhlZCksIEZpbHRlck9wZXJhdGlvbjo6QkxVUikpOwogICAgIGludCBvdXRzZXRU
b3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQ7CiAgICAgZmlsdGVycy5n
ZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVm
dCk7CiAgICAgcm9vdC0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKQEAgLTM4NSw2ICszODUsNzUgQEAg
VEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckJsdXJyZWRTdXJmYWNl
KQogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVkRGFtYWdlUmVjdCwgcm9vdERhbWFn
ZVJlY3QpOwogfQogCitURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9y
QmFja2dyb3VuZEJsdXJyZWRDaGlsZCkKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aFR3b1N1cmZhY2VzKCk7CisgICAgQ0NMYXllcklt
cGwqIGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXllckltcGwq
IGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV0uZ2V0KCk7CisKKyAgICBGaWx0ZXJPcGVyYXRp
b25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRp
b246OkJMVVIpKTsKKyAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9t
LCBvdXRzZXRMZWZ0OworICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91dHNldFJp
Z2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQpOworICAgIGNoaWxkMS0+c2V0QmFja2dyb3Vu
ZEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICAvLyBTZXR0aW5nIHRoZSBmaWx0ZXIgd2lsbCBkYW1h
Z2UgdGhlIHdob2xlIHN1cmZhY2UuCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290Lmdl
dCgpKTsKKworICAgIC8vIFNldHRpbmcgdGhlIHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUg
Y29ycmVzcG9uZGluZyBkYW1hZ2UgdG8gdGhlCisgICAgLy8gc3VyZmFjZSwgYmx1cnJlZCBiYXNl
ZCBvbiB0aGUgc2l6ZSBvZiB0aGUgY2hpbGQncyBiYWNrZ3JvdW5kIGJsdXIgZmlsdGVyLgorICAg
IHJvb3QtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDI5NywgMjk3LCAyLCAyKSk7CisKKyAgICBl
bXVsYXRlRHJhd2luZ09uZUZyYW1lKHJvb3QuZ2V0KCkpOworCisgICAgRmxvYXRSZWN0IHJvb3RE
YW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJl
bnREYW1hZ2VSZWN0KCk7CisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIG9uIHRoZSBzdXJmYWNlIHNo
b3VsZCBiZSBhIGNvbXBvc2l0aW9uIG9mIHRoZSBkYW1hZ2Ugb24gdGhlIHJvb3QgYW5kIG9uIGNo
aWxkMi4KKyAgICAvLyBEYW1hZ2Ugb24gdGhlIHJvb3Qgc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1
cGRhdGVSZWN0ICgyOTcsIDI5NyksIGJ1dCBleHBhbmRlZCBieSB0aGUgYmx1ciBvdXRzZXRzLgor
ICAgIEZsb2F0UmVjdCBleHBlY3RlZERhbWFnZVJlY3QgPSBGbG9hdFJlY3QoMjk3LCAyOTcsIDIs
IDIpOworICAgIGV4cGVjdGVkRGFtYWdlUmVjdC5tb3ZlKC1vdXRzZXRMZWZ0LCAtb3V0c2V0VG9w
KTsKKyAgICBleHBlY3RlZERhbWFnZVJlY3QuZXhwYW5kKG91dHNldExlZnQgKyBvdXRzZXRSaWdo
dCwgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShl
eHBlY3RlZERhbWFnZVJlY3QsIHJvb3REYW1hZ2VSZWN0KTsKKworICAgIC8vIFNldHRpbmcgdGhl
IHVwZGF0ZSByZWN0IHNob3VsZCBjYXVzZSB0aGUgY29ycmVzcG9uZGluZyBkYW1hZ2UgdG8gdGhl
CisgICAgLy8gc3VyZmFjZSwgYmx1cnJlZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgY2hpbGQn
cyBiYWNrZ3JvdW5kIGJsdXIgZmlsdGVyLgorICAgIC8vIFNpbmNlIHRoZSBkYW1hZ2UgZXh0ZW5k
cyB0byB0aGUgcmlnaHQvYm90dG9tIG91dHNpZGUgb2YgdGhlIGJsdXJlZAorICAgIC8vIGxheWVy
LCBvbmx5IHRoZSBsZWZ0L3RvcCBzaG91bGQgZW5kIHVwIGV4cGFuZGVkLgorICAgIHJvb3QtPnNl
dFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDI5NywgMjk3LCAzMCwgMzApKTsKKworICAgIGVtdWxhdGVE
cmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwor
ICAgIC8vIERhbWFnZSBwb3NpdGlvbiBvbiB0aGUgc3VyZmFjZSBzaG91bGQgYmUgYSBjb21wb3Np
dGlvbiBvZiB0aGUgZGFtYWdlIG9uIHRoZSByb290IGFuZCBvbiBjaGlsZDIuCisgICAgLy8gRGFt
YWdlIG9uIHRoZSByb290IHNob3VsZCBiZTogcG9zaXRpb24gb2YgdXBkYXRlUmVjdCAoMjk3LCAy
OTcpLCBidXQgZXhwYW5kZWQgb24gdGhlIGxlZnQvdG9wCisgICAgLy8gYnkgdGhlIGJsdXIgb3V0
c2V0cy4KKyAgICBleHBlY3RlZERhbWFnZVJlY3QgPSBGbG9hdFJlY3QoMjk3LCAyOTcsIDMwLCAz
MCk7CisgICAgZXhwZWN0ZWREYW1hZ2VSZWN0Lm1vdmUoLW91dHNldExlZnQsIC1vdXRzZXRUb3Ap
OworICAgIGV4cGVjdGVkRGFtYWdlUmVjdC5leHBhbmQob3V0c2V0TGVmdCwgb3V0c2V0VG9wKTsK
KyAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZERhbWFnZVJlY3QsIHJvb3REYW1hZ2VS
ZWN0KTsKKworICAgIC8vIFNldHRpbmcgdGhpcyB1cGRhdGUgcmVjdCBvdXRzaWRlIHRoZSBjb250
ZW50Qm91bmRzIG9mIHRoZSBibHVycmVkIGNoaWxkMQorICAgIC8vIHdpbGwgbm90IGNhdXNlIGl0
IHRvIGJlIGV4cGFuZGVkLgorICAgIHJvb3QtPnNldFVwZGF0ZVJlY3QoRmxvYXRSZWN0KDMwLCAz
MCwgMiwgMikpOworCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsKKwor
ICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2Vy
KCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgLy8gRGFtYWdlIG9uIHRoZSByb290IHNob3Vs
ZCBiZTogcG9zaXRpb24gb2YgdXBkYXRlUmVjdCAoMzAsIDMwKSwgbm90IGV4cGFuZGVkLgorICAg
IGV4cGVjdGVkRGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgzMCwgMzAsIDIsIDIpOworICAgIEVYUEVD
VF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVkRGFtYWdlUmVjdCwgcm9vdERhbWFnZVJlY3QpOworCisg
ICAgLy8gU2V0dGluZyB0aGUgdXBkYXRlIHJlY3Qgb24gY2hpbGQyLCB3aGljaCBpcyBhYm92ZSBj
aGlsZDEsIHdpbGwgbm90IGdldAorICAgIC8vIGJsdXJyZWQgYnkgY2hpbGQxLCBzbyBpdCBkb2Vz
IG5vdCBuZWVkIHRvIGdldCBleHBhbmRlZC4KKyAgICBjaGlsZDItPnNldFVwZGF0ZVJlY3QoRmxv
YXRSZWN0KDAsIDAsIDEsIDEpKTsKKworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5n
ZXQoKSk7CisKKyAgICByb290RGFtYWdlUmVjdCA9IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFt
YWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOworICAgIC8vIERhbWFnZSBvbiBjaGls
ZDIgc2hvdWxkIGJlOiBwb3NpdGlvbiBvZiB1cGRhdGVSZWN0IG9mZnNldCBieSB0aGUgY2hpbGQn
cyBwb3NpdGlvbiAoMTEsIDExKSwgYW5kIG5vdCBleHBhbmRlZCBieSBhbnl0aGluZy4KKyAgICBl
eHBlY3RlZERhbWFnZVJlY3QgPSBGbG9hdFJlY3QoMTEsIDExLCAxLCAxKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfUkVDVF9FUShleHBlY3RlZERhbWFnZVJlY3QsIHJvb3REYW1hZ2VSZWN0KTsKK30KKwog
VEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvckFkZGluZ0FuZFJlbW92
aW5nTGF5ZXIpCiB7CiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlQW5kU2V0
VXBUZXN0VHJlZVdpdGhPbmVTdXJmYWNlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139022</attachid>
            <date>2012-04-26 10:24:22 -0700</date>
            <delta_ts>2012-04-26 19:16:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84479-20120426102421.patch</filename>
            <type>text/plain</type>
            <size>11481</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmIyOTIzZmY1YmNiNzQw
NmIwZDY4Mzk4NTk3OWIzYzhiNjRhMjQyZi4uZDZhZWIwNjUxYTFiN2RmNDkxZWUyZGMzZDU4NzQy
YjE0MDY4N2U4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTIwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU29t
ZSBiYWNrZ3JvdW5kIGZpbHRlcnMgcmVxdWlyZSBpbmZsYXRpbmcgZGFtYWdlIG9uIHRoZSBzdXJm
YWNlIGJlaGluZCB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDQ3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEEgbGF5ZXIgd2l0aCBhIGJhY2tncm91bmQgYmx1ciB3aWxsIGV4cGFuZCB0aGUgZGFt
YWdlIGZyb20gcGl4ZWxzIGluIHRoZQorICAgICAgICBzdXJmYWNlIGJlbG93IGl0LiBXZSBleHRl
bmQgdGhlIGRhbWFnZSB0cmFja2VyIHRvIGV4cGFuZCBkYW1hZ2UgaW4gYQorICAgICAgICBzdXJm
YWNlIGJlbG93IHN1Y2ggbGF5ZXJzLgorCisgICAgICAgIFVuaXQgdGVzdDogQ0NEYW1hZ2VUcmFj
a2VyVGVzdC52ZXJpZnlEYW1hZ2VGb3JCYWNrZ3JvdW5kQmx1cnJlZENoaWxkCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhwYW5kUGl4ZWxPdXRzZXRzV2l0aEZpbHRlcnMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpleHBhbmREYW1hZ2VSZWN0SW5zaWRlUmVjdFdp
dGhGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFuZERhbWFnZVJlY3RXaXRoRmlsdGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OnVwZGF0ZURhbWFnZVRyYWNr
aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjp0cmFja0RhbWFn
ZUZyb21BY3RpdmVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGFtYWdlVHJhY2tlci5oOgorICAgICAgICAoQ0NEYW1hZ2VUcmFja2VyKToKKwogMjAx
Mi0wNC0yNSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAog
ICAgICAgICBOb3QgcmV2aWV3ZWQsIGZpeCBXaW5kb3dzIGJ1aWxkIGFmdGVyIHIxMTUyMTUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY4MTlmZWM1MjYzYTVjNmZjZTU2YTNlNmVmN2Fk
Mzc1MzFlNDAyODQuLmQ0NTAxMmNmNGJjODVkZTI0YjVmM2EwNTZmN2I5NWQ3MDg5NzM2OTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQtMjAgIERh
bmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
b21lIGJhY2tncm91bmQgZmlsdGVycyByZXF1aXJlIGluZmxhdGluZyBkYW1hZ2Ugb24gdGhlIHN1
cmZhY2UgYmVoaW5kIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg0NDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB0ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpURVNUX0YpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorCiAyMDEyLTA0LTI1ICBN
YXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1d
IENhbGwgYWN0dWFsTWVtb3J5VXNhZ2VNQiBkaXJlY3RseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJh
Y2tlci5jcHAKaW5kZXggODhmMDY4NWEyMjUzZmQ5NDZlNGE3YTM5ZGQ5OTg4YzdkNTNkOTY2Yy4u
OTRiYmMxZGM1NTMyMWRjYmU3NGIyZGZmYmVhMjU4MzA4ZDFjODgzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuY3BwCkBAIC01OCw2ICs1OCwyMyBAQCBDQ0RhbWFnZVRyYWNrZXI6On5D
Q0RhbWFnZVRyYWNrZXIoKQogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZXhwYW5kRGFtYWdl
UmVjdFdpdGhGaWx0ZXJzKEZsb2F0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3sKKyAgICBpbnQgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0OworICAg
IGZpbHRlcnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOworICAgIGRhbWFn
ZVJlY3QubW92ZSgtbGVmdCwgLXRvcCk7CisgICAgZGFtYWdlUmVjdC5leHBhbmQobGVmdCArIHJp
Z2h0LCB0b3AgKyBib3R0b20pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXhwYW5kRGFtYWdl
UmVjdEluc2lkZVJlY3RXaXRoRmlsdGVycyhGbG9hdFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVjdCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sK
KyAgICBGbG9hdFJlY3QgZXhwYW5kZWREYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsKKyAgICBleHBh
bmREYW1hZ2VSZWN0V2l0aEZpbHRlcnMoZXhwYW5kZWREYW1hZ2VSZWN0LCBmaWx0ZXJzKTsKKyAg
ICBleHBhbmRlZERhbWFnZVJlY3QuaW50ZXJzZWN0KGZpbHRlclJlY3QpOworCisgICAgZGFtYWdl
UmVjdC51bml0ZShleHBhbmRlZERhbWFnZVJlY3QpOworfQorCiB2b2lkIENDRGFtYWdlVHJhY2tl
cjo6dXBkYXRlRGFtYWdlVHJhY2tpbmdTdGF0ZShjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYg
bGF5ZXJMaXN0LCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQsIGJvb2wgdGFyZ2V0U3VyZmFjZVBy
b3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2VuZGFudCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0U3Vy
ZmFjZUNvbnRlbnRSZWN0LCBDQ0xheWVySW1wbCogdGFyZ2V0U3VyZmFjZU1hc2tMYXllciwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIHsKICAgICAvLwpAQCAtMTM5LDcgKzE1Niw4
IEBAIHZvaWQgQ0NEYW1hZ2VUcmFja2VyOjp1cGRhdGVEYW1hZ2VUcmFja2luZ1N0YXRlKGNvbnN0
IFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllCiAgICAgICAgIG1fY3VycmVudERhbWFnZVJlY3Qu
dW5pdGVJZk5vblplcm8oZGFtYWdlRnJvbVN1cmZhY2VNYXNrKTsKICAgICAgICAgbV9jdXJyZW50
RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VGcm9tTGVmdG92ZXJSZWN0cyk7CiAKLSAg
ICAgICAgZXhwYW5kRGFtYWdlUmVjdFdpdGhGb3JlZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKKyAg
ICAgICAgaWYgKGZpbHRlcnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCisgICAgICAgICAg
ICBleHBhbmREYW1hZ2VSZWN0V2l0aEZpbHRlcnMobV9jdXJyZW50RGFtYWdlUmVjdCwgZmlsdGVy
cyk7CiAgICAgfQogCiAgICAgLy8gVGhlIG5leHQgaGlzdG9yeSBtYXAgYmVjb21lcyB0aGUgY3Vy
cmVudCBtYXAgZm9yIHRoZSBuZXh0IGZyYW1lLgpAQCAtMTY2LDYgKzE4NCw3IEBAIEZsb2F0UmVj
dCBDQ0RhbWFnZVRyYWNrZXI6OnRyYWNrRGFtYWdlRnJvbUFjdGl2ZUxheWVycyhjb25zdCBWZWN0
b3I8Q0NMYXllckltcGwqCiAgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsK
IAogICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxp
c3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgLy8gVmlzaXQgbGF5ZXJzIGluIGJh
Y2stdG8tZnJvbnQgb3JkZXIuCiAgICAgICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlz
dFtsYXllckluZGV4XTsKIAogICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5k
ZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1
cmZhY2VMYXllcklEKSkKQEAgLTI2OSw2ICsyODgsMTEgQEAgdm9pZCBDQ0RhbWFnZVRyYWNrZXI6
OmV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqIGxheWVyLCBGbG9hdFJl
Y3QKICAgICBGbG9hdFJlY3Qgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNlID0gcmVuZGVyU3VyZmFj
ZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpOyAvLyBhbHJlYWR5IGluY2x1ZGVzIHJlcGxpY2EgaWYg
aXQgZXhpc3RzLgogICAgIHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5pZCgpLCBzdXJmYWNl
UmVjdEluVGFyZ2V0U3BhY2UpOwogCisgICAgLy8gSWYgdGhlIGxheWVyIGhhcyBhIGJhY2tncm91
bmQgZmlsdGVyLCB0aGlzIG1heSBjYXVzZSBwaXhlbHMgaW4gb3VyIHN1cmZhY2UgdG8gYmUgZXhw
YW5kZWQsIHNvIHdlIHdpbGwgbmVlZCB0byBleHBhbmQgYW55IGRhbWFnZQorICAgIC8vIHRoYXQg
ZXhpc3RzIGJlbG93IHRoaXMgbGF5ZXIgYnkgdGhhdCBhbW91bnQuCisgICAgaWYgKGxheWVyLT5i
YWNrZ3JvdW5kRmlsdGVycygpLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQorICAgICAgICBl
eHBhbmREYW1hZ2VSZWN0SW5zaWRlUmVjdFdpdGhGaWx0ZXJzKHRhcmdldERhbWFnZVJlY3QsIHN1
cmZhY2VSZWN0SW5UYXJnZXRTcGFjZSwgbGF5ZXItPmJhY2tncm91bmRGaWx0ZXJzKCkpOworCiAg
ICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJbkxvY2FsU3BhY2U7CiAgICAgaWYgKHN1cmZhY2VJc05l
dyB8fCByZW5kZXJTdXJmYWNlLT5zdXJmYWNlUHJvcGVydHlDaGFuZ2VkKCkpIHsKICAgICAgICAg
Ly8gVGhlIGVudGlyZSBzdXJmYWNlIGNvbnRyaWJ1dGVzIGRhbWFnZS4KQEAgLTMxMSwxNyArMzM1
LDYgQEAgdm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvclJlbmRlclN1cmZhY2Uo
Q0NMYXllckltcGwqIGxheWVyLCBGbG9hdFJlY3QKICAgICB9CiB9CiAKLXZvaWQgQ0NEYW1hZ2VU
cmFja2VyOjpleHBhbmREYW1hZ2VSZWN0V2l0aEZvcmVncm91bmRGaWx0ZXJzKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgLy8gRmlsdGVycyBjYW4gc3ByZWFkIGRhbWFn
ZSBhcm91bmQgaW4gdGhlIHN1cmZhY2UuCi0gICAgaWYgKGZpbHRlcnMuaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCkpIHsKLSAgICAgICAgaW50IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdDsKLSAg
ICAgICAgZmlsdGVycy5nZXRPdXRzZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7Ci0gICAg
ICAgIG1fY3VycmVudERhbWFnZVJlY3QubW92ZSgtbGVmdCwgLXRvcCk7Ci0gICAgICAgIG1fY3Vy
cmVudERhbWFnZVJlY3QuZXhwYW5kKGxlZnQgKyByaWdodCwgdG9wICsgYm90dG9tKTsKLSAgICB9
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKaW5kZXggMmNmMDBmODk5
OTgzYTkyZWEwNmQzMmI2YzYzNWQ0Y2RmNzA2YTBjYS4uZmFkZThjZGZmMzZjNmFkMWU1MTczODUw
N2IwZDdjYWZjMzA3ZDI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmgKQEAgLTYyLDgg
KzYyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4dGVuZERhbWFnZUZvckxheWVyKENDTGF5ZXJJ
bXBsKiwgRmxvYXRSZWN0JiB0YXJnZXREYW1hZ2VSZWN0KTsKICAgICB2b2lkIGV4dGVuZERhbWFn
ZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqLCBGbG9hdFJlY3QmIHRhcmdldERhbWFnZVJl
Y3QpOwogCi0gICAgdm9pZCBleHBhbmREYW1hZ2VSZWN0V2l0aEZvcmVncm91bmRGaWx0ZXJzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKLQogICAgIC8vIFRvIGNvcnJlY3RseSB0cmFjayBleHBv
c2VkIHJlZ2lvbnMsIHR3byBoYXNodGFibGVzIG9mIHJlY3RzIGFyZSBtYWludGFpbmVkLgogICAg
IC8vIFRoZSAiY3VycmVudCIgbWFwIGlzIHVzZWQgdG8gY29tcHV0ZSBleHBvc2VkIHJlZ2lvbnMg
b2YgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWxlCiAgICAgLy8gdGhlICJuZXh0IiBtYXAgaXMgdXNl
ZCB0byBjb2xsZWN0IGxheWVyIHJlY3RzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIG5leHQgZnJhbWUu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tl
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJU
ZXN0LmNwcAppbmRleCBkY2NmN2U2NGY2ZTI5YzQzMDUzNDBjOTQwMTllNzMxNjY0MjMzMzY4Li4x
MWE4ODc4NGI5ZTFjMmQ5N2VhZmEyN2I0YWYzMDllMTc1YTNkYzg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKQEAgLTM2
NSw3ICszNjUsNyBAQCBURVNUX0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9y
Qmx1cnJlZFN1cmZhY2UpCiAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gcm9vdC0+Y2hpbGRyZW4o
KVswXS5nZXQoKTsKIAogICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKLSAgICBmaWx0ZXJz
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg1
LCBXZWJDb3JlOjpQZXJjZW50KSwgRmlsdGVyT3BlcmF0aW9uOjpCTFVSKSk7CisgICAgZmlsdGVy
cy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
NSwgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKICAgICBpbnQgb3V0
c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OwogICAgIGZpbHRl
cnMuZ2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNl
dExlZnQpOwogICAgIHJvb3QtPnNldEZpbHRlcnMoZmlsdGVycyk7CkBAIC0zODUsNiArMzg1LDc3
IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JCbHVycmVkU3Vy
ZmFjZSkKICAgICBFWFBFQ1RfRkxPQVRfUkVDVF9FUShleHBlY3RlZERhbWFnZVJlY3QsIHJvb3RE
YW1hZ2VSZWN0KTsKIH0KIAorVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFn
ZUZvckJhY2tncm91bmRCbHVycmVkQ2hpbGQpCit7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlQW5kU2V0VXBUZXN0VHJlZVdpdGhUd29TdXJmYWNlcygpOworICAgIENDTGF5
ZXJJbXBsKiBjaGlsZDEgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJ
bXBsKiBjaGlsZDIgPSByb290LT5jaGlsZHJlbigpWzFdLmdldCgpOworCisgICAgRmlsdGVyT3Bl
cmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIFdlYkNvcmU6OkZpeGVkKSwgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSKSk7CisgICAgaW50IG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJv
dHRvbSwgb3V0c2V0TGVmdDsKKyAgICBmaWx0ZXJzLmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRz
ZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsKKyAgICBjaGlsZDEtPnNldEJhY2tn
cm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgLy8gU2V0dGluZyB0aGUgZmlsdGVyIHdpbGwg
ZGFtYWdlIHRoZSB3aG9sZSBzdXJmYWNlLgorICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9v
dC5nZXQoKSk7CisKKyAgICAvLyBDQVNFIDE6IFNldHRpbmcgdGhlIHVwZGF0ZSByZWN0IHNob3Vs
ZCBjYXVzZSB0aGUgY29ycmVzcG9uZGluZyBkYW1hZ2UgdG8KKyAgICAvLyB0aGUgc3VyZmFjZSwg
Ymx1cnJlZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgY2hpbGQncyBiYWNrZ3JvdW5kIGJsdXIK
KyAgICAvLyBmaWx0ZXIuCisgICAgcm9vdC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMjk3LCAy
OTcsIDIsIDIpKTsKKworICAgIGVtdWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisK
KyAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3QgPSByb290LT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKyAgICAvLyBEYW1hZ2UgcG9zaXRp
b24gb24gdGhlIHN1cmZhY2Ugc2hvdWxkIGJlIGEgY29tcG9zaXRpb24gb2YgdGhlIGRhbWFnZSBv
biB0aGUgcm9vdCBhbmQgb24gY2hpbGQyLgorICAgIC8vIERhbWFnZSBvbiB0aGUgcm9vdCBzaG91
bGQgYmU6IHBvc2l0aW9uIG9mIHVwZGF0ZVJlY3QgKDI5NywgMjk3KSwgYnV0IGV4cGFuZGVkIGJ5
IHRoZSBibHVyIG91dHNldHMuCisgICAgRmxvYXRSZWN0IGV4cGVjdGVkRGFtYWdlUmVjdCA9IEZs
b2F0UmVjdCgyOTcsIDI5NywgMiwgMik7CisgICAgZXhwZWN0ZWREYW1hZ2VSZWN0Lm1vdmUoLW91
dHNldExlZnQsIC1vdXRzZXRUb3ApOworICAgIGV4cGVjdGVkRGFtYWdlUmVjdC5leHBhbmQob3V0
c2V0TGVmdCArIG91dHNldFJpZ2h0LCBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAgIEVY
UEVDVF9GTE9BVF9SRUNUX0VRKGV4cGVjdGVkRGFtYWdlUmVjdCwgcm9vdERhbWFnZVJlY3QpOwor
CisgICAgLy8gQ0FTRSAyOiBTZXR0aW5nIHRoZSB1cGRhdGUgcmVjdCBzaG91bGQgY2F1c2UgdGhl
IGNvcnJlc3BvbmRpbmcgZGFtYWdlIHRvCisgICAgLy8gdGhlIHN1cmZhY2UsIGJsdXJyZWQgYmFz
ZWQgb24gdGhlIHNpemUgb2YgdGhlIGNoaWxkJ3MgYmFja2dyb3VuZCBibHVyCisgICAgLy8gZmls
dGVyLiBTaW5jZSB0aGUgZGFtYWdlIGV4dGVuZHMgdG8gdGhlIHJpZ2h0L2JvdHRvbSBvdXRzaWRl
IG9mIHRoZQorICAgIC8vIGJsdXJyZWQgbGF5ZXIsIG9ubHkgdGhlIGxlZnQvdG9wIHNob3VsZCBl
bmQgdXAgZXhwYW5kZWQuCisgICAgcm9vdC0+c2V0VXBkYXRlUmVjdChGbG9hdFJlY3QoMjk3LCAy
OTcsIDMwLCAzMCkpOworCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgpKTsK
KworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFj
a2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgLy8gRGFtYWdlIHBvc2l0aW9uIG9uIHRo
ZSBzdXJmYWNlIHNob3VsZCBiZSBhIGNvbXBvc2l0aW9uIG9mIHRoZSBkYW1hZ2Ugb24gdGhlIHJv
b3QgYW5kIG9uIGNoaWxkMi4KKyAgICAvLyBEYW1hZ2Ugb24gdGhlIHJvb3Qgc2hvdWxkIGJlOiBw
b3NpdGlvbiBvZiB1cGRhdGVSZWN0ICgyOTcsIDI5NyksIGJ1dCBleHBhbmRlZCBvbiB0aGUgbGVm
dC90b3AKKyAgICAvLyBieSB0aGUgYmx1ciBvdXRzZXRzLgorICAgIGV4cGVjdGVkRGFtYWdlUmVj
dCA9IEZsb2F0UmVjdCgyOTcsIDI5NywgMzAsIDMwKTsKKyAgICBleHBlY3RlZERhbWFnZVJlY3Qu
bW92ZSgtb3V0c2V0TGVmdCwgLW91dHNldFRvcCk7CisgICAgZXhwZWN0ZWREYW1hZ2VSZWN0LmV4
cGFuZChvdXRzZXRMZWZ0LCBvdXRzZXRUb3ApOworICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKGV4
cGVjdGVkRGFtYWdlUmVjdCwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSAzOiBTZXR0
aW5nIHRoaXMgdXBkYXRlIHJlY3Qgb3V0c2lkZSB0aGUgY29udGVudEJvdW5kcyBvZiB0aGUgYmx1
cnJlZAorICAgIC8vIGNoaWxkMSB3aWxsIG5vdCBjYXVzZSBpdCB0byBiZSBleHBhbmRlZC4KKyAg
ICByb290LT5zZXRVcGRhdGVSZWN0KEZsb2F0UmVjdCgzMCwgMzAsIDIsIDIpKTsKKworICAgIGVt
dWxhdGVEcmF3aW5nT25lRnJhbWUocm9vdC5nZXQoKSk7CisKKyAgICByb290RGFtYWdlUmVjdCA9
IHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVj
dCgpOworICAgIC8vIERhbWFnZSBvbiB0aGUgcm9vdCBzaG91bGQgYmU6IHBvc2l0aW9uIG9mIHVw
ZGF0ZVJlY3QgKDMwLCAzMCksIG5vdAorICAgIC8vIGV4cGFuZGVkLgorICAgIGV4cGVjdGVkRGFt
YWdlUmVjdCA9IEZsb2F0UmVjdCgzMCwgMzAsIDIsIDIpOworICAgIEVYUEVDVF9GTE9BVF9SRUNU
X0VRKGV4cGVjdGVkRGFtYWdlUmVjdCwgcm9vdERhbWFnZVJlY3QpOworCisgICAgLy8gQ0FTRSA0
OiBTZXR0aW5nIHRoZSB1cGRhdGUgcmVjdCBvbiBjaGlsZDIsIHdoaWNoIGlzIGFib3ZlIGNoaWxk
MSwgd2lsbAorICAgIC8vIG5vdCBnZXQgYmx1cnJlZCBieSBjaGlsZDEsIHNvIGl0IGRvZXMgbm90
IG5lZWQgdG8gZ2V0IGV4cGFuZGVkLgorICAgIGNoaWxkMi0+c2V0VXBkYXRlUmVjdChGbG9hdFJl
Y3QoMCwgMCwgMSwgMSkpOworCisgICAgZW11bGF0ZURyYXdpbmdPbmVGcmFtZShyb290LmdldCgp
KTsKKworICAgIHJvb3REYW1hZ2VSZWN0ID0gcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VU
cmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisgICAgLy8gRGFtYWdlIG9uIGNoaWxkMiBz
aG91bGQgYmU6IHBvc2l0aW9uIG9mIHVwZGF0ZVJlY3Qgb2Zmc2V0IGJ5IHRoZSBjaGlsZCdzIHBv
c2l0aW9uICgxMSwgMTEpLCBhbmQgbm90IGV4cGFuZGVkIGJ5IGFueXRoaW5nLgorICAgIGV4cGVj
dGVkRGFtYWdlUmVjdCA9IEZsb2F0UmVjdCgxMSwgMTEsIDEsIDEpOworICAgIEVYUEVDVF9GTE9B
VF9SRUNUX0VRKGV4cGVjdGVkRGFtYWdlUmVjdCwgcm9vdERhbWFnZVJlY3QpOworfQorCiBURVNU
X0YoQ0NEYW1hZ2VUcmFja2VyVGVzdCwgdmVyaWZ5RGFtYWdlRm9yQWRkaW5nQW5kUmVtb3ZpbmdM
YXllcikKIHsKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRl
c3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>