<?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>41920</bug_id>
          
          <creation_ts>2010-07-08 17:25:18 -0700</creation_ts>
          <short_desc>Avoid slow-path for put() in Array.splice()</short_desc>
          <delta_ts>2010-07-13 17:30:03 -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>JavaScriptCore</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>248648</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-08 17:25:18 -0700</bug_when>
    <thetext>The JSArray that Array.splice() ends up returning is currently created early on.

If we defer creation until we know the number of elements to accommodate, we avoid taking the put() slow-path when populating the array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248649</commentid>
    <comment_count>1</comment_count>
      <attachid>60986</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-08 17:26:09 -0700</bug_when>
    <thetext>Created attachment 60986
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248756</commentid>
    <comment_count>2</comment_count>
      <attachid>60986</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-08 23:14:00 -0700</bug_when>
    <thetext>Comment on attachment 60986
Proposed patch

I think this can be made much better.

We should add a function to create a new array that will actually allocate sufficient space for the result as we know we will be producing a compact array of this size, then resObj-&gt;put(...) should be replaced with setIndex(k, v).

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249015</commentid>
    <comment_count>3</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-07-09 07:58:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; We should add a function to create a new array that will actually allocate sufficient space for the result as we know we will be producing a compact array of this size (...)

Oliver, why isn&apos;t enough to use the constructEmptyArray() variant that takes the initial length (the one the patch uses)? It preallocates for cases with size up to MIN_SPARE_ARRAY_INDEX (which is 10k).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249074</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-09 10:08:22 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; We should add a function to create a new array that will actually allocate sufficient space for the result as we know we will be producing a compact array of this size (...)
&gt; 
&gt; Oliver, why isn&apos;t enough to use the constructEmptyArray() variant that takes the initial length (the one the patch uses)? It preallocates for cases with size up to MIN_SPARE_ARRAY_INDEX (which is 10k).

new Array(100000).splice()

Won&apos;t allocate sufficient space, and setIndex does not do bounds checks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250076</commentid>
    <comment_count>5</comment_count>
      <attachid>61272</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-12 14:55:54 -0700</bug_when>
    <thetext>Created attachment 61272
Proposed patch v2

Updated patch addressing Oliver&apos;s comments.
* Made it possible to create a compact JSArray via the constructor that takes an initialLength.
* Changed splice() to use setIndex().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250102</commentid>
    <comment_count>6</comment_count>
      <attachid>61272</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-12 15:36:55 -0700</bug_when>
    <thetext>Comment on attachment 61272
Proposed patch v2

Great that you&apos;re tackling this!

&gt; -        JSArray(NonNullPassRefPtr&lt;Structure&gt;, unsigned initialLength);
&gt; +        JSArray(NonNullPassRefPtr&lt;Structure&gt;, unsigned initialLength, bool compact = false);

In the WebKit project we strongly discourage using booleans for arguments like this one where callers pass constants. Instead, we normally use enums.

Since there is only one place where we call this, I think the default for the boolean argument isn&apos;t a good idea. No reason to have the default.

The patch otherwise looks pretty good. But setIndex is not fast enough. We want to just set m_numValuesInVector, m_length, and the values in m_storage-&gt;m_vector, without any branches and without looping. We should come up with a new code path specifically designed for creating a new array efficiently.

I’m going to say review- because of the boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250103</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-12 15:45:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Since there is only one place where we call this

The one place I am referring to is constructArrayWithSizeQuirk in ArrayConstructor.cpp. That&apos;s the only call site I found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250125</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-12 16:18:10 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; The one place I am referring to is constructArrayWithSizeQuirk in ArrayConstructor.cpp. That&apos;s the only call site I found.

Other call sites:
* RegExpMatchesArray::RegExpMatchesArray() in RegExpConstructor.cpp
* constructEmptyArray() in JSGlobalObject.h

Revised patch coming in a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250142</commentid>
    <comment_count>9</comment_count>
      <attachid>61290</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-12 16:42:21 -0700</bug_when>
    <thetext>Created attachment 61290
Proposed patch v3

Updated to address Darin&apos;s comments.

* Replaced constructor bool parameter with enum ArrayCreationMode { CreateCompactUninitialized, CreateInitialized }
* Added JSArray::uncheckedSetIndex(unsigned i, JSValue v)

I don&apos;t understand how we should initialize this array without looping though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250151</commentid>
    <comment_count>10</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-12 16:52:59 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I don&apos;t understand how we should initialize this array without looping though.

Oh duh, I guess you mean setting m_numValuesInVector and m_length outside the loop. (Done in latest patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250153</commentid>
    <comment_count>11</comment_count>
      <attachid>61290</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-12 16:55:12 -0700</bug_when>
    <thetext>Comment on attachment 61290
Proposed patch v3

&gt; +    if (creationMode == CreateInitialized) {
&gt; +        JSValue* vector = m_storage-&gt;m_vector;
&gt; +        for (size_t i = 0; i &lt; initialCapacity; ++i)
&gt; +            vector[i] = JSValue();
&gt; +        m_storage-&gt;m_numValuesInVector = 0;
&gt; +    } else
&gt; +        m_storage-&gt;m_numValuesInVector = initialCapacity;

It&apos;s not safe to leave the vector uninitialized. Garbage collection could happen if one of the calls to getProperty does any object allocation, which can definitely happen in many ways, including getters and DOM objects. And if garbage collection does happen, we will need to survive a call to the markChildren function.

&gt; +        enum ArrayCreationMode { CreateCompactUninitialized, CreateInitialized };

While it is nice to scope the enum to the class, it makes the call sites too ugly. I think it&apos;s fine to define this at namespace scope instead.

&gt; +        void uncheckedSetIndex(unsigned i, JSValue v)
&gt; +        {
&gt; +            m_storage-&gt;m_vector[i] = v;
&gt; +        }

You could put assertions in here to make it clearer what those things are that are not checked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250161</commentid>
    <comment_count>12</comment_count>
      <attachid>61290</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-12 17:05:27 -0700</bug_when>
    <thetext>Comment on attachment 61290
Proposed patch v3

In our new construct path if we delay setting the length to the end of initialisation we can avoid clearing the vector...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250178</commentid>
    <comment_count>13</comment_count>
      <attachid>61299</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-12 17:28:39 -0700</bug_when>
    <thetext>Created attachment 61299
Proposed patch v4

Patch updated addressing Darin and Oliver&apos;s comments.

* ArrayCreationMode enum moved into JSC namespace. [Darin]
* Assertion added to uncheckedSetIndex(). [Darin]
* For CreateCompact, m_storage-&gt;m_length is left as 0 and finally set by setLength() after inserting the values. [Oliver]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250556</commentid>
    <comment_count>14</comment_count>
      <attachid>61299</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-13 09:27:13 -0700</bug_when>
    <thetext>Comment on attachment 61299
Proposed patch v4

This is really great work. And so close, but still one thing not quite right that I spotted.

&gt; +    if (creationMode == CreateCompact) {
&gt; +        // NOTE: setLength() must be called after initializing this array.
&gt; +        m_storage-&gt;m_length = 0;
&gt; +        m_storage-&gt;m_numValuesInVector = initialCapacity;

The intent here is to now call uncheckedSetIndex on each element in the vector and then call setLength. The comment mentions setLength, but not uncheckedSetIndex; both are required. I think the comment should go in the header instead of here (see below).

Unfortunately, the call to setLength when the values are set but the length is still zero is incompatible with CHECK_ARRAY_CONSISTENCY. The checkConsistency call at the start of setLength will assert because there are values in the vector in slots that are greater than m_length.

So somehow we need to turn off that consistency check. I&apos;m sure there are multiple ways to do this. The simplest would be to remove the consistency check at the start of setLength, but I&apos;d prefer not to do that. The second simplest I can think of is to add a debug-only boolean flag to ArrayStorage that is true if we have created an array with CreateCompact but have not yet set the length. If that flag is set we can skip the checkConsistency call at the start of setLength. We can also assert that flag is not set in the checkConsistency function. We could probably do other checks with that flag as well, to catch other unsafe actions during the process of creating the array.

&gt; +    enum ArrayCreationMode { CreateCompact, CreateInitialized };

I think a comment about how CreateCompact works should be somewhere in the header. If we use CreateCompact to create an array, we are obligated to then use uncheckedSetIndex for all the elements of the array and the setLength; in fact the debugging checks may obligate us to do this even if the length is zero! The header should mentions this somewhere. Not that I want to be wordy and untidy, but that would be non-obvious if not mentioned, and so is the type of thing we do want to put in a comment.

&gt; +        void uncheckedSetIndex(unsigned i, JSValue v)
&gt; +        {
&gt; +            ASSERT(canSetIndex(i));
&gt; +            m_storage-&gt;m_vector[i] = v;
&gt; +        }

We could also assert that we are in the &quot;create new elements of a compact array&quot; mode if we add that flag, or if not in that special mode we&apos;d want to assert that the previous value in the vector is non-zero and that i &lt; m_storage-&gt;m_length.

I&apos;d say review- but I don&apos;t want to land something that breaks the CHECK_ARRAY_CONSISTENCY mode. I also suggest you run the regression tests with CHECK_ARRAY_CONSISTENCY turned on after making your change, although you don&apos;t want to land with it on!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250558</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-13 09:28:53 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; we are obligated to then use uncheckedSetIndex for all the elements of the array and the setLength; in fact the debugging checks may obligate us to do this even if the length is zero!

On second though, we can write the debugging checks so they do not obligate us to call setLength. We can set the &quot;did a CreateCompact and needs a setLength&quot; flag only if the initial capacity is non-zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250607</commentid>
    <comment_count>16</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-13 10:36:08 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I&apos;d say review- but I don&apos;t want to land something that breaks the CHECK_ARRAY_CONSISTENCY mode.

It&apos;s already broken - it uses JSValue::type() which was eliminated(!) in http://trac.webkit.org/changeset/35830 :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250614</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-13 10:42:36 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; It&apos;s already broken - it uses JSValue::type() which was eliminated(!) in http://trac.webkit.org/changeset/35830 :-)

I&apos;m sad to hear that. Should be quick to fix, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250780</commentid>
    <comment_count>18</comment_count>
      <attachid>61424</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-13 15:37:14 -0700</bug_when>
    <thetext>Created attachment 61424
Proposed patch v5

Updated patch, sorry about the delay!

* Brief explanation about CreateCompact mode added to JSArray.h
* m_inCompactInitialization flag added to ArrayStorage (only with CHECK_ARRAY_CONSISTENCY)
* ASSERT(m_inCompactInitialization) added to uncheckedSetIndex()
* setLength() won&apos;t call checkConsistency() on entry at the first call after CreateCompact initialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250785</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 15:41:14 -0700</bug_when>
    <thetext>Attachment 61424 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/JSArray.cpp:159:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250791</commentid>
    <comment_count>20</comment_count>
      <attachid>61424</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-13 15:53:53 -0700</bug_when>
    <thetext>Comment on attachment 61424
Proposed patch v5

Unsetting cq? because I love you, Stylebot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250793</commentid>
    <comment_count>21</comment_count>
      <attachid>61424</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-13 15:59:06 -0700</bug_when>
    <thetext>Comment on attachment 61424
Proposed patch v5

&gt; -#define CHECK_ARRAY_CONSISTENCY 0

One of the goals for CHECK_ARRAY_CONSISTENCY is to be able to turn it on without recompiling anything except JSArray.cpp. By making m_inCompactInitialization be included in any non-NDEBUG builds, we could achieve that.

The code to set up m_inCompactInitialization and the data member itself would be inside #ifndef NDEBUG rather than #if CHECK_ARRAY_CONSISTENCY.

&gt; +#if CHECK_ARRAY_CONSISTENCY
&gt; +            ASSERT(m_storage-&gt;m_inCompactInitialization);
&gt; +#endif

If we used #ifndef NDEBUG we could just unconditionally include this assertion. This gives a good reason to have the boolean there even if CHECK_ARRAY_CONSISTENCY is 0.

r=me as is

Even better if you move CHECK_ARRAY_CONSISTENCY back inside the .cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250855</commentid>
    <comment_count>22</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-07-13 17:30:03 -0700</bug_when>
    <thetext>Committed r63268: &lt;http://trac.webkit.org/changeset/63268&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60986</attachid>
            <date>2010-07-08 17:26:09 -0700</date>
            <delta_ts>2010-07-12 14:55:54 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-41920.diff</filename>
            <type>text/plain</type>
            <size>1772</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBmYjQ4ZGMxLi5mYTFiMGFkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTAtMDctMDggIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBz
bG93LXBhdGggZm9yIHB1dCgpIGluIEFycmF5LnNwbGljZSgpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTkyMAorCisgICAgICAgIERlZmVyIGNyZWF0
aW9uIG9mIHRoZSByZXR1cm5lZCBKU0FycmF5IHVudGlsIGl0cyBmaW5hbCBzaXplIGlzIGtub3du
CisgICAgICAgIHRvIGF2b2lkIGdyb3dpbmcgaXQgd2hpbGUgYWRkaW5nIGVsZW1lbnRzLgorCisg
ICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jU3BsaWNlKToKKwogMjAxMC0wNy0wOCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJy
YWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgR1RLIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKaW5kZXggMmNiMDRmZi4uZmU5ZGI4ZiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKQEAgLTU2MCw4ICs1NjAs
NiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4
ZWNTdGF0ZSogZXhlYykKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNP
YmplY3QoZXhlYyk7CiAKICAgICAvLyAxNS40LjQuMTIKLSAgICBKU0FycmF5KiByZXNPYmogPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2JqOwog
CiAgICAgLy8gRklYTUU6IEZpcmVmb3ggcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKQEAgLTU4MiwxMSArNTgwLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiBleGVjKQog
ICAgIGVsc2UKICAgICAgICAgZGVsZXRlQ291bnQgPSBsZW5ndGggLSBiZWdpbjsKIAorICAgIEpT
QXJyYXkqIHJlc09iaiA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgZGVsZXRlQ291bnQpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2JqOworCiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGRlbGV0ZUNvdW50OyBrKyspIHsKICAgICAgICAgaWYgKEpTVmFsdWUgdiA9IGdldFByb3Bl
cnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBiZWdpbikpCiAgICAgICAgICAgICByZXNPYmotPnB1dChl
eGVjLCBrLCB2KTsKICAgICB9Ci0gICAgcmVzT2JqLT5zZXRMZW5ndGgoZGVsZXRlQ291bnQpOwog
CiAgICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAtIDIsIDApOwogICAgIGlmIChhZGRpdGlvbmFsQXJncyAhPSBkZWxldGVDb3Vu
dCkgewo=
</data>
<flag name="review"
          id="48880"
          type_id="1"
          status="-"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="48881"
          type_id="3"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61272</attachid>
            <date>2010-07-12 14:55:54 -0700</date>
            <delta_ts>2010-07-12 16:42:21 -0700</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-41920-v2.diff</filename>
            <type>text/plain</type>
            <size>3345</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwYWNjY2M4Li4yY2Q0ZDE5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTAtMDctMTIgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBz
bG93LXBhdGggZm9yIHB1dCgpIGluIEFycmF5LnNwbGljZSgpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTkyMAorCisgICAgICAgIERlZmVyIGNyZWF0
aW9uIG9mIHRoZSByZXR1cm5lZCBKU0FycmF5IHVudGlsIGl0cyBmaW5hbCBzaXplIGlzIGtub3du
CisgICAgICAgIHRvIGF2b2lkIGdyb3dpbmcgaXQgd2hpbGUgYWRkaW5nIGVsZW1lbnRzLgorCisg
ICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoK
KwogMjAxMC0wNy0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCmluZGV4IDJjYjA0ZmYuLjYwMDk1MjcgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCkBAIC01NjAsOCArNTYwLDYgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogCiAg
ICAgLy8gMTUuNC40LjEyCi0gICAgSlNBcnJheSogcmVzT2JqID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHJlc09iajsKIAogICAgIC8vIEZJWE1FOiBG
aXJlZm94IHJldHVybnMgYW4gZW1wdHkgYXJyYXkuCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCkBAIC01ODIsMTEgKzU4MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYykKICAgICBlbHNlCiAgICAgICAg
IGRlbGV0ZUNvdW50ID0gbGVuZ3RoIC0gYmVnaW47CiAKKyAgICBKU0FycmF5KiByZXNPYmogPSBu
ZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVj
dHVyZSgpLCBkZWxldGVDb3VudCwgdHJ1ZSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSByZXNPYmo7
CisKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGVsZXRlQ291bnQ7IGsrKykgewogICAg
ICAgICBpZiAoSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2lu
KSkKLSAgICAgICAgICAgIHJlc09iai0+cHV0KGV4ZWMsIGssIHYpOworICAgICAgICAgICAgcmVz
T2JqLT5zZXRJbmRleChrLCB2KTsKICAgICB9Ci0gICAgcmVzT2JqLT5zZXRMZW5ndGgoZGVsZXRl
Q291bnQpOwogCiAgICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwogICAgIGlmIChhZGRpdGlvbmFsQXJncyAhPSBk
ZWxldGVDb3VudCkgewpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggMzYyZjg5Yi4u
ZGQ2MGMwOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xNDEsMTAgKzE0MSwx
MCBAQCBKU0FycmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0
dXJlKQogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotSlNBcnJheTo6SlNBcnJheShOb25O
dWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCkKK0pTQXJyYXk6OkpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1
cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgsIGJvb2wgY29tcGFjdCkKICAgICA6IEpTT2JqZWN0
KHN0cnVjdHVyZSkKIHsKLSAgICB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkgPSBtaW4oaW5pdGlh
bExlbmd0aCwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCk7CisgICAgdW5zaWduZWQgaW5pdGlhbENh
cGFjaXR5ID0gY29tcGFjdCA/IGluaXRpYWxMZW5ndGggOiBtaW4oaW5pdGlhbExlbmd0aCwgTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCk7CiAKICAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJh
eVN0b3JhZ2UqPihmYXN0TWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKICAg
ICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKaW5kZXggZjY1ZjJiYy4uYTY3YzhjNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgK
QEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAg
IGV4cGxpY2l0IEpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPik7Ci0gICAgICAg
IEpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCk7CisgICAgICAgIEpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgdW5z
aWduZWQgaW5pdGlhbExlbmd0aCwgYm9vbCBjb21wYWN0ID0gZmFsc2UpOwogICAgICAgICBKU0Fy
cmF5KE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIGNvbnN0IEFyZ0xpc3QmIGluaXRpYWxW
YWx1ZXMpOwogICAgICAgICB2aXJ0dWFsIH5KU0FycmF5KCk7CiAK
</data>
<flag name="review"
          id="49266"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="49267"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61290</attachid>
            <date>2010-07-12 16:42:21 -0700</date>
            <delta_ts>2010-07-12 17:28:39 -0700</delta_ts>
            <desc>Proposed patch v3</desc>
            <filename>bug-41920-v3.diff</filename>
            <type>text/plain</type>
            <size>7513</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwYWNjY2M4Li5hMjA2NzBhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTAtMDctMTIgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBz
bG93LXBhdGggZm9yIHB1dCgpIGluIEFycmF5LnNwbGljZSgpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTkyMAorCisgICAgICAgIERlZmVyIGNyZWF0
aW9uIG9mIHRoZSByZXR1cm5lZCBhcnJheSB1bnRpbCBpdHMgZmluYWwgc2l6ZSBpcyBrbm93bgor
ICAgICAgICB0byBhdm9pZCBncm93aW5nIGl0IHdoaWxlIGFkZGluZyBlbGVtZW50cy4KKworICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OkpTQXJy
YXkpOiBBZGQgdHdvIG1vZGVzIG9mIGNyZWF0aW9uLCBDcmVhdGVJbml0aWFsaXplZCAoY3VycmVu
dCkgYW5kCisgICAgICAgIENyZWF0ZUNvbXBhY3RVbmluaXRpYWxpemVkICh3aGljaCBzaG91bGQg
b25seSBiZSB1c2VkIHdoZW4gY29uc3RydWN0aW5nIGFycmF5cworICAgICAgICB3aG9zZSBzaXpl
IGFuZCBjb250ZW50cyBhcmUga25vd24gYXQgdGhlIHRpbWUgb2YgY3JlYXRpb24uKQorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bmNoZWNrZWRT
ZXRJbmRleCk6IEFkZGVkIGZvciBmYXN0IHNldHRpbmcgb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMu
CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jU3BsaWNlKTogT3B0aW1pemVkIGNyZWF0aW9uIG9mIHRoZSByZXR1cm5lZCBK
U0FycmF5LgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayk6IFBhc3MgQ3JlYXRlSW5pdGlhbGl6
ZWQgdG8gY3Rvci4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEVtcHR5QXJyYXkpOiBQYXNzIENyZWF0ZUluaXRpYWxpemVkIHRvIGN0
b3IuCisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KTogUGFzcyBDcmVhdGVJ
bml0aWFsaXplZCB0byBjdG9yLgorCiAyMDEwLTA3LTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCmluZGV4IDU4OTczOWEuLjU1NWI5
MDQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcApAQCAt
NTgsNyArNTgsNyBAQCBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpdGhT
aXplUXVpcmsoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaQogICAgICAgICB1aW50MzJfdCBu
ID0gYXJncy5hdCgwKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgaWYgKG4gIT0gYXJncy5hdCgw
KS50b051bWJlcihleGVjKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBv
c2l0aXZlIGludGVnZXIuIikpOwotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgbik7CisgICAgICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5h
cnJheVN0cnVjdHVyZSgpLCBuLCBKU0FycmF5OjpDcmVhdGVJbml0aWFsaXplZCk7CiAgICAgfQog
CiAgICAgLy8gb3RoZXJ3aXNlIHRoZSBhcnJheSBpcyBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBhcmd1
bWVudHMgaW4gaXQKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKaW5k
ZXggMmNiMDRmZi4uZTUxYTE2OCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKQEAgLTU2MCw4ICs1NjAsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYykKICAgICBKU09iamVjdCogdGhp
c09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAKICAgICAvLyAxNS40LjQuMTIK
LSAgICBKU0FycmF5KiByZXNPYmogPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gcmVzT2JqOwogCiAgICAgLy8gRklYTUU6IEZpcmVmb3ggcmV0dXJucyBh
biBlbXB0eSBhcnJheS4KICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKQEAgLTU4Miwx
MSArNTgwLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNT
cGxpY2UoRXhlY1N0YXRlKiBleGVjKQogICAgIGVsc2UKICAgICAgICAgZGVsZXRlQ291bnQgPSBs
ZW5ndGggLSBiZWdpbjsKIAotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3Vu
dDsgaysrKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlz
T2JqLCBrICsgYmVnaW4pKQotICAgICAgICAgICAgcmVzT2JqLT5wdXQoZXhlYywgaywgdik7Ci0g
ICAgfQotICAgIHJlc09iai0+c2V0TGVuZ3RoKGRlbGV0ZUNvdW50KTsKKyAgICBKU0FycmF5KiBy
ZXNPYmogPSBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5h
cnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3VudCwgSlNBcnJheTo6Q3JlYXRlQ29tcGFjdFVuaW5p
dGlhbGl6ZWQpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2JqOworCisgICAgZm9yICh1bnNp
Z25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyBrKyspCisgICAgICAgIHJlc09iai0+dW5jaGVj
a2VkU2V0SW5kZXgoaywgZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2luKSk7CiAK
ICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oZXhlYy0+YXJndW1l
bnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxBcmdzICE9IGRlbGV0ZUNvdW50
KSB7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCAzNjJmODliLi4yNWQyMjcxIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAgLTE0MSwyMiArMTQxLDI1IEBAIEpTQXJy
YXk6OkpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCiAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCi1KU0FycmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorSlNBcnJh
eTo6SlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCwgQXJyYXlDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQogICAgIDog
SlNPYmplY3Qoc3RydWN0dXJlKQogewotICAgIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IG1p
bihpbml0aWFsTGVuZ3RoLCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKKyAgICB1bnNpZ25lZCBp
bml0aWFsQ2FwYWNpdHkgPSBjcmVhdGlvbk1vZGUgPT0gQ3JlYXRlQ29tcGFjdFVuaW5pdGlhbGl6
ZWQgPyBpbml0aWFsTGVuZ3RoIDogbWluKGluaXRpYWxMZW5ndGgsIE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVgpOwogCiAgICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4oZmFz
dE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7CiAgICAgbV9zdG9yYWdlLT5t
X2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7CiAgICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsQ2Fw
YWNpdHk7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICBtX3N0
b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOwogICAgIG1fc3RvcmFnZS0+c3ViY2xhc3NEYXRh
ID0gMDsKICAgICBtX3N0b3JhZ2UtPnJlcG9ydGVkTWFwQ2FwYWNpdHkgPSAwOwogCi0gICAgSlNW
YWx1ZSogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGluaXRpYWxDYXBhY2l0eTsgKytpKQotICAgICAgICB2ZWN0b3JbaV0gPSBKU1ZhbHVl
KCk7CisgICAgaWYgKGNyZWF0aW9uTW9kZSA9PSBDcmVhdGVJbml0aWFsaXplZCkgeworICAgICAg
ICBKU1ZhbHVlKiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGluaXRpYWxDYXBhY2l0eTsgKytpKQorICAgICAgICAgICAgdmVjdG9y
W2ldID0gSlNWYWx1ZSgpOworICAgICAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOworICAgIH0gZWxzZQorICAgICAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSBpbml0aWFsQ2FwYWNpdHk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgKaW5kZXggZjY1ZjJiYy4uNGQwN2YyNSAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgKQEAgLTQyLDcgKzQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6
CiAgICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPik7
Ci0gICAgICAgIEpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCk7CisgICAgICAgIGVudW0gQXJyYXlDcmVhdGlvbk1vZGUgeyBDcmVhdGVD
b21wYWN0VW5pbml0aWFsaXplZCwgQ3JlYXRlSW5pdGlhbGl6ZWQgfTsKKyAgICAgICAgSlNBcnJh
eShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBB
cnJheUNyZWF0aW9uTW9kZSk7CiAgICAgICAgIEpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3Ry
dWN0dXJlPiwgY29uc3QgQXJnTGlzdCYgaW5pdGlhbFZhbHVlcyk7CiAgICAgICAgIHZpcnR1YWwg
fkpTQXJyYXkoKTsKIApAQCAtODMsNiArODQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICB4ID0gdjsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdW5jaGVja2VkU2V0SW5kZXgo
dW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldID0gdjsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3Qo
RXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5VG9S
ZWdpc3RlcnMoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqLCB1aW50MzJfdCk7CiAKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCAwOWE5MmExLi40YjBhNWY2IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC00NTcsNyArNDU3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJy
YXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIHJldHVybiBuZXcgKGV4ZWMp
IEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBp
bml0aWFsTGVuZ3RoLCBKU0FycmF5OjpDcmVhdGVJbml0aWFsaXplZCk7CiAgICAgfQogCiAgICAg
aW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
aW5nbGVJdGVtVmFsdWUpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENvbnN0cnVjdG9yLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCmluZGV4IGZhMmExZTIuLjY1ZTIyMjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgUmVnRXhwQ29uc3Ry
dWN0b3I6OlJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamUKIH0KIAogUmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXko
RXhlY1N0YXRlKiBleGVjLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqIGRhdGEpCi0gICAgOiBK
U0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCksIGRhdGEtPmxhc3ROdW1TdWJQYXR0ZXJucyArIDEpCisgICAgOiBKU0FycmF5KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCks
IGRhdGEtPmxhc3ROdW1TdWJQYXR0ZXJucyArIDEsIEpTQXJyYXk6OkNyZWF0ZUluaXRpYWxpemVk
KQogewogICAgIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSogZCA9IG5ldyBSZWdFeHBDb25zdHJ1
Y3RvclByaXZhdGU7CiAgICAgZC0+aW5wdXQgPSBkYXRhLT5sYXN0SW5wdXQ7Cg==
</data>
<flag name="review"
          id="49285"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="49286"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61299</attachid>
            <date>2010-07-12 17:28:39 -0700</date>
            <delta_ts>2010-07-13 15:37:14 -0700</delta_ts>
            <desc>Proposed patch v4</desc>
            <filename>bug-41920-v4-2.diff</filename>
            <type>text/plain</type>
            <size>7784</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwYWNjY2M4Li5iOWNjOGQ1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTAtMDctMTMgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBz
bG93LXBhdGggZm9yIHB1dCgpIGluIEFycmF5LnNwbGljZSgpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTkyMAorCisgICAgICAgIERlZmVyIGNyZWF0
aW9uIG9mIHRoZSByZXR1cm5lZCBhcnJheSB1bnRpbCBpdHMgZmluYWwgc2l6ZSBpcyBrbm93bgor
ICAgICAgICB0byBhdm9pZCBncm93aW5nIGl0IHdoaWxlIGFkZGluZyBlbGVtZW50cy4KKworICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OkpTQXJy
YXkpOiBBZGQgdHdvIG1vZGVzIG9mIGNyZWF0aW9uLCBDcmVhdGVJbml0aWFsaXplZCAoY3VycmVu
dCkKKyAgICAgICAgYW5kIENyZWF0ZUNvbXBhY3QgKHdoaWNoIHNob3VsZCBvbmx5IGJlIHVzZWQg
d2hlbiBjb25zdHJ1Y3RpbmcgYXJyYXlzIHdob3NlIHNpemUKKyAgICAgICAgYW5kIGNvbnRlbnRz
IGFyZSBrbm93biBhdCB0aGUgdGltZSBvZiBjcmVhdGlvbi4pCisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuY2hlY2tlZFNldEluZGV4KTogQWRk
ZWQgZm9yIGZhc3QgY3JlYXRpb24gb2YgY29tcGFjdCBhcnJheXMuCisgICAgICAgICogcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNl
KTogT3B0aW1pemVkIGNyZWF0aW9uIG9mIHRoZSByZXR1cm5lZCBKU0FycmF5LgorICAgICAgICAq
IHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFy
cmF5V2l0aFNpemVRdWlyayk6IFBhc3MgQ3JlYXRlSW5pdGlhbGl6ZWQgdG8gY3Rvci4KKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEVt
cHR5QXJyYXkpOiBQYXNzIENyZWF0ZUluaXRpYWxpemVkIHRvIGN0b3IuCisgICAgICAgICogcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNB
cnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KTogUGFzcyBDcmVhdGVJbml0aWFsaXplZCB0byBjdG9y
LgorCiAyMDEwLTA3LTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5Q29uc3RydWN0b3IuY3BwCmluZGV4IDU4OTczOWEuLmU1ZDBkYWMgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcApAQCAtNTgsNyArNTgsNyBAQCBzdGF0
aWMgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaQogICAgICAgICB1aW50MzJfdCBuID0gYXJncy5hdCgwKS50b1VJ
bnQzMihleGVjKTsKICAgICAgICAgaWYgKG4gIT0gYXJncy5hdCgwKS50b051bWJlcihleGVjKSkK
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhl
YywgIkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikp
OwotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgbik7CisgICAgICAgIHJldHVybiBuZXcgKGV4ZWMp
IEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBu
LCBDcmVhdGVJbml0aWFsaXplZCk7CiAgICAgfQogCiAgICAgLy8gb3RoZXJ3aXNlIHRoZSBhcnJh
eSBpcyBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBhcmd1bWVudHMgaW4gaXQKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKaW5kZXggMmNiMDRmZi4uYzgyOTM0OCAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKQEAgLTU2MCw4ICs1NjAsNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNT
dGF0ZSogZXhlYykKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmpl
Y3QoZXhlYyk7CiAKICAgICAvLyAxNS40LjQuMTIKLSAgICBKU0FycmF5KiByZXNPYmogPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2JqOwogCiAg
ICAgLy8gRklYTUU6IEZpcmVmb3ggcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICAgICBpZiAoIWV4
ZWMtPmFyZ3VtZW50Q291bnQoKSkKQEAgLTU4MiwxMCArNTgwLDEyIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiBleGVjKQogICAg
IGVsc2UKICAgICAgICAgZGVsZXRlQ291bnQgPSBsZW5ndGggLSBiZWdpbjsKIAotICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKSB7Ci0gICAgICAgIGlmIChKU1Zh
bHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4pKQotICAgICAgICAg
ICAgcmVzT2JqLT5wdXQoZXhlYywgaywgdik7Ci0gICAgfQorICAgIEpTQXJyYXkqIHJlc09iaiA9
IG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3Ry
dWN0dXJlKCksIGRlbGV0ZUNvdW50LCBDcmVhdGVDb21wYWN0KTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHJlc09iajsKKworICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsg
aysrKQorICAgICAgICByZXNPYmotPnVuY2hlY2tlZFNldEluZGV4KGssIGdldFByb3BlcnR5KGV4
ZWMsIHRoaXNPYmosIGsgKyBiZWdpbikpOworCiAgICAgcmVzT2JqLT5zZXRMZW5ndGgoZGVsZXRl
Q291bnQpOwogCiAgICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
aW5kZXggMzYyZjg5Yi4uNzZlM2M1MiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBA
IC0xNDEsMjIgKzE0MSwzMiBAQCBKU0FycmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotSlNBcnJh
eTo6SlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKK0pTQXJyYXk6OkpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3Ry
dWN0dXJlPiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgsIEFycmF5Q3JlYXRpb25N
b2RlIGNyZWF0aW9uTW9kZSkKICAgICA6IEpTT2JqZWN0KHN0cnVjdHVyZSkKIHsKLSAgICB1bnNp
Z25lZCBpbml0aWFsQ2FwYWNpdHkgPSBtaW4oaW5pdGlhbExlbmd0aCwgTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCk7CisgICAgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5OworICAgIGlmIChjcmVhdGlv
bk1vZGUgPT0gQ3JlYXRlQ29tcGFjdCkKKyAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gaW5pdGlh
bExlbmd0aDsKKyAgICBlbHNlCisgICAgICAgIGluaXRpYWxDYXBhY2l0eSA9IG1pbihpbml0aWFs
TGVuZ3RoLCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKIAogICAgIG1fc3RvcmFnZSA9IHN0YXRp
Y19jYXN0PEFycmF5U3RvcmFnZSo+KGZhc3RNYWxsb2Moc3RvcmFnZVNpemUoaW5pdGlhbENhcGFj
aXR5KSkpOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIG1f
dmVjdG9yTGVuZ3RoID0gaW5pdGlhbENhcGFjaXR5OwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IDA7CiAgICAgbV9zdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwID0gMDsKICAg
ICBtX3N0b3JhZ2UtPnN1YmNsYXNzRGF0YSA9IDA7CiAgICAgbV9zdG9yYWdlLT5yZXBvcnRlZE1h
cENhcGFjaXR5ID0gMDsKIAotICAgIEpTVmFsdWUqIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0
b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbml0aWFsQ2FwYWNpdHk7ICsraSkKLSAg
ICAgICAgdmVjdG9yW2ldID0gSlNWYWx1ZSgpOworICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gQ3Jl
YXRlQ29tcGFjdCkgeworICAgICAgICAvLyBOT1RFOiBzZXRMZW5ndGgoKSBtdXN0IGJlIGNhbGxl
ZCBhZnRlciBpbml0aWFsaXppbmcgdGhpcyBhcnJheS4KKyAgICAgICAgbV9zdG9yYWdlLT5tX2xl
bmd0aCA9IDA7CisgICAgICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRp
YWxDYXBhY2l0eTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0g
aW5pdGlhbExlbmd0aDsKKyAgICAgICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
MDsKKyAgICAgICAgSlNWYWx1ZSogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbml0aWFsQ2FwYWNpdHk7ICsraSkKKyAgICAgICAg
ICAgIHZlY3RvcltpXSA9IEpTVmFsdWUoKTsKKyAgICB9CiAKICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXggZjY1ZjJiYy4uYzI0YmUwMyAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTM2LDEzICszNiwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNWYWx1ZSBtX3ZlY3RvclsxXTsKICAgICB9OwogCisgICAgZW51bSBBcnJh
eUNyZWF0aW9uTW9kZSB7IENyZWF0ZUNvbXBhY3QsIENyZWF0ZUluaXRpYWxpemVkIH07CisKICAg
ICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKIAogICAgIHB1YmxpYzoKICAgICAg
ICAgZXhwbGljaXQgSlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKLSAgICAg
ICAgSlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKTsKKyAgICAgICAgSlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBBcnJheUNyZWF0aW9uTW9kZSk7CiAgICAgICAgIEpTQXJy
YXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgY29uc3QgQXJnTGlzdCYgaW5pdGlhbFZh
bHVlcyk7CiAgICAgICAgIHZpcnR1YWwgfkpTQXJyYXkoKTsKIApAQCAtODMsNiArODUsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB4ID0gdjsKICAgICAgICAgfQogCisgICAgICAg
IHZvaWQgdW5jaGVja2VkU2V0SW5kZXgodW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOworICAgICAgICAgICAgbV9zdG9y
YWdlLT5tX3ZlY3RvcltpXSA9IHY7CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGZpbGxBcmdM
aXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29w
eVRvUmVnaXN0ZXJzKEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgdWludDMyX3QpOwogCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggMDlhOTJhMS4uMTE1YWY4NyAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtNDU3LDcgKzQ1Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJy
YXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOworICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUo
KSwgaW5pdGlhbExlbmd0aCwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwogICAgIH0KIAogICAgIGlubGlu
ZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2luZ2xl
SXRlbVZhbHVlKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cAppbmRleCBmYTJhMWUyLi5hZmY4M2U3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIFJlZ0V4cENvbnN0cnVjdG9y
OjpSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplCiB9CiAKIFJlZ0V4cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KEV4ZWNT
dGF0ZSogZXhlYywgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKiBkYXRhKQotICAgIDogSlNBcnJh
eShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVy
ZSgpLCBkYXRhLT5sYXN0TnVtU3ViUGF0dGVybnMgKyAxKQorICAgIDogSlNBcnJheShleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBkYXRh
LT5sYXN0TnVtU3ViUGF0dGVybnMgKyAxLCBDcmVhdGVJbml0aWFsaXplZCkKIHsKICAgICBSZWdF
eHBDb25zdHJ1Y3RvclByaXZhdGUqIGQgPSBuZXcgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlOwog
ICAgIGQtPmlucHV0ID0gZGF0YS0+bGFzdElucHV0Owo=
</data>
<flag name="review"
          id="49297"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="49298"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61424</attachid>
            <date>2010-07-13 15:37:14 -0700</date>
            <delta_ts>2010-07-13 15:59:06 -0700</delta_ts>
            <desc>Proposed patch v5</desc>
            <filename>bug-41920-v5.diff</filename>
            <type>text/plain</type>
            <size>10873</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlZWZjZjQwLi4xYmI4MzZjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTAtMDctMTMgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBz
bG93LXBhdGggZm9yIHB1dCgpIGluIEFycmF5LnNwbGljZSgpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTkyMAorCisgICAgICAgIERlZmVyIGNyZWF0
aW9uIG9mIHRoZSByZXR1cm5lZCBhcnJheSB1bnRpbCBpdHMgZmluYWwgc2l6ZSBpcyBrbm93bgor
ICAgICAgICB0byBhdm9pZCBncm93aW5nIGl0IHdoaWxlIGFkZGluZyBlbGVtZW50cy4KKworICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OkpTQXJy
YXkpOiBBZGQgdHdvIG1vZGVzIG9mIGNyZWF0aW9uLCBDcmVhdGVJbml0aWFsaXplZCAob2xkKQor
ICAgICAgICBhbmQgQ3JlYXRlQ29tcGFjdCAod2hpY2ggc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVu
IGNvbnN0cnVjdGluZyBhcnJheXMgd2hvc2UKKyAgICAgICAgc2l6ZSBhbmQgY29udGVudHMgYXJl
IGtub3duIGF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLikKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2V0TGVuZ3RoKTogU2tpcCBmaXJzdCBjb25zaXN0ZW5jeSBjaGVjayBpZiBpbiBDcmVhdGVDb21w
YWN0CisgICAgICAgIGluaXRpYWxpemF0aW9uIG1vZGUuIChPbmx5IGFwcGxpZXMgdG8gbm9uLWVt
cHR5IGFycmF5cy4pCisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3kpOiBC
dWlsZCBmaXggKEpTVmFsdWU6OnR5cGUoKSBpcyBnb25lKQorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bmNoZWNrZWRTZXRJbmRleCk6IEFkZGVk
IGZvciBmYXN0IGluaXRpYWxpemF0aW9uIG9mIGNvbXBhY3QKKyAgICAgICAgYXJyYXlzLiBEb2Vz
IG5vIGJvdW5kcyBvciBvdGhlciBzYW5pdHkgY2hlY2tpbmcuCisgICAgICAgICogcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKTog
T3B0aW1pemVkIGNyZWF0aW9uIG9mIHRoZSByZXR1cm5lZCBKU0FycmF5LgorICAgICAgICAqIHJ1
bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5
V2l0aFNpemVRdWlyayk6IFBhc3MgQ3JlYXRlSW5pdGlhbGl6ZWQgdG8gY3Rvci4KKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEVtcHR5
QXJyYXkpOiBQYXNzIENyZWF0ZUluaXRpYWxpemVkIHRvIGN0b3IuCisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJh
eTo6UmVnRXhwTWF0Y2hlc0FycmF5KTogUGFzcyBDcmVhdGVJbml0aWFsaXplZCB0byBjdG9yLgor
CiAyMDEwLTA3LTEzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCmluZGV4IDU4OTczOWEuLmU1ZDBkYWMgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcApAQCAtNTgsNyArNTgsNyBA
QCBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaQogICAgICAgICB1aW50MzJfdCBuID0gYXJncy5hdCgw
KS50b1VJbnQzMihleGVjKTsKICAgICAgICAgaWYgKG4gIT0gYXJncy5hdCgwKS50b051bWJlcihl
eGVjKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVn
ZXIuIikpOwotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgbik7CisgICAgICAgIHJldHVybiBuZXcg
KGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVy
ZSgpLCBuLCBDcmVhdGVJbml0aWFsaXplZCk7CiAgICAgfQogCiAgICAgLy8gb3RoZXJ3aXNlIHRo
ZSBhcnJheSBpcyBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBhcmd1bWVudHMgaW4gaXQKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKaW5kZXggMmNiMDRmZi4uYzgyOTM0OCAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKQEAgLTU2MCw4ICs1
NjAsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNl
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1Ro
aXNPYmplY3QoZXhlYyk7CiAKICAgICAvLyAxNS40LjQuMTIKLSAgICBKU0FycmF5KiByZXNPYmog
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2Jq
OwogCiAgICAgLy8gRklYTUU6IEZpcmVmb3ggcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKQEAgLTU4MiwxMCArNTgwLDEyIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiBleGVj
KQogICAgIGVsc2UKICAgICAgICAgZGVsZXRlQ291bnQgPSBsZW5ndGggLSBiZWdpbjsKIAotICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKSB7Ci0gICAgICAgIGlm
IChKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4pKQotICAg
ICAgICAgICAgcmVzT2JqLT5wdXQoZXhlYywgaywgdik7Ci0gICAgfQorICAgIEpTQXJyYXkqIHJl
c09iaiA9IG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFy
cmF5U3RydWN0dXJlKCksIGRlbGV0ZUNvdW50LCBDcmVhdGVDb21wYWN0KTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHJlc09iajsKKworICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVD
b3VudDsgaysrKQorICAgICAgICByZXNPYmotPnVuY2hlY2tlZFNldEluZGV4KGssIGdldFByb3Bl
cnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBiZWdpbikpOworCiAgICAgcmVzT2JqLT5zZXRMZW5ndGgo
ZGVsZXRlQ291bnQpOwogCiAgICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxp
bnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAKaW5kZXggMzYyZjg5Yi4uM2U1ZDZiZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PE9wZXJhdGlvbnMuaD4KIAotI2RlZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCi0KIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xNDEsMjIgKzEz
OSwzNyBAQCBKU0FycmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3Ry
dWN0dXJlKQogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotSlNBcnJheTo6SlNBcnJheShO
b25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKK0pTQXJyYXk6OkpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgsIEFycmF5Q3JlYXRpb25Nb2RlIGNyZWF0aW9u
TW9kZSkKICAgICA6IEpTT2JqZWN0KHN0cnVjdHVyZSkKIHsKLSAgICB1bnNpZ25lZCBpbml0aWFs
Q2FwYWNpdHkgPSBtaW4oaW5pdGlhbExlbmd0aCwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCk7Cisg
ICAgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5OworICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gQ3Jl
YXRlQ29tcGFjdCkKKyAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gaW5pdGlhbExlbmd0aDsKKyAg
ICBlbHNlCisgICAgICAgIGluaXRpYWxDYXBhY2l0eSA9IG1pbihpbml0aWFsTGVuZ3RoLCBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYKTsKIAogICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5
U3RvcmFnZSo+KGZhc3RNYWxsb2Moc3RvcmFnZVNpemUoaW5pdGlhbENhcGFjaXR5KSkpOwotICAg
IG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIG1fdmVjdG9yTGVuZ3Ro
ID0gaW5pdGlhbENhcGFjaXR5OwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IDA7CiAgICAgbV9zdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwID0gMDsKICAgICBtX3N0b3JhZ2Ut
PnN1YmNsYXNzRGF0YSA9IDA7CiAgICAgbV9zdG9yYWdlLT5yZXBvcnRlZE1hcENhcGFjaXR5ID0g
MDsKIAotICAgIEpTVmFsdWUqIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpbml0aWFsQ2FwYWNpdHk7ICsraSkKLSAgICAgICAgdmVjdG9y
W2ldID0gSlNWYWx1ZSgpOworICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gQ3JlYXRlQ29tcGFjdCkg
eworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIG1fc3RvcmFnZS0+bV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbiA9IGluaXRpYWxDYXBhY2l0eSAhPSAwOworI2VuZGlmCisgICAg
ICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSAwOworICAgICAgICBtX3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSBpbml0aWFsQ2FwYWNpdHk7CisgICAgfSBlbHNlIHsKKyNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQorICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5p
dGlhbExlbmd0aDsKKyAgICAgICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsK
KyAgICAgICAgSlNWYWx1ZSogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbml0aWFsQ2FwYWNpdHk7ICsraSkKKyAgICAgICAgICAg
IHZlY3RvcltpXSA9IEpTVmFsdWUoKTsKKyAgICB9CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CiAKQEAgLTE3NSw2ICsxODgsOSBAQCBKU0FycmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVmUHRy
PFN0cnVjdHVyZT4gc3RydWN0dXJlLCBjb25zdCBBcmdMaXN0JiBsaXN0KQogICAgIG1fc3RvcmFn
ZS0+bV9zcGFyc2VWYWx1ZU1hcCA9IDA7CiAgICAgbV9zdG9yYWdlLT5zdWJjbGFzc0RhdGEgPSAw
OwogICAgIG1fc3RvcmFnZS0+cmVwb3J0ZWRNYXBDYXBhY2l0eSA9IDA7CisjaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKKyAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24g
PSBmYWxzZTsKKyNlbmRpZgogCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIEFyZ0xpc3Q6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7CkBAIC01MjQsNyArNTQwLDEyIEBAIGJvb2wgSlNB
cnJheTo6aW5jcmVhc2VWZWN0b3JMZW5ndGgodW5zaWduZWQgbmV3TGVuZ3RoKQogCiB2b2lkIEpT
QXJyYXk6OnNldExlbmd0aCh1bnNpZ25lZCBuZXdMZW5ndGgpCiB7Ci0gICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgaWYgKCFtX3N0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICBlbHNlCisgICAgICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9
IGZhbHNlOworI2VuZGlmCiAKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
CiAKQEAgLTEwNDUsNyArMTA2Niw3IEBAIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShD
b25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQogICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1f
c3RvcmFnZS0+bV92ZWN0b3JbaV0pIHsKICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9zdG9yYWdl
LT5tX2xlbmd0aCk7CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVu
Y3lDaGVjaykKLSAgICAgICAgICAgICAgICB2YWx1ZS0+dHlwZSgpOyAvLyBMaWtlbHkgdG8gY3Jh
c2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgICAgICAgICAgdmFsdWUu
aXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxs
b2NhdGVkLgogICAgICAgICAgICAgKytudW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQpAQCAtMTA2
NCw3ICsxMDg1LDcgQEAgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5
Q2hlY2tUeXBlIHR5cGUpCiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lO
REVYKTsKICAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKICAgICAgICAgICAgIGlmICh0
eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5z
ZWNvbmQtPnR5cGUoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxs
b2NhdGVkLgorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuaXNVbmRlZmluZWQoKTsgLy8gTGlr
ZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgogICAgICAgICB9CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmggYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCBmNjVmMmJjLi5iNmRkN2NjIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApAQCAtMjMsNiArMjMsOCBAQAogCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKIAorI2RlZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCisKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBKU1ZhbHVlPiBTcGFy
c2VBcnJheVZhbHVlTWFwOwpAQCAtMzMsMTYgKzM1LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOwogICAgICAgICB2b2lk
KiBzdWJjbGFzc0RhdGE7IC8vIEEgSlNBcnJheSBzdWJjbGFzcyBjYW4gdXNlIHRoaXMgdG8gZmls
bCB0aGUgdmVjdG9yIGxhemlseS4KICAgICAgICAgc2l6ZV90IHJlcG9ydGVkTWFwQ2FwYWNpdHk7
CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgYm9vbCBtX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uOworI2VuZGlmCiAgICAgICAgIEpTVmFsdWUgbV92ZWN0b3JbMV07CiAgICAg
fTsKIAorICAgIC8vIFRoZSBDcmVhdGVDb21wYWN0IGNyZWF0aW9uIG1vZGUgaXMgdXNlZCBmb3Ig
ZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzCisgICAgLy8gd2hvc2Ugc2l6ZSBhbmQgY29udGVu
dHMgYXJlIGtub3duIGF0IHRpbWUgb2YgY3JlYXRpb24uCisgICAgLy8KKyAgICAvLyBUaGVyZSBh
cmUgdHdvIG9ibGlnYXRpb25zIHdoZW4gdXNpbmcgdGhpcyBtb2RlOgorICAgIC8vCisgICAgLy8g
ICAtIHVuY2hlY2tlZFNldEluZGV4KCkgbXVzdCBiZSB1c2VkIHdoZW4gaW5pdGlhbGl6aW5nIHRo
ZSBhcnJheS4KKyAgICAvLyAgIC0gc2V0TGVuZ3RoKCkgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgaW5p
dGlhbGl6YXRpb24uCisKKyAgICBlbnVtIEFycmF5Q3JlYXRpb25Nb2RlIHsgQ3JlYXRlQ29tcGFj
dCwgQ3JlYXRlSW5pdGlhbGl6ZWQgfTsKKwogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNP
YmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgICAgICBmcmllbmQgY2xhc3Mg
V2Fsa2VyOwogCiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBKU0FycmF5KE5vbk51bGxQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4pOwotICAgICAgICBKU0FycmF5KE5vbk51bGxQYXNzUmVmUHRy
PFN0cnVjdHVyZT4sIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOworICAgICAgICBKU0FycmF5KE5v
bk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgsIEFycmF5
Q3JlYXRpb25Nb2RlKTsKICAgICAgICAgSlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+LCBjb25zdCBBcmdMaXN0JiBpbml0aWFsVmFsdWVzKTsKICAgICAgICAgdmlydHVhbCB+SlNB
cnJheSgpOwogCkBAIC04Myw2ICs5OCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHggPSB2OwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCB1bmNoZWNrZWRTZXRJbmRleCh1bnNp
Z25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJ
bmRleChpKSk7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgIEFTU0VS
VChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworI2VuZGlmCisgICAgICAg
ICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldID0gdjsKKyAgICAgICAgfQorCiAgICAgICAgIHZv
aWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAg
ICAgdm9pZCBjb3B5VG9SZWdpc3RlcnMoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqLCB1aW50MzJfdCk7
CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCAwOWE5MmExLi4x
MTVhZjg3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC00NTcs
NyArNDU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3Ry
dWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAg
ICAgewotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJh
eVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoLCBDcmVhdGVJbml0aWFsaXplZCk7CiAgICAgfQog
CiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBzaW5nbGVJdGVtVmFsdWUpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCmluZGV4IGZhMmExZTIuLmFmZjgzZTcgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgUmVnRXhw
Q29uc3RydWN0b3I6OlJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamUKIH0KIAogUmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVz
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqIGRhdGEpCi0g
ICAgOiBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwTWF0Y2hlc0Fy
cmF5U3RydWN0dXJlKCksIGRhdGEtPmxhc3ROdW1TdWJQYXR0ZXJucyArIDEpCisgICAgOiBKU0Fy
cmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0
dXJlKCksIGRhdGEtPmxhc3ROdW1TdWJQYXR0ZXJucyArIDEsIENyZWF0ZUluaXRpYWxpemVkKQog
ewogICAgIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSogZCA9IG5ldyBSZWdFeHBDb25zdHJ1Y3Rv
clByaXZhdGU7CiAgICAgZC0+aW5wdXQgPSBkYXRhLT5sYXN0SW5wdXQ7Cg==
</data>
<flag name="review"
          id="49450"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>