<?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>22717</bug_id>
          
          <creation_ts>2008-12-06 21:09:13 -0800</creation_ts>
          <short_desc>Make CSS values use less memory</short_desc>
          <delta_ts>2010-03-27 13:04:30 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>hyatt</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101707</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-06 21:09:13 -0800</bug_when>
    <thetext>CSS values have lots room for optimisation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101710</commentid>
    <comment_count>1</comment_count>
      <attachid>25827</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-06 22:07:25 -0800</bug_when>
    <thetext>Created attachment 25827
Get CSSValue off from StyleBase

Disabled (instead of refactoring around the lack of comon base) the ability to have style declaration blocks as CSS variable values. They don&apos;t exist in the spec so I wasn&apos;t sure if they have future or not. It would not be hard to get them back. CSS variabled are in any case an experimental feature and not enabled by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101760</commentid>
    <comment_count>2</comment_count>
      <attachid>25832</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-07 15:12:54 -0800</bug_when>
    <thetext>Created attachment 25832
share primitive value instances

A more stylish solution than sharing would be to turn CSSPrimitiveValue (or CSSValues in general) into non-virtual, non-refcounted simple type with value semantics. In practice these sharing tricks get similar memory benefits with less need for refactoring.

This does not directly depend on the previous patch (as the parent field of CSSValues is never used) thought it depends on it conceptually to facilitate sharing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101766</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-07 15:47:13 -0800</bug_when>
    <thetext>I seem to recall that there&apos;s no real need for the StyleBase base class in most cases; there is very little polymorphic use that&apos;s really needed. I did some research on this a while back and had a series of patches to eliminate StyleBase altogether, although my motivation was entirely theoretical and not practical memory use reduction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101767</commentid>
    <comment_count>4</comment_count>
      <attachid>25827</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-07 15:49:58 -0800</bug_when>
    <thetext>Comment on attachment 25827
Get CSSValue off from StyleBase

r=me

All those &quot;#if 0&quot; are a little ugly. I&apos;d almost prefer removing the code entirely. But I can live with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101771</commentid>
    <comment_count>5</comment_count>
      <attachid>25832</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-07 15:57:19 -0800</bug_when>
    <thetext>Comment on attachment 25832
share primitive value instances

&gt; +    // These are the empty and deleted values of the hash table.
&gt; +    static CSSPrimitiveValue* colorTransparent = new CSSPrimitiveValue(Color::transparent);
&gt; +    static CSSPrimitiveValue* colorWhite = new CSSPrimitiveValue(Color::white);
&gt; +    if (rgbValue == Color::transparent)
&gt; +        return colorTransparent;
&gt; +    if (rgbValue == Color::white)
&gt; +        return colorWhite;

The declarations could go inside the if statements. I think it would be slightly more elegant.

&gt; +    RefPtr&lt;CSSPrimitiveValue&gt; primitiveValue = colorValueCache-&gt;get(rgbValue);
&gt; +    if (primitiveValue)
&gt; +        return primitiveValue;

Saves one round of reference count churn if you return primitiveValue.release() in the various places you&apos;re returning a RefPtr, including this one.

&gt; +    primitiveValue = adoptRef(new CSSPrimitiveValue(rgbValue));
&gt; +    // Just wipe out the cache and start rebuilding when it gets too big.
&gt; +    const int maxColorCacheSize = 512;
&gt; +    if (colorValueCache-&gt;size() &gt; maxColorCacheSize)

This makes the name of the global a lie. You should use &quot;&gt;=&quot; if you really want it to be the max size.

&gt; +    const int maxCachedUnitType = CSS_PX;

The maxCachedUnitType thing here is subtle. I think you need a comment saying something about the fact that CSS_PX is the last one, and maybe even a comment where CSS_PX is defined telling about this dependency.

&gt; +    static RefPtr&lt;CSSPrimitiveValue&gt;(* integerValueCache)[maxCachedUnitType + 1] = new RefPtr&lt;CSSPrimitiveValue&gt;[cachedIntegerCount][maxCachedUnitType + 1];

A typedef would make this way easier to read.

&gt; +    int intValue;
&gt; +    if (type &lt;= CSS_PX &amp;&amp; value &gt;= 0 &amp;&amp; value &lt; cachedIntegerCount &amp;&amp; value == (intValue = (int)value)) {

We normally prefer C++ casts. But I&apos;m thinking that you might want to move that last check into a separate if statement just so you can do the assignment without doing a cast at all.

&gt; +    

I noticed some trailing spaces on some of the blank lines.

&gt; -    static PassRefPtr&lt;CSSPrimitiveValue&gt; create(const String&amp; value, UnitTypes type)
&gt; -    {
&gt; -        return adoptRef(new CSSPrimitiveValue(value, type));
&gt; -    }

Since you left this one alone, you could leave it in the header file. I don&apos;t have any strong feelings either way.

All my comments were quibbles, not real objections. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101774</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-07 17:36:07 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/css/CSSInitialValue.h
Sending        WebCore/css/CSSParser.cpp
Sending        WebCore/css/CSSParser.h
Sending        WebCore/css/CSSValue.h
Sending        WebCore/css/CSSVariablesDeclaration.cpp
Sending        WebCore/css/CSSVariablesDeclaration.h
Sending        WebCore/css/StyleBase.h
Transmitting file data ........
Committed revision 39086.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101775</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-07 17:36:28 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/css/CSSPrimitiveValue.cpp
Sending        WebCore/css/CSSPrimitiveValue.h
Transmitting file data ...
Committed revision 39088.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205040</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-03-27 13:04:30 -0700</bug_when>
    <thetext>This change caused bug 31223.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25827</attachid>
            <date>2008-12-06 22:07:25 -0800</date>
            <delta_ts>2008-12-07 15:49:58 -0800</delta_ts>
            <desc>Get CSSValue off from StyleBase</desc>
            <filename>cssom-memory-value-base.patch</filename>
            <type>text/plain</type>
            <size>9629</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTA3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDgtMTItMDYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzE3CisgICAg
ICAgIE1ha2UgQ1NTIHZhbHVlcyB1c2UgbGVzcyBtZW1vcnkKKworICAgICAgICBHZXQgQ1NTVmFs
dWVzIG9mZiBmcm9tIHRoZSBjb21tb24gU3R5bGVCYXNlIGJhc2UgY2xhc3MuIFRoZXkgZG9uJ3QK
KyAgICAgICAgbmVlZCBhIHBhcmVudCBwb2ludGVyIG9yIGFueXRoaW5nIGVsc2UgdGhlcmUgYW5k
IHRoZXJlIGlzIG5vIHJlYWwKKyAgICAgICAgcmVhc29uIHRvIGhhdmUgdGhlbSBpbiBzYW1lIGRh
dGEgc3RydWN0dXJlcyB3aXRoIG90aGVyIENTU09NIG9iamVjdHMuCisgICAgICAgIAorICAgICAg
ICBEaXNhYmxlZCAoaW5zdGVhZCBvZiByZWZhY3RvcmluZyBhcm91bmQgdGhlIGxhY2sgb2YgY29t
b24gYmFzZSkgdGhlIGFiaWxpdHkgCisgICAgICAgIHRvIGhhdmUgc3R5bGUgZGVjbGFyYXRpb24g
YmxvY2tzIGFzIENTUyB2YXJpYWJsZSB2YWx1ZXMuIFRoZXkgZG9uJ3QgZXhpc3QgaW4gCisgICAg
ICAgIHRoZSBzcGVjIHNvIEkgd2Fzbid0IHN1cmUgaWYgdGhleSBoYXZlIGZ1dHVyZSBvciBub3Qu
IEl0IHdvdWxkIG5vdCBiZSBoYXJkIHRvIAorICAgICAgICBnZXQgdGhlbSBiYWNrLiBDU1MgdmFy
aWFibGVkIGFyZSBpbiBhbnkgY2FzZSBhbiBleHBlcmltZW50YWwgZmVhdHVyZSBhbmQgCisgICAg
ICAgIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkVmFyaWFibGVEZWNsYXJhdGlvbkJs
b2NrKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6fkNTU1ZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1ZhbHVlOjpwYXJzZXJWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxl
c0RlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlc0RlY2xhcmF0
aW9uOjpDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJp
YWJsZXNEZWNsYXJhdGlvbjo6Z2V0VmFyaWFibGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NWYXJpYWJsZXNEZWNsYXJhdGlvbjo6cmVtb3ZlVmFyaWFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVmFyaWFibGVzRGVjbGFyYXRpb246OmFkZFBhcnNlZFZhcmlhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uOjpnZXRQYXJzZWRWYXJpYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbjo6Z2V0UGFyc2VkVmFyaWFi
bGVEZWNsYXJhdGlvbkJsb2NrKToKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVzRGVjbGFyYXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uOjpjcmVhdGUp
OgorCiAyMDA4LTEyLTA2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24g
MzkwNzcpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTk4LDcgKzQ1OTgsOCBAQCBib29sIENTU1BhcnNlcjo6YWRkVmFyaWFibGUoY29uc3QgQ1NTUGFy
CiAKIGJvb2wgQ1NTUGFyc2VyOjphZGRWYXJpYWJsZURlY2xhcmF0aW9uQmxvY2soY29uc3QgQ1NT
UGFyc2VyU3RyaW5nJiBuYW1lKQogewotI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQorLy8gRklY
TUU6IERpc2FibGluZyBkZWNsYXJhdGlvbnMgYXMgdmFyaWFibGUgdmFsdWVzIGZvciBub3cgc2lu
Y2UgdGhleSBubyBsb25nZXIgaGF2ZSBhIGNvbW1vbiBiYXNlIGNsYXNzIHdpdGggQ1NTVmFsdWVz
LgorI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKSAmJiAwCiAgICAgbV92YXJpYWJsZU5hbWVzLmFw
cGVuZChTdHJpbmcobmFtZSkpOwogICAgIG1fdmFyaWFibGVWYWx1ZXMuYXBwZW5kKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoMCwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBh
cnNlZFByb3BlcnRpZXMpKTsKICAgICBjbGVhclByb3BlcnRpZXMoKTsKSW5kZXg6IFdlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShy
ZXZpc2lvbiAzOTA3NykKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTAsNyArMjEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1f
aGFzRm9udEZhY2VPbmx5VmFsdWVzOwogCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fdmFyaWFi
bGVOYW1lczsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZUJhc2U+ID4gbV92YXJpYWJsZVZh
bHVlczsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxDU1NWYWx1ZT4gPiBtX3ZhcmlhYmxlVmFsdWVz
OwogCiAgICAgICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1lc3BhY2U7CiAKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTVmFsdWUu
aAkocmV2aXNpb24gMzkwNzcpCisrKyBXZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKIAotY2xhc3MgQ1NTVmFsdWUgOiBwdWJsaWMgU3R5bGVCYXNlIHsKK2Ns
YXNzIENTU1ZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTVmFsdWU+IHsKIHB1YmxpYzoKICAg
ICAvLyBGSVhNRTogQ2hhbmdlIG5hbWUgdG8gVHlwZS4KICAgICBlbnVtIFVuaXRUeXBlcyB7CkBA
IC00MSw2ICs0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTX0lOSVRJQUwgPSA0CiAgICAgfTsK
IAorICAgIHZpcnR1YWwgfkNTU1ZhbHVlKCkgeyB9CisKICAgICAvLyBGSVhNRTogQ2hhbmdlIHRo
aXMgdG8gcmV0dXJuIFVuaXRUeXBlcy4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1Zh
bHVlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENTU19DVVNUT007IH0KIApAQCAtNjMsOSArNjUsNiBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIENTU1BhcnNlclZhbHVlIHBhcnNl
clZhbHVlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIENTU1BhcnNlclZh
bHVlKCk7IH0KLQotcHJvdGVjdGVkOgotICAgIENTU1ZhbHVlKCkgOiBTdHlsZUJhc2UoMCkgeyB9
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NWYXJp
YWJsZXNEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTVmFyaWFi
bGVzRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAzOTA3NykKKysrIFdlYkNvcmUvY3NzL0NTU1Zh
cmlhYmxlc0RlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uOjpDU1NWYXJp
YWJsZXNEZWNsYXJhdGlvbihTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IG5hbWVzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlQmFzZT4gPiYgdmFsdWVzKQorQ1NTVmFy
aWFibGVzRGVjbGFyYXRpb246OkNTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uKFN0eWxlQmFzZSogcGFy
ZW50LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
VmFsdWU+ID4mIHZhbHVlcykKICAgICA6IFN0eWxlQmFzZShwYXJlbnQpCiB7CiAgICAgbV92YXJp
YWJsZU5hbWVzID0gbmFtZXM7CkBAIC01MCw3ICs1MCw3IEBAIENTU1ZhcmlhYmxlc0RlY2xhcmF0
aW9uOjp+Q1NTVmFyaWFibGVzRGUKIAogU3RyaW5nIENTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uOjpn
ZXRWYXJpYWJsZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKQogewotICAgIFN0eWxl
QmFzZSogdmFsID0gbV92YXJpYWJsZXNNYXAuZ2V0KHZhcmlhYmxlTmFtZSkuZ2V0KCk7CisgICAg
Q1NTVmFsdWUqIHZhbCA9IG1fdmFyaWFibGVzTWFwLmdldCh2YXJpYWJsZU5hbWUpLmdldCgpOwog
ICAgIGlmICh2YWwpCiAgICAgICAgIHJldHVybiB2YWwtPmNzc1RleHQoKTsKICAgICByZXR1cm4g
IiI7CkBAIC02MCw3ICs2MCw3IEBAIFN0cmluZyBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbjo6cmVt
b3ZlVmEKIHsKICAgICAvLyBGSVhNRTogVGhlIHNwZWMgaGFzIHRoaXMgbWV0aG9kIHRha2luZyBh
biBleGNlcHRpb24gY29kZSBidXQgbm8gZXhjZXB0aW9ucyBhcmUKICAgICAvLyBzcGVjaWZpZWQg
YXMgYmVpbmcgdGhyb3duLgotICAgIFJlZlB0cjxTdHlsZUJhc2U+IHZhbCA9IG1fdmFyaWFibGVz
TWFwLnRha2UodmFyaWFibGVOYW1lKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbCA9IG1fdmFy
aWFibGVzTWFwLnRha2UodmFyaWFibGVOYW1lKTsKICAgICBTdHJpbmcgcmVzdWx0ID0gdmFsID8g
dmFsLT5jc3NUZXh0KCkgOiAiIjsKICAgICBpZiAodmFsKSB7CiAgICAgICAgIGludCBzID0gbV92
YXJpYWJsZU5hbWVzLnNpemUoKTsKQEAgLTg5LDEzICs4OSwxNiBAQCB2b2lkIENTU1ZhcmlhYmxl
c0RlY2xhcmF0aW9uOjpzZXRWYXJpYWJsCiAgICAgICAgIHNldENoYW5nZWQoKTsKIH0KIAotdm9p
ZCBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbjo6YWRkUGFyc2VkVmFyaWFibGUoY29uc3QgU3RyaW5n
JiB2YXJpYWJsZU5hbWUsIFBhc3NSZWZQdHI8U3R5bGVCYXNlPiB2YXJpYWJsZVZhbHVlLCBib29s
IHVwZGF0ZU5hbWVzTGlzdCkKK3ZvaWQgQ1NTVmFyaWFibGVzRGVjbGFyYXRpb246OmFkZFBhcnNl
ZFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiB2YXJpYWJsZVZhbHVlLCBib29sIHVwZGF0ZU5hbWVzTGlzdCkKIHsKKy8vIEZJWE1FOiBEaXNh
YmxpbmcgZGVjbGFyYXRpb25zIGFzIHZhcmlhYmxlIHZhbHVlcyBmb3Igbm93IHNpbmNlIHRoZXkg
bm8gbG9uZ2VyIGhhdmUgYSBjb21tb24gYmFzZSBjbGFzcyB3aXRoIENTU1ZhbHVlcy4KKyNpZiAw
CiAgICAgdmFyaWFibGVWYWx1ZS0+c2V0UGFyZW50KHRoaXMpOyAvLyBOZWVkZWQgdG8gY29ubmVj
dCB2YXJpYWJsZXMgdGhhdCBhcmUgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25zLCBzaW5jZSB0
aGUgcGFyZW50IGNvdWxkbid0IGJlIHNldCB1bnRpbCBub3cuCisjZW5kaWYKIAogICAgIC8vIERv
bid0IGxlYWsgZHVwbGljYXRlcy4gIEZvciBtdWx0aXBsZSB2YXJpYWJsZXMgd2l0aCB0aGUgc2Ft
ZSBuYW1lLCB0aGUgbGFzdCBvbmUKICAgICAvLyBkZWNsYXJlZCB3aWxsIHdpbi4KLSAgICBTdHls
ZUJhc2UqIGN1cnJlbnQgPSBtX3ZhcmlhYmxlc01hcC50YWtlKHZhcmlhYmxlTmFtZSkuZ2V0KCk7
CisgICAgQ1NTVmFsdWUqIGN1cnJlbnQgPSBtX3ZhcmlhYmxlc01hcC50YWtlKHZhcmlhYmxlTmFt
ZSkuZ2V0KCk7CiAgICAgaWYgKCFjdXJyZW50ICYmIHVwZGF0ZU5hbWVzTGlzdCkKICAgICAgICAg
bV92YXJpYWJsZU5hbWVzLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwogICAgIG1fdmFyaWFibGVzTWFw
LnNldCh2YXJpYWJsZU5hbWUsIHZhcmlhYmxlVmFsdWUpOwpAQCAtMTA1LDcgKzEwOCw3IEBAIHZv
aWQgQ1NTVmFyaWFibGVzRGVjbGFyYXRpb246OmFkZFBhcnNlZFYKIAogQ1NTVmFsdWVMaXN0KiBD
U1NWYXJpYWJsZXNEZWNsYXJhdGlvbjo6Z2V0UGFyc2VkVmFyaWFibGUoY29uc3QgU3RyaW5nJiB2
YXJpYWJsZU5hbWUpCiB7Ci0gICAgU3R5bGVCYXNlKiByZXN1bHQgPSBtX3ZhcmlhYmxlc01hcC5n
ZXQodmFyaWFibGVOYW1lKS5nZXQoKTsKKyAgICBDU1NWYWx1ZSogcmVzdWx0ID0gbV92YXJpYWJs
ZXNNYXAuZ2V0KHZhcmlhYmxlTmFtZSkuZ2V0KCk7CiAgICAgaWYgKHJlc3VsdC0+aXNWYWx1ZUxp
c3QoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHJlc3VsdCk7
CiAgICAgcmV0dXJuIDA7CkBAIC0xMTMsOSArMTE2LDEzIEBAIENTU1ZhbHVlTGlzdCogQ1NTVmFy
aWFibGVzRGVjbGFyYXRpb246OmcKIAogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIENTU1Zh
cmlhYmxlc0RlY2xhcmF0aW9uOjpnZXRQYXJzZWRWYXJpYWJsZURlY2xhcmF0aW9uQmxvY2soY29u
c3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpCiB7CisvLyBGSVhNRTogRGlzYWJsaW5nIGRlY2xhcmF0
aW9ucyBhcyB2YXJpYWJsZSB2YWx1ZXMgZm9yIG5vdyBzaW5jZSB0aGV5IG5vIGxvbmdlciBoYXZl
IGEgY29tbW9uIGJhc2UgY2xhc3Mgd2l0aCBDU1NWYWx1ZXMuCisjaWYgMAogICAgIFN0eWxlQmFz
ZSogcmVzdWx0ID0gbV92YXJpYWJsZXNNYXAuZ2V0KHZhcmlhYmxlTmFtZSkuZ2V0KCk7CisKICAg
ICBpZiAocmVzdWx0LT5pc011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkpCiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KHJlc3VsdCk7CisjZW5k
aWYKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVzRGVj
bGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZXNEZWNsYXJh
dGlvbi5oCShyZXZpc2lvbiAzOTA3NykKKysrIFdlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlc0RlY2xh
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxMiBAQCB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNz
IENTU1J1bGU7CitjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKIAogY2xhc3Mg
Q1NTVmFyaWFibGVzRGVjbGFyYXRpb24gOiBwdWJsaWMgU3R5bGVCYXNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbj4gY3JlYXRlKFN0eWxl
QmFzZSogb3duaW5nUnVsZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG5hbWVzLCBjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlQmFzZT4gPiYgdmFsdWVzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENT
U1ZhcmlhYmxlc0RlY2xhcmF0aW9uPiBjcmVhdGUoU3R5bGVCYXNlKiBvd25pbmdSdWxlLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTVmFsdWU+ID4m
IHZhbHVlcykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTVmFyaWFibGVz
RGVjbGFyYXRpb24ob3duaW5nUnVsZSwgbmFtZXMsIHZhbHVlcykpOwogICAgIH0KQEAgLTYxLDE5
ICs2MiwxOSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKICAgICB2b2lk
IHNldENzc1RleHQoY29uc3QgU3RyaW5nJik7IC8vIEZJWE1FOiBUaGUgc3BlYyBjb250cmFkaWN0
cyBpdHNlbGYgcmVnYXJkaW5nIHdoZXRoZXIgb3Igbm90IGNzc1RleHQgaXMgc2V0dGFibGUuCiAK
LSAgICB2b2lkIGFkZFBhcnNlZFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBQ
YXNzUmVmUHRyPFN0eWxlQmFzZT4gdmFyaWFibGVWYWx1ZSwgYm9vbCB1cGRhdGVOYW1lc0xpc3Qg
PSB0cnVlKTsKKyAgICB2b2lkIGFkZFBhcnNlZFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgdmFyaWFi
bGVOYW1lLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YXJpYWJsZVZhbHVlLCBib29sIHVwZGF0ZU5h
bWVzTGlzdCA9IHRydWUpOwogICAgIAogICAgIENTU1ZhbHVlTGlzdCogZ2V0UGFyc2VkVmFyaWFi
bGUoY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpOwogICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBnZXRQYXJzZWRWYXJpYWJsZURlY2xhcmF0aW9uQmxvY2soY29uc3QgU3RyaW5nJiB2
YXJpYWJsZU5hbWUpOwogCiBwcml2YXRlOgotICAgIENTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uKFN0
eWxlQmFzZSogb3duaW5nUnVsZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG5hbWVzLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlQmFzZT4gPiYgdmFsdWVzKTsKKyAgICBDU1NWYXJpYWJsZXNEZWNs
YXJhdGlvbihTdHlsZUJhc2UqIG93bmluZ1J1bGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBuYW1l
cywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NWYWx1ZT4gPiYgdmFsdWVzKTsKIAogICAgIHZvaWQg
c2V0Q2hhbmdlZCgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVmVjdG9yPFN0cmluZz4gbV92YXJpYWJs
ZU5hbWVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8U3R5bGVCYXNlPiA+IG1fdmFyaWFi
bGVzTWFwOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q1NTVmFsdWU+ID4gbV92YXJpYWJs
ZXNNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9T
dHlsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAkocmV2aXNp
b24gMzkwNzcpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNyArNjAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owo=
</data>
<flag name="review"
          id="12107"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25832</attachid>
            <date>2008-12-07 15:12:54 -0800</date>
            <delta_ts>2008-12-07 15:57:19 -0800</delta_ts>
            <desc>share primitive value instances</desc>
            <filename>cssom-memory-value-primitive.patch</filename>
            <type>text/plain</type>
            <size>5766</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTA4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDgtMTItMDcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNworICAgICAgICBNYWtl
IENTUyB2YWx1ZXMgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIAorICAgICAgICBTaGFyZSBDU1NQ
cmltaXRpdmVWYWx1ZSBvYmplY3RzIGZvciBjb21tb25seSB1c2VkIHZhbHVlcyBpbmNsdWRpbmcK
KyAgICAgICAgLSBpZGVudHMKKyAgICAgICAgLSBjb2xvcnMKKyAgICAgICAgLSBzbWFsbCBpbnRl
Z2VycworICAgICAgICAKKyAgICAgICAgVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgQ1NTUHJpbWl0
aXZlVmFsdWUgaW5zdGFuY2VzIGJ5ID4gODAlLgorCisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUpOgorCiAyMDA4LTEyLTA3ICBEaXJrIFNjaHVsemUgIDxrcml0
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAzOTA3NykKKysrIFdlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNzEgQEAg
dXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBBIG1vcmUg
c3R5bGlzaCBzb2x1dGlvbiB0aGFuIHNoYXJpbmcgd291bGQgYmUgdG8gdHVybiBDU1NQcmltaXRp
dmVWYWx1ZSAob3IgQ1NTVmFsdWVzIGluIGdlbmVyYWwpIGludG8gbm9uLXZpcnR1YWwsCisvLyBu
b24tcmVmY291bnRlZCBzaW1wbGUgdHlwZSB3aXRoIHZhbHVlIHNlbWFudGljcy4gSW4gcHJhY3Rp
Y2UgdGhlc2Ugc2hhcmluZyB0cmlja3MgZ2V0IHNpbWlsYXIgbWVtb3J5IGJlbmVmaXRzIAorLy8g
d2l0aCBsZXNzIG5lZWQgZm9yIHJlZmFjdG9yaW5nLgorCitQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpbnQgaWRlbnQpCit7
CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4qIGlkZW50VmFsdWVDYWNoZSA9
IG5ldyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+W251bUNTU1ZhbHVlS2V5d29yZHNdOworICAg
IGlmIChpZGVudCA+PSAwICYmIGlkZW50IDwgbnVtQ1NTVmFsdWVLZXl3b3JkcykgeworICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlOworICAgICAgICBpZiAo
IShwcmltaXRpdmVWYWx1ZSA9IGlkZW50VmFsdWVDYWNoZVtpZGVudF0pKSB7CisgICAgICAgICAg
ICBwcmltaXRpdmVWYWx1ZSA9IGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1ZShpZGVudCkp
OworICAgICAgICAgICAgaWRlbnRWYWx1ZUNhY2hlW2lkZW50XSA9IHByaW1pdGl2ZVZhbHVlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZTsKKyAgICB9IAorICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoaWRlbnQpKTsKK30KKyAgICAKK1Bh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xv
cih1bnNpZ25lZCByZ2JWYWx1ZSkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDx1bnNpZ25lZCwgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiA+KiBjb2xvclZhbHVlQ2FjaGUgPSBuZXcgSGFzaE1hcDx1
bnNpZ25lZCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiA+OworICAgIC8vIFRoZXNlIGFyZSB0
aGUgZW1wdHkgYW5kIGRlbGV0ZWQgdmFsdWVzIG9mIHRoZSBoYXNoIHRhYmxlLgorICAgIHN0YXRp
YyBDU1NQcmltaXRpdmVWYWx1ZSogY29sb3JUcmFuc3BhcmVudCA9IG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0YXRpYyBDU1NQcmltaXRpdmVWYWx1ZSog
Y29sb3JXaGl0ZSA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDb2xvcjo6d2hpdGUpOworICAgIGlm
IChyZ2JWYWx1ZSA9PSBDb2xvcjo6dHJhbnNwYXJlbnQpCisgICAgICAgIHJldHVybiBjb2xvclRy
YW5zcGFyZW50OworICAgIGlmIChyZ2JWYWx1ZSA9PSBDb2xvcjo6d2hpdGUpCisgICAgICAgIHJl
dHVybiBjb2xvcldoaXRlOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZl
VmFsdWUgPSBjb2xvclZhbHVlQ2FjaGUtPmdldChyZ2JWYWx1ZSk7CisgICAgaWYgKHByaW1pdGl2
ZVZhbHVlKQorICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWU7CisgICAgcHJpbWl0aXZlVmFs
dWUgPSBhZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocmdiVmFsdWUpKTsKKyAgICAvLyBK
dXN0IHdpcGUgb3V0IHRoZSBjYWNoZSBhbmQgc3RhcnQgcmVidWlsZGluZyB3aGVuIGl0IGdldHMg
dG9vIGJpZy4KKyAgICBjb25zdCBpbnQgbWF4Q29sb3JDYWNoZVNpemUgPSA1MTI7CisgICAgaWYg
KGNvbG9yVmFsdWVDYWNoZS0+c2l6ZSgpID4gbWF4Q29sb3JDYWNoZVNpemUpCisgICAgICAgIGNv
bG9yVmFsdWVDYWNoZS0+Y2xlYXIoKTsKKyAgICBjb2xvclZhbHVlQ2FjaGUtPmFkZChyZ2JWYWx1
ZSwgcHJpbWl0aXZlVmFsdWUpOworICAgIAorICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZTsKK30K
KworUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShkb3VibGUgdmFsdWUsIFVuaXRUeXBlcyB0eXBlKQoreworICAgIC8vIFNtYWxsIGludGVnZXJz
IGFyZSB2ZXJ5IGNvbW1vbi4gVHJ5IHRvIHNoYXJlIHRoZW0uCisgICAgY29uc3QgaW50IGNhY2hl
ZEludGVnZXJDb3VudCA9IDEyODsKKyAgICBjb25zdCBpbnQgbWF4Q2FjaGVkVW5pdFR5cGUgPSBD
U1NfUFg7CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4oKiBpbnRlZ2VyVmFs
dWVDYWNoZSlbbWF4Q2FjaGVkVW5pdFR5cGUgKyAxXSA9IG5ldyBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+W2NhY2hlZEludGVnZXJDb3VudF1bbWF4Q2FjaGVkVW5pdFR5cGUgKyAxXTsKKyAgICBp
bnQgaW50VmFsdWU7CisgICAgaWYgKHR5cGUgPD0gQ1NTX1BYICYmIHZhbHVlID49IDAgJiYgdmFs
dWUgPCBjYWNoZWRJbnRlZ2VyQ291bnQgJiYgdmFsdWUgPT0gKGludFZhbHVlID0gKGludCl2YWx1
ZSkpIHsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZTsK
KyAgICAgICAgaWYgKCEocHJpbWl0aXZlVmFsdWUgPSBpbnRlZ2VyVmFsdWVDYWNoZVtpbnRWYWx1
ZV1bdHlwZV0pKSB7CisgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IGFkb3B0UmVmKG5ldyBD
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgdHlwZSkpOworICAgICAgICAgICAgaW50ZWdlclZhbHVl
Q2FjaGVbaW50VmFsdWVdW3R5cGVdID0gcHJpbWl0aXZlVmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUsIHR5cGUpKTsKK30KKyAgICAKK1Bhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSwgVW5pdFR5cGVzIHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQ
cmltaXRpdmVWYWx1ZSh2YWx1ZSwgdHlwZSkpOworfQorCiBzdGF0aWMgY29uc3QgY2hhciogdmFs
dWVPclByb3BlcnR5TmFtZShpbnQgdmFsdWVPclByb3BlcnR5SUQpCiB7CiAgICAgaWYgKGNvbnN0
IGNoYXIqIHZhbHVlTmFtZSA9IGdldFZhbHVlTmFtZSh2YWx1ZU9yUHJvcGVydHlJRCkpCkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHJldmlzaW9uIDM5MDc3KQorKysgV2ViQ29yZS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMjYgKzgyLDE1IEBAIHB1
YmxpYzoKICAgICAgICAgQ1NTX1RVUk4gPSAxMDgKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZUlkZW50aWZpZXIoaW50IGlkZW50KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1ZShpZGVudCkp
OwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRl
Q29sb3IodW5zaWduZWQgcmdiVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJnYlZhbHVlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVJZGVudGlmaWVyKGludCBpZGVudCk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZUNvbG9yKHVuc2ln
bmVkIHJnYlZhbHVlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y3JlYXRlKGRvdWJsZSB2YWx1ZSwgVW5pdFR5cGVzIHR5cGUpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgVW5pdFR5
cGVzIHR5cGUpOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpKTsKICAgICB9Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUs
IFVuaXRUeXBlcyB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQ
cmltaXRpdmVWYWx1ZSh2YWx1ZSwgdHlwZSkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmFsdWUsIFVuaXRUeXBl
cyB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSwgdHlwZSkpOwotICAgIH0KIAogICAgIHZpcnR1YWwgfkNTU1ByaW1pdGl2ZVZh
bHVlKCk7CiAK
</data>
<flag name="review"
          id="12111"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>