<?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>27777</bug_id>
          
          <creation_ts>2009-07-28 13:23:23 -0700</creation_ts>
          <short_desc>ImageSourceCG makes bad data refs (race condition causes blank images)</short_desc>
          <delta_ts>2009-11-19 16:47:30 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</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="Avi Drissman">avi</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>hyatt</cc>
    
    <cc>levin</cc>
    
    <cc>mitz</cc>
    
    <cc>rsesek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135345</commentid>
    <comment_count>0</comment_count>
      <attachid>33665</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-07-28 13:23:23 -0700</bug_when>
    <thetext>Created attachment 33665
Patch to fix

When you create a CGImageRef, it takes the CFDataRef that holds its backing data, and retains it for its entire lifetime.

The problem here is that ImageSourceCG uses CFDataCreateWithBytesNoCopy to create the CFDataRef containing the image data. When you use CFDataCreateWithBytesNoCopy, it&apos;s up to you to ensure that the backing store that you pass to it stays valid through the lifetime of the created CFDataRef.

Since the lifetime of the CFDataRef is the lifetime of the CGImageRef, ImageSourceCG makes a promise that it can&apos;t keep. The SharedBuffer is passed in as a parameter to setData--who knows if it will live longer than the created CGImageRef?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135351</commentid>
    <comment_count>1</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-28 13:32:57 -0700</bug_when>
    <thetext>I am not the right guy to review this. Mitz, hyatt, darin, can you look at this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135352</commentid>
    <comment_count>2</comment_count>
      <attachid>33665</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-28 13:33:22 -0700</bug_when>
    <thetext>Comment on attachment 33665
Patch to fix

This will create a substantial memory use regression because it requires copying the data for every image every time. I believe an alternate fix can be done that will tie the lifetime of the SharedBuffer to the lifetime of the CFData instead.

Please do not check in this fix without further discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135356</commentid>
    <comment_count>3</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-07-28 13:35:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I believe an alternate fix can be
&gt; done that will tie the lifetime of the SharedBuffer to the lifetime of the
&gt; CFData instead.

OK, let me work on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135358</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-28 13:36:26 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; OK, let me work on that.

One thing we may need to consider to get that right is that the CFData could be deallocated on a non-main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135378</commentid>
    <comment_count>5</comment_count>
      <attachid>33674</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-07-28 14:45:40 -0700</bug_when>
    <thetext>Created attachment 33674
Patch to fix (ref/deref backing data)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135385</commentid>
    <comment_count>6</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-07-28 15:08:33 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; OK, let me work on that.
&gt; 
&gt; One thing we may need to consider to get that right is that the CFData could be
&gt; deallocated on a non-main thread.

Are images passed between threads?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135387</commentid>
    <comment_count>7</comment_count>
      <attachid>33674</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-28 15:12:21 -0700</bug_when>
    <thetext>Comment on attachment 33674
Patch to fix (ref/deref backing data)

&gt; +void SharedBufferDerefCallback(void*, void* info)

Function names should start with a lowercase letter. Since this is private to this source file it should use &quot;static&quot; to get internal linkage.

&gt; +    SharedBuffer* sharedBuffer = reinterpret_cast&lt;SharedBuffer*&gt;(info);

This should be static_cast, which can convert a void* to a specific pointer type.

&gt; +    data-&gt;ref();
&gt; +    CFAllocatorContext context = {0, data, 0, 0, 0, 0, 0, SharedBufferDerefCallback, 0};
&gt; +    CFAllocatorRef derefAllocator = CFAllocatorCreate(kCFAllocatorDefault, &amp;context);
&gt; +    CFDataRef cfData = CFDataCreateWithBytesNoCopy(0, reinterpret_cast&lt;const UInt8*&gt;(data-&gt;data()), data-&gt;size(), derefAllocator);
&gt; +    CFRelease(derefAllocator);

Creating a unique allocator each time is unfortunate, but I can&apos;t think of any better idea.

r=me but the style issues I mention above should be fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135389</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-28 15:13:30 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; OK, let me work on that.
&gt; &gt; 
&gt; &gt; One thing we may need to consider to get that right is that the CFData could be
&gt; &gt; deallocated on a non-main thread.
&gt; 
&gt; Are images passed between threads?

I believe CGImageRef is free to call release on its data from any thread it likes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135400</commentid>
    <comment_count>9</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-07-28 15:30:56 -0700</bug_when>
    <thetext>&gt; I believe CGImageRef is free to call release on its data from any thread it
&gt; likes.

All I know is that when the CGImageRef is released, it releases its providers, which release their data, and so on down the chain. I&apos;ve seen no documentation that speaks of thread safety in this regard. I can&apos;t say one way or another.

In the latest patch, trying to add &quot;static&quot; to the function causes tons of errors. Will an anonymous namespace do instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135401</commentid>
    <comment_count>10</comment_count>
      <attachid>33677</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-07-28 15:31:42 -0700</bug_when>
    <thetext>Created attachment 33677
Patch with Darin&apos;s cleanup applied</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135405</commentid>
    <comment_count>11</comment_count>
      <attachid>33679</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-07-28 15:51:45 -0700</bug_when>
    <thetext>Created attachment 33679
Patch with platform fix and &quot;static&quot;

That should do it. Compiles with both PLATFORM(MAC) and not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135510</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-29 00:33:12 -0700</bug_when>
    <thetext>Assign to levin for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135511</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-29 00:36:03 -0700</bug_when>
    <thetext>Please add the bug title and bug link to the change log in the future.

If you do prepare-ChangeLog --bug #, it will be done for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135521</commentid>
    <comment_count>14</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-29 01:08:40 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/46527</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164641</commentid>
    <comment_count>15</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-18 11:42:11 -0800</bug_when>
    <thetext>This fix is wrong.

ImageSourceCG.cpp:119:
RetainPtr&lt;CFDataRef&gt; cfData(AdoptCF, CFDataCreateWithBytesNoCopy(0, reinterpret_cast&lt;const UInt8*&gt;(data-&gt;data()), data-&gt;size(), derefAllocator.get()));

The data pointer obtained from a SharedBuffer is valid only for the moment. If anyone adds data to the SharedBuffer, and that causes the internal Vector&lt;char&gt; to be reallocated, the data pointer will become stale, and WebCore will crash the next time it tries to access the data of the created CFData.

Writing a fix to create a CGDataProviderRef that wraps a SharedBuffer and that can properly access its bytes.

Patch to come soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164720</commentid>
    <comment_count>16</comment_count>
      <attachid>43462</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-18 14:30:04 -0800</bug_when>
    <thetext>Created attachment 43462
Patch to fix crash

This ensures that when CG tries to access the data backing the image, it always gets something valid.

BTW, technically-speaking, PDFDocumentImage::dataChanged has the same bug since it uses CFDataCreateWithBytesNoCopy. Mitigating it is the fact that it owns its data (it&apos;s a subclass of Image) and therefore holds the ref, and it only creates the CFDataRef once the transfer is complete, ensuring that the underlying buffer won&apos;t be growing further and invalidating the data pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164813</commentid>
    <comment_count>17</comment_count>
      <attachid>43462</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-18 16:39:06 -0800</bug_when>
    <thetext>Comment on attachment 43462
Patch to fix crash

Looks like a great fix!

Is there any way to test this? How did you discover this mistake?

&gt; +        (WebCore::):

Please remove lines like this from the ChangeLog when prepare-ChangeLog puts them in.

&gt; +    ssize_t amount = std::min(static_cast&lt;off_t&gt;(count), sharedBuffer-&gt;size() - position);

We normally use &quot;using namespace std&quot; at the top of the file and call functions as just &quot;min&quot; rather than &quot;std::min&quot;.

I don&apos;t think ssize_t exists on Windows. I suggest just using off_t for the local variable.

You can use min&lt;off_t&gt; instead of casting count to off_t if you like.

&gt; +    if (amount &lt;= 0)
&gt; +        return 0;

This seems unnecessary. The memcpy function already does the right thing when passed a zero. There is no chance of a negative number here, is there?

If we really do need to handle the case where position is greater than the buffer size, I think we should check that specifically by comparing size and position before substracting. Then we can use the type size_t within the function and avoid the signed arithmetic in the min expression.

&gt; +// We use the GetBytesAtPosition callback rather than the GetBytePointer one because SharedBuffer
&gt; +// does not provide a way to lock down the byte pointer and guarantee that it won&apos;t move, which
&gt; +// is a requirement for using the GetBytePointer callback.
&gt; +static const CGDataProviderDirectCallbacks kProviderCallbacks = {0, NULL, NULL, sharedBufferGetBytesAtPosition, sharedBufferRelease};

Can we just put this inside the function, instead of at namespace scope? There&apos;s no need for it to be a global. The old idiom used for the allocator seems cleaner to me.

We don&apos;t use &quot;k&quot; for constants in WebKit.

I know that the callbacks in the Core Foundation library itself use this style with the &quot;k&quot;, but we don&apos;t.

We use &quot;0&quot; rather than NULL in WebKit.

We normally put spaces after the first &quot;{&quot; and before the last &quot;}&quot;.

Would you be willing to do the same fix in PDFDocumentImage?

review- mainly because of the minor coding style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164829</commentid>
    <comment_count>18</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-18 16:57:22 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Looks like a great fix!

Thanks!

&gt; Is there any way to test this? How did you discover this mistake?

The repro case seems to be a large image fractured. The first chunk arrives, an ImageSourceCG is created, someone (not sure how yet) adds more data, then the image is drawn.

It&apos;s clear that the code is wrong on a theoretical level, and I have crash reports from Chrome in the field that implicate this code (see http://crbug.com/12728 ). Whether or not this fix solves the problem, though, I can&apos;t say.

This was discovered after describing the problem to a colleague. I&apos;ve stared at the code on and off for three months now; but telling it to her, we realized the problem in a few minutes :)

&gt; If we really do need to handle the case where position is greater than the
&gt; buffer size

Yes, we do. We&apos;ve no good guarantee that the size of the buffer hasn&apos;t changed since we created the source. Now, it&apos;s unlikely that it&apos;s shrunk, but I&apos;d rather be careful than pass a negative (or wrapped) size to memcpy.

&gt; Then we can use the type size_t within the
&gt; function and avoid the signed arithmetic in the min expression.

Good idea.

&gt; Would you be willing to do the same fix in PDFDocumentImage?

Sure thing.

Revised patch to come.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164883</commentid>
    <comment_count>19</comment_count>
      <attachid>43479</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-18 19:34:47 -0800</bug_when>
    <thetext>Created attachment 43479
Revised patch.

With fixes. Is the sharing of the function OK to do that way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165001</commentid>
    <comment_count>20</comment_count>
      <attachid>43479</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-19 09:44:21 -0800</bug_when>
    <thetext>Comment on attachment 43479
Revised patch.

Looks great. Two style things that should be fixed before landing this.

&gt; +    size_t source_size = sharedBuffer-&gt;size();

WebKit style uses sourceSize, not source_size, for a local variable like this.

&gt; +    size_t amount = min&lt;size_t&gt;(count, source_size - position);

I presume you tried this without &lt;size_t&gt;. If it worked that way we would want to leave it out.

&gt; +    const CGDataProviderDirectCallbacks providerCallbacks = { 0, 0, 0, sharedBufferGetBytesAtPosition, sharedBufferRelease };

The const on this line isn&apos;t helpful. In general, there are many local variables that could be marked const, but as a general rule we do not do it since the extra verbiage doesn&apos;t help clarify things.

We could decide to go the other way and start putting in const for local variables whenever possible, but I&apos;d prefer not to do it on a case by case basis.

&gt; +#if !PLATFORM(MAC)
&gt; +// From ImageSourceCG
&gt; +extern size_t sharedBufferGetBytesAtPosition(void* info, void* buffer, off_t position, size_t count);
&gt; +#endif

This needs to go into a header file, ImageSourceCG.h. We don&apos;t put externs into other files like this. I believe that you can even add a header file without modifying any of the project files, although it&apos;s customary to reference it in the Mac and Windows projects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165060</commentid>
    <comment_count>21</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-19 12:43:19 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt; +    size_t amount = min&lt;size_t&gt;(count, source_size - position);
&gt; 
&gt; I presume you tried this without &lt;size_t&gt;. If it worked that way we would want
&gt; to leave it out.

offset is an off_t which is signed, so we do need the specialization.

&gt; The const on this line isn&apos;t helpful.

If that&apos;s how you feel, that&apos;s fine. I was imitating the array declarations in
imageSourceOptions().

&gt; This needs to go into a header file, ImageSourceCG.h.

OK.

Revving patch now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165097</commentid>
    <comment_count>22</comment_count>
      <attachid>43525</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-19 14:48:54 -0800</bug_when>
    <thetext>Created attachment 43525
With header file changes

That should do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165103</commentid>
    <comment_count>23</comment_count>
      <attachid>43525</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-19 15:00:15 -0800</bug_when>
    <thetext>Comment on attachment 43525
With header file changes

&gt;  #include &quot;GraphicsContext.h&quot;
&gt;  #include &quot;ImageObserver.h&quot;
&gt; +#if !PLATFORM(MAC)
&gt; +#include &quot;ImageSourceCG.h&quot;
&gt; +#endif
&gt;  #include &lt;wtf/MathExtras.h&gt;

Conditional includes are supposed to be in their own separate paragraph, not in with the rest of the includes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165105</commentid>
    <comment_count>24</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-19 15:08:02 -0800</bug_when>
    <thetext>&gt; Conditional includes are supposed to be in their own separate paragraph, not in
&gt; with the rest of the includes.

Do you want a followup patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165109</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-19 15:12:47 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; Conditional includes are supposed to be in their own separate paragraph, not in
&gt; &gt; with the rest of the includes.
&gt; 
&gt; Do you want a followup patch?

Sure, would be nice to clean that up. I didn&apos;t want to hold you up just for that though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165110</commentid>
    <comment_count>26</comment_count>
      <attachid>43525</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-19 15:13:09 -0800</bug_when>
    <thetext>Comment on attachment 43525
With header file changes

Clearing flags on attachment: 43525

Committed r51207: &lt;http://trac.webkit.org/changeset/51207&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165111</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-19 15:13:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165132</commentid>
    <comment_count>28</comment_count>
      <attachid>43531</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-19 15:53:36 -0800</bug_when>
    <thetext>Created attachment 43531
Quick style patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165133</commentid>
    <comment_count>29</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-11-19 15:54:17 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; Created an attachment (id=43531) [details]
&gt; Quick style patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165149</commentid>
    <comment_count>30</comment_count>
      <attachid>43531</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-19 16:47:17 -0800</bug_when>
    <thetext>Comment on attachment 43531
Quick style patch

Clearing flags on attachment: 43531

Committed r51221: &lt;http://trac.webkit.org/changeset/51221&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165150</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-19 16:47:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33665</attachid>
            <date>2009-07-28 13:23:23 -0700</date>
            <delta_ts>2009-07-28 14:45:40 -0700</delta_ts>
            <desc>Patch to fix</desc>
            <filename>data.patch</filename>
            <type>text/plain</type>
            <size>1930</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjQ5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDctMjggIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFr
ZSBJbWFnZVNvdXJjZUNHIG5vdCBiYWNrIGEgQ0ZEYXRhUmVmIHdpdGggYSBTaGFyZWRCdWZmZXIu
CisgICAgICAgIEl0IGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgbGlmZXRpbWUgb2YgdGhlIFNo
YXJlZEJ1ZmZlciB3aWxsIGJlCisgICAgICAgIGxvbmdlciB0aGFuIHRoZSBDRkRhdGFSZWYgdGhh
dCBpdCBiYWNrcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoaXMgZml4ZXMgYSBidWcg
d2l0aCBhIHJhY2UgY29uZGl0aW9uIHRoYXQgaXMKKyAgICAgICAgZGlmZmljdWx0IHRvIHRyaWdn
ZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKToKKwogMjAwOS0wNy0yOCAg
QW5hbnRhbmFyYXlhbmFuIEl5ZW5nYXIgIDxhbmFudGFAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gNDY0OTYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsOSArMTAzLDggQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZm
ZXIqIAogICAgIC8vIHRvIHdyYXAgaXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFyb3VuZCB0
aGlzLCBlbnN1cmluZyB0aGF0IEltYWdlSU8gaXMgcmVhbGx5IGxvb2tpbmcgYXQgdGhlIFNoYXJl
ZEJ1ZmZlci4KICAgICBDRkRhdGFSZWYgY2ZEYXRhID0gZGF0YS0+Y3JlYXRlQ0ZEYXRhKCk7CiAj
ZWxzZQotICAgIC8vIElmIG5vIE5TRGF0YSBpcyBhdmFpbGFibGUsIHRoZW4gd2Uga25vdyBTaGFy
ZWRCdWZmZXIgd2lsbCBhbHdheXMganVzdCBiZSBhIHZlY3Rvci4gIFRoYXQgbWVhbnMgbm8gc2Vj
cmV0IGNoYW5nZXMgY2FuIG9jY3VyIHRvIGl0IGJlaGluZCB0aGUKLSAgICAvLyBzY2VuZXMuICBX
ZSB1c2UgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5IGluIHRoYXQgY2FzZS4KLSAgICBDRkRh
dGFSZWYgY2ZEYXRhID0gQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhLT5kYXRhKCkpLCBkYXRhLT5zaXplKCksIGtDRkFsbG9j
YXRvck51bGwpOworICAgIC8vIFdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGRhdGEgYmVjYXVzZSB3
ZSBjYW5ub3QgYmUgYXNzdXJlZCB0aGF0IHRoZSBTaGFyZWRCdWZmZXIgd2lsbCBvdXRsaXZlIHRo
ZSBDR0ltYWdlIHdlIGNyZWF0ZS4KKyAgICBDRkRhdGFSZWYgY2ZEYXRhID0gQ0ZEYXRhQ3JlYXRl
KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhLT5kYXRhKCkpLCBkYXRhLT5z
aXplKCkpOwogI2VuZGlmCiAgICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9kZWNvZGVyLCBj
ZkRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgQ0ZSZWxlYXNlKGNmRGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33674</attachid>
            <date>2009-07-28 14:45:40 -0700</date>
            <delta_ts>2009-07-28 15:31:42 -0700</delta_ts>
            <desc>Patch to fix (ref/deref backing data)</desc>
            <filename>data.patch</filename>
            <type>text/plain</type>
            <size>2366</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjQ5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMjggIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFr
ZSBJbWFnZVNvdXJjZUNHIGd1YXJhbnRlZSB0aGF0IHRoZSBsaWZldGltZSBvZiB0aGUgU2hhcmVk
QnVmZmVyIHRoYXQKKyAgICAgICAgYmFja3MgdGhlIENGRGF0YVJlZiB3aWxsIGJlIGxvbmcgZW5v
dWdoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhpcyBmaXhlcyBhIGJ1ZyB3aXRoIGEg
cmFjZSBjb25kaXRpb24gdGhhdCBpcworICAgICAgICBkaWZmaWN1bHQgdG8gdHJpZ2dlci4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorCiAyMDA5LTA3LTI4ICBBbmFudGFu
YXJheWFuYW4gSXllbmdhciAgPGFuYW50YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZVNvdXJjZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCShyZXZpc2lvbiA0NjQ5NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IENGU3RyaW5n
UmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3Vy
Y2VTaG91bGRQcmVmZXJSR0IzMiIpOwogCit2b2lkIFNoYXJlZEJ1ZmZlckRlcmVmQ2FsbGJhY2so
dm9pZCosIHZvaWQqIGluZm8pCit7CisgICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBy
ZWludGVycHJldF9jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNoYXJlZEJ1ZmZlci0+
ZGVyZWYoKTsKK30KKwogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKCkKICAgICA6IG1fZGVjb2Rl
cigwKQogewpAQCAtMTA0LDggKzExMCwxMiBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNo
YXJlZEJ1ZmZlciogCiAgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IGRhdGEtPmNyZWF0ZUNGRGF0YSgp
OwogI2Vsc2UKICAgICAvLyBJZiBubyBOU0RhdGEgaXMgYXZhaWxhYmxlLCB0aGVuIHdlIGtub3cg
U2hhcmVkQnVmZmVyIHdpbGwgYWx3YXlzIGp1c3QgYmUgYSB2ZWN0b3IuICBUaGF0IG1lYW5zIG5v
IHNlY3JldCBjaGFuZ2VzIGNhbiBvY2N1ciB0byBpdCBiZWhpbmQgdGhlCi0gICAgLy8gc2NlbmVz
LiAgV2UgdXNlIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSBpbiB0aGF0IGNhc2UuCi0gICAg
Q0ZEYXRhUmVmIGNmRGF0YSA9IENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YS0+ZGF0YSgpKSwgZGF0YS0+c2l6ZSgpLCBrQ0ZB
bGxvY2F0b3JOdWxsKTsKKyAgICAvLyBzY2VuZXMuICBXZSB1c2UgQ0ZEYXRhQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5IGluIHRoYXQgY2FzZS4gRW5zdXJlIHRoYXQgdGhlIFNoYXJlZEJ1ZmZlciBsaXZl
cyBhcyBsb25nIGFzIHRoZSBDRkRhdGFSZWYuCisgICAgZGF0YS0+cmVmKCk7CisgICAgQ0ZBbGxv
Y2F0b3JDb250ZXh0IGNvbnRleHQgPSB7MCwgZGF0YSwgMCwgMCwgMCwgMCwgMCwgU2hhcmVkQnVm
ZmVyRGVyZWZDYWxsYmFjaywgMH07CisgICAgQ0ZBbGxvY2F0b3JSZWYgZGVyZWZBbGxvY2F0b3Ig
PSBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAmY29udGV4dCk7CisgICAg
Q0ZEYXRhUmVmIGNmRGF0YSA9IENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YS0+ZGF0YSgpKSwgZGF0YS0+c2l6ZSgpLCBkZXJl
ZkFsbG9jYXRvcik7CisgICAgQ0ZSZWxlYXNlKGRlcmVmQWxsb2NhdG9yKTsKICNlbmRpZgogICAg
IENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhKG1fZGVjb2RlciwgY2ZEYXRhLCBhbGxEYXRhUmVjZWl2
ZWQpOwogICAgIENGUmVsZWFzZShjZkRhdGEpOwo=
</data>
<flag name="review"
          id="17898"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33677</attachid>
            <date>2009-07-28 15:31:42 -0700</date>
            <delta_ts>2009-07-28 15:51:45 -0700</delta_ts>
            <desc>Patch with Darin&apos;s cleanup applied</desc>
            <filename>data.patch</filename>
            <type>text/plain</type>
            <size>2381</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjQ5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMjggIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFr
ZSBJbWFnZVNvdXJjZUNHIGd1YXJhbnRlZSB0aGF0IHRoZSBsaWZldGltZSBvZiB0aGUgU2hhcmVk
QnVmZmVyIHRoYXQKKyAgICAgICAgYmFja3MgdGhlIENGRGF0YVJlZiB3aWxsIGJlIGxvbmcgZW5v
dWdoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhpcyBmaXhlcyBhIGJ1ZyB3aXRoIGEg
cmFjZSBjb25kaXRpb24gdGhhdCBpcworICAgICAgICBkaWZmaWN1bHQgdG8gdHJpZ2dlci4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorCiAyMDA5LTA3LTI4ICBBbmFudGFu
YXJheWFuYW4gSXllbmdhciAgPGFuYW50YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZVNvdXJjZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCShyZXZpc2lvbiA0NjQ5NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IENGU3RyaW5n
UmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3Vy
Y2VTaG91bGRQcmVmZXJSR0IzMiIpOwogCituYW1lc3BhY2UgeworCit2b2lkIHNoYXJlZEJ1ZmZl
ckRlcmVmQ2FsbGJhY2sodm9pZCosIHZvaWQqIGluZm8pCit7CisgICAgU2hhcmVkQnVmZmVyKiBz
aGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKKyAgICBzaGFy
ZWRCdWZmZXItPmRlcmVmKCk7Cit9CisKK30KKwogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKCkK
ICAgICA6IG1fZGVjb2RlcigwKQogewpAQCAtMTA0LDggKzExNCwxMiBAQCB2b2lkIEltYWdlU291
cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogCiAgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IGRhdGEt
PmNyZWF0ZUNGRGF0YSgpOwogI2Vsc2UKICAgICAvLyBJZiBubyBOU0RhdGEgaXMgYXZhaWxhYmxl
LCB0aGVuIHdlIGtub3cgU2hhcmVkQnVmZmVyIHdpbGwgYWx3YXlzIGp1c3QgYmUgYSB2ZWN0b3Iu
ICBUaGF0IG1lYW5zIG5vIHNlY3JldCBjaGFuZ2VzIGNhbiBvY2N1ciB0byBpdCBiZWhpbmQgdGhl
Ci0gICAgLy8gc2NlbmVzLiAgV2UgdXNlIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSBpbiB0
aGF0IGNhc2UuCi0gICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENGRGF0YUNyZWF0ZVdpdGhCeXRlc05v
Q29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YS0+ZGF0YSgpKSwgZGF0
YS0+c2l6ZSgpLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKKyAgICAvLyBzY2VuZXMuICBXZSB1c2UgQ0ZE
YXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5IGluIHRoYXQgY2FzZS4gRW5zdXJlIHRoYXQgdGhlIFNo
YXJlZEJ1ZmZlciBsaXZlcyBhcyBsb25nIGFzIHRoZSBDRkRhdGFSZWYuCisgICAgZGF0YS0+cmVm
KCk7CisgICAgQ0ZBbGxvY2F0b3JDb250ZXh0IGNvbnRleHQgPSB7MCwgZGF0YSwgMCwgMCwgMCwg
MCwgMCwgc2hhcmVkQnVmZmVyRGVyZWZDYWxsYmFjaywgMH07CisgICAgQ0ZBbGxvY2F0b3JSZWYg
ZGVyZWZBbGxvY2F0b3IgPSBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAm
Y29udGV4dCk7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENGRGF0YUNyZWF0ZVdpdGhCeXRlc05v
Q29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YS0+ZGF0YSgpKSwgZGF0
YS0+c2l6ZSgpLCBkZXJlZkFsbG9jYXRvcik7CisgICAgQ0ZSZWxlYXNlKGRlcmVmQWxsb2NhdG9y
KTsKICNlbmRpZgogICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhKG1fZGVjb2RlciwgY2ZEYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIENGUmVsZWFzZShjZkRhdGEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33679</attachid>
            <date>2009-07-28 15:51:45 -0700</date>
            <delta_ts>2009-11-18 14:30:04 -0800</delta_ts>
            <desc>Patch with platform fix and &quot;static&quot;</desc>
            <filename>data.patch</filename>
            <type>text/plain</type>
            <size>2397</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjQ5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMjggIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFr
ZSBJbWFnZVNvdXJjZUNHIGd1YXJhbnRlZSB0aGF0IHRoZSBsaWZldGltZSBvZiB0aGUgU2hhcmVk
QnVmZmVyIHRoYXQKKyAgICAgICAgYmFja3MgdGhlIENGRGF0YVJlZiB3aWxsIGJlIGxvbmcgZW5v
dWdoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhpcyBmaXhlcyBhIGJ1ZyB3aXRoIGEg
cmFjZSBjb25kaXRpb24gdGhhdCBpcworICAgICAgICBkaWZmaWN1bHQgdG8gdHJpZ2dlci4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorCiAyMDA5LTA3LTI4ICBBbmFudGFu
YXJheWFuYW4gSXllbmdhciAgPGFuYW50YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZVNvdXJjZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCShyZXZpc2lvbiA0NjQ5NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IENGU3RyaW5n
UmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3Vy
Y2VTaG91bGRQcmVmZXJSR0IzMiIpOwogCisjaWYgIVBMQVRGT1JNKE1BQykKK3N0YXRpYyB2b2lk
IHNoYXJlZEJ1ZmZlckRlcmVmQ2FsbGJhY2sodm9pZCosIHZvaWQqIGluZm8pCit7CisgICAgU2hh
cmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZv
KTsKKyAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Cit9CisjZW5kaWYKKwogSW1hZ2VTb3VyY2U6
OkltYWdlU291cmNlKCkKICAgICA6IG1fZGVjb2RlcigwKQogewpAQCAtMTA0LDggKzExMiwxMiBA
QCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogCiAgICAgQ0ZEYXRhUmVm
IGNmRGF0YSA9IGRhdGEtPmNyZWF0ZUNGRGF0YSgpOwogI2Vsc2UKICAgICAvLyBJZiBubyBOU0Rh
dGEgaXMgYXZhaWxhYmxlLCB0aGVuIHdlIGtub3cgU2hhcmVkQnVmZmVyIHdpbGwgYWx3YXlzIGp1
c3QgYmUgYSB2ZWN0b3IuICBUaGF0IG1lYW5zIG5vIHNlY3JldCBjaGFuZ2VzIGNhbiBvY2N1ciB0
byBpdCBiZWhpbmQgdGhlCi0gICAgLy8gc2NlbmVzLiAgV2UgdXNlIENGRGF0YUNyZWF0ZVdpdGhC
eXRlc05vQ29weSBpbiB0aGF0IGNhc2UuCi0gICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENGRGF0YUNy
ZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0
YS0+ZGF0YSgpKSwgZGF0YS0+c2l6ZSgpLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKKyAgICAvLyBzY2Vu
ZXMuICBXZSB1c2UgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5IGluIHRoYXQgY2FzZS4gRW5z
dXJlIHRoYXQgdGhlIFNoYXJlZEJ1ZmZlciBsaXZlcyBhcyBsb25nIGFzIHRoZSBDRkRhdGFSZWYu
CisgICAgZGF0YS0+cmVmKCk7CisgICAgQ0ZBbGxvY2F0b3JDb250ZXh0IGNvbnRleHQgPSB7MCwg
ZGF0YSwgMCwgMCwgMCwgMCwgMCwgJnNoYXJlZEJ1ZmZlckRlcmVmQ2FsbGJhY2ssIDB9OworICAg
IENGQWxsb2NhdG9yUmVmIGRlcmVmQWxsb2NhdG9yID0gQ0ZBbGxvY2F0b3JDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgJmNvbnRleHQpOworICAgIENGRGF0YVJlZiBjZkRhdGEgPSBDRkRhdGFD
cmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRh
dGEtPmRhdGEoKSksIGRhdGEtPnNpemUoKSwgZGVyZWZBbGxvY2F0b3IpOworICAgIENGUmVsZWFz
ZShkZXJlZkFsbG9jYXRvcik7CiAjZW5kaWYKICAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YSht
X2RlY29kZXIsIGNmRGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBDRlJlbGVhc2UoY2ZEYXRh
KTsK
</data>
<flag name="review"
          id="17901"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43462</attachid>
            <date>2009-11-18 14:30:04 -0800</date>
            <delta_ts>2009-11-18 19:34:47 -0800</delta_ts>
            <desc>Patch to fix crash</desc>
            <filename>image.patch</filename>
            <type>text/plain</type>
            <size>3715</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTEzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMTEtMTggIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJv
cGVybHkgY3JlYXRlIGEgQ0dJbWFnZVJlZiBvbiBub24tUExBVEZPUk0oTUFDKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3Nzc3CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
aGFyZWRCdWZmZXJSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisKIDIwMDktMTEtMTggIEplbnMgQWxma2UgIDxz
bmVqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBCdWlsZCBmaXggdG8gbXkgcHJldmlvdXMgY2hl
Y2tpbiwgZm9yIFdpbmRvd3MgQ2hyb21pdW0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gNTExMjgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwxMSArNDAsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNvbnN0IENGU3Ry
aW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VT
b3VyY2VTaG91bGRQcmVmZXJSR0IzMiIpOwogCiAjaWYgIVBMQVRGT1JNKE1BQykKLXN0YXRpYyB2
b2lkIHNoYXJlZEJ1ZmZlckRlcmVmQ2FsbGJhY2sodm9pZCosIHZvaWQqIGluZm8pCitzdGF0aWMg
c2l6ZV90IHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZvLCB2b2lkKiBi
dWZmZXIsIG9mZl90IHBvc2l0aW9uLCBzaXplX3QgY291bnQpCit7CisgICAgU2hhcmVkQnVmZmVy
KiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKKyAgICBj
b25zdCBjaGFyKiBzb3VyY2UgPSBzaGFyZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9uOworICAg
IHNzaXplX3QgYW1vdW50ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8b2ZmX3Q+KGNvdW50KSwgc2hh
cmVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7CisgICAgaWYgKGFtb3VudCA8PSAwKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7CisgICAg
cmV0dXJuIGFtb3VudDsKK30KKworc3RhdGljIHZvaWQgc2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lk
KiBpbmZvKQogewogICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8
U2hhcmVkQnVmZmVyKj4oaW5mbyk7CiAgICAgc2hhcmVkQnVmZmVyLT5kZXJlZigpOwogfQorCisv
LyBXZSB1c2UgdGhlIEdldEJ5dGVzQXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUg
R2V0Qnl0ZVBvaW50ZXIgb25lIGJlY2F1c2UgU2hhcmVkQnVmZmVyCisvLyBkb2VzIG5vdCBwcm92
aWRlIGEgd2F5IHRvIGxvY2sgZG93biB0aGUgYnl0ZSBwb2ludGVyIGFuZCBndWFyYW50ZWUgdGhh
dCBpdCB3b24ndCBtb3ZlLCB3aGljaAorLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhl
IEdldEJ5dGVQb2ludGVyIGNhbGxiYWNrLgorc3RhdGljIGNvbnN0IENHRGF0YVByb3ZpZGVyRGly
ZWN0Q2FsbGJhY2tzIGtQcm92aWRlckNhbGxiYWNrcyA9IHswLCBOVUxMLCBOVUxMLCBzaGFyZWRC
dWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJlZEJ1ZmZlclJlbGVhc2V9OwogI2VuZGlmCiAK
IEltYWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCkBAIC0xMTAsMTUgKzEyNiwxMyBAQCB2b2lkIElt
YWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogCiAgICAgLy8gT24gTWFjIHRoZSBOU0Rh
dGEgaW5zaWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFwcGVuZGVkIHRvIHdp
dGhvdXQgdGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4gIFdlIHVzZSBTaGFyZWRCdWZmZXIn
cyBhYmlsaXR5CiAgICAgLy8gdG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQgYXJv
dW5kIHRoaXMsIGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcyByZWFsbHkgbG9va2luZyBhdCB0aGUg
U2hhcmVkQnVmZmVyLgogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShBZG9wdENGLCBk
YXRhLT5jcmVhdGVDRkRhdGEoKSk7CisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9kZWNv
ZGVyLCBjZkRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiAjZWxzZQotICAgIC8vIElmIG5v
IE5TRGF0YSBpcyBhdmFpbGFibGUsIHRoZW4gd2Uga25vdyBTaGFyZWRCdWZmZXIgd2lsbCBhbHdh
eXMganVzdCBiZSBhIHZlY3Rvci4gIFRoYXQgbWVhbnMgbm8gc2VjcmV0IGNoYW5nZXMgY2FuIG9j
Y3VyIHRvIGl0IGJlaGluZCB0aGUKLSAgICAvLyBzY2VuZXMuICBXZSB1c2UgQ0ZEYXRhQ3JlYXRl
V2l0aEJ5dGVzTm9Db3B5IGluIHRoYXQgY2FzZS4gRW5zdXJlIHRoYXQgdGhlIFNoYXJlZEJ1ZmZl
ciBsaXZlcyBhcyBsb25nIGFzIHRoZSBDRkRhdGFSZWYuCisgICAgLy8gQ3JlYXRlIGEgQ0dEYXRh
UHJvdmlkZXIgdG8gd3JhcCB0aGUgU2hhcmVkQnVmZmVyLgogICAgIGRhdGEtPnJlZigpOwotICAg
IENGQWxsb2NhdG9yQ29udGV4dCBjb250ZXh0ID0gezAsIGRhdGEsIDAsIDAsIDAsIDAsIDAsICZz
aGFyZWRCdWZmZXJEZXJlZkNhbGxiYWNrLCAwfTsKLSAgICBSZXRhaW5QdHI8Q0ZBbGxvY2F0b3JS
ZWY+IGRlcmVmQWxsb2NhdG9yKEFkb3B0Q0YsIENGQWxsb2NhdG9yQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsICZjb250ZXh0KSk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKEFk
b3B0Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNv
bnN0IFVJbnQ4Kj4oZGF0YS0+ZGF0YSgpKSwgZGF0YS0+c2l6ZSgpLCBkZXJlZkFsbG9jYXRvci5n
ZXQoKSkpOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyKEFk
b3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlRGlyZWN0KGRhdGEsIGRhdGEtPnNpemUoKSwgJmtQ
cm92aWRlckNhbGxiYWNrcykpOworICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhUHJvdmlkZXIo
bV9kZWNvZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiAjZW5kaWYK
LSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX2RlY29kZXIsIGNmRGF0YS5nZXQoKSwgYWxs
RGF0YVJlY2VpdmVkKTsKIH0KIAogU3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0Cg==
</data>
<flag name="review"
          id="25165"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43479</attachid>
            <date>2009-11-18 19:34:47 -0800</date>
            <delta_ts>2009-11-19 14:48:54 -0800</delta_ts>
            <desc>Revised patch.</desc>
            <filename>image.patch</filename>
            <type>text/plain</type>
            <size>6195</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTE2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMTEtMTggIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJv
cGVybHkgY3JlYXRlIGEgQ0dJbWFnZVJlZiBvbiBub24tUExBVEZPUk0oTUFDKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3Nzc3CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
aGFyZWRCdWZmZXJSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXRE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRhdGFDaGFuZ2VkKToKKwog
MjAwOS0xMS0xOSAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gNTExNTcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMiArMzUsMjcgQEAKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2Vz
L0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29u
c3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RSKCJr
Q0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7CiAKICNpZiAhUExBVEZPUk0oTUFDKQot
c3RhdGljIHZvaWQgc2hhcmVkQnVmZmVyRGVyZWZDYWxsYmFjayh2b2lkKiwgdm9pZCogaW5mbykK
K3NpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9pZCog
YnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQoreworICAgIFNoYXJlZEJ1ZmZl
ciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7CisgICAg
c2l6ZV90IHNvdXJjZV9zaXplID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7CisgICAgaWYgKHBvc2l0
aW9uID49IHNvdXJjZV9zaXplKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IGNoYXIq
IHNvdXJjZSA9IHNoYXJlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb247CisgICAgc2l6ZV90IGFt
b3VudCA9IG1pbjxzaXplX3Q+KGNvdW50LCBzb3VyY2Vfc2l6ZSAtIHBvc2l0aW9uKTsKKyAgICBt
ZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7CisgICAgcmV0dXJuIGFtb3VudDsKK30KKwor
dm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8pCiB7CiAgICAgU2hhcmVkQnVmZmVy
KiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKICAgICBz
aGFyZWRCdWZmZXItPmRlcmVmKCk7CkBAIC0xMTAsMTUgKzEyNSwxNyBAQCB2b2lkIEltYWdlU291
cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogCiAgICAgLy8gT24gTWFjIHRoZSBOU0RhdGEgaW5z
aWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFwcGVuZGVkIHRvIHdpdGhvdXQg
dGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4gIFdlIHVzZSBTaGFyZWRCdWZmZXIncyBhYmls
aXR5CiAgICAgLy8gdG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQgYXJvdW5kIHRo
aXMsIGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcyByZWFsbHkgbG9va2luZyBhdCB0aGUgU2hhcmVk
QnVmZmVyLgogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShBZG9wdENGLCBkYXRhLT5j
cmVhdGVDRkRhdGEoKSk7CisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9kZWNvZGVyLCBj
ZkRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiAjZWxzZQotICAgIC8vIElmIG5vIE5TRGF0
YSBpcyBhdmFpbGFibGUsIHRoZW4gd2Uga25vdyBTaGFyZWRCdWZmZXIgd2lsbCBhbHdheXMganVz
dCBiZSBhIHZlY3Rvci4gIFRoYXQgbWVhbnMgbm8gc2VjcmV0IGNoYW5nZXMgY2FuIG9jY3VyIHRv
IGl0IGJlaGluZCB0aGUKLSAgICAvLyBzY2VuZXMuICBXZSB1c2UgQ0ZEYXRhQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5IGluIHRoYXQgY2FzZS4gRW5zdXJlIHRoYXQgdGhlIFNoYXJlZEJ1ZmZlciBsaXZl
cyBhcyBsb25nIGFzIHRoZSBDRkRhdGFSZWYuCisgICAgLy8gQ3JlYXRlIGEgQ0dEYXRhUHJvdmlk
ZXIgdG8gd3JhcCB0aGUgU2hhcmVkQnVmZmVyLgogICAgIGRhdGEtPnJlZigpOwotICAgIENGQWxs
b2NhdG9yQ29udGV4dCBjb250ZXh0ID0gezAsIGRhdGEsIDAsIDAsIDAsIDAsIDAsICZzaGFyZWRC
dWZmZXJEZXJlZkNhbGxiYWNrLCAwfTsKLSAgICBSZXRhaW5QdHI8Q0ZBbGxvY2F0b3JSZWY+IGRl
cmVmQWxsb2NhdG9yKEFkb3B0Q0YsIENGQWxsb2NhdG9yQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsICZjb250ZXh0KSk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKEFkb3B0Q0Ys
IENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJ
bnQ4Kj4oZGF0YS0+ZGF0YSgpKSwgZGF0YS0+c2l6ZSgpLCBkZXJlZkFsbG9jYXRvci5nZXQoKSkp
OworICAgIC8vIFdlIHVzZSB0aGUgR2V0Qnl0ZXNBdFBvc2l0aW9uIGNhbGxiYWNrIHJhdGhlciB0
aGFuIHRoZSBHZXRCeXRlUG9pbnRlciBvbmUgYmVjYXVzZSBTaGFyZWRCdWZmZXIKKyAgICAvLyBk
b2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIGxvY2sgZG93biB0aGUgYnl0ZSBwb2ludGVyIGFuZCBn
dWFyYW50ZWUgdGhhdCBpdCB3b24ndCBtb3ZlLCB3aGljaAorICAgIC8vIGlzIGEgcmVxdWlyZW1l
bnQgZm9yIHVzaW5nIHRoZSBHZXRCeXRlUG9pbnRlciBjYWxsYmFjay4KKyAgICBjb25zdCBDR0Rh
dGFQcm92aWRlckRpcmVjdENhbGxiYWNrcyBwcm92aWRlckNhbGxiYWNrcyA9IHsgMCwgMCwgMCwg
c2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uLCBzaGFyZWRCdWZmZXJSZWxlYXNlIH07Cisg
ICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIoQWRvcHRDRiwgQ0dE
YXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6ZSgpLCAmcHJvdmlkZXJDYWxs
YmFja3MpKTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVByb3ZpZGVyKG1fZGVjb2Rlciwg
ZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwogI2VuZGlmCi0gICAgQ0dJbWFn
ZVNvdXJjZVVwZGF0ZURhdGEobV9kZWNvZGVyLCBjZkRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZl
ZCk7CiB9CiAKIFN0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwCShyZXZpc2lvbiA1MTE1NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDExIEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9S
TShNQUMpCisvLyBGcm9tIEltYWdlU291cmNlQ0cKK2V4dGVybiBzaXplX3Qgc2hhcmVkQnVmZmVy
R2V0Qnl0ZXNBdFBvc2l0aW9uKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRp
b24sIHNpemVfdCBjb3VudCk7CisjZW5kaWYKKwogUERGRG9jdW1lbnRJbWFnZTo6UERGRG9jdW1l
bnRJbWFnZSgpCiAgICAgOiBJbWFnZSgwKSAvLyBQREZzIGRvbid0IGFuaW1hdGUKICAgICAsIG1f
ZG9jdW1lbnQoMCkKQEAgLTY5LDEyICs3NCwxNSBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmRh
dGFDaGFuZ2VkKGJvb2wgCiAgICAgICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUg
U2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFy
ZWRCdWZmZXIncyBrbm93bGVkZ2UuICBXZSB1c2UgU2hhcmVkQnVmZmVyJ3MgYWJpbGl0eQogICAg
ICAgICAvLyB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRhIHRvIGdldCBhcm91bmQgdGhpcywg
ZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzIHJlYWxseSBsb29raW5nIGF0IHRoZSBTaGFyZWRCdWZm
ZXIuCiAgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgdGhpcy0+ZGF0
YSgpLT5jcmVhdGVDRkRhdGEoKSk7CisgICAgICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJl
Zj4gZGF0YVByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShk
YXRhLmdldCgpKSk7CiAjZWxzZQotICAgICAgICAvLyBJZiBubyBOU0RhdGEgaXMgYXZhaWxhYmxl
LCB0aGVuIHdlIGtub3cgU2hhcmVkQnVmZmVyIHdpbGwgYWx3YXlzIGp1c3QgYmUgYSB2ZWN0b3Iu
ICBUaGF0IG1lYW5zIG5vIHNlY3JldCBjaGFuZ2VzIGNhbiBvY2N1ciB0byBpdCBiZWhpbmQgdGhl
Ci0gICAgICAgIC8vIHNjZW5lcy4gIFdlIHVzZSBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkg
aW4gdGhhdCBjYXNlLgotICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0Ys
IENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJ
bnQ4Kj4odGhpcy0+ZGF0YSgpLT5kYXRhKCkpLCB0aGlzLT5kYXRhKCktPnNpemUoKSwga0NGQWxs
b2NhdG9yTnVsbCkpOworICAgICAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFw
IHRoZSBTaGFyZWRCdWZmZXIuCisgICAgICAgIC8vIFdlIHVzZSB0aGUgR2V0Qnl0ZXNBdFBvc2l0
aW9uIGNhbGxiYWNrIHJhdGhlciB0aGFuIHRoZSBHZXRCeXRlUG9pbnRlciBvbmUgYmVjYXVzZSBT
aGFyZWRCdWZmZXIKKyAgICAgICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBsb2NrIGRv
d24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92ZSwgd2hp
Y2gKKyAgICAgICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2lu
dGVyIGNhbGxiYWNrLgorICAgICAgICBjb25zdCBDR0RhdGFQcm92aWRlckRpcmVjdENhbGxiYWNr
cyBwcm92aWRlckNhbGxiYWNrcyA9IHsgMCwgMCwgMCwgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBv
c2l0aW9uLCAwIH07CisgICAgICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVBy
b3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlRGlyZWN0KHRoaXMtPmRhdGEoKSwg
dGhpcy0+ZGF0YSgpLT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOwogI2VuZGlmCi0gICAg
ICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyKEFkb3B0Q0YsIENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhLmdldCgpKSk7CiAgICAgICAgIG1fZG9j
dW1lbnQgPSBDR1BERkRvY3VtZW50Q3JlYXRlV2l0aFByb3ZpZGVyKGRhdGFQcm92aWRlci5nZXQo
KSk7CiAgICAgICAgIHNldEN1cnJlbnRQYWdlKDApOwogICAgIH0K
</data>
<flag name="review"
          id="25192"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43525</attachid>
            <date>2009-11-19 14:48:54 -0800</date>
            <delta_ts>2009-11-19 15:13:09 -0800</delta_ts>
            <desc>With header file changes</desc>
            <filename>image.patch</filename>
            <type>text/plain</type>
            <size>6637</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTIwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMTkgIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJv
cGVybHkgY3JlYXRlIGEgQ0dJbWFnZVJlZiBvbiBub24tUExBVEZPUk0oTUFDKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3Nzc3CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
aGFyZWRCdWZmZXJSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXRE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkYXRhQ2hhbmdlZCk6CisKIDIwMDktMTEt
MTkgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJl
dmlld2VkLCBhdHRlbXB0IHRvIGZpeCBDaHJvbWl1bSBidWlsZC4KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gNTEyMDIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMjcgQEAKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
IAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
Y29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RS
KCJrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7CiAKICNpZiAhUExBVEZPUk0oTUFD
KQotc3RhdGljIHZvaWQgc2hhcmVkQnVmZmVyRGVyZWZDYWxsYmFjayh2b2lkKiwgdm9pZCogaW5m
bykKK3NpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9p
ZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQoreworICAgIFNoYXJlZEJ1
ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7Cisg
ICAgc2l6ZV90IHNvdXJjZVNpemUgPSBzaGFyZWRCdWZmZXItPnNpemUoKTsKKyAgICBpZiAocG9z
aXRpb24gPj0gc291cmNlU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBjaGFy
KiBzb3VyY2UgPSBzaGFyZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9uOworICAgIHNpemVfdCBh
bW91bnQgPSBtaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0aW9uKTsKKyAgICBt
ZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7CisgICAgcmV0dXJuIGFtb3VudDsKK30KKwor
dm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8pCiB7CiAgICAgU2hhcmVkQnVmZmVy
KiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKICAgICBz
aGFyZWRCdWZmZXItPmRlcmVmKCk7CkBAIC0xMTAsMTUgKzEyNSwxNyBAQCB2b2lkIEltYWdlU291
cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogCiAgICAgLy8gT24gTWFjIHRoZSBOU0RhdGEgaW5z
aWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFwcGVuZGVkIHRvIHdpdGhvdXQg
dGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4gIFdlIHVzZSBTaGFyZWRCdWZmZXIncyBhYmls
aXR5CiAgICAgLy8gdG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQgYXJvdW5kIHRo
aXMsIGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcyByZWFsbHkgbG9va2luZyBhdCB0aGUgU2hhcmVk
QnVmZmVyLgogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShBZG9wdENGLCBkYXRhLT5j
cmVhdGVDRkRhdGEoKSk7CisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9kZWNvZGVyLCBj
ZkRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiAjZWxzZQotICAgIC8vIElmIG5vIE5TRGF0
YSBpcyBhdmFpbGFibGUsIHRoZW4gd2Uga25vdyBTaGFyZWRCdWZmZXIgd2lsbCBhbHdheXMganVz
dCBiZSBhIHZlY3Rvci4gIFRoYXQgbWVhbnMgbm8gc2VjcmV0IGNoYW5nZXMgY2FuIG9jY3VyIHRv
IGl0IGJlaGluZCB0aGUKLSAgICAvLyBzY2VuZXMuICBXZSB1c2UgQ0ZEYXRhQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5IGluIHRoYXQgY2FzZS4gRW5zdXJlIHRoYXQgdGhlIFNoYXJlZEJ1ZmZlciBsaXZl
cyBhcyBsb25nIGFzIHRoZSBDRkRhdGFSZWYuCisgICAgLy8gQ3JlYXRlIGEgQ0dEYXRhUHJvdmlk
ZXIgdG8gd3JhcCB0aGUgU2hhcmVkQnVmZmVyLgogICAgIGRhdGEtPnJlZigpOwotICAgIENGQWxs
b2NhdG9yQ29udGV4dCBjb250ZXh0ID0gezAsIGRhdGEsIDAsIDAsIDAsIDAsIDAsICZzaGFyZWRC
dWZmZXJEZXJlZkNhbGxiYWNrLCAwfTsKLSAgICBSZXRhaW5QdHI8Q0ZBbGxvY2F0b3JSZWY+IGRl
cmVmQWxsb2NhdG9yKEFkb3B0Q0YsIENGQWxsb2NhdG9yQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsICZjb250ZXh0KSk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKEFkb3B0Q0Ys
IENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJ
bnQ4Kj4oZGF0YS0+ZGF0YSgpKSwgZGF0YS0+c2l6ZSgpLCBkZXJlZkFsbG9jYXRvci5nZXQoKSkp
OworICAgIC8vIFdlIHVzZSB0aGUgR2V0Qnl0ZXNBdFBvc2l0aW9uIGNhbGxiYWNrIHJhdGhlciB0
aGFuIHRoZSBHZXRCeXRlUG9pbnRlciBvbmUgYmVjYXVzZSBTaGFyZWRCdWZmZXIKKyAgICAvLyBk
b2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIGxvY2sgZG93biB0aGUgYnl0ZSBwb2ludGVyIGFuZCBn
dWFyYW50ZWUgdGhhdCBpdCB3b24ndCBtb3ZlLCB3aGljaAorICAgIC8vIGlzIGEgcmVxdWlyZW1l
bnQgZm9yIHVzaW5nIHRoZSBHZXRCeXRlUG9pbnRlciBjYWxsYmFjay4KKyAgICBDR0RhdGFQcm92
aWRlckRpcmVjdENhbGxiYWNrcyBwcm92aWRlckNhbGxiYWNrcyA9IHsgMCwgMCwgMCwgc2hhcmVk
QnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uLCBzaGFyZWRCdWZmZXJSZWxlYXNlIH07CisgICAgUmV0
YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJv
dmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3Mp
KTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVByb3ZpZGVyKG1fZGVjb2RlciwgZGF0YVBy
b3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwogI2VuZGlmCi0gICAgQ0dJbWFnZVNvdXJj
ZVVwZGF0ZURhdGEobV9kZWNvZGVyLCBjZkRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiB9
CiAKIFN0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmgJKHJldmlzaW9u
IDUxMjAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEwIEBAIFN0cmluZyBwcmVmZXJyZWRFeHRlbnNp
b25Gb3JJbWFnZVNvdXJjZVQKIAogU3RyaW5nIE1JTUVUeXBlRm9ySW1hZ2VTb3VyY2VUeXBlKGNv
bnN0IFN0cmluZyYgdHlwZSk7CiAKKyNpZiAhUExBVEZPUk0oTUFDKQorc2l6ZV90IHNoYXJlZEJ1
ZmZlckdldEJ5dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZvLCB2b2lkKiBidWZmZXIsIG9mZl90IHBv
c2l0aW9uLCBzaXplX3QgY291bnQpOworI2VuZGlmCisKIH0KIAogI2VuZGlmIC8vIEltYWdlU291
cmNlQ0dfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiA1MTIwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDkgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlT2Jz
ZXJ2ZXIuaCIKKyNpZiAhUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIkltYWdlU291cmNlQ0cuaCIK
KyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CkBAIC02OSwxMiArNzIsMTUgQEAgYm9vbCBQREZEb2N1bWVudEltYWdlOjpkYXRhQ2hhbmdl
ZChib29sIAogICAgICAgICAvLyBPbiBNYWMgdGhlIE5TRGF0YSBpbnNpZGUgdGhlIFNoYXJlZEJ1
ZmZlciBjYW4gYmUgc2VjcmV0bHkgYXBwZW5kZWQgdG8gd2l0aG91dCB0aGUgU2hhcmVkQnVmZmVy
J3Mga25vd2xlZGdlLiAgV2UgdXNlIFNoYXJlZEJ1ZmZlcidzIGFiaWxpdHkKICAgICAgICAgLy8g
dG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQgYXJvdW5kIHRoaXMsIGVuc3VyaW5n
IHRoYXQgSW1hZ2VJTyBpcyByZWFsbHkgbG9va2luZyBhdCB0aGUgU2hhcmVkQnVmZmVyLgogICAg
ICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIHRoaXMtPmRhdGEoKS0+Y3Jl
YXRlQ0ZEYXRhKCkpOworICAgICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQ
cm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoZGF0YS5nZXQo
KSkpOwogI2Vsc2UKLSAgICAgICAgLy8gSWYgbm8gTlNEYXRhIGlzIGF2YWlsYWJsZSwgdGhlbiB3
ZSBrbm93IFNoYXJlZEJ1ZmZlciB3aWxsIGFsd2F5cyBqdXN0IGJlIGEgdmVjdG9yLiAgVGhhdCBt
ZWFucyBubyBzZWNyZXQgY2hhbmdlcyBjYW4gb2NjdXIgdG8gaXQgYmVoaW5kIHRoZQotICAgICAg
ICAvLyBzY2VuZXMuICBXZSB1c2UgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5IGluIHRoYXQg
Y2FzZS4KLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFD
cmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KHRo
aXMtPmRhdGEoKS0+ZGF0YSgpKSwgdGhpcy0+ZGF0YSgpLT5zaXplKCksIGtDRkFsbG9jYXRvck51
bGwpKTsKKyAgICAgICAgLy8gQ3JlYXRlIGEgQ0dEYXRhUHJvdmlkZXIgdG8gd3JhcCB0aGUgU2hh
cmVkQnVmZmVyLgorICAgICAgICAvLyBXZSB1c2UgdGhlIEdldEJ5dGVzQXRQb3NpdGlvbiBjYWxs
YmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25lIGJlY2F1c2UgU2hhcmVkQnVm
ZmVyCisgICAgICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBkb3duIHRoZSBi
eXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdoaWNoCisgICAg
ICAgIC8vIGlzIGEgcmVxdWlyZW1lbnQgZm9yIHVzaW5nIHRoZSBHZXRCeXRlUG9pbnRlciBjYWxs
YmFjay4KKyAgICAgICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlkZXJDYWxs
YmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwgMCB9Owor
ICAgICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcihBZG9wdENG
LCBDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdCh0aGlzLT5kYXRhKCksIHRoaXMtPmRhdGEoKS0+
c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKICNlbmRpZgotICAgICAgICBSZXRhaW5QdHI8
Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhDRkRhdGEoZGF0YS5nZXQoKSkpOwogICAgICAgICBtX2RvY3VtZW50ID0gQ0dQREZE
b2N1bWVudENyZWF0ZVdpdGhQcm92aWRlcihkYXRhUHJvdmlkZXIuZ2V0KCkpOwogICAgICAgICBz
ZXRDdXJyZW50UGFnZSgwKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43531</attachid>
            <date>2009-11-19 15:53:36 -0800</date>
            <delta_ts>2009-11-19 16:47:17 -0800</delta_ts>
            <desc>Quick style patch</desc>
            <filename>image.patch</filename>
            <type>text/plain</type>
            <size>982</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTIxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMDktMTEtMTkgIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXVp
Y2sgc3R5bGUgZml4LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mjc3NzcKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwOgorCiAyMDA5LTExLTE5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4K
IAogICAgICAgIEJ1aWxkIGZpeC4gTm8gcmV2aWV3IG5lZWRlZC4KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkocmV2aXNpb24g
NTEyMDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTEgQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorCiAjaWYgIVBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJJbWFnZVNvdXJj
ZUNHLmgiCiAjZW5kaWYKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>