<?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>50971</bug_id>
          
          <creation_ts>2010-12-13 14:08:21 -0800</creation_ts>
          <short_desc>Combine setShadowRoot and clearShadowRoot into a simpler API</short_desc>
          <delta_ts>2010-12-28 10:56:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          <blocked>44907</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>321396</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-12-13 14:08:21 -0800</bug_when>
    <thetext>There&apos;s no need to have clearShadowHost, setShadowHost(0) should just do it, since it always needs to clean up previous value anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321453</commentid>
    <comment_count>1</comment_count>
      <attachid>76446</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-12-13 14:57:52 -0800</bug_when>
    <thetext>Created attachment 76446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321680</commentid>
    <comment_count>2</comment_count>
      <attachid>76446</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-13 22:12:01 -0800</bug_when>
    <thetext>Comment on attachment 76446
Patch

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

&gt; WebCore/ChangeLog:5
&gt; +        Combine setShadowHost and clearShadowHost into a simpler API

You mean setShadowRoot and clearShadowRoot, right?

&gt; WebCore/dom/Element.cpp:1093
&gt; +    } else if (!newRoot)

I think this else is wrong.

&gt; WebCore/dom/Element.cpp:1097
&gt; +    newRoot-&gt;setShadowHost(this);

If hasRareData was true and newRoot is a null pointer, then we’ll dereference the null pointer here.

&gt; WebCore/dom/Node.h:220
&gt; +    Element* shadowHost() const;
&gt; +    void setShadowHost(Element*);

Why are you making these member functions public? Seems unrelated to the rest of the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322053</commentid>
    <comment_count>3</comment_count>
      <attachid>76446</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-12-14 11:08:40 -0800</bug_when>
    <thetext>Comment on attachment 76446
Patch

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

Thanks for the review! New patch coming up.

&gt;&gt; WebCore/dom/Element.cpp:1093
&gt;&gt; +    } else if (!newRoot)
&gt; 
&gt; I think this else is wrong.

You&apos;re right! I don&apos;t know what I&apos;ve been drinking last night.

&gt;&gt; WebCore/dom/Element.cpp:1097
&gt;&gt; +    newRoot-&gt;setShadowHost(this);
&gt; 
&gt; If hasRareData was true and newRoot is a null pointer, then we’ll dereference the null pointer here.

Yup. My &quot;else&quot; above was enabling this to happen.

&gt;&gt; WebCore/dom/Node.h:220
&gt;&gt; +    void setShadowHost(Element*);
&gt; 
&gt; Why are you making these member functions public? Seems unrelated to the rest of the patch?

Because I need to use setShadowHost() from Element::setShadowRoot() and thought I might as well bring shadowHost() out with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322054</commentid>
    <comment_count>4</comment_count>
      <attachid>76548</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-12-14 11:11:57 -0800</bug_when>
    <thetext>Created attachment 76548
Now with less confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322857</commentid>
    <comment_count>5</comment_count>
      <attachid>76548</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-15 15:22:48 -0800</bug_when>
    <thetext>Comment on attachment 76548
Now with less confusion.

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

&gt; WebCore/dom/Element.cpp:1093
&gt; +        if (RefPtr&lt;Node&gt; oldRoot = rareData()-&gt;m_shadowRoot.release()) {
&gt; +            document()-&gt;removeFocusedNodeOfSubtree(oldRoot.get());
&gt; +            oldRoot-&gt;setShadowHost(0);
&gt; +            if (oldRoot-&gt;inDocument())
&gt; +                oldRoot-&gt;removedFromDocument();
&gt; +            else
&gt; +                oldRoot-&gt;removedFromTree(true);

This feels like a helper method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323224</commentid>
    <comment_count>6</comment_count>
      <attachid>76776</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-12-16 09:39:05 -0800</bug_when>
    <thetext>Created attachment 76776
With more clarity in code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326634</commentid>
    <comment_count>7</comment_count>
      <attachid>76776</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-24 09:05:48 -0800</bug_when>
    <thetext>Comment on attachment 76776
With more clarity in code.

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

Seems OK to me.

&gt; WebCore/dom/Element.cpp:1087
&gt; +    // FIXME: Because today this is never called from script directly, we don&apos;t have to worry
&gt; +    // about compromising DOM tree integrity (eg. node being a parent of this). However,
&gt; +    // once we implement XBL2, we will have to add integrity checks here.

Can we ASSERT here instead of just a FIXME?  I&apos;m not sure what we&apos;d ASSERT though...

&gt; WebCore/dom/Element.cpp:1089
&gt; +    RefPtr&lt;Node&gt; newRoot = node;

I&apos;m not sure why you use the newRoot here.  We don&apos;t really need the extra ref.  Maybe Darin asked you to use a local RefPtr?

&gt; WebCore/dom/Element.cpp:1093
&gt; +    ensureRareData()-&gt;m_shadowRoot = newRoot;

You could just assign it here w/o the check, no?

&gt; WebCore/dom/Element.cpp:1094
&gt; +    newRoot-&gt;setShadowHost(this);

Then you would check ensureRareData()-&gt;m_shadowRoot before calling ensureRareData()-&gt;m_shadowRoot-&gt;setShadowHost(this)?

Donno.  Your current setup is fine too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327244</commentid>
    <comment_count>8</comment_count>
      <attachid>76776</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-12-28 09:06:30 -0800</bug_when>
    <thetext>Comment on attachment 76776
With more clarity in code.

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

Cq to the resQUE! :)

&gt;&gt; WebCore/dom/Element.cpp:1089
&gt;&gt; +    RefPtr&lt;Node&gt; newRoot = node;
&gt; 
&gt; I&apos;m not sure why you use the newRoot here.  We don&apos;t really need the extra ref.  Maybe Darin asked you to use a local RefPtr?

Yeah, I could&apos;ve danced around this with just using node.get() when assigning m_shadowRoot to avoid PassRefPtr derefing. But I generally don&apos;t like using PassRefPtrs for doing anything other than passing :)

&gt;&gt; WebCore/dom/Element.cpp:1093
&gt;&gt; +    ensureRareData()-&gt;m_shadowRoot = newRoot;
&gt; 
&gt; You could just assign it here w/o the check, no?

No, because ensureRareData always creates a new ElementRareData, which is not necessary if newRoot is 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327264</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-28 10:54:30 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 76776:

fast/workers/storage/use-same-database-in-page-and-workers.html bug 50995 (author: dumi@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327265</commentid>
    <comment_count>10</comment_count>
      <attachid>76776</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-28 10:55:57 -0800</bug_when>
    <thetext>Comment on attachment 76776
With more clarity in code.

Clearing flags on attachment: 76776

Committed r74715: &lt;http://trac.webkit.org/changeset/74715&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327266</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-28 10:56:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76446</attachid>
            <date>2010-12-13 14:57:52 -0800</date>
            <delta_ts>2010-12-14 11:11:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50971-20101213145750.patch</filename>
            <type>text/plain</type>
            <size>3750</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTlhNTU0OTQ1ZGQ3ZWFlODRhNGM5ZmM1NGRjODU1ZGQyNThkMzk0Yi4uNzI3NjUxYzU0NGU0MDdj
YjU0YzYxM2NjYWNkNjYwY2I2MjI3ZDkxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMi0xMyAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbWJpbmUgc2V0U2hhZG93SG9zdCBhbmQg
Y2xlYXJTaGFkb3dIb3N0IGludG8gYSBzaW1wbGVyIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA5NzEKKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIGFuZCBBUEkgaXMgbm90IHVzZWQgeWV0LgorCisgICAgICAgICogZG9tL0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2hhZG93Um9vdCk6IENvbWJp
bmVkIGNsZWFyaW5nIGFuZCBzZXR0aW5nIG9mCisgICAgICAgICAgICB0aGUgc2hhZG93Um9vdCwg
YWxzbyBob29rZWQgdXAgd2l0aCBzZXR0aW5nIGFuZCBjbGVhcmluZyBvZiB0aGUKKyAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmcgc2hhZG93SG9zdCB2YWx1ZXMuCisgICAgICAgICogZG9tL0VsZW1l
bnQuaDogcmVtb3ZlZCBjbGVhclNoYWRvd1Jvb3QgZGVmLgorICAgICAgICAqIGRvbS9Ob2RlLmg6
IE1hZGUgc2hhZG93IGhvc3QtcmVsYXRlZCBmdW5jdGlvbnMgcHVibGljLgorCiAyMDEwLTEyLTEz
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeCBhZnRlciByNzM4NDAuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcCBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDhlNjMzYWE1ZTQ0YWQzYzky
MzE1MDE5MjBkMmU5Y2ZiZTc0OGYxMmIuLmIyNjhkM2E3ZWM0MDgyNTc0ZWNiMmE5YmNjZGM5YWY0
NDk0ZTU3ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMDgwLDI0ICsxMDgwLDIxIEBAIE5vZGUqIEVsZW1lbnQ6
OnNoYWRvd1Jvb3QoKQogCiB2b2lkIEVsZW1lbnQ6OnNldFNoYWRvd1Jvb3QoUGFzc1JlZlB0cjxO
b2RlPiBub2RlKQogewotICAgIEFTU0VSVChub2RlKTsKLQotICAgIC8vIEZJWE1FOiBPbmNlIGFs
bCBpbnN0YW5jZXMgb2Ygc2hhZG93IERPTSBhcmUgY29udmVydGVkIHRvIHVzZSB0aGlzIGNvZGUs
IGFkZCBzZXR0aW5nIG9mIHNoYWRvdyBob3N0IChzaGFkb3dQYXJlbnQpIG9uIG5vZGUuCi0gICAg
ZW5zdXJlUmFyZURhdGEoKS0+bV9zaGFkb3dSb290ID0gbm9kZTsKLX0KLQotdm9pZCBFbGVtZW50
OjpjbGVhclNoYWRvd1Jvb3QoKQotewotICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICBSZWZQ
dHI8Tm9kZT4gbmV3Um9vdCA9IG5vZGU7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsKKyAgICAg
ICAgaWYgKFJlZlB0cjxOb2RlPiBvbGRSb290ID0gcmFyZURhdGEoKS0+bV9zaGFkb3dSb290LnJl
bGVhc2UoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1
YnRyZWUob2xkUm9vdC5nZXQoKSk7CisgICAgICAgICAgICBvbGRSb290LT5zZXRTaGFkb3dIb3N0
KDApOworICAgICAgICAgICAgaWYgKG9sZFJvb3QtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICBvbGRSb290LT5yZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgb2xkUm9vdC0+cmVtb3ZlZEZyb21UcmVlKHRydWUpOworICAgICAgICB9
CisgICAgfSBlbHNlIGlmICghbmV3Um9vdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRy
PE5vZGU+IHNoYWRvd1Jvb3QgPSByYXJlRGF0YSgpLT5tX3NoYWRvd1Jvb3QucmVsZWFzZSgpOwot
ICAgIGRvY3VtZW50KCktPnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKHNoYWRvd1Jvb3QuZ2V0
KCkpOwotICAgIC8vIEZJWE1FOiBPbmNlIGFsbCBpbnN0YW5jZXMgb2Ygc2hhZG93IERPTSBhcmUg
Y29udmVydGVkIHRvIHVzZSB0aGlzIGNvZGUsIGFkZCBjbGVhcmluZyBvZiBzaGFkb3cgaG9zdCAo
c2hhZG93UGFyZW50KS4KLSAgICBpZiAoc2hhZG93Um9vdC0+aW5Eb2N1bWVudCgpKQotICAgICAg
ICBzaGFkb3dSb290LT5yZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgZWxzZQotICAgICAgICBz
aGFkb3dSb290LT5yZW1vdmVkRnJvbVRyZWUodHJ1ZSk7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+
bV9zaGFkb3dSb290ID0gbmV3Um9vdDsKKyAgICBuZXdSb290LT5zZXRTaGFkb3dIb3N0KHRoaXMp
OwogfQogCiBib29sIEVsZW1lbnQ6OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUgdHlwZSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApp
bmRleCA4NDMyZjgyNWViN2ZmZTJkMWZlYmViMDU1YTUxMzYyZmFiOTZhZDMxLi44Njg4NWJmODVm
MWFlYjYwOTIxZjg2OTE0ZjQzMWI5NzZlZmQ1YzgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yMjcsNyArMjI3LDYgQEAg
cHVibGljOgogCiAgICAgTm9kZSogc2hhZG93Um9vdCgpOwogICAgIHZvaWQgc2V0U2hhZG93Um9v
dChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lkIGNsZWFyU2hhZG93Um9vdCgpOwogCiAgICAg
UmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETyk7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuaCBiL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCAwODgx
ZjA4MDYwMjk5MGIzNjljY2EyNzg2ZjkzNWQyZDM1N2QwNDUxLi42ODhlYjNkOTBkMTllNjU0NTU3
NTQ2MDVlZmY5MWFiOWM5YWFhY2FlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysr
IGIvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0yMTYsNiArMjE2LDkgQEAgcHVibGljOgogICAgIC8v
IFVzZSB3aGVuIGl0J3MgZ3VhcmFudGVlZCB0byB0aGF0IHNoYWRvd1BhcmVudE5vZGUgaXMgMC4K
ICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCkgY29uc3Q7
CiAKKyAgICBFbGVtZW50KiBzaGFkb3dIb3N0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaGFkb3dI
b3N0KEVsZW1lbnQqKTsKKwogICAgIC8vIFJldHVybnMgdGhlIGVuY2xvc2luZyBldmVudCBwYXJl
bnQgbm9kZSAob3Igc2VsZikgdGhhdCwgd2hlbiBjbGlja2VkLCB3b3VsZCB0cmlnZ2VyIGEgbmF2
aWdhdGlvbi4KICAgICBOb2RlKiBlbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKTsKIApA
QCAtNjM4LDkgKzY0MSw2IEBAIHByb3RlY3RlZDoKICAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRh
KCkgY29uc3Q7CiAgICAgTm9kZVJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOwogCi0gICAgRWxl
bWVudCogc2hhZG93SG9zdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2hhZG93SG9zdChFbGVtZW50
Kik7Ci0KIHByaXZhdGU6CiAjaWYgVVNFKEpTQykKICAgICB2b2lkIG1hcmtDYWNoZWROb2RlTGlz
dHNTbG93KEpTQzo6TWFya1N0YWNrJiwgSlNDOjpKU0dsb2JhbERhdGEmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76548</attachid>
            <date>2010-12-14 11:11:57 -0800</date>
            <delta_ts>2010-12-16 09:39:02 -0800</delta_ts>
            <desc>Now with less confusion.</desc>
            <filename>bug-50971-20101214111156.patch</filename>
            <type>text/plain</type>
            <size>3749</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGQ3OTkyODQwYTI1MjdhNzE5ODg2M2U3ZWNkYWQwMzdhZWJkZmNiZi4uMmVhMzI5N2Y5ZjY0NmUx
NWUyM2VjODY2NjU2MDVmNTgxZDMwZGU3MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMi0xMyAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbWJpbmUgc2V0U2hhZG93Um9vdCBhbmQg
Y2xlYXJTaGFkb3dSb290IGludG8gYSBzaW1wbGVyIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA5NzEKKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIGFuZCBBUEkgaXMgbm90IHVzZWQgeWV0LgorCisgICAgICAgICogZG9tL0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2hhZG93Um9vdCk6IENvbWJp
bmVkIGNsZWFyaW5nIGFuZCBzZXR0aW5nIG9mCisgICAgICAgICAgICB0aGUgc2hhZG93Um9vdCwg
YWxzbyBob29rZWQgdXAgd2l0aCBzZXR0aW5nIGFuZCBjbGVhcmluZyBvZiB0aGUKKyAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmcgc2hhZG93SG9zdCB2YWx1ZXMuCisgICAgICAgICogZG9tL0VsZW1l
bnQuaDogcmVtb3ZlZCBjbGVhclNoYWRvd1Jvb3QgZGVmLgorICAgICAgICAqIGRvbS9Ob2RlLmg6
IE1hZGUgc2hhZG93IGhvc3QtcmVsYXRlZCBmdW5jdGlvbnMgcHVibGljLgorCiAyMDEwLTEyLTE0
ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMDcwN2M5NjQyZjVlNmJkNjRi
MmY1ODljYjAyYzg3N2I3MjQ0Yzk5Yy4uOTA5ZDgzZGE4OGZkZmM1YzAwODEzOWQ5NjgwODYzNzRl
NTVlZjE3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTEwODIsMjQgKzEwODIsMjMgQEAgTm9kZSogRWxlbWVudDo6
c2hhZG93Um9vdCgpCiAKIHZvaWQgRWxlbWVudDo6c2V0U2hhZG93Um9vdChQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgLy8gRklYTUU6IE9uY2UgYWxs
IGluc3RhbmNlcyBvZiBzaGFkb3cgRE9NIGFyZSBjb252ZXJ0ZWQgdG8gdXNlIHRoaXMgY29kZSwg
YWRkIHNldHRpbmcgb2Ygc2hhZG93IGhvc3QgKHNoYWRvd1BhcmVudCkgb24gbm9kZS4KLSAgICBl
bnN1cmVSYXJlRGF0YSgpLT5tX3NoYWRvd1Jvb3QgPSBub2RlOwotfQorICAgIFJlZlB0cjxOb2Rl
PiBuZXdSb290ID0gbm9kZTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkgeworICAgICAgICBpZiAo
UmVmUHRyPE5vZGU+IG9sZFJvb3QgPSByYXJlRGF0YSgpLT5tX3NoYWRvd1Jvb3QucmVsZWFzZSgp
KSB7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShv
bGRSb290LmdldCgpKTsKKyAgICAgICAgICAgIG9sZFJvb3QtPnNldFNoYWRvd0hvc3QoMCk7Cisg
ICAgICAgICAgICBpZiAob2xkUm9vdC0+aW5Eb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIG9s
ZFJvb3QtPnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBvbGRSb290LT5yZW1vdmVkRnJvbVRyZWUodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9
CiAKLXZvaWQgRWxlbWVudDo6Y2xlYXJTaGFkb3dSb290KCkKLXsKLSAgICBpZiAoIWhhc1JhcmVE
YXRhKCkpCisgICAgaWYgKCFuZXdSb290KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8
Tm9kZT4gc2hhZG93Um9vdCA9IHJhcmVEYXRhKCktPm1fc2hhZG93Um9vdC5yZWxlYXNlKCk7Ci0g
ICAgZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUoc2hhZG93Um9vdC5nZXQo
KSk7Ci0gICAgLy8gRklYTUU6IE9uY2UgYWxsIGluc3RhbmNlcyBvZiBzaGFkb3cgRE9NIGFyZSBj
b252ZXJ0ZWQgdG8gdXNlIHRoaXMgY29kZSwgYWRkIGNsZWFyaW5nIG9mIHNoYWRvdyBob3N0IChz
aGFkb3dQYXJlbnQpLgotICAgIGlmIChzaGFkb3dSb290LT5pbkRvY3VtZW50KCkpCi0gICAgICAg
IHNoYWRvd1Jvb3QtPnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBlbHNlCi0gICAgICAgIHNo
YWRvd1Jvb3QtPnJlbW92ZWRGcm9tVHJlZSh0cnVlKTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5t
X3NoYWRvd1Jvb3QgPSBuZXdSb290OworICAgIG5ld1Jvb3QtPnNldFNoYWRvd0hvc3QodGhpcyk7
CiB9CiAKIGJvb2wgRWxlbWVudDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSB0eXBlKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvV2ViQ29yZS9kb20vRWxlbWVudC5oCmlu
ZGV4IDg0MzJmODI1ZWI3ZmZlMmQxZmViZWIwNTVhNTEzNjJmYWI5NmFkMzEuLjg2ODg1YmY4NWYx
YWViNjA5MjFmODY5MTRmNDMxYjk3NmVmZDVjODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTIyNyw3ICsyMjcsNiBAQCBw
dWJsaWM6CiAKICAgICBOb2RlKiBzaGFkb3dSb290KCk7CiAgICAgdm9pZCBzZXRTaGFkb3dSb290
KFBhc3NSZWZQdHI8Tm9kZT4pOwotICAgIHZvaWQgY2xlYXJTaGFkb3dSb290KCk7CiAKICAgICBS
ZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKTsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vTm9kZS5oIGIvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDA4ODFm
MDgwNjAyOTkwYjM2OWNjYTI3ODZmOTM1ZDJkMzU3ZDA0NTEuLjY4OGViM2Q5MGQxOWU2NTQ1NTc1
NDYwNWVmZjkxYWI5YzlhYWFjYWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUuaAorKysg
Yi9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTIxNiw2ICsyMTYsOSBAQCBwdWJsaWM6CiAgICAgLy8g
VXNlIHdoZW4gaXQncyBndWFyYW50ZWVkIHRvIHRoYXQgc2hhZG93UGFyZW50Tm9kZSBpcyAwLgog
ICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKSBjb25zdDsK
IAorICAgIEVsZW1lbnQqIHNoYWRvd0hvc3QoKSBjb25zdDsKKyAgICB2b2lkIHNldFNoYWRvd0hv
c3QoRWxlbWVudCopOworCiAgICAgLy8gUmV0dXJucyB0aGUgZW5jbG9zaW5nIGV2ZW50IHBhcmVu
dCBub2RlIChvciBzZWxmKSB0aGF0LCB3aGVuIGNsaWNrZWQsIHdvdWxkIHRyaWdnZXIgYSBuYXZp
Z2F0aW9uLgogICAgIE5vZGUqIGVuY2xvc2luZ0xpbmtFdmVudFBhcmVudE9yU2VsZigpOwogCkBA
IC02MzgsOSArNjQxLDYgQEAgcHJvdGVjdGVkOgogICAgIE5vZGVSYXJlRGF0YSogcmFyZURhdGEo
KSBjb25zdDsKICAgICBOb2RlUmFyZURhdGEqIGVuc3VyZVJhcmVEYXRhKCk7CiAKLSAgICBFbGVt
ZW50KiBzaGFkb3dIb3N0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaGFkb3dIb3N0KEVsZW1lbnQq
KTsKLQogcHJpdmF0ZToKICNpZiBVU0UoSlNDKQogICAgIHZvaWQgbWFya0NhY2hlZE5vZGVMaXN0
c1Nsb3coSlNDOjpNYXJrU3RhY2smLCBKU0M6OkpTR2xvYmFsRGF0YSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76776</attachid>
            <date>2010-12-16 09:39:05 -0800</date>
            <delta_ts>2010-12-28 10:55:57 -0800</delta_ts>
            <desc>With more clarity in code.</desc>
            <filename>bug-50971-20101216093903.patch</filename>
            <type>text/plain</type>
            <size>4451</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTU5ODNhMzdmYjVlMGFhMzc2MDA0MjAxMmFiNDc0MTQxZTM4MzEwOS4uZjI3NjNjNWFlMzdiMWFl
ODdiNTlkYjkzZmE4ZjJmNWJkNWI2YzFhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0xMi0xNiAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbWJpbmUgc2V0U2hhZG93Um9vdCBhbmQg
Y2xlYXJTaGFkb3dSb290IGludG8gYSBzaW1wbGVyIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA5NzEKKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIGFuZCBBUEkgaXMgbm90IHVzZWQgeWV0LgorCisgICAgICAgICogZG9tL0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2hhZG93Um9vdCk6IENvbWJp
bmVkIGNsZWFyaW5nIGFuZCBzZXR0aW5nIG9mCisgICAgICAgICAgICB0aGUgc2hhZG93Um9vdCwg
YWxzbyBob29rZWQgdXAgd2l0aCBzZXR0aW5nIGFuZCBjbGVhcmluZyBvZiB0aGUKKyAgICAgICAg
ICAgIGNvcnJlc3BvbmRpbmcgc2hhZG93SG9zdCB2YWx1ZXMuCisgICAgICAgICogZG9tL0VsZW1l
bnQuaDogcmVuYW1lZCBjbGVhclNoYWRvd1Jvb3QgdG8gcmVtb3ZlU2hhZG93Um9vdCBhbmQgbWFk
ZSBpdAorICAgICAgICAgICAgcHJpdmF0ZS4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBNYWRlIHNo
YWRvdyBob3N0LXJlbGF0ZWQgZnVuY3Rpb25zIHB1YmxpYyBzbyB0aGF0CisgICAgICAgICAgICBF
bGVtZW50OjpzZXRTaGFkb3dSb290IGNhbiBhY2Nlc3Mgc2V0U2hhZG93SG9zdC4gSXQgc2VlbXMg
bG9naWNhbAorICAgICAgICAgICAgdG8gbWFrZSBzaGFkb3dIb3N0IHB1YmxpYyBhcyB3ZWxsIHRv
IGtlZXAgdGhlIGRlZnMgdG9nZXRoZXIuCisKIDIwMTAtMTItMTYgIFl1cnkgU2VtaWtoYXRza3kg
IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1h
bi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggMDcwN2M5NjQyZjVlNmJkNjRiMmY1ODljYjAyYzg3N2I3MjQ0Yzk5Yy4u
YTdjZDdiYTg2NGMyZGI2M2NhNjMwZWIyY2VkZmIyNGI1ZjgyNzNlOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEw
ODIsMjQgKzEwODIsMzEgQEAgTm9kZSogRWxlbWVudDo6c2hhZG93Um9vdCgpCiAKIHZvaWQgRWxl
bWVudDo6c2V0U2hhZG93Um9vdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiB7Ci0gICAgQVNTRVJU
KG5vZGUpOworICAgIC8vIEZJWE1FOiBCZWNhdXNlIHRvZGF5IHRoaXMgaXMgbmV2ZXIgY2FsbGVk
IGZyb20gc2NyaXB0IGRpcmVjdGx5LCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5CisgICAgLy8gYWJv
dXQgY29tcHJvbWlzaW5nIERPTSB0cmVlIGludGVncml0eSAoZWcuIG5vZGUgYmVpbmcgYSBwYXJl
bnQgb2YgdGhpcykuIEhvd2V2ZXIsCisgICAgLy8gb25jZSB3ZSBpbXBsZW1lbnQgWEJMMiwgd2Ug
d2lsbCBoYXZlIHRvIGFkZCBpbnRlZ3JpdHkgY2hlY2tzIGhlcmUuCisgICAgcmVtb3ZlU2hhZG93
Um9vdCgpOworICAgIFJlZlB0cjxOb2RlPiBuZXdSb290ID0gbm9kZTsKKyAgICBpZiAoIW5ld1Jv
b3QpCisgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBPbmNlIGFsbCBpbnN0YW5jZXMg
b2Ygc2hhZG93IERPTSBhcmUgY29udmVydGVkIHRvIHVzZSB0aGlzIGNvZGUsIGFkZCBzZXR0aW5n
IG9mIHNoYWRvdyBob3N0IChzaGFkb3dQYXJlbnQpIG9uIG5vZGUuCi0gICAgZW5zdXJlUmFyZURh
dGEoKS0+bV9zaGFkb3dSb290ID0gbm9kZTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5tX3NoYWRv
d1Jvb3QgPSBuZXdSb290OworICAgIG5ld1Jvb3QtPnNldFNoYWRvd0hvc3QodGhpcyk7CiB9CiAK
LXZvaWQgRWxlbWVudDo6Y2xlYXJTaGFkb3dSb290KCkKK3ZvaWQgRWxlbWVudDo6cmVtb3ZlU2hh
ZG93Um9vdCgpCiB7CiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8Tm9kZT4gc2hhZG93Um9vdCA9IHJhcmVEYXRhKCktPm1fc2hhZG93Um9vdC5y
ZWxlYXNlKCk7Ci0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUoc2hh
ZG93Um9vdC5nZXQoKSk7Ci0gICAgLy8gRklYTUU6IE9uY2UgYWxsIGluc3RhbmNlcyBvZiBzaGFk
b3cgRE9NIGFyZSBjb252ZXJ0ZWQgdG8gdXNlIHRoaXMgY29kZSwgYWRkIGNsZWFyaW5nIG9mIHNo
YWRvdyBob3N0IChzaGFkb3dQYXJlbnQpLgotICAgIGlmIChzaGFkb3dSb290LT5pbkRvY3VtZW50
KCkpCi0gICAgICAgIHNoYWRvd1Jvb3QtPnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHNoYWRvd1Jvb3QtPnJlbW92ZWRGcm9tVHJlZSh0cnVlKTsKKyAgICBpZiAoUmVm
UHRyPE5vZGU+IG9sZFJvb3QgPSByYXJlRGF0YSgpLT5tX3NoYWRvd1Jvb3QucmVsZWFzZSgpKSB7
CisgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKG9sZFJvb3Qu
Z2V0KCkpOworICAgICAgICBvbGRSb290LT5zZXRTaGFkb3dIb3N0KDApOworICAgICAgICBpZiAo
b2xkUm9vdC0+aW5Eb2N1bWVudCgpKQorICAgICAgICAgICAgb2xkUm9vdC0+cmVtb3ZlZEZyb21E
b2N1bWVudCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvbGRSb290LT5yZW1vdmVkRnJv
bVRyZWUodHJ1ZSk7CisgICAgfQogfQogCiBib29sIEVsZW1lbnQ6OmNoaWxkVHlwZUFsbG93ZWQo
Tm9kZVR5cGUgdHlwZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaAppbmRleCA4NDMyZjgyNWViN2ZmZTJkMWZlYmViMDU1YTUxMzYyZmFi
OTZhZDMxLi40YWY5OWUyMzY1NGE4ZmIyODQ4ZDBlMGEwMzgwYzYzNDUwZGExMzQxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBA
IC0yMjcsNyArMjI3LDYgQEAgcHVibGljOgogCiAgICAgTm9kZSogc2hhZG93Um9vdCgpOwogICAg
IHZvaWQgc2V0U2hhZG93Um9vdChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lkIGNsZWFyU2hh
ZG93Um9vdCgpOwogCiAgICAgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBO
T1BTRVVETyk7CiAKQEAgLTM5Miw2ICszOTEsNyBAQCBwcml2YXRlOgogICAgIEVsZW1lbnRSYXJl
RGF0YSogZW5zdXJlUmFyZURhdGEoKTsKIAogICAgIFNwZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSBz
cGVsbGNoZWNrQXR0cmlidXRlU3RhdGUoKSBjb25zdDsKKyAgICB2b2lkIHJlbW92ZVNoYWRvd1Jv
b3QoKTsKIAogcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZlB0cjxOYW1lZE5vZGVNYXA+IG1fYXR0
cmlidXRlTWFwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5oIGIvV2ViQ29yZS9kb20v
Tm9kZS5oCmluZGV4IDA4ODFmMDgwNjAyOTkwYjM2OWNjYTI3ODZmOTM1ZDJkMzU3ZDA0NTEuLjY4
OGViM2Q5MGQxOWU2NTQ1NTc1NDYwNWVmZjkxYWI5YzlhYWFjYWUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZG9tL05vZGUuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTIxNiw2ICsyMTYsOSBA
QCBwdWJsaWM6CiAgICAgLy8gVXNlIHdoZW4gaXQncyBndWFyYW50ZWVkIHRvIHRoYXQgc2hhZG93
UGFyZW50Tm9kZSBpcyAwLgogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGVHdWFyYW50ZWVk
SG9zdEZyZWUoKSBjb25zdDsKIAorICAgIEVsZW1lbnQqIHNoYWRvd0hvc3QoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFNoYWRvd0hvc3QoRWxlbWVudCopOworCiAgICAgLy8gUmV0dXJucyB0aGUgZW5j
bG9zaW5nIGV2ZW50IHBhcmVudCBub2RlIChvciBzZWxmKSB0aGF0LCB3aGVuIGNsaWNrZWQsIHdv
dWxkIHRyaWdnZXIgYSBuYXZpZ2F0aW9uLgogICAgIE5vZGUqIGVuY2xvc2luZ0xpbmtFdmVudFBh
cmVudE9yU2VsZigpOwogCkBAIC02MzgsOSArNjQxLDYgQEAgcHJvdGVjdGVkOgogICAgIE5vZGVS
YXJlRGF0YSogcmFyZURhdGEoKSBjb25zdDsKICAgICBOb2RlUmFyZURhdGEqIGVuc3VyZVJhcmVE
YXRhKCk7CiAKLSAgICBFbGVtZW50KiBzaGFkb3dIb3N0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRT
aGFkb3dIb3N0KEVsZW1lbnQqKTsKLQogcHJpdmF0ZToKICNpZiBVU0UoSlNDKQogICAgIHZvaWQg
bWFya0NhY2hlZE5vZGVMaXN0c1Nsb3coSlNDOjpNYXJrU3RhY2smLCBKU0M6OkpTR2xvYmFsRGF0
YSYpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>