<?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>38886</bug_id>
          
          <creation_ts>2010-05-10 22:52:53 -0700</creation_ts>
          <short_desc>Add script to check for minimum python version and install if missing on Tiger</short_desc>
          <delta_ts>2010-05-15 06:49:48 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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>39058</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>223759</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-10 22:52:53 -0700</bug_when>
    <thetext>Add script to check for minimum python version and install if missing on Tiger</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223765</commentid>
    <comment_count>1</comment_count>
      <attachid>55666</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-10 22:59:10 -0700</bug_when>
    <thetext>Created attachment 55666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223799</commentid>
    <comment_count>2</comment_count>
      <attachid>55666</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-05-11 00:44:03 -0700</bug_when>
    <thetext>Comment on attachment 55666
Patch

&gt; diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
&gt; index 2a7d2eec0cec020427e124077d574d830c5a1b6c..b189ac0f631048162a62692eaa87ab05359fe462 100644
&gt; --- a/WebKitTools/ChangeLog
&gt; +++ b/WebKitTools/ChangeLog
&gt; @@ -1,3 +1,30 @@
&gt; +2010-05-10  Eric Seidel  &lt;eric@webkit.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Add script to check for minimum python version and install if missing on Tiger
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=38886
&gt; +
&gt; +        Per Maciej&apos;s request on webkit-dev:
&gt; +        https://lists.webkit.org/pipermail/webkit-dev/2010-May/012785.html
&gt; +        provide a script which can automatically install Python on Tiger where
&gt; +        the system provided version is too old to be of use.
&gt; +
&gt; +        Note this uses the official Mac Python installer from python.org.
&gt; +        This installs a system copy of Python.  It is not possible to install
&gt; +        a non-system python without building our own copy.

I’m not sure that this is accurate.  The package appears to write Python.framework in to /Library/Frameworks/Python.framework.  That’s not where the system version of Python lives.

If I’m mistake about that and your initial comment is correct then… we really shouldn’t be overwriting the system version of Python.  Overwriting system files is not supported.  I’d really prefer that we didn’t encourage this, and we certainly shouldn’t be doing this without informing the user.

&gt; diff --git a/WebKitTools/Scripts/ensure-valid-python b/WebKitTools/Scripts/ensure-valid-python
&gt; new file mode 100755
&gt; index 0000000000000000000000000000000000000000..cfb13f0283f908fab3c7465ce12cb135f3ab12c2
&gt; --- /dev/null
&gt; +++ b/WebKitTools/Scripts/ensure-valid-python
&gt; @@ -0,0 +1,134 @@
&gt; +#!/usr/bin/perl -w
&gt; +# Copyright (C) 2010 Google Inc. All rights reserved.
&gt; +#
&gt; +# Redistribution and use in source and binary forms, with or without
&gt; +# modification, are permitted provided that the following conditions
&gt; +# are met:
&gt; +#
&gt; +# 1.  Redistributions of source code must retain the above copyright
&gt; +#     notice, this list of conditions and the following disclaimer. 
&gt; +# 2.  Redistributions in binary form must reproduce the above copyright
&gt; +#     notice, this list of conditions and the following disclaimer in the
&gt; +#     documentation and/or other materials provided with the distribution. 
&gt; +# 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; +#     its contributors may be used to endorse or promote products derived
&gt; +#     from this software without specific prior written permission. 

“Apple Computer, Inc” no longer exists.  It should not be referenced in new license text.

&gt; +#
&gt; +# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; +# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; +
&gt; +use strict;
&gt; +
&gt; +use File::Basename;
&gt; +use File::Spec;
&gt; +use File::Temp qw(tempdir);
&gt; +use FindBin;
&gt; +
&gt; +use lib $FindBin::Bin;
&gt; +use webkitdirs;
&gt; +use VCSUtils;
&gt; +
&gt; +my $macPythonURL = &quot;http://www.python.org/ftp/python/2.6.5/python-2.6.5-macosx10.3-2010-03-24.dmg&quot;;
&gt; +my $macPythonMD5 = &quot;84489bba813fdbb6041b69d4310a86da&quot;;
&gt; +my $macPythonInstallerName = &quot;Python.mpkg&quot;;
&gt; +
&gt; +sub checkPythonVersion()
&gt; +{
&gt; +    # Will exit 0 if python is 2.5 or greater, non-zero otherwise.
&gt; +    `python -c &quot;import sys;sys.exit(sys.version_info[:2] &lt; (2,6))&quot;`;
&gt; +    return exitStatus($?) == 0;
&gt; +}

The comment here mentions Python 2.5 but the check appears to be for v2.6.  Is that intentional?

&gt; +sub downloadFileToPath($$)
&gt; +{
&gt; +    my ($remoteURL, $localPath) = @_;
&gt; +    print &quot;Downloading $remoteURL to $localPath\n&quot;;
&gt; +    my $exitCode = system(&quot;curl&quot;, &quot;-o&quot;, $localPath, $remoteURL);
&gt; +    return exitStatus($exitCode) == 0;
&gt; +}
&gt; +
&gt; +sub checkMD5($$)
&gt; +{
&gt; +    my ($path, $expectedMD5) = @_;
&gt; +    my $md5Output = `md5 -q &quot;$path&quot;`;
&gt; +    chomp($md5Output);
&gt; +    my $isValid = $md5Output eq $expectedMD5;
&gt; +    print &quot;&apos;$md5Output&apos; does not match expected: &apos;$expectedMD5&apos;\n&quot; unless $isValid;
&gt; +    return $isValid;
&gt; +}
&gt; +
&gt; +sub mountDMG($)
&gt; +{
&gt; +    my ($dmgPath) = @_;
&gt; +    my $hdiutilOuput = `hdiutil attach $dmgPath`;

This will result in the disk image opening in the Finder and appearing in the sidebar.  hdiutil has a “-nobrowse” flag to prevent this.

&gt; +    # One of the lines of output is: &quot;/dev/disk_name    Apple_HFS    /Volumes/Mount Point&quot;
&gt; +    if ($hdiutilOuput !~ /^(.*)\s+Apple_HFS\s+(.*)$/m) {
&gt; +        die &quot;Failed to find mountpoint in \n$hdiutilOuput\nMay have left a disk image mounted.&quot;
&gt; +    }
&gt; +    my $mountPoint = $2;

Rather than doing this regexp hackery you could generate a mount point path yourself (somewhere under $TMPDIR?) and use hdiutil’s “-mountpoint” flag to arrange for it to be mounted there.

&gt; +    return $mountPoint;
&gt; +}
&gt; +
&gt; +sub unmountDMG($)
&gt; +{
&gt; +    my ($mountPoint) = @_;
&gt; +    my $exitCode = system(&quot;hdiutil&quot;, &quot;detach&quot;, $mountPoint);
&gt; +    return exitStatus($exitCode) == 0;
&gt; +}
&gt; +
&gt; +sub runInstaller($)
&gt; +{
&gt; +    my ($installerPackage) = @_;
&gt; +    print &quot;sudo will now ask for your password to run the Python installer.\n&quot;;
&gt; +    system(&quot;sudo&quot;, &quot;installer&quot;, &quot;-verbose&quot;, &quot;-pkg&quot;, $installerPackage, &quot;-target&quot;, &quot;/&quot;);
&gt; +}

Do we care about the exit status of the installer?

&gt; +sub installMacPython()
&gt; +{
&gt; +    my $mountPoint = downloadAndMountMacPythonDMG($macPythonURL, $macPythonMD5);
&gt; +    print &quot;Mounted python install image at: $mountPoint\n&quot;;
&gt; +    my $installerPackage = File::Spec-&gt;join($mountPoint, $macPythonInstallerName);
&gt; +    runInstaller($installerPackage);
&gt; +    unmountDMG($mountPoint) or die &quot;Failed to unmount DMG from $mountPoint&quot;;
&gt; +}

Should this delete the disk image when it is done?  Can we refer to it as a “disk image” instead of “DMG” in the error message since that is the term by which they’re typically known?

&gt; +
&gt; +sub main()
&gt; +{
&gt; +    # Congrats, your python is fine.
&gt; +    return 0 if checkPythonVersion();
&gt; +
&gt; +    if (!isTiger()) {
&gt; +        print &quot;Your python version is insuficient to run WebKit&apos;s python.  Please update.\n&quot;;
&gt; +        print &quot;See http://trac.webkit.org/wiki/PythonGuidelines for more info.\n&quot;;
&gt; +        return 1;
&gt; +    }
&gt; +
&gt; +    installMacPython();
&gt; +
&gt; +    checkPythonVersion() or die &quot;Final version check failed, must have failed to update python&quot;;
&gt; +    print &quot;Successfully updated python.\n&quot;;
&gt; +}

I’d suggest that “Python” have an initial capital in these messages as that is how the name of the language and implementation is typically rendered in text.  I’d suggest mentioning “WebKit’s Python code” rather than “WebKit’s Python” for sake of clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223982</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-11 10:06:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 55666 [details])

&gt; I’m not sure that this is accurate.  The package appears to write Python.framework in to /Library/Frameworks/Python.framework.  That’s not where the system version of Python lives.
&gt; 
&gt; If I’m mistake about that and your initial comment is correct then… we really shouldn’t be overwriting the system version of Python.  Overwriting system files is not supported.  I’d really prefer that we didn’t encourage this, and we certainly shouldn’t be doing this without informing the user.

You&apos;re correct, the installer appears to install on /Library.  Do you know of any way to perform a DISTROOT install with installer?  So I can actually see every file it dumps?  Since it uses several sub installers, it&apos;s confusing (using lsbom Archive.bom) to figure out where they all drop their payloads.

&gt; “Apple Computer, Inc” no longer exists.  It should not be referenced in new license text.

Fixed.

&gt; &gt; +sub checkPythonVersion()
&gt; &gt; +{
&gt; &gt; +    # Will exit 0 if python is 2.5 or greater, non-zero otherwise.
&gt; &gt; +    `python -c &quot;import sys;sys.exit(sys.version_info[:2] &lt; (2,6))&quot;`;
&gt; &gt; +    return exitStatus($?) == 0;
&gt; &gt; +}
&gt; 
&gt; The comment here mentions Python 2.5 but the check appears to be for v2.6.  Is that intentional?

A mistake left over from debugging on Leopard (which already has 2.5).  Fixed.

&gt; This will result in the disk image opening in the Finder and appearing in the sidebar.  hdiutil has a “-nobrowse” flag to prevent this.

Correct.  This was intentional.  If the script failed I didn&apos;t want to a random invisible mount around.  I&apos;m happy to change it if you think it&apos;s better to hide the mount.

&gt; &gt; +    # One of the lines of output is: &quot;/dev/disk_name    Apple_HFS    /Volumes/Mount Point&quot;
&gt; &gt; +    if ($hdiutilOuput !~ /^(.*)\s+Apple_HFS\s+(.*)$/m) {
&gt; &gt; +        die &quot;Failed to find mountpoint in \n$hdiutilOuput\nMay have left a disk image mounted.&quot;
&gt; &gt; +    }
&gt; &gt; +    my $mountPoint = $2;
&gt; 
&gt; Rather than doing this regexp hackery you could generate a mount point path yourself (somewhere under $TMPDIR?) and use hdiutil’s “-mountpoint” flag to arrange for it to be mounted there.

I considered that, however I didn&apos;t know how rm would fair trying to delete a mount point.  I guess I&apos;ll just have to test it.  The temp directory from File::Temp-&gt;createdir automatically deletes itself when perl exits.

&gt; Do we care about the exit status of the installer?

Yes, sorry.  Fixed.

&gt; Should this delete the disk image when it is done?  Can we refer to it as a “disk image” instead of “DMG” in the error message since that is the term by which they’re typically known?

We download the image to our temp directory which gets deleted by File::Temp automatically when python exits.

I&apos;ve fixed the log to say &quot;disk image&quot;, thanks.

&gt; I’d suggest that “Python” have an initial capital in these messages as that is how the name of the language and implementation is typically rendered in text.  I’d suggest mentioning “WebKit’s Python code” rather than “WebKit’s Python” for sake of clarity.

Fixed.

I&apos;ll test having it mount into the temp directory with nobrowse and see how that does.  Then I&apos;ll post a new patch.

Thank you for the quick review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224129</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-11 13:35:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; This will result in the disk image opening in the Finder and appearing in the sidebar.  hdiutil has a “-nobrowse” flag to prevent this.
&gt; 
&gt; Correct.  This was intentional.  If the script failed I didn&apos;t want to a random invisible mount around.  I&apos;m happy to change it if you think it&apos;s better to hide the mount.

I&apos;ve changed it to use -nobrowse in the latest version.  That makes it more difficult to debug if something goes wrong, but makes it quieter while operating.  Not a big deal either way.

&gt; &gt; Rather than doing this regexp hackery you could generate a mount point path yourself (somewhere under $TMPDIR?) and use hdiutil’s “-mountpoint” flag to arrange for it to be mounted there.
&gt; 
&gt; I considered that, however I didn&apos;t know how rm would fair trying to delete a mount point.  I guess I&apos;ll just have to test it.  The temp directory from File::Temp-&gt;createdir automatically deletes itself when perl exits.

rm won&apos;t delete the mountpoint.  So the temp directory deletion will fail if for some reason the script were to exit w/o unmounting the DMG.  However I changed the code to use a specific mount point per your suggestion.  I&apos;ve tested it and it works fine.


I&apos;ll post a patch momentarily which I believe addresses all of your previous concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224132</commentid>
    <comment_count>5</comment_count>
      <attachid>55747</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-11 13:38:54 -0700</bug_when>
    <thetext>Created attachment 55747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225046</commentid>
    <comment_count>6</comment_count>
      <attachid>55747</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-05-12 19:04:16 -0700</bug_when>
    <thetext>Comment on attachment 55747
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226239</commentid>
    <comment_count>7</comment_count>
      <attachid>55747</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 06:49:42 -0700</bug_when>
    <thetext>Comment on attachment 55747
Patch

Clearing flags on attachment: 55747

Committed r59538: &lt;http://trac.webkit.org/changeset/59538&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226240</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 06:49:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55666</attachid>
            <date>2010-05-10 22:59:10 -0700</date>
            <delta_ts>2010-05-11 13:38:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38886-20100510225859.patch</filename>
            <type>text/plain</type>
            <size>6834</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyYTdkMmVlYzBjZWMwMjA0MjdlMTI0MDc3ZDU3NGQ4MzBjNWExYjZjLi5iMTg5YWMw
ZjYzMTA0ODE2MmE2MjY5MmVhYTg3YWIwNTM1OWZlNDYyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTAtMDUtMTAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzY3JpcHQgdG8gY2hlY2sg
Zm9yIG1pbmltdW0gcHl0aG9uIHZlcnNpb24gYW5kIGluc3RhbGwgaWYgbWlzc2luZyBvbiBUaWdl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4ODYK
KworICAgICAgICBQZXIgTWFjaWVqJ3MgcmVxdWVzdCBvbiB3ZWJraXQtZGV2OgorICAgICAgICBo
dHRwczovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAxMC1NYXkvMDEy
Nzg1Lmh0bWwKKyAgICAgICAgcHJvdmlkZSBhIHNjcmlwdCB3aGljaCBjYW4gYXV0b21hdGljYWxs
eSBpbnN0YWxsIFB5dGhvbiBvbiBUaWdlciB3aGVyZQorICAgICAgICB0aGUgc3lzdGVtIHByb3Zp
ZGVkIHZlcnNpb24gaXMgdG9vIG9sZCB0byBiZSBvZiB1c2UuCisKKyAgICAgICAgTm90ZSB0aGlz
IHVzZXMgdGhlIG9mZmljaWFsIE1hYyBQeXRob24gaW5zdGFsbGVyIGZyb20gcHl0aG9uLm9yZy4K
KyAgICAgICAgVGhpcyBpbnN0YWxscyBhIHN5c3RlbSBjb3B5IG9mIFB5dGhvbi4gIEl0IGlzIG5v
dCBwb3NzaWJsZSB0byBpbnN0YWxsCisgICAgICAgIGEgbm9uLXN5c3RlbSBweXRob24gd2l0aG91
dCBidWlsZGluZyBvdXIgb3duIGNvcHkuCisKKyAgICAgICAgSSBoYXZlIHRlc3RlZCB0aGlzIHNj
cmlwdCBvbiBMZW9wYXJkIGFuZCBpdCB3b3JrZWQgZmluZS4gIEkgaGF2ZSBub3QgdGVzdGVkCisg
ICAgICAgIGl0IG9uIFRpZ2VyIGFzIEkgZG8gbm90IGhhdmUgYWNjZXNzIHRvIGEgVGlnZXIgbWFj
aGluZS4gIEluIGVpdGhlciBjYXNlIHRoaXMKKyAgICAgICAgc2hvdWxkIHByb3ZpZGUgYSBncmVh
dCBzdGFydGluZyBwb2ludCBmb3Igc29tZW9uZSB3aXNoaW5nIHRvIHVwZ3JhZGUgdGhlaXIKKyAg
ICAgICAgY29weSBvZiBQeXRob24gb24gVGlnZXIuCisKKyAgICAgICAgRnV0dXJlIHBhdGNoZXMg
Y2FuIG1ha2Ugb3VyIHNjcmlwdHMgZGVwZW5kIG9uIGEgc3VjY2VzcyByZXR1cm4gZnJvbSB0aGlz
IHNjcmlwdAorICAgICAgICBhbmQgdGhlbiB0aGV5IGNhbiBlaXRoZXIgc2tpcCB0ZXN0cy9zZWN0
aW9ucyBmb3Igd2hpY2ggcHl0aG9uIGlzIGluc3VmZmljaWVudCwgb3IKKyAgICAgICAgdGhleSBj
YW4gZmFpbCB0aGVtc2VsdmVzLgorCisgICAgICAgICogU2NyaXB0cy9lbnN1cmUtdmFsaWQtcHl0
aG9uOiBBZGRlZC4KKwogMjAxMC0wNS0xMCAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjU5MTAwKTogQWRkZWQgdGVzdCBpcyBicm9r
ZW4gb24gbWFueSBwbGF0Zm9ybXMuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2Vu
c3VyZS12YWxpZC1weXRob24gYi9XZWJLaXRUb29scy9TY3JpcHRzL2Vuc3VyZS12YWxpZC1weXRo
b24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uY2ZiMTNmMDI4M2Y5MDhmYWIzYzc0NjVjZTEyY2IxMzVmM2FiMTJjMgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvZW5zdXJlLXZhbGlkLXB5dGhv
bgpAQCAtMCwwICsxLDEzNCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyMgMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCit1c2Ugc3RyaWN0OworCit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6
U3BlYzsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwordXNlIEZpbmRCaW47CisKK3VzZSBs
aWIgJEZpbmRCaW46OkJpbjsKK3VzZSB3ZWJraXRkaXJzOwordXNlIFZDU1V0aWxzOworCitteSAk
bWFjUHl0aG9uVVJMID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLzIuNi41L3B5
dGhvbi0yLjYuNS1tYWNvc3gxMC4zLTIwMTAtMDMtMjQuZG1nIjsKK215ICRtYWNQeXRob25NRDUg
PSAiODQ0ODliYmE4MTNmZGJiNjA0MWI2OWQ0MzEwYTg2ZGEiOworbXkgJG1hY1B5dGhvbkluc3Rh
bGxlck5hbWUgPSAiUHl0aG9uLm1wa2ciOworCitzdWIgY2hlY2tQeXRob25WZXJzaW9uKCkKK3sK
KyAgICAjIFdpbGwgZXhpdCAwIGlmIHB5dGhvbiBpcyAyLjUgb3IgZ3JlYXRlciwgbm9uLXplcm8g
b3RoZXJ3aXNlLgorICAgIGBweXRob24gLWMgImltcG9ydCBzeXM7c3lzLmV4aXQoc3lzLnZlcnNp
b25faW5mb1s6Ml0gPCAoMiw2KSkiYDsKKyAgICByZXR1cm4gZXhpdFN0YXR1cygkPykgPT0gMDsK
K30KKworc3ViIGRvd25sb2FkRmlsZVRvUGF0aCgkJCkKK3sKKyAgICBteSAoJHJlbW90ZVVSTCwg
JGxvY2FsUGF0aCkgPSBAXzsKKyAgICBwcmludCAiRG93bmxvYWRpbmcgJHJlbW90ZVVSTCB0byAk
bG9jYWxQYXRoXG4iOworICAgIG15ICRleGl0Q29kZSA9IHN5c3RlbSgiY3VybCIsICItbyIsICRs
b2NhbFBhdGgsICRyZW1vdGVVUkwpOworICAgIHJldHVybiBleGl0U3RhdHVzKCRleGl0Q29kZSkg
PT0gMDsKK30KKworc3ViIGNoZWNrTUQ1KCQkKQoreworICAgIG15ICgkcGF0aCwgJGV4cGVjdGVk
TUQ1KSA9IEBfOworICAgIG15ICRtZDVPdXRwdXQgPSBgbWQ1IC1xICIkcGF0aCJgOworICAgIGNo
b21wKCRtZDVPdXRwdXQpOworICAgIG15ICRpc1ZhbGlkID0gJG1kNU91dHB1dCBlcSAkZXhwZWN0
ZWRNRDU7CisgICAgcHJpbnQgIickbWQ1T3V0cHV0JyBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZDog
JyRleHBlY3RlZE1ENSdcbiIgdW5sZXNzICRpc1ZhbGlkOworICAgIHJldHVybiAkaXNWYWxpZDsK
K30KKworc3ViIG1vdW50RE1HKCQpCit7CisgICAgbXkgKCRkbWdQYXRoKSA9IEBfOworICAgIG15
ICRoZGl1dGlsT3VwdXQgPSBgaGRpdXRpbCBhdHRhY2ggJGRtZ1BhdGhgOworICAgICMgT25lIG9m
IHRoZSBsaW5lcyBvZiBvdXRwdXQgaXM6ICIvZGV2L2Rpc2tfbmFtZSAgICBBcHBsZV9IRlMgICAg
L1ZvbHVtZXMvTW91bnQgUG9pbnQiCisgICAgaWYgKCRoZGl1dGlsT3VwdXQgIX4gL14oLiopXHMr
QXBwbGVfSEZTXHMrKC4qKSQvbSkgeworICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIG1vdW50
cG9pbnQgaW4gXG4kaGRpdXRpbE91cHV0XG5NYXkgaGF2ZSBsZWZ0IGEgZGlzayBpbWFnZSBtb3Vu
dGVkLiIKKyAgICB9CisgICAgbXkgJG1vdW50UG9pbnQgPSAkMjsKKyAgICByZXR1cm4gJG1vdW50
UG9pbnQ7Cit9CisKK3N1YiB1bm1vdW50RE1HKCQpCit7CisgICAgbXkgKCRtb3VudFBvaW50KSA9
IEBfOworICAgIG15ICRleGl0Q29kZSA9IHN5c3RlbSgiaGRpdXRpbCIsICJkZXRhY2giLCAkbW91
bnRQb2ludCk7CisgICAgcmV0dXJuIGV4aXRTdGF0dXMoJGV4aXRDb2RlKSA9PSAwOworfQorCitz
dWIgcnVuSW5zdGFsbGVyKCQpCit7CisgICAgbXkgKCRpbnN0YWxsZXJQYWNrYWdlKSA9IEBfOwor
ICAgIHByaW50ICJzdWRvIHdpbGwgbm93IGFzayBmb3IgeW91ciBwYXNzd29yZCB0byBydW4gdGhl
IFB5dGhvbiBpbnN0YWxsZXIuXG4iOworICAgIHN5c3RlbSgic3VkbyIsICJpbnN0YWxsZXIiLCAi
LXZlcmJvc2UiLCAiLXBrZyIsICRpbnN0YWxsZXJQYWNrYWdlLCAiLXRhcmdldCIsICIvIik7Cit9
CisKK3N1YiBkb3dubG9hZEFuZE1vdW50TWFjUHl0aG9uRE1HKCQkKQoreworICAgIG15ICgkcHl0
aG9uVVJMLCAkcHl0aG9uTUQ1KSA9IEBfOworICAgICMgV2UgY291bGQgdXNlIGEgY29uc2lzdGVu
dCBkb3dubG9hZCBsb2NhdGlvbiwgbGlrZSB0aGUgc291cmNlIG9yIGJ1aWxkIGRpcmVjdG9yeS4K
KyAgICBteSAkZG93bmxvYWREaXJlY3RvcnkgPSBGaWxlOjpUZW1wLT5uZXdkaXIoKTsKKyAgICBt
eSAkbG9jYWxGaWxlbmFtZSA9IGJhc2VuYW1lKCRweXRob25VUkwpOworICAgIG15ICRsb2NhbFBh
dGggPSBGaWxlOjpTcGVjLT5qb2luKCRkb3dubG9hZERpcmVjdG9yeSwgJGxvY2FsRmlsZW5hbWUp
OworCisgICAgZG93bmxvYWRGaWxlVG9QYXRoKCRweXRob25VUkwsICRsb2NhbFBhdGgpIG9yIGRp
ZSAiRmFpbGVkIHRvIGRvd25sb2FkICRweXRob25VUkwiOworICAgIGNoZWNrTUQ1KCRsb2NhbFBh
dGgsICRweXRob25NRDUpIG9yIGRpZSAiTUQ1IGNoZWNrIGZhaWxlZCBvbiAkbG9jYWxQYXRoIjsK
KyAgICBteSAkbW91bnRQb2ludCA9IG1vdW50RE1HKCRsb2NhbFBhdGgpOworICAgIHJldHVybiAk
bW91bnRQb2ludDsKK30KKworc3ViIGluc3RhbGxNYWNQeXRob24oKQoreworICAgIG15ICRtb3Vu
dFBvaW50ID0gZG93bmxvYWRBbmRNb3VudE1hY1B5dGhvbkRNRygkbWFjUHl0aG9uVVJMLCAkbWFj
UHl0aG9uTUQ1KTsKKyAgICBwcmludCAiTW91bnRlZCBweXRob24gaW5zdGFsbCBpbWFnZSBhdDog
JG1vdW50UG9pbnRcbiI7CisgICAgbXkgJGluc3RhbGxlclBhY2thZ2UgPSBGaWxlOjpTcGVjLT5q
b2luKCRtb3VudFBvaW50LCAkbWFjUHl0aG9uSW5zdGFsbGVyTmFtZSk7CisgICAgcnVuSW5zdGFs
bGVyKCRpbnN0YWxsZXJQYWNrYWdlKTsKKyAgICB1bm1vdW50RE1HKCRtb3VudFBvaW50KSBvciBk
aWUgIkZhaWxlZCB0byB1bm1vdW50IERNRyBmcm9tICRtb3VudFBvaW50IjsKK30KKworc3ViIG1h
aW4oKQoreworICAgICMgQ29uZ3JhdHMsIHlvdXIgcHl0aG9uIGlzIGZpbmUuCisgICAgcmV0dXJu
IDAgaWYgY2hlY2tQeXRob25WZXJzaW9uKCk7CisKKyAgICBpZiAoIWlzVGlnZXIoKSkgeworICAg
ICAgICBwcmludCAiWW91ciBweXRob24gdmVyc2lvbiBpcyBpbnN1ZmljaWVudCB0byBydW4gV2Vi
S2l0J3MgcHl0aG9uLiAgUGxlYXNlIHVwZGF0ZS5cbiI7CisgICAgICAgIHByaW50ICJTZWUgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy93aWtpL1B5dGhvbkd1aWRlbGluZXMgZm9yIG1vcmUgaW5mby5c
biI7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGluc3RhbGxNYWNQeXRob24oKTsK
KworICAgIGNoZWNrUHl0aG9uVmVyc2lvbigpIG9yIGRpZSAiRmluYWwgdmVyc2lvbiBjaGVjayBm
YWlsZWQsIG11c3QgaGF2ZSBmYWlsZWQgdG8gdXBkYXRlIHB5dGhvbiI7CisgICAgcHJpbnQgIlN1
Y2Nlc3NmdWxseSB1cGRhdGVkIHB5dGhvbi5cbiI7Cit9CisKK2V4aXQobWFpbigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55747</attachid>
            <date>2010-05-11 13:38:54 -0700</date>
            <delta_ts>2010-05-15 06:49:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38886-20100511133851.patch</filename>
            <type>text/plain</type>
            <size>7070</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyYTdkMmVlYzBjZWMwMjA0MjdlMTI0MDc3ZDU3NGQ4MzBjNWExYjZjLi42Yjg0NTcx
MGIzMjE2N2EzZTlhYzU1N2JmODAxYmUwNzIxNzYzMDQ3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTAtMDUtMTAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzY3JpcHQgdG8gY2hlY2sg
Zm9yIG1pbmltdW0gcHl0aG9uIHZlcnNpb24gYW5kIGluc3RhbGwgaWYgbWlzc2luZyBvbiBUaWdl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4ODYK
KworICAgICAgICBQZXIgTWFjaWVqJ3MgcmVxdWVzdCBvbiB3ZWJraXQtZGV2OgorICAgICAgICBo
dHRwczovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAxMC1NYXkvMDEy
Nzg1Lmh0bWwKKyAgICAgICAgcHJvdmlkZSBhIHNjcmlwdCB3aGljaCBjYW4gYXV0b21hdGljYWxs
eSBpbnN0YWxsIFB5dGhvbiBvbiBUaWdlciB3aGVyZQorICAgICAgICB0aGUgc3lzdGVtIHByb3Zp
ZGVkIHZlcnNpb24gaXMgdG9vIG9sZCB0byBiZSBvZiB1c2UuCisKKyAgICAgICAgTm90ZSB0aGlz
IHVzZXMgdGhlIG9mZmljaWFsIE1hYyBQeXRob24gaW5zdGFsbGVyIGZyb20gcHl0aG9uLm9yZy4K
KyAgICAgICAgVGhpcyBpbnN0YWxscyBhIGNvcHkgb2YgUHl0aG9uIGluIC9MaWJyYXJ5L0ZyYW1l
d29ya3MvUHl0aG9uLmZyYW1ld29yay4KKyAgICAgICAgSXQgYWxzbyBtYWtlcyBzeW1saW5rcyBm
cm9tIC91c3IvbG9jYWwvYmluIHRvIHRoZSBQeXRob24uZnJhbWV3b3JrL2Jpbi4KKworICAgICAg
ICBJIGhhdmUgdGVzdGVkIHRoaXMgc2NyaXB0IG9uIExlb3BhcmQgYW5kIGl0IHdvcmtlZCBmaW5l
LiAgSSBoYXZlIG5vdAorICAgICAgICB0ZXN0ZWQgaXQgb24gVGlnZXIgYXMgSSBkbyBub3QgaGF2
ZSBhY2Nlc3MgdG8gYSBUaWdlciBtYWNoaW5lLiAgSW4KKyAgICAgICAgZWl0aGVyIGNhc2UgdGhp
cyBzaG91bGQgcHJvdmlkZSBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50IGZvciBzb21lb25lCisgICAg
ICAgIHdpc2hpbmcgdG8gdXBncmFkZSB0aGVpciBjb3B5IG9mIFB5dGhvbiBvbiBUaWdlci4KKwor
ICAgICAgICBGdXR1cmUgcGF0Y2hlcyBjYW4gbWFrZSBvdXIgc2NyaXB0cyBkZXBlbmQgb24gYSBz
dWNjZXNzIHJldHVybiBmcm9tIHRoaXMKKyAgICAgICAgc2NyaXB0IGFuZCB0aGVuIHRoZXkgY2Fu
IGVpdGhlciBza2lwIHRlc3RzL3NlY3Rpb25zIGZvciB3aGljaCBweXRob24gaXMKKyAgICAgICAg
aW5zdWZmaWNpZW50LCBvciB0aGV5IGNhbiBmYWlsIHRoZW1zZWx2ZXMuCisKKyAgICAgICAgKiBT
Y3JpcHRzL2Vuc3VyZS12YWxpZC1weXRob246IEFkZGVkLgorCiAyMDEwLTA1LTEwICBKb24gSG9u
ZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyNTkx
MDApOiBBZGRlZCB0ZXN0IGlzIGJyb2tlbiBvbiBtYW55IHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvZW5zdXJlLXZhbGlkLXB5dGhvbiBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvZW5zdXJlLXZhbGlkLXB5dGhvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjFhZDRlNThiOTYzY2I3NjRl
ZGJiODQyZTNkNmM0MDQ4MjZiNWRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9lbnN1cmUtdmFsaWQtcHl0aG9uCkBAIC0wLDAgKzEsMTM1IEBACisjIS91c3IvYmluL3Bl
cmwgLXcKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKwordXNlIHN0cmljdDsKKwordXNlIEZpbGU6OkJhc2VuYW1l
OwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKK3VzZSBGaW5k
QmluOworCit1c2UgbGliICRGaW5kQmluOjpCaW47Cit1c2Ugd2Via2l0ZGlyczsKK3VzZSBWQ1NV
dGlsczsKKworbXkgJG1hY1B5dGhvblVSTCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5
dGhvbi8yLjYuNS9weXRob24tMi42LjUtbWFjb3N4MTAuMy0yMDEwLTAzLTI0LmRtZyI7CitteSAk
bWFjUHl0aG9uTUQ1ID0gIjg0NDg5YmJhODEzZmRiYjYwNDFiNjlkNDMxMGE4NmRhIjsKK215ICRt
YWNQeXRob25JbnN0YWxsZXJOYW1lID0gIlB5dGhvbi5tcGtnIjsKKworIyBXZSBjb3VsZCB1c2Ug
YSBjb25zaXN0ZW50IGRvd25sb2FkIGxvY2F0aW9uLCBsaWtlIHRoZSBzb3VyY2Ugb3IgYnVpbGQg
ZGlyZWN0b3J5LgorbXkgJHRlbXBEaXJlY3RvcnkgPSBGaWxlOjpUZW1wLT5uZXdkaXIoKTsKK215
ICRkb3dubG9hZERpcmVjdG9yeSA9ICR0ZW1wRGlyZWN0b3J5OworbXkgJG1vdW50UG9pbnQgPSBG
aWxlOjpTcGVjLT5qb2luKCR0ZW1wRGlyZWN0b3J5LCAibW91bnQiKTsKKworc3ViIGNoZWNrUHl0
aG9uVmVyc2lvbigpCit7CisgICAgIyBXaWxsIGV4aXQgMCBpZiBQeXRob24gaXMgMi41IG9yIGdy
ZWF0ZXIsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAgICBgcHl0aG9uIC1jICJpbXBvcnQgc3lzO3N5
cy5leGl0KHN5cy52ZXJzaW9uX2luZm9bOjJdIDwgKDIsNSkpImA7CisgICAgcmV0dXJuIGV4aXRT
dGF0dXMoJD8pID09IDA7Cit9CisKK3N1YiBkb3dubG9hZEZpbGVUb1BhdGgoJCQpCit7CisgICAg
bXkgKCRyZW1vdGVVUkwsICRsb2NhbFBhdGgpID0gQF87CisgICAgcHJpbnQgIkRvd25sb2FkaW5n
ICRyZW1vdGVVUkwgdG8gJGxvY2FsUGF0aFxuIjsKKyAgICBteSAkZXhpdENvZGUgPSBzeXN0ZW0o
ImN1cmwiLCAiLW8iLCAkbG9jYWxQYXRoLCAkcmVtb3RlVVJMKTsKKyAgICByZXR1cm4gZXhpdFN0
YXR1cygkZXhpdENvZGUpID09IDA7Cit9CisKK3N1YiBjaGVja01ENSgkJCkKK3sKKyAgICBteSAo
JHBhdGgsICRleHBlY3RlZE1ENSkgPSBAXzsKKyAgICBteSAkbWQ1T3V0cHV0ID0gYG1kNSAtcSAi
JHBhdGgiYDsKKyAgICBjaG9tcCgkbWQ1T3V0cHV0KTsKKyAgICBteSAkaXNWYWxpZCA9ICRtZDVP
dXRwdXQgZXEgJGV4cGVjdGVkTUQ1OworICAgIHByaW50ICInJG1kNU91dHB1dCcgZG9lcyBub3Qg
bWF0Y2ggZXhwZWN0ZWQ6ICckZXhwZWN0ZWRNRDUnXG4iIHVubGVzcyAkaXNWYWxpZDsKKyAgICBy
ZXR1cm4gJGlzVmFsaWQ7Cit9CisKK3N1YiBtb3VudERNRygkJCkKK3sKKyAgICBteSAoJGRtZ1Bh
dGgsICRtb3VudFBvaW50KSA9IEBfOworICAgIHByaW50ICJNb3VudGluZyAkZG1nUGF0aCBhdCAk
bW91bnRQb2ludFxuIjsKKyAgICByZXR1cm4gc3lzdGVtKCJoZGl1dGlsIiwgImF0dGFjaCIsICIt
bW91bnRwb2ludCIsICRtb3VudFBvaW50LCAiLW5vYnJvd3NlIiwgJGRtZ1BhdGgpID09IDA7Cit9
CisKK3N1YiB1bm1vdW50RE1HKCQpCit7CisgICAgbXkgKCRtb3VudFBvaW50KSA9IEBfOworICAg
IHByaW50ICJVbm1vdW50aW5nIGRpc2sgaW1hZ2UgZnJvbSAkbW91bnRQb2ludFxuIjsKKyAgICBt
eSAkZXhpdENvZGUgPSBzeXN0ZW0oImhkaXV0aWwiLCAiZGV0YWNoIiwgJG1vdW50UG9pbnQpOwor
ICAgIHJldHVybiBleGl0U3RhdHVzKCRleGl0Q29kZSkgPT0gMDsKK30KKworc3ViIHJ1bkluc3Rh
bGxlcigkKQoreworICAgIG15ICgkaW5zdGFsbGVyUGFja2FnZSkgPSBAXzsKKyAgICBwcmludCAi
c3VkbyB3aWxsIG5vdyBhc2sgZm9yIHlvdXIgcGFzc3dvcmQgdG8gcnVuIHRoZSBQeXRob24gaW5z
dGFsbGVyLlxuIjsKKyAgICBwcmludCAiVGhlIGluc3RhbGxlciB3aWxsIGluc3RhbGwgUHl0aG9u
IGluIC9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29ya1xuIjsKKyAgICBwcmludCAi
YW5kIGFkZCBzeW1saW5rcyBmcm9tIC91c3IvbG9jYWwvYmluLlxuIjsKKyAgICByZXR1cm4gc3lz
dGVtKCJzdWRvIiwgImluc3RhbGxlciIsICItdmVyYm9zZSIsICItcGtnIiwgJGluc3RhbGxlclBh
Y2thZ2UsICItdGFyZ2V0IiwgIi8iKSA9PSAwOworfQorCitzdWIgZG93bmxvYWRBbmRNb3VudE1h
Y1B5dGhvbkRNRygkJCkKK3sKKyAgICBteSAoJHB5dGhvblVSTCwgJHB5dGhvbk1ENSkgPSBAXzsK
KyAgICBteSAkbG9jYWxGaWxlbmFtZSA9IGJhc2VuYW1lKCRweXRob25VUkwpOworICAgIG15ICRs
b2NhbFBhdGggPSBGaWxlOjpTcGVjLT5qb2luKCRkb3dubG9hZERpcmVjdG9yeSwgJGxvY2FsRmls
ZW5hbWUpOworICAgIAorICAgIGRvd25sb2FkRmlsZVRvUGF0aCgkcHl0aG9uVVJMLCAkbG9jYWxQ
YXRoKSBvciBkaWUgIkZhaWxlZCB0byBkb3dubG9hZCAkcHl0aG9uVVJMIjsKKyAgICBjaGVja01E
NSgkbG9jYWxQYXRoLCAkcHl0aG9uTUQ1KSBvciBkaWUgIk1ENSBjaGVjayBmYWlsZWQgb24gJGxv
Y2FsUGF0aCI7CisgICAgcmV0dXJuIG1vdW50RE1HKCRsb2NhbFBhdGgsICRtb3VudFBvaW50KTsK
K30KKworc3ViIGluc3RhbGxNYWNQeXRob24oKQoreworICAgIGRvd25sb2FkQW5kTW91bnRNYWNQ
eXRob25ETUcoJG1hY1B5dGhvblVSTCwgJG1hY1B5dGhvbk1ENSkgb3IgZGllICJGYWlsZWQgdG8g
ZG93bmxvYWQgYW5kIG1vdW50IGRpc2sgaW1hZ2UuIjsKKyAgICBwcmludCAiTW91bnRlZCBweXRo
b24gaW5zdGFsbCBpbWFnZSBhdDogJG1vdW50UG9pbnRcbiI7CisgICAgbXkgJGluc3RhbGxlclBh
Y2thZ2UgPSBGaWxlOjpTcGVjLT5qb2luKCRtb3VudFBvaW50LCAkbWFjUHl0aG9uSW5zdGFsbGVy
TmFtZSk7CisgICAgbXkgJGluc3RhbGxTdWNjZXNzID0gcnVuSW5zdGFsbGVyKCRpbnN0YWxsZXJQ
YWNrYWdlKTsKKyAgICB1bm1vdW50RE1HKCRtb3VudFBvaW50KSBvciBkaWUgIkZhaWxlZCB0byB1
bm1vdW50IGRpc2sgaW1hZ2UgZnJvbSAkbW91bnRQb2ludCI7CisgICAgcmV0dXJuICRpbnN0YWxs
U3VjY2VzczsKK30KKworc3ViIG1haW4oKQoreworICAgICMgQ29uZ3JhdHMsIHlvdXIgUHl0aG9u
IGlzIGZpbmUuCisgICAgcmV0dXJuIDAgaWYgY2hlY2tQeXRob25WZXJzaW9uKCk7CisgICAgCisg
ICAgaWYgKCFpc1RpZ2VyKCkpIHsKKyAgICAgICAgcHJpbnQgIllvdXIgUHl0aG9uIHZlcnNpb24g
aXMgaW5zdWZpY2llbnQgdG8gcnVuIFdlYktpdCdzIFB5dGhvbiBjb2RlLiAgUGxlYXNlIHVwZGF0
ZS5cbiI7CisgICAgICAgIHByaW50ICJTZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy93aWtpL1B5
dGhvbkd1aWRlbGluZXMgZm9yIG1vcmUgaW5mby5cbiI7CisgICAgICAgIHJldHVybiAxOworICAg
IH0KKworICAgIGluc3RhbGxNYWNQeXRob24oKSBvciBkaWUgIkZhaWxlZCB0byBpbnN0YWxsIFB5
dGhvbi4iOworCisgICAgY2hlY2tQeXRob25WZXJzaW9uKCkgb3IgZGllICJGaW5hbCB2ZXJzaW9u
IGNoZWNrIGZhaWxlZCwgbXVzdCBoYXZlIGZhaWxlZCB0byB1cGRhdGUgUHl0aG9uIjsKKyAgICBw
cmludCAiU3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgcHl0aG9uLlxuIjsKK30KKworZXhpdChtYWluKCkp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>