<?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>44995</bug_id>
          
          <creation_ts>2010-08-31 14:59:43 -0700</creation_ts>
          <short_desc>Add AudioParam files</short_desc>
          <delta_ts>2010-09-03 12:24:41 -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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>272415</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-31 14:59:43 -0700</bug_when>
    <thetext>Add AudioParam files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272417</commentid>
    <comment_count>1</comment_count>
      <attachid>66119</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-31 15:01:31 -0700</bug_when>
    <thetext>Created attachment 66119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272420</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-31 15:02:22 -0700</bug_when>
    <thetext>This implements AudioParam as defined in the web audio specification:

http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html#AudioParam-section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273669</commentid>
    <comment_count>3</comment_count>
      <attachid>66119</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 16:40:49 -0700</bug_when>
    <thetext>Comment on attachment 66119
Patch

Marking r+ with a few minor comments. Fix upon committing, or upload new patch.

&gt; Index: WebCore/webaudio/AudioParam.h
&gt; ===================================================================
&gt; --- WebCore/webaudio/AudioParam.h	(revision 0)
&gt; +++ WebCore/webaudio/AudioParam.h	(revision 0)
&gt; @@ -0,0 +1,115 @@
&gt; +/*
&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.
&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; +
&gt; +#ifndef AudioParam_h
&gt; +#define AudioParam_h
&gt; +
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &lt;math.h&gt;
&gt; +#include &lt;sys/types.h&gt;
&gt; +#include &lt;wtf/PassRefPtr.h&gt;
&gt; +#include &lt;wtf/RefCounted.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +class AudioParam : public RefCounted&lt;AudioParam&gt; {
&gt; +public:
&gt; +    static const double DefaultSmoothingConstant = 0.05;
&gt; +    static const double SnapThreshold = 0.001;

I think you&apos;re going to have problems getting this to link on all platforms (or maybe not, since you&apos;re developing on the Mac and clearly things are linking for you). I believe you need the following in an AudioParam.cc for correctness.

// GCC requires these declarations, but MSVC requires they not be present
#ifndef COMPILER_MSVC
const double AudioParam::DefaultSmoothingConstant;
const double AudioParam::SnapThreshold;
#endif

It might only be necessary if these are referenced from another .cpp file; not sure. It looks like SnapThreshold doesn&apos;t need to be accessed from outside this class in which case it should be private. If the same is true for DefaultSmoothingConstant then making them both private may solve the problem.

&gt; +
&gt; +    static PassRefPtr&lt;AudioParam&gt; create(const String&amp; name, double defaultValue, double minValue, double maxValue, unsigned units = 0)
&gt; +    {
&gt; +        return adoptRef(new AudioParam(name, defaultValue, minValue, maxValue, units));
&gt; +    }
&gt; +
&gt; +    AudioParam(const String&amp; name, double defaultValue, double minValue, double maxValue, unsigned units = 0)
&gt; +        : m_name(name)
&gt; +        , m_value(defaultValue)
&gt; +        , m_defaultValue(defaultValue)
&gt; +        , m_minValue(minValue)
&gt; +        , m_maxValue(maxValue)
&gt; +        , m_units(units)
&gt; +        , m_smoothedValue(defaultValue)
&gt; +        , m_smoothingConstant(DefaultSmoothingConstant)
&gt; +    {
&gt; +    }
&gt; +
&gt; +    float value() const { return static_cast&lt;float&gt;(m_value); }
&gt; +    void setValue(float value) { m_value = value; }
&gt; +
&gt; +    String name() const { return m_name; }
&gt; +
&gt; +    float minValue() const { return static_cast&lt;float&gt;(m_minValue); }
&gt; +    float maxValue() const { return static_cast&lt;float&gt;(m_maxValue); }
&gt; +    float defaultValue() const { return static_cast&lt;float&gt;(m_defaultValue); }
&gt; +    unsigned units() const { return m_units; }

I&apos;d add a FIXME here too about defining units.

&gt; +
&gt; +    // Value smoothing:
&gt; +
&gt; +    // When a new value is set with setValue(), in our internal use of the parameter we don&apos;t immediately jump to it.
&gt; +    // Instead we smoothly approach this value to avoid glitching.
&gt; +    float smoothedValue() const { return static_cast&lt;float&gt;(m_smoothedValue); }

These casts between floats and doubles are verbose. I think you should consider changing all of these implementing classes to use floats internally rather than doubles, and pass floats around in the API.

&gt; +
&gt; +    // Smoothly exponentially approaches to (de-zippers) the desired value.
&gt; +    // Returns true if smoothed value has already snapped exactly to value.
&gt; +    bool smooth()
&gt; +    {
&gt; +        if (m_smoothedValue == m_value) {
&gt; +            // Smoothed value has already approached and snapped to value.
&gt; +            return true;
&gt; +        }
&gt; +
&gt; +        // Exponential approach
&gt; +        m_smoothedValue += (m_value - m_smoothedValue) * m_smoothingConstant;
&gt; +
&gt; +        // If we get close enough then snap to actual value.
&gt; +        if (fabs(m_smoothedValue - m_value) &lt; SnapThreshold) // FIXME: the threshold needs to be adjustable depending on range - but this is OK general purpose value.
&gt; +            m_smoothedValue = m_value;
&gt; +
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    void resetSmoothedValue() { m_smoothedValue = m_value; }
&gt; +    void setSmoothingConstant(double k) { m_smoothingConstant = k; }
&gt; +
&gt; +private:
&gt; +    String m_name;
&gt; +    double m_value;
&gt; +    double m_defaultValue;
&gt; +    double m_minValue;
&gt; +    double m_maxValue;
&gt; +    unsigned m_units;
&gt; +
&gt; +    // Smoothing (de-zippering)
&gt; +    double m_smoothedValue;
&gt; +    double m_smoothingConstant;
&gt; +};
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // AudioParam_h
&gt; Index: WebCore/webaudio/AudioParam.idl
&gt; ===================================================================
&gt; --- WebCore/webaudio/AudioParam.idl	(revision 0)
&gt; +++ WebCore/webaudio/AudioParam.idl	(revision 0)
&gt; @@ -0,0 +1,43 @@
&gt; +/*
&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.
&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; +
&gt; +module webaudio {
&gt; +    interface [
&gt; +        Conditional=WEB_AUDIO
&gt; +    ] AudioParam {
&gt; +        attribute float value;
&gt; +        readonly attribute float minValue;
&gt; +        readonly attribute float maxValue;
&gt; +        readonly attribute float defaultValue;
&gt; +        
&gt; +        readonly attribute DOMString name;
&gt; +
&gt; +        // FIXME: Could define units constants here (seconds, decibels, cents, etc.)...
&gt; +        readonly attribute unsigned short units;
&gt; +    };
&gt; +}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274121</commentid>
    <comment_count>4</comment_count>
      <attachid>66119</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-03 12:24:37 -0700</bug_when>
    <thetext>Comment on attachment 66119
Patch

Clearing flags on attachment: 66119

Committed r66759: &lt;http://trac.webkit.org/changeset/66759&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274122</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-03 12:24:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66119</attachid>
            <date>2010-08-31 15:01:31 -0700</date>
            <delta_ts>2010-09-03 12:24:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44995-20100831150130.patch</filename>
            <type>text/plain</type>
            <size>8238</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjU0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDgtMzEgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgQXVkaW9QYXJhbSBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDQ5OTUKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiB3ZWJhdWRpbzogQWRkZWQuCisg
ICAgICAgICogd2ViYXVkaW8vQXVkaW9QYXJhbS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvUGFyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtOjpBdWRp
b1BhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvUGFyYW06OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
UGFyYW06Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6bWluVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6bWF4VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9QYXJhbTo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFy
YW06OnVuaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OnNtb290aGVkVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6c21vb3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvUGFyYW06OnJlc2V0U21vb3RoZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1BhcmFtOjpzZXRTbW9vdGhpbmdDb25zdGFudCk6CisgICAgICAgICogd2ViYXVkaW8vQXVk
aW9QYXJhbS5pZGw6IEFkZGVkLgorCiAyMDEwLTA4LTMxICBFcmljIENhcmxzb24gIDxlcmljLmNh
cmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRl
eDogV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1BhcmFtLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvUGFyYW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlv
UGFyYW1faAorI2RlZmluZSBBdWRpb1BhcmFtX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1BhcmFtIDogcHVibGljIFJlZkNvdW50ZWQ8QXVk
aW9QYXJhbT4geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVsdFNtb290
aGluZ0NvbnN0YW50ID0gMC4wNTsKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIFNuYXBUaHJlc2hv
bGQgPSAwLjAwMTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvUGFyYW0+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUsIGRvdWJsZSBtaW5WYWx1ZSwg
ZG91YmxlIG1heFZhbHVlLCB1bnNpZ25lZCB1bml0cyA9IDApCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEF1ZGlvUGFyYW0obmFtZSwgZGVmYXVsdFZhbHVlLCBtaW5WYWx1ZSwg
bWF4VmFsdWUsIHVuaXRzKSk7CisgICAgfQorCisgICAgQXVkaW9QYXJhbShjb25zdCBTdHJpbmcm
IG5hbWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUsIGRvdWJsZSBtaW5WYWx1ZSwgZG91YmxlIG1heFZh
bHVlLCB1bnNpZ25lZCB1bml0cyA9IDApCisgICAgICAgIDogbV9uYW1lKG5hbWUpCisgICAgICAg
ICwgbV92YWx1ZShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgbV9kZWZhdWx0VmFsdWUoZGVmYXVs
dFZhbHVlKQorICAgICAgICAsIG1fbWluVmFsdWUobWluVmFsdWUpCisgICAgICAgICwgbV9tYXhW
YWx1ZShtYXhWYWx1ZSkKKyAgICAgICAgLCBtX3VuaXRzKHVuaXRzKQorICAgICAgICAsIG1fc21v
b3RoZWRWYWx1ZShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgbV9zbW9vdGhpbmdDb25zdGFudChE
ZWZhdWx0U21vb3RoaW5nQ29uc3RhbnQpCisgICAgeworICAgIH0KKworICAgIGZsb2F0IHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUpOyB9CisgICAgdm9p
ZCBzZXRWYWx1ZShmbG9hdCB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKworICAgIFN0cmlu
ZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBmbG9hdCBtaW5WYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX21pblZhbHVlKTsgfQorICAgIGZs
b2F0IG1heFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF4VmFs
dWUpOyB9CisgICAgZmxvYXQgZGVmYXVsdFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fZGVmYXVsdFZhbHVlKTsgfQorICAgIHVuc2lnbmVkIHVuaXRzKCkgY29uc3Qg
eyByZXR1cm4gbV91bml0czsgfQorCisgICAgLy8gVmFsdWUgc21vb3RoaW5nOgorCisgICAgLy8g
V2hlbiBhIG5ldyB2YWx1ZSBpcyBzZXQgd2l0aCBzZXRWYWx1ZSgpLCBpbiBvdXIgaW50ZXJuYWwg
dXNlIG9mIHRoZSBwYXJhbWV0ZXIgd2UgZG9uJ3QgaW1tZWRpYXRlbHkganVtcCB0byBpdC4KKyAg
ICAvLyBJbnN0ZWFkIHdlIHNtb290aGx5IGFwcHJvYWNoIHRoaXMgdmFsdWUgdG8gYXZvaWQgZ2xp
dGNoaW5nLgorICAgIGZsb2F0IHNtb290aGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9zbW9vdGhlZFZhbHVlKTsgfQorCisgICAgLy8gU21vb3RobHkgZXhwb25l
bnRpYWxseSBhcHByb2FjaGVzIHRvIChkZS16aXBwZXJzKSB0aGUgZGVzaXJlZCB2YWx1ZS4KKyAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgc21vb3RoZWQgdmFsdWUgaGFzIGFscmVhZHkgc25hcHBlZCBl
eGFjdGx5IHRvIHZhbHVlLgorICAgIGJvb2wgc21vb3RoKCkKKyAgICB7CisgICAgICAgIGlmICht
X3Ntb290aGVkVmFsdWUgPT0gbV92YWx1ZSkgeworICAgICAgICAgICAgLy8gU21vb3RoZWQgdmFs
dWUgaGFzIGFscmVhZHkgYXBwcm9hY2hlZCBhbmQgc25hcHBlZCB0byB2YWx1ZS4KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gRXhwb25lbnRpYWwgYXBw
cm9hY2gKKyAgICAgICAgbV9zbW9vdGhlZFZhbHVlICs9IChtX3ZhbHVlIC0gbV9zbW9vdGhlZFZh
bHVlKSAqIG1fc21vb3RoaW5nQ29uc3RhbnQ7CisKKyAgICAgICAgLy8gSWYgd2UgZ2V0IGNsb3Nl
IGVub3VnaCB0aGVuIHNuYXAgdG8gYWN0dWFsIHZhbHVlLgorICAgICAgICBpZiAoZmFicyhtX3Nt
b290aGVkVmFsdWUgLSBtX3ZhbHVlKSA8IFNuYXBUaHJlc2hvbGQpIC8vIEZJWE1FOiB0aGUgdGhy
ZXNob2xkIG5lZWRzIHRvIGJlIGFkanVzdGFibGUgZGVwZW5kaW5nIG9uIHJhbmdlIC0gYnV0IHRo
aXMgaXMgT0sgZ2VuZXJhbCBwdXJwb3NlIHZhbHVlLgorICAgICAgICAgICAgbV9zbW9vdGhlZFZh
bHVlID0gbV92YWx1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9p
ZCByZXNldFNtb290aGVkVmFsdWUoKSB7IG1fc21vb3RoZWRWYWx1ZSA9IG1fdmFsdWU7IH0KKyAg
ICB2b2lkIHNldFNtb290aGluZ0NvbnN0YW50KGRvdWJsZSBrKSB7IG1fc21vb3RoaW5nQ29uc3Rh
bnQgPSBrOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBkb3VibGUgbV92
YWx1ZTsKKyAgICBkb3VibGUgbV9kZWZhdWx0VmFsdWU7CisgICAgZG91YmxlIG1fbWluVmFsdWU7
CisgICAgZG91YmxlIG1fbWF4VmFsdWU7CisgICAgdW5zaWduZWQgbV91bml0czsKKworICAgIC8v
IFNtb290aGluZyAoZGUtemlwcGVyaW5nKQorICAgIGRvdWJsZSBtX3Ntb290aGVkVmFsdWU7Cisg
ICAgZG91YmxlIG1fc21vb3RoaW5nQ29uc3RhbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBBdWRpb1BhcmFtX2gKSW5kZXg6IFdlYkNvcmUvd2ViYXVkaW8vQXVk
aW9QYXJhbS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmlk
bAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2ViYXVkaW8geworICAgIGludGVyZmFj
ZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTworICAgIF0gQXVkaW9QYXJhbSB7Cisg
ICAgICAgIGF0dHJpYnV0ZSBmbG9hdCB2YWx1ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGZsb2F0IG1pblZhbHVlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgbWF4VmFs
dWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBkZWZhdWx0VmFsdWU7CisgICAg
ICAgIAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CisKKyAgICAg
ICAgLy8gRklYTUU6IENvdWxkIGRlZmluZSB1bml0cyBjb25zdGFudHMgaGVyZSAoc2Vjb25kcywg
ZGVjaWJlbHMsIGNlbnRzLCBldGMuKS4uLgorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgc2hvcnQgdW5pdHM7CisgICAgfTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>