<?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>86409</bug_id>
          
          <creation_ts>2012-05-14 16:20:00 -0700</creation_ts>
          <short_desc>Site-specific hack: Disclaim WebM as a supported type on Mac for YouTube.</short_desc>
          <delta_ts>2012-05-15 13:53:37 -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>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>acolwell</cc>
    
    <cc>dalecurtis</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>623412</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-14 16:20:00 -0700</bug_when>
    <thetext>Site-specific hack: Disclaim WebM as a supported type on Mac for YouTube.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623413</commentid>
    <comment_count>1</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-14 16:20:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/11448850&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623415</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-05-14 16:21:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/11450318&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623425</commentid>
    <comment_count>3</comment_count>
      <attachid>141807</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-14 16:30:41 -0700</bug_when>
    <thetext>Created attachment 141807
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623429</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-14 16:33:26 -0700</bug_when>
    <thetext>Attachment 141807 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/html/HTMLMediaElement.cpp:3119:  check_again is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623443</commentid>
    <comment_count>5</comment_count>
      <attachid>141807</attachid>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2012-05-14 16:45:18 -0700</bug_when>
    <thetext>Comment on attachment 141807
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:625
&gt; +        if (document()-&gt;securityOrigin()-&gt;host().endsWith(&quot;youtube.com&quot;, false)

Is it an issue with the way youtube encodes webm files or are other sites affected?

I noticed the Perian folks just posted saying they&apos;re retiring the project :\</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623448</commentid>
    <comment_count>6</comment_count>
      <attachid>141807</attachid>
    <who name="">mitz</who>
    <bug_when>2012-05-14 16:47:10 -0700</bug_when>
    <thetext>Comment on attachment 141807
Patch

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

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:625
&gt;&gt; +        if (document()-&gt;securityOrigin()-&gt;host().endsWith(&quot;youtube.com&quot;, false)
&gt; 
&gt; Is it an issue with the way youtube encodes webm files or are other sites affected?
&gt; 
&gt; I noticed the Perian folks just posted saying they&apos;re retiring the project :\

Won’t this also match documents from the host www.thisisnotyoutube.com?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623523</commentid>
    <comment_count>7</comment_count>
      <attachid>141807</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-05-14 18:01:01 -0700</bug_when>
    <thetext>Comment on attachment 141807
Patch

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

&gt;&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:625
&gt;&gt;&gt; +        if (document()-&gt;securityOrigin()-&gt;host().endsWith(&quot;youtube.com&quot;, false)
&gt;&gt; 
&gt;&gt; Is it an issue with the way youtube encodes webm files or are other sites affected?
&gt;&gt; 
&gt;&gt; I noticed the Perian folks just posted saying they&apos;re retiring the project :\
&gt; 
&gt; Won’t this also match documents from the host www.thisisnotyoutube.com?

r- for reasons that Mitz gave. Right thing to do would be to test for either a specific whitelist of hosts, or else exact match for &quot;youtube.com&quot; or suffix match for &quot;.youtube.com&quot;..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623524</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-05-14 18:02:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 141807 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141807&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:625
&gt; &gt; +        if (document()-&gt;securityOrigin()-&gt;host().endsWith(&quot;youtube.com&quot;, false)
&gt; 
&gt; Is it an issue with the way youtube encodes webm files or are other sites affected?
&gt; 
&gt; I noticed the Perian folks just posted saying they&apos;re retiring the project :\

We only have reports on YouTube, though the issue could affect any other site that serves either H.264 or WebM, and prefers WebM when possible. We&apos;re just making the more conservative change for now. Long term, we may need to entirely blacklist Perian, since it appears to have a broken WebM codec and now will likely never be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623549</commentid>
    <comment_count>9</comment_count>
    <who name="Dale Curtis">dalecurtis</who>
    <bug_when>2012-05-14 18:36:26 -0700</bug_when>
    <thetext>FWIW, by &quot;hangs forever&quot; do you really mean forever, or just a long time? Chrome previously had a local FFmpeg patch which significantly sped up WebM/matroska load times by parsing clusters incrementally. On a slow connection the pre-patch loading could take 20+ seconds.

We recently landed this patch in the upstream FFmpeg repository, so if the next version of Perian updates to FFmpeg head, they should have the patch. If anyone is in contact with them, it might be good information to pass on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623763</commentid>
    <comment_count>10</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-15 00:51:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 141807 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141807&amp;action=review
&gt; 
&gt; Won’t this also match documents from the host www.thisisnotyoutube.com?

Whoops! Yes, it will.

(In reply to comment #7)
&gt; (From update of attachment 141807 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141807&amp;action=review
&gt; 
&gt; r- for reasons that Mitz gave. Right thing to do would be to test for either a specific whitelist of hosts, or else exact match for &quot;youtube.com&quot; or suffix match for &quot;.youtube.com&quot;..

Right.  Changed to match the latter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623768</commentid>
    <comment_count>11</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-15 00:59:54 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; FWIW, by &quot;hangs forever&quot; do you really mean forever, or just a long time? 

In order to allow QuickTime to open a .webm file, Perian must effectively build up a sample table.  There are various ways to do this incrementally, but Perian apparently is downloading and parsing the entire media container before the load completes.  

So I mean forever, in that the media file downloaded completely, but the movie wasn&apos;t opened within a few minutes of the download completing.

&gt; We recently landed this patch in the upstream FFmpeg repository, so if the next version of Perian updates to FFmpeg head, they should have the patch. If anyone is in contact with them, it might be good information to pass on.

Unfortunately, it doesn&apos;t appear that there will be an new versions of Perian.  See http://perian.org.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623775</commentid>
    <comment_count>12</comment_count>
      <attachid>141884</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-15 01:09:01 -0700</bug_when>
    <thetext>Created attachment 141884
Patch

I tried, and failed, to find way to move this site-specific hack into MediaPlayer or better yet MediaPlayerPrivateQTKit.  I could not find a way to do so that was acceptably non-disurptive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623777</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-15 01:12:27 -0700</bug_when>
    <thetext>Attachment 141884 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/html/HTMLMediaElement.cpp:3121:  check_again is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624209</commentid>
    <comment_count>14</comment_count>
      <attachid>141884</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-15 10:06:22 -0700</bug_when>
    <thetext>Comment on attachment 141884
Patch

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

Seems generally fine, but needs a little refactoring. We don’t want the same logic repeated twice.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:629
&gt; +    Settings* settings = document()-&gt;settings();
&gt; +    if (settings &amp;&amp; settings-&gt;needsSiteSpecificQuirks()) {
&gt; +        String host = document()-&gt;securityOrigin()-&gt;host();
&gt; +        if ((host.endsWith(&quot;.youtube.com&quot;, false) || equalIgnoringCase(&quot;youtube.com&quot;, host))
&gt; +            &amp;&amp; (mimeType.startsWith(&quot;video/webm&quot;, false) || mimeType.startsWith(&quot;video/x-flv&quot;, false)))
&gt; +            return &quot;&quot;;
&gt; +    }

This code is repeated twice. Could you please put it into a helper function? That way you can also avoid repeating the comment twice.

The comment does not explain why we are skipping both the video/webm MIME type and the video/x-flv MIME type. Nor why the hack is specifically for YouTube.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624225</commentid>
    <comment_count>15</comment_count>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2012-05-15 10:19:39 -0700</bug_when>
    <thetext>Is there really no better way to solve this? It seems like we are setting a bad precedent here by fixing a QuickTime issue in HTMLMediaElement. What functionality is missing in the MediaPlayer that prevents this from being hidden down in the QuickTime specific implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624230</commentid>
    <comment_count>16</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-15 10:25:11 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 141884 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141884&amp;action=review
&gt; 
&gt; Seems generally fine, but needs a little refactoring. We don’t want the same logic repeated twice.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:629
&gt; &gt; +    Settings* settings = document()-&gt;settings();
&gt; &gt; +    if (settings &amp;&amp; settings-&gt;needsSiteSpecificQuirks()) {
&gt; &gt; +        String host = document()-&gt;securityOrigin()-&gt;host();
&gt; &gt; +        if ((host.endsWith(&quot;.youtube.com&quot;, false) || equalIgnoringCase(&quot;youtube.com&quot;, host))
&gt; &gt; +            &amp;&amp; (mimeType.startsWith(&quot;video/webm&quot;, false) || mimeType.startsWith(&quot;video/x-flv&quot;, false)))
&gt; &gt; +            return &quot;&quot;;
&gt; &gt; +    }
&gt; 
&gt; This code is repeated twice. Could you please put it into a helper function? That way you can also avoid repeating the comment twice.

Sure thing.  I&apos;m actually going to try to move this down into MediaPlayer::supportsType(), which will be the equivalent of a helper function here.

&gt; The comment does not explain why we are skipping both the video/webm MIME type and the video/x-flv MIME type. Nor why the hack is specifically for YouTube.

I&apos;ll update the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624234</commentid>
    <comment_count>17</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-15 10:28:11 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Is there really no better way to solve this? It seems like we are setting a bad precedent here by fixing a QuickTime issue in HTMLMediaElement. What functionality is missing in the MediaPlayer that prevents this from being hidden down in the QuickTime specific implementation?

The reason it&apos;s not in MediaPlayer (yet) is that MediaPlayer::supportsType() is a static function, and so doesn&apos;t have access to the MediaPlayerClient and the information required to support this site-specific hack.  And at the time that HTMLMediaElement::canPlayType() is called, the m_player variable may be null, so it&apos;s not as easy as just making it a class function.

However, Sam and Eric pointed out that I could just pass the HTMLMediaElement into MediaPlayer::supportsType() as a MediaPlayerClient*, and then we could move the site-specific hack in there.

So, I&apos;m still working on it.  Patch coming soon. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624248</commentid>
    <comment_count>18</comment_count>
    <who name="Aaron Colwell">acolwell</who>
    <bug_when>2012-05-15 10:39:40 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; Is there really no better way to solve this? It seems like we are setting a bad precedent here by fixing a QuickTime issue in HTMLMediaElement. What functionality is missing in the MediaPlayer that prevents this from being hidden down in the QuickTime specific implementation?
&gt; 
&gt; The reason it&apos;s not in MediaPlayer (yet) is that MediaPlayer::supportsType() is a static function, and so doesn&apos;t have access to the MediaPlayerClient and the information required to support this site-specific hack.  And at the time that HTMLMediaElement::canPlayType() is called, the m_player variable may be null, so it&apos;s not as easy as just making it a class function.
&gt; 
&gt; However, Sam and Eric pointed out that I could just pass the HTMLMediaElement into MediaPlayer::supportsType() as a MediaPlayerClient*, and then we could move the site-specific hack in there.
&gt; 
&gt; So, I&apos;m still working on it.  Patch coming soon. :)

Ok. Thanks for the explanation. I&apos;m happy to see your&apos;re still exploring alternate solutions. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624428</commentid>
    <comment_count>19</comment_count>
      <attachid>142036</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-15 12:55:39 -0700</bug_when>
    <thetext>Created attachment 142036
Patch

Moved the site-specific hack into MediaPlayer.  This required a new MediaPlayerClient prototype, exposed both on HTMLMediaElement and from within DOMImplementation.

Conceivably, I could push this further into MediaPlayerPrivateQTKit, but that would require changing the MediaEngineSupportsType signature, which would in turn require changing every MediaPlayerPrivate instance on every platform, which would be very disruptive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624455</commentid>
    <comment_count>20</comment_count>
      <attachid>142036</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-15 13:14:19 -0700</bug_when>
    <thetext>Comment on attachment 142036
Patch

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

r=me, but I am concerned about the URL vs. securityOrigin issue that Sam raised

&gt; Source/WebCore/dom/DOMImplementation.cpp:72
&gt; +    DOMImplementationSupportsTypeClient(bool needsHacks, String host)

Should be const String&amp;.

&gt; Source/WebCore/dom/DOMImplementation.cpp:74
&gt; +    : m_needsHacks(needsHacks)
&gt; +    , m_host(host)

We normally indent these by four spaces.

&gt; Source/WebCore/dom/DOMImplementation.cpp:79
&gt; +    bool mediaPlayerNeedsSiteSpecificHacks() const OVERRIDE { return m_needsHacks; }
&gt; +    String mediaPlayerDocumentHost() const OVERRIDE { return m_host; }

Should include the keyword virtual as well -- we are normally explicit about that.

These two overrides can and should be private instead of public.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:4396
&gt; +    return document()-&gt;securityOrigin()-&gt;host();

I thought Sam said this should be based on the document’s URL, not its securityOrigin?

&gt; Source/WebCore/platform/graphics/MediaPlayer.cpp:735
&gt; +        if ((host.endsWith(&quot;.youtube.com&quot;, false) || equalIgnoringCase(&quot;youtube.com&quot;, host))
&gt; +            &amp;&amp; (contentType.type().startsWith(&quot;video/webm&quot;, false) || contentType.type().startsWith(&quot;video/x-flv&quot;, false)))
&gt; +            return IsNotSupported;

Right here is where the “why” comment belongs.

&gt; Source/WebCore/platform/graphics/MediaPlayer.h:203
&gt; +    static MediaPlayer::SupportsType supportsType(const ContentType&amp;, const String&amp; keySystem, const MediaPlayerSupportsTypeClient*);

Could use a reference here instead of a pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624503</commentid>
    <comment_count>21</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-15 13:40:34 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 142036 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=142036&amp;action=review
&gt; 
&gt; r=me, but I am concerned about the URL vs. securityOrigin issue that Sam raised
&gt; 
&gt; &gt; Source/WebCore/dom/DOMImplementation.cpp:72
&gt; &gt; +    DOMImplementationSupportsTypeClient(bool needsHacks, String host)
&gt; 
&gt; Should be const String&amp;.

Changed.

&gt; &gt; Source/WebCore/dom/DOMImplementation.cpp:74
&gt; &gt; +    : m_needsHacks(needsHacks)
&gt; &gt; +    , m_host(host)
&gt; 
&gt; We normally indent these by four spaces.

Re-indented.

&gt; &gt; Source/WebCore/dom/DOMImplementation.cpp:79
&gt; &gt; +    bool mediaPlayerNeedsSiteSpecificHacks() const OVERRIDE { return m_needsHacks; }
&gt; &gt; +    String mediaPlayerDocumentHost() const OVERRIDE { return m_host; }
&gt; 
&gt; Should include the keyword virtual as well -- we are normally explicit about that.
&gt; 
&gt; These two overrides can and should be private instead of public.

Done and done.

&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:4396
&gt; &gt; +    return document()-&gt;securityOrigin()-&gt;host();
&gt; 
&gt; I thought Sam said this should be based on the document’s URL, not its securityOrigin?

Sorry, I missed Sam&apos;s comment earlier.  Changed.

&gt; &gt; Source/WebCore/platform/graphics/MediaPlayer.cpp:735
&gt; &gt; +        if ((host.endsWith(&quot;.youtube.com&quot;, false) || equalIgnoringCase(&quot;youtube.com&quot;, host))
&gt; &gt; +            &amp;&amp; (contentType.type().startsWith(&quot;video/webm&quot;, false) || contentType.type().startsWith(&quot;video/x-flv&quot;, false)))
&gt; &gt; +            return IsNotSupported;
&gt; 
&gt; Right here is where the “why” comment belongs.

I&apos;ll pull the comment in here from the ChangeLog.

&gt; &gt; Source/WebCore/platform/graphics/MediaPlayer.h:203
&gt; &gt; +    static MediaPlayer::SupportsType supportsType(const ContentType&amp;, const String&amp; keySystem, const MediaPlayerSupportsTypeClient*);
&gt; 
&gt; Could use a reference here instead of a pointer.

Wouldn&apos;t it be weird, then, to have to pass a &quot;*this&quot; in HTMLMediaElement?:

    MediaPlayer::supportsType(ContentType(mimeType), keySystem, *this);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624522</commentid>
    <comment_count>22</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-05-15 13:53:37 -0700</bug_when>
    <thetext>Committed r117147: &lt;http://trac.webkit.org/changeset/117147&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141807</attachid>
            <date>2012-05-14 16:30:41 -0700</date>
            <delta_ts>2012-05-15 01:08:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86409-20120514163040.patch</filename>
            <type>text/plain</type>
            <size>3187</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY2ZjBmMmQ3N2E2OTlm
MzAxZGU3NzM1MGEzZWMyZjM0Njc0NGJlMy4uZmNjZDk2ZGQ1MzNjOGI5MjYwZjU2OTZiY2QwNDM4
NWIwMWUzNTljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA1LTE0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFNpdGUtc3BlY2lmaWMgaGFj
azogRGlzY2xhaW0gV2ViTSBhcyBhIHN1cHBvcnRlZCB0eXBlIG9uIE1hYyBmb3IgWW91VHViZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2NDA5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzOyBzaXRlIHNwZWNpZmljIGhhY2suCisKKyAgICAgICAgUGVyaWFuIGNhbiBjYXVzZSBIVE1M
TWVkaWFFbGVtZW50cyB0byBmYWlsIHRvIGxvYWQgb3ZlciBzbG93IGNvbm5lY3Rpb25zLiBBZGQK
KyAgICAgICAgYSBNYWMtb25seSBzaXRlLXNwZWNpZmljIGhhY2sgd2hpY2ggZGlzY2xhaW1zIGJv
dGggdmlkZW8vd2VibSBhbmQgdmlkZW8veC1mbHYKKyAgICAgICAgYXMgc3VwcG9ydGVkIHR5cGVz
IHdoZW4gdGhlIG1lZGlhIGVsZW1lbnQncyBkb2N1bWVudCBoYXMgYSBob3N0IG9mIHlvdXR1YmUu
Y29tLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNhblBsYXlUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZCk6CisKIDIwMTItMDUtMDcg
IENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAg
ICBbRUZMXSBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLXNuYXAtdG8tbGluZXMtbm90
LXNldC5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApp
bmRleCAxZTI3Y2Q0YTIyMjliZTAzYjcyMTkwNmU4YzU3MDQ4OTFiOTczZTE5Li5jMWI0YjNkZmVi
M2NiMGE4NzRmNjY5OWQ5ZjkwY2NjNDJkZmY3N2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKQEAgLTYxNyw2ICs2MTcsMTcgQEAgSFRNTE1lZGlhRWxlbWVudDo6
TmV0d29ya1N0YXRlIEhUTUxNZWRpYUVsZW1lbnQ6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0CiAKIFN0
cmluZyBIVE1MTWVkaWFFbGVtZW50OjpjYW5QbGF5VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkgY29uc3QKIHsKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgLy8gU2l0ZS1zcGVjaWZpYyBoYWNrIGZvciBZb3VUdWJlLiBUaGUgUGVyaWFuIGNvbXBvbmVu
dCBmb3IgUXVpY2tUaW1lIHdpbGwgaGFuZyBmb3JldmVyIHdoZW4gbG9hZGluZworICAgIC8vIGEg
V2ViTSBtZWRpYSBvdmVyIGEgc2xvdyBjb25uZWN0aW9uLgorICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdz
LT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpKSB7CisgICAgICAgIGlmIChkb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT5ob3N0KCkuZW5kc1dpdGgoInlvdXR1YmUuY29tIiwgZmFsc2UpCisg
ICAgICAgICAgICAmJiAobWltZVR5cGUuc3RhcnRzV2l0aCgidmlkZW8vd2VibSIsIGZhbHNlKSB8
fCBtaW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby94LWZsdiIsIGZhbHNlKSkpCisgICAgICAgICAg
ICByZXR1cm4gIiI7CisgICAgfQorI2VuZGlmCisKICAgICBNZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIHN1cHBvcnQgPSBNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKENvbnRlbnRUeXBlKG1pbWVU
eXBlKSwga2V5U3lzdGVtKTsKICAgICBTdHJpbmcgY2FuUGxheTsKIApAQCAtMzA5Nyw2ICszMTA4
LDE3IEBAIEtVUkwgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNvdXJjZUNoaWxkKENvbnRl
bnRUeXBlKiBjb250ZW50VHlwZSwgU3RyaW5nKiBrCiAgICAgICAgICAgICBpZiAoc2hvdWxkTG9n
KQogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5l
eHRTb3VyY2VDaGlsZCAtICd0eXBlJyBpcyAnJXMnIC0ga2V5IHN5c3RlbSBpcyAnJXMnIiwgdHlw
ZS51dGY4KCkuZGF0YSgpLCBzeXN0ZW0udXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAgICAgICAgIC8vIFNpdGUtc3BlY2lmaWMgaGFjayBmb3IgWW91VHVi
ZS4gVGhlIFBlcmlhbiBjb21wb25lbnQgZm9yIFF1aWNrVGltZSB3aWxsIGhhbmcgZm9yZXZlciB3
aGVuIGxvYWRpbmcKKyAgICAgICAgICAgIC8vIGEgV2ViTSBtZWRpYSBvdmVyIGEgc2xvdyBjb25u
ZWN0aW9uLgorICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0
dGluZ3MoKTsKKyAgICAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+bmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MoKSkgeworICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT5ob3N0KCkuZW5kc1dpdGgoInlvdXR1YmUuY29tIiwgZmFsc2UpCisgICAg
ICAgICAgICAgICAgICAgICYmICh0eXBlLnN0YXJ0c1dpdGgoInZpZGVvL3dlYm0iLCBmYWxzZSkg
fHwgdHlwZS5zdGFydHNXaXRoKCJ2aWRlby94LWZsdiIsIGZhbHNlKSkpCisgICAgICAgICAgICAg
ICAgICAgIGdvdG8gY2hlY2tfYWdhaW47CisgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAg
ICAgIGlmICghTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShDb250ZW50VHlwZSh0eXBlKSwgc3lz
dGVtKSkKICAgICAgICAgICAgICAgICBnb3RvIGNoZWNrX2FnYWluOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141884</attachid>
            <date>2012-05-15 01:09:01 -0700</date>
            <delta_ts>2012-05-15 12:55:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86409-20120515010900.patch</filename>
            <type>text/plain</type>
            <size>3343</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY2ZjBmMmQ3N2E2OTlm
MzAxZGU3NzM1MGEzZWMyZjM0Njc0NGJlMy4uZmNjZDk2ZGQ1MzNjOGI5MjYwZjU2OTZiY2QwNDM4
NWIwMWUzNTljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA1LTE0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFNpdGUtc3BlY2lmaWMgaGFj
azogRGlzY2xhaW0gV2ViTSBhcyBhIHN1cHBvcnRlZCB0eXBlIG9uIE1hYyBmb3IgWW91VHViZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2NDA5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzOyBzaXRlIHNwZWNpZmljIGhhY2suCisKKyAgICAgICAgUGVyaWFuIGNhbiBjYXVzZSBIVE1M
TWVkaWFFbGVtZW50cyB0byBmYWlsIHRvIGxvYWQgb3ZlciBzbG93IGNvbm5lY3Rpb25zLiBBZGQK
KyAgICAgICAgYSBNYWMtb25seSBzaXRlLXNwZWNpZmljIGhhY2sgd2hpY2ggZGlzY2xhaW1zIGJv
dGggdmlkZW8vd2VibSBhbmQgdmlkZW8veC1mbHYKKyAgICAgICAgYXMgc3VwcG9ydGVkIHR5cGVz
IHdoZW4gdGhlIG1lZGlhIGVsZW1lbnQncyBkb2N1bWVudCBoYXMgYSBob3N0IG9mIHlvdXR1YmUu
Y29tLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNhblBsYXlUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZCk6CisKIDIwMTItMDUtMDcg
IENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAg
ICBbRUZMXSBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLXNuYXAtdG8tbGluZXMtbm90
LXNldC5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApp
bmRleCAxZTI3Y2Q0YTIyMjliZTAzYjcyMTkwNmU4YzU3MDQ4OTFiOTczZTE5Li5lNmU5ZGRiM2Rh
OTYxMzY5OGE3YzY3MDkzNDlkYjQ3M2RiYzUwMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKQEAgLTYxNyw2ICs2MTcsMTggQEAgSFRNTE1lZGlhRWxlbWVudDo6
TmV0d29ya1N0YXRlIEhUTUxNZWRpYUVsZW1lbnQ6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0CiAKIFN0
cmluZyBIVE1MTWVkaWFFbGVtZW50OjpjYW5QbGF5VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkgY29uc3QKIHsKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgLy8gU2l0ZS1zcGVjaWZpYyBoYWNrIGZvciBZb3VUdWJlLiBUaGUgUGVyaWFuIGNvbXBvbmVu
dCBmb3IgUXVpY2tUaW1lIHdpbGwgaGFuZyBmb3JldmVyIHdoZW4gbG9hZGluZworICAgIC8vIGEg
V2ViTSBtZWRpYSBvdmVyIGEgc2xvdyBjb25uZWN0aW9uLgorICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdz
LT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpKSB7CisgICAgICAgIFN0cmluZyBob3N0ID0gZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+aG9zdCgpOworICAgICAgICBpZiAoKGhvc3QuZW5k
c1dpdGgoIi55b3V0dWJlLmNvbSIsIGZhbHNlKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSgieW91dHVi
ZS5jb20iLCBob3N0KSkKKyAgICAgICAgICAgICYmIChtaW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRl
by93ZWJtIiwgZmFsc2UpIHx8IG1pbWVUeXBlLnN0YXJ0c1dpdGgoInZpZGVvL3gtZmx2IiwgZmFs
c2UpKSkKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisjZW5kaWYKKwogICAgIE1lZGlh
UGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydCA9IE1lZGlhUGxheWVyOjpzdXBwb3J0c1R5cGUo
Q29udGVudFR5cGUobWltZVR5cGUpLCBrZXlTeXN0ZW0pOwogICAgIFN0cmluZyBjYW5QbGF5Owog
CkBAIC0zMDk3LDYgKzMxMDksMTggQEAgS1VSTCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3ROZXh0
U291cmNlQ2hpbGQoQ29udGVudFR5cGUqIGNvbnRlbnRUeXBlLCBTdHJpbmcqIGsKICAgICAgICAg
ICAgIGlmIChzaG91bGRMb2cpCiAgICAgICAgICAgICAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlh
RWxlbWVudDo6c2VsZWN0TmV4dFNvdXJjZUNoaWxkIC0gJ3R5cGUnIGlzICclcycgLSBrZXkgc3lz
dGVtIGlzICclcyciLCB0eXBlLnV0ZjgoKS5kYXRhKCksIHN5c3RlbS51dGY4KCkuZGF0YSgpKTsK
ICNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgLy8gU2l0ZS1zcGVjaWZp
YyBoYWNrIGZvciBZb3VUdWJlLiBUaGUgUGVyaWFuIGNvbXBvbmVudCBmb3IgUXVpY2tUaW1lIHdp
bGwgaGFuZyBmb3JldmVyIHdoZW4gbG9hZGluZworICAgICAgICAgICAgLy8gYSBXZWJNIG1lZGlh
IG92ZXIgYSBzbG93IGNvbm5lY3Rpb24uCisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgICAgICAgICAgaWYgKHNldHRpbmdzICYmIHNl
dHRpbmdzLT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpKSB7CisgICAgICAgICAgICAgICAgU3Ry
aW5nIGhvc3QgPSBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCk7CisgICAgICAg
ICAgICAgICAgaWYgKChob3N0LmVuZHNXaXRoKCIueW91dHViZS5jb20iLCBmYWxzZSkgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UoInlvdXR1YmUuY29tIiwgaG9zdCkpCisgICAgICAgICAgICAgICAgICAg
ICYmICh0eXBlLnN0YXJ0c1dpdGgoInZpZGVvL3dlYm0iLCBmYWxzZSkgfHwgdHlwZS5zdGFydHNX
aXRoKCJ2aWRlby94LWZsdiIsIGZhbHNlKSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gY2hl
Y2tfYWdhaW47CisgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIGlmICghTWVkaWFQ
bGF5ZXI6OnN1cHBvcnRzVHlwZShDb250ZW50VHlwZSh0eXBlKSwgc3lzdGVtKSkKICAgICAgICAg
ICAgICAgICBnb3RvIGNoZWNrX2FnYWluOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142036</attachid>
            <date>2012-05-15 12:55:39 -0700</date>
            <delta_ts>2012-05-15 13:14:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86409-20120515125538.patch</filename>
            <type>text/plain</type>
            <size>10967</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY2ZjBmMmQ3N2E2OTlm
MzAxZGU3NzM1MGEzZWMyZjM0Njc0NGJlMy4uZDI1OWZiYzY5MDU1MTNkYzM5MTQxNTc2ZDI2NDdj
Yzg5MDRhYTA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA1LTE0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFNpdGUtc3BlY2lmaWMgaGFj
azogRGlzY2xhaW0gV2ViTSBhcyBhIHN1cHBvcnRlZCB0eXBlIG9uIE1hYyBmb3IgWW91VHViZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2NDA5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzOyBzaXRlIHNwZWNpZmljIGhhY2suCisKKyAgICAgICAgWW91VHViZSB3aWxsIGFzayBpZiB0
aGUgSFRNTE1lZGlhRWxlbWVudCBjYW5QbGF5VHlwZSB2aWRlby93ZWJtLCB0aGVuCisgICAgICAg
IHZpZGVvL3gtZmx2LCB0aGVuIGZpbmFsbHkgdmlkZW8vbXA0LCBhbmQgd2lsbCB0aGVuIGxvYWQg
YSBVUkwgb2YgdGhlIGZpcnN0IHR5cGUKKyAgICAgICAgaW4gdGhhdCBsaXN0IHdoaWNoIHJldHVy
bnMgInByb2JhYmx5Ii4gV2hlbiBQZXJpYW4gaXMgaW5zdGFsbGVkLAorICAgICAgICBNZWRpYVBs
YXllclByaXZhdGVRVEtpdCBjbGFpbXMgdG8gc3VwcG9ydCBib3RoIHZpZGVvL3dlYm0gYW5kIHZp
ZGVvL3gtZmx2LCBidXQKKyAgICAgICAgZHVlIHRvIGEgYnVnIGluIFBlcmlhbiwgbG9hZGluZyBt
ZWRpYSBpbiB0aGVzZSBmb3JtYXRzIHdpbGwgc29tZXRpbWVzIGZhaWwgb24KKyAgICAgICAgc2xv
dyBjb25uZWN0aW9ucy4KKworICAgICAgICBBZGQgYSBNYWMtb25seSBzaXRlLXNwZWNpZmljIGhh
Y2sgd2hpY2ggZGlzY2xhaW1zIGJvdGggdmlkZW8vd2VibSBhbmQgdmlkZW8veC1mbHYKKyAgICAg
ICAgYXMgc3VwcG9ydGVkIHR5cGVzIHdoZW4gdGhlIG1lZGlhIGVsZW1lbnQncyBkb2N1bWVudCBo
YXMgYSBob3N0IG9mIHlvdXR1YmUuY29tLgorCisgICAgICAgIEFkZCBhIG5ldywgcHVyZS12aXJ0
dWFsIHByb3RvdHlwZSBjbGFzcyBmb3IgdXNlIGJ5IE1lZGlhUGxheWVyOjpzdXBwb3J0c1R5cGU6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKE1l
ZGlhUGxheWVyU3VwcG9ydHNUeXBlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyU3VwcG9ydHNUeXBlQ2xpZW50Ojp+TWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVDbGllbnQ6Om1lZGlhUGxh
eWVyTmVlZHNTaXRlU3BlY2lmaWNIYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clN1cHBvcnRzVHlwZUNsaWVudDo6bWVkaWFQbGF5ZXJEb2N1bWVudEhvc3QpOgorCisgICAgICAg
IFVzZSB0aGVzZSBuZXcgY2xpZW50IGNhbGxzIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGFwcGx5
IHRoZSBzaXRlLXNwZWNpZmljCisgICAgICAgIGhhY2s6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnN1
cHBvcnRzVHlwZSk6CisKKyAgICAgICAgQWRkIHRoaXMgcHJvdG90eXBlIGNsYXNzIGFzIGEgc3Vw
ZXJjbGFzcyBvZiBIVE1MTWVkaWFFbGVtZW50LiAgUGFzcyBpbiB0aGUKKyAgICAgICAgSFRNTE1l
ZGlhRWxlbWVudCdzIHRoaXMgcG9pbnRlciB3aGVuIGNhbGxpbmcgTWVkaWFQbGF5ZXI6OnN1cHBv
cnRzVHlwZSgpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjYW5QbGF5VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3ROZXh0U291cmNlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJOZWVkc1NpdGVTcGVjaWZpY0hh
Y2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRG9j
dW1lbnRIb3N0KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKworICAgICAg
ICBBcyBpcyBIVE1MTWVkaWFFbGVtZW50LCBhIE1lZGlhUGxheWVyU3VwcG9ydHNUeXBlQ2xpZW50
IGNsYXNzIGlzIG5lZWRlZC4gQWRkIGEKKyAgICAgICAgbmV3IGNsYXNzIERPTUltcGxlbWVudGF0
aW9uU3VwcG9ydHNUeXBlQ2xpZW50LCBhbiBpbnN0YW5jZSBvZiB3aGljaCB3aWxsIGJlIAorICAg
ICAgICBwYXNzZWQgdG8gTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZSgpOgorICAgICAgICAqIGRv
bS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChET01JbXBsZW1lbnRhdGlvblN1cHBv
cnRzVHlwZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvblN1cHBv
cnRzVHlwZUNsaWVudDo6RE9NSW1wbGVtZW50YXRpb25TdXBwb3J0c1R5cGVDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjptZWRpYVBsYXllck5lZWRzU2l0ZVNwZWNp
ZmljSGFja3MpOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246Om1lZGlhUGxh
eWVyRG9jdW1lbnRIb3N0KToKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uaDoKKwog
MjAxMi0wNS0wNyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29t
PgogCiAgICAgICAgIFtFRkxdIG1lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctc25hcC10
by1saW5lcy1ub3Qtc2V0Lmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9ET01JbXBsZW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50
YXRpb24uY3BwCmluZGV4IDY2ZWEwZGNhYmRkMTRlYWY0N2MxYzk0NTBmMmRkMTUxNDBkOWRiODku
LjBiNTgwYjBmZGUxODFmYTNhZjM0MzNmNDI5OGYwNGYwNzc4YTUzNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcApAQCAtNjcsNiArNjcsMjEgQEAgc3RhdGljIHZv
aWQgYWRkU3RyaW5nKEZlYXR1cmVTZXQmIHNldCwgY29uc3QgY2hhciogc3RyaW5nKQogICAgIHNl
dC5hZGQoc3RyaW5nKTsKIH0KIAorY2xhc3MgRE9NSW1wbGVtZW50YXRpb25TdXBwb3J0c1R5cGVD
bGllbnQgOiBwdWJsaWMgTWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVDbGllbnQgeworcHVibGljOgor
ICAgIERPTUltcGxlbWVudGF0aW9uU3VwcG9ydHNUeXBlQ2xpZW50KGJvb2wgbmVlZHNIYWNrcywg
U3RyaW5nIGhvc3QpCisgICAgOiBtX25lZWRzSGFja3MobmVlZHNIYWNrcykKKyAgICAsIG1faG9z
dChob3N0KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG1lZGlhUGxheWVyTmVlZHNTaXRlU3Bl
Y2lmaWNIYWNrcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fbmVlZHNIYWNrczsgfQorICAg
IFN0cmluZyBtZWRpYVBsYXllckRvY3VtZW50SG9zdCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1faG9zdDsgfQorcHJpdmF0ZToKKyAgICBib29sIG1fbmVlZHNIYWNrczsKKyAgICBTdHJpbmcg
bV9ob3N0OworfTsKKwogI2lmIEVOQUJMRShTVkcpCiAKIHN0YXRpYyBib29sIGlzU1ZHMTBGZWF0
dXJlKGNvbnN0IFN0cmluZyAmZmVhdHVyZSwgY29uc3QgU3RyaW5nICZ2ZXJzaW9uKQpAQCAtMzg3
LDcgKzQwMiw4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVh
dGVEb2N1bWVudChjb25zdCBTdHJpbmcmIHR5cGUsIEZyYW1lCiAjaWYgRU5BQkxFKFZJREVPKQog
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHR5cGUgY2FuIGJlIHBsYXllZCBieSBvdXIgTWVk
aWFQbGF5ZXIsIGlmIHNvIGNyZWF0ZSBhIE1lZGlhRG9jdW1lbnQKICAgICAvLyBLZXkgc3lzdGVt
IGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuCi0gICAgaWYgKE1lZGlhUGxheWVyOjpzdXBwb3J0c1R5
cGUoQ29udGVudFR5cGUodHlwZSksIFN0cmluZygpKSkKKyAgICBET01JbXBsZW1lbnRhdGlvblN1
cHBvcnRzVHlwZUNsaWVudCBjbGllbnQoZnJhbWUtPnNldHRpbmdzKCkgJiYgZnJhbWUtPnNldHRp
bmdzKCktPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCksIHVybC5ob3N0KCkpOworICAgIGlmIChN
ZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKENvbnRlbnRUeXBlKHR5cGUpLCBTdHJpbmcoKSwgJmNs
aWVudCkpCiAgICAgICAgICByZXR1cm4gTWVkaWFEb2N1bWVudDo6Y3JlYXRlKGZyYW1lLCB1cmwp
OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgKaW5kZXggZTQ5
M2I2ZTk5N2U2NzY0NjA5NDg2ZjIxYTg5MWViNDRjYzVmZjVhNy4uODFhZTI5ZmFhMmRlYzg1NjQ0
YWZmZTM1YWVmZTNiYjExMWM5Y2UxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RP
TUltcGxlbWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0
aW9uLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgRE9NSW1wbGVtZW50YXRpb25faAogCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
aW5kZXggMWUyN2NkNGEyMjI5YmUwM2I3MjE5MDZlOGM1NzA0ODkxYjk3M2UxOS4uN2Y3ZmI2Mzlk
NGMwMjJjNDYzNTZhMzQ1OWQ3ZjVkNDljODkzYzc3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCkBAIC02MTcsNyArNjE3LDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6
TmV0d29ya1N0YXRlIEhUTUxNZWRpYUVsZW1lbnQ6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0CiAKIFN0
cmluZyBIVE1MTWVkaWFFbGVtZW50OjpjYW5QbGF5VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkgY29uc3QKIHsKLSAgICBNZWRpYVBsYXllcjo6U3Vw
cG9ydHNUeXBlIHN1cHBvcnQgPSBNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKENvbnRlbnRUeXBl
KG1pbWVUeXBlKSwga2V5U3lzdGVtKTsKKyAgICBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1
cHBvcnQgPSBNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKENvbnRlbnRUeXBlKG1pbWVUeXBlKSwg
a2V5U3lzdGVtLCB0aGlzKTsKICAgICBTdHJpbmcgY2FuUGxheTsKIAogICAgIC8vIDQuOC4xMC4z
CkBAIC0zMDk3LDcgKzMwOTcsNyBAQCBLVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRT
b3VyY2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0cmluZyogawogICAgICAgICAg
ICAgaWYgKHNob3VsZExvZykKICAgICAgICAgICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFF
bGVtZW50OjpzZWxlY3ROZXh0U291cmNlQ2hpbGQgLSAndHlwZScgaXMgJyVzJyAtIGtleSBzeXN0
ZW0gaXMgJyVzJyIsIHR5cGUudXRmOCgpLmRhdGEoKSwgc3lzdGVtLnV0ZjgoKS5kYXRhKCkpOwog
I2VuZGlmCi0gICAgICAgICAgICBpZiAoIU1lZGlhUGxheWVyOjpzdXBwb3J0c1R5cGUoQ29udGVu
dFR5cGUodHlwZSksIHN5c3RlbSkpCisgICAgICAgICAgICBpZiAoIU1lZGlhUGxheWVyOjpzdXBw
b3J0c1R5cGUoQ29udGVudFR5cGUodHlwZSksIHN5c3RlbSwgdGhpcykpCiAgICAgICAgICAgICAg
ICAgZ290byBjaGVja19hZ2FpbjsKICAgICAgICAgfQogCkBAIC00Mzg1LDYgKzQzODUsMTcgQEAg
U3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyVXNlckFnZW50KCkgY29uc3QKIAog
fQogCitib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyTmVlZHNTaXRlU3BlY2lmaWNI
YWNrcygpIGNvbnN0Cit7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0
dGluZ3MoKTsKKyAgICByZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPm5lZWRzU2l0ZVNwZWNp
ZmljUXVpcmtzKCk7Cit9CisKK1N0cmluZyBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckRv
Y3VtZW50SG9zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmhvc3QoKTsKK30KKwogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVCZWhhdmlv
cnNSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUoKQogewogICAgIG1fcmVzdHJpY3Rp
b25zID0gTm9SZXN0cmljdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
CmluZGV4IDZkZTM1ZGJhMTgwYTg0ZTRhNDBhYjU1YmQyNWUyNTJkMGE5ZjlhYmEuLjFjODU5ZjFl
ZjI4MzMwYTMxMjZhYzAxM2IyYzE5OWI3ZjY1NjAzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCkBAIC03Niw3ICs3Niw3IEBAIHR5cGVkZWYgVmVjdG9yPEN1ZUludGVy
dmFsVHJlZTo6SW50ZXJ2YWxUeXBlPiBDdWVMaXN0OwogLy8gQnV0IGl0IGNhbid0IGJlIHVudGls
IHRoZSBDaHJvbWl1bSBXZWJNZWRpYVBsYXllckNsaWVudEltcGwgY2xhc3MgaXMgZml4ZWQgc28g
aXQKIC8vIG5vIGxvbmdlciBkZXBlbmRzIG9uIHR5cGVjYXN0aW5nIGEgTWVkaWFQbGF5ZXJDbGll
bnQgdG8gYW4gSFRNTE1lZGlhRWxlbWVudC4KIAotY2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50LCBwcml2YXRlIE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIE1lZGlhQ29u
dHJvbGxlckludGVyZmFjZQorY2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxl
bWVudCwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50LCBwdWJsaWMgTWVkaWFQbGF5ZXJTdXBwb3J0
c1R5cGVDbGllbnQsIHByaXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyLCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0LCBwdWJsaWMgTWVkaWFDb250cm9sbGVySW50ZXJmYWNlCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgICwgcHJpdmF0ZSBUZXh0VHJhY2tDbGllbnQKICNlbmRpZgpAQCAtNDIy
LDYgKzQyMiw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJSZWZl
cnJlcigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhUGxheWVyVXNl
ckFnZW50KCkgY29uc3QgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIGJvb2wgbWVkaWFQbGF5ZXJO
ZWVkc1NpdGVTcGVjaWZpY0hhY2tzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJp
bmcgbWVkaWFQbGF5ZXJEb2N1bWVudEhvc3QoKSBjb25zdCBPVkVSUklERTsKKwogICAgIHZvaWQg
bG9hZFRpbWVyRmlyZWQoVGltZXI8SFRNTE1lZGlhRWxlbWVudD4qKTsKICAgICB2b2lkIHByb2dy
ZXNzRXZlbnRUaW1lckZpcmVkKFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+Kik7CiAgICAgdm9pZCBw
bGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZChUaW1lcjxIVE1MTWVkaWFFbGVtZW50PiopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4
IGQ4NzNlYzVlYzAxNWUzOWNjNmUxNmM3MjU1YjI5NDZjZjk1NGI5NGUuLjFlNDcwNWI3ZjYxNjQw
Y2ZkNTljYjAzYzNmMDY4MzNhNmM4NTcxODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTcxMCw3ICs3MTAsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyOjpwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqIHAs
IGNvbnN0IEludFJlY3QmCiAgICAgbV9wcml2YXRlLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4
dChwLCByKTsKIH0KIAotTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllcjo6c3Vw
cG9ydHNUeXBlKGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBr
ZXlTeXN0ZW0pCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyOjpzdXBwb3J0
c1R5cGUoY29uc3QgQ29udGVudFR5cGUmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGtleVN5
c3RlbSwgY29uc3QgTWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVDbGllbnQqIGNsaWVudCkKIHsKICAg
ICBTdHJpbmcgdHlwZSA9IGNvbnRlbnRUeXBlLnR5cGUoKS5sb3dlcigpOwogICAgIC8vIFRoZSBj
b2RlY3Mgc3RyaW5nIGlzIG5vdCBsb3dlci1jYXNlZCBiZWNhdXNlIE1QNCB2YWx1ZXMgYXJlIGNh
c2Ugc2Vuc2l0aXZlCkBAIC03MjcsNiArNzI3LDE1IEBAIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5
cGUgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5
CiAgICAgaWYgKCFlbmdpbmUpCiAgICAgICAgIHJldHVybiBJc05vdFN1cHBvcnRlZDsKIAorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBpZiAoY2xpZW50ICYmIGNsaWVudC0+bWVkaWFQbGF5ZXJOZWVk
c1NpdGVTcGVjaWZpY0hhY2tzKCkpIHsKKyAgICAgICAgU3RyaW5nIGhvc3QgPSBjbGllbnQtPm1l
ZGlhUGxheWVyRG9jdW1lbnRIb3N0KCk7CisgICAgICAgIGlmICgoaG9zdC5lbmRzV2l0aCgiLnlv
dXR1YmUuY29tIiwgZmFsc2UpIHx8IGVxdWFsSWdub3JpbmdDYXNlKCJ5b3V0dWJlLmNvbSIsIGhv
c3QpKQorICAgICAgICAgICAgJiYgKGNvbnRlbnRUeXBlLnR5cGUoKS5zdGFydHNXaXRoKCJ2aWRl
by93ZWJtIiwgZmFsc2UpIHx8IGNvbnRlbnRUeXBlLnR5cGUoKS5zdGFydHNXaXRoKCJ2aWRlby94
LWZsdiIsIGZhbHNlKSkpCisgICAgICAgICAgICByZXR1cm4gSXNOb3RTdXBwb3J0ZWQ7CisgICAg
fQorI2VuZGlmCisKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIHJldHVybiBlbmdp
bmUtPnN1cHBvcnRzVHlwZUFuZENvZGVjcyh0eXBlLCB0eXBlQ29kZWNzLCBzeXN0ZW0pOwogI2Vs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmlu
ZGV4IDAwY2EwNjQ1MDQwNzZlMWUyNDlkMzk2ZmU4NzI2NjE2NDE2N2M2YzguLjMwMTM5ZTBlNjNk
MDAwOTk1NWRlODAxMzczYjRjNjZhN2RkY2RkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtMTgwLDYgKzE4MCwxNCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJVc2VyQWdlbnQoKSBjb25zdCB7IHJldHVy
biBTdHJpbmcoKTsgfQogfTsKIAorY2xhc3MgTWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyU3VwcG9ydHNUeXBlQ2xpZW50KCkg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbWVkaWFQbGF5ZXJOZWVkc1NpdGVTcGVjaWZpY0hhY2tz
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYVBsYXll
ckRvY3VtZW50SG9zdCgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Cit9OworCiBjbGFzcyBN
ZWRpYVBsYXllciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVkaWFQbGF5ZXIpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTE5Miw3ICsyMDAsNyBAQCBwdWJsaWM6
CiAKICAgICAvLyBNZWRpYSBlbmdpbmUgc3VwcG9ydC4KICAgICBlbnVtIFN1cHBvcnRzVHlwZSB7
IElzTm90U3VwcG9ydGVkLCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKLSAgICBzdGF0
aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgQ29udGVudFR5
cGUmLCBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSk7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IENvbnRlbnRUeXBlJiwgY29uc3QgU3RyaW5n
JiBrZXlTeXN0ZW0sIGNvbnN0IE1lZGlhUGxheWVyU3VwcG9ydHNUeXBlQ2xpZW50Kik7CiAgICAg
c3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7CiAgICAgc3Rh
dGljIGJvb2wgaXNBdmFpbGFibGUoKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTaXRlc0luTWVkaWFD
YWNoZShWZWN0b3I8U3RyaW5nPiYpOwo=
</data>
<flag name="review"
          id="148277"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>