<?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>53104</bug_id>
          
          <creation_ts>2011-01-25 11:14:58 -0800</creation_ts>
          <short_desc>Intermittent crash in fast/files/read-blob-async.html on the GTK+ debug bots</short_desc>
          <delta_ts>2011-02-07 15:56:28 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>jianli</cc>
    
    <cc>levin</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>339774</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-25 11:14:58 -0800</bug_when>
    <thetext>It seems that didFinishLoading is cleaning up the BlobResourceHandle before the asynchronous tasks finish. Here is the valgrind output:


==19460== Memcheck, a memory error detector
==19460== Copyright (C) 2002-2010, and GNU GPL&apos;d, by Julian Seward et al.
==19460== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==19460== Command: ./WebKitBuild/Debug/Programs/DumpRenderTree LayoutTests/fast/files/read-blob-async.html
==19460== 
==19476== Warning: invalid file descriptor 1014 in syscall close()
==19476== Warning: invalid file descriptor 1015 in syscall close()
==19476== Warning: invalid file descriptor 1016 in syscall close()
==19476==    Use --log-fd=&lt;number&gt; to select an alternative log fd.
==19476== Warning: invalid file descriptor 1017 in syscall close()
==19476== Warning: invalid file descriptor 1018 in syscall close()
==19460== Invalid write of size 8
==19460==    at 0x5EF3608: WebCore::BlobResourceHandle::readDataAsync(WebCore::BlobDataItem const&amp;) (BlobResourceHandle.cpp:438)
==19460==    by 0x5EF34C7: WebCore::BlobResourceHandle::readAsync() (BlobResourceHandle.cpp:423)
==19460==    by 0x5EF29D5: WebCore::BlobResourceHandle::getSizeForNext() (BlobResourceHandle.cpp:232)
==19460==    by 0x5EF2C2B: WebCore::BlobResourceHandle::didGetSize(long long) (BlobResourceHandle.cpp:279)
==19460==    by 0x5EF2A43: WebCore::BlobResourceHandle::getSizeForNext() (BlobResourceHandle.cpp:240)
==19460==    by 0x5EF28B5: WebCore::BlobResourceHandle::start() (BlobResourceHandle.cpp:214)
==19460==    by 0x5EF1FD1: WebCore::delayedStart(void*) (BlobResourceHandle.cpp:143)
==19460==    by 0x667816F: WTF::dispatchFunctionsFromMainThread() (MainThread.cpp:155)
==19460==    by 0x6677F46: WTF::timeoutFired(void*) (MainThreadGtk.cpp:43)
==19460==    by 0x9660B0A: ??? (in /lib/libglib-2.0.so.0.2705.0)
==19460==    by 0x96600B1: g_main_context_dispatch (in /lib/libglib-2.0.so.0.2705.0)
==19460==    by 0x9664777: ??? (in /lib/libglib-2.0.so.0.2705.0)
==19460==  Address 0x14216db8 is 152 bytes inside a block of size 176 free&apos;d
==19460==    at 0x4C27D71: free (vg_replace_malloc.c:366)
==19460==    by 0x6677C0C: WTF::fastFree(void*) (FastMalloc.cpp:327)
==19460==    by 0x5772D93: WTF::RefCounted&lt;WebCore::ResourceHandle&gt;::operator delete(void*) (RefCounted.h:136)
==19460==    by 0x5EF2730: WebCore::BlobResourceHandle::~BlobResourceHandle() (BlobResourceHandle.cpp:178)
==19460==    by 0x572F86D: WTF::RefCounted&lt;WebCore::ResourceHandle&gt;::deref() (RefCounted.h:141)
==19460==    by 0x572FB22: void WTF::derefIfNotNull&lt;WebCore::ResourceHandle&gt;(WebCore::ResourceHandle*) (PassRefPtr.h:59)
==19460==    by 0x572F93F: WTF::RefPtr&lt;WebCore::ResourceHandle&gt;::operator=(WebCore::ResourceHandle*) (RefPtr.h:135)
==19460==    by 0x5DE74D2: WebCore::SubresourceLoader::didFinishLoading(double) (SubresourceLoader.cpp:183)
==19460==    by 0x5DDE814: WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*, double) (ResourceLoader.cpp:434)
==19460==    by 0x5EF4167: WebCore::BlobResourceHandle::notifyFinish() (BlobResourceHandle.cpp:584)
==19460==    by 0x5EF3472: WebCore::BlobResourceHandle::readAsync() (BlobResourceHandle.cpp:417)
==19460==    by 0x5EF3953: WebCore::BlobResourceHandle::consumeData(char const*, int) (BlobResourceHandle.cpp:502)
==19460== 
==19460== Invalid write of size 8
==19460==    at 0x5EF3608: WebCore::BlobResourceHandle::readDataAsync(WebCore::BlobDataItem const&amp;) (BlobResourceHandle.cpp:438)
==19460==    by 0x5EF34C7: WebCore::BlobResourceHandle::readAsync() (BlobResourceHandle.cpp:423)
==19460==    by 0x5EF3953: WebCore::BlobResourceHandle::consumeData(char const*, int) (BlobResourceHandle.cpp:502)
==19460==    by 0x5EF3849: WebCore::BlobResourceHandle::didRead(int) (BlobResourceHandle.cpp:473)
==19460==    by 0x5BE2752: WebCore::didRead(WebCore::ScriptExecutionContext*, WebCore::FileStreamProxy*, int) (FileStreamProxy.cpp:169)
==19460==    by 0x5BE52D9: WebCore::CrossThreadTask2&lt;WebCore::FileStreamProxy*, WebCore::FileStreamProxy*, int, int&gt;::performTask(WebCore::ScriptExecutionContext*) (CrossThreadTask.h:112)
==19460==    by 0x5A9A23F: WebCore::performTask(void*) (Document.cpp:4722)
==19460==    by 0x667816F: WTF::dispatchFunctionsFromMainThread() (MainThread.cpp:155)
==19460==    by 0x6677F46: WTF::timeoutFired(void*) (MainThreadGtk.cpp:43)
==19460==    by 0x9660B0A: ??? (in /lib/libglib-2.0.so.0.2705.0)
==19460==    by 0x96600B1: g_main_context_dispatch (in /lib/libglib-2.0.so.0.2705.0)
==19460==    by 0x9664777: ??? (in /lib/libglib-2.0.so.0.2705.0)
==19460==  Address 0x14433b88 is 152 bytes inside a block of size 176 free&apos;d
==19460==    at 0x4C27D71: free (vg_replace_malloc.c:366)
==19460==    by 0x6677C0C: WTF::fastFree(void*) (FastMalloc.cpp:327)
==19460==    by 0x5772D93: WTF::RefCounted&lt;WebCore::ResourceHandle&gt;::operator delete(void*) (RefCounted.h:136)
==19460==    by 0x5EF2730: WebCore::BlobResourceHandle::~BlobResourceHandle() (BlobResourceHandle.cpp:178)
==19460==    by 0x572F86D: WTF::RefCounted&lt;WebCore::ResourceHandle&gt;::deref() (RefCounted.h:141)
==19460==    by 0x572FB22: void WTF::derefIfNotNull&lt;WebCore::ResourceHandle&gt;(WebCore::ResourceHandle*) (PassRefPtr.h:59)
==19460==    by 0x572F93F: WTF::RefPtr&lt;WebCore::ResourceHandle&gt;::operator=(WebCore::ResourceHandle*) (RefPtr.h:135)
==19460==    by 0x5DE74D2: WebCore::SubresourceLoader::didFinishLoading(double) (SubresourceLoader.cpp:183)
==19460==    by 0x5DDE814: WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*, double) (ResourceLoader.cpp:434)
==19460==    by 0x5EF4167: WebCore::BlobResourceHandle::notifyFinish() (BlobResourceHandle.cpp:584)
==19460==    by 0x5EF3472: WebCore::BlobResourceHandle::readAsync() (BlobResourceHandle.cpp:417)
==19460==    by 0x5EF3953: WebCore::BlobResourceHandle::consumeData(char const*, int) (BlobResourceHandle.cpp:502)
==19460==</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341770</commentid>
    <comment_count>1</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-01-28 15:10:02 -0800</bug_when>
    <thetext>Found the cause. Working on the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343761</commentid>
    <comment_count>2</comment_count>
      <attachid>80872</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-02-01 18:35:42 -0800</bug_when>
    <thetext>Created attachment 80872
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344065</commentid>
    <comment_count>3</comment_count>
      <attachid>80932</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-02-02 11:06:09 -0800</bug_when>
    <thetext>Created attachment 80932
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345765</commentid>
    <comment_count>4</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-02-04 13:49:20 -0800</bug_when>
    <thetext>*** Bug 53673 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345778</commentid>
    <comment_count>5</comment_count>
      <attachid>81282</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-02-04 13:59:55 -0800</bug_when>
    <thetext>Created attachment 81282
3rd patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345792</commentid>
    <comment_count>6</comment_count>
      <attachid>81282</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-04 14:22:38 -0800</bug_when>
    <thetext>Comment on attachment 81282
3rd patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        a standalone function because the client might choose to dispose the

Function level comment.

&gt; Source/WebCore/ChangeLog:14
&gt; +        period. 

Consider moving to be a function level comment.

&gt; Source/WebCore/ChangeLog:16
&gt; +        BlobResourceHandle::cancel can be triggered when we abort a FileReader.

Remove this bullet and put it at the function level below.

&gt; Source/WebCore/ChangeLog:33
&gt; +        * platform/network/ResourceHandle.h: Change cancel() to virtual.

so that BlobResourceHandle::cancel will be called when we abort a FileReader.

&gt; Source/WebCore/platform/network/BlobRegistryImpl.cpp:73
&gt; +    return handle;

return handle.release();

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:189
&gt; +    BlobResourceHandle* handle = static_cast&lt;BlobResourceHandle*&gt;(context);

Make this a RefPtr like this (and remove the deref below).
 RefPtr&lt;BlobResourceHandle&gt; handle = adoptRef(static_cast&lt;BlobResourceHandle*&gt;(context));

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:196
&gt; +    // For async version, we need to delay the start so that DocumentThreadableLoader that is in the stack can finish the initialization.

Consider moving this comment to be in the if (m_async) and get rid of &quot;For async version&quot;.

// Delay the start so ... (I don&apos;t understand the what this comment is talking about, so we should figure out something here.  For example, why is this true for the async version and not the sync version?)

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:197
&gt; +    // Note that we also need to add a ref here to guard it until the delay function is called.

Move to where the ref is and shorten (see below).

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:198
&gt; +    if (m_async) {

// Keep BlobResourceHandle alive until delayedStartBlobResourceHandle runs.

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:200
&gt; +        callOnMainThread(delayedStartBlobResourceHandle, this);

Consider doing a &quot;return;&quot; here and get rid of the else.

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:603
&gt; +    // For async version, we will have to notify the client from a standalone function because the client might choose to dispose the handle immediately.

Why is that a problem (since after this statement, it just returns)?
Also consider moving the comment inside of &quot;if (m_async)&quot;.

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:607
&gt; +        if (client())

Why not just call &quot;delayedFinishLoading&quot; here? (Of course, the name will need to be improved.)  This may also be a good idea for the other place where we do something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345911</commentid>
    <comment_count>7</comment_count>
      <attachid>81319</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-02-04 16:34:52 -0800</bug_when>
    <thetext>Created attachment 81319
4th patch

All fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346752</commentid>
    <comment_count>8</comment_count>
      <attachid>81319</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-07 13:09:56 -0800</bug_when>
    <thetext>Comment on attachment 81319
4th patch

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

&gt; Source/WebCore/ChangeLog:27
&gt; +        immediately, as in the GTK+ case.

This line looks like a left over from some editting.

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:199
&gt; +        // Do the start later because this method is part of the async creation and we want it to finish quickly.

I think you only need to explain why like this:
  &quot;Finish this async call quickly and return.&quot;

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:201
&gt; +

Remove extra blank line.

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:608
&gt; +        // If we notify the client now, BlobResourceHandle will get disposed while we still have BlobResourceHandle calls in the stack.

The second sentence is sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346896</commentid>
    <comment_count>9</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-02-07 15:29:40 -0800</bug_when>
    <thetext>Committed as https://trac.webkit.org/changeset/77852.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346911</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-07 15:56:28 -0800</bug_when>
    <thetext>Thanks for fixing this!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80872</attachid>
            <date>2011-02-01 18:35:42 -0800</date>
            <delta_ts>2011-02-02 11:06:09 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>53104</filename>
            <type>text/plain</type>
            <size>11565</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNDVmNzJiLi5jMjRjYzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMTEtMDItMDEgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludGVybWl0dGVudCBjcmFz
aCBpbiBmYXN0L2ZpbGVzL3JlYWQtYmxvYi1hc3luYy5odG1sIG9uIHRoZSBHVEsrIGRlYnVnCisg
ICAgICAgIGJvdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUzMTA0CisKKyAgICAgICAgRml4ZWQgYSBjb3VwbGUgcHJvYmxlbXMgdGhhdCBjb3VsZCBj
YXVzZSB0aGUgaW50ZXJtaXR0ZW50IGNyYXNoLgorICAgICAgICAxKSBNYWtlIEZpbGVTdHJlYW1D
bGllbnQgaW50ZXJmYWNlIHJlZi1jb3VudGVkIHNvIHRoYXQgRmlsZVN0cmVhbVByb3h5CisgICAg
ICAgIGNhbiBtYW5hZ2UgaXRzIGxpZmV0aW1lLiBTaW5jZSBCbG9iUmVzb3VyY2VIYW5kbGUgaGFz
IGFscmVhZHkgZGVyaXZlZAorICAgICAgICBmcm9tIFJlc291cmNlSGFuZGxlIHRoYXQgaXMgcmVm
LWNvdW50ZWQsIHdlIGNhbm5vdCBsZXQgQmxvYlJlc291cmNlSGFuZGxlCisgICAgICAgIGFsc28g
ZGVyaXZlIGZyb20gRmlsZVN0cmVhbUNsaWVudCBhcyB3ZSBkaWQgcHJldmlvdXNseS4gVG8gd29y
ayBhcm91bmQKKyAgICAgICAgdGhpcywgd2UgaW50cm9kdWNlIGEgc3RhbmRhbG9uZSBCbG9iUmVz
b3VyY2VGaWxlU3RyZWFtQ2xpZW50IHRvIGFjdAorICAgICAgICBhcyBhIGJyaWRnZSBiZXR3ZWVu
IEZpbGVTdHJlYW1Qcm94eSBhbmQgQmxvYlJlc291cmNlSGFuZGxlLgorICAgICAgICAyKSBBZGQg
dGhlIGNvZGUgdG8gZ3VhcmQgQmxvYlJlc291cmNlSGFuZGxlIGR1cmluZyB0aGUgZGVsYXkgc3Rh
cnQKKyAgICAgICAgcGVyaW9kLgorICAgICAgICAzKSBDaGFuZ2UgUmVzb3VyY2VIYW5kbGU6OmNh
bmNlbCBtZXRob2QgdG8gYmUgdmlydHVhbCBzbyB0aGF0CisgICAgICAgIEJsb2JSZXNvdXJjZUhh
bmRsZTo6Y2FuY2VsIGNhbiBiZSB0cmlnZ2VyZWQgd2hlbiB3ZSBhYm9ydCBhIEZpbGVSZWFkZXIu
CisKKyAgICAgICAgQ292ZXJlZCBieSB0aGUgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaDogS2VlcCBGaWxlU3RyZWFtQ2xpZW50IGluIFJlZlB0
ci4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6QXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9GaWxlU3RyZWFtQ2xpZW50Lmg6IE1ha2UgRmlsZVN0cmVhbUNsaWVudC5oIHJlZi1j
b3VudGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbUNsaWVudDo6fkZpbGVTdHJlYW1D
bGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjpjcmVhdGVSZXNvdXJjZUhhbmRs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVudDo6QmxvYlJlc291
cmNlRmlsZVN0cmVhbUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VGaWxl
U3RyZWFtQ2xpZW50Ojp+QmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iUmVzb3VyY2VGaWxlU3RyZWFtQ2xpZW50OjpkaWRHZXRTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUZpbGVTdHJlYW1DbGllbnQ6OmRpZE9wZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVudDo6ZGlkUmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5kbGU6OkJsb2JSZXNvdXJjZUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpkZWxheWVkU3RhcnRCbG9iUmVzb3VyY2VIYW5kbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iUmVzb3VyY2VIYW5kbGU6OmRvU3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oOiBDaGFuZ2UgY2FuY2VsKCkgdG8gdmlydHVhbC4KKwogMjAxMS0wMi0w
MSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNG
aWxlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaApp
bmRleCBhNTU1YTI0Li5kYTUxMjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Bc3luY0ZpbGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0Zp
bGVTdHJlYW0uaApAQCAtMzUsNyArMzUsOSBAQAogCiAjaW5jbHVkZSAiRmlsZVN0cmVhbUNsaWVu
dC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NCwxNyArNTYsMTcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpID0gMDsKIAotICAgIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldENsaWVudChGaWxl
U3RyZWFtQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KIAogcHJvdGVjdGVk
OgotICAgIEFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCisgICAgQXN5
bmNGaWxlU3RyZWFtKFBhc3NSZWZQdHI8RmlsZVN0cmVhbUNsaWVudD4gY2xpZW50KQogICAgICAg
ICA6IG1fY2xpZW50KGNsaWVudCkKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEZpbGVT
dHJlYW1DbGllbnQqIG1fY2xpZW50OworICAgIFJlZlB0cjxGaWxlU3RyZWFtQ2xpZW50PiBtX2Ns
aWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW1DbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVTdHJlYW1DbGllbnQuaAppbmRleCA0MDY2ZDlmLi4wMThjMGEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oCkBAIC0zMywxMCArMzMsMTQgQEAK
IAogI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNURU0pCiAKKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbGVTdHJl
YW1DbGllbnQgeworY2xhc3MgRmlsZVN0cmVhbUNsaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEZp
bGVTdHJlYW1DbGllbnQ+IHsKIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5GaWxlU3RyZWFtQ2xpZW50
KCkgeyB9CisKICAgICAvLyBGb3IgcmVhZGluZy4KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZChp
bnQpIHsgfQogCkBAIC01MSw5ICs1NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlk
T3Blbihib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZykgeyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIH5GaWxlU3RyZWFtQ2xpZW50KCkgeyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJ
bXBsLmNwcAppbmRleCAyYzRlOGZhLi5kYWYyMjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTY4LDcgKzY4LDkg
QEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJlZ2lzdHJ5SW1wbDo6Y3JlYXRlUmVz
b3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2UKICAgICBpZiAoIXNob3VsZExvYWRSZXNvdXJjZShy
ZXF1ZXN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gQmxvYlJlc291cmNlSGFu
ZGxlOjpjcmVhdGUobV9ibG9icy5nZXQocmVxdWVzdC51cmwoKS5zdHJpbmcoKSksIHJlcXVlc3Qs
IGNsaWVudCk7CisgICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gQmxvYlJl
c291cmNlSGFuZGxlOjpjcmVhdGUobV9ibG9icy5nZXQocmVxdWVzdC51cmwoKS5zdHJpbmcoKSks
IHJlcXVlc3QsIGNsaWVudCk7CisgICAgaGFuZGxlLT5zdGFydCgpOworICAgIHJldHVybiBoYW5k
bGU7CiB9CiAKIGJvb2wgQmxvYlJlZ2lzdHJ5SW1wbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3Bw
CmluZGV4IDc1MzA1MmEuLmQxYTE2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTEyOCw2ICsxMjgsMzkg
QEAgdm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91c0xvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3IKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8gQmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVudAorCitjbGFzcyBCbG9iUmVzb3VyY2VGaWxl
U3RyZWFtQ2xpZW50IDogcHVibGljIEZpbGVTdHJlYW1DbGllbnQgeworcHVibGljOgorICAgIEJs
b2JSZXNvdXJjZUZpbGVTdHJlYW1DbGllbnQoUGFzc1JlZlB0cjxCbG9iUmVzb3VyY2VIYW5kbGU+
IGhhbmRsZSkKKyAgICAgICAgOiBtX2hhbmRsZShoYW5kbGUpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgfkJsb2JSZXNvdXJjZUZpbGVTdHJlYW1DbGllbnQoKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcgc2l6ZSkKKyAgICB7CisgICAg
ICAgIG1faGFuZGxlLT5kaWRHZXRTaXplKHNpemUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkaWRPcGVuKGJvb2wgc3VjY2VzcykKKyAgICB7CisgICAgICAgIG1faGFuZGxlLT5kaWRPcGVu
KHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkKGludCBieXRlc1Jl
YWQpCisgICAgeworICAgICAgICBtX2hhbmRsZS0+ZGlkUmVhZChieXRlc1JlYWQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8QmxvYlJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKK307
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIEJsb2JSZXNvdXJjZUhhbmRsZQogCiAvLyBz
dGF0aWMKQEAgLTEzOCwxMSArMTcxLDYgQEAgdm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGIKICAgICBo
YW5kbGUtPnN0YXJ0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRlbGF5ZWRTdGFydCh2b2lkKiBjb250
ZXh0KQotewotICAgIHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGNvbnRleHQpLT5z
dGFydCgpOwotfQotCiBCbG9iUmVzb3VyY2VIYW5kbGU6OkJsb2JSZXNvdXJjZUhhbmRsZShQYXNz
UmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBhc3luYykKICAgICA6
IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCwgZmFsc2UsIGZhbHNlKQogICAgICwgbV9i
bG9iRGF0YShibG9iRGF0YSkKQEAgLTE1OCwxMiArMTg2LDYgQEAgQmxvYlJlc291cmNlSGFuZGxl
OjpCbG9iUmVzb3VyY2VIYW5kbGUoUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JEYXRh
LCBjb24KICAgICAsIG1fcmVhZEl0ZW1Db3VudCgwKQogICAgICwgbV9maWxlT3BlbmVkKGZhbHNl
KQogeyAgICAKLSAgICBpZiAobV9hc3luYykgewotICAgICAgICAvLyBXZSBuZWVkIHRvIHRha2Ug
YSByZWYuCi0gICAgICAgIG1fYXN5bmNTdHJlYW0gPSBjbGllbnQtPmNyZWF0ZUFzeW5jRmlsZVN0
cmVhbSh0aGlzKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChkZWxheWVkU3RhcnQsIHRoaXMp
OwotICAgIH0gZWxzZQotICAgICAgICBtX3N0cmVhbSA9IEZpbGVTdHJlYW06OmNyZWF0ZSgpOwog
fQogCiBCbG9iUmVzb3VyY2VIYW5kbGU6On5CbG9iUmVzb3VyY2VIYW5kbGUoKQpAQCAtMTg5LDgg
KzIxMSwyNSBAQCB2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKICAgICBtX2Fib3J0
ZWQgPSB0cnVlOwogfQogCit2b2lkIGRlbGF5ZWRTdGFydEJsb2JSZXNvdXJjZUhhbmRsZSh2b2lk
KiBjb250ZXh0KQoreworICAgIEJsb2JSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nh
c3Q8QmxvYlJlc291cmNlSGFuZGxlKj4oY29udGV4dCk7CisgICAgaGFuZGxlLT5kb1N0YXJ0KCk7
CisgICAgaGFuZGxlLT5kZXJlZigpOworfQorCiB2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6c3Rh
cnQoKQogeworICAgIC8vIEZvciBhc3luYyB2ZXJzaW9uLCB3ZSBuZWVkIHRvIGRlbGF5IHRoZSBz
dGFydCBzbyB0aGF0IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciB0aGF0IGlzIGluIHRoZSBzdGFj
ayBjYW4gZmluaXNoIHRoZSBpbml0aWFsaXphdGlvbi4gTm90ZSB0aGF0IHdlIGFsc28gbmVlZCB0
byBhZGQgYSByZWYgaGVyZSB0byBndWFyZCBpdCB1bnRpbCB0aGUgZGVsYXkgZnVuY3Rpb24gaXMg
Y2FsbGVkLgorICAgIGlmIChtX2FzeW5jKSB7CisgICAgICAgIHJlZigpOworICAgICAgICBjYWxs
T25NYWluVGhyZWFkKGRlbGF5ZWRTdGFydEJsb2JSZXNvdXJjZUhhbmRsZSwgdGhpcyk7CisgICAg
fSBlbHNlCisgICAgICAgIGRvU3RhcnQoKTsKK30KKwordm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6
OmRvU3RhcnQoKQorewogICAgIC8vIERvIG5vdCBjb250aW51ZSBpZiB0aGUgcmVxdWVzdCBpcyBh
Ym9ydGVkIG9yIGFuIGVycm9yIG9jY3Vycy4KICAgICBpZiAobV9hYm9ydGVkIHx8IG1fZXJyb3JD
b2RlKQogICAgICAgICByZXR1cm47CkBAIC0yMTAsOSArMjQ5LDEyIEBAIHZvaWQgQmxvYlJlc291
cmNlSGFuZGxlOjpzdGFydCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9h
c3luYykKKyAgICBpZiAobV9hc3luYykgeworICAgICAgICBtX2FzeW5jU3RyZWFtQ2xpZW50ID0g
YWRvcHRSZWYobmV3IEJsb2JSZXNvdXJjZUZpbGVTdHJlYW1DbGllbnQodGhpcykpOworICAgICAg
ICBtX2FzeW5jU3RyZWFtID0gY2xpZW50KCktPmNyZWF0ZUFzeW5jRmlsZVN0cmVhbShtX2FzeW5j
U3RyZWFtQ2xpZW50LmdldCgpKTsKICAgICAgICAgZ2V0U2l6ZUZvck5leHQoKTsKLSAgICBlbHNl
IHsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3N0cmVhbSA9IEZpbGVTdHJlYW06OmNyZWF0ZSgp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6
ZSgpICYmICFtX2Fib3J0ZWQgJiYgIW1fZXJyb3JDb2RlOyArK2kpCiAgICAgICAgICAgICBnZXRT
aXplRm9yTmV4dCgpOwogICAgICAgICBub3RpZnlSZXNwb25zZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKaW5kZXggNjNl
ODU3OC4uZmE5NTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCkBAIC0zMyw3ICszMyw2IEBACiAKICNpZiBFTkFCTEUo
QkxPQikKIAotI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KQEAgLTQyLDEzICs0MSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBc3luY0ZpbGVTdHJlYW07CitjbGFzcyBCbG9iUmVzb3VyY2VGaWxlU3RyZWFtQ2xpZW50
OwogY2xhc3MgQmxvYlN0b3JhZ2VEYXRhOwogY2xhc3MgRmlsZVN0cmVhbTsKIGNsYXNzIFJlc291
cmNlSGFuZGxlQ2xpZW50OwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owogc3RydWN0IEJsb2JEYXRh
SXRlbTsKIAotY2xhc3MgQmxvYlJlc291cmNlSGFuZGxlIDogcHVibGljIEZpbGVTdHJlYW1DbGll
bnQsIHB1YmxpYyBSZXNvdXJjZUhhbmRsZSAgeworY2xhc3MgQmxvYlJlc291cmNlSGFuZGxlIDog
cHVibGljIFJlc291cmNlSGFuZGxlICB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
QmxvYlJlc291cmNlSGFuZGxlPiBjcmVhdGUoUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJs
b2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xp
ZW50KiBjbGllbnQsIGJvb2wgYXN5bmMgPSB0cnVlKQogICAgIHsKQEAgLTU3LDExICs1Nyw2IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoUGFz
c1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKIAotICAgIC8vIEZpbGVTdHJlYW1DbGllbnQgbWV0aG9k
cy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRPcGVuKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkKGludCk7Ci0KICAg
ICAvLyBSZXNvdXJjZUhhbmRsZSBtZXRob2RzLgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsK
IApAQCAtNjksOSArNjQsMTMgQEAgcHVibGljOgogICAgIGludCByZWFkU3luYyhjaGFyKiwgaW50
KTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgdm9pZCBkZWxheWVkU3RhcnRCbG9iUmVzb3VyY2VI
YW5kbGUodm9pZCopOworICAgIGZyaWVuZCBjbGFzcyBCbG9iUmVzb3VyY2VGaWxlU3RyZWFtQ2xp
ZW50OworCiAgICAgQmxvYlJlc291cmNlSGFuZGxlKFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRh
PiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29sIGFz
eW5jKTsKICAgICB2aXJ0dWFsIH5CbG9iUmVzb3VyY2VIYW5kbGUoKTsKIAorICAgIHZvaWQgZG9T
dGFydCgpOwogICAgIHZvaWQgZ2V0U2l6ZUZvck5leHQoKTsKICAgICB2b2lkIHNlZWsoKTsKICAg
ICB2b2lkIGNvbnN1bWVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpOwpAQCAt
ODQsNiArODMsMTAgQEAgcHJpdmF0ZToKICAgICBpbnQgcmVhZERhdGFTeW5jKGNvbnN0IEJsb2JE
YXRhSXRlbSYsIGNoYXIqLCBpbnQpOwogICAgIGludCByZWFkRmlsZVN5bmMoY29uc3QgQmxvYkRh
dGFJdGVtJiwgY2hhciosIGludCk7CiAKKyAgICB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKTsK
KyAgICB2b2lkIGRpZE9wZW4oYm9vbCk7CisgICAgdm9pZCBkaWRSZWFkKGludCk7CisKICAgICB2
b2lkIG5vdGlmeVJlc3BvbnNlKCk7CiAgICAgdm9pZCBub3RpZnlSZXNwb25zZU9uU3VjY2Vzcygp
OwogICAgIHZvaWQgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CkBAIC05Myw2ICs5Niw3IEBAIHBy
aXZhdGU6CiAKICAgICBSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBtX2Jsb2JEYXRhOwogICAgIGJv
b2wgbV9hc3luYzsKKyAgICBSZWZQdHI8QmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVudD4gbV9h
c3luY1N0cmVhbUNsaWVudDsgLy8gRm9yIGFzeW5jaHJvbm91cyBsb2FkaW5nLgogICAgIFJlZlB0
cjxBc3luY0ZpbGVTdHJlYW0+IG1fYXN5bmNTdHJlYW07IC8vIEZvciBhc3luY2hyb25vdXMgbG9h
ZGluZy4KICAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07IC8vIEZvciBzeW5jaHJvbm91
cyBsb2FkaW5nLgogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCBkNTE4ZDg3Li41ODg3
M2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSgpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJBdXRoZW50aWNhdGlvbigp
OwotICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwogCiAgICAg
Ly8gVGhlIGNsaWVudCBtYXkgYmUgMCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFja3Mgd2lsbCBi
ZSBtYWRlLgogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSBjb25zdDsK
</data>
<flag name="commit-queue"
          id="72379"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80932</attachid>
            <date>2011-02-02 11:06:09 -0800</date>
            <delta_ts>2011-02-04 13:59:55 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>53104_3</filename>
            <type>text/plain</type>
            <size>11576</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNDVmNzJiLi5jMjRjYzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMTEtMDItMDEgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludGVybWl0dGVudCBjcmFz
aCBpbiBmYXN0L2ZpbGVzL3JlYWQtYmxvYi1hc3luYy5odG1sIG9uIHRoZSBHVEsrIGRlYnVnCisg
ICAgICAgIGJvdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUzMTA0CisKKyAgICAgICAgRml4ZWQgYSBjb3VwbGUgcHJvYmxlbXMgdGhhdCBjb3VsZCBj
YXVzZSB0aGUgaW50ZXJtaXR0ZW50IGNyYXNoLgorICAgICAgICAxKSBNYWtlIEZpbGVTdHJlYW1D
bGllbnQgaW50ZXJmYWNlIHJlZi1jb3VudGVkIHNvIHRoYXQgRmlsZVN0cmVhbVByb3h5CisgICAg
ICAgIGNhbiBtYW5hZ2UgaXRzIGxpZmV0aW1lLiBTaW5jZSBCbG9iUmVzb3VyY2VIYW5kbGUgaGFz
IGFscmVhZHkgZGVyaXZlZAorICAgICAgICBmcm9tIFJlc291cmNlSGFuZGxlIHRoYXQgaXMgcmVm
LWNvdW50ZWQsIHdlIGNhbm5vdCBsZXQgQmxvYlJlc291cmNlSGFuZGxlCisgICAgICAgIGFsc28g
ZGVyaXZlIGZyb20gRmlsZVN0cmVhbUNsaWVudCBhcyB3ZSBkaWQgcHJldmlvdXNseS4gVG8gd29y
ayBhcm91bmQKKyAgICAgICAgdGhpcywgd2UgaW50cm9kdWNlIGEgc3RhbmRhbG9uZSBCbG9iUmVz
b3VyY2VGaWxlU3RyZWFtQ2xpZW50IHRvIGFjdAorICAgICAgICBhcyBhIGJyaWRnZSBiZXR3ZWVu
IEZpbGVTdHJlYW1Qcm94eSBhbmQgQmxvYlJlc291cmNlSGFuZGxlLgorICAgICAgICAyKSBBZGQg
dGhlIGNvZGUgdG8gZ3VhcmQgQmxvYlJlc291cmNlSGFuZGxlIGR1cmluZyB0aGUgZGVsYXkgc3Rh
cnQKKyAgICAgICAgcGVyaW9kLgorICAgICAgICAzKSBDaGFuZ2UgUmVzb3VyY2VIYW5kbGU6OmNh
bmNlbCBtZXRob2QgdG8gYmUgdmlydHVhbCBzbyB0aGF0CisgICAgICAgIEJsb2JSZXNvdXJjZUhh
bmRsZTo6Y2FuY2VsIGNhbiBiZSB0cmlnZ2VyZWQgd2hlbiB3ZSBhYm9ydCBhIEZpbGVSZWFkZXIu
CisKKyAgICAgICAgQ292ZXJlZCBieSB0aGUgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaDogS2VlcCBGaWxlU3RyZWFtQ2xpZW50IGluIFJlZlB0
ci4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6QXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9GaWxlU3RyZWFtQ2xpZW50Lmg6IE1ha2UgRmlsZVN0cmVhbUNsaWVudC5oIHJlZi1j
b3VudGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbUNsaWVudDo6fkZpbGVTdHJlYW1D
bGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjpjcmVhdGVSZXNvdXJjZUhhbmRs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVudDo6QmxvYlJlc291
cmNlRmlsZVN0cmVhbUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VGaWxl
U3RyZWFtQ2xpZW50Ojp+QmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iUmVzb3VyY2VGaWxlU3RyZWFtQ2xpZW50OjpkaWRHZXRTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUZpbGVTdHJlYW1DbGllbnQ6OmRpZE9wZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVudDo6ZGlkUmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5kbGU6OkJsb2JSZXNvdXJjZUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpkZWxheWVkU3RhcnRCbG9iUmVzb3VyY2VIYW5kbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iUmVzb3VyY2VIYW5kbGU6OmRvU3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oOiBDaGFuZ2UgY2FuY2VsKCkgdG8gdmlydHVhbC4KKwogMjAxMS0wMi0w
MSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNG
aWxlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaApp
bmRleCBhNTU1YTI0Li40Yjg2Y2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Bc3luY0ZpbGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0Zp
bGVTdHJlYW0uaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU0
LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcg
cG9zaXRpb24pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKIAotICAgIEZpbGVT
dHJlYW1DbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgRmls
ZVN0cmVhbUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0K
ICAgICB2b2lkIHNldENsaWVudChGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQg
PSBjbGllbnQ7IH0KIAogcHJvdGVjdGVkOgpAQCAtNjQsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIEZpbGVTdHJlYW1DbGllbnQqIG1fY2xpZW50OworICAgIFJl
ZlB0cjxGaWxlU3RyZWFtQ2xpZW50PiBtX2NsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW1DbGll
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW1DbGllbnQuaAppbmRleCA0
MDY2ZDlmLi4wMThjMGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3RyZWFtQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbUNs
aWVudC5oCkBAIC0zMywxMCArMzMsMTQgQEAKIAogI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUo
RklMRV9TWVNURU0pCiAKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEZpbGVTdHJlYW1DbGllbnQgeworY2xhc3MgRmlsZVN0cmVhbUNs
aWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVTdHJlYW1DbGllbnQ+IHsKIHB1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5GaWxlU3RyZWFtQ2xpZW50KCkgeyB9CisKICAgICAvLyBGb3IgcmVhZGluZy4K
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZChpbnQpIHsgfQogCkBAIC01MSw5ICs1NSw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkT3Blbihib29sKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGlkU3RvcCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZykg
eyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5GaWxlU3RyZWFtQ2xpZW50KCkgeyB9CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCAyYzRlOGZhLi5kYWYyMjQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAKQEAgLTY4LDcgKzY4LDkgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
QmxvYlJlZ2lzdHJ5SW1wbDo6Y3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2UKICAg
ICBpZiAoIXNob3VsZExvYWRSZXNvdXJjZShyZXF1ZXN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICByZXR1cm4gQmxvYlJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9ibG9icy5nZXQocmVxdWVz
dC51cmwoKS5zdHJpbmcoKSksIHJlcXVlc3QsIGNsaWVudCk7CisgICAgUmVmUHRyPEJsb2JSZXNv
dXJjZUhhbmRsZT4gaGFuZGxlID0gQmxvYlJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9ibG9icy5n
ZXQocmVxdWVzdC51cmwoKS5zdHJpbmcoKSksIHJlcXVlc3QsIGNsaWVudCk7CisgICAgaGFuZGxl
LT5zdGFydCgpOworICAgIHJldHVybiBoYW5kbGU7CiB9CiAKIGJvb2wgQmxvYlJlZ2lzdHJ5SW1w
bDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPGNoYXI+JiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IDc1MzA1MmEuLmQ1MDU2YjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhh
bmRsZS5jcHAKQEAgLTEyOCw2ICsxMjgsNDQgQEAgdm9pZCBCbG9iUmVzb3VyY2VTeW5jaHJvbm91
c0xvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3IKIH0K
IAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVu
dAorCitjbGFzcyBCbG9iUmVzb3VyY2VGaWxlU3RyZWFtQ2xpZW50IDogcHVibGljIEZpbGVTdHJl
YW1DbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JSZXNvdXJjZUZp
bGVTdHJlYW1DbGllbnQ+IGNyZWF0ZShCbG9iUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYlJlc291cmNlRmlsZVN0cmVhbUNsaWVu
dChoYW5kbGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5CbG9iUmVzb3VyY2VGaWxlU3RyZWFt
Q2xpZW50KCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9u
ZyBsb25nIHNpemUpCisgICAgeworICAgICAgICBtX2hhbmRsZS0+ZGlkR2V0U2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkT3Blbihib29sIHN1Y2Nlc3MpCisgICAgewor
ICAgICAgICBtX2hhbmRsZS0+ZGlkT3BlbihzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVhZChpbnQgYnl0ZXNSZWFkKQorICAgIHsKKyAgICAgICAgbV9oYW5kbGUtPmRp
ZFJlYWQoYnl0ZXNSZWFkKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmxvYlJlc291cmNlRmls
ZVN0cmVhbUNsaWVudChCbG9iUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKKyAgICAgICAgOiBtX2hh
bmRsZShoYW5kbGUpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxCbG9iUmVzb3VyY2VIYW5k
bGU+IG1faGFuZGxlOworfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gQmxvYlJlc291
cmNlSGFuZGxlCiAKIC8vIHN0YXRpYwpAQCAtMTM4LDExICsxNzYsNiBAQCB2b2lkIEJsb2JSZXNv
dXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShQYXNzUmVmUHRyPEJsb2JTdG9y
YWdlRGF0YT4gYgogICAgIGhhbmRsZS0+c3RhcnQoKTsKIH0KIAotc3RhdGljIHZvaWQgZGVsYXll
ZFN0YXJ0KHZvaWQqIGNvbnRleHQpCi17Ci0gICAgc3RhdGljX2Nhc3Q8QmxvYlJlc291cmNlSGFu
ZGxlKj4oY29udGV4dCktPnN0YXJ0KCk7Ci19Ci0KIEJsb2JSZXNvdXJjZUhhbmRsZTo6QmxvYlJl
c291cmNlSGFuZGxlKFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iRGF0YSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LCBi
b29sIGFzeW5jKQogICAgIDogUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LCBmYWxzZSwg
ZmFsc2UpCiAgICAgLCBtX2Jsb2JEYXRhKGJsb2JEYXRhKQpAQCAtMTU4LDEyICsxOTEsNiBAQCBC
bG9iUmVzb3VyY2VIYW5kbGU6OkJsb2JSZXNvdXJjZUhhbmRsZShQYXNzUmVmUHRyPEJsb2JTdG9y
YWdlRGF0YT4gYmxvYkRhdGEsIGNvbgogICAgICwgbV9yZWFkSXRlbUNvdW50KDApCiAgICAgLCBt
X2ZpbGVPcGVuZWQoZmFsc2UpCiB7ICAgIAotICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAgIC8v
IFdlIG5lZWQgdG8gdGFrZSBhIHJlZi4KLSAgICAgICAgbV9hc3luY1N0cmVhbSA9IGNsaWVudC0+
Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKHRoaXMpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRl
bGF5ZWRTdGFydCwgdGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fc3RyZWFtID0gRmlsZVN0
cmVhbTo6Y3JlYXRlKCk7CiB9CiAKIEJsb2JSZXNvdXJjZUhhbmRsZTo6fkJsb2JSZXNvdXJjZUhh
bmRsZSgpCkBAIC0xODksOCArMjE2LDI1IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpjYW5j
ZWwoKQogICAgIG1fYWJvcnRlZCA9IHRydWU7CiB9CiAKK3ZvaWQgZGVsYXllZFN0YXJ0QmxvYlJl
c291cmNlSGFuZGxlKHZvaWQqIGNvbnRleHQpCit7CisgICAgQmxvYlJlc291cmNlSGFuZGxlKiBo
YW5kbGUgPSBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihjb250ZXh0KTsKKyAgICBo
YW5kbGUtPmRvU3RhcnQoKTsKKyAgICBoYW5kbGUtPmRlcmVmKCk7Cit9CisKIHZvaWQgQmxvYlJl
c291cmNlSGFuZGxlOjpzdGFydCgpCiB7CisgICAgLy8gRm9yIGFzeW5jIHZlcnNpb24sIHdlIG5l
ZWQgdG8gZGVsYXkgdGhlIHN0YXJ0IHNvIHRoYXQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIHRo
YXQgaXMgaW4gdGhlIHN0YWNrIGNhbiBmaW5pc2ggdGhlIGluaXRpYWxpemF0aW9uLiBOb3RlIHRo
YXQgd2UgYWxzbyBuZWVkIHRvIGFkZCBhIHJlZiBoZXJlIHRvIGd1YXJkIGl0IHVudGlsIHRoZSBk
ZWxheSBmdW5jdGlvbiBpcyBjYWxsZWQuCisgICAgaWYgKG1fYXN5bmMpIHsKKyAgICAgICAgcmVm
KCk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoZGVsYXllZFN0YXJ0QmxvYlJlc291cmNlSGFu
ZGxlLCB0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZG9TdGFydCgpOworfQorCit2b2lkIEJs
b2JSZXNvdXJjZUhhbmRsZTo6ZG9TdGFydCgpCit7CiAgICAgLy8gRG8gbm90IGNvbnRpbnVlIGlm
IHRoZSByZXF1ZXN0IGlzIGFib3J0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgogICAgIGlmIChtX2Fi
b3J0ZWQgfHwgbV9lcnJvckNvZGUpCiAgICAgICAgIHJldHVybjsKQEAgLTIxMCw5ICsyNTQsMTIg
QEAgdm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChtX2FzeW5jKQorICAgIGlmIChtX2FzeW5jKSB7CisgICAgICAgIG1fYXN5
bmNTdHJlYW1DbGllbnQgPSBCbG9iUmVzb3VyY2VGaWxlU3RyZWFtQ2xpZW50OjpjcmVhdGUodGhp
cyk7CisgICAgICAgIG1fYXN5bmNTdHJlYW0gPSBjbGllbnQoKS0+Y3JlYXRlQXN5bmNGaWxlU3Ry
ZWFtKG1fYXN5bmNTdHJlYW1DbGllbnQuZ2V0KCkpOwogICAgICAgICBnZXRTaXplRm9yTmV4dCgp
OwotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CisgICAgICAgIG1fc3RyZWFtID0gRmlsZVN0cmVh
bTo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9iRGF0YS0+
aXRlbXMoKS5zaXplKCkgJiYgIW1fYWJvcnRlZCAmJiAhbV9lcnJvckNvZGU7ICsraSkKICAgICAg
ICAgICAgIGdldFNpemVGb3JOZXh0KCk7CiAgICAgICAgIG5vdGlmeVJlc3BvbnNlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRs
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
aAppbmRleCA2M2U4NTc4Li5mYTk1NDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKQEAgLTMzLDcgKzMzLDYgQEAKIAog
I2lmIEVOQUJMRShCTE9CKQogCi0jaW5jbHVkZSAiRmlsZVN0cmVhbUNsaWVudC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDIsMTMgKzQxLDE0IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEFzeW5jRmlsZVN0cmVhbTsKK2NsYXNzIEJsb2JSZXNvdXJjZUZpbGVT
dHJlYW1DbGllbnQ7CiBjbGFzcyBCbG9iU3RvcmFnZURhdGE7CiBjbGFzcyBGaWxlU3RyZWFtOwog
Y2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBzdHJ1
Y3QgQmxvYkRhdGFJdGVtOwogCi1jbGFzcyBCbG9iUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgRmls
ZVN0cmVhbUNsaWVudCwgcHVibGljIFJlc291cmNlSGFuZGxlICB7CitjbGFzcyBCbG9iUmVzb3Vy
Y2VIYW5kbGUgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGUgIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxCbG9iUmVzb3VyY2VIYW5kbGU+IGNyZWF0ZShQYXNzUmVmUHRyPEJsb2JTdG9y
YWdlRGF0YT4gYmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBhc3luYyA9IHRydWUpCiAgICAgewpAQCAtNTcs
MTEgKzU3LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hy
b25vdXNseShQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYkRhdGEsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOwogCi0gICAgLy8gRmlsZVN0cmVhbUNs
aWVudCBtZXRob2RzLgotICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZyk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZE9wZW4oYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWQo
aW50KTsKLQogICAgIC8vIFJlc291cmNlSGFuZGxlIG1ldGhvZHMuCiAgICAgdmlydHVhbCB2b2lk
IGNhbmNlbCgpOwogCkBAIC02OSw5ICs2NCwxMyBAQCBwdWJsaWM6CiAgICAgaW50IHJlYWRTeW5j
KGNoYXIqLCBpbnQpOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCB2b2lkIGRlbGF5ZWRTdGFydEJs
b2JSZXNvdXJjZUhhbmRsZSh2b2lkKik7CisgICAgZnJpZW5kIGNsYXNzIEJsb2JSZXNvdXJjZUZp
bGVTdHJlYW1DbGllbnQ7CisKICAgICBCbG9iUmVzb3VyY2VIYW5kbGUoUGFzc1JlZlB0cjxCbG9i
U3RvcmFnZURhdGE+LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVu
dCosIGJvb2wgYXN5bmMpOwogICAgIHZpcnR1YWwgfkJsb2JSZXNvdXJjZUhhbmRsZSgpOwogCisg
ICAgdm9pZCBkb1N0YXJ0KCk7CiAgICAgdm9pZCBnZXRTaXplRm9yTmV4dCgpOwogICAgIHZvaWQg
c2VlaygpOwogICAgIHZvaWQgY29uc3VtZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVz
UmVhZCk7CkBAIC04NCw2ICs4MywxMCBAQCBwcml2YXRlOgogICAgIGludCByZWFkRGF0YVN5bmMo
Y29uc3QgQmxvYkRhdGFJdGVtJiwgY2hhciosIGludCk7CiAgICAgaW50IHJlYWRGaWxlU3luYyhj
b25zdCBCbG9iRGF0YUl0ZW0mLCBjaGFyKiwgaW50KTsKIAorICAgIHZvaWQgZGlkR2V0U2l6ZShs
b25nIGxvbmcpOworICAgIHZvaWQgZGlkT3Blbihib29sKTsKKyAgICB2b2lkIGRpZFJlYWQoaW50
KTsKKwogICAgIHZvaWQgbm90aWZ5UmVzcG9uc2UoKTsKICAgICB2b2lkIG5vdGlmeVJlc3BvbnNl
T25TdWNjZXNzKCk7CiAgICAgdm9pZCBub3RpZnlSZXNwb25zZU9uRXJyb3IoKTsKQEAgLTkzLDYg
Kzk2LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxCbG9iU3RvcmFnZURhdGE+IG1fYmxvYkRh
dGE7CiAgICAgYm9vbCBtX2FzeW5jOworICAgIFJlZlB0cjxCbG9iUmVzb3VyY2VGaWxlU3RyZWFt
Q2xpZW50PiBtX2FzeW5jU3RyZWFtQ2xpZW50OyAvLyBGb3IgYXN5bmNocm9ub3VzIGxvYWRpbmcu
CiAgICAgUmVmUHRyPEFzeW5jRmlsZVN0cmVhbT4gbV9hc3luY1N0cmVhbTsgLy8gRm9yIGFzeW5j
aHJvbm91cyBsb2FkaW5nLgogICAgIFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVhbTsgLy8gRm9y
IHN5bmNocm9ub3VzIGxvYWRpbmcuCiAgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCmluZGV4IGQ1
MThkODcuLjU4ODczZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKQEAgLTE3Myw3ICsxNzMsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGhhc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhckF1dGhl
bnRpY2F0aW9uKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2Vs
KCk7CiAKICAgICAvLyBUaGUgY2xpZW50IG1heSBiZSAwLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxi
YWNrcyB3aWxsIGJlIG1hZGUuCiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIGNv
bnN0Owo=
</data>
<flag name="commit-queue"
          id="72446"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81282</attachid>
            <date>2011-02-04 13:59:55 -0800</date>
            <delta_ts>2011-02-04 16:34:52 -0800</delta_ts>
            <desc>3rd patch</desc>
            <filename>53104_4</filename>
            <type>text/plain</type>
            <size>8362</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5NTZmZjU5Li4wNTkwNjhiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDIt
MDQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludGVybWl0dGVudCBjcmFzaCBpbiBmYXN0L2Zp
bGVzL3JlYWQtYmxvYi1hc3luYy5odG1sIG9uIHRoZSBHVEsrIGRlYnVnCisgICAgICAgIGJvdHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTA0CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDogRW5hYmxlIHRoZSBmbGFrZXkgdGVzdCB0
aGF0IGhhcyBiZWVuIGZpeGVkLgorCiAyMDExLTAyLTA0ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhh
aXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGV4cGVjdGF0aW9ucyB1
cGRhdGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDgyNGU2ZTYuLmVlZWI0NTkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC00NzA4LDkgKzQ3MDgsNiBAQCBlZGl0aW5nL3Nl
bGVjdGlvbi9kb3VibGVjbGljay13aGl0ZXNwYWNlLmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNjA1CiBlZGl0aW5nL3RleHQtaXRlcmF0b3IvYmFzaWMt
aXRlcmF0aW9uLmh0bWwKIAotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTM2NzMKLWZhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1ibG9iLWFzeW5jLmh0bWwK
LQogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM2ODAKIGZhc3Qv
ZnJhbWVzL3NhbmRib3hlZC1pZnJhbWUtc2NyaXB0aW5nLmh0bWwKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDIy
YTJiY2QuLmQ5OTVkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMS0wMi0wNCAg
SmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW50ZXJtaXR0ZW50IGNyYXNoIGluIGZhc3QvZmlsZXMv
cmVhZC1ibG9iLWFzeW5jLmh0bWwgb24gdGhlIEdUSysgZGVidWcKKyAgICAgICAgYm90cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxMDQKKworICAg
ICAgICBGaXhlZCBzZXZlcmFsIHByb2JsZW1zIHRoYXQgY291bGQgY2F1c2UgdGhlIGludGVybWl0
dGVudCBjcmFzaDoKKyAgICAgICAgMSkgQ2hhbmdlIEJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5
RmluaXNoIHRvIGNhbGwgZGlkRmluaXNoTG9hZGluZyBmcm9tCisgICAgICAgIGEgc3RhbmRhbG9u
ZSBmdW5jdGlvbiBiZWNhdXNlIHRoZSBjbGllbnQgbWlnaHQgY2hvb3NlIHRvIGRpc3Bvc2UgdGhl
CisgICAgICAgIGhhbmRsZSBpbW1laWRhdGVseSwgYXMgaW4gR1RLKyBjYXNlLgorICAgICAgICAy
KSBBZGQgdGhlIGNvZGUgdG8gZ3VhcmQgQmxvYlJlc291cmNlSGFuZGxlIGR1cmluZyB0aGUgZGVs
YXkgc3RhcnQKKyAgICAgICAgcGVyaW9kLiAKKyAgICAgICAgMykgQ2hhbmdlIFJlc291cmNlSGFu
ZGxlOjpjYW5jZWwgbWV0aG9kIHRvIGJlIHZpcnR1YWwgc28gdGhhdAorICAgICAgICBCbG9iUmVz
b3VyY2VIYW5kbGU6OmNhbmNlbCBjYW4gYmUgdHJpZ2dlcmVkIHdoZW4gd2UgYWJvcnQgYSBGaWxl
UmVhZGVyLgorCisgICAgICAgIENvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZVN0cmVhbVByb3h5OjpzdGFydE9uRmlsZVRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3Ry
eUltcGw6OmNyZWF0ZVJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VI
YW5kbGU6OkJsb2JSZXNvdXJjZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3Vy
Y2VIYW5kbGU6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpkZWxheWVkU3RhcnRCbG9iUmVz
b3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5kbGU6OmRvU3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6ZGVsYXllZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYlJlc291cmNlSGFuZGxlOjpub3RpZnlGaW5pc2gpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oOiBDaGFuZ2UgY2FuY2VsKCkgdG8gdmlydHVhbC4KKwogMjAxMS0wMi0w
NCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyIGFuZCBEYXZlIEh5YXR0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
U3RyZWFtUHJveHkuY3BwCmluZGV4IDVkYWY5ODMuLjkyYjA3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAKQEAgLTgzLDYgKzgzLDggQEAgc3RhdGljIHZv
aWQgZGlkU3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJv
eHkpCiAKIHZvaWQgRmlsZVN0cmVhbVByb3h5OjpzdGFydE9uRmlsZVRocmVhZCgpCiB7CisgICAg
aWYgKCFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fc3RyZWFtLT5zdGFydCgpOwog
ICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRTdGFydCwgdGhp
cykpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVnaXN0cnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
Z2lzdHJ5SW1wbC5jcHAKaW5kZXggMmM0ZThmYS4uZGFmMjI0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC02OCw3
ICs2OCw5IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IEJsb2JSZWdpc3RyeUltcGw6OmNy
ZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlCiAgICAgaWYgKCFzaG91bGRMb2FkUmVz
b3VyY2UocmVxdWVzdCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIEJsb2JSZXNv
dXJjZUhhbmRsZTo6Y3JlYXRlKG1fYmxvYnMuZ2V0KHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpLCBy
ZXF1ZXN0LCBjbGllbnQpOworICAgIFJlZlB0cjxCbG9iUmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9
IEJsb2JSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fYmxvYnMuZ2V0KHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCkpLCByZXF1ZXN0LCBjbGllbnQpOworICAgIGhhbmRsZS0+c3RhcnQoKTsKKyAgICByZXR1
cm4gaGFuZGxlOwogfQogCiBib29sIEJsb2JSZWdpc3RyeUltcGw6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFu
ZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFu
ZGxlLmNwcAppbmRleCA3NTMwNTJhLi44ZGNhYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC0xMzgsMTEg
KzEzOCw2IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBiCiAgICAgaGFuZGxlLT5zdGFydCgpOwog
fQogCi1zdGF0aWMgdm9pZCBkZWxheWVkU3RhcnQodm9pZCogY29udGV4dCkKLXsKLSAgICBzdGF0
aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihjb250ZXh0KS0+c3RhcnQoKTsKLX0KLQogQmxv
YlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VIYW5kbGUoUGFzc1JlZlB0cjxCbG9iU3RvcmFn
ZURhdGE+IGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgYXN5bmMpCiAgICAgOiBSZXNvdXJjZUhhbmRsZShy
ZXF1ZXN0LCBjbGllbnQsIGZhbHNlLCBmYWxzZSkKICAgICAsIG1fYmxvYkRhdGEoYmxvYkRhdGEp
CkBAIC0xNTgsMTEgKzE1Myw5IEBAIEJsb2JSZXNvdXJjZUhhbmRsZTo6QmxvYlJlc291cmNlSGFu
ZGxlKFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iRGF0YSwgY29uCiAgICAgLCBtX3Jl
YWRJdGVtQ291bnQoMCkKICAgICAsIG1fZmlsZU9wZW5lZChmYWxzZSkKIHsgICAgCi0gICAgaWYg
KG1fYXN5bmMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byB0YWtlIGEgcmVmLgorICAgIGlmICht
X2FzeW5jKQogICAgICAgICBtX2FzeW5jU3RyZWFtID0gY2xpZW50LT5jcmVhdGVBc3luY0ZpbGVT
dHJlYW0odGhpcyk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoZGVsYXllZFN0YXJ0LCB0aGlz
KTsKLSAgICB9IGVsc2UKKyAgICBlbHNlCiAgICAgICAgIG1fc3RyZWFtID0gRmlsZVN0cmVhbTo6
Y3JlYXRlKCk7CiB9CiAKQEAgLTE4NywxMCArMTgwLDMwIEBAIHZvaWQgQmxvYlJlc291cmNlSGFu
ZGxlOjpjYW5jZWwoKQogICAgIH0KIAogICAgIG1fYWJvcnRlZCA9IHRydWU7CisKKyAgICBSZXNv
dXJjZUhhbmRsZTo6Y2FuY2VsKCk7Cit9CisKK3ZvaWQgZGVsYXllZFN0YXJ0QmxvYlJlc291cmNl
SGFuZGxlKHZvaWQqIGNvbnRleHQpCit7CisgICAgQmxvYlJlc291cmNlSGFuZGxlKiBoYW5kbGUg
PSBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihjb250ZXh0KTsKKyAgICBoYW5kbGUt
PmRvU3RhcnQoKTsKKyAgICBoYW5kbGUtPmRlcmVmKCk7CiB9CiAKIHZvaWQgQmxvYlJlc291cmNl
SGFuZGxlOjpzdGFydCgpCiB7CisgICAgLy8gRm9yIGFzeW5jIHZlcnNpb24sIHdlIG5lZWQgdG8g
ZGVsYXkgdGhlIHN0YXJ0IHNvIHRoYXQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIHRoYXQgaXMg
aW4gdGhlIHN0YWNrIGNhbiBmaW5pc2ggdGhlIGluaXRpYWxpemF0aW9uLgorICAgIC8vIE5vdGUg
dGhhdCB3ZSBhbHNvIG5lZWQgdG8gYWRkIGEgcmVmIGhlcmUgdG8gZ3VhcmQgaXQgdW50aWwgdGhl
IGRlbGF5IGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICBpZiAobV9hc3luYykgeworICAgICAgICBy
ZWYoKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChkZWxheWVkU3RhcnRCbG9iUmVzb3VyY2VI
YW5kbGUsIHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBkb1N0YXJ0KCk7Cit9CisKK3ZvaWQg
QmxvYlJlc291cmNlSGFuZGxlOjpkb1N0YXJ0KCkKK3sKICAgICAvLyBEbyBub3QgY29udGludWUg
aWYgdGhlIHJlcXVlc3QgaXMgYWJvcnRlZCBvciBhbiBlcnJvciBvY2N1cnMuCiAgICAgaWYgKG1f
YWJvcnRlZCB8fCBtX2Vycm9yQ29kZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTc4LDEwICs1OTEs
MjIgQEAgdm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6Om5vdGlmeUZhaWwoaW50IGVycm9yQ29kZSkK
ICAgICAgICAgY2xpZW50KCktPmRpZEZhaWwodGhpcywgUmVzb3VyY2VFcnJvcihTdHJpbmcoKSwg
ZXJyb3JDb2RlLCBmaXJzdFJlcXVlc3QoKS51cmwoKSwgU3RyaW5nKCkpKTsKIH0KIAorc3RhdGlj
IHZvaWQgZGVsYXllZEZpbmlzaExvYWRpbmcodm9pZCogY29udGV4dCkKK3sKKyAgICBCbG9iUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGNv
bnRleHQpOworICAgIGlmIChoYW5kbGUtPmNsaWVudCgpKQorICAgICAgICBoYW5kbGUtPmNsaWVu
dCgpLT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSwgMCk7Cit9CisKIHZvaWQgQmxvYlJlc291cmNl
SGFuZGxlOjpub3RpZnlGaW5pc2goKQogewotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xp
ZW50KCktPmRpZEZpbmlzaExvYWRpbmcodGhpcywgMCk7CisgICAgLy8gRm9yIGFzeW5jIHZlcnNp
b24sIHdlIHdpbGwgaGF2ZSB0byBub3RpZnkgdGhlIGNsaWVudCBmcm9tIGEgc3RhbmRhbG9uZSBm
dW5jdGlvbiBiZWNhdXNlIHRoZSBjbGllbnQgbWlnaHQgY2hvb3NlIHRvIGRpc3Bvc2UgdGhlIGhh
bmRsZSBpbW1lZGlhdGVseS4KKyAgICBpZiAobV9hc3luYykKKyAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChkZWxheWVkRmluaXNoTG9hZGluZywgdGhpcyk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
IChjbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMs
IDApOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKaW5kZXggNjNl
ODU3OC4uMWU5ZTk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCkBAIC02OSw5ICs2OSwxMiBAQCBwdWJsaWM6CiAgICAg
aW50IHJlYWRTeW5jKGNoYXIqLCBpbnQpOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCB2b2lkIGRl
bGF5ZWRTdGFydEJsb2JSZXNvdXJjZUhhbmRsZSh2b2lkKik7CisKICAgICBCbG9iUmVzb3VyY2VI
YW5kbGUoUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+LCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgYXN5bmMpOwogICAgIHZpcnR1YWwgfkJsb2JS
ZXNvdXJjZUhhbmRsZSgpOwogCisgICAgdm9pZCBkb1N0YXJ0KCk7CiAgICAgdm9pZCBnZXRTaXpl
Rm9yTmV4dCgpOwogICAgIHZvaWQgc2VlaygpOwogICAgIHZvaWQgY29uc3VtZURhdGEoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggYjA5MTJkMy4uOGFkNjZlNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAt
MTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyQXV0aGVudGljYXRpb24oKTsKLSAgICB2b2lk
IGNhbmNlbCgpOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKIAogICAgIC8vIFRoZSBjbGll
bnQgbWF5IGJlIDAsIGluIHdoaWNoIGNhc2Ugbm8gY2FsbGJhY2tzIHdpbGwgYmUgbWFkZS4KICAg
ICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="72847"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="72848"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81319</attachid>
            <date>2011-02-04 16:34:52 -0800</date>
            <delta_ts>2011-02-07 13:09:56 -0800</delta_ts>
            <desc>4th patch</desc>
            <filename>53104_5</filename>
            <type>text/plain</type>
            <size>8325</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5NTZmZjU5Li4wNTkwNjhiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDIt
MDQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludGVybWl0dGVudCBjcmFzaCBpbiBmYXN0L2Zp
bGVzL3JlYWQtYmxvYi1hc3luYy5odG1sIG9uIHRoZSBHVEsrIGRlYnVnCisgICAgICAgIGJvdHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMTA0CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDogRW5hYmxlIHRoZSBmbGFrZXkgdGVzdCB0
aGF0IGhhcyBiZWVuIGZpeGVkLgorCiAyMDExLTAyLTA0ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhh
aXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGV4cGVjdGF0aW9ucyB1
cGRhdGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDgyNGU2ZTYuLmVlZWI0NTkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC00NzA4LDkgKzQ3MDgsNiBAQCBlZGl0aW5nL3Nl
bGVjdGlvbi9kb3VibGVjbGljay13aGl0ZXNwYWNlLmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNjA1CiBlZGl0aW5nL3RleHQtaXRlcmF0b3IvYmFzaWMt
aXRlcmF0aW9uLmh0bWwKIAotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTM2NzMKLWZhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1ibG9iLWFzeW5jLmh0bWwK
LQogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM2ODAKIGZhc3Qv
ZnJhbWVzL3NhbmRib3hlZC1pZnJhbWUtc2NyaXB0aW5nLmh0bWwKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDIy
YTJiY2QuLmMyNzIxOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMS0wMi0wNCAg
SmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW50ZXJtaXR0ZW50IGNyYXNoIGluIGZhc3QvZmlsZXMv
cmVhZC1ibG9iLWFzeW5jLmh0bWwgb24gdGhlIEdUSysgZGVidWcKKyAgICAgICAgYm90cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxMDQKKworICAg
ICAgICBDb3ZlcmVkIGJ5IHRoZSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGZpbGVhcGkv
RmlsZVN0cmVhbVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW1Qcm94eTo6
c3RhcnRPbkZpbGVUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lz
dHJ5SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjpjcmVhdGVS
ZXNvdXJjZUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VI
YW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVz
b3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpjYW5j
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsYXllZFN0YXJ0QmxvYlJlc291cmNlSGFuZGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOiBLZWVwIEJsb2JS
ZXNvdXJjZUhhbmRsZSBhbGl2ZQorICAgICAgICB0aWxsIHRoZSBkZWxheSBmdW5jdGlvbiBpcyBj
YWxsZWQuIAorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpkb1N0YXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OmRvTm90aWZ5RmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5RmluaXNoKTogTm90aWZ5IHRoZSBjbGllbnQgdmlhIHRo
ZQorICAgICAgICBzdGFuZGFsb25lIGZ1bmN0aW9uIHRvIHByZXZlbnQgdGhlIGhhbmRsZSBmcm9t
IGJlaW5nIGRpc3Bvc2VkIGltbWVkaWF0ZWx5CisgICAgICAgIGJ5IHRoZSBjbGllbnQgd2hpY2gg
d2lsbCBtYWtlIHRoZSBjYWxscyBpbiB0aGUgc3RhY2sgdGhhdCdyZSBzdGlsbCBib3VuZAorICAg
ICAgICB0byB0aGUgaGFuZGxlIHN1ZmZlci4gCisgICAgICAgIGltbWVkaWF0ZWx5LCBhcyBpbiB0
aGUgR1RLKyBjYXNlLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFu
ZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOiBDaGFu
Z2UgY2FuY2VsKCkgdG8gdmlydHVhbCBzbyB0aGF0CisgICAgICAgIEJsb2JSZXNvdXJjZUhhbmRs
ZTo6Y2FuY2VsIHdpbGwgYmUgY2FsbGVkIHdoZW4gd2UgYWJvcnQgYSBGaWxlUmVhZGVyLgorCiAy
MDExLTAyLTA0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAKaW5kZXggNWRhZjk4My4uOTJiMDdjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmNwcApAQCAtODMsNiArODMsOCBAQCBz
dGF0aWMgdm9pZCBkaWRTdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVBy
b3h5KiBwcm94eSkKIAogdm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0YXJ0T25GaWxlVGhyZWFkKCkK
IHsKKyAgICBpZiAoIWNsaWVudCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9zdHJlYW0tPnN0
YXJ0KCk7CiAgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZFN0
YXJ0LCB0aGlzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCAyYzRlOGZhLi44MzUxN2YxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAK
QEAgLTY4LDcgKzY4LDkgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJlZ2lzdHJ5
SW1wbDo6Y3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2UKICAgICBpZiAoIXNob3Vs
ZExvYWRSZXNvdXJjZShyZXF1ZXN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4g
QmxvYlJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9ibG9icy5nZXQocmVxdWVzdC51cmwoKS5zdHJp
bmcoKSksIHJlcXVlc3QsIGNsaWVudCk7CisgICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4g
aGFuZGxlID0gQmxvYlJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9ibG9icy5nZXQocmVxdWVzdC51
cmwoKS5zdHJpbmcoKSksIHJlcXVlc3QsIGNsaWVudCk7CisgICAgaGFuZGxlLT5zdGFydCgpOwor
ICAgIHJldHVybiBoYW5kbGUucmVsZWFzZSgpOwogfQogCiBib29sIEJsb2JSZWdpc3RyeUltcGw6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAppbmRleCA3NTMwNTJhLi4yZjkxMTM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuY3BwCkBAIC0xMzgsMTEgKzEzOCw2IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBiCiAgICAg
aGFuZGxlLT5zdGFydCgpOwogfQogCi1zdGF0aWMgdm9pZCBkZWxheWVkU3RhcnQodm9pZCogY29u
dGV4dCkKLXsKLSAgICBzdGF0aWNfY2FzdDxCbG9iUmVzb3VyY2VIYW5kbGUqPihjb250ZXh0KS0+
c3RhcnQoKTsKLX0KLQogQmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VIYW5kbGUoUGFz
c1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgYXN5bmMpCiAgICAg
OiBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQsIGZhbHNlLCBmYWxzZSkKICAgICAsIG1f
YmxvYkRhdGEoYmxvYkRhdGEpCkBAIC0xNTgsMTEgKzE1Myw5IEBAIEJsb2JSZXNvdXJjZUhhbmRs
ZTo6QmxvYlJlc291cmNlSGFuZGxlKFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iRGF0
YSwgY29uCiAgICAgLCBtX3JlYWRJdGVtQ291bnQoMCkKICAgICAsIG1fZmlsZU9wZW5lZChmYWxz
ZSkKIHsgICAgCi0gICAgaWYgKG1fYXN5bmMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byB0YWtl
IGEgcmVmLgorICAgIGlmIChtX2FzeW5jKQogICAgICAgICBtX2FzeW5jU3RyZWFtID0gY2xpZW50
LT5jcmVhdGVBc3luY0ZpbGVTdHJlYW0odGhpcyk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
ZGVsYXllZFN0YXJ0LCB0aGlzKTsKLSAgICB9IGVsc2UKKyAgICBlbHNlCiAgICAgICAgIG1fc3Ry
ZWFtID0gRmlsZVN0cmVhbTo6Y3JlYXRlKCk7CiB9CiAKQEAgLTE4NywxMCArMTgwLDMzIEBAIHZv
aWQgQmxvYlJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogICAgIH0KIAogICAgIG1fYWJvcnRlZCA9
IHRydWU7CisKKyAgICBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCk7Cit9CisKK3ZvaWQgZGVsYXll
ZFN0YXJ0QmxvYlJlc291cmNlSGFuZGxlKHZvaWQqIGNvbnRleHQpCit7CisgICAgUmVmUHRyPEJs
b2JSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYlJlc291
cmNlSGFuZGxlKj4oY29udGV4dCkpOworICAgIGhhbmRsZS0+ZG9TdGFydCgpOwogfQogCiB2b2lk
IEJsb2JSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQogeworICAgIGlmIChtX2FzeW5jKSB7CisgICAg
ICAgIC8vIEtlZXAgQmxvYlJlc291cmNlSGFuZGxlIGFsaXZlIHVudGlsIGRlbGF5ZWRTdGFydEJs
b2JSZXNvdXJjZUhhbmRsZSBydW5zLgorICAgICAgICByZWYoKTsKKworICAgICAgICAvLyBEbyB0
aGUgc3RhcnQgbGF0ZXIgYmVjYXVzZSB0aGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBhc3luYyBj
cmVhdGlvbiBhbmQgd2Ugd2FudCBpdCB0byBmaW5pc2ggcXVpY2tseS4KKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChkZWxheWVkU3RhcnRCbG9iUmVzb3VyY2VIYW5kbGUsIHRoaXMpOworCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb1N0YXJ0KCk7Cit9CisKK3ZvaWQgQmxvYlJlc291
cmNlSGFuZGxlOjpkb1N0YXJ0KCkKK3sKICAgICAvLyBEbyBub3QgY29udGludWUgaWYgdGhlIHJl
cXVlc3QgaXMgYWJvcnRlZCBvciBhbiBlcnJvciBvY2N1cnMuCiAgICAgaWYgKG1fYWJvcnRlZCB8
fCBtX2Vycm9yQ29kZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTc4LDEwICs1OTQsMjMgQEAgdm9p
ZCBCbG9iUmVzb3VyY2VIYW5kbGU6Om5vdGlmeUZhaWwoaW50IGVycm9yQ29kZSkKICAgICAgICAg
Y2xpZW50KCktPmRpZEZhaWwodGhpcywgUmVzb3VyY2VFcnJvcihTdHJpbmcoKSwgZXJyb3JDb2Rl
LCBmaXJzdFJlcXVlc3QoKS51cmwoKSwgU3RyaW5nKCkpKTsKIH0KIAorc3RhdGljIHZvaWQgZG9O
b3RpZnlGaW5pc2godm9pZCogY29udGV4dCkKK3sKKyAgICBCbG9iUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSA9IHN0YXRpY19jYXN0PEJsb2JSZXNvdXJjZUhhbmRsZSo+KGNvbnRleHQpOworICAgIGlm
IChoYW5kbGUtPmNsaWVudCgpKQorICAgICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hM
b2FkaW5nKGhhbmRsZSwgMCk7Cit9CisKIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpub3RpZnlG
aW5pc2goKQogewotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRpZEZpbmlz
aExvYWRpbmcodGhpcywgMCk7CisgICAgaWYgKG1fYXN5bmMpIHsKKyAgICAgICAgLy8gU2NoZWR1
bGUgdG8gbm90aWZ5IHRoZSBjbGllbnQgZnJvbSBhIHN0YW5kYWxvbmUgZnVuY3Rpb24gYmVjYXVz
ZSB0aGUgY2xpZW50IG1pZ2h0IGRpc3Bvc2UgdGhlIGhhbmRsZSBpbW1lZGlhdGVseSBmcm9tIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICAgICAgLy8gSWYgd2Ugbm90aWZ5IHRoZSBjbGllbnQg
bm93LCBCbG9iUmVzb3VyY2VIYW5kbGUgd2lsbCBnZXQgZGlzcG9zZWQgd2hpbGUgd2Ugc3RpbGwg
aGF2ZSBCbG9iUmVzb3VyY2VIYW5kbGUgY2FsbHMgaW4gdGhlIHN0YWNrLgorICAgICAgICBjYWxs
T25NYWluVGhyZWFkKGRvTm90aWZ5RmluaXNoLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRvTm90aWZ5RmluaXNoKHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNv
dXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3Vy
Y2VIYW5kbGUuaAppbmRleCA2M2U4NTc4Li4xZTllOTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKQEAgLTY5LDkgKzY5
LDEyIEBAIHB1YmxpYzoKICAgICBpbnQgcmVhZFN5bmMoY2hhciosIGludCk7CiAKIHByaXZhdGU6
CisgICAgZnJpZW5kIHZvaWQgZGVsYXllZFN0YXJ0QmxvYlJlc291cmNlSGFuZGxlKHZvaWQqKTsK
KwogICAgIEJsb2JSZXNvdXJjZUhhbmRsZShQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4sIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBhc3luYyk7
CiAgICAgdmlydHVhbCB+QmxvYlJlc291cmNlSGFuZGxlKCk7CiAKKyAgICB2b2lkIGRvU3RhcnQo
KTsKICAgICB2b2lkIGdldFNpemVGb3JOZXh0KCk7CiAgICAgdm9pZCBzZWVrKCk7CiAgICAgdm9p
ZCBjb25zdW1lRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCBiMDkx
MmQzLi44YWQ2NmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBo
YXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJBdXRoZW50
aWNhdGlvbigpOwotICAgIHZvaWQgY2FuY2VsKCk7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgp
OwogCiAgICAgLy8gVGhlIGNsaWVudCBtYXkgYmUgMCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFj
a3Mgd2lsbCBiZSBtYWRlLgogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSBjb25z
dDsK
</data>
<flag name="review"
          id="72885"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="72886"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>