<?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>76654</bug_id>
          
          <creation_ts>2012-01-19 12:18:40 -0800</creation_ts>
          <short_desc>WebGL must allocate smaller drawing buffer if allocation fails</short_desc>
          <delta_ts>2012-02-06 17:58:38 -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>WebGL</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76239</dependson>
    
    <dependson>77481</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="yongsheng">yongsheng.zhu</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>logingx</cc>
    
    <cc>twiz</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yongsheng.zhu</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>538912</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-19 12:18:40 -0800</bug_when>
    <thetext>Per http://www.khronos.org/registry/webgl/specs/latest/#2.2 (&quot;The Drawing Buffer&quot;), the WebGL implementation must allocate a drawing buffer with a smaller than requested width and height if the requested size could not be allocated. The fix for Bug 76239 exposes a problem where the reallocation is not being retried.

I recall that zmo implemented this functionality once in Chromium&apos;s command buffer port, but I believe it needs to be reimplemented now after the conversion to DrawingBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540291</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-01-22 11:15:16 -0800</bug_when>
    <thetext>Assigned to yongsheng.  Thanks for picking up this bug.  I&apos;ve been thinking of working on it, but kept being distracted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540394</commentid>
    <comment_count>2</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-22 22:53:25 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Assigned to yongsheng.  Thanks for picking up this bug.  I&apos;ve been thinking of working on it, but kept being distracted.

I posted my thinkings about the policy to allocate smalller buffer than requested:
1) allocate all of the remaining buffer for the request
2) multiple the requested width and heighth with a ratio(such as 0.5) in the loop until the size of requested buffer is met

which one is preferred? or any better idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540596</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-01-23 09:16:45 -0800</bug_when>
    <thetext>I don&apos;t think I fully understand what option 1) stands, but option 2) sounds reasonable.

My original implementation in chromium side is

1) if it&apos;s multisampled buffer, try a non-multisampled buffer with the same size
2) if 1) fails, try multisampled buffer with half size
3) if 2) fails, try non-multisampled buffer with half size
4) if 3) fails, goto 2) again

However, I think just doing half the size looping is good enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540612</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-23 09:38:59 -0800</bug_when>
    <thetext>Also, the first step should be to retry the allocation at the original size. I believe that we currently try to reallocate the new drawing buffer while holding on to its original resources, which fails and causes the drawing buffer to be released. The allocation should be retried after releasing the drawing buffer. All of this logic should probably be restructured.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542382</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-25 09:50:24 -0800</bug_when>
    <thetext>Yongsheng, do you have an update on this bug? The conformance suite failures in WebKit must be resolved soon. Either we need to push forward a fix for this or roll out bug 76239&apos;s patch for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542843</commentid>
    <comment_count>6</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-25 19:04:30 -0800</bug_when>
    <thetext>oh, I&apos;ll try to do it today. The late response is because I&apos;m on Chinese New Year.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542846</commentid>
    <comment_count>7</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-25 19:18:08 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I don&apos;t think I fully understand what option 1) stands, but option 2) sounds reasonable.
&gt; My original implementation in chromium side is
&gt; 
&gt; 1) if it&apos;s multisampled buffer, try a non-multisampled buffer with the same size
&gt; 2) if 1) fails, try multisampled buffer with half size
&gt; 3) if 2) fails, try non-multisampled buffer with half size
&gt; 4) if 3) fails, goto 2) again
&gt; 
&gt; However, I think just doing half the size looping is good enough.
okay, I&apos;ll follow the simple option 2).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543035</commentid>
    <comment_count>8</comment_count>
      <attachid>124099</attachid>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-26 03:50:57 -0800</bug_when>
    <thetext>Created attachment 124099
Patch

Please review the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543100</commentid>
    <comment_count>9</comment_count>
      <attachid>124099</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-01-26 06:22:40 -0800</bug_when>
    <thetext>Comment on attachment 124099
Patch

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

&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:248
&gt; +        while ((s_currentResourceUsePixels + pixelDelta) &gt; s_maximumResourceUsePixels) {

I don&apos;t think making sure less than s_maximumResourceUsePixels is enough.

You should try creating a buffer with adjustedSize, check if it succeeds, if not, try with half the size.  Do this until you get a valid backbuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543470</commentid>
    <comment_count>10</comment_count>
      <attachid>124099</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-26 14:13:05 -0800</bug_when>
    <thetext>Comment on attachment 124099
Patch

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

Thanks for working on this during the Chinese new year, but it needs more work.

&gt; Source/WebCore/ChangeLog:4
&gt; +        the allocation fails. 

Try to keep the synopsis on one line.

&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:52
&gt; +static float s_resourceAdjustedRatio = 0.5;

Should be const, not static.

&gt;&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:248
&gt;&gt; +        while ((s_currentResourceUsePixels + pixelDelta) &gt; s_maximumResourceUsePixels) {
&gt; 
&gt; I don&apos;t think making sure less than s_maximumResourceUsePixels is enough.
&gt; 
&gt; You should try creating a buffer with adjustedSize, check if it succeeds, if not, try with half the size.  Do this until you get a valid backbuffer.

I agree with Mo&apos;s assessment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543738</commentid>
    <comment_count>11</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-26 19:24:20 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 124099 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124099&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:248
&gt; &gt; +        while ((s_currentResourceUsePixels + pixelDelta) &gt; s_maximumResourceUsePixels) {
&gt; 
&gt; I don&apos;t think making sure less than s_maximumResourceUsePixels is enough.
&gt; 
&gt; You should try creating a buffer with adjustedSize, check if it succeeds, if not, try with half the size.  Do this until you get a valid backbuffer.

ok, since there are two checkings of the framebuffer status in the function, if there is any failure, then try with a smaller size and do all of allocation again util all are okay, am I right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543752</commentid>
    <comment_count>12</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-26 19:45:43 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 124099 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124099&amp;action=review
&gt; 
&gt; Thanks for working on this during the Chinese new year, but it needs more work.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:4
&gt; &gt; +        the allocation fails. 
&gt; 
&gt; Try to keep the synopsis on one line.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:52
&gt; &gt; +static float s_resourceAdjustedRatio = 0.5;
&gt; 
&gt; Should be const, not static.
okay, should be &apos;static const&apos;. 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:248
&gt; &gt;&gt; +        while ((s_currentResourceUsePixels + pixelDelta) &gt; s_maximumResourceUsePixels) {
&gt; &gt; 
&gt; &gt; I don&apos;t think making sure less than s_maximumResourceUsePixels is enough.
&gt; &gt; 
&gt; &gt; You should try creating a buffer with adjustedSize, check if it succeeds, if not, try with half the size.  Do this until you get a valid backbuffer.
&gt; 
&gt; I agree with Mo&apos;s assessment.
thanks for your and Mo&apos;s comments. I&apos;ll refine it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543917</commentid>
    <comment_count>13</comment_count>
      <attachid>124280</attachid>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-27 02:31:22 -0800</bug_when>
    <thetext>Created attachment 124280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543918</commentid>
    <comment_count>14</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-27 02:32:44 -0800</bug_when>
    <thetext>The &apos;drawingbuffer-test.html&apos; can be passed. However, there might be a stderr message &quot;Source/WebKit/chromium/third_party/tcmalloc/chromium/src/system-alloc.cc:423] SbrkSysAllocator failed.&quot;. Does anyone know this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543919</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-27 02:34:58 -0800</bug_when>
    <thetext>Attachment 124280 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:314:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544007</commentid>
    <comment_count>16</comment_count>
      <attachid>124301</attachid>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-27 06:03:27 -0800</bug_when>
    <thetext>Created attachment 124301
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544565</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-27 18:13:51 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; The &apos;drawingbuffer-test.html&apos; can be passed. However, there might be a stderr message &quot;Source/WebKit/chromium/third_party/tcmalloc/chromium/src/system-alloc.cc:423] SbrkSysAllocator failed.&quot;. Does anyone know this?

Is this new behavior that is caused by your patch?

Have you set a breakpoint at that point in the renderer process to see what made the call that failed? I don&apos;t think that we should be trying to do huge allocations.

Have you run all of the WebGL conformance tests with this patch? Does it fix all of the intended failures?

The code looks fine overall but you need to remove the associated line from LayoutTests/platform/chromium/test_expectations.txt . r- because of this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544569</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-27 18:16:15 -0800</bug_when>
    <thetext>Note, I just ran the canvas/ subset of the WebGL conformance tests with a debug Chromium build and didn&apos;t see any tcmalloc messages printed to stderr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544573</commentid>
    <comment_count>19</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2012-01-27 18:18:04 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Note, I just ran the canvas/ subset of the WebGL conformance tests with a debug Chromium build and didn&apos;t see any tcmalloc messages printed to stderr.

I ran the layout tests fast/canvas/webgl, and drawing-buffer-test.html passed with this change applied.

Output:

twiz@visitor-1950-259h:/usr/local/google/twiz/chrome_src/src/webkit/tools/layout_tests$ ./run_webkit_tests.py fast/canvas/webgl
  fast/canvas/webgl/drawingbuffer-test.html -&gt; unexpected pass
  fast/canvas/webgl/invalid-passed-params.html -&gt; unexpected pass
98 tests ran as expected, 2 didn&apos;t:                 


Expected to fail, but passed: (2)
  fast/canvas/webgl/drawingbuffer-test.html
  fast/canvas/webgl/invalid-passed-params.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544594</commentid>
    <comment_count>20</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-27 19:20:45 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #14)
&gt; &gt; The &apos;drawingbuffer-test.html&apos; can be passed. However, there might be a stderr message &quot;Source/WebKit/chromium/third_party/tcmalloc/chromium/src/system-alloc.cc:423] SbrkSysAllocator failed.&quot;. Does anyone know this?
&gt; 
&gt; Is this new behavior that is caused by your patch?
Not very sure. It&apos;s a random issue(10%~20%) and only occurs when running the conformance test (that means it never occur when running the single case). Seems not reproducible on your platforms. 
&gt; Have you set a breakpoint at that point in the renderer process to see what made the call that failed? I don&apos;t think that we should be trying to do huge allocations.
I&apos;ll try to have a look. Any hint to use 
&gt; Have you run all of the WebGL conformance tests with this patch? Does it fix all of the intended failures?
yes, all are okay for me.
&gt; 
&gt; The code looks fine overall but you need to remove the associated line from LayoutTests/platform/chromium/test_expectations.txt . r- because of this issue.
okay, I&apos;ll do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544601</commentid>
    <comment_count>21</comment_count>
      <attachid>124425</attachid>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-27 20:22:06 -0800</bug_when>
    <thetext>Created attachment 124425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544722</commentid>
    <comment_count>22</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-29 01:29:59 -0800</bug_when>
    <thetext>
&gt; twiz@visitor-1950-259h:/usr/local/google/twiz/chrome_src/src/webkit/tools/layout_tests$ ./run_webkit_tests.py fast/canvas/webgl
&gt;   fast/canvas/webgl/drawingbuffer-test.html -&gt; unexpected pass
&gt;   fast/canvas/webgl/invalid-passed-params.html -&gt; unexpected pass
&gt; 98 tests ran as expected, 2 didn&apos;t:                 
on my testing environment, the &apos;invalid-passed-params.html&apos; is &apos;expected pass&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544723</commentid>
    <comment_count>23</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-29 01:35:23 -0800</bug_when>
    <thetext>
&gt; &gt; Is this new behavior that is caused by your patch?
&gt; Not very sure. It&apos;s a random issue(10%~20%) and only occurs when running the conformance test (that means it never occur when running the single case). Seems not reproducible on your platforms. 

The error is from the GPU side. It resizes its framebuffer with the passed size {width=1, height=1}. It seems the driver allocates a real big buffer(11804672).
I encountered this issue without the patch. but the occurrence frequency is lower than with the patch.

Here is the call stack.
#0  DefaultSysAllocator::Alloc (this=0xb7b911d8, size=11804672, actual_size=0xbfccbacc, alignment=4096)
    at third_party/tcmalloc/chromium/src/system-alloc.cc:423
#1  0xb09991b1 in TCMalloc_SystemAlloc (size=11804672, actual_size=0xbfccbacc, alignment=4096)
    at third_party/tcmalloc/chromium/src/system-alloc.cc:473
#2  0xb0993685 in tcmalloc::PageHeap::GrowHeap (this=0xb7b8c0c0, n=2882)
    at third_party/tcmalloc/chromium/src/page_heap.cc:549
#3  0xb09916c0 in tcmalloc::PageHeap::New (this=0xb7b8c0c0, n=2882) at third_party/tcmalloc/chromium/src/page_heap.cc:102
#4  0xb0980728 in (anonymous namespace)::do_malloc_pages (heap=0xb7f37000, size=11804672)
    at third_party/tcmalloc/chromium/src/tcmalloc.cc:1140
#5  0xb098087c in (anonymous namespace)::do_malloc (size=11804428) at third_party/tcmalloc/chromium/src/tcmalloc.cc:1171
#6  0xb09813f9 in (anonymous namespace)::cpp_alloc (size=11804424, nothrow=true)
    at third_party/tcmalloc/chromium/src/tcmalloc.cc:1453
#7  0xb0980534 in (anonymous namespace)::do_malloc_or_cpp_alloc (size=11804424)
    at third_party/tcmalloc/chromium/src/tcmalloc.cc:1102
#8  0xb09808e9 in (anonymous namespace)::do_calloc (n=1, elem_size=11804424)
    at third_party/tcmalloc/chromium/src/tcmalloc.cc:1183
#9  0xb44908b3 in tc_calloc (n=1, elem_size=11804424) at third_party/tcmalloc/chromium/src/tcmalloc.cc:1602
#10 0xae56a345 in ralloc_size () from /usr/lib/i386-linux-gnu/dri/libglsl.so
#11 0xae56a3ee in rzalloc_size () from /usr/lib/i386-linux-gnu/dri/libglsl.so
#12 0xae56a4c8 in rzalloc_array_size () from /usr/lib/i386-linux-gnu/dri/libglsl.so
#13 0xae90a72c in do_wm_prog () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#14 0xae90ab48 in ?? () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#15 0xae9002fd in brw_validate_state () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#16 0xae8ecec2 in brw_draw_prims () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#17 0xae7680d1 in ?? () from /usr/lib/i386-linux-gnu/dri/libdricore.so
#18 0xae80129a in _mesa_meta_Clear () from /usr/lib/i386-linux-gnu/dri/libdricore.so
#19 0xae8c8e15 in ?? () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
#20 0xae6996b1 in _mesa_Clear () from /usr/lib/i386-linux-gnu/dri/libdricore.so
#21 0xb3514b2b in gpu::gles2::GLES2DecoderImpl::ResizeOffscreenFrameBuffer (this=0xbd467e00, size=...)   &lt;--- size = {width=1, height =1}
    at gpu/command_buffer/service/gles2_cmd_decoder.cc:2967
#22 0xb351180f in gpu::gles2::GLES2DecoderImpl::Initialize (this=0xbd467e00, surface=..., context=..., size=...,
    disallowed_features=..., allowed_extensions=0xb87a1bcc &quot;*&quot;, attribs=...)
    at gpu/command_buffer/service/gles2_cmd_decoder.cc:2155
#23 0xb23a61d0 in GpuCommandBufferStub::OnInitialize (this=0xbd9f0a90, reply_message=0xb87e2d20)
    at content/common/gpu/gpu_command_buffer_stub.cc:234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546241</commentid>
    <comment_count>24</comment_count>
      <attachid>124425</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-31 11:00:41 -0800</bug_when>
    <thetext>Comment on attachment 124425
Patch

Thanks, looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546244</commentid>
    <comment_count>25</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-31 11:03:54 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; &gt; Is this new behavior that is caused by your patch?
&gt; &gt; Not very sure. It&apos;s a random issue(10%~20%) and only occurs when running the conformance test (that means it never occur when running the single case). Seems not reproducible on your platforms. 
&gt; 
&gt; The error is from the GPU side. It resizes its framebuffer with the passed size {width=1, height=1}. It seems the driver allocates a real big buffer(11804672).
&gt; I encountered this issue without the patch. but the occurrence frequency is lower than with the patch.
&gt; 
&gt; Here is the call stack.
&gt; #0  DefaultSysAllocator::Alloc (this=0xb7b911d8, size=11804672, actual_size=0xbfccbacc, alignment=4096)
&gt;     at third_party/tcmalloc/chromium/src/system-alloc.cc:423
&gt; #1  0xb09991b1 in TCMalloc_SystemAlloc (size=11804672, actual_size=0xbfccbacc, alignment=4096)
&gt;     at third_party/tcmalloc/chromium/src/system-alloc.cc:473
&gt; #2  0xb0993685 in tcmalloc::PageHeap::GrowHeap (this=0xb7b8c0c0, n=2882)
&gt;     at third_party/tcmalloc/chromium/src/page_heap.cc:549
&gt; #3  0xb09916c0 in tcmalloc::PageHeap::New (this=0xb7b8c0c0, n=2882) at third_party/tcmalloc/chromium/src/page_heap.cc:102
&gt; #4  0xb0980728 in (anonymous namespace)::do_malloc_pages (heap=0xb7f37000, size=11804672)
&gt;     at third_party/tcmalloc/chromium/src/tcmalloc.cc:1140
&gt; #5  0xb098087c in (anonymous namespace)::do_malloc (size=11804428) at third_party/tcmalloc/chromium/src/tcmalloc.cc:1171
&gt; #6  0xb09813f9 in (anonymous namespace)::cpp_alloc (size=11804424, nothrow=true)
&gt;     at third_party/tcmalloc/chromium/src/tcmalloc.cc:1453
&gt; #7  0xb0980534 in (anonymous namespace)::do_malloc_or_cpp_alloc (size=11804424)
&gt;     at third_party/tcmalloc/chromium/src/tcmalloc.cc:1102
&gt; #8  0xb09808e9 in (anonymous namespace)::do_calloc (n=1, elem_size=11804424)
&gt;     at third_party/tcmalloc/chromium/src/tcmalloc.cc:1183
&gt; #9  0xb44908b3 in tc_calloc (n=1, elem_size=11804424) at third_party/tcmalloc/chromium/src/tcmalloc.cc:1602
&gt; #10 0xae56a345 in ralloc_size () from /usr/lib/i386-linux-gnu/dri/libglsl.so
&gt; #11 0xae56a3ee in rzalloc_size () from /usr/lib/i386-linux-gnu/dri/libglsl.so
&gt; #12 0xae56a4c8 in rzalloc_array_size () from /usr/lib/i386-linux-gnu/dri/libglsl.so
&gt; #13 0xae90a72c in do_wm_prog () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
&gt; #14 0xae90ab48 in ?? () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
&gt; #15 0xae9002fd in brw_validate_state () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
&gt; #16 0xae8ecec2 in brw_draw_prims () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
&gt; #17 0xae7680d1 in ?? () from /usr/lib/i386-linux-gnu/dri/libdricore.so
&gt; #18 0xae80129a in _mesa_meta_Clear () from /usr/lib/i386-linux-gnu/dri/libdricore.so
&gt; #19 0xae8c8e15 in ?? () from /usr/lib/i386-linux-gnu/dri/i965_dri.so
&gt; #20 0xae6996b1 in _mesa_Clear () from /usr/lib/i386-linux-gnu/dri/libdricore.so
&gt; #21 0xb3514b2b in gpu::gles2::GLES2DecoderImpl::ResizeOffscreenFrameBuffer (this=0xbd467e00, size=...)   &lt;--- size = {width=1, height =1}
&gt;     at gpu/command_buffer/service/gles2_cmd_decoder.cc:2967
&gt; #22 0xb351180f in gpu::gles2::GLES2DecoderImpl::Initialize (this=0xbd467e00, surface=..., context=..., size=...,
&gt;     disallowed_features=..., allowed_extensions=0xb87a1bcc &quot;*&quot;, attribs=...)
&gt;     at gpu/command_buffer/service/gles2_cmd_decoder.cc:2155
&gt; #23 0xb23a61d0 in GpuCommandBufferStub::OnInitialize (this=0xbd9f0a90, reply_message=0xb87e2d20)
&gt;     at content/common/gpu/gpu_command_buffer_stub.cc:234

Well, it doesn&apos;t look like your change to DrawingBuffer::reset() is causing this, at least not directly, since DrawingBuffer::reset() only allocates textures and renderbuffers, and the above stack trace is likely occurring during initialization of the WebGLRenderingContext. However, the behavior clearly looks wrong and I would suggest you raise this issue with Intel&apos;s driver team, as they may be able to track down the bug in Mesa or wherever it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546327</commentid>
    <comment_count>26</comment_count>
      <attachid>124425</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 12:00:22 -0800</bug_when>
    <thetext>Comment on attachment 124425
Patch

Clearing flags on attachment: 124425

Committed r106376: &lt;http://trac.webkit.org/changeset/106376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546328</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 12:00:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546338</commentid>
    <comment_count>28</comment_count>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2012-01-31 12:02:55 -0800</bug_when>
    <thetext>*** Bug 76562 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546519</commentid>
    <comment_count>29</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-31 14:44:37 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/106376 broke Chromium&apos;s webkit_unit_tests and is being rolled out under https://bugs.webkit.org/show_bug.cgi?id=77481 . Reopening this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546625</commentid>
    <comment_count>30</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-31 16:32:30 -0800</bug_when>
    <thetext>Yongsheng, please build and test Chromium&apos;s webkit_unit_tests target with your original patch. Either the patch or the unit test needs to be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546842</commentid>
    <comment_count>31</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-01-31 23:54:51 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Yongsheng, please build and test Chromium&apos;s webkit_unit_tests target with your original patch. Either the patch or the unit test needs to be updated.
The reason is that when the newSize is empty, and adjustedSize will also be empty, so the code treat it as a failure. However, it should not.
So the fix is to call &apos;clear()&apos; when the newSize is not empty and adjustedSize is empty.

Tested it with webkit_unit_tests, gpu_tests, layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546849</commentid>
    <comment_count>32</comment_count>
      <attachid>124892</attachid>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-02-01 00:02:24 -0800</bug_when>
    <thetext>Created attachment 124892
Patch

thanks to the unit tests to find this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547090</commentid>
    <comment_count>33</comment_count>
      <attachid>124952</attachid>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-02-01 08:14:18 -0800</bug_when>
    <thetext>Created attachment 124952
Patch

reupload it. Please review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548275</commentid>
    <comment_count>34</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-02-02 17:28:03 -0800</bug_when>
    <thetext>any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548735</commentid>
    <comment_count>35</comment_count>
      <attachid>124952</attachid>
    <who name="Jeff Timanus">twiz</who>
    <bug_when>2012-02-03 08:23:52 -0800</bug_when>
    <thetext>Comment on attachment 124952
Patch

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

&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:324
&gt; +        if (!newSize.isEmpty() &amp;&amp; adjustedSize.isEmpty()) {

This change looks ok to me.  Would it have been possible to early-out if newSize is empty?  The need to dynamically shrink by 1/2 and test allocation does not seem necessary when we are starting at 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549388</commentid>
    <comment_count>36</comment_count>
    <who name="yongsheng">yongsheng.zhu</who>
    <bug_when>2012-02-04 00:43:16 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 124952 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124952&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:324
&gt; &gt; +        if (!newSize.isEmpty() &amp;&amp; adjustedSize.isEmpty()) {
&gt; 
&gt; This change looks ok to me.  Would it have been possible to early-out if newSize is empty?  The need to dynamically shrink by 1/2 and test allocation does not seem necessary when we are starting at 0.

I just want to follow up the previous implementation. If the newSize is empty, the old code would also do allocation. In new impl, I want to do that part of code too and then jump out the loop. Make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550164</commentid>
    <comment_count>37</comment_count>
      <attachid>124952</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-06 11:53:20 -0800</bug_when>
    <thetext>Comment on attachment 124952
Patch

Looks fine as long as it passes the test. r=me again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550491</commentid>
    <comment_count>38</comment_count>
      <attachid>124952</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-06 17:58:32 -0800</bug_when>
    <thetext>Comment on attachment 124952
Patch

Clearing flags on attachment: 124952

Committed r106888: &lt;http://trac.webkit.org/changeset/106888&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550492</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-06 17:58:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124099</attachid>
            <date>2012-01-26 03:50:57 -0800</date>
            <delta_ts>2012-01-27 02:31:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>2760</size>
            <attacher name="yongsheng">yongsheng.zhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAxLTI2ICBZb25nc2hl
bmcgWmh1ICA8eW9uZ3NoZW5nLnpodUBpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0wgbXVzdCBh
bGxvY2F0ZSBzbWFsbGVyIGRyYXdpbmcgYnVmZmVyIHdoZW4KKyAgICAgICAgdGhlIGFsbG9jYXRp
b24gZmFpbHMuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzY2NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3aW5nYnVmZmVyLXRlc3QuaHRtbAorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorCiAyMDEyLTAxLTI2ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIE5vdCByZXZp
ZXdlZC4gRml4IG5vbi1BbGxJbk9uZSBidWlsZHMgYWZ0ZXIgcjEwNTk3OC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDEwNTk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBA
QCBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0KIHN0YXRpYyBpbnQgc19t
YXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMgPSAwOwogI2VuZGlmCiBzdGF0aWMgaW50IHNfY3VycmVu
dFJlc291cmNlVXNlUGl4ZWxzID0gMDsKK3N0YXRpYyBmbG9hdCBzX3Jlc291cmNlQWRqdXN0ZWRS
YXRpbyA9IDAuNTsKIAogUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGJv
b2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKIHsKQEAgLTIzNiwxOSArMjM3LDMxIEBAIGJvb2wg
RHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICB9CiAKICAgICBpbnQgcGl4
ZWxEZWx0YSA9IG5ld1NpemUud2lkdGgoKSAqIG5ld1NpemUuaGVpZ2h0KCk7Ci0gICAgaWYgKCFt
X3NpemUuaXNFbXB0eSgpKQotICAgICAgICBwaXhlbERlbHRhIC09IG1fc2l6ZS53aWR0aCgpICog
bV9zaXplLmhlaWdodCgpOworICAgIGludCBvbGRTaXplID0gMDsKKyAgICBpZiAoIW1fc2l6ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgb2xkU2l6ZSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhl
aWdodCgpOworICAgICAgICBwaXhlbERlbHRhIC09IG9sZFNpemU7CisgICAgfQogCi0gICAgaWYg
KHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzICYmIChzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVs
cyArIHBpeGVsRGVsdGEpID4gc19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMpIHsKLSAgICAgICAg
Y2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEludFNpemUgYWRqdXN0ZWRTaXpl
ID0gbmV3U2l6ZTsKKyAgICBpZiAoc19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMpIHsKKyAgICAg
ICAgd2hpbGUgKChzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyArIHBpeGVsRGVsdGEpID4gc19t
YXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMpIHsKKyAgICAgICAgICAgIGFkanVzdGVkU2l6ZS5zY2Fs
ZShzX3Jlc291cmNlQWRqdXN0ZWRSYXRpbyk7CisgICAgICAgICAgICBpZiAoYWRqdXN0ZWRTaXpl
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGl4ZWxEZWx0YSA9IGFk
anVzdGVkU2l6ZS53aWR0aCgpICogYWRqdXN0ZWRTaXplLmhlaWdodCgpOworICAgICAgICAgICAg
cGl4ZWxEZWx0YSAtPSBvbGRTaXplOworICAgICAgICB9CiAgICAgfQorCiAgICAgc19jdXJyZW50
UmVzb3VyY2VVc2VQaXhlbHMgKz0gcGl4ZWxEZWx0YTsKIAogICAgIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0
cmlidXRlcygpOwogCi0gICAgaWYgKG5ld1NpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgIG1fc2l6
ZSA9IG5ld1NpemU7CisgICAgaWYgKGFkanVzdGVkU2l6ZSAhPSBtX3NpemUpIHsKKyAgICAgICAg
bV9zaXplID0gYWRqdXN0ZWRTaXplOwogCiAgICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29sb3JG
b3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsK
</data>
<flag name="review"
          id="125273"
          type_id="1"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124280</attachid>
            <date>2012-01-27 02:31:22 -0800</date>
            <delta_ts>2012-01-27 06:03:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>7939</size>
            <attacher name="yongsheng">yongsheng.zhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjA4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAxLTI2ICBZb25nc2hl
bmcgWmh1ICA8eW9uZ3NoZW5nLnpodUBpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0wgbXVzdCBh
bGxvY2F0ZSBzbWFsbGVyIGRyYXdpbmcgYnVmZmVyIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMu
IAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC9kcmF3aW5nYnVmZmVyLXRlc3QuaHRtbAorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorCiAyMDEyLTAxLTI2ICBQYWJsbyBGbG91cmV0
ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBGaXggYmFkIGNvZGUgZ2VuZXJhdGVk
IGJ5IHRoZSBKU0MgaWRsIGNvZGUgZ2VuZXJhdG9yIGZvciBbQ2FjaGVkQXR0cmlidXRlXSBhdHRy
aWJ1dGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiAxMDYwODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RhdGljIGludCBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVs
cyA9CiBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0gMDsKICNlbmRpZgog
c3RhdGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgc19yZXNvdXJjZUFkanVzdGVkUmF0aW8gPSAwLjU7CiAKIFBhc3NSZWZQdHI8RHJhd2lu
Z0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCiB7CkBA
IC0yMzYsMTkgKzIzNywyOCBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNp
emUmCiAgICAgfQogCiAgICAgaW50IHBpeGVsRGVsdGEgPSBuZXdTaXplLndpZHRoKCkgKiBuZXdT
aXplLmhlaWdodCgpOwotICAgIGlmICghbV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcGl4ZWxE
ZWx0YSAtPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgb2xkU2l6
ZSA9IDA7CisgICAgaWYgKCFtX3NpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIG9sZFNpemUgPSBt
X3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgcGl4ZWxEZWx0YSAtPSBv
bGRTaXplOworICAgIH0KIAotICAgIGlmIChzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscyAmJiAo
c19jdXJyZW50UmVzb3VyY2VVc2VQaXhlbHMgKyBwaXhlbERlbHRhKSA+IHNfbWF4aW11bVJlc291
cmNlVXNlUGl4ZWxzKSB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBJbnRTaXplIGFkanVzdGVkU2l6ZSA9IG5ld1NpemU7CisgICAgaWYgKHNfbWF4aW11bVJl
c291cmNlVXNlUGl4ZWxzKSB7CisgICAgICAgIHdoaWxlICgoc19jdXJyZW50UmVzb3VyY2VVc2VQ
aXhlbHMgKyBwaXhlbERlbHRhKSA+IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzKSB7CisgICAg
ICAgICAgICBhZGp1c3RlZFNpemUuc2NhbGUoc19yZXNvdXJjZUFkanVzdGVkUmF0aW8pOworICAg
ICAgICAgICAgaWYgKGFkanVzdGVkU2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBj
bGVhcigpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHBpeGVsRGVsdGEgPSBhZGp1c3RlZFNpemUud2lkdGgoKSAqIGFkanVzdGVkU2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgIHBpeGVsRGVsdGEgLT0gb2xkU2l6ZTsKKyAgICAgICAg
fQogICAgIH0KLSAgICBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyArPSBwaXhlbERlbHRhOwog
CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBt
X2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CiAKLSAgICBpZiAobmV3U2l6ZSAhPSBt
X3NpemUpIHsKLSAgICAgICAgbV9zaXplID0gbmV3U2l6ZTsKKyAgICBpZiAoYWRqdXN0ZWRTaXpl
ICE9IG1fc2l6ZSkgewogCiAgICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29sb3JGb3JtYXQsIGNv
bG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuYWxwaGEpIHsKQEAgLTI2MSw0NyArMjcxLDU4IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6
cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgICAgIGludGVybmFsUmVuZGVyYnVmZmVyRm9y
bWF0ID0gRXh0ZW5zaW9uczNEOjpSR0I4X09FUzsKICAgICAgICAgfQogCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIG1fc2l6ZSA9IGFkanVzdGVkU2l6ZTsKIAotICAgICAgICAvLyByZXNpemUg
bXVsdGlzYW1wbGUgRkJPCi0gICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7Ci0gICAgICAgICAg
ICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTYW1wbGVD
b3VudCk7Ci0gICAgICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig0LCBtYXhTYW1w
bGVDb3VudCk7Ci0KLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0KLSAgICAgICAg
ICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxSZW5kZXJidWZm
ZXJGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
bV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7Ci0gICAgICAgICAgICBpZiAo
bV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gQ2xlYW51cAotICAgICAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gcmVzaXplIG11bHRpc2Ft
cGxlIEZCTworICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOwor
ICAgICAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNv
dW50KTsKKworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisKKyAgICAgICAg
ICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbFJl
bmRlcmJ1ZmZlckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5U
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICByZXNpemVEZXB0aFN0ZW5jaWwoc2FtcGxlQ291bnQpOwor
ICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplLnNjYWxl
KHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAg
Ly8gcmVzaXplIHJlZ3VsYXIgRkJPCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICAgICAgLy8g
cmVzaXplIHJlZ3VsYXIgRkJPCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIAotICAgICAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9y
QnVmZmVyKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFs
Q29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CiAKLSAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgICAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOwogCi0gICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFj
a2luZyBjb2xvciBidWZmZXIKLSAgICAgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENv
bG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICB9CisgICAg
ICAgICAgICAvLyByZXNpemUgdGhlIGJhY2tpbmcgY29sb3IgYnVmZmVyCisgICAgICAgICAgICBp
ZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29s
b3JCdWZmZXIpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAg
ICAgICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKKyAgICAgICAgICAgICAgICByZXNpemVEZXB0
aFN0ZW5jaWwoMCk7CisgICAgICAgICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBhZGp1c3RlZFNpemUuc2NhbGUoc19yZXNvdXJj
ZUFkanVzdGVkUmF0aW8pOworCisgICAgICAgIH0gd2hpbGUgKCFhZGp1c3RlZFNpemUuaXNFbXB0
eSgpKTsKIAotICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwKTsKKyAgICAgICAgcGl4ZWxEZWx0YSA9IG1fc2l6ZS53aWR0aCgpICog
bV9zaXplLmhlaWdodCgpOworICAgICAgICBwaXhlbERlbHRhIC09IG9sZFNpemU7CisgICAgICAg
IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzICs9IHBpeGVsRGVsdGE7CiAKLSAgICAgICAgaWYg
KCFtdWx0aXNhbXBsZSgpKQotICAgICAgICAgICAgcmVzaXplRGVwdGhTdGVuY2lsKDApOwotICAg
ICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBM
RVRFKSB7Ci0gICAgICAgICAgICAvLyBDbGVhbnVwCisgICAgICAgIGlmIChhZGp1c3RlZFNpemUu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124301</attachid>
            <date>2012-01-27 06:03:27 -0800</date>
            <delta_ts>2012-01-27 20:22:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>7916</size>
            <attacher name="yongsheng">yongsheng.zhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjA4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAxLTI2ICBZb25nc2hl
bmcgWmh1ICA8eW9uZ3NoZW5nLnpodUBpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0wgbXVzdCBh
bGxvY2F0ZSBzbWFsbGVyIGRyYXdpbmcgYnVmZmVyIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMu
IAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC9kcmF3aW5nYnVmZmVyLXRlc3QuaHRtbAorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorCiAyMDEyLTAxLTI2ICBQYWJsbyBGbG91cmV0
ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBGaXggYmFkIGNvZGUgZ2VuZXJhdGVk
IGJ5IHRoZSBKU0MgaWRsIGNvZGUgZ2VuZXJhdG9yIGZvciBbQ2FjaGVkQXR0cmlidXRlXSBhdHRy
aWJ1dGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiAxMDYwODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RhdGljIGludCBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVs
cyA9CiBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0gMDsKICNlbmRpZgog
c3RhdGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgc19yZXNvdXJjZUFkanVzdGVkUmF0aW8gPSAwLjU7CiAKIFBhc3NSZWZQdHI8RHJhd2lu
Z0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCiB7CkBA
IC0yMzYsMTkgKzIzNywyOCBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNp
emUmCiAgICAgfQogCiAgICAgaW50IHBpeGVsRGVsdGEgPSBuZXdTaXplLndpZHRoKCkgKiBuZXdT
aXplLmhlaWdodCgpOwotICAgIGlmICghbV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcGl4ZWxE
ZWx0YSAtPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgb2xkU2l6
ZSA9IDA7CisgICAgaWYgKCFtX3NpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIG9sZFNpemUgPSBt
X3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgcGl4ZWxEZWx0YSAtPSBv
bGRTaXplOworICAgIH0KIAotICAgIGlmIChzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscyAmJiAo
c19jdXJyZW50UmVzb3VyY2VVc2VQaXhlbHMgKyBwaXhlbERlbHRhKSA+IHNfbWF4aW11bVJlc291
cmNlVXNlUGl4ZWxzKSB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBJbnRTaXplIGFkanVzdGVkU2l6ZSA9IG5ld1NpemU7CisgICAgaWYgKHNfbWF4aW11bVJl
c291cmNlVXNlUGl4ZWxzKSB7CisgICAgICAgIHdoaWxlICgoc19jdXJyZW50UmVzb3VyY2VVc2VQ
aXhlbHMgKyBwaXhlbERlbHRhKSA+IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzKSB7CisgICAg
ICAgICAgICBhZGp1c3RlZFNpemUuc2NhbGUoc19yZXNvdXJjZUFkanVzdGVkUmF0aW8pOworICAg
ICAgICAgICAgaWYgKGFkanVzdGVkU2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBj
bGVhcigpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHBpeGVsRGVsdGEgPSBhZGp1c3RlZFNpemUud2lkdGgoKSAqIGFkanVzdGVkU2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgIHBpeGVsRGVsdGEgLT0gb2xkU2l6ZTsKKyAgICAgICAg
fQogICAgIH0KLSAgICBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyArPSBwaXhlbERlbHRhOwog
CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBt
X2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CiAKLSAgICBpZiAobmV3U2l6ZSAhPSBt
X3NpemUpIHsKLSAgICAgICAgbV9zaXplID0gbmV3U2l6ZTsKKyAgICBpZiAoYWRqdXN0ZWRTaXpl
ICE9IG1fc2l6ZSkgewogCiAgICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29sb3JGb3JtYXQsIGNv
bG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuYWxwaGEpIHsKQEAgLTI2MSw0NyArMjcxLDU3IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6
cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgICAgIGludGVybmFsUmVuZGVyYnVmZmVyRm9y
bWF0ID0gRXh0ZW5zaW9uczNEOjpSR0I4X09FUzsKICAgICAgICAgfQogCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIG1fc2l6ZSA9IGFkanVzdGVkU2l6ZTsKIAotICAgICAgICAvLyByZXNpemUg
bXVsdGlzYW1wbGUgRkJPCi0gICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7Ci0gICAgICAgICAg
ICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTYW1wbGVD
b3VudCk7Ci0gICAgICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig0LCBtYXhTYW1w
bGVDb3VudCk7Ci0KLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0KLSAgICAgICAg
ICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxSZW5kZXJidWZm
ZXJGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
bV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7Ci0gICAgICAgICAgICBpZiAo
bV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gQ2xlYW51cAotICAgICAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gcmVzaXplIG11bHRpc2Ft
cGxlIEZCTworICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOwor
ICAgICAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNv
dW50KTsKKworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisKKyAgICAgICAg
ICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbFJl
bmRlcmJ1ZmZlckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5U
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICByZXNpemVEZXB0aFN0ZW5jaWwoc2FtcGxlQ291bnQpOwor
ICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplLnNjYWxl
KHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAg
Ly8gcmVzaXplIHJlZ3VsYXIgRkJPCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICAgICAgLy8g
cmVzaXplIHJlZ3VsYXIgRkJPCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIAotICAgICAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9y
QnVmZmVyKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFs
Q29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CiAKLSAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgICAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOwogCi0gICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFj
a2luZyBjb2xvciBidWZmZXIKLSAgICAgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENv
bG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICB9CisgICAg
ICAgICAgICAvLyByZXNpemUgdGhlIGJhY2tpbmcgY29sb3IgYnVmZmVyCisgICAgICAgICAgICBp
ZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29s
b3JCdWZmZXIpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAg
ICAgICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKKyAgICAgICAgICAgICAgICByZXNpemVEZXB0
aFN0ZW5jaWwoMCk7CisgICAgICAgICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgYWRqdXN0ZWRTaXplLnNjYWxlKHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKKworICAg
ICAgICB9IHdoaWxlICghYWRqdXN0ZWRTaXplLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAg
ICAgIHBpeGVsRGVsdGEgPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAg
ICAgcGl4ZWxEZWx0YSAtPSBvbGRTaXplOworICAgICAgICBzX2N1cnJlbnRSZXNvdXJjZVVzZVBp
eGVscyArPSBwaXhlbERlbHRhOwogCi0gICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKLSAgICAg
ICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbCgwKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAgICAgLy8g
Q2xlYW51cAorICAgICAgICBpZiAoYWRqdXN0ZWRTaXplLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQo=
</data>
<flag name="review"
          id="125523"
          type_id="1"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124425</attachid>
            <date>2012-01-27 20:22:06 -0800</date>
            <delta_ts>2012-02-01 00:02:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>8549</size>
            <attacher name="yongsheng">yongsheng.zhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjA4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAxLTI2ICBZb25nc2hl
bmcgWmh1ICA8eW9uZ3NoZW5nLnpodUBpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0wgbXVzdCBh
bGxvY2F0ZSBzbWFsbGVyIGRyYXdpbmcgYnVmZmVyIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMu
IAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC9kcmF3aW5nYnVmZmVyLXRlc3QuaHRtbAorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorCiAyMDEyLTAxLTI2ICBQYWJsbyBGbG91cmV0
ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBGaXggYmFkIGNvZGUgZ2VuZXJhdGVk
IGJ5IHRoZSBKU0MgaWRsIGNvZGUgZ2VuZXJhdG9yIGZvciBbQ2FjaGVkQXR0cmlidXRlXSBhdHRy
aWJ1dGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiAxMDYwODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RhdGljIGludCBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVs
cyA9CiBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0gMDsKICNlbmRpZgog
c3RhdGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgc19yZXNvdXJjZUFkanVzdGVkUmF0aW8gPSAwLjU7CiAKIFBhc3NSZWZQdHI8RHJhd2lu
Z0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCiB7CkBA
IC0yMzYsMTkgKzIzNywyOCBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNp
emUmCiAgICAgfQogCiAgICAgaW50IHBpeGVsRGVsdGEgPSBuZXdTaXplLndpZHRoKCkgKiBuZXdT
aXplLmhlaWdodCgpOwotICAgIGlmICghbV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcGl4ZWxE
ZWx0YSAtPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgb2xkU2l6
ZSA9IDA7CisgICAgaWYgKCFtX3NpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIG9sZFNpemUgPSBt
X3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgcGl4ZWxEZWx0YSAtPSBv
bGRTaXplOworICAgIH0KIAotICAgIGlmIChzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscyAmJiAo
c19jdXJyZW50UmVzb3VyY2VVc2VQaXhlbHMgKyBwaXhlbERlbHRhKSA+IHNfbWF4aW11bVJlc291
cmNlVXNlUGl4ZWxzKSB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBJbnRTaXplIGFkanVzdGVkU2l6ZSA9IG5ld1NpemU7CisgICAgaWYgKHNfbWF4aW11bVJl
c291cmNlVXNlUGl4ZWxzKSB7CisgICAgICAgIHdoaWxlICgoc19jdXJyZW50UmVzb3VyY2VVc2VQ
aXhlbHMgKyBwaXhlbERlbHRhKSA+IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzKSB7CisgICAg
ICAgICAgICBhZGp1c3RlZFNpemUuc2NhbGUoc19yZXNvdXJjZUFkanVzdGVkUmF0aW8pOworICAg
ICAgICAgICAgaWYgKGFkanVzdGVkU2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBj
bGVhcigpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHBpeGVsRGVsdGEgPSBhZGp1c3RlZFNpemUud2lkdGgoKSAqIGFkanVzdGVkU2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgIHBpeGVsRGVsdGEgLT0gb2xkU2l6ZTsKKyAgICAgICAg
fQogICAgIH0KLSAgICBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyArPSBwaXhlbERlbHRhOwog
CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBt
X2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CiAKLSAgICBpZiAobmV3U2l6ZSAhPSBt
X3NpemUpIHsKLSAgICAgICAgbV9zaXplID0gbmV3U2l6ZTsKKyAgICBpZiAoYWRqdXN0ZWRTaXpl
ICE9IG1fc2l6ZSkgewogCiAgICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29sb3JGb3JtYXQsIGNv
bG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuYWxwaGEpIHsKQEAgLTI2MSw0NyArMjcxLDU3IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6
cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgICAgIGludGVybmFsUmVuZGVyYnVmZmVyRm9y
bWF0ID0gRXh0ZW5zaW9uczNEOjpSR0I4X09FUzsKICAgICAgICAgfQogCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIG1fc2l6ZSA9IGFkanVzdGVkU2l6ZTsKIAotICAgICAgICAvLyByZXNpemUg
bXVsdGlzYW1wbGUgRkJPCi0gICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7Ci0gICAgICAgICAg
ICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTYW1wbGVD
b3VudCk7Ci0gICAgICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig0LCBtYXhTYW1w
bGVDb3VudCk7Ci0KLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0KLSAgICAgICAg
ICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxSZW5kZXJidWZm
ZXJGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
bV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7Ci0gICAgICAgICAgICBpZiAo
bV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gQ2xlYW51cAotICAgICAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gcmVzaXplIG11bHRpc2Ft
cGxlIEZCTworICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOwor
ICAgICAgICAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNv
dW50KTsKKworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisKKyAgICAgICAg
ICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbFJl
bmRlcmJ1ZmZlckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5U
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICByZXNpemVEZXB0aFN0ZW5jaWwoc2FtcGxlQ291bnQpOwor
ICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplLnNjYWxl
KHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAg
Ly8gcmVzaXplIHJlZ3VsYXIgRkJPCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICAgICAgLy8g
cmVzaXplIHJlZ3VsYXIgRkJPCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIAotICAgICAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9y
QnVmZmVyKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFs
Q29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CiAKLSAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgICAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOwogCi0gICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFj
a2luZyBjb2xvciBidWZmZXIKLSAgICAgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENv
bG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICB9CisgICAg
ICAgICAgICAvLyByZXNpemUgdGhlIGJhY2tpbmcgY29sb3IgYnVmZmVyCisgICAgICAgICAgICBp
ZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29s
b3JCdWZmZXIpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAg
ICAgICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKKyAgICAgICAgICAgICAgICByZXNpemVEZXB0
aFN0ZW5jaWwoMCk7CisgICAgICAgICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgYWRqdXN0ZWRTaXplLnNjYWxlKHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKKworICAg
ICAgICB9IHdoaWxlICghYWRqdXN0ZWRTaXplLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAg
ICAgIHBpeGVsRGVsdGEgPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAg
ICAgcGl4ZWxEZWx0YSAtPSBvbGRTaXplOworICAgICAgICBzX2N1cnJlbnRSZXNvdXJjZVVzZVBp
eGVscyArPSBwaXhlbERlbHRhOwogCi0gICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKLSAgICAg
ICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbCgwKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAgICAgLy8g
Q2xlYW51cAorICAgICAgICBpZiAoYWRqdXN0ZWRTaXplLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dAkocmV2aXNpb24gMTA2MTAxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zODQxLDggKzM4NDEsNiBA
QCBCVUdXSzc2NTU4IDogc3ZnL2RvbS9TVkdTY3JpcHRFbGVtZW50L3NjCiAKIEJVR1dLNzY1ODAg
OiBtZWRpYS9tZWRpYS1kb2N1bWVudC1hdWRpby1yZXBhaW50Lmh0bWwgPSBJTUFHRSBQQVNTCiAK
LUJVR1dLNzY1NjIgOiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3aW5nYnVmZmVyLXRlc3QuaHRtbCA9
IFRFWFQKLQogLy8gVGhpcyB0ZXN0IGlzIHBhc3NpbmcsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gcG9z
c2libGUgdG8gYWRkIEdQVStMZW9wYXJkIHNwZWNpZmljIGJhc2VsaW5lcy4KIEJVR0pBTUVTUiBM
RU9QQVJEIEdQVSA6IGZhc3QvY2FudmFzL3F1YWRyYXRpY0N1cnZlVG8ueG1sID0gSU1BR0UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124892</attachid>
            <date>2012-02-01 00:02:24 -0800</date>
            <delta_ts>2012-02-01 07:09:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>7815</size>
            <attacher name="yongsheng">yongsheng.zhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMDYzNDQpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTAxICBZb25nc2hlbmcgWmh1ICA8eW9uZ3NoZW5nLnpo
dUBpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0wgbXVzdCBhbGxvY2F0ZSBzbWFsbGVyIGRyYXdp
bmcgYnVmZmVyIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMuIAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3
aW5nYnVmZmVyLXRlc3QuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0Ry
YXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
cmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
cmVzZXQpOgorCiAyMDEyLTAxLTMxICBQYWJsbyBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNv
bT4KIAogICAgICAgICBGaXggY29tcGlsYXRpb24gZXJyb3JzIG9uIGJ1aWxkLXdlYmtpdCAtLWRl
YnVnIC0tbm8td29ya2VycyBvbiBtYWMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9EcmF3aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkocmV2aXNpb24gMTA2MzQ0KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAgc3RhdGljIGludCBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscyA9
CiBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0gMDsKICNlbmRpZgogc3Rh
dGljIGludCBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyA9IDA7CitzdGF0aWMgY29uc3QgZmxv
YXQgc19yZXNvdXJjZUFkanVzdGVkUmF0aW8gPSAwLjU7CiAKIFBhc3NSZWZQdHI8RHJhd2luZ0J1
ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBj
b25zdCBJbnRTaXplJiBzaXplLCBib29sIHNlcGFyYXRlQmFja2luZ1RleHR1cmUpCiB7CkBAIC0y
MzYsMTkgKzIzNywyOCBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUm
CiAgICAgfQogCiAgICAgaW50IHBpeGVsRGVsdGEgPSBuZXdTaXplLndpZHRoKCkgKiBuZXdTaXpl
LmhlaWdodCgpOwotICAgIGlmICghbV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcGl4ZWxEZWx0
YSAtPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKLQotICAgIGlmIChzX21heGlt
dW1SZXNvdXJjZVVzZVBpeGVscyAmJiAoc19jdXJyZW50UmVzb3VyY2VVc2VQaXhlbHMgKyBwaXhl
bERlbHRhKSA+IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzKSB7Ci0gICAgICAgIGNsZWFyKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgb2xkU2l6ZSA9IDA7CisgICAgaWYgKCFt
X3NpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIG9sZFNpemUgPSBtX3NpemUud2lkdGgoKSAqIG1f
c2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgcGl4ZWxEZWx0YSAtPSBvbGRTaXplOwogICAgIH0KLSAg
ICBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyArPSBwaXhlbERlbHRhOworCisgICAgSW50U2l6
ZSBhZGp1c3RlZFNpemUgPSBuZXdTaXplOworICAgIGlmIChzX21heGltdW1SZXNvdXJjZVVzZVBp
eGVscykgeworICAgICAgICB3aGlsZSAoKHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzICsgcGl4
ZWxEZWx0YSkgPiBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscykgeworICAgICAgICAgICAgYWRq
dXN0ZWRTaXplLnNjYWxlKHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKKyAgICAgICAgICAgIGlm
IChhZGp1c3RlZFNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY2xlYXIoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw
aXhlbERlbHRhID0gYWRqdXN0ZWRTaXplLndpZHRoKCkgKiBhZGp1c3RlZFNpemUuaGVpZ2h0KCk7
CisgICAgICAgICAgICBwaXhlbERlbHRhIC09IG9sZFNpemU7CisgICAgICAgIH0KKyAgICAgfQog
CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBt
X2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CiAKLSAgICBpZiAobmV3U2l6ZSAhPSBt
X3NpemUpIHsKLSAgICAgICAgbV9zaXplID0gbmV3U2l6ZTsKKyAgICBpZiAoYWRqdXN0ZWRTaXpl
ICE9IG1fc2l6ZSkgewogCiAgICAgICAgIHVuc2lnbmVkIGludGVybmFsQ29sb3JGb3JtYXQsIGNv
bG9yRm9ybWF0LCBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdDsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuYWxwaGEpIHsKQEAgLTI2Miw0NiArMjcyLDU2IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6
cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgfQogCiAKLSAgICAgICAgLy8gcmVzaXplIG11
bHRpc2FtcGxlIEZCTwotICAgICAgICBpZiAobXVsdGlzYW1wbGUoKSkgewotICAgICAgICAgICAg
aW50IG1heFNhbXBsZUNvdW50ID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291
bnQpOwotICAgICAgICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxl
Q291bnQpOwotCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotCi0gICAgICAgICAg
ICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsUmVuZGVyYnVmZmVy
Rm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAg
ICAgICByZXNpemVEZXB0aFN0ZW5jaWwoc2FtcGxlQ291bnQpOwotICAgICAgICAgICAgaWYgKG1f
Y29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAg
ICAgICAgICAgICAgIC8vIENsZWFudXAKLSAgICAgICAgICAgICAgICBjbGVhcigpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9zaXpl
ID0gYWRqdXN0ZWRTaXplOworICAgICAgICAgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTwor
ICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgbWF4
U2FtcGxlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2Vy
dihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOworICAgICAgICAg
ICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKKwor
ICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisKKyAgICAgICAgICAgICAgICBt
X2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbFJlbmRlcmJ1ZmZl
ckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICByZXNpemVEZXB0aFN0ZW5jaWwoc2FtcGxlQ291bnQpOworICAgICAgICAg
ICAgICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplLnNjYWxlKHNfcmVzb3Vy
Y2VBZGp1c3RlZFJhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgLy8gcmVzaXpl
IHJlZ3VsYXIgRkJPCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICAgICAgLy8gcmVzaXplIHJl
Z3VsYXIgRkJPCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKIAotICAgICAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsK
LSAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDAp
OworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3Jt
YXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CiAKLSAgICAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fY29sb3JCdWZmZXIsIDApOwogCi0gICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBjb2xv
ciBidWZmZXIKLSAgICAgICAgaWYgKG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkgewotICAgICAg
ICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV9iYWNraW5nQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICB9CisgICAgICAgICAgICAv
LyByZXNpemUgdGhlIGJhY2tpbmcgY29sb3IgYnVmZmVyCisgICAgICAgICAgICBpZiAobV9zZXBh
cmF0ZUJhY2tpbmdUZXh0dXJlKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9iYWNraW5nQ29sb3JCdWZmZXIp
OworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAgICAgICAgICAg
IGlmICghbXVsdGlzYW1wbGUoKSkKKyAgICAgICAgICAgICAgICByZXNpemVEZXB0aFN0ZW5jaWwo
MCk7CisgICAgICAgICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0NPTVBMRVRFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYWRq
dXN0ZWRTaXplLnNjYWxlKHNfcmVzb3VyY2VBZGp1c3RlZFJhdGlvKTsKKworICAgICAgICB9IHdo
aWxlICghYWRqdXN0ZWRTaXplLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAgICAgIHBpeGVs
RGVsdGEgPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgcGl4ZWxE
ZWx0YSAtPSBvbGRTaXplOworICAgICAgICBzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVscyArPSBw
aXhlbERlbHRhOwogCi0gICAgICAgIGlmICghbXVsdGlzYW1wbGUoKSkKLSAgICAgICAgICAgIHJl
c2l6ZURlcHRoU3RlbmNpbCgwKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAgICAgLy8gQ2xlYW51cAor
ICAgICAgICBpZiAoIW5ld1NpemUuaXNFbXB0eSgpICYmIGFkanVzdGVkU2l6ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124952</attachid>
            <date>2012-02-01 08:14:18 -0800</date>
            <delta_ts>2012-02-06 17:58:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>8513</size>
            <attacher name="yongsheng">yongsheng.zhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTAxICBZb25nc2hl
bmcgWmh1ICA8eW9uZ3NoZW5nLnpodUBpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0wgbXVzdCBh
bGxvY2F0ZSBzbWFsbGVyIGRyYXdpbmcgYnVmZmVyIHdoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMu
IAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NTQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC9kcmF3aW5nYnVmZmVyLXRlc3QuaHRtbAorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorCiAyMDEyLTAyLTAxICBTaGlueWEgS2F3YW5h
a2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CiAKICAgICAgICAgQ29udGVudCBlbGVtZW50IHNob3Vs
ZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQvcmVwbGFjZWQgaW4gYSBz
aGFkb3cgdHJlZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9E
cmF3aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDEwNjQ2NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNl
UGl4ZWxzID0KIHN0YXRpYyBpbnQgc19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMgPSAwOwogI2Vu
ZGlmCiBzdGF0aWMgaW50IHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzID0gMDsKK3N0YXRpYyBj
b25zdCBmbG9hdCBzX3Jlc291cmNlQWRqdXN0ZWRSYXRpbyA9IDAuNTsKIAogUGFzc1JlZlB0cjxE
cmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkK
IHsKQEAgLTIzNiwxOSArMjM3LDI4IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3Qg
SW50U2l6ZSYKICAgICB9CiAKICAgICBpbnQgcGl4ZWxEZWx0YSA9IG5ld1NpemUud2lkdGgoKSAq
IG5ld1NpemUuaGVpZ2h0KCk7Ci0gICAgaWYgKCFtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICBw
aXhlbERlbHRhIC09IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpOwotCi0gICAgaWYg
KHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzICYmIChzX2N1cnJlbnRSZXNvdXJjZVVzZVBpeGVs
cyArIHBpeGVsRGVsdGEpID4gc19tYXhpbXVtUmVzb3VyY2VVc2VQaXhlbHMpIHsKLSAgICAgICAg
Y2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGludCBvbGRTaXplID0gMDsKKyAg
ICBpZiAoIW1fc2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgb2xkU2l6ZSA9IG1fc2l6ZS53aWR0
aCgpICogbV9zaXplLmhlaWdodCgpOworICAgICAgICBwaXhlbERlbHRhIC09IG9sZFNpemU7CiAg
ICAgfQotICAgIHNfY3VycmVudFJlc291cmNlVXNlUGl4ZWxzICs9IHBpeGVsRGVsdGE7CisKKyAg
ICBJbnRTaXplIGFkanVzdGVkU2l6ZSA9IG5ld1NpemU7CisgICAgaWYgKHNfbWF4aW11bVJlc291
cmNlVXNlUGl4ZWxzKSB7CisgICAgICAgIHdoaWxlICgoc19jdXJyZW50UmVzb3VyY2VVc2VQaXhl
bHMgKyBwaXhlbERlbHRhKSA+IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzKSB7CisgICAgICAg
ICAgICBhZGp1c3RlZFNpemUuc2NhbGUoc19yZXNvdXJjZUFkanVzdGVkUmF0aW8pOworICAgICAg
ICAgICAgaWYgKGFkanVzdGVkU2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjbGVh
cigpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHBpeGVsRGVsdGEgPSBhZGp1c3RlZFNpemUud2lkdGgoKSAqIGFkanVzdGVkU2l6ZS5o
ZWlnaHQoKTsKKyAgICAgICAgICAgIHBpeGVsRGVsdGEgLT0gb2xkU2l6ZTsKKyAgICAgICAgfQor
ICAgICB9CiAKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyYgYXR0cmli
dXRlcyA9IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKIAotICAgIGlmIChuZXdT
aXplICE9IG1fc2l6ZSkgewotICAgICAgICBtX3NpemUgPSBuZXdTaXplOworICAgIGlmIChhZGp1
c3RlZFNpemUgIT0gbV9zaXplKSB7CiAKICAgICAgICAgdW5zaWduZWQgaW50ZXJuYWxDb2xvckZv
cm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0OwogICAgICAgICBp
ZiAoYXR0cmlidXRlcy5hbHBoYSkgewpAQCAtMjYyLDQ2ICsyNzIsNTYgQEAgYm9vbCBEcmF3aW5n
QnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICB9CiAKIAotICAgICAgICAvLyBy
ZXNpemUgbXVsdGlzYW1wbGUgRkJPCi0gICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7Ci0gICAg
ICAgICAgICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhT
YW1wbGVDb3VudCk7Ci0gICAgICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig0LCBt
YXhTYW1wbGVDb3VudCk7Ci0KLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0KLSAg
ICAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxSZW5k
ZXJidWZmZXJGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7Ci0gICAgICAgICAg
ICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRF
KSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2xlYW51cAotICAgICAgICAgICAgICAgIGNsZWFyKCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBtX3NpemUgPSBhZGp1c3RlZFNpemU7CisgICAgICAgICAgICAvLyByZXNpemUgbXVsdGlzYW1w
bGUgRkJPCisgICAgICAgICAgICBpZiAobXVsdGlzYW1wbGUoKSkgeworICAgICAgICAgICAgICAg
IGludCBtYXhTYW1wbGVDb3VudCA9IDA7CisKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmdl
dEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTYW1wbGVDb3VudCk7Cisg
ICAgICAgICAgICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxlQ291
bnQpOworCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworICAgICAgICAg
ICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsUmVu
ZGVyYnVmZmVyRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOworICAgICAgICAgICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9DT01QTEVURSkgeworICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFNpemUuc2NhbGUo
c19yZXNvdXJjZUFkanVzdGVkUmF0aW8pOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICAv
LyByZXNpemUgcmVndWxhciBGQk8KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgICAgICAvLyBy
ZXNpemUgcmVndWxhciBGQk8KKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogCi0gICAgICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JC
dWZmZXIpOwotICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgMCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxD
b2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3Jt
YXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKIAotICAgICAgICBtX2Nv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CiAKLSAgICAgICAgLy8gcmVzaXplIHRoZSBiYWNr
aW5nIGNvbG9yIGJ1ZmZlcgotICAgICAgICBpZiAobV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX2JhY2tpbmdDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBtX2NvbnRleHQt
PnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29s
b3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBjb2xvciBidWZmZXIKKyAgICAgICAgICAgIGlm
IChtX3NlcGFyYXRlQmFja2luZ1RleHR1cmUpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JhY2tpbmdDb2xv
ckJ1ZmZlcik7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKworICAg
ICAgICAgICAgaWYgKCFtdWx0aXNhbXBsZSgpKQorICAgICAgICAgICAgICAgIHJlc2l6ZURlcHRo
U3RlbmNpbCgwKTsKKyAgICAgICAgICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBhZGp1c3RlZFNpemUuc2NhbGUoc19yZXNvdXJjZUFkanVzdGVkUmF0aW8pOworCisgICAg
ICAgIH0gd2hpbGUgKCFhZGp1c3RlZFNpemUuaXNFbXB0eSgpKTsKIAotICAgICAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICAg
ICAgcGl4ZWxEZWx0YSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpOworICAgICAg
ICBwaXhlbERlbHRhIC09IG9sZFNpemU7CisgICAgICAgIHNfY3VycmVudFJlc291cmNlVXNlUGl4
ZWxzICs9IHBpeGVsRGVsdGE7CiAKLSAgICAgICAgaWYgKCFtdWx0aXNhbXBsZSgpKQotICAgICAg
ICAgICAgcmVzaXplRGVwdGhTdGVuY2lsKDApOwotICAgICAgICBpZiAobV9jb250ZXh0LT5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAvLyBD
bGVhbnVwCisgICAgICAgIGlmICghbmV3U2l6ZS5pc0VtcHR5KCkgJiYgYWRqdXN0ZWRTaXplLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2aXNpb24gMTA2NDY2KQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0zODMxLDggKzM4MzEsNiBAQCBCVUdXSzc2NTU4IDogc3ZnL2RvbS9TVkdTY3JpcHRFbGVt
ZW50L3NjCiAKIEJVR1dLNzY1ODAgOiBtZWRpYS9tZWRpYS1kb2N1bWVudC1hdWRpby1yZXBhaW50
Lmh0bWwgPSBJTUFHRSBQQVNTCiAKLUJVR1dLNzY1NjIgOiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3
aW5nYnVmZmVyLXRlc3QuaHRtbCA9IFRFWFQKLQogLy8gVGhpcyB0ZXN0IGlzIHBhc3NpbmcsIGJ1
dCBpdCBkb2Vzbid0IHNlZW0gcG9zc2libGUgdG8gYWRkIEdQVStMZW9wYXJkIHNwZWNpZmljIGJh
c2VsaW5lcy4KIEJVR0pBTUVTUiBMRU9QQVJEIEdQVSA6IGZhc3QvY2FudmFzL3F1YWRyYXRpY0N1
cnZlVG8ueG1sID0gSU1BR0UKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>