<?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>39157</bug_id>
          
          <creation_ts>2010-05-15 04:36:06 -0700</creation_ts>
          <short_desc>FrameLoader: refactor FrameLoader::isDocumentSandboxed() to be a non-member, non-friend function</short_desc>
          <delta_ts>2010-05-18 09:18:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          <blocked>39156</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226224</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-15 04:36:06 -0700</bug_when>
    <thetext>Refactor FrameLoader&apos;s isDocumentSandboxed() function to be a non-member, non-friend helper function.  This is one step towards bug 39156 (refactoring createWindow() to be non-member, non-friend).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226427</commentid>
    <comment_count>1</comment_count>
      <attachid>56179</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-16 00:14:36 -0700</bug_when>
    <thetext>Created attachment 56179
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226428</commentid>
    <comment_count>2</comment_count>
      <attachid>56180</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-16 00:15:48 -0700</bug_when>
    <thetext>Created attachment 56180
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226477</commentid>
    <comment_count>3</comment_count>
      <attachid>56180</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-16 06:54:41 -0700</bug_when>
    <thetext>Comment on attachment 56180
Proposed patch

This looks great.  One nit:

WebCore/loader/FrameLoader.cpp:178
 +  static bool isDocumentSandboxed(const Frame&amp; frame, SandboxFlags mask)
We pass Frame by Frame* and not by const Frame&amp;.  It&apos;s probably better to be consistent about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226503</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-16 10:50:03 -0700</bug_when>
    <thetext>Thanks, Adam.

(In reply to comment #3)
&gt; WebCore/loader/FrameLoader.cpp:178
&gt;  +  static bool isDocumentSandboxed(const Frame&amp; frame, SandboxFlags mask)
&gt; We pass Frame by Frame* and not by const Frame&amp;.  It&apos;s probably better to be consistent about that.

I thought it would be preferable given that the function assumes a non-null pointer, but I&apos;m also okay with being consistent.  Do you know if there is a reason to prefer passing by Frame* (other than current convention), or was that an arbitrary historical decision?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226567</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-16 17:36:55 -0700</bug_when>
    <thetext>We use Frame* in a bunch of places where the point is non-null.

The difference is whether the type is a &quot;value&quot; type or a &quot;pointer&quot; type.  Value types are allocated on the stack and passed by const reference.  Pointer types are allocated on the heap and passed by pointer.  It&apos;s fairly common in C++ code in many projects to distinguish between these two kinds of types.  In this case, Frames are allocated on the heap (and have their lifetime managed with reference counters), so we pass it by pointer to reminder ourselves of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226704</commentid>
    <comment_count>6</comment_count>
      <attachid>56225</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-17 02:20:00 -0700</bug_when>
    <thetext>Created attachment 56225
Proposed patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226795</commentid>
    <comment_count>7</comment_count>
      <attachid>56225</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-17 09:59:48 -0700</bug_when>
    <thetext>Comment on attachment 56225
Proposed patch 2

I don&apos;t understand why having this be a non-member is important to having createWindow be a non-member. A public member function can be called by any function.

The decision of member function vs. non-member function should be decided based on clarity at the call site among other things. A function does not have to be a non-member to be public. Moving createWindow out of the FrameLoader class should not be tied to moving this, and moving this should be decided on its own merits.

&gt; +// FIXME: isDocumentSandboxed should eventually replace isSandboxed.
&gt; +static bool isDocumentSandboxed(const Frame* const frame, SandboxFlags mask)

It&apos;s not helpful to give this the type &quot;const Frame* const&quot;.

Generally speaking we always use the type &quot;Frame*&quot; rather than &quot;const Frame*&quot; because Frame itself has little data and no real notion of &quot;const&quot;. There&apos;s no point in trying to start adding that now unless there&apos;s some major benefit.

And putting the const in after the &quot;*&quot; is marking the argument &quot;const&quot; which has no effect and should be avoided. It&apos;s like this:

    double squareRoot(double);
    const double squareRoot(const double);

Those functions are nearly identical and we would always use the first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226898</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-17 14:38:42 -0700</bug_when>
    <thetext>(In reply to comment #7)

Thanks a lot for your comments.  I have a couple responses I hope you can
look at.

&gt; The decision of member function vs. non-member function should be decided based on clarity at the call site among other things. A function does not have to be a non-member to be public. Moving createWindow out of the FrameLoader class should not be tied to moving this, and moving this should be decided on its own merits.

I had four reasons for doing this on its own merits -- some stronger than
others.  Moving createWindow() only answers the &quot;why now&quot; (because I had to
touch the declaration of isDocumentSandboxed() anyways since it is private).

The isDocumentSandboxed() function doesn&apos;t need access to private
FrameLoader data.  It&apos;s essentially a helper function.  Making it
non-member, non-friend makes this clearer.

Making it non-member doesn&apos;t increase the surface area of the API that can
access private data (i.e. it doesn&apos;t decrease encapsulation).  Since
they&apos;ll need to make it a member before doing so, future developers will
be more likely to pause and think before modifying the function to make it
depend on private data.

By making it non-member, we can avoid declaring it in the header file.
This is because it is only needed from within the .cpp file.

By removing it from the header file, we are simplifying the FrameLoader.h
API for consumers.  It&apos;s true that callers can code their own version of
isDocumentSandboxed() (since it is a combination of public method calls).
But by removing it from the header file we are indirectly telling consumers
they should not need to call this particular function.

&gt; &gt; +// FIXME: isDocumentSandboxed should eventually replace isSandboxed.
&gt; &gt; +static bool isDocumentSandboxed(const Frame* const frame, SandboxFlags mask)
&gt; 
&gt; It&apos;s not helpful to give this the type &quot;const Frame* const&quot;.
&gt; 
&gt; Generally speaking we always use the type &quot;Frame*&quot; rather than &quot;const Frame*&quot; because Frame itself has little data and no real notion of &quot;const&quot;.

Thanks for the info.  Do you mean &quot;non-const&quot; data, since a Frame contains
a const FrameLoader which itself seems to carry a lot of state. 

&gt; And putting the const in after the &quot;*&quot; is marking the argument &quot;const&quot; which has no effect and should be avoided. It&apos;s like this:

Thanks.  Beginner mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226945</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-17 15:35:02 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; I had four reasons for doing this on its own merits -- some stronger than
&gt; others.  Moving createWindow() only answers the &quot;why now&quot; (because I had to
&gt; touch the declaration of isDocumentSandboxed() anyways since it is private).

That makes more sense.

&gt; The isDocumentSandboxed() function doesn&apos;t need access to private
&gt; FrameLoader data.  It&apos;s essentially a helper function.  Making it
&gt; non-member, non-friend makes this clearer.
&gt; 
&gt; Making it non-member doesn&apos;t increase the surface area of the API that can
&gt; access private data (i.e. it doesn&apos;t decrease encapsulation).  Since
&gt; they&apos;ll need to make it a member before doing so, future developers will
&gt; be more likely to pause and think before modifying the function to make it
&gt; depend on private data.
&gt; 
&gt; By making it non-member, we can avoid declaring it in the header file.
&gt; This is because it is only needed from within the .cpp file.
&gt; 
&gt; By removing it from the header file, we are simplifying the FrameLoader.h
&gt; API for consumers.  It&apos;s true that callers can code their own version of
&gt; isDocumentSandboxed() (since it is a combination of public method calls).
&gt; But by removing it from the header file we are indirectly telling consumers
&gt; they should not need to call this particular function.

Sure, those reasons seem fine.

&gt; &gt; Generally speaking we always use the type &quot;Frame*&quot; rather than &quot;const Frame*&quot; because Frame itself has little data and no real notion of &quot;const&quot;.
&gt; 
&gt; Thanks for the info.  Do you mean &quot;non-const&quot; data, since a Frame contains
&gt; a const FrameLoader which itself seems to carry a lot of state. 

The fact that Frame contains the FrameLoader is a hidden implementation detail. Conceptually it simply has a pointer to the frame loader.

Generally speaking for an object like a Frame that represents the entire frame and its contents, we are not distinguishing const member functions from non-const. If you grep for &quot;const Frame*&quot; in .cpp files you find about 9 places that are doing it out of about 1571 places that are using Frame*. Please just use Frame* and eschew const for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227326</commentid>
    <comment_count>10</comment_count>
      <attachid>56381</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-18 08:52:14 -0700</bug_when>
    <thetext>Created attachment 56381
Proposed patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227331</commentid>
    <comment_count>11</comment_count>
      <attachid>56381</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-18 09:18:53 -0700</bug_when>
    <thetext>Comment on attachment 56381
Proposed patch 3

Clearing flags on attachment: 56381

Committed r59670: &lt;http://trac.webkit.org/changeset/59670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227332</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-18 09:18:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56179</attachid>
            <date>2010-05-16 00:14:36 -0700</date>
            <delta_ts>2010-05-16 00:15:48 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-39157-1.diff</filename>
            <type>application/octet-stream</type>
            <size>6019</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmYxOGQyMy4uN2U1MjA1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0wNS0xNSAgQ2hyaXMgSmVyZG9u
ZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmVkIEZyYW1lTG9hZGVyOjppc0RvY3VtZW50U2Fu
ZGJveGVkKCkgdG8gYmUgYSBzdGF0aWMsCisgICAgICAgIG5vbi1tZW1iZXIsIG5vbi1mcmllbmQg
ZnVuY3Rpb24uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM5MTU3CisKKyAgICAgICAgVGhpcyBwYXZlcyB0aGUgd2F5IGZvciBzZXBhcmF0aW5nIEZy
YW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coKSBmcm9tCisgICAgICAgIEZyYW1lTG9hZGVyIHRvIGJl
IGEgbm9uLW1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICBObyBuZXcgZnVuY3Rpb25hbGl0eSwg
c28gbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzRG9jdW1lbnRTYW5kYm94ZWQpOgorICAgICAgICAgIC0gTW92ZWQg
dGhpcyBmdW5jdGlvbiBmcm9tIGEgcHJpdmF0ZSBtZW1iZXIgZnVuY3Rpb24gb2YgRnJhbWVMb2Fk
ZXIKKyAgICAgICAgICAgIHRvIGEgc3RhdGljLCBub24tbWVtYmVyLCBub24tZnJpZW5kIGZ1bmN0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZVdpbmRvdyk6CisgICAg
ICAgICAgLSBVcGRhdGVkIHRoZSBjYWxsIHRvIGlzRG9jdW1lbnRTYW5kYm94ZWQoKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKToKKyAgICAgICAgICAtIFVwZGF0
ZWQgdGhlIGNhbGwgdG8gaXNEb2N1bWVudFNhbmRib3hlZCgpLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QpOgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgY2Fs
bCB0byBpc0RvY3VtZW50U2FuZGJveGVkKCkuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKToKKyAgICAgICAgICAtIFVwZGF0ZWQgdGhlIGNhbGwg
dG8gaXNEb2N1bWVudFNhbmRib3hlZCgpLgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5o
OgorICAgICAgICAgIC0gUmVtb3ZlZCBpc0RvY3VtZW50U2FuZGJveGVkKCkgYW5kIGFkZGVkIGEg
RklYTUUgdG8gbW92ZQorICAgICAgICAgICAgY3JlYXRlV2luZG93KCkgb3V0IG9mIHRoZSBGcmFt
ZUxvYWRlciBjbGFzcy4KKwogMjAxMC0wNS0xNSAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCmluZGV4IGZkNzkwN2UuLjE1YjA0NjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAg
LTE3MCw2ICsxNzAsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGNhblJlZmVyVG9QYXJlbnRGcmFt
ZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWUKICAgICByZXR1cm4gcGFy
ZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
bkFjY2VzcyhmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CiB9CiAKKy8vIFJl
dHVybiB3aGV0aGVyIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBmcmFtZSBp
cyBzYW5kYm94ZWQuCisvLyBUaGlzIGlzIG91dHNpZGUgdGhlIEZyYW1lTG9hZGVyIGNsYXNzIGlu
IHBhcnQgZm9yIHRoZSBGSVhNRSB0byBtb3ZlIEZyYW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coKQor
Ly8gb3V0IG9mIHRoZSBGcmFtZUxvYWRlciBjbGFzcy4KKy8vCisvLyBGSVhNRTogaXNEb2N1bWVu
dFNhbmRib3hlZCBzaG91bGQgZXZlbnR1YWxseSByZXBsYWNlIGlzU2FuZGJveGVkLgorc3RhdGlj
IGJvb2wgaXNEb2N1bWVudFNhbmRib3hlZChjb25zdCBGcmFtZSYgZnJhbWUsIFNhbmRib3hGbGFn
cyBtYXNrKQoreworICAgIHJldHVybiBmcmFtZS5kb2N1bWVudCgpICYmIGZyYW1lLmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmlzU2FuZGJveGVkKG1hc2spOworfQorCiBGcmFtZUxvYWRl
cjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lLCBGcmFtZUxvYWRlckNsaWVudCogY2xpZW50KQog
ICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKQEAgLTI3NSw3ICsy
ODUsNyBAQCBGcmFtZSogRnJhbWVMb2FkZXI6OmNyZWF0ZVdpbmRvdyhGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXJGb3JGcmFtZUxvb2t1cCwgY29uc3QgRgogICAgIH0KIAogICAgIC8vIFNhbmRib3hl
ZCBmcmFtZXMgY2Fubm90IG9wZW4gbmV3IGF1eGlsaWFyeSBicm93c2luZyBjb250ZXh0cy4KLSAg
ICBpZiAoaXNEb2N1bWVudFNhbmRib3hlZChTYW5kYm94TmF2aWdhdGlvbikpCisgICAgaWYgKGlz
RG9jdW1lbnRTYW5kYm94ZWQoKm1fZnJhbWUsIFNhbmRib3hOYXZpZ2F0aW9uKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogU2V0dGluZyB0aGUgcmVmZXJyZXIgc2hvdWxkIGJl
IHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS4KQEAgLTQ2Miw3ICs0NzIsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1
cmwsIFBhc3NSZWZQdHI8RgogICAgIGlmICh1LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJveEZvcm1zKSkKKyAgICBpZiAoaXNE
b2N1bWVudFNhbmRib3hlZCgqbV9mcmFtZSwgU2FuZGJveEZvcm1zKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KHUpKSB7CkBAIC0xMTM0LDcgKzExNDQs
NyBAQCBib29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJiB1cgogICAgICAgICAgICAgICYmICFNSU1FVHlwZVJl
Z2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICAg
ICAgfHwgKCFzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpICYmIE1JTUVUeXBlUmVnaXN0cnk6Omlz
SmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKFNhbmRib3hQbHVnaW5zKSkKKyAgICAg
ICAgaWYgKGlzRG9jdW1lbnRTYW5kYm94ZWQoKm1fZnJhbWUsIFNhbmRib3hQbHVnaW5zKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGxvYWRQbHVnaW4ocmVuZGVy
ZXIsIGNvbXBsZXRlZFVSTCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCB1c2VG
YWxsYmFjayk7CiAgICAgfQpAQCAtMjE1MiwxMSArMjE2MiwxMSBAQCBib29sIEZyYW1lTG9hZGVy
OjpzaG91bGRBbGxvd05hdmlnYXRpb24oRnJhbWUqIHRhcmdldEZyYW1lKSBjb25zdAogICAgIC8v
IExldCBhIGZyYW1lIG5hdmlnYXRlIHRoZSB0b3AtbGV2ZWwgd2luZG93IHRoYXQgY29udGFpbnMg
aXQuICBUaGlzIGlzCiAgICAgLy8gaW1wb3J0YW50IHRvIGFsbG93IGJlY2F1c2UgaXQgbGV0cyBh
IHNpdGUgImZyYW1lLWJ1c3QiIChlc2NhcGUgZnJvbSBhCiAgICAgLy8gZnJhbWUgY3JlYXRlZCBi
eSBhbm90aGVyIHdlYiBzaXRlKS4KLSAgICBpZiAoIWlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJv
eFRvcE5hdmlnYXRpb24pICYmIHRhcmdldEZyYW1lID09IG1fZnJhbWUtPnRyZWUoKS0+dG9wKCkp
CisgICAgaWYgKCFpc0RvY3VtZW50U2FuZGJveGVkKCptX2ZyYW1lLCBTYW5kYm94VG9wTmF2aWdh
dGlvbikgJiYgdGFyZ2V0RnJhbWUgPT0gbV9mcmFtZS0+dHJlZSgpLT50b3AoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICAvLyBBIHNhbmRib3hlZCBmcmFtZSBjYW4gb25seSBuYXZpZ2F0
ZSBpdHNlbGYgYW5kIGl0cyBkZXNjZW5kYW50cy4KLSAgICBpZiAoaXNEb2N1bWVudFNhbmRib3hl
ZChTYW5kYm94TmF2aWdhdGlvbikgJiYgIXRhcmdldEZyYW1lLT50cmVlKCktPmlzRGVzY2VuZGFu
dE9mKG1fZnJhbWUpKQorICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKCptX2ZyYW1lLCBTYW5k
Ym94TmF2aWdhdGlvbikgJiYgIXRhcmdldEZyYW1lLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKG1f
ZnJhbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBMZXQgYSBmcmFtZSBuYXZp
Z2F0ZSBpdHMgb3BlbmVyIGlmIHRoZSBvcGVuZXIgaXMgYSB0b3AtbGV2ZWwgd2luZG93LgpAQCAt
MzkxMywxMSArMzkyMyw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZVNhbmRib3hGbGFncygp
CiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+dXBkYXRlU2FuZGJveEZsYWdzKCk7CiB9CiAKLWJv
b2wgRnJhbWVMb2FkZXI6OmlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJveEZsYWdzIG1hc2spIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNTYW5kYm94ZWQobWFzayk7Ci19Ci0KIFBhc3NSZWZQ
dHI8V2lkZ2V0PiBGcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRT
aXplJiBzaXplLCBIVE1MQXBwbGV0RWxlbWVudCogZWxlbWVudCwgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIGFyZ3MpCiB7CiAgICAgU3RyaW5nIGJhc2VVUkxTdHJpbmc7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAppbmRleCBlMGViZjRkLi5kZTAxNDA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTEy
NSw2ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVwb3J0TG9jYWxMb2FkRmFp
bGVkKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB1cmwpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IGNyZWF0
ZVdpbmRvdyBpbiBKU0RPTVdpbmRvd0Jhc2UuY3BwLCBlLmcuIHRvIGZ1bGZpbGwgYSBtb2RhbCBk
aWFsb2cgY3JlYXRpb24KKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIG1ldGhvZCBvdXRzaWRlIG9m
IHRoZSBGcmFtZUxvYWRlciBjbGFzcy4KICAgICBGcmFtZSogY3JlYXRlV2luZG93KEZyYW1lTG9h
ZGVyKiBmcmFtZUxvYWRlckZvckZyYW1lTG9va3VwLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jiwg
Y29uc3QgV2luZG93RmVhdHVyZXMmLCBib29sJiBjcmVhdGVkKTsKIAogICAgIHVuc2lnbmVkIGxv
bmcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9y
ZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8
Y2hhcj4mIGRhdGEpOwpAQCAtNDYwLDggKzQ2MSw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91
bGRUcmVhdFVSTEFzU2FtZUFzQ3VycmVudChjb25zdCBLVVJMJikgY29uc3Q7CiAKICAgICB2b2lk
IHVwZGF0ZVNhbmRib3hGbGFncygpOwotICAgIC8vIEZJWE1FOiBpc0RvY3VtZW50U2FuZGJveGVk
IHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgaXNTYW5kYm94ZWQuCi0gICAgYm9vbCBpc0RvY3Vt
ZW50U2FuZGJveGVkKFNhbmRib3hGbGFncykgY29uc3Q7CiAKICAgICBGcmFtZSogbV9mcmFtZTsK
ICAgICBGcmFtZUxvYWRlckNsaWVudCogbV9jbGllbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56180</attachid>
            <date>2010-05-16 00:15:48 -0700</date>
            <delta_ts>2010-05-17 02:20:00 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-39157-1.diff</filename>
            <type>text/plain</type>
            <size>6019</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmYxOGQyMy4uN2U1MjA1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0wNS0xNSAgQ2hyaXMgSmVyZG9u
ZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmVkIEZyYW1lTG9hZGVyOjppc0RvY3VtZW50U2Fu
ZGJveGVkKCkgdG8gYmUgYSBzdGF0aWMsCisgICAgICAgIG5vbi1tZW1iZXIsIG5vbi1mcmllbmQg
ZnVuY3Rpb24uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM5MTU3CisKKyAgICAgICAgVGhpcyBwYXZlcyB0aGUgd2F5IGZvciBzZXBhcmF0aW5nIEZy
YW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coKSBmcm9tCisgICAgICAgIEZyYW1lTG9hZGVyIHRvIGJl
IGEgbm9uLW1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICBObyBuZXcgZnVuY3Rpb25hbGl0eSwg
c28gbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzRG9jdW1lbnRTYW5kYm94ZWQpOgorICAgICAgICAgIC0gTW92ZWQg
dGhpcyBmdW5jdGlvbiBmcm9tIGEgcHJpdmF0ZSBtZW1iZXIgZnVuY3Rpb24gb2YgRnJhbWVMb2Fk
ZXIKKyAgICAgICAgICAgIHRvIGEgc3RhdGljLCBub24tbWVtYmVyLCBub24tZnJpZW5kIGZ1bmN0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZVdpbmRvdyk6CisgICAg
ICAgICAgLSBVcGRhdGVkIHRoZSBjYWxsIHRvIGlzRG9jdW1lbnRTYW5kYm94ZWQoKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKToKKyAgICAgICAgICAtIFVwZGF0
ZWQgdGhlIGNhbGwgdG8gaXNEb2N1bWVudFNhbmRib3hlZCgpLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QpOgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgY2Fs
bCB0byBpc0RvY3VtZW50U2FuZGJveGVkKCkuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKToKKyAgICAgICAgICAtIFVwZGF0ZWQgdGhlIGNhbGwg
dG8gaXNEb2N1bWVudFNhbmRib3hlZCgpLgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5o
OgorICAgICAgICAgIC0gUmVtb3ZlZCBpc0RvY3VtZW50U2FuZGJveGVkKCkgYW5kIGFkZGVkIGEg
RklYTUUgdG8gbW92ZQorICAgICAgICAgICAgY3JlYXRlV2luZG93KCkgb3V0IG9mIHRoZSBGcmFt
ZUxvYWRlciBjbGFzcy4KKwogMjAxMC0wNS0xNSAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCmluZGV4IGZkNzkwN2UuLjE1YjA0NjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAg
LTE3MCw2ICsxNzAsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGNhblJlZmVyVG9QYXJlbnRGcmFt
ZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWUKICAgICByZXR1cm4gcGFy
ZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
bkFjY2VzcyhmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CiB9CiAKKy8vIFJl
dHVybiB3aGV0aGVyIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBmcmFtZSBp
cyBzYW5kYm94ZWQuCisvLyBUaGlzIGlzIG91dHNpZGUgdGhlIEZyYW1lTG9hZGVyIGNsYXNzIGlu
IHBhcnQgZm9yIHRoZSBGSVhNRSB0byBtb3ZlIEZyYW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coKQor
Ly8gb3V0IG9mIHRoZSBGcmFtZUxvYWRlciBjbGFzcy4KKy8vCisvLyBGSVhNRTogaXNEb2N1bWVu
dFNhbmRib3hlZCBzaG91bGQgZXZlbnR1YWxseSByZXBsYWNlIGlzU2FuZGJveGVkLgorc3RhdGlj
IGJvb2wgaXNEb2N1bWVudFNhbmRib3hlZChjb25zdCBGcmFtZSYgZnJhbWUsIFNhbmRib3hGbGFn
cyBtYXNrKQoreworICAgIHJldHVybiBmcmFtZS5kb2N1bWVudCgpICYmIGZyYW1lLmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmlzU2FuZGJveGVkKG1hc2spOworfQorCiBGcmFtZUxvYWRl
cjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lLCBGcmFtZUxvYWRlckNsaWVudCogY2xpZW50KQog
ICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKQEAgLTI3NSw3ICsy
ODUsNyBAQCBGcmFtZSogRnJhbWVMb2FkZXI6OmNyZWF0ZVdpbmRvdyhGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXJGb3JGcmFtZUxvb2t1cCwgY29uc3QgRgogICAgIH0KIAogICAgIC8vIFNhbmRib3hl
ZCBmcmFtZXMgY2Fubm90IG9wZW4gbmV3IGF1eGlsaWFyeSBicm93c2luZyBjb250ZXh0cy4KLSAg
ICBpZiAoaXNEb2N1bWVudFNhbmRib3hlZChTYW5kYm94TmF2aWdhdGlvbikpCisgICAgaWYgKGlz
RG9jdW1lbnRTYW5kYm94ZWQoKm1fZnJhbWUsIFNhbmRib3hOYXZpZ2F0aW9uKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogU2V0dGluZyB0aGUgcmVmZXJyZXIgc2hvdWxkIGJl
IHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS4KQEAgLTQ2Miw3ICs0NzIsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1
cmwsIFBhc3NSZWZQdHI8RgogICAgIGlmICh1LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJveEZvcm1zKSkKKyAgICBpZiAoaXNE
b2N1bWVudFNhbmRib3hlZCgqbV9mcmFtZSwgU2FuZGJveEZvcm1zKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KHUpKSB7CkBAIC0xMTM0LDcgKzExNDQs
NyBAQCBib29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJiB1cgogICAgICAgICAgICAgICYmICFNSU1FVHlwZVJl
Z2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICAg
ICAgfHwgKCFzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpICYmIE1JTUVUeXBlUmVnaXN0cnk6Omlz
SmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKFNhbmRib3hQbHVnaW5zKSkKKyAgICAg
ICAgaWYgKGlzRG9jdW1lbnRTYW5kYm94ZWQoKm1fZnJhbWUsIFNhbmRib3hQbHVnaW5zKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGxvYWRQbHVnaW4ocmVuZGVy
ZXIsIGNvbXBsZXRlZFVSTCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCB1c2VG
YWxsYmFjayk7CiAgICAgfQpAQCAtMjE1MiwxMSArMjE2MiwxMSBAQCBib29sIEZyYW1lTG9hZGVy
OjpzaG91bGRBbGxvd05hdmlnYXRpb24oRnJhbWUqIHRhcmdldEZyYW1lKSBjb25zdAogICAgIC8v
IExldCBhIGZyYW1lIG5hdmlnYXRlIHRoZSB0b3AtbGV2ZWwgd2luZG93IHRoYXQgY29udGFpbnMg
aXQuICBUaGlzIGlzCiAgICAgLy8gaW1wb3J0YW50IHRvIGFsbG93IGJlY2F1c2UgaXQgbGV0cyBh
IHNpdGUgImZyYW1lLWJ1c3QiIChlc2NhcGUgZnJvbSBhCiAgICAgLy8gZnJhbWUgY3JlYXRlZCBi
eSBhbm90aGVyIHdlYiBzaXRlKS4KLSAgICBpZiAoIWlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJv
eFRvcE5hdmlnYXRpb24pICYmIHRhcmdldEZyYW1lID09IG1fZnJhbWUtPnRyZWUoKS0+dG9wKCkp
CisgICAgaWYgKCFpc0RvY3VtZW50U2FuZGJveGVkKCptX2ZyYW1lLCBTYW5kYm94VG9wTmF2aWdh
dGlvbikgJiYgdGFyZ2V0RnJhbWUgPT0gbV9mcmFtZS0+dHJlZSgpLT50b3AoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICAvLyBBIHNhbmRib3hlZCBmcmFtZSBjYW4gb25seSBuYXZpZ2F0
ZSBpdHNlbGYgYW5kIGl0cyBkZXNjZW5kYW50cy4KLSAgICBpZiAoaXNEb2N1bWVudFNhbmRib3hl
ZChTYW5kYm94TmF2aWdhdGlvbikgJiYgIXRhcmdldEZyYW1lLT50cmVlKCktPmlzRGVzY2VuZGFu
dE9mKG1fZnJhbWUpKQorICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKCptX2ZyYW1lLCBTYW5k
Ym94TmF2aWdhdGlvbikgJiYgIXRhcmdldEZyYW1lLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKG1f
ZnJhbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBMZXQgYSBmcmFtZSBuYXZp
Z2F0ZSBpdHMgb3BlbmVyIGlmIHRoZSBvcGVuZXIgaXMgYSB0b3AtbGV2ZWwgd2luZG93LgpAQCAt
MzkxMywxMSArMzkyMyw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZVNhbmRib3hGbGFncygp
CiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+dXBkYXRlU2FuZGJveEZsYWdzKCk7CiB9CiAKLWJv
b2wgRnJhbWVMb2FkZXI6OmlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJveEZsYWdzIG1hc2spIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNTYW5kYm94ZWQobWFzayk7Ci19Ci0KIFBhc3NSZWZQ
dHI8V2lkZ2V0PiBGcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRT
aXplJiBzaXplLCBIVE1MQXBwbGV0RWxlbWVudCogZWxlbWVudCwgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIGFyZ3MpCiB7CiAgICAgU3RyaW5nIGJhc2VVUkxTdHJpbmc7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAppbmRleCBlMGViZjRkLi5kZTAxNDA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTEy
NSw2ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVwb3J0TG9jYWxMb2FkRmFp
bGVkKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB1cmwpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IGNyZWF0
ZVdpbmRvdyBpbiBKU0RPTVdpbmRvd0Jhc2UuY3BwLCBlLmcuIHRvIGZ1bGZpbGwgYSBtb2RhbCBk
aWFsb2cgY3JlYXRpb24KKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIG1ldGhvZCBvdXRzaWRlIG9m
IHRoZSBGcmFtZUxvYWRlciBjbGFzcy4KICAgICBGcmFtZSogY3JlYXRlV2luZG93KEZyYW1lTG9h
ZGVyKiBmcmFtZUxvYWRlckZvckZyYW1lTG9va3VwLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jiwg
Y29uc3QgV2luZG93RmVhdHVyZXMmLCBib29sJiBjcmVhdGVkKTsKIAogICAgIHVuc2lnbmVkIGxv
bmcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9y
ZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8
Y2hhcj4mIGRhdGEpOwpAQCAtNDYwLDggKzQ2MSw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91
bGRUcmVhdFVSTEFzU2FtZUFzQ3VycmVudChjb25zdCBLVVJMJikgY29uc3Q7CiAKICAgICB2b2lk
IHVwZGF0ZVNhbmRib3hGbGFncygpOwotICAgIC8vIEZJWE1FOiBpc0RvY3VtZW50U2FuZGJveGVk
IHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgaXNTYW5kYm94ZWQuCi0gICAgYm9vbCBpc0RvY3Vt
ZW50U2FuZGJveGVkKFNhbmRib3hGbGFncykgY29uc3Q7CiAKICAgICBGcmFtZSogbV9mcmFtZTsK
ICAgICBGcmFtZUxvYWRlckNsaWVudCogbV9jbGllbnQ7Cg==
</data>
<flag name="review"
          id="40570"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56225</attachid>
            <date>2010-05-17 02:20:00 -0700</date>
            <delta_ts>2010-05-18 08:52:14 -0700</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-39157-3.diff</filename>
            <type>text/plain</type>
            <size>6013</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmExNzVmMi4uZTM2YWI5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0wNS0xNSAgQ2hyaXMgSmVyZG9u
ZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmVkIEZyYW1lTG9hZGVyOjppc0RvY3VtZW50U2Fu
ZGJveGVkKCkgdG8gYmUgYSBzdGF0aWMsCisgICAgICAgIG5vbi1tZW1iZXIsIG5vbi1mcmllbmQg
ZnVuY3Rpb24uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM5MTU3CisKKyAgICAgICAgVGhpcyBwYXZlcyB0aGUgd2F5IGZvciBzZXBhcmF0aW5nIEZy
YW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coKSBmcm9tCisgICAgICAgIEZyYW1lTG9hZGVyIHRvIGJl
IGEgbm9uLW1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICBObyBuZXcgZnVuY3Rpb25hbGl0eSwg
c28gbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzRG9jdW1lbnRTYW5kYm94ZWQpOgorICAgICAgICAgIC0gTW92ZWQg
dGhpcyBmdW5jdGlvbiBmcm9tIGEgcHJpdmF0ZSBtZW1iZXIgZnVuY3Rpb24gb2YgRnJhbWVMb2Fk
ZXIKKyAgICAgICAgICAgIHRvIGEgc3RhdGljLCBub24tbWVtYmVyLCBub24tZnJpZW5kIGZ1bmN0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZVdpbmRvdyk6CisgICAg
ICAgICAgLSBVcGRhdGVkIHRoZSBjYWxsIHRvIGlzRG9jdW1lbnRTYW5kYm94ZWQoKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKToKKyAgICAgICAgICAtIFVwZGF0
ZWQgdGhlIGNhbGwgdG8gaXNEb2N1bWVudFNhbmRib3hlZCgpLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QpOgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgY2Fs
bCB0byBpc0RvY3VtZW50U2FuZGJveGVkKCkuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKToKKyAgICAgICAgICAtIFVwZGF0ZWQgdGhlIGNhbGwg
dG8gaXNEb2N1bWVudFNhbmRib3hlZCgpLgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5o
OgorICAgICAgICAgIC0gUmVtb3ZlZCBpc0RvY3VtZW50U2FuZGJveGVkKCkgYW5kIGFkZGVkIGEg
RklYTUUgdG8gbW92ZQorICAgICAgICAgICAgY3JlYXRlV2luZG93KCkgb3V0IG9mIHRoZSBGcmFt
ZUxvYWRlciBjbGFzcy4KKwogMjAxMC0wNS0xNiAgQ2hyaXMgSmVyZG9uZWsgIDxjamVyZG9uZWtA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmlu
ZGV4IDBhMDNiNzAuLjNjYTFjNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTE3MCw2ICsx
NzAsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGNhblJlZmVyVG9QYXJlbnRGcmFtZUVuY29kaW5n
KGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWUKICAgICByZXR1cm4gcGFyZW50RnJhbWUg
JiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzcyhm
cmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CiB9CiAKKy8vIFJldHVybiB3aGV0
aGVyIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBmcmFtZSBpcyBzYW5kYm94
ZWQuCisvLyBUaGlzIGlzIG91dHNpZGUgdGhlIEZyYW1lTG9hZGVyIGNsYXNzIGluIHBhcnQgZm9y
IHRoZSBGSVhNRSB0byBtb3ZlIEZyYW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coKQorLy8gb3V0IG9m
IHRoZSBGcmFtZUxvYWRlciBjbGFzcy4KKy8vCisvLyBGSVhNRTogaXNEb2N1bWVudFNhbmRib3hl
ZCBzaG91bGQgZXZlbnR1YWxseSByZXBsYWNlIGlzU2FuZGJveGVkLgorc3RhdGljIGJvb2wgaXNE
b2N1bWVudFNhbmRib3hlZChjb25zdCBGcmFtZSogY29uc3QgZnJhbWUsIFNhbmRib3hGbGFncyBt
YXNrKQoreworICAgIHJldHVybiBmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNTYW5kYm94ZWQobWFzayk7Cit9CisKIEZyYW1lTG9hZGVy
OjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAg
ICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAtMjc1LDcgKzI4
NSw3IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6Y3JlYXRlV2luZG93KEZyYW1lTG9hZGVyKiBmcmFt
ZUxvYWRlckZvckZyYW1lTG9va3VwLCBjb25zdCBGCiAgICAgfQogCiAgICAgLy8gU2FuZGJveGVk
IGZyYW1lcyBjYW5ub3Qgb3BlbiBuZXcgYXV4aWxpYXJ5IGJyb3dzaW5nIGNvbnRleHRzLgotICAg
IGlmIChpc0RvY3VtZW50U2FuZGJveGVkKFNhbmRib3hOYXZpZ2F0aW9uKSkKKyAgICBpZiAoaXNE
b2N1bWVudFNhbmRib3hlZChtX2ZyYW1lLCBTYW5kYm94TmF2aWdhdGlvbikpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgLy8gRklYTUU6IFNldHRpbmcgdGhlIHJlZmVycmVyIHNob3VsZCBiZSB0
aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuCkBAIC00NjYsNyArNDc2LDcgQEAgdm9pZCBGcmFt
ZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJs
LCBQYXNzUmVmUHRyPEYKICAgICBpZiAodS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKFNhbmRib3hGb3JtcykpCisgICAgaWYgKGlzRG9j
dW1lbnRTYW5kYm94ZWQobV9mcmFtZSwgU2FuZGJveEZvcm1zKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KHUpKSB7CkBAIC0xMTM4LDcgKzExNDgsNyBA
QCBib29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0KiBy
ZW5kZXJlciwgY29uc3QgU3RyaW5nJiB1cgogICAgICAgICAgICAgICYmICFNSU1FVHlwZVJlZ2lz
dHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICAgICAg
fHwgKCFzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2
YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKFNhbmRib3hQbHVnaW5zKSkKKyAgICAgICAg
aWYgKGlzRG9jdW1lbnRTYW5kYm94ZWQobV9mcmFtZSwgU2FuZGJveFBsdWdpbnMpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gbG9hZFBsdWdpbihyZW5kZXJlciwg
Y29tcGxldGVkVVJMLCBtaW1lVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIHVzZUZhbGxi
YWNrKTsKICAgICB9CkBAIC0yMTU2LDExICsyMTY2LDExIEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNo
b3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSogdGFyZ2V0RnJhbWUpIGNvbnN0CiAgICAgLy8gTGV0
IGEgZnJhbWUgbmF2aWdhdGUgdGhlIHRvcC1sZXZlbCB3aW5kb3cgdGhhdCBjb250YWlucyBpdC4g
IFRoaXMgaXMKICAgICAvLyBpbXBvcnRhbnQgdG8gYWxsb3cgYmVjYXVzZSBpdCBsZXRzIGEgc2l0
ZSAiZnJhbWUtYnVzdCIgKGVzY2FwZSBmcm9tIGEKICAgICAvLyBmcmFtZSBjcmVhdGVkIGJ5IGFu
b3RoZXIgd2ViIHNpdGUpLgotICAgIGlmICghaXNEb2N1bWVudFNhbmRib3hlZChTYW5kYm94VG9w
TmF2aWdhdGlvbikgJiYgdGFyZ2V0RnJhbWUgPT0gbV9mcmFtZS0+dHJlZSgpLT50b3AoKSkKKyAg
ICBpZiAoIWlzRG9jdW1lbnRTYW5kYm94ZWQobV9mcmFtZSwgU2FuZGJveFRvcE5hdmlnYXRpb24p
ICYmIHRhcmdldEZyYW1lID09IG1fZnJhbWUtPnRyZWUoKS0+dG9wKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgLy8gQSBzYW5kYm94ZWQgZnJhbWUgY2FuIG9ubHkgbmF2aWdhdGUgaXRz
ZWxmIGFuZCBpdHMgZGVzY2VuZGFudHMuCi0gICAgaWYgKGlzRG9jdW1lbnRTYW5kYm94ZWQoU2Fu
ZGJveE5hdmlnYXRpb24pICYmICF0YXJnZXRGcmFtZS0+dHJlZSgpLT5pc0Rlc2NlbmRhbnRPZiht
X2ZyYW1lKSkKKyAgICBpZiAoaXNEb2N1bWVudFNhbmRib3hlZChtX2ZyYW1lLCBTYW5kYm94TmF2
aWdhdGlvbikgJiYgIXRhcmdldEZyYW1lLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBMZXQgYSBmcmFtZSBuYXZpZ2F0ZSBp
dHMgb3BlbmVyIGlmIHRoZSBvcGVuZXIgaXMgYSB0b3AtbGV2ZWwgd2luZG93LgpAQCAtMzkxNywx
MSArMzkyNyw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZVNhbmRib3hGbGFncygpCiAgICAg
ICAgIGNoaWxkLT5sb2FkZXIoKS0+dXBkYXRlU2FuZGJveEZsYWdzKCk7CiB9CiAKLWJvb2wgRnJh
bWVMb2FkZXI6OmlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJveEZsYWdzIG1hc2spIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKS0+aXNTYW5kYm94ZWQobWFzayk7Ci19Ci0KIFBhc3NSZWZQdHI8V2lk
Z2V0PiBGcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBz
aXplLCBIVE1MQXBwbGV0RWxlbWVudCogZWxlbWVudCwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIGFyZ3MpCiB7CiAgICAgU3RyaW5nIGJhc2VVUkxTdHJpbmc7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aAppbmRleCAwZmNkYjVmLi5jZWRiMjk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTEyNSw2ICsx
MjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVwb3J0TG9jYWxMb2FkRmFpbGVkKEZy
YW1lKiwgY29uc3QgU3RyaW5nJiB1cmwpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IGNyZWF0ZVdpbmRv
dyBpbiBKU0RPTVdpbmRvd0Jhc2UuY3BwLCBlLmcuIHRvIGZ1bGZpbGwgYSBtb2RhbCBkaWFsb2cg
Y3JlYXRpb24KKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIG1ldGhvZCBvdXRzaWRlIG9mIHRoZSBG
cmFtZUxvYWRlciBjbGFzcy4KICAgICBGcmFtZSogY3JlYXRlV2luZG93KEZyYW1lTG9hZGVyKiBm
cmFtZUxvYWRlckZvckZyYW1lTG9va3VwLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3Qg
V2luZG93RmVhdHVyZXMmLCBib29sJiBjcmVhdGVkKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVk
ZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4m
IGRhdGEpOwpAQCAtNDYyLDggKzQ2Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRUcmVh
dFVSTEFzU2FtZUFzQ3VycmVudChjb25zdCBLVVJMJikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0
ZVNhbmRib3hGbGFncygpOwotICAgIC8vIEZJWE1FOiBpc0RvY3VtZW50U2FuZGJveGVkIHNob3Vs
ZCBldmVudHVhbGx5IHJlcGxhY2UgaXNTYW5kYm94ZWQuCi0gICAgYm9vbCBpc0RvY3VtZW50U2Fu
ZGJveGVkKFNhbmRib3hGbGFncykgY29uc3Q7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBG
cmFtZUxvYWRlckNsaWVudCogbV9jbGllbnQ7Cg==
</data>
<flag name="review"
          id="40619"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="40620"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56381</attachid>
            <date>2010-05-18 08:52:14 -0700</date>
            <delta_ts>2010-05-18 09:18:52 -0700</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>_patch-39157-3.diff</filename>
            <type>text/plain</type>
            <size>6351</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmExNzVmMi4uZjNmNjY4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wNS0xNSAgQ2hyaXMgSmVyZG9u
ZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmVkIEZyYW1lTG9hZGVyOjppc0RvY3VtZW50U2Fu
ZGJveGVkKCkgZnJvbSBhIHByaXZhdGUgbWVtYmVyIGZ1bmN0aW9uCisgICAgICAgIHRvIGEgc3Rh
dGljLCBub24tbWVtYmVyLCBub24tZnJpZW5kIGZ1bmN0aW9uLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE1NworCisgICAgICAgIE1ha2luZyB0
aGlzIGZ1bmN0aW9uIG5vbi1wcml2YXRlIGxldHMgdXMgbWFrZSBGcmFtZUxvYWRlcjo6Y3JlYXRl
V2luZG93KCkKKyAgICAgICAgYSBub24tbWVtYmVyIGZ1bmN0aW9uIGluIGEgc3Vic2VxdWVudCBw
YXRjaC4gIFdlIGFsc28gbWFkZSBpdCBub24tbWVtYmVyCisgICAgICAgIHJhdGhlciB0aGFuIG1l
bWJlciB0byBpbmNyZWFzZSBlbmNhcHN1bGF0aW9uIGFuZCBsaW1pdCB0aGUgbnVtYmVyIG9mCisg
ICAgICAgIHB1YmxpYyBmdW5jdGlvbnMgd2l0aCBhY2Nlc3MgdG8gcHJpdmF0ZSBGcmFtZUxvYWRl
ciBkYXRhLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5LCBzbyBubyBuZXcgdGVzdHMu
CisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aXNEb2N1bWVudFNhbmRib3hlZCk6CisgICAgICAgICAgLSBNb3ZlZCB0aGlzIGZ1bmN0aW9uIGZy
b20gYSBwcml2YXRlIG1lbWJlciBmdW5jdGlvbiBvZiBGcmFtZUxvYWRlcgorICAgICAgICAgICAg
dG8gYSBzdGF0aWMsIG5vbi1tZW1iZXIsIG5vbi1mcmllbmQgZnVuY3Rpb24uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgICAtIFVwZGF0ZWQg
dGhlIGNhbGwgdG8gaXNEb2N1bWVudFNhbmRib3hlZCgpLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OnN1Ym1pdEZvcm0pOgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgY2FsbCB0byBp
c0RvY3VtZW50U2FuZGJveGVkKCkuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6cmVx
dWVzdE9iamVjdCk6CisgICAgICAgICAgLSBVcGRhdGVkIHRoZSBjYWxsIHRvIGlzRG9jdW1lbnRT
YW5kYm94ZWQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzaG91bGRBbGxvd05h
dmlnYXRpb24pOgorICAgICAgICAgIC0gVXBkYXRlZCB0aGUgY2FsbCB0byBpc0RvY3VtZW50U2Fu
ZGJveGVkKCkuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgICAgLSBS
ZW1vdmVkIGlzRG9jdW1lbnRTYW5kYm94ZWQoKSBhbmQgYWRkZWQgYSBGSVhNRSB0byBtb3ZlCisg
ICAgICAgICAgICBjcmVhdGVXaW5kb3coKSBvdXQgb2YgdGhlIEZyYW1lTG9hZGVyIGNsYXNzLgor
CiAyMDEwLTA1LTE2ICBDaHJpcyBKZXJkb25layAgPGNqZXJkb25la0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggMGEwM2I3MC4uNjli
MTUxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMTcwLDYgKzE3MCwxOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2RpbmcoY29uc3QgRnJhbWUqIGZy
YW1lLCBjb25zdCBGcmFtZQogICAgIHJldHVybiBwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKGZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpKTsKIH0KIAorLy8gVGhpcyBpcyBub3QgaW4gdGhlIEZyYW1lTG9h
ZGVyIGNsYXNzIHRvIGVtcGhhc2l6ZSB0aGF0IGl0IGRvZXMgbm90IGRlcGVuZCBvbgorLy8gcHJp
dmF0ZSBGcmFtZUxvYWRlciBkYXRhLCBhbmQgdG8gYXZvaWQgaW5jcmVhc2luZyB0aGUgbnVtYmVy
IG9mIHB1YmxpYyBmdW5jdGlvbnMKKy8vIHdpdGggYWNjZXNzIHRvIHByaXZhdGUgZGF0YS4gIFNp
bmNlIG9ubHkgdGhpcyAuY3BwIGZpbGUgbmVlZHMgaXQsIG1ha2luZyBpdAorLy8gbm9uLW1lbWJl
ciBsZXRzIHVzIGV4Y2x1ZGUgaXQgZnJvbSB0aGUgaGVhZGVyIGZpbGUsIHRodXMga2VlcGluZyBG
cmFtZUxvYWRlci5oJ3MKKy8vIEFQSSBzaW1wbGVyLgorLy8KKy8vIEZJWE1FOiBpc0RvY3VtZW50
U2FuZGJveGVkIHNob3VsZCBldmVudHVhbGx5IHJlcGxhY2UgaXNTYW5kYm94ZWQuCitzdGF0aWMg
Ym9vbCBpc0RvY3VtZW50U2FuZGJveGVkKEZyYW1lKiBmcmFtZSwgU2FuZGJveEZsYWdzIG1hc2sp
Cit7CisgICAgcmV0dXJuIGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT5pc1NhbmRib3hlZChtYXNrKTsKK30KKwogRnJhbWVMb2FkZXI6OkZy
YW1lTG9hZGVyKEZyYW1lKiBmcmFtZSwgRnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCkKICAgICA6
IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBAIC0yNzUsNyArMjg3LDcg
QEAgRnJhbWUqIEZyYW1lTG9hZGVyOjpjcmVhdGVXaW5kb3coRnJhbWVMb2FkZXIqIGZyYW1lTG9h
ZGVyRm9yRnJhbWVMb29rdXAsIGNvbnN0IEYKICAgICB9CiAKICAgICAvLyBTYW5kYm94ZWQgZnJh
bWVzIGNhbm5vdCBvcGVuIG5ldyBhdXhpbGlhcnkgYnJvd3NpbmcgY29udGV4dHMuCi0gICAgaWYg
KGlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJveE5hdmlnYXRpb24pKQorICAgIGlmIChpc0RvY3Vt
ZW50U2FuZGJveGVkKG1fZnJhbWUsIFNhbmRib3hOYXZpZ2F0aW9uKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAvLyBGSVhNRTogU2V0dGluZyB0aGUgcmVmZXJyZXIgc2hvdWxkIGJlIHRoZSBj
YWxsZXIncyByZXNwb25zaWJpbGl0eS4KQEAgLTQ2Niw3ICs0NzgsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsIFBh
c3NSZWZQdHI8RgogICAgIGlmICh1LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKGlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJveEZvcm1zKSkKKyAgICBpZiAoaXNEb2N1bWVu
dFNhbmRib3hlZChtX2ZyYW1lLCBTYW5kYm94Rm9ybXMpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQodSkpIHsKQEAgLTExMzgsNyArMTE1MCw3IEBAIGJv
b2wgRnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBTdHJpbmcmIHVyCiAgICAgICAgICAgICAgJiYgIU1JTUVUeXBlUmVnaXN0cnk6
OmlzQXBwbGljYXRpb25QbHVnaW5NSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgICAgICB8fCAo
IXNldHRpbmdzLT5pc0phdmFFbmFibGVkKCkgJiYgTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBw
bGV0TUlNRVR5cGUobWltZVR5cGUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKGlzRG9jdW1lbnRTYW5kYm94ZWQoU2FuZGJveFBsdWdpbnMpKQorICAgICAgICBpZiAo
aXNEb2N1bWVudFNhbmRib3hlZChtX2ZyYW1lLCBTYW5kYm94UGx1Z2lucykpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBsb2FkUGx1Z2luKHJlbmRlcmVyLCBjb21w
bGV0ZWRVUkwsIG1pbWVUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgdXNlRmFsbGJhY2sp
OwogICAgIH0KQEAgLTIxNTYsMTEgKzIxNjgsMTEgQEAgYm9vbCBGcmFtZUxvYWRlcjo6c2hvdWxk
QWxsb3dOYXZpZ2F0aW9uKEZyYW1lKiB0YXJnZXRGcmFtZSkgY29uc3QKICAgICAvLyBMZXQgYSBm
cmFtZSBuYXZpZ2F0ZSB0aGUgdG9wLWxldmVsIHdpbmRvdyB0aGF0IGNvbnRhaW5zIGl0LiAgVGhp
cyBpcwogICAgIC8vIGltcG9ydGFudCB0byBhbGxvdyBiZWNhdXNlIGl0IGxldHMgYSBzaXRlICJm
cmFtZS1idXN0IiAoZXNjYXBlIGZyb20gYQogICAgIC8vIGZyYW1lIGNyZWF0ZWQgYnkgYW5vdGhl
ciB3ZWIgc2l0ZSkuCi0gICAgaWYgKCFpc0RvY3VtZW50U2FuZGJveGVkKFNhbmRib3hUb3BOYXZp
Z2F0aW9uKSAmJiB0YXJnZXRGcmFtZSA9PSBtX2ZyYW1lLT50cmVlKCktPnRvcCgpKQorICAgIGlm
ICghaXNEb2N1bWVudFNhbmRib3hlZChtX2ZyYW1lLCBTYW5kYm94VG9wTmF2aWdhdGlvbikgJiYg
dGFyZ2V0RnJhbWUgPT0gbV9mcmFtZS0+dHJlZSgpLT50b3AoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAvLyBBIHNhbmRib3hlZCBmcmFtZSBjYW4gb25seSBuYXZpZ2F0ZSBpdHNlbGYg
YW5kIGl0cyBkZXNjZW5kYW50cy4KLSAgICBpZiAoaXNEb2N1bWVudFNhbmRib3hlZChTYW5kYm94
TmF2aWdhdGlvbikgJiYgIXRhcmdldEZyYW1lLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKG1fZnJh
bWUpKQorICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKG1fZnJhbWUsIFNhbmRib3hOYXZpZ2F0
aW9uKSAmJiAhdGFyZ2V0RnJhbWUtPnRyZWUoKS0+aXNEZXNjZW5kYW50T2YobV9mcmFtZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIExldCBhIGZyYW1lIG5hdmlnYXRlIGl0cyBv
cGVuZXIgaWYgdGhlIG9wZW5lciBpcyBhIHRvcC1sZXZlbCB3aW5kb3cuCkBAIC0zOTE3LDExICsz
OTI5LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlU2FuZGJveEZsYWdzKCkKICAgICAgICAg
Y2hpbGQtPmxvYWRlcigpLT51cGRhdGVTYW5kYm94RmxhZ3MoKTsKIH0KIAotYm9vbCBGcmFtZUxv
YWRlcjo6aXNEb2N1bWVudFNhbmRib3hlZChTYW5kYm94RmxhZ3MgbWFzaykgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT5pc1NhbmRib3hlZChtYXNrKTsKLX0KLQogUGFzc1JlZlB0cjxXaWRnZXQ+
IEZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmIHNpemUs
IEhUTUxBcHBsZXRFbGVtZW50KiBlbGVtZW50LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgYXJncykKIHsKICAgICBTdHJpbmcgYmFzZVVSTFN0cmluZzsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmggYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCmlu
ZGV4IDBmY2RiNWYuLmNlZGIyOTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaApAQCAtMTI1LDYgKzEyNSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZXBvcnRMb2NhbExvYWRGYWlsZWQoRnJhbWUq
LCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICAvLyBDYWxsZWQgYnkgY3JlYXRlV2luZG93IGlu
IEpTRE9NV2luZG93QmFzZS5jcHAsIGUuZy4gdG8gZnVsZmlsbCBhIG1vZGFsIGRpYWxvZyBjcmVh
dGlvbgorICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgbWV0aG9kIG91dHNpZGUgb2YgdGhlIEZyYW1l
TG9hZGVyIGNsYXNzLgogICAgIEZyYW1lKiBjcmVhdGVXaW5kb3coRnJhbWVMb2FkZXIqIGZyYW1l
TG9hZGVyRm9yRnJhbWVMb29rdXAsIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5k
b3dGZWF0dXJlcyYsIGJvb2wmIGNyZWF0ZWQpOwogCiAgICAgdW5zaWduZWQgbG9uZyBsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRp
YWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0
YSk7CkBAIC00NjIsOCArNDYzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZFRyZWF0VVJM
QXNTYW1lQXNDdXJyZW50KGNvbnN0IEtVUkwmKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlU2Fu
ZGJveEZsYWdzKCk7Ci0gICAgLy8gRklYTUU6IGlzRG9jdW1lbnRTYW5kYm94ZWQgc2hvdWxkIGV2
ZW50dWFsbHkgcmVwbGFjZSBpc1NhbmRib3hlZC4KLSAgICBib29sIGlzRG9jdW1lbnRTYW5kYm94
ZWQoU2FuZGJveEZsYWdzKSBjb25zdDsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIEZyYW1l
TG9hZGVyQ2xpZW50KiBtX2NsaWVudDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>