<?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>50527</bug_id>
          
          <creation_ts>2010-12-04 14:55:17 -0800</creation_ts>
          <short_desc>[Qt] Background image rendering is slow</short_desc>
          <delta_ts>2011-01-17 00:50:37 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance, Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317313</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-04 14:55:17 -0800</bug_when>
    <thetext>Even on desktop, it is evident (using WebInspector, valgrind and Shark) that background image rendering is a bottleneck.
LayoutTests/fast/backgrounds/size/backgroundSize02.html, for example, takes 17ms to paint on a 1440x960 window.

This is due to the use of fillRect with a transformed brush, which is an unoptimized code path in Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317319</commentid>
    <comment_count>1</comment_count>
      <attachid>75618</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-04 15:43:30 -0800</bug_when>
    <thetext>Created attachment 75618
Patch

I think this patch needs to be looked at by an additional set of experienced eyes, as it&apos;s in a core location that might break some website rendering (or hopefully just make them render faster)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317383</commentid>
    <comment_count>2</comment_count>
      <attachid>75618</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2010-12-05 08:39:10 -0800</bug_when>
    <thetext>Comment on attachment 75618
Patch

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

&gt; WebCore/platform/graphics/qt/ImageQt.cpp:110
&gt; +    if (!destinationRect.width() || !destinationRect.height() || !destinationRect.width() || !destinationRect.height())

This should be:
if (!destinationRect.width() || !destinationRect.height() || !tileRect.width() || !tileRect.height())
or even:
if (!destinationRect.isValid() || !tileRect.isValid())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317384</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-05 08:47:43 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 75618 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75618&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/graphics/qt/ImageQt.cpp:110
&gt; &gt; +    if (!destinationRect.width() || !destinationRect.height() || !destinationRect.width() || !destinationRect.height())
&gt; 
&gt; This should be:
&gt; if (!destinationRect.width() || !destinationRect.height() || !tileRect.width() || !tileRect.height())
&gt; or even:
&gt; if (!destinationRect.isValid() || !tileRect.isValid())

Agree. This part was copied from the original code :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317592</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-12-06 06:38:40 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; This should be:
&gt; &gt; if (!destinationRect.width() || !destinationRect.height() || !tileRect.width() || !tileRect.height())
&gt; &gt; or even:
&gt; &gt; if (!destinationRect.isValid() || !tileRect.isValid())
&gt; 
&gt; Agree. This part was copied from the original code :)

That would be incorrect. ::isValid() is &gt;0, what need to be catched here is a size of zero. ::isEmpty() should do the trick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317601</commentid>
    <comment_count>5</comment_count>
      <attachid>75618</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-12-06 06:55:59 -0800</bug_when>
    <thetext>Comment on attachment 75618
Patch

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

&gt; WebCore/platform/graphics/qt/ImageQt.cpp:139
&gt; +    painter-&gt;drawTiledPixmap(QRect(0, 0, destinationRect.right() - offset.x(), destinationRect.bottom() - offset.y()), tilePixmap);

I don&apos;t understand the coordinates here. Why you start at 0, 0? Why the width is destinationRect.right() - offset.x()? The offset could be bigger than destinationRect.right(), and the result should still be correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317602</commentid>
    <comment_count>6</comment_count>
      <attachid>75618</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-12-06 07:06:56 -0800</bug_when>
    <thetext>Comment on attachment 75618
Patch

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

&gt; WebCore/platform/graphics/qt/ImageQt.cpp:125
&gt; +    // FIXME: Might be worth investigating to cache the transformed result, though this has memory implications.
&gt; +    QPixmap tilePixmap;
&gt; +    if (tileRect.x() || tileRect.y() || tileRect.width() != framePixmap-&gt;width() || tileRect.height() != framePixmap-&gt;height() || !patternTransform.isIdentityOrTranslation()) {
&gt; +        // We can&apos;t use the pixmap as is, because we&apos;re using only part of it or it needs to be scaled. Because we know the pixmap is going to be
&gt; +        // drawn more than once, we copy/scale it only once to avoid repeating the operation for each tile.
&gt; +        QRect targetTileRect = patternTransform.mapRect(tileRect);
&gt; +        tilePixmap = QPixmap(targetTileRect.size());
&gt; +        QPainter painter(&amp;tilePixmap);
&gt; +        painter.setCompositionMode(QPainter::CompositionMode_Source);
&gt; +        painter.setTransform(patternTransform);
&gt; +        painter.translate(-targetTileRect.topLeft());
&gt; +        painter.drawPixmap(tileRect, *framePixmap);
&gt; +    } else

I don&apos;t think that would work with rotation so you don&apos;t implement the interface given by the API of ImageBuffer.
I would prefer if you change the function signature to take two arguments scaleX and scaleY so it is explicit that any other type transform is not supported.

Otherwise, future change to support arbitrary transform from CSS would break Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317603</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-12-06 07:07:52 -0800</bug_when>
    <thetext>Would you mind attaching the testcases? I would like to know why QBrush is so much slower.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317622</commentid>
    <comment_count>8</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-06 07:52:41 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Would you mind attaching the testcases? I would like to know why QBrush is so much slower.

Just look at the stuff under LayoutTests/fast/size</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317623</commentid>
    <comment_count>9</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-06 07:54:08 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 75618 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75618&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/graphics/qt/ImageQt.cpp:125
&gt; &gt; +    // FIXME: Might be worth investigating to cache the transformed result, though this has memory implications.
&gt; &gt; +    QPixmap tilePixmap;
&gt; &gt; +    if (tileRect.x() || tileRect.y() || tileRect.width() != framePixmap-&gt;width() || tileRect.height() != framePixmap-&gt;height() || !patternTransform.isIdentityOrTranslation()) {
&gt; &gt; +        // We can&apos;t use the pixmap as is, because we&apos;re using only part of it or it needs to be scaled. Because we know the pixmap is going to be
&gt; &gt; +        // drawn more than once, we copy/scale it only once to avoid repeating the operation for each tile.
&gt; &gt; +        QRect targetTileRect = patternTransform.mapRect(tileRect);
&gt; &gt; +        tilePixmap = QPixmap(targetTileRect.size());
&gt; &gt; +        QPainter painter(&amp;tilePixmap);
&gt; &gt; +        painter.setCompositionMode(QPainter::CompositionMode_Source);
&gt; &gt; +        painter.setTransform(patternTransform);
&gt; &gt; +        painter.translate(-targetTileRect.topLeft());
&gt; &gt; +        painter.drawPixmap(tileRect, *framePixmap);
&gt; &gt; +    } else
&gt; 
&gt; I don&apos;t think that would work with rotation so you don&apos;t implement the interface given by the API of ImageBuffer.
&gt; I would prefer if you change the function signature to take two arguments scaleX and scaleY so it is explicit that any other type transform is not supported.
&gt; 
&gt; Otherwise, future change to support arbitrary transform from CSS would break Qt.
Yes, I agree. Or maybe, we can do this for scale/translate only and go through QPixmap::transformed as a fallback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317624</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-06 07:54:39 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Would you mind attaching the testcases? I would like to know why QBrush is so much slower.
&gt; 
&gt; Just look at the stuff under LayoutTests/fast/size

I meant LayoutTests/fast/backgrounds/size</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317631</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-06 08:06:58 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 75618 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75618&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/graphics/qt/ImageQt.cpp:139
&gt; &gt; +    painter-&gt;drawTiledPixmap(QRect(0, 0, destinationRect.right() - offset.x(), destinationRect.bottom() - offset.y()), tilePixmap);
&gt; 
&gt; I don&apos;t understand the coordinates here. Why you start at 0, 0? Why the width is destinationRect.right() - offset.x()? The offset could be bigger than destinationRect.right(), and the result should still be correct.

Since we translate(offset) a line earlier, this would draw the tile pixmap between the points 
(offset -&gt; destinationRect.bottomRight()). Maybe I need to write it in a more verbose way :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317633</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-12-06 08:15:01 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; I don&apos;t understand the coordinates here. Why you start at 0, 0? Why the width is destinationRect.right() - offset.x()? The offset could be bigger than destinationRect.right(), and the result should still be correct.
&gt; 
&gt; Since we translate(offset) a line earlier, this would draw the tile pixmap between the points 
&gt; (offset -&gt; destinationRect.bottomRight()). Maybe I need to write it in a more verbose way :)

The offset should be the offset of the pixmap being rendered. The pattern does not necessary starts at (0, 0).

That is not what you are doing, or I am missing completely what you are doing and yet a more verbose way would be nice :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317642</commentid>
    <comment_count>13</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-06 08:38:40 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; &gt; I don&apos;t understand the coordinates here. Why you start at 0, 0? Why the width is destinationRect.right() - offset.x()? The offset could be bigger than destinationRect.right(), and the result should still be correct.
&gt; &gt; 
&gt; &gt; Since we translate(offset) a line earlier, this would draw the tile pixmap between the points 
&gt; &gt; (offset -&gt; destinationRect.bottomRight()). Maybe I need to write it in a more verbose way :)
&gt; 
&gt; The offset should be the offset of the pixmap being rendered. The pattern does not necessary starts at (0, 0).
&gt; 
&gt; That is not what you are doing, or I am missing completely what you are doing and yet a more verbose way would be nice :)

Looking it a second time, yes - something is funky with my geometry. I&apos;ll revise and submit.
Btw I&apos;m thinking the performance gain is not necessarily from fillRect vs. drawTiledPixmap, it might be because of the optimization to pre-transform the image, while I&apos;m not sure fillRect does it (it&apos;s really a raster-specific optimization, in OpenGL it&apos;s probably better to transform on each draw).

If anybody is up to figuring it out inside the raster engine, go for it... I&apos;ll continue trying to fix it inside GraphicsContext and friends for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326555</commentid>
    <comment_count>14</comment_count>
      <attachid>75618</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-24 02:48:20 -0800</bug_when>
    <thetext>Comment on attachment 75618
Patch

r- due to Noam&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326821</commentid>
    <comment_count>15</comment_count>
      <attachid>77439</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-25 12:02:39 -0800</bug_when>
    <thetext>Created attachment 77439
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326832</commentid>
    <comment_count>16</comment_count>
      <attachid>77439</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-25 14:35:06 -0800</bug_when>
    <thetext>Comment on attachment 77439
Patch

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

&gt; WebCore/ChangeLog:8
&gt; +        Special case the simple version of Image::drawTiled in Qt, since we can optimize for the simple QPainter::drawTiledPixmap, rather than go through Image::drawPattern which has to invoke QPainter::drawBrush. 

Could you make this line around 80 chars :-) ?

&gt; WebCore/platform/graphics/qt/ImageQt.cpp:139
&gt; +void Image::drawTiled(GraphicsContext* ctxt, const FloatRect&amp; destRect, const FloatPoint&amp; srcPoint, const FloatSize&amp; scaledTileSize, ColorSpace styleColorSpace, CompositeOperator op)

It would be nice if it was detailed here that the code is not strictly needed but it is an optimization. Maybe such an optimization will not be needed forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326916</commentid>
    <comment_count>17</comment_count>
      <attachid>77439</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-26 13:30:21 -0800</bug_when>
    <thetext>Comment on attachment 77439
Patch

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

&gt;&gt; WebCore/ChangeLog:8
&gt;&gt; +        Special case the simple version of Image::drawTiled in Qt, since we can optimize for the simple QPainter::drawTiledPixmap, rather than go through Image::drawPattern which has to invoke QPainter::drawBrush. 
&gt; 
&gt; Could you make this line around 80 chars :-) ?

Please!  It won&apos;t fit on my punch card otherwise!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327002</commentid>
    <comment_count>18</comment_count>
      <attachid>77487</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-27 02:01:25 -0800</bug_when>
    <thetext>Created attachment 77487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327003</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-27 03:02:01 -0800</bug_when>
    <thetext>Someone up to reviewing this? or who would be the right reviewer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327004</commentid>
    <comment_count>20</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-27 03:03:43 -0800</bug_when>
    <thetext>Anyway it looks good and it passes the tests. No&apos;am do you have any performance numbers? Any change of getting this into Qt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327065</commentid>
    <comment_count>21</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-27 09:43:18 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Anyway it looks good and it passes the tests. No&apos;am do you have any performance numbers? Any change of getting this into Qt?

Out of the 22 tests in fast/backgrounds/size, running on Mac with raster graphics system:

The average painting speed improvement is 50%

9 tests: improvement in performance of 50% or more.
3 tests: improvement of 25%-50%
8 tests: similar before/after numbers
3 tests: 25%-50% regression (see below for explanation).
No test shows a regression of more than 25%.

Those 3 tests that regressed are fast to render both before and after, but the extra rendering step to scale the tile does cause them to not be as fast - those 3 tests are of a large scaled background image that only repeats once or twice - in those cases the extra rendering step just causes overhead. However, I doubt those situations would be very slow in real circumstances, unlike the use case of repeating small images multiple times, which is sometimes improved by 80%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327067</commentid>
    <comment_count>22</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-12-27 09:45:07 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Anyway it looks good and it passes the tests. No&apos;am do you have any performance numbers? Any change of getting this into Qt?

(In reply to comment #19)
&gt; Someone up to reviewing this? or who would be the right reviewer?
Actually I&apos;d like it if Benjamin could give his go ahead, and then maybe you or Kling can do the actual review? Benjamin would also be the right person know also if this can be fixed further down the stack (i.e. the raster engine).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327073</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-27 10:18:17 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #20)
&gt; &gt; Anyway it looks good and it passes the tests. No&apos;am do you have any performance numbers? Any change of getting this into Qt?
&gt; 
&gt; (In reply to comment #19)
&gt; &gt; Someone up to reviewing this? or who would be the right reviewer?
&gt; Actually I&apos;d like it if Benjamin could give his go ahead, and then maybe you or Kling can do the actual review? Benjamin would also be the right person know also if this can be fixed further down the stack (i.e. the raster engine).

Sounds like a plan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334963</commentid>
    <comment_count>24</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-01-15 16:15:12 -0800</bug_when>
    <thetext>Yep that makes sense.

The original have a special case when you have to render only one tile. I think it is a good idea to avoid creating a new potentionally big pixmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334965</commentid>
    <comment_count>25</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-01-15 16:31:57 -0800</bug_when>
    <thetext>Oh, and maybe use QPainter::SmoothPixmapTransform if !PLATFORM(ARM)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335122</commentid>
    <comment_count>26</comment_count>
      <attachid>79121</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-01-16 19:41:11 -0800</bug_when>
    <thetext>Created attachment 79121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335181</commentid>
    <comment_count>27</comment_count>
      <attachid>79134</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-01-17 00:20:29 -0800</bug_when>
    <thetext>Created attachment 79134
Patch

This would only affect pages with -webkit-background-size or border images.
Background rendering would still be slow if the painter has a scale on it (e.g. a scaled QGraphicsWebView).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335194</commentid>
    <comment_count>28</comment_count>
      <attachid>79134</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-17 00:50:29 -0800</bug_when>
    <thetext>Comment on attachment 79134
Patch

Clearing flags on attachment: 79134

Committed r75926: &lt;http://trac.webkit.org/changeset/75926&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335195</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-17 00:50:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75618</attachid>
            <date>2010-12-04 15:43:30 -0800</date>
            <delta_ts>2010-12-25 12:02:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch-50527.diff</filename>
            <type>text/plain</type>
            <size>5082</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjlhY2Y0Zi4uMjRkYjg5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwyMiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIFtRdF0gQmFja2dyb3VuZCBpbWFnZSByZW5kZXJpbmcg
aXMgc2xvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTA1MjcKKworICAgICAgICBNb2RpZnkgSW1hZ2U6OmRyYXdQYXR0ZXJuIHRvIHVzZSBkcmF3VGls
ZWRQaXhtYXAgaW5zdGVhZCBvZiB0aGUgdW5vcHRpbWl6ZWQgZmlsbFJlY3QvdHJhbnNmb3JtZWQg
YnJ1c2hlcywKKyAgICAgICAgd2hpY2ggaXMgZXNzZW50aWFsbHkgc3ludGFjdGljIHN1Z2FyIGZv
ciB0aGUgc2FtZSBvcGVyYXRpb24uIFNvbWUgZ2VvbWV0cnkgY2FsY3VsYXRpb25zIHRoYXQgd2Vy
ZSBvcmlnaW5hbGx5IGRvbmUKKyAgICAgICAgaW4gdGhlIHBhaW50IGVuZ2luZSBhcmUgbm93IGRv
bmUgaW5zaWRlIHRoaXMgZnVuY3Rpb24uCisKKyAgICAgICAgTGF5b3V0VGVzdHMvZmFzdC9iYWNr
Z3JvdW5kcy9zaXplL2JhY2tncm91bmRTaXplMDIuaHRtbCBpcyBub3cgY29uc2lzdGVudGx5IDIt
MyB0aW1lcyBmYXN0ZXIgdG8gcmVuZGVyLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToK
KworMjAxMC0xMi0wNCAgTm9hbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQWxsb3cg
Q1NTIGFuaW1hdGlvbnMgdG8gcnVuIGF0IG1vcmUgdGhhbiA0MEZQUwogICAgICAgICBBZGQgYSBz
ZXR0aW5ncyBmdW5jdGlvbiAoc2V0QW5pbWF0aW9uVGltZXJEZWxheSkgdGhhdCBhZmZlY3RzIEFu
aW1hdGlvbkNvbnRyb2xsZXIncyB0aW1lci4gVGhpcyBpcyBpbiBhY2NvcmRhbmNlIHRvCiAgICAg
ICAgIGhvdyB0aGUgRE9NVGltZXIgbWluaW11bSBpbnRlcnZhbCBzZXR0aW5ncyB3ZXJlIGRvbmUg
aW4gYnVnIDQ1MzYyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5k
ZXggMzYxMTMwOC4uYmY1M2RkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
UXQuY3BwCkBAIC05NywzOCArOTcsNDYgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgcmV0dXJuIFN0aWxsSW1hZ2U6
OmNyZWF0ZShsb2FkUmVzb3VyY2VQaXhtYXAobmFtZSkpOwogfQogCi12b2lkIEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKK3ZvaWQgSW1hZ2U6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dEZsb2F0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUVBp
eG1hcCogZnJhbWVQaXhtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlm
ICghZnJhbWVQaXhtYXApIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1h
Z2UgeWV0LgorICAgIGlmICghZnJhbWVQaXhtYXAgfHwgZnJhbWVQaXhtYXAtPmlzTnVsbCgpKSAv
LyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gUXQgaW50ZXJwcmV0cyAwIHdpZHRoL2hlaWdodCBhcyBmdWxsIHdp
ZHRoL2hlaWdodCBzbyBqdXN0IHNob3J0IGNpcmN1aXQuCi0gICAgUVJlY3RGIGRyID0gUVJlY3RG
KGRlc3RSZWN0KS5ub3JtYWxpemVkKCk7Ci0gICAgUVJlY3QgdHIgPSBRUmVjdEYodGlsZVJlY3Qp
LnRvUmVjdCgpLm5vcm1hbGl6ZWQoKTsKLSAgICBpZiAoIWRyLndpZHRoKCkgfHwgIWRyLmhlaWdo
dCgpIHx8ICF0ci53aWR0aCgpIHx8ICF0ci5oZWlnaHQoKSkKKyAgICBRUmVjdEYgZGVzdGluYXRp
b25SZWN0ID0gUVJlY3RGKGRlc3RSZWN0KS5ub3JtYWxpemVkKCk7CisgICAgUVJlY3QgdGlsZVJl
Y3QgPSBRUmVjdEYodGlsZVJlY3RGbG9hdCkudG9SZWN0KCkubm9ybWFsaXplZCgpOworICAgIGlm
ICghZGVzdGluYXRpb25SZWN0LndpZHRoKCkgfHwgIWRlc3RpbmF0aW9uUmVjdC5oZWlnaHQoKSB8
fCAhZGVzdGluYXRpb25SZWN0LndpZHRoKCkgfHwgIWRlc3RpbmF0aW9uUmVjdC5oZWlnaHQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBpeG1hcCBwaXhtYXAgPSAqZnJhbWVQaXhtYXA7Ci0g
ICAgaWYgKHRyLngoKSB8fCB0ci55KCkgfHwgdHIud2lkdGgoKSAhPSBwaXhtYXAud2lkdGgoKSB8
fCB0ci5oZWlnaHQoKSAhPSBwaXhtYXAuaGVpZ2h0KCkpCi0gICAgICAgIHBpeG1hcCA9IHBpeG1h
cC5jb3B5KHRyKTsKKyAgICAvLyBGSVhNRTogTWlnaHQgYmUgd29ydGggaW52ZXN0aWdhdGluZyB0
byBjYWNoZSB0aGUgdHJhbnNmb3JtZWQgcmVzdWx0LCB0aG91Z2ggdGhpcyBoYXMgbWVtb3J5IGlt
cGxpY2F0aW9ucy4KKyAgICBRUGl4bWFwIHRpbGVQaXhtYXA7CisgICAgaWYgKHRpbGVSZWN0Lngo
KSB8fCB0aWxlUmVjdC55KCkgfHwgdGlsZVJlY3Qud2lkdGgoKSAhPSBmcmFtZVBpeG1hcC0+d2lk
dGgoKSB8fCB0aWxlUmVjdC5oZWlnaHQoKSAhPSBmcmFtZVBpeG1hcC0+aGVpZ2h0KCkgfHwgIXBh
dHRlcm5UcmFuc2Zvcm0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgeworICAgICAgICAvLyBX
ZSBjYW4ndCB1c2UgdGhlIHBpeG1hcCBhcyBpcywgYmVjYXVzZSB3ZSdyZSB1c2luZyBvbmx5IHBh
cnQgb2YgaXQgb3IgaXQgbmVlZHMgdG8gYmUgc2NhbGVkLiBCZWNhdXNlIHdlIGtub3cgdGhlIHBp
eG1hcCBpcyBnb2luZyB0byBiZQorICAgICAgICAvLyBkcmF3biBtb3JlIHRoYW4gb25jZSwgd2Ug
Y29weS9zY2FsZSBpdCBvbmx5IG9uY2UgdG8gYXZvaWQgcmVwZWF0aW5nIHRoZSBvcGVyYXRpb24g
Zm9yIGVhY2ggdGlsZS4KKyAgICAgICAgUVJlY3QgdGFyZ2V0VGlsZVJlY3QgPSBwYXR0ZXJuVHJh
bnNmb3JtLm1hcFJlY3QodGlsZVJlY3QpOworICAgICAgICB0aWxlUGl4bWFwID0gUVBpeG1hcCh0
YXJnZXRUaWxlUmVjdC5zaXplKCkpOworICAgICAgICBRUGFpbnRlciBwYWludGVyKCZ0aWxlUGl4
bWFwKTsKKyAgICAgICAgcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9Tb3VyY2UpOworICAgICAgICBwYWludGVyLnNldFRyYW5zZm9ybShwYXR0ZXJu
VHJhbnNmb3JtKTsKKyAgICAgICAgcGFpbnRlci50cmFuc2xhdGUoLXRhcmdldFRpbGVSZWN0LnRv
cExlZnQoKSk7CisgICAgICAgIHBhaW50ZXIuZHJhd1BpeG1hcCh0aWxlUmVjdCwgKmZyYW1lUGl4
bWFwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGlsZVBpeG1hcCA9ICpmcmFtZVBpeG1hcDsKIAog
ICAgIGN0eHQtPnNhdmUoKTsKIAogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7
Ci0gICAgUVBhaW50ZXIqIHAgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoIXBp
eG1hcC5oYXNBbHBoYSgpICYmIHAtPmNvbXBvc2l0aW9uTW9kZSgpID09IFFQYWludGVyOjpDb21w
b3NpdGlvbk1vZGVfU291cmNlT3ZlcikKLSAgICAgICAgcC0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQ
YWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLQotICAgIC8qIFRyYW5zbGF0ZSB0aGUg
Y29vcmRpbmF0ZXMgYXMgcGhhc2UgaXMgbm90IGluIHdvcmxkIG1hdHJpeCBjb29yZGluYXRlIHNw
YWNlIGJ1dCB0aGUgdGlsZSByZWN0IG9yaWdpbiBpcy4gKi8KLSAgICBRVHJhbnNmb3JtIHRyYW5z
Zm9ybShwYXR0ZXJuVHJhbnNmb3JtKTsKLSAgICB0cmFuc2Zvcm0gKj0gUVRyYW5zZm9ybSgpLnRy
YW5zbGF0ZShwaGFzZS54KCksIHBoYXNlLnkoKSk7Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSh0
ci54KCksIHRyLnkoKSk7Ci0KLSAgICBRQnJ1c2ggYihwaXhtYXApOwotICAgIGIuc2V0VHJhbnNm
b3JtKHRyYW5zZm9ybSk7Ci0gICAgcC0+ZmlsbFJlY3QoZHIsIGIpOworICAgIFFQYWludGVyKiBw
YWludGVyID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBwYWludGVyLT5zZXRDbGlw
UmVjdChkZXN0aW5hdGlvblJlY3QsIFF0OjpJbnRlcnNlY3RDbGlwKTsKKworICAgIC8vIEZpbmQg
dGhlIGNsb3Nlc3QgcG9pbnQgdG8gdGhlIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCBhIHRpbGUgd291
bGQgc3RhcnQgZnJvbSwgc28gd2UgY2FuIGNhbGwgZHJhd1RpbGVkUGl4bWFwIGZyb20gdGhhdCBw
b2ludC4KKyAgICBRUG9pbnQgb2Zmc2V0KHBoYXNlLngoKSAtIHRpbGVQaXhtYXAud2lkdGgoKSAq
IChpbnQoKHBoYXNlLngoKSArIHRpbGVSZWN0LngoKSkgLyB0aWxlUGl4bWFwLndpZHRoKCkpICsg
MSksIHBoYXNlLnkoKSAtIHRpbGVQaXhtYXAuaGVpZ2h0KCkgKiAoaW50KChwaGFzZS55KCkgKyB0
aWxlUmVjdC55KCkpIC8gdGlsZVBpeG1hcC5oZWlnaHQoKSkgKyAxKSk7CisgICAgcGFpbnRlci0+
dHJhbnNsYXRlKG9mZnNldCk7CisKKyAgICBwYWludGVyLT5kcmF3VGlsZWRQaXhtYXAoUVJlY3Qo
MCwgMCwgZGVzdGluYXRpb25SZWN0LnJpZ2h0KCkgLSBvZmZzZXQueCgpLCBkZXN0aW5hdGlvblJl
Y3QuYm90dG9tKCkgLSBvZmZzZXQueSgpKSwgdGlsZVBpeG1hcCk7CiAKICAgICBjdHh0LT5yZXN0
b3JlKCk7CiAK
</data>
<flag name="review"
          id="66450"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77439</attachid>
            <date>2010-12-25 12:02:39 -0800</date>
            <delta_ts>2010-12-27 02:01:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch-bg.diff</filename>
            <type>text/plain</type>
            <size>3822</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjE3Nzc3YS4uY2E4Y2ZlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0xMi0yNSAgTm9hbSBSb3NlbnRo
YWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBCYWNrZ3JvdW5kIGltYWdlIHJlbmRlcmluZyBp
cyBzbG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDUyNworCisgICAgICAgIFNwZWNpYWwgY2FzZSB0aGUgc2ltcGxlIHZlcnNpb24gb2YgSW1hZ2U6
OmRyYXdUaWxlZCBpbiBRdCwgc2luY2Ugd2UgY2FuIG9wdGltaXplIGZvciB0aGUgc2ltcGxlIFFQ
YWludGVyOjpkcmF3VGlsZWRQaXhtYXAsIHJhdGhlciB0aGFuIGdvIHRocm91Z2ggSW1hZ2U6OmRy
YXdQYXR0ZXJuIHdoaWNoIGhhcyB0byBpbnZva2UgUVBhaW50ZXI6OmRyYXdCcnVzaC4gCisgICAg
ICAgIAorICAgICAgICBUaGlzIGlzIGNvdmVyZWQgYnkgdGVzdHMgdW5kZXIgZmFzdC9iYWNrZ3Jv
dW5kcy9zaXplLCBhbGwgb2Ygd2hpY2ggc3RpbGwgcGFzcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3VGlsZWQpOgorCiAyMDEwLTEy
LTI0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKaW5k
ZXggMzA5NjY4MC4uY2U0YjBiNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAg
LTEwNCw3ICsxMDQsNyBAQCBzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBjYWxjdWxhdGVQYXR0ZXJu
U2NhbGUoY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbAogICAgIHJldHVybiBGbG9h
dFNpemUoc2NhbGVYLCBzY2FsZVkpOwogfQogCi0KKyNpZiAhUExBVEZPUk0oUVQpCiB2b2lkIElt
YWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiBzY2Fs
ZWRUaWxlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogeyAgICAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKQEAgLTE0Myw2
ICsxNDMsNyBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbAogICAgIAogICAgIHN0YXJ0QW5pbWF0
aW9uKCk7CiB9CisjZW5kaWYKIAogLy8gRklYTUU6IE1lcmdlIHdpdGggdGhlIG90aGVyIGRyYXdU
aWxlZCBldmVudHVhbGx5LCBzaW5jZSB3ZSBuZWVkIGEgY29tYmluYXRpb24gb2YgYm90aCBmb3Ig
c29tZSB0aGluZ3MuCiB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgVGls
ZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xNzYsNSArMTc3LDQgQEAgdm9pZCBJbWFnZTo6ZHJh
d1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG8KICAgICBzdGFydEFuaW1hdGlvbigpOwogfQogCi0KIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCmluZGV4IGY3MTNkMzcuLmU1NTNhN2MgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApAQCAtMTM2LDYgKzEzNiwzNyBAQCB2
b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0CiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0
aGlzKTsKIH0KIAordm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNv
bnN0IEZsb2F0U2l6ZSYgc2NhbGVkVGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9y
KCkpIHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBzb2xpZENv
bG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFFQaXhtYXAqIGZyYW1lUGl4bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lUGl4bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGl4bWFwIHBpeG1h
cFRvRHJhdzsKKyAgICBRU2l6ZSBzY2FsZWRTaXplUXQoc2NhbGVkVGlsZVNpemUud2lkdGgoKSwg
c2NhbGVkVGlsZVNpemUuaGVpZ2h0KCkpOworICAgIGlmIChzY2FsZWRTaXplUXQgIT0gcGl4bWFw
VG9EcmF3LnNpemUoKSkgeworICAgICAgICBwaXhtYXBUb0RyYXcgPSBRUGl4bWFwKHNjYWxlZFNp
emVRdCk7CisgICAgICAgIGlmIChmcmFtZVBpeG1hcC0+aGFzQWxwaGEoKSkKKyAgICAgICAgICAg
IHBpeG1hcFRvRHJhdy5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisKKyAgICAgICAgUVBhaW50ZXIg
cGFpbnRlcigmcGl4bWFwVG9EcmF3KTsKKyAgICAgICAgcGFpbnRlci5zZXRDb21wb3NpdGlvbk1v
ZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgICAgICBwYWludGVyLmRy
YXdQaXhtYXAoUVJlY3QoMCwgMCwgcGl4bWFwVG9EcmF3LndpZHRoKCksIHBpeG1hcFRvRHJhdy5o
ZWlnaHQoKSksICpmcmFtZVBpeG1hcCk7CisgICAgfSBlbHNlCisgICAgICAgIHBpeG1hcFRvRHJh
dyA9ICpmcmFtZVBpeG1hcDsKKworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzQ29tcG9z
aXRlT3BlcmF0aW9uID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CisgICAgY3R4dC0+c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IGN0eHQtPnBs
YXRmb3JtQ29udGV4dCgpOworICAgIHBhaW50ZXItPmRyYXdUaWxlZFBpeG1hcChkZXN0UmVjdCwg
cGl4bWFwVG9EcmF3LCBzcmNQb2ludCk7CisgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KHByZXZpb3VzQ29tcG9zaXRlT3BlcmF0aW9uKTsKKyAgICBzdGFydEFuaW1hdGlvbigpOworfQor
CiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoUVBpeG1hcCogcGl4bWFwLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQogICAgICwgbV9jdXJyZW50RnJhbWUo
MCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77487</attachid>
            <date>2010-12-27 02:01:25 -0800</date>
            <delta_ts>2011-01-16 19:41:02 -0800</delta_ts>
            <desc>Patch </desc>
            <filename>patch-bg.diff</filename>
            <type>text/plain</type>
            <size>4058</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjE3Nzc3YS4uNDkzNDRkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMi0yNSAgTm9hbSBSb3NlbnRo
YWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBCYWNrZ3JvdW5kIGltYWdlIHJlbmRlcmluZyBp
cyBzbG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDUyNworCisgICAgICAgIFNwZWNpYWwgY2FzZSB0aGUgc2ltcGxlIHZlcnNpb24gb2YgSW1hZ2U6
OmRyYXdUaWxlZCBpbiBRdCwgCisgICAgICAgIHNpbmNlIHdlIGNhbiBvcHRpbWl6ZSBmb3IgdGhl
IHNpbXBsZSBRUGFpbnRlcjo6ZHJhd1RpbGVkUGl4bWFwLAorICAgICAgICByYXRoZXIgdGhhbiBn
byB0aHJvdWdoIEltYWdlOjpkcmF3UGF0dGVybiB3aGljaCBoYXMgdG8gaW52b2tlCisgICAgICAg
IFFQYWludGVyOjpmaWxsUmVjdCB3aXRoIGEgdHJhbnNmb3JtZWQgYnJ1c2guIAorICAgICAgICAK
KyAgICAgICAgVGhpcyBpcyBjb3ZlcmVkIGJ5IHRlc3RzIHVuZGVyIGZhc3QvYmFja2dyb3VuZHMv
c2l6ZSwgYWxsIG9mIHdoaWNoIHN0aWxsIHBhc3MuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKwogMjAxMC0xMi0yNCAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFs
ZXhleSBQcm9za3VyeWFrb3YuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IDMw
OTY2ODAuLmNlNGIwYjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xMDQs
NyArMTA0LDcgQEAgc3RhdGljIGlubGluZSBGbG9hdFNpemUgY2FsY3VsYXRlUGF0dGVyblNjYWxl
KGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmwKICAgICByZXR1cm4gRmxvYXRTaXpl
KHNjYWxlWCwgc2NhbGVZKTsKIH0KIAotCisjaWYgIVBMQVRGT1JNKFFUKQogdm9pZCBJbWFnZTo6
ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVkVGls
ZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
IHsgICAgCiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7CkBAIC0xNDMsNiArMTQz
LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmwKICAgICAKICAgICBzdGFydEFuaW1hdGlvbigp
OwogfQorI2VuZGlmCiAKIC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRoZSBvdGhlciBkcmF3VGlsZWQg
ZXZlbnR1YWxseSwgc2luY2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9uIG9mIGJvdGggZm9yIHNvbWUg
dGhpbmdzLgogdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIFRpbGVSdWxl
IGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQpAQCAtMTc2LDUgKzE3Nyw0IEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxl
ZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAotCiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9JbWFnZVF0LmNwcAppbmRleCBmNzEzZDM3Li5kYTk0YWIzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAgLTEzNiw2ICsxMzYsNDAgQEAgdm9pZCBJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdAogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7
CiB9CiAKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBG
bG9hdFNpemUmIHNjYWxlZFRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkg
b3B0aW1pemF0aW9uIHRoYXQgY291bGQgYmUgZG9uZSBpbiBhIG1vcmUgZWxlZ2FudCB3YXksIGUu
Zy4KKyAgICAvLyBtYWtlIFFQYWludGVyOjpmaWxsUmVjdHMgd2l0aCBhIHRyYW5zZm9ybWVkIGJy
dXNoIGJlaGF2ZSBpbiB0aGlzIG1hbm5lci4KKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9y
KCkpIHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBzb2xpZENv
bG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFFQaXhtYXAqIGZyYW1lUGl4bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lUGl4bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGl4bWFwIHBpeG1h
cFRvRHJhdzsKKworICAgIFFTaXplIHNjYWxlZFNpemVRdChzY2FsZWRUaWxlU2l6ZS53aWR0aCgp
LCBzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgaWYgKHNjYWxlZFNpemVRdCAhPSBwaXht
YXBUb0RyYXcuc2l6ZSgpKSB7CisgICAgICAgIHBpeG1hcFRvRHJhdyA9IFFQaXhtYXAoc2NhbGVk
U2l6ZVF0KTsKKyAgICAgICAgaWYgKGZyYW1lUGl4bWFwLT5oYXNBbHBoYSgpKQorICAgICAgICAg
ICAgcGl4bWFwVG9EcmF3LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKworICAgICAgICBRUGFpbnRl
ciBwYWludGVyKCZwaXhtYXBUb0RyYXcpOworICAgICAgICBwYWludGVyLnNldENvbXBvc2l0aW9u
TW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CisgICAgICAgIHBhaW50ZXIu
ZHJhd1BpeG1hcChRUmVjdCgwLCAwLCBwaXhtYXBUb0RyYXcud2lkdGgoKSwgcGl4bWFwVG9EcmF3
LmhlaWdodCgpKSwgKmZyYW1lUGl4bWFwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGl4bWFwVG9E
cmF3ID0gKmZyYW1lUGl4bWFwOworCisgICAgY29uc3QgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNDb21wb3NpdGVPcGVyYXRpb24gPSBjdHh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBj
dHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworICAgIFFQYWludGVyKiBwYWludGVyID0g
Y3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcGFpbnRlci0+ZHJhd1RpbGVkUGl4bWFwKGRl
c3RSZWN0LCBwaXhtYXBUb0RyYXcsIHNyY1BvaW50KTsKKyAgICBjdHh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24ocHJldmlvdXNDb21wb3NpdGVPcGVyYXRpb24pOworICAgIHN0YXJ0QW5pbWF0aW9u
KCk7Cit9CisKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShRUGl4bWFwKiBwaXhtYXAsIEltYWdl
T2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCiAgICAgLCBtX2N1cnJl
bnRGcmFtZSgwKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79121</attachid>
            <date>2011-01-16 19:41:11 -0800</date>
            <delta_ts>2011-01-17 00:20:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50527-20110117054108.patch</filename>
            <type>text/plain</type>
            <size>2498</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzODE0MWMwODBiMjY0ZTRiOWVjODA3NDA4MTFmYTU0NTA4MWU3YWE4Li4x
MzdlN2Q0YjYzZGMzMTQxY2YwM2E3YjU2NTY5OTRjMjUzNjQ3OTIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTEtMDEtMTYgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFs
QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbUXRdIEJhY2tncm91bmQgaW1hZ2UgcmVuZGVyaW5nIGlzIHNsb3cKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTI3CisKKyAgICAgICAgV2hl
biB0aWxpbmcgYSBzY2FsZWQgcGl4bWFwIGluIEltYWdlOjpkcmF3UGF0dGVybiwgc2NhbGUgdGhl
IHRpbGUKKyAgICAgICAgZmlyc3QgYW5kIG9ubHkgdGhlbiBkcmF3IGl0IHRvIHRoZSB0YXJnZXQu
IERvIHNvIG9ubHkgd2hlbiBkcmF3aW5nCisgICAgICAgIG1vcmUgdGhhbiBvbmUgdGlsZS4KKwor
ICAgICAgICBUZXN0cyBpbiBmYXN0L2JhY2tncm91bmRzL3NpemUgY292ZXIgdGhpcy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKwogMjAxMS0wMS0xNiAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWlu
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VR
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApp
bmRleCBiNjZhMWNhNzg3OGU4NmI3ZmUwYjBiMDhmY2VlZTYwOTkxZWUwZDk4Li4wZDJhMWRiYzA5
OThmYWFlZjNjYzhhYzI2ODVjMDc3ZWU2M2RiNjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApAQCAtMTI1LDggKzEyNSwyMyBAQCB2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0CiAgICAgaWYgKCFwaXhtYXAuaGFzQWxwaGEoKSAmJiBwLT5jb21w
b3NpdGlvbk1vZGUoKSA9PSBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZU92ZXIpCiAg
ICAgICAgIHAtPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1Nv
dXJjZSk7CiAKLSAgICAvKiBUcmFuc2xhdGUgdGhlIGNvb3JkaW5hdGVzIGFzIHBoYXNlIGlzIG5v
dCBpbiB3b3JsZCBtYXRyaXggY29vcmRpbmF0ZSBzcGFjZSBidXQgdGhlIHRpbGUgcmVjdCBvcmln
aW4gaXMuICovCiAgICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSk7CisK
KyAgICAvLyBJZiB0aGlzIHdvdWxkIGRyYXcgbW9yZSB0aGFuIG9uZSBzY2FsZWQgdGlsZSwgd2Ug
c2NhbGUgdGhlIHBpeG1hcCBmaXJzdCBhbmQgdGhlbiB1c2UgdGhlIHJlc3VsdCB0byBkcmF3Lgor
ICAgIGlmICh0cmFuc2Zvcm0udHlwZSgpID09IFFUcmFuc2Zvcm06OlR4U2NhbGUpIHsKKyAgICAg
ICAgUVJlY3RGIGZpcnN0RGVzdFRpbGVSZWN0ID0gKHRyYW5zZm9ybSAqIFFUcmFuc2Zvcm0oKS50
cmFuc2xhdGUocGhhc2UueCgpLCBwaGFzZS55KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5tYXBSZWN0KHRyKTsKKyAgICAgICAgaWYgKCFmaXJzdERlc3RUaWxl
UmVjdC5jb250YWlucyhkcikpIHsKKyAgICAgICAgICAgIHBpeG1hcCA9IHBpeG1hcC50cmFuc2Zv
cm1lZCh0cmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgKHAtPnJlbmRlckhpbnRzKCkgJiBRUGFp
bnRlcjo6U21vb3RoUGl4bWFwVHJhbnNmb3JtKQorICAgICAgICAgICAgICAgID8gUXQ6OlNtb290
aFRyYW5zZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgOiBRdDo6RmFzdFRyYW5zZm9ybWF0aW9u
KTsKKworICAgICAgICAgICAgdHJhbnNmb3JtID0gUVRyYW5zZm9ybTo6ZnJvbVRyYW5zbGF0ZSh0
cmFuc2Zvcm0uZHgoKSwgdHJhbnNmb3JtLmR5KCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
LyogVHJhbnNsYXRlIHRoZSBjb29yZGluYXRlcyBhcyBwaGFzZSBpcyBub3QgaW4gd29ybGQgbWF0
cml4IGNvb3JkaW5hdGUgc3BhY2UgYnV0IHRoZSB0aWxlIHJlY3Qgb3JpZ2luIGlzLiAqLwogICAg
IHRyYW5zZm9ybSAqPSBRVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBoYXNlLngoKSwgcGhhc2UueSgp
KTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHRyLngoKSwgdHIueSgpKTsKIAo=
</data>
<flag name="review"
          id="70498"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79134</attachid>
            <date>2011-01-17 00:20:29 -0800</date>
            <delta_ts>2011-01-17 00:50:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>2822</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzODE0MWMwLi5iMzZiNDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTEtMDEtMTYgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKwor
ICAgICAgICBbUXRdIEJhY2tncm91bmQgaW1hZ2UgcmVuZGVyaW5nIGlzIHNsb3cKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTI3CisKKyAgICAgICAg
V2hlbiB0aWxpbmcgYSBzY2FsZWQgcGl4bWFwIGluIEltYWdlOjpkcmF3UGF0dGVybiwgc2NhbGUg
dGhlIHRpbGUKKyAgICAgICAgZmlyc3QgYW5kIG9ubHkgdGhlbiBkcmF3IGl0IHRvIHRoZSB0YXJn
ZXQuIERvIHNvIG9ubHkgd2hlbiBkcmF3aW5nCisgICAgICAgIG1vcmUgdGhhbiBvbmUgdGlsZS4K
KworICAgICAgICBUZXN0cyBpbiBmYXN0L2JhY2tncm91bmRzL3NpemUgY292ZXIgdGhpcy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKwogMjAxMS0wMS0xNiAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0
ZWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNw
cAppbmRleCBiNjZhMWNhLi41OGY4MmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApAQCAtMTI1LDggKzEyNSwzMCBAQCB2b2lkIEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0CiAgICAgaWYgKCFwaXhtYXAuaGFzQWxwaGEoKSAmJiBwLT5jb21wb3NpdGlv
bk1vZGUoKSA9PSBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZU92ZXIpCiAgICAgICAg
IHAtPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7
CiAKLSAgICAvKiBUcmFuc2xhdGUgdGhlIGNvb3JkaW5hdGVzIGFzIHBoYXNlIGlzIG5vdCBpbiB3
b3JsZCBtYXRyaXggY29vcmRpbmF0ZSBzcGFjZSBidXQgdGhlIHRpbGUgcmVjdCBvcmlnaW4gaXMu
ICovCiAgICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSk7CisKKyAgICAv
LyBJZiB0aGlzIHdvdWxkIGRyYXcgbW9yZSB0aGFuIG9uZSBzY2FsZWQgdGlsZSwgd2Ugc2NhbGUg
dGhlIHBpeG1hcCBmaXJzdCBhbmQgdGhlbiB1c2UgdGhlIHJlc3VsdCB0byBkcmF3LgorICAgIGlm
ICh0cmFuc2Zvcm0udHlwZSgpID09IFFUcmFuc2Zvcm06OlR4U2NhbGUpIHsKKyAgICAgICAgUVJl
Y3RGIHRpbGVSZWN0SW5UYXJnZXRDb29yZHMgPSAodHJhbnNmb3JtICogUVRyYW5zZm9ybSgpLnRy
YW5zbGF0ZShwaGFzZS54KCksIHBoYXNlLnkoKSkpLm1hcFJlY3QodHIpOworCisgICAgICAgIGJv
b2wgdGlsZVdpbGxCZVBhaW50ZWRPbmx5T25jZSA9IHRpbGVSZWN0SW5UYXJnZXRDb29yZHMuY29u
dGFpbnMoZHIpOworICAgICAgICBpZiAoIXRpbGVXaWxsQmVQYWludGVkT25seU9uY2UpIHsKKyAg
ICAgICAgICAgIFFTaXplRiBzY2FsZWRTaXplKGZsb2F0KHBpeG1hcC53aWR0aCgpKSAqIHRyYW5z
Zm9ybS5tMTEoKSwgZmxvYXQocGl4bWFwLmhlaWdodCgpKSAqIHRyYW5zZm9ybS5tMjIoKSk7Cisg
ICAgICAgICAgICBRUGl4bWFwIHNjYWxlZFBpeG1hcChzY2FsZWRTaXplLnRvU2l6ZSgpKTsKKyAg
ICAgICAgICAgIGlmIChwaXhtYXAuaGFzQWxwaGEoKSkKKyAgICAgICAgICAgICAgICBzY2FsZWRQ
aXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFFQYWludGVyIHBhaW50ZXIoJnNjYWxlZFBpeG1hcCk7CisgICAgICAgICAgICAgICAgcGFp
bnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2Up
OworICAgICAgICAgICAgICAgIHBhaW50ZXIuc2V0UmVuZGVySGludHMocC0+cmVuZGVySGludHMo
KSk7CisgICAgICAgICAgICAgICAgcGFpbnRlci5kcmF3UGl4bWFwKFFSZWN0KDAsIDAsIHNjYWxl
ZFBpeG1hcC53aWR0aCgpLCBzY2FsZWRQaXhtYXAuaGVpZ2h0KCkpLCBwaXhtYXApOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcGl4bWFwID0gc2NhbGVkUGl4bWFwOworICAgICAgICAgICAg
dHJhbnNmb3JtID0gUVRyYW5zZm9ybTo6ZnJvbVRyYW5zbGF0ZSh0cmFuc2Zvcm0uZHgoKSwgdHJh
bnNmb3JtLmR5KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogVHJhbnNsYXRlIHRoZSBj
b29yZGluYXRlcyBhcyBwaGFzZSBpcyBub3QgaW4gd29ybGQgbWF0cml4IGNvb3JkaW5hdGUgc3Bh
Y2UgYnV0IHRoZSB0aWxlIHJlY3Qgb3JpZ2luIGlzLiAqLwogICAgIHRyYW5zZm9ybSAqPSBRVHJh
bnNmb3JtKCkudHJhbnNsYXRlKHBoYXNlLngoKSwgcGhhc2UueSgpKTsKICAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKHRyLngoKSwgdHIueSgpKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>