<?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>70155</bug_id>
          
          <creation_ts>2011-10-14 16:06:33 -0700</creation_ts>
          <short_desc>Add AudioSourceProviderClient and setFormat() method so we can know audio stream format</short_desc>
          <delta_ts>2011-10-27 09:42:58 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>aroben</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484388</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-14 16:06:33 -0700</bug_when>
    <thetext>Add MediaPlayer::interceptAudioStream() method so we can know audio stream format</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484389</commentid>
    <comment_count>1</comment_count>
      <attachid>111104</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-14 16:09:21 -0700</bug_when>
    <thetext>Created attachment 111104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484391</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-14 16:15:56 -0700</bug_when>
    <thetext>The introduction of MediaPlayer::audioSourceProvider() was a good first step at gaining access to the audio stream from an HTMLMediaElement, and it *basically* works with a prototype in Chrome.  However, because the sample-rate of this stream may differ from the AudioContext sample-rate, a conversion may be necessary.  Moreover, the .src attribute may be changed dynamically during &lt;audio&gt;/&lt;video&gt; playback resulting in changes to the number of channels and sample-rate.

This patch adds a callback mechanism by adding AudioSourceProvider::Client which has a setFormat() method to receive the initial format and any subsequent changes to the audio stream format.

A subsequent patch will actually make use of this information to dynamically configure any necessary converters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484599</commentid>
    <comment_count>3</comment_count>
      <attachid>111104</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-15 10:23:45 -0700</bug_when>
    <thetext>Comment on attachment 111104
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests.  This is covered by existing MediaElementAudioSourceNode tests.

This comment isn&apos;t correct, the existing tests don&apos;t cover the new code. It can&apos;t be tested because it isn&apos;t completely functional yet.


&gt; Source/WebCore/ChangeLog:22
&gt; +        * html/HTMLMediaElement.cpp:
&gt; +        (WebCore::HTMLMediaElement::createMediaPlayer):
&gt; +        (WebCore::HTMLMediaElement::setAudioSourceNode):
&gt; +        * platform/audio/AudioSourceProvider.h:
&gt; +        (WebCore::AudioSourceProvider::Client::~Client):
&gt; +        * platform/graphics/MediaPlayer.cpp:
&gt; +        (WebCore::MediaPlayer::interceptAudioStream):
&gt; +        * platform/graphics/MediaPlayer.h:
&gt; +        * platform/graphics/MediaPlayerPrivate.h:
&gt; +        (WebCore::MediaPlayerPrivateInterface::interceptAudioStream):
&gt; +        * webaudio/MediaElementAudioSourceNode.cpp:
&gt; +        (WebCore::MediaElementAudioSourceNode::setFormat):
&gt; +        * webaudio/MediaElementAudioSourceNode.h:

I would prefer to have comments about what changed here.


&gt; Source/WebCore/html/HTMLMediaElement.cpp:3019
&gt;  void HTMLMediaElement::setAudioSourceNode(MediaElementAudioSourceNode* sourceNode)
&gt;  {
&gt;      m_audioSourceNode = sourceNode;
&gt; +
&gt; +    if (m_player)
&gt; +        m_player-&gt;interceptAudioStream(m_audioSourceNode);
&gt;  }

I am not wild about the name &quot;interceptAudioStream&quot;. Why do HTMLMediaElement and MediaPlayerPrivate have different names?


&gt; Source/WebCore/platform/graphics/MediaPlayer.h:334
&gt; +    // interceptAudioStream() taps into the audio stream (disabling the normal playback path).
&gt; +    // It should be called on the main thread.
&gt; +    // The client will be called back (on the main thread) when the audio format is available.
&gt; +    void interceptAudioStream(AudioSourceProvider::Client*);

Does it necessarily disable the normal playback path? 

For example, what happens when play is called on a &lt;video&gt; element that has audio and video? I would expect that the video plays in sync with the processed audio. If the normal playback path is disabled, who is responsible for maintaining sync?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484602</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-15 10:54:30 -0700</bug_when>
    <thetext>Hi Eric, thanks for having a look.  I&apos;ll try to partially answer some of your comments here.

(In reply to comment #3)
&gt; (From update of attachment 111104 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111104&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:3019
&gt; &gt;  void HTMLMediaElement::setAudioSourceNode(MediaElementAudioSourceNode* sourceNode)
&gt; &gt;  {
&gt; &gt;      m_audioSourceNode = sourceNode;
&gt; &gt; +
&gt; &gt; +    if (m_player)
&gt; &gt; +        m_player-&gt;interceptAudioStream(m_audioSourceNode);
&gt; &gt;  }
&gt; 
&gt; I am not wild about the name &quot;interceptAudioStream&quot;. Why do HTMLMediaElement and MediaPlayerPrivate have different names?

I&apos;m not too attached to any names here.  Would you suggest that I use &quot;setAudioSourceNode&quot; also for MediaPlayer/MediaPlayerPrivate instead
of &quot;interceptAudioStream&quot;?

&gt; 
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/MediaPlayer.h:334
&gt; &gt; +    // interceptAudioStream() taps into the audio stream (disabling the normal playback path).
&gt; &gt; +    // It should be called on the main thread.
&gt; &gt; +    // The client will be called back (on the main thread) when the audio format is available.
&gt; &gt; +    void interceptAudioStream(AudioSourceProvider::Client*);
&gt; 
&gt; Does it necessarily disable the normal playback path? 

I think it really should, because if the idea is to apply a filter of some kind, such as a graphic EQ or any other effect, then if the normal playback path is not disabled, the effect is not the desired one because we would have the EQ&apos;d sound mixed in with the full &quot;dry&quot; original sound.  Or, if the idea is to split out a single channel (left-channel for instance) and not play the right channel...


&gt; 
&gt; For example, what happens when play is called on a &lt;video&gt; element that has audio and video? I would expect that the video plays in sync with the processed audio. If the normal playback path is disabled, who is responsible for maintaining sync?

The implementation still needs to continue to maintain sync between video and audio.  The difference being that the MediaElementAudioSourceNode is now pulling the audio stream instead of the audio hardware (AUGraph probably in the mac port case).  The exact implementation details will vary from port-to-port.  It may be worth talking about some of these details offline in IRC/phone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484607</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-15 11:23:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Hi Eric, thanks for having a look.  I&apos;ll try to partially answer some of your comments here.
&gt; 
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 111104 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111104&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:3019
&gt; &gt; &gt;  void HTMLMediaElement::setAudioSourceNode(MediaElementAudioSourceNode* sourceNode)
&gt; &gt; &gt;  {
&gt; &gt; &gt;      m_audioSourceNode = sourceNode;
&gt; &gt; &gt; +
&gt; &gt; &gt; +    if (m_player)
&gt; &gt; &gt; +        m_player-&gt;interceptAudioStream(m_audioSourceNode);
&gt; &gt; &gt;  }
&gt; &gt; 
&gt; &gt; I am not wild about the name &quot;interceptAudioStream&quot;. Why do HTMLMediaElement and MediaPlayerPrivate have different names?
&gt; 
&gt; I&apos;m not too attached to any names here.  Would you suggest that I use &quot;setAudioSourceNode&quot; also for MediaPlayer/MediaPlayerPrivate instead
&gt; of &quot;interceptAudioStream&quot;?
&gt; 
Yes, I think it makes sense to use the same names.

&gt; &gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/MediaPlayer.h:334
&gt; &gt; &gt; +    // interceptAudioStream() taps into the audio stream (disabling the normal playback path).
&gt; &gt; &gt; +    // It should be called on the main thread.
&gt; &gt; &gt; +    // The client will be called back (on the main thread) when the audio format is available.
&gt; &gt; &gt; +    void interceptAudioStream(AudioSourceProvider::Client*);
&gt; &gt; 
&gt; &gt; Does it necessarily disable the normal playback path? 
&gt; 
&gt; I think it really should, because if the idea is to apply a filter of some kind, such as a graphic EQ or any other effect, then if the normal playback path is not disabled, the effect is not the desired one because we would have the EQ&apos;d sound mixed in with the full &quot;dry&quot; original sound.  Or, if the idea is to split out a single channel (left-channel for instance) and not play the right channel...
&gt; 
OK, I misunderstood the comment - I assumed it meant that the playback was completely disconnected from the media element. I am not sure how to clarify the comment, maybe say something about how the audio is processed by the graph before being rendered?


&gt; 
&gt; &gt; 
&gt; &gt; For example, what happens when play is called on a &lt;video&gt; element that has audio and video? I would expect that the video plays in sync with the processed audio. If the normal playback path is disabled, who is responsible for maintaining sync?
&gt; 
&gt; The implementation still needs to continue to maintain sync between video and audio.  The difference being that the MediaElementAudioSourceNode is now pulling the audio stream instead of the audio hardware (AUGraph probably in the mac port case).  The exact implementation details will vary from port-to-port.  It may be worth talking about some of these details offline in IRC/phone.
&gt;
Agreed, we should talk about these details soon and get some text into the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484979</commentid>
    <comment_count>6</comment_count>
      <attachid>111104</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-10-17 00:49:49 -0700</bug_when>
    <thetext>Comment on attachment 111104
Patch

Attachment 111104 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10078857</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486364</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-18 15:42:48 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Hi Eric, thanks for having a look.  I&apos;ll try to partially answer some of your comments here.
&gt; &gt; 
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 111104 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111104&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:3019
&gt; &gt; &gt; &gt;  void HTMLMediaElement::setAudioSourceNode(MediaElementAudioSourceNode* sourceNode)
&gt; &gt; &gt; &gt;  {
&gt; &gt; &gt; &gt;      m_audioSourceNode = sourceNode;
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +    if (m_player)
&gt; &gt; &gt; &gt; +        m_player-&gt;interceptAudioStream(m_audioSourceNode);
&gt; &gt; &gt; &gt;  }
&gt; &gt; &gt; 
&gt; &gt; &gt; I am not wild about the name &quot;interceptAudioStream&quot;. Why do HTMLMediaElement and MediaPlayerPrivate have different names?
&gt; &gt; 
&gt; &gt; I&apos;m not too attached to any names here.  Would you suggest that I use &quot;setAudioSourceNode&quot; also for MediaPlayer/MediaPlayerPrivate instead
&gt; &gt; of &quot;interceptAudioStream&quot;?
&gt; &gt; 
&gt; Yes, I think it makes sense to use the same names.

Ahhh, now I remember why I didn&apos;t make a setAudioSourceNode(MediaElementAudioSourceNode*) method on MediaPlayer -- it was because MediaPlayer and MediaPlayerPrivate
are in WebCore/platform and aren&apos;t supposed to access classes (like MediaElementAudioSourceNode) which are defined in WebCore.  Instead, I tried a more general API which is using a WebCore/platform class AudioSourceProvider::Client.   It&apos;s a layering rule I thought I heard mentioned by Darin Adler a while back.

I&apos;m not sure if this layering issue is important or not, and would like your guidance here with setAudioSourceNode(MediaElementAudioSourceNode*) as opposed to something like interceptAudioStream() (or a better named version)

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486940</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-19 13:18:32 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; 
&gt; Ahhh, now I remember why I didn&apos;t make a setAudioSourceNode(MediaElementAudioSourceNode*) method on MediaPlayer -- it was because MediaPlayer and MediaPlayerPrivate
&gt; are in WebCore/platform and aren&apos;t supposed to access classes (like MediaElementAudioSourceNode) which are defined in WebCore.  Instead, I tried a more general API which is using a WebCore/platform class AudioSourceProvider::Client.   It&apos;s a layering rule I thought I heard mentioned by Darin Adler a while back.
&gt; 
&gt; I&apos;m not sure if this layering issue is important or not, and would like your guidance here with setAudioSourceNode(MediaElementAudioSourceNode*) as opposed to something like interceptAudioStream() (or a better named version)
&gt; 
Getting the layering right is important. My point was that &quot;interceptAudioStream&quot; didn&apos;t help me understand what the method did, and that as long as the HTMediaElement method just passed the parameter through:

void HTMLMediaElement::setAudioSourceNode(MediaElementAudioSourceNode* sourceNode)
{
    m_audioSourceNode = sourceNode;

    if (m_player)
        m_player-&gt;interceptAudioStream(m_audioSourceNode);
}

 we might as well use the same name. 

If you pass a different object the player method name shouldn&apos;t be the same, but I still don&apos;t think &quot;interceptAudioStream&quot; is right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486942</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-19 13:22:40 -0700</bug_when>
    <thetext>FYI, see https://bugs.webkit.org/show_bug.cgi?id=49192 for a discussion of automatically detecting and rejecting layering violations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486986</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-19 14:03:35 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; 
&gt; &gt; Ahhh, now I remember why I didn&apos;t make a setAudioSourceNode(MediaElementAudioSourceNode*) method on MediaPlayer -- it was because MediaPlayer and MediaPlayerPrivate
&gt; &gt; are in WebCore/platform and aren&apos;t supposed to access classes (like MediaElementAudioSourceNode) which are defined in WebCore.  Instead, I tried a more general API which is using a WebCore/platform class AudioSourceProvider::Client.   It&apos;s a layering rule I thought I heard mentioned by Darin Adler a while back.
&gt; &gt; 
&gt; &gt; I&apos;m not sure if this layering issue is important or not, and would like your guidance here with setAudioSourceNode(MediaElementAudioSourceNode*) as opposed to something like interceptAudioStream() (or a better named version)
&gt; &gt; 
&gt; Getting the layering right is important. My point was that &quot;interceptAudioStream&quot; didn&apos;t help me understand what the method did, and that as long as the HTMediaElement method just passed the parameter through:
&gt; 
&gt; void HTMLMediaElement::setAudioSourceNode(MediaElementAudioSourceNode* sourceNode)
&gt; {
&gt;     m_audioSourceNode = sourceNode;
&gt; 
&gt;     if (m_player)
&gt;         m_player-&gt;interceptAudioStream(m_audioSourceNode);
&gt; }
&gt; 
&gt;  we might as well use the same name. 
&gt; 
&gt; If you pass a different object the player method name shouldn&apos;t be the same, but I still don&apos;t think &quot;interceptAudioStream&quot; is right.

If the layering is important, then I think we&apos;ll not be able to use MediaElementAudioSourceNode directly in a MediaPlayer method (since it&apos;s not part of &quot;platform&quot;)

The abstraction I&apos;ve made in WebCore/platform for a similar (but more general) type of object is AudioSourceProvider::Client

What do you think of the name:

    void MediaPlayer::setAudioSourceProviderClient(AudioSourceProvider::Client*);

or possibly even better/simpler:

    void MediaPlayer::setAudioSource(AudioSourceProvider::Client*);

or instead of defining the class as AudioSourceProvider::Client, define an &quot;AudioSource&quot; class, then we have:

    void MediaPlayer::setAudioSource(AudioSource*);



My preference is the 2nd option:

    void MediaPlayer::setAudioSource(AudioSourceProvider::Client*);

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487539</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-20 07:07:05 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; My preference is the 2nd option:
&gt; 
&gt;     void MediaPlayer::setAudioSource(AudioSourceProvider::Client*);
&gt; 
&gt; What do you think?
&gt;
This seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488574</commentid>
    <comment_count>12</comment_count>
      <attachid>112003</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-21 12:51:36 -0700</bug_when>
    <thetext>Created attachment 112003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488579</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-21 12:54:01 -0700</bug_when>
    <thetext>Thanks Eric, I think this latest patch addresses your comments.  Naming-wise, I&apos;ve changed interceptAudioStream() to setAudioSource().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488677</commentid>
    <comment_count>14</comment_count>
      <attachid>112003</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-10-21 14:49:39 -0700</bug_when>
    <thetext>Comment on attachment 112003
Patch

Attachment 112003 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10197067</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489784</commentid>
    <comment_count>15</comment_count>
      <attachid>112278</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-24 17:00:47 -0700</bug_when>
    <thetext>Created attachment 112278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489787</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-24 17:04:48 -0700</bug_when>
    <thetext>Eric, this latest patch has some simplifications that Darin Fisher recommended in an offline discussion.

The changes are:

* Break out AudioSourceProviderClient as a separate class (and header file).  Darin suggests this because then we can forward declare AudioSourceProviderClient (can&apos;t do that with nested class)

* Simplified MediaPlayer so there&apos;s no additional &quot;setAudioSource()&quot; method.  Instead a &quot;setClient()&quot; method is added to AudioSourceProvider which accomplishes the same thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489796</commentid>
    <comment_count>17</comment_count>
      <attachid>112278</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 17:10:11 -0700</bug_when>
    <thetext>Comment on attachment 112278
Patch

Attachment 112278 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10208114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489874</commentid>
    <comment_count>18</comment_count>
      <attachid>112278</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-10-24 22:30:00 -0700</bug_when>
    <thetext>Comment on attachment 112278
Patch

Attachment 112278 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10210113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490062</commentid>
    <comment_count>19</comment_count>
      <attachid>112278</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-25 09:09:11 -0700</bug_when>
    <thetext>Comment on attachment 112278
Patch

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

Looks like HTMLMediaElement.cpp needs to include AudioSourceProviderClient.h.


&gt; Source/WebCore/html/HTMLMediaElement.cpp:3008
&gt; +        // If we&apos;re creating the player from scratch, make sure its AudioSourceProvider knows about the MediaElementAudioSourceNode.
&gt; +        if (audioSourceProvider())
&gt; +            audioSourceProvider()-&gt;setClient(m_audioSourceNode);

Nit: this comment doesn&apos;t make sense, how does &quot;if (audioSourceProvider())&quot; tell you if the player was created from scratch?


&gt; Source/WebCore/platform/audio/AudioSourceProvider.h:43
&gt; +    // If a client is set, we call it back when the audio format is available.

Nit: &quot;when the audio format is available *or changes*&quot;?


&gt; Source/WebCore/webaudio/MediaElementAudioSourceNode.cpp:63
&gt; +void MediaElementAudioSourceNode::setFormat(size_t, float)
&gt; +{
&gt; +    // FIXME: setup a sample-rate converter if necessary to convert to the AudioContext sample-rate.
&gt; +}

It is probably worth having an ASSERT here as long as the sample-rate converter setup is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491115</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-10-26 12:58:49 -0700</bug_when>
    <thetext>Committed r98512: &lt;http://trac.webkit.org/changeset/98512&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491641</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-10-27 09:42:06 -0700</bug_when>
    <thetext>Windows build fix in r98592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491642</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-10-27 09:42:19 -0700</bug_when>
    <thetext>Not sure why the Windows EWS didn&apos;t catch this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491643</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-10-27 09:42:58 -0700</bug_when>
    <thetext>Ah, the committed patch was not the same as the one that went through the EWS.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111104</attachid>
            <date>2011-10-14 16:09:21 -0700</date>
            <delta_ts>2011-10-21 12:51:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70155-20111014160918.patch</filename>
            <type>text/plain</type>
            <size>7255</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxODBjMmY0MWE4YzYwYjBl
ZTc4Yjk5YTI5MTBkNDkwZDc5YmJiMmE1Li5mN2UwMjBkZjQzOGE2MTBjMGYwMTgzOTU4NWQ2ODlh
ZTBhOTAzZWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMTAtMTQgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgTWVkaWFQbGF5ZXI6
OmludGVyY2VwdEF1ZGlvU3RyZWFtKCkgbWV0aG9kIHNvIHdlIGNhbiBrbm93IGF1ZGlvIHN0cmVh
bSBmb3JtYXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcwMTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiAgVGhpcyBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIE1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZSB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRBdWRpb1NvdXJjZU5v
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvU291cmNlUHJvdmlkZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXI6OkNsaWVudDo6fkNsaWVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXI6OmludGVyY2VwdEF1ZGlvU3RyZWFtKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyUHJpdmF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlOjppbnRlcmNlcHRBdWRpb1N0cmVhbSk6CisgICAgICAgICogd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZTo6c2V0Rm9ybWF0KToKKyAgICAgICAgKiB3ZWJhdWRpby9N
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaDoKKwogMjAxMS0xMC0xMiAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY5OTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAppbmRleCAyNjZlM2EzMjk1MzI4NDViODc1ZWU3YzU4NTFhNTE5NWU0MGIzYmYwLi5lN2ViZjk2
OTRiMDA2N2Q5NmExNzE4MWI0MjlmMDM1N2YyNTIzODJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTMwMDIsOCArMzAwMiwxMCBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyKCkKICAgICBtX3BsYXllciA9IE1lZGlhUGxheWVy
OjpjcmVhdGUodGhpcyk7CiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIGlmIChtX2F1ZGlv
U291cmNlTm9kZSkKKyAgICBpZiAobV9hdWRpb1NvdXJjZU5vZGUpIHsKKyAgICAgICAgbV9wbGF5
ZXItPmludGVyY2VwdEF1ZGlvU3RyZWFtKG1fYXVkaW9Tb3VyY2VOb2RlKTsKICAgICAgICAgbV9h
dWRpb1NvdXJjZU5vZGUtPnVubG9jaygpOworICAgIH0KICNlbmRpZgogfQogCkBAIC0zMDExLDYg
KzMwMTMsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyKCkKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0QXVkaW9Tb3VyY2VOb2RlKE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZSogc291cmNlTm9kZSkKIHsKICAgICBtX2F1ZGlvU291cmNlTm9kZSA9IHNvdXJj
ZU5vZGU7CisKKyAgICBpZiAobV9wbGF5ZXIpCisgICAgICAgIG1fcGxheWVyLT5pbnRlcmNlcHRB
dWRpb1N0cmVhbShtX2F1ZGlvU291cmNlTm9kZSk7CiB9CiAKIEF1ZGlvU291cmNlUHJvdmlkZXIq
IEhUTUxNZWRpYUVsZW1lbnQ6OmF1ZGlvU291cmNlUHJvdmlkZXIoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9Tb3VyY2VQcm92aWRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9Tb3VyY2VQcm92aWRlci5oCmluZGV4IDc3MzU0
NmFhOTUzYmJlMGY4MDQwODZjZDI2ZGJjMjkxODI0Yzc3MWEuLmVjOWJiNzA0YjdkMTAyMDIzM2Qz
NDUyNWFjNjg1ZDY1MjRhYzgxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvU291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb1NvdXJjZVByb3ZpZGVyLmgKQEAgLTM3LDYgKzM3LDEzIEBAIGNsYXNzIEF1
ZGlvQnVzOwogLy8gcHJvdmlkZUlucHV0KCkgZ2V0cyBjYWxsZWQgcmVwZWF0ZWRseSB0byByZW5k
ZXIgdGltZS1zbGljZXMgb2YgYSBjb250aW51b3VzIGF1ZGlvIHN0cmVhbS4KIGNsYXNzIEF1ZGlv
U291cmNlUHJvdmlkZXIgewogcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybWF0KHNpemVfdCBudW1iZXJPZkNoYW5uZWxz
LCBmbG9hdCBzYW1wbGVSYXRlKSA9IDA7CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFs
IH5DbGllbnQoKSB7IH0KKyAgICB9OworCiAgICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChB
dWRpb0J1cyogYnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSA9IDA7CiAgICAgdmlydHVhbCB+
QXVkaW9Tb3VyY2VQcm92aWRlcigpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCAwMThjN2RkMzNlMzhjMWI4Zjc3MzQ1
YThjM2U0ZjgzNWZlYzYwYTczLi5jYTFjNzdiYjk4NDIwZWE2OTZkOWE1NGM1NzNkODAxMGExMjNl
OWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXIuY3BwCkBAIC05MTYsNiArOTE2LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmNoYXJhY3Rlcmlz
dGljQ2hhbmdlZCgpCiB9CiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQordm9pZCBNZWRpYVBsYXll
cjo6aW50ZXJjZXB0QXVkaW9TdHJlYW0oQXVkaW9Tb3VyY2VQcm92aWRlcjo6Q2xpZW50KiBjbGll
bnQpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW50ZXJjZXB0QXVkaW9TdHJlYW0oY2xpZW50
KTsKK30KKwogQXVkaW9Tb3VyY2VQcm92aWRlciogTWVkaWFQbGF5ZXI6OmF1ZGlvU291cmNlUHJv
dmlkZXIoKQogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmF1ZGlvU291cmNlUHJvdmlkZXIoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4
IGM5NmIwMjVkODJkMDA3MDkxNjllZWE1MWMwNzgyNmI3NDUwNmM0NzEuLmFjM2E1MzlhODMwNjcw
NmU2ZWRiNjg3MTUzYTk5YTcyNmFmY2ZjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtNDUsNiArNDUsMTAgQEAKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVk
ZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2VuZGlmCisKICNpZmRlZiBfX09CSkNfXwogQGNs
YXNzIEFWUGxheWVyOwogQGNsYXNzIFFUTW92aWU7CkBAIC01OCw3ICs2Miw2IEBAIGNsYXNzIFFU
TW92aWVWaXN1YWxDb250ZXh0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1ZGlv
U291cmNlUHJvdmlkZXI7CiBjbGFzcyBHU3RyZWFtZXJHV29ybGQ7CiBjbGFzcyBNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2U7CiAKQEAgLTMyNSw2ICszMjgsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShib29sKTsKIAogI2lmIEVOQUJMRShXRUJfQVVESU8p
CisgICAgLy8gaW50ZXJjZXB0QXVkaW9TdHJlYW0oKSB0YXBzIGludG8gdGhlIGF1ZGlvIHN0cmVh
bSAoZGlzYWJsaW5nIHRoZSBub3JtYWwgcGxheWJhY2sgcGF0aCkuCisgICAgLy8gSXQgc2hvdWxk
IGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgLy8gVGhlIGNsaWVudCB3aWxsIGJl
IGNhbGxlZCBiYWNrIChvbiB0aGUgbWFpbiB0aHJlYWQpIHdoZW4gdGhlIGF1ZGlvIGZvcm1hdCBp
cyBhdmFpbGFibGUuCisgICAgdm9pZCBpbnRlcmNlcHRBdWRpb1N0cmVhbShBdWRpb1NvdXJjZVBy
b3ZpZGVyOjpDbGllbnQqKTsKKworICAgIC8vIFRoZSBjbGllbnQgY2FsbHMgYXVkaW9Tb3VyY2VQ
cm92aWRlcigpIGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFkIHRvIGdhaW4gYWNjZXNzIHRv
IHRoZSBhdWRpbyBzdHJlYW0uCiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQ
cm92aWRlcigpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggZjhjNzBhYmUyOGE3ZWQwMWRmYjhh
MmNiN2YxYzYzNjYzN2QzODQ0MS4uZTY1MWYyNjI4MWNhMmQ0MmIzMmFkYzYxNGNjZmYwYzQ0NmVl
MDkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJQcml2YXRlLmgKQEAgLTE1Miw2ICsxNTIsNyBAQCBwdWJsaWM6CiAKIAogI2lmIEVO
QUJMRShXRUJfQVVESU8pCisgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEF1ZGlvU3RyZWFtKEF1
ZGlvU291cmNlUHJvdmlkZXI6OkNsaWVudCopIHsgfQogICAgIHZpcnR1YWwgQXVkaW9Tb3VyY2VQ
cm92aWRlciogYXVkaW9Tb3VyY2VQcm92aWRlcigpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlLmNwcAppbmRleCAyOWI2ZWQzNGEzZDY3NTM3YWVkMGExM2NmZDljYmEzZTNiZWFhMDk5
Li43YzM0YzIyNGFmZDMwOTJhZGNiYzQ3NzNkMmFjNTBkZmU3NzIwMjdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5j
cHAKQEAgLTU3LDYgKzU3LDEyIEBAIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6fk1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZSgpCiAgICAgdW5pbml0aWFsaXplKCk7CiB9CiAKK3ZvaWQg
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hh
bm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICAvLyBGSVhNRTogc2V0dXAgYSBzYW1wbGUtcmF0ZSBjb252ZXJ0ZXIgaWYgbmVjZXNzYXJ5
IHRvIGNvbnZlcnQgdG8gdGhlIEF1ZGlvQ29udGV4dCBzYW1wbGUtcmF0ZS4KK30KKwogdm9pZCBN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZV90IG51bWJlck9mRnJhbWVz
KQogewogICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
aAppbmRleCA2ZDljOWNkODc0Y2FhM2VmYzUxYTFjZmFhNDQ5Nzk5OGM3NTZjNzE2Li5kNjRhN2Uz
NTE0M2MwMmM4MjA4MTAzYzkxZWQ3NmQ3NGU2MjFiMGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaApAQCAtMzYsNyAr
MzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlvQ29udGV4dDsKICAgICAK
LWNsYXNzIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb1NvdXJjZU5v
ZGUgeworY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291
cmNlTm9kZSwgcHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXI6OkNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGUo
QXVkaW9Db250ZXh0KiwgSFRNTE1lZGlhRWxlbWVudCopOwogCkBAIC00OCw2ICs0OCw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKICAgICAKKyAgICAvLyBBdWRpb1NvdXJjZVByb3Zp
ZGVyOjpDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybWF0KHNpemVfdCBudW1iZXJPZkNo
YW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICAKICAgICB2b2lkIGxvY2soKTsKICAgICB2
b2lkIHVubG9jaygpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112003</attachid>
            <date>2011-10-21 12:51:36 -0700</date>
            <delta_ts>2011-10-24 17:00:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70155-20111021125137.patch</filename>
            <type>text/plain</type>
            <size>7719</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxODBjMmY0MWE4YzYwYjBl
ZTc4Yjk5YTI5MTBkNDkwZDc5YmJiMmE1Li4xMzQzMmI4NDhkOGVmYzY2OGU2NTQ2MjRjYTA3YTJh
OGQ4OGExZDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMTAtMjEgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgTWVkaWFQbGF5ZXI6
OnNldEF1ZGlvU291cmNlKCkgbWV0aG9kIHNvIHdlIGNhbiBrbm93IGF1ZGlvIHN0cmVhbSBmb3Jt
YXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTU1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIHNpbmNlIHRoZXJlIGlzbid0IGFuIGltcGxlbWVudGF0aW9uIHlldC4KKworICAgICAg
ICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpzZXRBdWRpb1NvdXJjZU5vZGUpOgorICAgICAgICBMZXQgTWVkaWFQbGF5ZXIg
a25vdyBhYm91dCB0aGUgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIHNvIGl0IGNhbiBjYWxs
YmFjayB3aXRoIGF1ZGlvIHN0cmVhbSBmb3JtYXQgaW5mb3JtYXRpb24uCisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vQXVkaW9Tb3VyY2VQcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Tb3VyY2VQcm92aWRlcjo6Q2xpZW50Ojp+Q2xpZW50KToKKyAgICAgICAgQWRkIEF1ZGlvU291
cmNlUHJvdmlkZXI6OkNsaWVudCBhYnN0cmFjdCBjbGFzcyB3aGljaCBnZXRzIGF1ZGlvIHN0cmVh
bSBmb3JtYXQgY2FsbGJhY2tzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpzZXRBdWRpb1NvdXJjZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c2V0QXVkaW9Tb3VyY2UpOgorICAgICAgICBB
ZGQgc2V0QXVkaW9Tb3VyY2UoKSBtZXRob2QuCisgICAgICAgICogd2ViYXVkaW8vTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZTo6c2V0Rm9ybWF0KToKKyAgICAgICAgKiB3ZWJhdWRpby9NZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaDoKKyAgICAgICAgTWFrZSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUgaW1wbGVtZW50IHRoZSBBdWRpb1NvdXJjZVByb3ZpZGVyOjpDbGllbnQgaW50ZXJmYWNl
LgorICAgICAgICBPZiBzcGVjaWFsIGludGVyZXN0IGlzIHRoZSBzZXRGb3JtYXQoKSBtZXRob2Qg
d2hpY2ggZ2V0cyBjYWxsYmFja3MgYWJvdXQgc3RyZWFtIGZvcm1hdCBjaGFuZ2VzLgorICAgICAg
ICBGb3Igbm93IHRoaXMgaXMganVzdCBhIHN0dWIgaW1wbGVtZW50YXRpb24gYW5kIGZ1cnRoZXIg
cGF0Y2hlcyBhcmUgbmVlZGVkIHRvIHRha2UgY2FyZSBvZiBmb3JtYXQgY2hhbmdlcy4KKwogMjAx
MS0xMC0xMiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTUwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAyNjZlM2EzMjk1MzI4NDViODc1ZWU3YzU4NTFh
NTE5NWU0MGIzYmYwLi43N2Q3MDUzMzEyMTY0YTRhOTZiMzJlNTAwYWFmODBmYTEzMjgwYzFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTMwMDIsOCArMzAw
MiwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyKCkKICAgICBt
X3BsYXllciA9IE1lZGlhUGxheWVyOjpjcmVhdGUodGhpcyk7CiAKICNpZiBFTkFCTEUoV0VCX0FV
RElPKQotICAgIGlmIChtX2F1ZGlvU291cmNlTm9kZSkKKyAgICBpZiAobV9hdWRpb1NvdXJjZU5v
ZGUpIHsKKyAgICAgICAgbV9wbGF5ZXItPnNldEF1ZGlvU291cmNlKG1fYXVkaW9Tb3VyY2VOb2Rl
KTsKICAgICAgICAgbV9hdWRpb1NvdXJjZU5vZGUtPnVubG9jaygpOworICAgIH0KICNlbmRpZgog
fQogCkBAIC0zMDExLDYgKzMwMTMsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1l
ZGlhUGxheWVyKCkKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0QXVkaW9Tb3VyY2VOb2RlKE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSogc291cmNlTm9kZSkKIHsKICAgICBtX2F1ZGlvU291
cmNlTm9kZSA9IHNvdXJjZU5vZGU7CisKKyAgICBpZiAobV9wbGF5ZXIpCisgICAgICAgIG1fcGxh
eWVyLT5zZXRBdWRpb1NvdXJjZShtX2F1ZGlvU291cmNlTm9kZSk7CiB9CiAKIEF1ZGlvU291cmNl
UHJvdmlkZXIqIEhUTUxNZWRpYUVsZW1lbnQ6OmF1ZGlvU291cmNlUHJvdmlkZXIoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9Tb3VyY2VQcm92aWRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9Tb3VyY2VQcm92aWRlci5oCmlu
ZGV4IDc3MzU0NmFhOTUzYmJlMGY4MDQwODZjZDI2ZGJjMjkxODI0Yzc3MWEuLmVjOWJiNzA0Yjdk
MTAyMDIzM2QzNDUyNWFjNjg1ZDY1MjRhYzgxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1NvdXJjZVByb3ZpZGVyLmgKQEAgLTM3LDYgKzM3LDEzIEBA
IGNsYXNzIEF1ZGlvQnVzOwogLy8gcHJvdmlkZUlucHV0KCkgZ2V0cyBjYWxsZWQgcmVwZWF0ZWRs
eSB0byByZW5kZXIgdGltZS1zbGljZXMgb2YgYSBjb250aW51b3VzIGF1ZGlvIHN0cmVhbS4KIGNs
YXNzIEF1ZGlvU291cmNlUHJvdmlkZXIgewogcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybWF0KHNpemVfdCBudW1iZXJP
ZkNoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKSA9IDA7CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKyAgICB9OworCiAgICAgdmlydHVhbCB2b2lkIHByb3Zp
ZGVJbnB1dChBdWRpb0J1cyogYnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSA9IDA7CiAgICAg
dmlydHVhbCB+QXVkaW9Tb3VyY2VQcm92aWRlcigpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCAwMThjN2RkMzNlMzhj
MWI4Zjc3MzQ1YThjM2U0ZjgzNWZlYzYwYTczLi5iMDM4OGRiYmNmNDAwMDkzZmZiZmJlMDExM2Ix
N2I0ZGFiY2I2ZTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCkBAIC05MTYsNiArOTE2LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmNo
YXJhY3RlcmlzdGljQ2hhbmdlZCgpCiB9CiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQordm9pZCBN
ZWRpYVBsYXllcjo6c2V0QXVkaW9Tb3VyY2UoQXVkaW9Tb3VyY2VQcm92aWRlcjo6Q2xpZW50KiBj
bGllbnQpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2V0QXVkaW9Tb3VyY2UoY2xpZW50KTsK
K30KKwogQXVkaW9Tb3VyY2VQcm92aWRlciogTWVkaWFQbGF5ZXI6OmF1ZGlvU291cmNlUHJvdmlk
ZXIoKQogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmF1ZGlvU291cmNlUHJvdmlkZXIoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IGM5
NmIwMjVkODJkMDA3MDkxNjllZWE1MWMwNzgyNmI3NDUwNmM0NzEuLjk5MWVhNzZjMjAxZGUzYzUw
M2RhM2FkYzViMTRhNmJkMTYxMjU4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtNDUsNiArNDUsMTAgQEAKICNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVkZSAi
QXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2VuZGlmCisKICNpZmRlZiBfX09CSkNfXwogQGNsYXNz
IEFWUGxheWVyOwogQGNsYXNzIFFUTW92aWU7CkBAIC01OCw3ICs2Miw2IEBAIGNsYXNzIFFUTW92
aWVWaXN1YWxDb250ZXh0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1ZGlvU291
cmNlUHJvdmlkZXI7CiBjbGFzcyBHU3RyZWFtZXJHV29ybGQ7CiBjbGFzcyBNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2U7CiAKQEAgLTMyNSw2ICszMjgsMTIgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShib29sKTsKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCisg
ICAgLy8gc2V0QXVkaW9Tb3VyY2UoKSB0YXBzIGludG8gdGhlIGF1ZGlvIHN0cmVhbSAoZGlzYWJs
aW5nIHRoZSBub3JtYWwgcGxheWJhY2sgcGF0aCkuCisgICAgLy8gSXQgc2hvdWxkIGJlIGNhbGxl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgLy8gVGhlIGNsaWVudCB3aWxsIGJlIGNhbGxlZCBi
YWNrIChvbiB0aGUgbWFpbiB0aHJlYWQpIHdoZW4gdGhlIGF1ZGlvIGZvcm1hdCBpcyBhdmFpbGFi
bGUuCisgICAgdm9pZCBzZXRBdWRpb1NvdXJjZShBdWRpb1NvdXJjZVByb3ZpZGVyOjpDbGllbnQq
KTsKKworICAgIC8vIFRoZSBjbGllbnQgY2FsbHMgYXVkaW9Tb3VyY2VQcm92aWRlcigpIGluIHRo
ZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFkIHRvIGdhaW4gYWNjZXNzIHRvIHRoZSBhdWRpbyBzdHJl
YW0uCiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQcm92aWRlcigpOwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXJQcml2YXRlLmgKaW5kZXggZjhjNzBhYmUyOGE3ZWQwMWRmYjhhMmNiN2YxYzYzNjYzN2Qz
ODQ0MS4uNjJmNzZiNGVmYzJmYjdmOGI4ZmY0MTAzM2Q1MjIwODAwNjQ2Y2FiZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRl
LmgKQEAgLTE1Miw2ICsxNTIsNyBAQCBwdWJsaWM6CiAKIAogI2lmIEVOQUJMRShXRUJfQVVESU8p
CisgICAgdmlydHVhbCB2b2lkIHNldEF1ZGlvU291cmNlKEF1ZGlvU291cmNlUHJvdmlkZXI6OkNs
aWVudCopIHsgfQogICAgIHZpcnR1YWwgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQ
cm92aWRlcigpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAppbmRleCAyOWI2
ZWQzNGEzZDY3NTM3YWVkMGExM2NmZDljYmEzZTNiZWFhMDk5Li44YTZmNDZkYTM3YmEyNWU5NDhl
ZDM3NTQzOWZlMDRiY2U5OWU3ODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAKQEAgLTU3LDYgKzU3LDEyIEBA
IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZSgpCiAgICAgdW5pbml0aWFsaXplKCk7CiB9CiAKK3ZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlOjpzZXRGb3JtYXQoc2l6ZV90LCBmbG9hdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIC8vIEZJWE1FOiBzZXR1cCBhIHNhbXBsZS1yYXRlIGNvbnZlcnRlciBpZiBu
ZWNlc3NhcnkgdG8gY29udmVydCB0byB0aGUgQXVkaW9Db250ZXh0IHNhbXBsZS1yYXRlLgorfQor
CiB2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVy
T2ZGcmFtZXMpCiB7CiAgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5oCmluZGV4IDZkOWM5Y2Q4NzRjYWEzZWZjNTFhMWNmYWE0NDk3OTk4Yzc1NmM3MTYu
LmQ2NGE3ZTM1MTQzYzAyYzgyMDgxMDNjOTFlZDc2ZDc0ZTYyMWIwZDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCkBA
IC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXVkaW9Db250ZXh0
OwogICAgIAotY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1ZGlv
U291cmNlTm9kZSB7CitjbGFzcyBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBwdWJsaWMg
QXVkaW9Tb3VyY2VOb2RlLCBwdWJsaWMgQXVkaW9Tb3VyY2VQcm92aWRlcjo6Q2xpZW50IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+
IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBIVE1MTWVkaWFFbGVtZW50Kik7CiAKQEAgLTQ4LDYgKzQ4
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogICAgIAorICAgIC8vIEF1ZGlvU291
cmNlUHJvdmlkZXI6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtYXQoc2l6ZV90IG51
bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIAogICAgIHZvaWQgbG9jaygp
OwogICAgIHZvaWQgdW5sb2NrKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112278</attachid>
            <date>2011-10-24 17:00:47 -0700</date>
            <delta_ts>2011-10-25 09:09:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70155-20111024170044.patch</filename>
            <type>text/plain</type>
            <size>7983</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxODBjMmY0MWE4YzYwYjBl
ZTc4Yjk5YTI5MTBkNDkwZDc5YmJiMmE1Li43OWY2ZmI5ZWFjZGIxOTM2NjMxZGQ1MDM3NTg0Yzg1
OTQyYzYwZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMjQgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgQXVkaW9Tb3VyY2VQ
cm92aWRlckNsaWVudCBhbmQgc2V0Rm9ybWF0KCkgbWV0aG9kIHNvIHdlIGNhbiBrbm93IGF1ZGlv
IHN0cmVhbSBmb3JtYXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcwMTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAgVGhlcmUgaXNuJ3QgeWV0IGFuIGltcGxlbWVudGF0aW9uIHRv
IHRlc3QuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0QXVkaW9Tb3VyY2VOb2RlKToKKyAgICAgICAg
TGV0IE1lZGlhUGxheWVyIGtub3cgYWJvdXQgdGhlIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZSBzbyBpdCBjYW4gY2FsbGJhY2sgd2l0aCBhdWRpbyBzdHJlYW0gZm9ybWF0IGluZm9ybWF0aW9u
LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvU291cmNlUHJvdmlkZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXI6OnNldENsaWVudCk6CisgICAgICAgIEFk
ZCBhYnN0cmFjdCBzZXRDbGllbnQoKSBtZXRob2Qgc28gYSBjbGllbnQgbWF5IGtub3cgYWJvdXQg
c3RyZWFtIGZvcm1hdCBpbmZvcm1hdGlvbiB3aGVuIGl0IGJlY29tZXMgYXZhaWxhYmxlLgorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmguCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50Ojp+QXVkaW9T
b3VyY2VQcm92aWRlckNsaWVudCk6CisgICAgICAgIEFkZCBhYnN0cmFjdCBjbGFzcyBBdWRpb1Nv
dXJjZVByb3ZpZGVyQ2xpZW50IHdoaWNoIGltcGxlbWVudHMgc2V0Rm9ybWF0KCkgdG8gcmVjZWl2
ZSBhdWRpbyBzdHJlYW0gZm9ybWF0IGluZm9ybWF0aW9uLgorICAgICAgICAqIHdlYmF1ZGlvL01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnNldEZvcm1hdCk6CisgICAgICAgIENvbmNyZXRlIGltcGxl
bWVudGF0aW9uIG9mIHNldEZvcm1hdCgpIHNvIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSBj
YW4gY3JlYXRlIG5lY2Vzc2FyeSBhdWRpbyBjb252ZXJ0ZXJzLgorICAgICAgICAqIHdlYmF1ZGlv
L01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oOgorICAgICAgICBNYWtlIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZSBpbXBsZW1lbnQgQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCBzbyBp
dCBjYW4gZ2V0IGF1ZGlvIHN0cmVhbSBmb3JtYXQgaW5mb3JtYXRpb24uCisgICAgICAgIFdoZW4g
aXRzIHNldEZvcm1hdCgpIG1ldGhvZCBpcyBjYWxsZWQuCisKIDIwMTEtMTAtMTIgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk1MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKaW5kZXggMjY2ZTNhMzI5NTMyODQ1Yjg3NWVlN2M1ODUxYTUxOTVlNDBiM2JmMC4uZDcz
NTU3NmY5MTU1NzU5MWYyMGE5Y2Q1MTU1YTEzZTRjZDI3ZmNjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0zMDAyLDggKzMwMDIsMTMgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXllcigpCiAgICAgbV9wbGF5ZXIgPSBNZWRpYVBs
YXllcjo6Y3JlYXRlKHRoaXMpOwogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKLSAgICBpZiAobV9h
dWRpb1NvdXJjZU5vZGUpCisgICAgaWYgKG1fYXVkaW9Tb3VyY2VOb2RlKSB7CisgICAgICAgIC8v
IElmIHdlJ3JlIGNyZWF0aW5nIHRoZSBwbGF5ZXIgZnJvbSBzY3JhdGNoLCBtYWtlIHN1cmUgaXRz
IEF1ZGlvU291cmNlUHJvdmlkZXIga25vd3MgYWJvdXQgdGhlIE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS4KKyAgICAgICAgaWYgKGF1ZGlvU291cmNlUHJvdmlkZXIoKSkKKyAgICAgICAgICAg
IGF1ZGlvU291cmNlUHJvdmlkZXIoKS0+c2V0Q2xpZW50KG1fYXVkaW9Tb3VyY2VOb2RlKTsKKwog
ICAgICAgICBtX2F1ZGlvU291cmNlTm9kZS0+dW5sb2NrKCk7CisgICAgfQogI2VuZGlmCiB9CiAK
QEAgLTMwMTEsNiArMzAxNiw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQ
bGF5ZXIoKQogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRBdWRpb1NvdXJjZU5vZGUoTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlKiBzb3VyY2VOb2RlKQogewogICAgIG1fYXVkaW9Tb3VyY2VO
b2RlID0gc291cmNlTm9kZTsKKworICAgIGlmIChhdWRpb1NvdXJjZVByb3ZpZGVyKCkpCisgICAg
ICAgIGF1ZGlvU291cmNlUHJvdmlkZXIoKS0+c2V0Q2xpZW50KG1fYXVkaW9Tb3VyY2VOb2RlKTsK
IH0KIAogQXVkaW9Tb3VyY2VQcm92aWRlciogSFRNTE1lZGlhRWxlbWVudDo6YXVkaW9Tb3VyY2VQ
cm92aWRlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRp
b1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Nv
dXJjZVByb3ZpZGVyLmgKaW5kZXggNzczNTQ2YWE5NTNiYmUwZjgwNDA4NmNkMjZkYmMyOTE4MjRj
NzcxYS4uY2M0ZWRkZjUwYjZmMjRhY2FjNzk2ZDgxYTZkODU5YWQ0N2I0MmIwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9Tb3VyY2VQcm92aWRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU291cmNlUHJvdmlkZXIuaApA
QCAtMzIsMTIgKzMyLDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlvQnVz
OworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudDsKICAgICAKIC8vIEFic3RyYWN0IGJh
c2UtY2xhc3MgZm9yIGEgcHVsbC1tb2RlbCBjbGllbnQuCi0vLyBwcm92aWRlSW5wdXQoKSBnZXRz
IGNhbGxlZCByZXBlYXRlZGx5IHRvIHJlbmRlciB0aW1lLXNsaWNlcyBvZiBhIGNvbnRpbnVvdXMg
YXVkaW8gc3RyZWFtLgogY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlciB7CiBwdWJsaWM6CisgICAg
Ly8gcHJvdmlkZUlucHV0KCkgZ2V0cyBjYWxsZWQgcmVwZWF0ZWRseSB0byByZW5kZXIgdGltZS1z
bGljZXMgb2YgYSBjb250aW51b3VzIGF1ZGlvIHN0cmVhbS4KICAgICB2aXJ0dWFsIHZvaWQgcHJv
dmlkZUlucHV0KEF1ZGlvQnVzKiBidXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpID0gMDsKKwor
ICAgIC8vIElmIGEgY2xpZW50IGlzIHNldCwgd2UgY2FsbCBpdCBiYWNrIHdoZW4gdGhlIGF1ZGlv
IGZvcm1hdCBpcyBhdmFpbGFibGUuCisgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChBdWRpb1Nv
dXJjZVByb3ZpZGVyQ2xpZW50KikgeyB9OworCiAgICAgdmlydHVhbCB+QXVkaW9Tb3VyY2VQcm92
aWRlcigpIHsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4NDg5ZTBlNjEx
OTUzMTc5MmIzOGQwMTZjYTQyYzA4OWRmZDliZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmgKQEAgLTAs
MCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVu
dF9oCisjZGVmaW5lIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBzZXRGb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNh
bXBsZVJhdGUpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5BdWRpb1NvdXJjZVByb3Zp
ZGVyQ2xpZW50KCkgeyB9Cit9OworCit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvU291
cmNlUHJvdmlkZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAKaW5kZXggMjliNmVkMzRhM2Q2NzUzN2Fl
ZDBhMTNjZmQ5Y2JhM2UzYmVhYTA5OS4uODUwNTJlNzg5M2IyOGI0YWNiYTMyODZhNzE4NmUyZWFm
ZWMzNTViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCkBAIC01Nyw2ICs1NywxMSBAQCBNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGU6On5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoKQogICAgIHVuaW5p
dGlhbGl6ZSgpOwogfQogCit2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6c2V0Rm9y
bWF0KHNpemVfdCwgZmxvYXQpCit7CisgICAgLy8gRklYTUU6IHNldHVwIGEgc2FtcGxlLXJhdGUg
Y29udmVydGVyIGlmIG5lY2Vzc2FyeSB0byBjb252ZXJ0IHRvIHRoZSBBdWRpb0NvbnRleHQgc2Ft
cGxlLXJhdGUuCit9CisKIHZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNz
KHNpemVfdCBudW1iZXJPZkZyYW1lcykKIHsKICAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0
cHV0KDApLT5idXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKaW5kZXggNmQ5YzljZDg3NGNhYTNlZmM1MWExY2ZhYTQ0
OTc5OThjNzU2YzcxNi4uMDdlYmY2N2ViZGM2MmU4NjM0MTkzYjY3ZDEzODc2MDQ3NTg2NzJiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNs
dWRlICJBdWRpb1NvdXJjZU5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMzYsNyArMzcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlvQ29udGV4dDsKICAgICAKLWNsYXNzIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb1NvdXJjZU5vZGUgeworY2xh
c3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291cmNlTm9kZSwg
cHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4
dCosIEhUTUxNZWRpYUVsZW1lbnQqKTsKIApAQCAtNDgsNiArNDksOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgdmlydHVh
bCB2b2lkIHJlc2V0KCk7CiAgICAgCisgICAgLy8gQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0
IHNhbXBsZVJhdGUpOworICAgIAogICAgIHZvaWQgbG9jaygpOwogICAgIHZvaWQgdW5sb2NrKCk7
CiAK
</data>
<flag name="review"
          id="110328"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
    <flag name="commit-queue"
          id="110333"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>