<?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>35009</bug_id>
          
          <creation_ts>2010-02-16 16:37:10 -0800</creation_ts>
          <short_desc>[V8] Add context type variable to global object and merge object wrapping paths</short_desc>
          <delta_ts>2010-02-24 15:47:49 -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>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>antonm</cc>
    
    <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>190815</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-16 16:37:10 -0800</bug_when>
    <thetext>Currently, we have no way of knowing whether the global object is a DOMWindow* or a WorkerContext* without doing the rather performance-unfriendly lookupDOMWrapper() and checking for the desired instance in the prototype chain.  If we add a context type variable (essentially just the relevant V8ClassIndex::V8WrapperType) to the global object, we can quickly check that and know what kind of global object we&apos;re dealing with.  Because we know what type it is, we can just unwrap it, rather than having to iterate through the prototype chain.

This will simplify the logic of object wrapping in WorkerContexts versus standard DOMWindows, and may even result in a slight performance gain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190817</commentid>
    <comment_count>1</comment_count>
      <attachid>48848</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-16 16:42:16 -0800</bug_when>
    <thetext>Created attachment 48848
patch

In tests on my local machine, it&apos;s hard to tell whether this actually changes performance on the dromaeo and dom benchmark tests.  If it is a change, however, it certainly looks like an improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190839</commentid>
    <comment_count>2</comment_count>
      <attachid>48848</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-16 18:02:30 -0800</bug_when>
    <thetext>Comment on attachment 48848
patch

Ok.  I&apos;m not super happy about:

+ V8DOMWindow::toNative(v8::Handle&lt;v8::Object&gt;::Cast(global-&gt;GetPrototype()))-&gt;frame()

That seems like too low-level a manipulation for that program point.  Don&apos;t we have a helper function somewhere that does that kind of thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190976</commentid>
    <comment_count>3</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-02-17 04:05:16 -0800</bug_when>
    <thetext>Hidden properties are /very/ slow and may affect internal fields.  in your case, as you only access that on global object, I think you&apos;d better off with internal fields and, if it&apos;s performance critical (and I think it is), use GetPointerFromInternalField/SetPointerToInternalField.  Use some sentinel pointer (aligned!) as a marker.  The catch might be to find an index, but that should be doable.

Note: that using type might be not the best idea for now, but if you prefer that, let me know and we could extend V8 pubic API to make type access faster (it&apos;s currently unnecessary slow, but too rarely used to care about, at least I think so :)

And mandatory question, have you estimated performance effect of your change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191046</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-17 08:11:17 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Hidden properties are /very/ slow and may affect internal fields.  in your
&gt; case, as you only access that on global object, I think you&apos;d better off with
&gt; internal fields and, if it&apos;s performance critical (and I think it is), use
&gt; GetPointerFromInternalField/SetPointerToInternalField.  Use some sentinel
&gt; pointer (aligned!) as a marker.  The catch might be to find an index, but that
&gt; should be doable.
&gt; 
&gt; Note: that using type might be not the best idea for now, but if you prefer
&gt; that, let me know and we could extend V8 pubic API to make type access faster
&gt; (it&apos;s currently unnecessary slow, but too rarely used to care about, at least I
&gt; think so :)
&gt; 
&gt; And mandatory question, have you estimated performance effect of your change?

The estimate from my local tests was that it would be either neutral or a slight performance improvement.  I didn&apos;t realize how slow hidden properties are though, so let me experiment a bit and see if I can speed things up some more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191202</commentid>
    <comment_count>5</comment_count>
      <attachid>48938</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-17 14:21:50 -0800</bug_when>
    <thetext>Created attachment 48938
faster patch

I&apos;m having trouble determining whether this patch is a meaningful change in dromaeo test performance, but it&apos;s a big (5% or so) improvement on the dom benchmark test.

It&apos;s a bit hackish though. The idea is to tell what type of context were in by the internal field count on the wrapper context object. This works as long as DOMWindow objects and WorkerContext objects have different field counts, which given the huge disparity will likely remain true indefinitely.  I included an ASSERT and a comment to this effect as a precaution though.

I recognize this may be too much of a hack, but I figured I&apos;d throw it out and see what people think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191204</commentid>
    <comment_count>6</comment_count>
      <attachid>48848</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-17 14:22:58 -0800</bug_when>
    <thetext>Comment on attachment 48848
patch

Cleared Adam Barth&apos;s review+ from obsolete attachment 48848 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191207</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-17 14:23:37 -0800</bug_when>
    <thetext>Attachment 48938 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/V8DOMWrapper.cpp:271:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191435</commentid>
    <comment_count>8</comment_count>
      <attachid>48938</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-17 23:53:41 -0800</bug_when>
    <thetext>Comment on attachment 48938
faster patch

Clever.  Please fix the style nit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191504</commentid>
    <comment_count>9</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-02-18 02:41:48 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=48938) [details]
&gt; faster patch
&gt; 
&gt; I&apos;m having trouble determining whether this patch is a meaningful change in
&gt; dromaeo test performance, but it&apos;s a big (5% or so) improvement on the dom
&gt; benchmark test.
&gt; 
&gt; It&apos;s a bit hackish though. The idea is to tell what type of context were in by
&gt; the internal field count on the wrapper context object. This works as long as
&gt; DOMWindow objects and WorkerContext objects have different field counts, which
&gt; given the huge disparity will likely remain true indefinitely.  I included an
&gt; ASSERT and a comment to this effect as a precaution though.
&gt; 
&gt; I recognize this may be too much of a hack, but I figured I&apos;d throw it out and
&gt; see what people think.

I like it, and 5% is a very good achievement.

One catch might be interaction with debug agent---they used to inject some stuff into the global object.  Yury (cc&apos;ed, yurys@chromium.org) is an expert, Yury, any comments?  Plus, run your change through interactive ui tests---they have some coverage for debugger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191562</commentid>
    <comment_count>10</comment_count>
      <attachid>48938</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-18 06:19:06 -0800</bug_when>
    <thetext>Comment on attachment 48938
faster patch

&gt; +    ASSERT(V8DOMWindow::internalFieldCount != V8WorkerContext::internalFieldCount &amp;&amp; V8DOMWindow::internalFieldCount != V8SharedWorkerContext::internalFieldCount);
This should be checked at compile time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191564</commentid>
    <comment_count>11</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-18 06:23:17 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; One catch might be interaction with debug agent---they used to inject some
&gt; stuff into the global object.  Yury (cc&apos;ed, yurys@chromium.org) is an expert,
&gt; Yury, any comments?  Plus, run your change through interactive ui tests---they
&gt; have some coverage for debugger.
This change shouldn&apos;t affect the script injection. We just store a reference to some inspector object in a hidden property so it doesn&apos;t seem to conflict in any way with this change. But thanks for attract my attention to this change, Anton.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193547</commentid>
    <comment_count>12</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-24 15:47:49 -0800</bug_when>
    <thetext>Looks like I forgot to close this: http://trac.webkit.org/changeset/54972</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48848</attachid>
            <date>2010-02-16 16:42:16 -0800</date>
            <delta_ts>2010-02-17 14:22:58 -0800</delta_ts>
            <desc>patch</desc>
            <filename>wrap.txt</filename>
            <type>text/plain</type>
            <size>9233</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDg0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDItMTYgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIEFkZCBhIHZhcmlhYmxlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IHRvIGluZGljYXRlIHdoYXQg
dHlwZSBvZiBleGVjdXRpb24KKyAgICAgICAgY29udGV4dCB3ZSBhcmUgdXNpbmcuIFVzZSBzYWlk
IHZhcmlhYmxlIHRvIHF1aWNrbHkgYW5kIGNvcnJlY3RseSB1bndyYXAgdGhlCisgICAgICAgIGNv
bnRleHQgaW4gaW5zdGFudGlhdGVWOE9iamVjdCgpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAwOQorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IFJlbW92ZSBsb2dpYyBkZXRlcm1pbmluZyB3aGV0aGVy
IHdlIG5lZWQgdG8KKyAgICAgICAgICAgIGhhbmRsZSB0aGUgV29ya2VyQ29udGV4dCBjYXNlLgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZSk6IFNl
dCBjb250ZXh0VHlwZQorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QpOiBNZXJn
ZSBpbnN0YW50aWF0ZVY4T2JqZWN0IHBhdGhzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmg6
IEFkZCBjb250ZXh0VHlwZQorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQpOiBTZXQgY29udGV4dFR5cGUKKwogMjAxMC0wMi0x
NiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQkocmV2aXNpb24gNTQ4NDYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQ5LDEyICsxOTQ5LDggQEAK
IAogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiAke2NsYXNzTmFtZX06OndyYXAoJHtuYXRpdmVUeXBl
fSogaW1wbCR7Zm9yY2VOZXdPYmplY3RJbnB1dH0pIHsKICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyOwotRU5ECi0gICAgaWYgKCFNYXlCZUluV29ya2VyQ29udGV4dCgkZGF0YU5vZGUs
ICRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwog
ICBWOFByb3h5KiBwcm94eSA9IDA7CiBFTkQKLSAgICB9CiAKICAgICBpZiAoSXNOb2RlU3ViVHlw
ZSgkZGF0YU5vZGUpKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CkBAIC0x
OTkzLDE1ICsxOTg5LDkgQEAKIEVORAogICAgIH0KIAotICAgIGlmIChNYXlCZUluV29ya2VyQ29u
dGV4dCgkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOwotICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2Jq
ZWN0SW5Xb3JrZXJDb250ZXh0KCR7d3JhcHBlclR5cGV9LCBpbXBsKTsKLUVORAotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9i
amVjdChwcm94eSwgJHt3cmFwcGVyVHlwZX0sIGltcGwpOwogRU5ECi0gICAgfQogCiAgICAgaWYg
KElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
PDxFTkQpOwpAQCAtMjA0OSwzNSArMjAzOSw2IEBACiAgICAgfQogfQogCi1zdWIgTWF5QmVJbldv
cmtlckNvbnRleHQgewotICAgICMgVGhlc2Ugb2JqZWN0cyBjYW4gYmUgY29uc3RydWN0ZWQgdW5k
ZXIgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LiBUaGV5IG5lZWQgc3BlY2lhbAotICAgICMg
aGFuZGxpbmcsIHNpbmNlIGlmIHdlIGNhbGwgVjhQcm94eTo6cmV0cmlldmUoKSwgd2Ugd2lsbCBj
cmFzaC4KLSAgICAjIEZJWE1FOiB3ZWJzb2NrZXQ/Ci0gICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7
Ci0gICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKLSAgICAjIEZJWE1FOiBEb2luZyB0aGUg
ZXh0cmEgd29yayB0byBoYW5kbGUgdGhlIFdvcmtlckNvbnRleHQgY2FzZSBmb3IgYWxsIEV2ZW50
Ci0gICAgIyB0eXBlcyBpcyBzYWQuIFdlIGNhbiBwcm9iYWJseSBiZSBjbGV2ZXJlciBhbmQgb25s
eSBkbyB0aGUgZXh0cmEgd29yayBmb3IgY2VydGFpbiB0eXBlcy4KLSAgICByZXR1cm4gMSBpZiBJ
c0V2ZW50U3ViVHlwZSgkZGF0YU5vZGUpOwotICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1l
IGVxICJET01Db3JlRXhjZXB0aW9uIjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBl
cSAiRXZlbnRFeGNlcHRpb24iOwotICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJS
YW5nZUV4Y2VwdGlvbiI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlhNTEh0
dHBSZXF1ZXN0RXhjZXB0aW9uIjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAi
TWVzc2FnZVBvcnQiOwotICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJEZWRpY2F0
ZWRXb3JrZXJDb250ZXh0IjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiV29y
a2VyQ29udGV4dCI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlNoYXJlZFdv
cmtlckNvbnRleHQiOwotICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJXb3JrZXJM
b2NhdGlvbiI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIldvcmtlck5hdmln
YXRvciI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5vdGlmaWNhdGlvbiI7
Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5vdGlmaWNhdGlvbkNlbnRlciI7
Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlhNTEh0dHBSZXF1ZXN0IjsKLSAg
ICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiV2ViU29ja2V0IjsKLSAgICByZXR1cm4g
MSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiV29ya2VyIjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJm
YWNlTmFtZSBlcSAiU2hhcmVkV29ya2VyIjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFt
ZSBlcSAiRXZlbnRTb3VyY2UiOwotICAgIHJldHVybiAwOwotfQotCiBzdWIgSGFzQ3VzdG9tVG9W
OEltcGxlbWVudGF0aW9uIHsKICAgICAjIEZJWE1FOiBUaGlzIHN1YnJvdXRpbmUgaXMgbGFtZS4g
UHJvYmFibHkgc2hvdWxkIGJlIGFuIC5pZGwgYXR0cmlidXRlIChDdXN0b21Ub1Y4KT8KICAgICAk
ZGF0YU5vZGUgPSBzaGlmdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJ
KHJldmlzaW9uIDU0ODQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsMzYgKzI2NywzNSBAQAogICAgIHJldHVybiBOb2RlRmls
dGVyOjpjcmVhdGUoY29uZGl0aW9uKTsKIH0KIAotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9N
V3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdEluV29ya2VyQ29udGV4dChWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1wbCkKLXsKLSAgICBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6cmV0cmlldmUoKTsKLSAgICBpZiAoIXdvcmtlckNvbnRleHRQcm94eSkKLSAgICAgICAg
cmV0dXJuIGluc3RhbnRpYXRlVjhPYmplY3QoMCwgdHlwZSwgaW1wbCk7Ci0gICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGdldENv
bnN0cnVjdG9yKHR5cGUsIHdvcmtlckNvbnRleHRQcm94eS0+d29ya2VyQ29udGV4dCgpKSk7Ci0g
ICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0
aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9ucy4KLSAgICAgICAgc2V0RE9NV3Jh
cHBlcihpbnN0YW5jZSwgVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSwgaW1wbCk7Ci0gICAgfQot
ICAgIHJldHVybiBpbnN0YW5jZTsKLX0KLQogdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9NV3Jh
cHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQqIGltcGwpCiB7CisgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IDA7CiAgICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkp
IHsKICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgd3JhcHBlciBjYWNo
ZSBmb3IgaXNvbGF0ZWQgd29ybGRzLgogICAgICAgICBwcm94eSA9IDA7CiAgICAgICAgIC8vIEZJ
WE1FOiBEbyB3ZSBuZWVkIGEgd3JhcHBlciBjYWNoZSBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkPyAg
V2Ugc2hvdWxkCiAgICAgICAgIC8vICAgICAgICBzZWUgaWYgdGhlIHBlcmZvcm1hbmNlIGdhaW5z
IGFyZSB3b3J0aCB3aGlsZS4KICAgICAgICAgLy8gV2UnbGwgZ2V0IG9uZSBvbmNlIHdlIGdpdmUg
dGhlIGlzb2xhdGVkIGNvbnRleHQgYSBwcm9wZXIgd2luZG93IHNoZWxsLgotICAgIH0gZWxzZSBp
ZiAoIXByb3h5KQotICAgICAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKCk7CisgICAgfSBl
bHNlIGlmICghcHJveHkgJiYgdjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKSB7CisgICAgICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+
R2xvYmFsKCk7CisgICAgICAgIGlmIChnbG9iYWwtPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJv
cGVydHlOYW1lOjpjb250ZXh0VHlwZSgpKS0+SW50MzJWYWx1ZSgpID09IFY4Q2xhc3NJbmRleDo6
VG9JbnQoVjhDbGFzc0luZGV4OjpET01XSU5ET1cpKQorICAgICAgICAgICAgcHJveHkgPSBWOFBy
b3h5OjpyZXRyaWV2ZShWOERPTVdpbmRvdzo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdChnbG9iYWwtPkdldFByb3RvdHlwZSgpKSktPmZyYW1lKCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB3b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGdsb2JhbC0+R2V0UHJvdG90eXBlKCkpKTsKKyAg
ICB9CiAKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2U7CiAgICAgaWYgKHByb3h5
KQogICAgICAgICAvLyBGSVhNRTogRml4IHRoaXMgdG8gd29yayBwcm9wZXJseSB3aXRoIGlzb2xh
dGVkIHdvcmxkcyAoc2VlIGFib3ZlKS4KICAgICAgICAgaW5zdGFuY2UgPSBwcm94eS0+d2luZG93
U2hlbGwoKS0+Y3JlYXRlV3JhcHBlckZyb21DYWNoZSh0eXBlKTsKLSAgICBlbHNlCi0gICAgICAg
IGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKFY4Q2xhc3NJbmRleDo6Z2V0
VGVtcGxhdGUodHlwZSktPkdldEZ1bmN0aW9uKCkpOworICAgIGVsc2UgeworICAgICAgICB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbjsKKyAgICAgICAgaWYgKHdvcmtlckNvbnRleHQp
CisgICAgICAgICAgICBmdW5jdGlvbiA9IGdldENvbnN0cnVjdG9yKHR5cGUsIHdvcmtlckNvbnRl
eHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmdW5jdGlvbiA9IFY4Q2xhc3NJbmRleDo6
Z2V0VGVtcGxhdGUodHlwZSktPkdldEZ1bmN0aW9uKCk7CisgICAgICAgIGluc3RhbmNlID0gU2Fm
ZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsKKyAgICB9CiAgICAgaWYgKCFpbnN0
YW5jZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBw
ZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9ucy4KICAgICAgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5j
ZSwgVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSwgaW1wbCk7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmgJKHJldmlzaW9uIDU0ODQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw2IEBACiAgICAgICAg
IHN0YXRpYyB2b2lkIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGludCBp
bnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAogICAgICAgICBzdGF0aWMg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHks
IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKTsKLSAgICAgICAg
c3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0SW5Xb3JrZXJD
b250ZXh0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKTsKIAog
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRXcmFwcGVyKE5vZGUqKTsK
ICAgICB9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCShy
ZXZpc2lvbiA1NDg0NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNCw2ICs1MjQsNyBAQAogICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBvYmplY3RQcm90b3R5cGUgPSBvYmplY3QtPkdldChwcm90b3R5cGVTdHJpbmcpOwog
CiAgICAgY29udGV4dC0+R2xvYmFsKCktPlNldEhpZGRlblZhbHVlKGhpZGRlbk9iamVjdFByb3Rv
dHlwZVN0cmluZywgb2JqZWN0UHJvdG90eXBlKTsKKyAgICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0
SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmNvbnRleHRUeXBlKCksIHY4OjpJbnRl
Z2VyOjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVykpKTsK
IH0KIAogdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZVdyYXBw
ZXJGcm9tQ2FjaGVTbG93Q2FzZShWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5jcHAJKHJldmlzaW9uIDU0ODQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDcg
QEAKICAgICAvLyBJbnNlcnQgdGhlIG9iamVjdCBpbnN0YW5jZSBhcyB0aGUgcHJvdG90eXBlIG9m
IHRoZSBzaGFkb3cgb2JqZWN0LgogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsT2Jq
ZWN0ID0gbV9jb250ZXh0LT5HbG9iYWwoKTsKICAgICBnbG9iYWxPYmplY3QtPlNldChpbXBsaWNp
dFByb3RvU3RyaW5nLCBqc1dvcmtlckNvbnRleHQpOworICAgIGdsb2JhbE9iamVjdC0+U2V0SGlk
ZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmNvbnRleHRUeXBlKCksIHY4OjpJbnRlZ2Vy
OjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludChjb250ZXh0VHlwZSkpKTsKIH0KIAogYm9vbCBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmZvcmdldFY4RXZlbnRPYmplY3QoRXZlbnQqIGV2ZW50
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaAkocmV2
aXNpb24gNTQ4NDYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDggQEAKICAgICBWKGF0dHJpYnV0ZUxpc3Rl
bmVyKSBcCiAgICAgVihzY3JpcHRTdGF0ZSkgXAogICAgIFYoc2xlZXBGdW5jdGlvbikgXAotICAg
IFYodG9TdHJpbmdTdHJpbmcpCisgICAgVih0b1N0cmluZ1N0cmluZykgXAorICAgIFYoY29udGV4
dFR5cGUpCiAKICAgICBjbGFzcyBWOEhpZGRlblByb3BlcnR5TmFtZSB7CiAgICAgcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48938</attachid>
            <date>2010-02-17 14:21:50 -0800</date>
            <delta_ts>2010-02-18 06:19:06 -0800</delta_ts>
            <desc>faster patch</desc>
            <filename>wrap2.txt</filename>
            <type>text/plain</type>
            <size>8018</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDkwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDItMTcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIE1lcmdlIHRoZSBET01XaW5kb3cgYW5kIFdvcmtlckNvbnRleHQgb2JqZWN0IHdyYXBwaW5n
IGNvZGUgcGF0aHMsCisgICAgICAgIGFuZCB1c2UgYSBmYXN0ZXIgbWV0aG9kIG9mIGRpc2FtYmln
dWF0aW5nIGJldHdlZW4gdGhlIHR5cGVzIG9mIGNvbnRleHRzLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAwOQorCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IFJlbW92ZSBsb2dpYyBkZXRlcm1pbmluZyB3
aGV0aGVyIHdlIG5lZWQgdG8KKyAgICAgICAgICAgIGhhbmRsZSB0aGUgV29ya2VyQ29udGV4dCBj
YXNlLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpnbG9iYWxPYmplY3RQcm90b3R5cGVJc0RPTVdpbmRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QpOiBNZXJnZSBpbnN0YW50aWF0
ZVY4T2JqZWN0IHBhdGhzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgor
CiAyMDEwLTAyLTE3ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNTQ5MDgpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQ5LDEy
ICsxOTQ5LDggQEAKIAogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiAke2NsYXNzTmFtZX06OndyYXAo
JHtuYXRpdmVUeXBlfSogaW1wbCR7Zm9yY2VOZXdPYmplY3RJbnB1dH0pIHsKICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotRU5ECi0gICAgaWYgKCFNYXlCZUluV29ya2VyQ29udGV4
dCgkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgPDxFTkQpOwogICBWOFByb3h5KiBwcm94eSA9IDA7CiBFTkQKLSAgICB9CiAKICAgICBpZiAo
SXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8
PEVORCk7CkBAIC0xOTkzLDE1ICsxOTg5LDkgQEAKIEVORAogICAgIH0KIAotICAgIGlmIChNYXlC
ZUluV29ya2VyQ29udGV4dCgkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0
YW50aWF0ZVY4T2JqZWN0SW5Xb3JrZXJDb250ZXh0KCR7d3JhcHBlclR5cGV9LCBpbXBsKTsKLUVO
RAotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5z
dGFudGlhdGVWOE9iamVjdChwcm94eSwgJHt3cmFwcGVyVHlwZX0sIGltcGwpOwogRU5ECi0gICAg
fQogCiAgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgPDxFTkQpOwpAQCAtMjA0OSwzNSArMjAzOSw2IEBACiAgICAgfQogfQogCi1z
dWIgTWF5QmVJbldvcmtlckNvbnRleHQgewotICAgICMgVGhlc2Ugb2JqZWN0cyBjYW4gYmUgY29u
c3RydWN0ZWQgdW5kZXIgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LiBUaGV5IG5lZWQgc3Bl
Y2lhbAotICAgICMgaGFuZGxpbmcsIHNpbmNlIGlmIHdlIGNhbGwgVjhQcm94eTo6cmV0cmlldmUo
KSwgd2Ugd2lsbCBjcmFzaC4KLSAgICAjIEZJWE1FOiB3ZWJzb2NrZXQ/Ci0gICAgbXkgJGRhdGFO
b2RlID0gc2hpZnQ7Ci0gICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKLSAgICAjIEZJWE1F
OiBEb2luZyB0aGUgZXh0cmEgd29yayB0byBoYW5kbGUgdGhlIFdvcmtlckNvbnRleHQgY2FzZSBm
b3IgYWxsIEV2ZW50Ci0gICAgIyB0eXBlcyBpcyBzYWQuIFdlIGNhbiBwcm9iYWJseSBiZSBjbGV2
ZXJlciBhbmQgb25seSBkbyB0aGUgZXh0cmEgd29yayBmb3IgY2VydGFpbiB0eXBlcy4KLSAgICBy
ZXR1cm4gMSBpZiBJc0V2ZW50U3ViVHlwZSgkZGF0YU5vZGUpOwotICAgIHJldHVybiAxIGlmICRp
bnRlcmZhY2VOYW1lIGVxICJET01Db3JlRXhjZXB0aW9uIjsKLSAgICByZXR1cm4gMSBpZiAkaW50
ZXJmYWNlTmFtZSBlcSAiRXZlbnRFeGNlcHRpb24iOwotICAgIHJldHVybiAxIGlmICRpbnRlcmZh
Y2VOYW1lIGVxICJSYW5nZUV4Y2VwdGlvbiI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5h
bWUgZXEgIlhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uIjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJm
YWNlTmFtZSBlcSAiTWVzc2FnZVBvcnQiOwotICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1l
IGVxICJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0IjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNl
TmFtZSBlcSAiV29ya2VyQ29udGV4dCI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUg
ZXEgIlNoYXJlZFdvcmtlckNvbnRleHQiOwotICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1l
IGVxICJXb3JrZXJMb2NhdGlvbiI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEg
Ildvcmtlck5hdmlnYXRvciI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5v
dGlmaWNhdGlvbiI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5vdGlmaWNh
dGlvbkNlbnRlciI7Ci0gICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlhNTEh0dHBS
ZXF1ZXN0IjsKLSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiV2ViU29ja2V0IjsK
LSAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiV29ya2VyIjsKLSAgICByZXR1cm4g
MSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU2hhcmVkV29ya2VyIjsKLSAgICByZXR1cm4gMSBpZiAk
aW50ZXJmYWNlTmFtZSBlcSAiRXZlbnRTb3VyY2UiOwotICAgIHJldHVybiAwOwotfQotCiBzdWIg
SGFzQ3VzdG9tVG9WOEltcGxlbWVudGF0aW9uIHsKICAgICAjIEZJWE1FOiBUaGlzIHN1YnJvdXRp
bmUgaXMgbGFtZS4gUHJvYmFibHkgc2hvdWxkIGJlIGFuIC5pZGwgYXR0cmlidXRlIChDdXN0b21U
b1Y4KT8KICAgICAkZGF0YU5vZGUgPSBzaGlmdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5jcHAJKHJldmlzaW9uIDU0OTA4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAi
VjhQcm94eS5oIgogI2luY2x1ZGUgIlY4U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAi
VjhTaGFyZWRXb3JrZXIuaCIKKyNpbmNsdWRlICJWOFNoYXJlZFdvcmtlckNvbnRleHQuaCIKICNp
bmNsdWRlICJWOFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJWOFdlYlNvY2tldC5oIgogI2luY2x1
ZGUgIlY4V29ya2VyLmgiCkBAIC0yNjcsMzYgKzI2OCw0NyBAQAogICAgIHJldHVybiBOb2RlRmls
dGVyOjpjcmVhdGUoY29uZGl0aW9uKTsKIH0KIAotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9N
V3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdEluV29ya2VyQ29udGV4dChWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1wbCkKLXsKLSAgICBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6cmV0cmlldmUoKTsKLSAgICBpZiAoIXdvcmtlckNvbnRleHRQcm94eSkKLSAgICAgICAg
cmV0dXJuIGluc3RhbnRpYXRlVjhPYmplY3QoMCwgdHlwZSwgaW1wbCk7Ci0gICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGdldENv
bnN0cnVjdG9yKHR5cGUsIHdvcmtlckNvbnRleHRQcm94eS0+d29ya2VyQ29udGV4dCgpKSk7Ci0g
ICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0
aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9ucy4KLSAgICAgICAgc2V0RE9NV3Jh
cHBlcihpbnN0YW5jZSwgVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSwgaW1wbCk7Ci0gICAgfQot
ICAgIHJldHVybiBpbnN0YW5jZTsKK3N0YXRpYyBib29sIGdsb2JhbE9iamVjdFByb3RvdHlwZUlz
RE9NV2luZG93KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0UHJvdG90eXBlKSB7CisgICAg
Ly8gV2UgY2FuIGlkZW50aWZ5IHdoYXQgdHlwZSBvZiBjb250ZXh0IHRoZSBnbG9iYWwgb2JqZWN0
IGlzIHdyYXBwaW5nIGJ5IGxvb2tpbmcgYXQgdGhlCisgICAgLy8gaW50ZXJuYWwgZmllbGQgY291
bnQgb2YgaXRzIHByb3RvdHlwZS4gVGhpcyBhc3N1bWVzIFdvcmtlckNvbnRleHRzIGFuZCBET01X
aW5kb3dzIGhhdmUgZGlmZmVyZW50IG51bWJlcnMKKyAgICAvLyBvZiBpbnRlcm5hbCBmaWVsZHMs
IHNvIGFuIEFTU0VSVCBpcyBpbmNsdWRlZCB0byB3YXJuIGlmIHRoaXMgZXZlciBjaGFuZ2VzLiBE
T01XaW5kb3cgaGFzCisgICAgLy8gdHJhZGl0aW9uYWxseSBoYWQgZmFyIG1vcmUgaW50ZXJuYWwg
ZmllbGRzIHRoYW4gYW55IG90aGVyIGNsYXNzLgorICAgIEFTU0VSVChWOERPTVdpbmRvdzo6aW50
ZXJuYWxGaWVsZENvdW50ICE9IFY4V29ya2VyQ29udGV4dDo6aW50ZXJuYWxGaWVsZENvdW50ICYm
IFY4RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQgIT0gVjhTaGFyZWRXb3JrZXJDb250ZXh0
OjppbnRlcm5hbEZpZWxkQ291bnQpOworICAgIHJldHVybiBvYmplY3RQcm90b3R5cGUtPkludGVy
bmFsRmllbGRDb3VudCgpID09IFY4RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQ7CiB9CiAK
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3Qo
VjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBp
bXBsKQogeworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSAwOwogICAgIGlmIChW
OElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgZWZmZWN0
aXZlbHkgZGlzYWJsZXMgdGhlIHdyYXBwZXIgY2FjaGUgZm9yIGlzb2xhdGVkIHdvcmxkcy4KICAg
ICAgICAgcHJveHkgPSAwOwogICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBhIHdyYXBwZXIg
Y2FjaGUgZm9yIHRoZSBpc29sYXRlZCB3b3JsZD8gIFdlIHNob3VsZAogICAgICAgICAvLyAgICAg
ICAgc2VlIGlmIHRoZSBwZXJmb3JtYW5jZSBnYWlucyBhcmUgd29ydGggd2hpbGUuCiAgICAgICAg
IC8vIFdlJ2xsIGdldCBvbmUgb25jZSB3ZSBnaXZlIHRoZSBpc29sYXRlZCBjb250ZXh0IGEgcHJv
cGVyIHdpbmRvdyBzaGVsbC4KLSAgICB9IGVsc2UgaWYgKCFwcm94eSkKLSAgICAgICAgcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZSgpOworICAgIH0gZWxzZSBpZiAoIXByb3h5KSB7CisgICAgICAg
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVu
dCgpOworICAgICAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbFByb3RvdHlwZSA9IHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsKKyAgICAgICAgICAg
IGlmIChnbG9iYWxPYmplY3RQcm90b3R5cGVJc0RPTVdpbmRvdyhnbG9iYWxQcm90b3R5cGUpKQor
ICAgICAgICAgICAgICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoVjhET01XaW5kb3c6OnRv
TmF0aXZlKGdsb2JhbFByb3RvdHlwZSktPmZyYW1lKCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHdvcmtlckNvbnRleHQgPSBWOFdvcmtlckNvbnRleHQ6OnRvTmF0aXZlKGds
b2JhbFByb3RvdHlwZSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gaW5zdGFuY2U7CiAgICAgaWYgKHByb3h5KQogICAgICAgICAvLyBGSVhNRTogRml4IHRo
aXMgdG8gd29yayBwcm9wZXJseSB3aXRoIGlzb2xhdGVkIHdvcmxkcyAoc2VlIGFib3ZlKS4KICAg
ICAgICAgaW5zdGFuY2UgPSBwcm94eS0+d2luZG93U2hlbGwoKS0+Y3JlYXRlV3JhcHBlckZyb21D
YWNoZSh0eXBlKTsKLSAgICBlbHNlCi0gICAgICAgIGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246
Om5ld0luc3RhbmNlKFY4Q2xhc3NJbmRleDo6Z2V0VGVtcGxhdGUodHlwZSktPkdldEZ1bmN0aW9u
KCkpOworICAgIGVsc2UgeworICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlv
bjsKKyAgICAgICAgaWYgKHdvcmtlckNvbnRleHQpCisgICAgICAgICAgICBmdW5jdGlvbiA9IGdl
dENvbnN0cnVjdG9yKHR5cGUsIHdvcmtlckNvbnRleHQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBmdW5jdGlvbiA9IFY4Q2xhc3NJbmRleDo6Z2V0VGVtcGxhdGUodHlwZSktPkdldEZ1bmN0
aW9uKCk7CisgICAgICAgIGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1
bmN0aW9uKTsKKyAgICB9CiAgICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkpIHsKICAgICAgICAg
Ly8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9ucy4K
ICAgICAgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgVjhDbGFzc0luZGV4OjpUb0ludCh0eXBl
KSwgaW1wbCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHJldmlzaW9uIDU0
OTA4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTkyLDcgKzE5Miw2IEBACiAgICAgICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KTsKIAogICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3Rh
bnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlLCB2b2lkKiBpbXBsKTsKLSAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiBpbnN0YW50aWF0ZVY4T2JqZWN0SW5Xb3JrZXJDb250ZXh0KFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKTsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBnZXRXcmFwcGVyKE5vZGUqKTsKICAgICB9Owo=
</data>
<flag name="review"
          id="31676"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>