<?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>141405</bug_id>
          
          <creation_ts>2015-02-09 15:23:25 -0800</creation_ts>
          <short_desc>Web Inspector: Large background image fails to load in inspector</short_desc>
          <delta_ts>2015-02-12 10:42:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>burg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1067934</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-02-09 15:23:25 -0800</bug_when>
    <thetext>* SUMMARY
Large background image fails to load in inspector.

* TEST
&lt;style&gt;body { background: url(x.png) }&lt;/style&gt;
&lt;body&gt;Test&lt;/body&gt;

* STEPS TO REPRODUCE
1. Create a large image (e.g. &gt;2 MB) named &quot;x.png&quot; aside test page.
2. Inspect test page
  =&gt; &quot;x.png&quot; doesn&apos;t show up in inspector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067936</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-02-09 15:24:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/19773092&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067940</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-02-09 15:29:58 -0800</bug_when>
    <thetext>Looks like we only support up to 1 MiB data URLs:

    get contentURL()
    {
        const maximumDataURLSize = 1024 * 1024; // 1 MiB

        // If content is not available or won&apos;t fit a data URL, fallback to using original URL.
        var content = this.content;
        if (content === null || content.length &gt; maximumDataURLSize)
            return this._url;

        return &quot;data:&quot; + this.mimeTypeComponents.type + (this.contentIsBase64Encoded ? &quot;;base64,&quot; + content : &quot;,&quot; + encodeURIComponent(content));
    },

Can we bump that, or do we need to come up with another solution here?

In this particular case, if the page is a file:/// the inspector cannot open that image. Likewise, if inspecting a remote target, the URL may not be loadable by the inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068114</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-02-10 12:52:14 -0800</bug_when>
    <thetext>We can bump it. I picked it at random. I wonder if there is a limit on URL size?

Using Blob and URL.createObjectURL() would be the best solution. We would just need to call URL.revokeObjectURL() at the right time (ContentView.close?). We didn&apos;t have support for Blob and createObjectURL when we did this 1 MiB data URL thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068145</commentid>
    <comment_count>4</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-10 14:11:40 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; We can bump it. I picked it at random. I wonder if there is a limit on URL
&gt; size?
&gt; 
&gt; Using Blob and URL.createObjectURL() would be the best solution. We would
&gt; just need to call URL.revokeObjectURL() at the right time
&gt; (ContentView.close?). We didn&apos;t have support for Blob and createObjectURL
&gt; when we did this 1 MiB data URL thing.

I was just looking at this code as well, since my element tracking feature sends many screenshots which can be &gt;1MB. Simply bumping the cap will not help that much since photograph-level details can create pngs with sizes over 5 MiB. Plus there is the URL length issue, which seems like skating on thin ice and can make 2nd level inspector unusable if you happen to log the data. It would be nice to keep protocol messages to some fixed size

So, the new way would be to send over in chunks, turn that into a blob, then (optionally) turn that into an ObjectURL? It would be nice to make the protocol API agnostic to the contents of the blob. For example, some uses may already prepend the mime type, while others create it on the inspector side.

I propose altering the protocol to support multi-part messages for blob-like objects. Suppose a command exists like this:

{
    &quot;name&quot;: &quot;getResourceContent&quot;,
    &quot;params&quot;: [
        {&quot;name&quot;: &quot;id&quot;, &quot;type&quot;: &quot;integer&quot;},
        {&quot;name&quot;: &quot;url&quot;, &quot;type&quot;: &quot;string&quot;}
    ],
    &quot;returns&quot; [
        {&quot;name&quot;: &quot;data&quot;, &quot;type&quot;: &quot;blob&quot;},
        {&quot;name&quot;: &quot;dummyNumber&quot;, &quot;type&quot;: &quot;number&quot;}
    ]
}

The protocol traffic would look like this:

&lt;------ {&quot;id&quot;: 33, &quot;method&quot;: &quot;DOM.getResourceContent&quot;, &quot;params&quot;:{id: 42, url: &quot;https://apple.com&quot;}}
...
...
------&gt; {&quot;id&quot;: 33, &quot;result&quot;: {&quot;data&quot;: {&quot;blobId&quot;: 99}, &quot;dummyNumber&quot;: 123}, &quot;multipart&quot;: true}
------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;60oeubeu0e6ueene6...&quot;}, &quot;multipart&quot;: true}
------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;92409646eeaffbbce...&quot;}, &quot;multipart&quot;: true}
------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;13941021406aef064...&quot;}}

Multipart messages continue with the same sequence id. The &quot;multipart&quot;:true key indicates that more chunks will be sent. When a chunk arrives without that key, a Blob object is created with the chunks, inserted into the result object, and dispatched in the frontend from InspectorBackend.

Note that this would cause the command reply to appear delayed relative to other replies whose commands were sent after getResourceContent. I don&apos;t think this is generally a problem, as the &quot;async&quot; command keyword can similarly delay messages and hasn&apos;t been a great source of bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068412</commentid>
    <comment_count>5</comment_count>
      <attachid>246400</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-11 11:33:50 -0800</bug_when>
    <thetext>Created attachment 246400
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068413</commentid>
    <comment_count>6</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-11 11:34:50 -0800</bug_when>
    <thetext>Test case: http://www.apple.com/imac-with-retina/5k.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068415</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-11 11:36:52 -0800</bug_when>
    <thetext>Attachment 246400 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/Base/Utilities.js:1050:  Line contains single-quote character.  [js/syntax] [5]
Total errors found: 1 in 9 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>1068528</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-02-11 18:41:07 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; We can bump it. I picked it at random. I wonder if there is a limit on URL
&gt; &gt; size?
&gt; &gt; 
&gt; &gt; Using Blob and URL.createObjectURL() would be the best solution. We would
&gt; &gt; just need to call URL.revokeObjectURL() at the right time
&gt; &gt; (ContentView.close?). We didn&apos;t have support for Blob and createObjectURL
&gt; &gt; when we did this 1 MiB data URL thing.
&gt; 
&gt; I was just looking at this code as well, since my element tracking feature
&gt; sends many screenshots which can be &gt;1MB. Simply bumping the cap will not
&gt; help that much since photograph-level details can create pngs with sizes
&gt; over 5 MiB. Plus there is the URL length issue, which seems like skating on
&gt; thin ice and can make 2nd level inspector unusable if you happen to log the
&gt; data. It would be nice to keep protocol messages to some fixed size
&gt; 
&gt; So, the new way would be to send over in chunks, turn that into a blob, then
&gt; (optionally) turn that into an ObjectURL? It would be nice to make the
&gt; protocol API agnostic to the contents of the blob. For example, some uses
&gt; may already prepend the mime type, while others create it on the inspector
&gt; side.
&gt; 
&gt; I propose altering the protocol to support multi-part messages for blob-like
&gt; objects. Suppose a command exists like this:
&gt; 
&gt; {
&gt;     &quot;name&quot;: &quot;getResourceContent&quot;,
&gt;     &quot;params&quot;: [
&gt;         {&quot;name&quot;: &quot;id&quot;, &quot;type&quot;: &quot;integer&quot;},
&gt;         {&quot;name&quot;: &quot;url&quot;, &quot;type&quot;: &quot;string&quot;}
&gt;     ],
&gt;     &quot;returns&quot; [
&gt;         {&quot;name&quot;: &quot;data&quot;, &quot;type&quot;: &quot;blob&quot;},
&gt;         {&quot;name&quot;: &quot;dummyNumber&quot;, &quot;type&quot;: &quot;number&quot;}
&gt;     ]
&gt; }
&gt; 
&gt; The protocol traffic would look like this:
&gt; 
&gt; &lt;------ {&quot;id&quot;: 33, &quot;method&quot;: &quot;DOM.getResourceContent&quot;, &quot;params&quot;:{id: 42,
&gt; url: &quot;https://apple.com&quot;}}
&gt; ...
&gt; ...
&gt; ------&gt; {&quot;id&quot;: 33, &quot;result&quot;: {&quot;data&quot;: {&quot;blobId&quot;: 99}, &quot;dummyNumber&quot;: 123},
&gt; &quot;multipart&quot;: true}
&gt; ------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;60oeubeu0e6ueene6...&quot;},
&gt; &quot;multipart&quot;: true}
&gt; ------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;92409646eeaffbbce...&quot;},
&gt; &quot;multipart&quot;: true}
&gt; ------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;13941021406aef064...&quot;}}
&gt; 
&gt; Multipart messages continue with the same sequence id. The &quot;multipart&quot;:true
&gt; key indicates that more chunks will be sent. When a chunk arrives without
&gt; that key, a Blob object is created with the chunks, inserted into the result
&gt; object, and dispatched in the frontend from InspectorBackend.
&gt; 
&gt; Note that this would cause the command reply to appear delayed relative to
&gt; other replies whose commands were sent after getResourceContent. I don&apos;t
&gt; think this is generally a problem, as the &quot;async&quot; command keyword can
&gt; similarly delay messages and hasn&apos;t been a great source of bugs.

I agree with Brian. This is useful, if there are data blobs that are so big, that ingestion of the large message causes us to miss &quot;ticks&quot;. Splitting the large blob into chunks allows the frontend to be more responsive while handling a large otherwise synchronous message. Someone should enable the message timing statistics we have and load a page with large images and see if this really is a performance issue we are encountering, as it would be non-trivial.

That said, media resources might benefit from this as they will likely be large.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068531</commentid>
    <comment_count>9</comment_count>
      <attachid>246400</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-02-11 19:08:16 -0800</bug_when>
    <thetext>Comment on attachment 246400
Proposed Fix

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

This seems pretty cool. Do we do a good job of showing ObjectURLs in the inspector? Do we even show them at all? This sounds like a great ER if a site is using a lot of blobs.

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1048
&gt; +function decodeBase64ToBlob(base64Data, contentType)

Nit: mimeType instead of contentType?

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1052
&gt; +    var sliceSize = 1024;

Nit: const?

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1065
&gt; +        for (var offset = begin, i = 0 ; offset &lt; end; ++i, ++offset) {
&gt; +            bytes[i] = byteCharacters[offset].charCodeAt(0);
&gt; +        }

Style: No braces.

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1069
&gt; +}

I see this is similar to solutions on:
http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript

Why does creating slices improve the performance of this? Does it have to do with memory layout?

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:262
&gt; +        if (!this.content)
&gt; +            return this._url;

Is this a suitable &quot;ObjectURL&quot;? Like, if URL.revokeObjectURL gets called on this (which could happen in this path), does it have any issues?

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:267
&gt; +        console.assert(content instanceof Blob, content);
&gt;  
&gt; -        return &quot;data:&quot; + this.mimeTypeComponents.type + (this.contentIsBase64Encoded ? &quot;;base64,&quot; + content : &quot;,&quot; + encodeURIComponent(content));
&gt; +        return URL.createObjectURL(content);

Hmm, dataURL might be nice for small things.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:660
&gt; +            URL.revokeObjectURL(objectURL);

Since createObjectURL can return a URL string, does this always make sense?

&gt; Source/WebInspectorUI/UserInterface/Views/ImageResourceContentView.js:55
&gt; +        var objectURL = this.resource.createObjectURL();
&gt;          this._imageElement = document.createElement(&quot;img&quot;);
&gt; -        this._imageElement.src = this.resource.contentURL;
&gt; +        this._imageElement.addEventListener(&quot;load&quot;, function() {
&gt; +            URL.revokeObjectURL(objectURL);
&gt; +        });
&gt; +        this._imageElement.src = objectURL;
&gt;  

What happens now when you have an image and drag / drop it out of the inspector. Does that still work as expected? Is it still named &quot;Unknown.png&quot; (something we really want to fix)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068601</commentid>
    <comment_count>10</comment_count>
      <attachid>246400</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-12 07:43:52 -0800</bug_when>
    <thetext>Comment on attachment 246400
Proposed Fix

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1069
&gt;&gt; +}
&gt; 
&gt; I see this is similar to solutions on:
&gt; http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript
&gt; 
&gt; Why does creating slices improve the performance of this? Does it have to do with memory layout?

TBH, not exactly sure. There are many strategies for base64 to Blob, and this one seemed the simplest. I have no idea whether it&apos;s the fastest, but that can be improved later.

I would assume that preallocating an Array could be expensive because of its weird semantics. Other approaches reimplement atob() and charCodeAt() using ArrayBuffers, which also seems to be quite fast.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:262
&gt;&gt; +            return this._url;
&gt; 
&gt; Is this a suitable &quot;ObjectURL&quot;? Like, if URL.revokeObjectURL gets called on this (which could happen in this path), does it have any issues?

It&apos;s not, but revokeObjectURL simply does nothing if the URL is not registered. See BlobRegistryImpl::unregisterBlobURL

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:660
&gt;&gt; +            URL.revokeObjectURL(objectURL);
&gt; 
&gt; Since createObjectURL can return a URL string, does this always make sense?

See above.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/ImageResourceContentView.js:55
&gt;&gt;  
&gt; 
&gt; What happens now when you have an image and drag / drop it out of the inspector. Does that still work as expected? Is it still named &quot;Unknown.png&quot; (something we really want to fix)?

It still works. The filename is still Unknown.$ext, and in the Finder Get Info dialog, it says &quot;Where from: blob:file:///ed4e613d-7c05-4424-b33d-fcc330a03db2, &quot;. This seems like a separate issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068609</commentid>
    <comment_count>11</comment_count>
      <attachid>246400</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-12 07:55:30 -0800</bug_when>
    <thetext>Comment on attachment 246400
Proposed Fix

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1069
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; I see this is similar to solutions on:
&gt;&gt; http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript
&gt;&gt; 
&gt;&gt; Why does creating slices improve the performance of this? Does it have to do with memory layout?
&gt; 
&gt; TBH, not exactly sure. There are many strategies for base64 to Blob, and this one seemed the simplest. I have no idea whether it&apos;s the fastest, but that can be improved later.
&gt; 
&gt; I would assume that preallocating an Array could be expensive because of its weird semantics. Other approaches reimplement atob() and charCodeAt() using ArrayBuffers, which also seems to be quite fast.

At least in some JS engines, allocating too big of an Array will convert it to be a sparse map. Not sure if JSC does this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068610</commentid>
    <comment_count>12</comment_count>
      <attachid>246442</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-12 07:56:18 -0800</bug_when>
    <thetext>Created attachment 246442
Proposed Fix (style nits)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068611</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-12 07:58:47 -0800</bug_when>
    <thetext>Attachment 246442 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/Base/Utilities.js:1050:  Line contains single-quote character.  [js/syntax] [5]
Total errors found: 1 in 9 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>1068621</commentid>
    <comment_count>14</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-12 08:23:50 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; We can bump it. I picked it at random. I wonder if there is a limit on URL
&gt; &gt; &gt; size?
&gt; &gt; &gt; 
&gt; &gt; &gt; Using Blob and URL.createObjectURL() would be the best solution. We would
&gt; &gt; &gt; just need to call URL.revokeObjectURL() at the right time
&gt; &gt; &gt; (ContentView.close?). We didn&apos;t have support for Blob and createObjectURL
&gt; &gt; &gt; when we did this 1 MiB data URL thing.
&gt; &gt; 
&gt; &gt; I was just looking at this code as well, since my element tracking feature
&gt; &gt; sends many screenshots which can be &gt;1MB. Simply bumping the cap will not
&gt; &gt; help that much since photograph-level details can create pngs with sizes
&gt; &gt; over 5 MiB. Plus there is the URL length issue, which seems like skating on
&gt; &gt; thin ice and can make 2nd level inspector unusable if you happen to log the
&gt; &gt; data. It would be nice to keep protocol messages to some fixed size
&gt; &gt; 
&gt; &gt; So, the new way would be to send over in chunks, turn that into a blob, then
&gt; &gt; (optionally) turn that into an ObjectURL? It would be nice to make the
&gt; &gt; protocol API agnostic to the contents of the blob. For example, some uses
&gt; &gt; may already prepend the mime type, while others create it on the inspector
&gt; &gt; side.
&gt; &gt; 
&gt; &gt; I propose altering the protocol to support multi-part messages for blob-like
&gt; &gt; objects. Suppose a command exists like this:
&gt; &gt; 
&gt; &gt; {
&gt; &gt;     &quot;name&quot;: &quot;getResourceContent&quot;,
&gt; &gt;     &quot;params&quot;: [
&gt; &gt;         {&quot;name&quot;: &quot;id&quot;, &quot;type&quot;: &quot;integer&quot;},
&gt; &gt;         {&quot;name&quot;: &quot;url&quot;, &quot;type&quot;: &quot;string&quot;}
&gt; &gt;     ],
&gt; &gt;     &quot;returns&quot; [
&gt; &gt;         {&quot;name&quot;: &quot;data&quot;, &quot;type&quot;: &quot;blob&quot;},
&gt; &gt;         {&quot;name&quot;: &quot;dummyNumber&quot;, &quot;type&quot;: &quot;number&quot;}
&gt; &gt;     ]
&gt; &gt; }
&gt; &gt; 
&gt; &gt; The protocol traffic would look like this:
&gt; &gt; 
&gt; &gt; &lt;------ {&quot;id&quot;: 33, &quot;method&quot;: &quot;DOM.getResourceContent&quot;, &quot;params&quot;:{id: 42,
&gt; &gt; url: &quot;https://apple.com&quot;}}
&gt; &gt; ...
&gt; &gt; ...
&gt; &gt; ------&gt; {&quot;id&quot;: 33, &quot;result&quot;: {&quot;data&quot;: {&quot;blobId&quot;: 99}, &quot;dummyNumber&quot;: 123},
&gt; &gt; &quot;multipart&quot;: true}
&gt; &gt; ------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;60oeubeu0e6ueene6...&quot;},
&gt; &gt; &quot;multipart&quot;: true}
&gt; &gt; ------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;92409646eeaffbbce...&quot;},
&gt; &gt; &quot;multipart&quot;: true}
&gt; &gt; ------&gt; {&quot;id&quot;: 33, &quot;part&quot;: {&quot;blobId&quot;: 99, &quot;data&quot;: &quot;13941021406aef064...&quot;}}
&gt; &gt; 
&gt; &gt; Multipart messages continue with the same sequence id. The &quot;multipart&quot;:true
&gt; &gt; key indicates that more chunks will be sent. When a chunk arrives without
&gt; &gt; that key, a Blob object is created with the chunks, inserted into the result
&gt; &gt; object, and dispatched in the frontend from InspectorBackend.
&gt; &gt; 
&gt; &gt; Note that this would cause the command reply to appear delayed relative to
&gt; &gt; other replies whose commands were sent after getResourceContent. I don&apos;t
&gt; &gt; think this is generally a problem, as the &quot;async&quot; command keyword can
&gt; &gt; similarly delay messages and hasn&apos;t been a great source of bugs.
&gt; 
&gt; I agree with Brian. This is useful, if there are data blobs that are so big,
&gt; that ingestion of the large message causes us to miss &quot;ticks&quot;. Splitting the
&gt; large blob into chunks allows the frontend to be more responsive while
&gt; handling a large otherwise synchronous message. Someone should enable the
&gt; message timing statistics we have and load a page with large images and see
&gt; if this really is a performance issue we are encountering, as it would be
&gt; non-trivial.
&gt; 
&gt; That said, media resources might benefit from this as they will likely be
&gt; large.

I turned on message timing and slow run loop warnings. I could not get any image to take more than 2ms to process, even the iMac 5K images (~5MB). So this may be necessary only once we start transferring very large resources like video and audio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068622</commentid>
    <comment_count>15</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-12 08:26:13 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 246400 [details]
&gt; Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=246400&amp;action=review
&gt; 
&gt; This seems pretty cool. Do we do a good job of showing ObjectURLs in the
&gt; inspector? Do we even show them at all? This sounds like a great ER if a
&gt; site is using a lot of blobs.

Right now the object URLS (typically like &apos;blob:${uuid}&apos;) are only shown in the Inspector if the URL is used to load a resource (font, image, whatever). Otherwise they don&apos;t show up. Blobs and Files themselves have no representation in the Inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068651</commentid>
    <comment_count>16</comment_count>
      <attachid>246400</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-02-12 10:06:05 -0800</bug_when>
    <thetext>Comment on attachment 246400
Proposed Fix

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

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1068
&gt; +    }
&gt; +    return new Blob(byteArrays, {type: contentType});

Nit: Newline

&gt; Source/WebInspectorUI/UserInterface/Views/ImageResourceContentView.js:53
&gt; +        this._imageElement.addEventListener(&quot;load&quot;, function() {
&gt; +            URL.revokeObjectURL(objectURL);
&gt; +        });

Nit: I&apos;d make this one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068665</commentid>
    <comment_count>17</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-12 10:42:27 -0800</bug_when>
    <thetext>Committed r179999: &lt;http://trac.webkit.org/changeset/179999&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246400</attachid>
            <date>2015-02-11 11:33:50 -0800</date>
            <delta_ts>2015-02-12 07:56:14 -0800</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>bug-141405-20150211113353.patch</filename>
            <type>text/plain</type>
            <size>13934</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5OTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA2
NzlhODNjNmJmMWJmYWM2ZDY5NzBkODQxYzZhZmZjMGNkNDMwNDgxLi43ZDU1NGIwYjM2NTdkMWRk
OWQyYTZhMzlhNDE1NTZmY2Q1OTRkMmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAxNS0wMi0xMSAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogTGFyZ2UgYmFja2dyb3VuZCBpbWFnZSBm
YWlscyB0byBsb2FkIGluIGluc3BlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ29udmVydCBiYXNlNjQtZW5jb2RlZCByZXNvdXJjZSBkYXRhIHRv
IGJpbmFyeSBkYXRhIHVzaW5nIFVpbnQ4QXJyYXkgYW5kIEJsb2JzLgorICAgICAgICBVc2Ugb2Jq
ZWN0IFVSTHMgZm9yIGJsb2JzIGluc3RlYWQgb2YgZGF0YSBVUkxzIHdoZW4gc2V0dGluZyBpbWFn
ZSAnc3JjJyBhdHRyaWJ1dGUKKyAgICAgICAgYW5kIGluIEBmb250LWZhY2UgdXJscy4gVGhpcyBj
b252ZXJzaW9uIGhhcHBlbnMgd2hlbiB0aGUgYmFja2VuZCBpbmRpY2F0ZXMgdGhhdAorICAgICAg
ICByZXNvdXJjZSBjb250ZW50IGlzIGJhc2U2NC1lbmNvZGVkLgorCisgICAgICAgIFVwZGF0ZSBp
bWFnZSBhbmQgZm9udCBjbGllbnRzIG9mIHJlc291cmNlLWZldGNoaW5nIGZ1bmN0aW9uYWxpdHkg
c28gdGhhdCB0aGV5IHVzZQorICAgICAgICBvYmplY3QgVVJMcyBjb3JyZWN0bHkuIEFkZCBzb21l
IHBsdW1iaW5nIHNvIHRoYXQgQmxvYnMgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGgKKyAgICAgICAg
dGhlIGNvcnJlY3QgbWltZS10eXBlLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL1V0
aWxpdGllcy5qczoKKyAgICAgICAgKGRlY29kZUJhc2U2NFRvQmxvYik6IEFkZGVkLgorICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hlZXQuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZ2V0IG1pbWVUeXBlKTogQWRkZWQuCisg
ICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmNyZWF0ZU9iamVjdFVSTCk6IEFkZGVkLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXRJbWFnZVNpemUuaW1hZ2VE
aWRMb2FkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0SW1h
Z2VTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IGNv
bnRlbnRVUkwpOiBEZWxldGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1Njcmlw
dC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLmdldCBtaW1lVHlw
ZSk6IEFkZGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuZ2V0IG1pbWVUeXBl
KTogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuX3By
b2Nlc3NDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlw
ZS5nZXQgY29udGVudElzQmFzZTY0RW5jb2RlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZVJldmlzaW9uLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVSZXZpc2lvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVJldmlzaW9uLnByb3RvdHlwZS5jb3B5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlUmV2aXNpb24ucHJvdG90eXBlLmdldCBjb250ZW50SXNCYXNlNjRFbmNvZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24ucHJvdG90eXBlLnNl
dCBjb250ZW50SXNCYXNlNjRFbmNvZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL1ZpZXdzL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5oaWRkZW4pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jbG9zZWQpOgor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvSW1hZ2VSZXNvdXJjZUNvbnRlbnRWaWV3Lmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5
cGUuY29udGVudEF2YWlsYWJsZSk6CisKIDIwMTUtMDItMTAgIEpvc2VwaCBQZWNvcmFybyAgPHBl
Y29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBCZXR0ZXIgaGFuZGxl
IHVua25vd24gcmVsZWFzZSB2ZXJzaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5qcwppbmRleCA4ZDJkZGRmNzE4Mjk0OGE5
ZGY2ZDc4MjE1ODVhYzA1N2QyODZlOGUzLi42YTE1N2YzZmFjNWJiZTIyYjU3NzkwODllZGM3OTA2
ZWU0ZTJlZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9CYXNlL1V0aWxpdGllcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9CYXNlL1V0aWxpdGllcy5qcwpAQCAtMTA0NCwzICsxMDQ0LDI2IEBAIGZ1bmN0aW9uIGlu
c2VydE9iamVjdEludG9Tb3J0ZWRBcnJheShvYmplY3QsIGFycmF5LCBjb21wYXJhdG9yKQogewog
ICAgIGFycmF5LnNwbGljZShpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVu
Y3Rpb24ob2JqZWN0LCBhcnJheSwgY29tcGFyYXRvciksIDAsIG9iamVjdCk7CiB9CisKK2Z1bmN0
aW9uIGRlY29kZUJhc2U2NFRvQmxvYihiYXNlNjREYXRhLCBjb250ZW50VHlwZSkKK3sKKyAgICBj
b250ZW50VHlwZSA9IGNvbnRlbnRUeXBlIHx8ICcnOworCisgICAgdmFyIHNsaWNlU2l6ZSA9IDEw
MjQ7CisgICAgdmFyIGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTsKKyAgICB2YXIg
Ynl0ZXNMZW5ndGggPSBieXRlQ2hhcmFjdGVycy5sZW5ndGg7CisgICAgdmFyIHNsaWNlc0NvdW50
ID0gTWF0aC5jZWlsKGJ5dGVzTGVuZ3RoIC8gc2xpY2VTaXplKTsKKyAgICB2YXIgYnl0ZUFycmF5
cyA9IG5ldyBBcnJheShzbGljZXNDb3VudCk7CisKKyAgICBmb3IgKHZhciBzbGljZUluZGV4ID0g
MDsgc2xpY2VJbmRleCA8IHNsaWNlc0NvdW50OyArK3NsaWNlSW5kZXgpIHsKKyAgICAgICAgdmFy
IGJlZ2luID0gc2xpY2VJbmRleCAqIHNsaWNlU2l6ZTsKKyAgICAgICAgdmFyIGVuZCA9IE1hdGgu
bWluKGJlZ2luICsgc2xpY2VTaXplLCBieXRlc0xlbmd0aCk7CisKKyAgICAgICAgdmFyIGJ5dGVz
ID0gbmV3IEFycmF5KGVuZCAtIGJlZ2luKTsKKyAgICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gYmVn
aW4sIGkgPSAwIDsgb2Zmc2V0IDwgZW5kOyArK2ksICsrb2Zmc2V0KSB7CisgICAgICAgICAgICBi
eXRlc1tpXSA9IGJ5dGVDaGFyYWN0ZXJzW29mZnNldF0uY2hhckNvZGVBdCgwKTsKKyAgICAgICAg
fQorICAgICAgICBieXRlQXJyYXlzW3NsaWNlSW5kZXhdID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMp
OworICAgIH0KKyAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywge3R5cGU6IGNvbnRlbnRU
eXBlfSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvQ1NTU3R5bGVTaGVldC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9DU1NTdHlsZVNoZWV0LmpzCmluZGV4IDQxZWI4NmFkNWRiMjljMmQ5NzA5
NDRhOGY5OWUxMTEzYWFjODlhYjUuLjBmZTMyMjdkNDdmMDkwYmFiZTU5ZDQ5OGU5ODAyODZmZTE3
YmMzMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9DU1NTdHlsZVNoZWV0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9DU1NTdHlsZVNoZWV0LmpzCkBAIC03NSw2ICs3NSwxMSBAQCBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl91
cmxDb21wb25lbnRzOwogICAgIH0sCiAKKyAgICBnZXQgbWltZVR5cGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICJ0ZXh0L2NzcyI7CisgICAgfSwKKwogICAgIGdldCBkaXNwbGF5TmFtZSgpCiAg
ICAgewogICAgICAgICBpZiAodGhpcy5fdXJsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCmluZGV4IDJkYjk0NDYwNDcz
OTcwYmJhZDNjZDcyNjQxNTA0MTdhYzBiMzc2MWMuLjc2M2QwMTMwYzNlNzk2MDU2MTE1ZWJmM2Q3
YWQ3NDI1ZWVhNDBmMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanMKQEAgLTI1NCwxNiArMjU0LDE3IEBAIFdlYklu
c3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9taW1l
VHlwZTsKICAgICB9LAogCi0gICAgZ2V0IGNvbnRlbnRVUkwoKQorICAgIGNyZWF0ZU9iamVjdFVS
TDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgY29uc3QgbWF4aW11bURhdGFVUkxTaXplID0g
MTAyNCAqIDEwMjQ7IC8vIDEgTWlCCisgICAgICAgIC8vIElmIGNvbnRlbnQgaXMgbm90IGF2YWls
YWJsZSwgZmFsbGJhY2sgdG8gdXNpbmcgb3JpZ2luYWwgVVJMLgorICAgICAgICAvLyBUaGUgY2xp
ZW50IG1heSB0cnkgdG8gcmV2b2tlIGl0LCBidXQgbm90aGluZyB3aWxsIGhhcHBlbi4KKyAgICAg
ICAgaWYgKCF0aGlzLmNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXJsOwogCi0g
ICAgICAgIC8vIElmIGNvbnRlbnQgaXMgbm90IGF2YWlsYWJsZSBvciB3b24ndCBmaXQgYSBkYXRh
IFVSTCwgZmFsbGJhY2sgdG8gdXNpbmcgb3JpZ2luYWwgVVJMLgogICAgICAgICB2YXIgY29udGVu
dCA9IHRoaXMuY29udGVudDsKLSAgICAgICAgaWYgKGNvbnRlbnQgPT09IG51bGwgfHwgY29udGVu
dC5sZW5ndGggPiBtYXhpbXVtRGF0YVVSTFNpemUpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5f
dXJsOworICAgICAgICBjb25zb2xlLmFzc2VydChjb250ZW50IGluc3RhbmNlb2YgQmxvYiwgY29u
dGVudCk7CiAKLSAgICAgICAgcmV0dXJuICJkYXRhOiIgKyB0aGlzLm1pbWVUeXBlQ29tcG9uZW50
cy50eXBlICsgKHRoaXMuY29udGVudElzQmFzZTY0RW5jb2RlZCA/ICI7YmFzZTY0LCIgKyBjb250
ZW50IDogIiwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpKTsKKyAgICAgICAgcmV0dXJu
IFVSTC5jcmVhdGVPYmplY3RVUkwoY29udGVudCk7CiAgICAgfSwKIAogICAgIGlzTWFpblJlc291
cmNlOiBmdW5jdGlvbigpCkBAIC02NTEsOSArNjUyLDEzIEBAIFdlYkluc3BlY3Rvci5SZXNvdXJj
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAg
ICB2YXIgb2JqZWN0VVJMID0gbnVsbDsKKwogICAgICAgICAvLyBFdmVudCBoYW5kbGVyIGZvciB0
aGUgaW1hZ2UgImxvYWQiIGV2ZW50LgogICAgICAgICBmdW5jdGlvbiBpbWFnZURpZExvYWQoKQog
ICAgICAgICB7CisgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVSTCk7CisK
ICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBpbWFnZSBtZXRyaWNzLgogICAgICAgICAgICAgdGhp
cy5faW1hZ2VTaXplID0gewogICAgICAgICAgICAgICAgIHdpZHRoOiBpbWFnZS53aWR0aCwKQEAg
LTY2OCw5ICs2NzMsOSBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAg
ICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2U7CiAgICAgICAgIGltYWdlLmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBpbWFnZURpZExvYWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCi0gICAgICAgIC8v
IFNldCB0aGUgaW1hZ2Ugc291cmNlIG9uY2Ugd2UndmUgb2J0YWluZWQgdGhlIGJhc2U2NC1lbmNv
ZGVkIFVSTCBmb3IgaXQuCisgICAgICAgIC8vIFNldCB0aGUgaW1hZ2Ugc291cmNlIHVzaW5nIGFu
IG9iamVjdCBVUkwgb25jZSB3ZSd2ZSBvYnRhaW5lZCBpdHMgZGF0YS4KICAgICAgICAgdGhpcy5y
ZXF1ZXN0Q29udGVudCgpLnRoZW4oZnVuY3Rpb24oY29udGVudCkgewotICAgICAgICAgICAgaW1h
Z2Uuc3JjID0gY29udGVudC5zb3VyY2VDb2RlLmNvbnRlbnRVUkw7CisgICAgICAgICAgICBvYmpl
Y3RVUkwgPSBpbWFnZS5zcmMgPSBjb250ZW50LnNvdXJjZUNvZGUuY3JlYXRlT2JqZWN0VVJMKCk7
CiAgICAgICAgIH0pOwogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCmluZGV4IDg4NDcwYzQ5ZmY3YzdlZTMwNmQ5
YjQ2MGFhMmZiYjAyODU2YjI2ZDUuLmIwN2JhZDQzODFmMzZjZWVjYTgwZWVjNWYzNTg2Y2Y0OWRk
OTkzMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9TY3JpcHQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL1NjcmlwdC5qcwpAQCAtODQsNiArODQsMTEgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl91cmxDb21wb25lbnRzOwogICAgIH0s
CiAKKyAgICBnZXQgbWltZVR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291
cmNlLm1pbWVUeXBlOworICAgIH0sCisKICAgICBnZXQgZGlzcGxheU5hbWUoKQogICAgIHsKICAg
ICAgICAgaWYgKHRoaXMuX3VybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKaW5kZXggNDFhYTg4Y2ExYmY1ZGVm
MGFmMzhlZjY3NmJkZWEzOGEzMDg3NmZmNy4uN2VjYzFhZDM5ZmI5ZmNiMTE4OWE2YmE3MjU3Yjg0
MWFmMWI2MWQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKQEAgLTg4LDExICs4OCw2IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJl
bnRSZXZpc2lvbi5jb250ZW50OwogICAgIH0sCiAKLSAgICBnZXQgY29udGVudElzQmFzZTY0RW5j
b2RlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFJldmlzaW9uLmNvbnRl
bnRJc0Jhc2U2NEVuY29kZWQ7Ci0gICAgfSwKLQogICAgIGdldCBzb3VyY2VNYXBzKCkKICAgICB7
CiAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNYXBzIHx8IFtdOwpAQCAtMTg2LDYgKzE4MSwx
MiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGEg
c3ViY2xhc3MuIikpOwogICAgIH0sCiAKKyAgICBnZXQgbWltZVR5cGUoKQorICAgIHsKKyAgICAg
ICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KKyAgICAgICAgY29uc29sZS5lcnJvcigi
TmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFzcy4iKTsKKyAgICB9LAorCiAgICAg
Ly8gUHJpdmF0ZQogCiAgICAgX3Byb2Nlc3NDb250ZW50OiBmdW5jdGlvbihwYXJhbWV0ZXJzKQpA
QCAtMTkzLDIwICsxOTQsMTkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlID0g
ewogICAgICAgICAvLyBEaWZmZXJlbnQgYmFja2VuZCBBUElzIHJldHVybiBvbmUgb2YgYGNvbnRl
bnQsIGBib2R5YCwgYHRleHRgLCBvciBgc2NyaXB0U291cmNlYC4KICAgICAgICAgdmFyIGNvbnRl
bnQgPSBwYXJhbWV0ZXJzLmNvbnRlbnQgfHwgcGFyYW1ldGVycy5ib2R5IHx8IHBhcmFtZXRlcnMu
dGV4dCB8fCBwYXJhbWV0ZXJzLnNjcmlwdFNvdXJjZTsKICAgICAgICAgdmFyIGVycm9yID0gcGFy
YW1ldGVycy5lcnJvcjsKLSAgICAgICAgdmFyIGJhc2U2NEVuY29kZWQgPSBwYXJhbWV0ZXJzLmJh
c2U2NEVuY29kZWQ7CisgICAgICAgIGlmIChwYXJhbWV0ZXJzLmJhc2U2NEVuY29kZWQpCisgICAg
ICAgICAgICBjb250ZW50ID0gZGVjb2RlQmFzZTY0VG9CbG9iKGNvbnRlbnQsIHRoaXMubWltZVR5
cGUpOwogCiAgICAgICAgIHZhciByZXZpc2lvbiA9IHRoaXMucmV2aXNpb25Gb3JSZXF1ZXN0ZWRD
b250ZW50OwogCiAgICAgICAgIHRoaXMuX2lnbm9yZVJldmlzaW9uQ29udGVudERpZENoYW5nZUV2
ZW50ID0gdHJ1ZTsKICAgICAgICAgcmV2aXNpb24uY29udGVudCA9IGNvbnRlbnQgfHwgbnVsbDsK
LSAgICAgICAgcmV2aXNpb24uY29udGVudElzQmFzZTY0RW5jb2RlZCA9IGJhc2U2NEVuY29kZWQg
fHwgZmFsc2U7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9pZ25vcmVSZXZpc2lvbkNvbnRlbnREaWRD
aGFuZ2VFdmVudDsKIAogICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKICAgICAgICAg
ICAgIGVycm9yOiBlcnJvciwKICAgICAgICAgICAgIHNvdXJjZUNvZGU6IHRoaXMsCiAgICAgICAg
ICAgICBjb250ZW50OiBjb250ZW50LAotICAgICAgICAgICAgYmFzZTY0RW5jb2RlZDogYmFzZTY0
RW5jb2RlZAogICAgICAgICB9KTsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVSZXZpc2lvbi5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlUmV2aXNp
b24uanMKaW5kZXggY2ViN2EzYjk3OGExZDM0MTIwYzViMzRiNDdmMGJmZWE0ZWIzZTI4Ni4uNzEw
OTMzYTJmMDMyZWZiMjAxNGVjMjNmZTM1OTRkODljMzdlODExYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVSZXZpc2lvbi5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNl
Q29kZVJldmlzaW9uLmpzCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbiA9IGZ1
bmN0aW9uKHNvdXJjZUNvZGUsIGNvbnRlbnQsIGNvbnRlbnRJc0Jhc2U2NEVuY29kZWQpCitXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVJldmlzaW9uID0gZnVuY3Rpb24oc291cmNlQ29kZSwgY29udGVu
dCkKIHsKICAgICBXZWJJbnNwZWN0b3IuUmV2aXNpb24uY2FsbCh0aGlzKTsKIApAQCAtMzEsNyAr
MzEsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVJldmlzaW9uID0gZnVuY3Rpb24oc291cmNl
Q29kZSwgY29udGVudCwgY29udGVudElzQmFzZTY0RQogCiAgICAgdGhpcy5fc291cmNlQ29kZSA9
IHNvdXJjZUNvZGU7CiAgICAgdGhpcy5fY29udGVudCA9IGNvbnRlbnQgfHwgIiI7Ci0gICAgdGhp
cy5fY29udGVudElzQmFzZTY0RW5jb2RlZCA9IGNvbnRlbnRJc0Jhc2U2NEVuY29kZWQgfHwgZmFs
c2U7CiB9OwogCiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVJldmlzaW9uLnByb3RvdHlwZSA9IHsK
QEAgLTYxLDE2ICs2MCw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24ucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLl9zb3VyY2VDb2RlLnJldmlzaW9uQ29udGVudERpZENoYW5n
ZSh0aGlzKTsKICAgICB9LAogCi0gICAgZ2V0IGNvbnRlbnRJc0Jhc2U2NEVuY29kZWQoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRJc0Jhc2U2NEVuY29kZWQ7Ci0gICAgfSwK
LQotICAgIHNldCBjb250ZW50SXNCYXNlNjRFbmNvZGVkKGVuY29kZWQpCi0gICAgewotICAgICAg
ICB0aGlzLl9jb250ZW50SXNCYXNlNjRFbmNvZGVkID0gZW5jb2RlZCB8fCBmYWxzZTsKLSAgICB9
LAotCiAgICAgYXBwbHk6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NvdXJjZUNv
ZGUuY3VycmVudFJldmlzaW9uID0gdGhpczsKQEAgLTgzLDcgKzcyLDcgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVSZXZpc2lvbi5wcm90b3R5cGUgPSB7CiAKICAgICBjb3B5OiBmdW5jdGlvbigp
CiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNp
b24odGhpcy5fc291cmNlQ29kZSwgdGhpcy5fY29udGVudCwgdGhpcy5fY29udGVudElzQmFzZTY0
RW5jb2RlZCk7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZp
c2lvbih0aGlzLl9zb3VyY2VDb2RlLCB0aGlzLl9jb250ZW50KTsKICAgICB9CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Gb250UmVz
b3VyY2VDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCmluZGV4IGRmZTNiNDY0ZTM3NDBiZTFj
OGM1ZGE3MDZhNjQ5MjFhMTg2ZGJiZWIuLmJlM2ExZjVjNmNkM2IxMmNlNzdiZmY1OGFkOTQ4ZDE4
ZmIwM2Y2ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCkBAIC05
NCw4ICs5NCwxMCBAQCBXZWJJbnNwZWN0b3IuRm9udFJlc291cmNlQ29udGVudFZpZXcucHJvdG90
eXBlID0gewogICAgICAgICBpZiAodGhpcy5fc3R5bGVFbGVtZW50ICYmIHRoaXMuX3N0eWxlRWxl
bWVudC5wYXJlbnROb2RlKQogICAgICAgICAgICAgdGhpcy5fc3R5bGVFbGVtZW50LnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQodGhpcy5fc3R5bGVFbGVtZW50KTsKIAorICAgICAgICB0aGlzLl9mb250
T2JqZWN0VVJMID0gdGhpcy5yZXNvdXJjZS5jcmVhdGVPYmplY3RVUkwoKTsKKwogICAgICAgICB0
aGlzLl9zdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwotICAg
ICAgICB0aGlzLl9zdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSAiQGZvbnQtZmFjZSB7IGZvbnQt
ZmFtaWx5OiBcIiIgKyB1bmlxdWVGb250TmFtZSArICJcIjsgc3JjOiB1cmwoIiArIHRoaXMucmVz
b3VyY2UuY29udGVudFVSTCArICIpIiArIGZvcm1hdCArICI7IH0iOworICAgICAgICB0aGlzLl9z
dHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSAiQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIiIg
KyB1bmlxdWVGb250TmFtZSArICJcIjsgc3JjOiB1cmwoIiArIHRoaXMuX2ZvbnRPYmplY3RVUkwg
KyAiKSIgKyBmb3JtYXQgKyAiOyB9IjsKIAogICAgICAgICAvLyBUaGUgc3R5bGUgZWxlbWVudCB3
aWxsIGJlIGFkZGVkIHdoZW4gc2hvd24gbGF0ZXIgaWYgd2UgYXJlIG5vdCB2aXNpYmxlIG5vdy4K
ICAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkKQEAgLTE1Myw2ICsxNTUsMTYgQEAgV2ViSW5zcGVj
dG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gUmVt
b3ZlIHRoZSBzdHlsZSBlbGVtZW50IHNvIGl0IHdpbGwgbm90IHN0aWNrIGFyb3VuZCB3aGVuIHRo
aXMgY29udGVudCB2aWV3IGlzIGRlc3Ryb3llZC4KICAgICAgICAgaWYgKHRoaXMuX3N0eWxlRWxl
bWVudCAmJiB0aGlzLl9zdHlsZUVsZW1lbnQucGFyZW50Tm9kZSkKICAgICAgICAgICAgIHRoaXMu
X3N0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3N0eWxlRWxlbWVudCk7
CisgICAgfSwKKworICAgIGNsb3NlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qg
c2VuZCBhbnkgZXZlbnRzCisgICAgICAgIC8vIHdoZW4gYSBAZm9udC1mYWNlIHJlc291cmNlIGlz
IGxvYWRlZC4gU28sIHdlIGFzc3VtZSBpdCBjb3VsZCBiZSBuZWVkZWQgdW50aWwKKyAgICAgICAg
Ly8gdGhlIGNvbnRlbnQgdmlldyBpcyBkZXN0cm95ZWQsIGFzIHJlLWF0dGFjaGluZyB0aGUgc3R5
bGUgZWxlbWVudCB3b3VsZCBjYXVzZQorICAgICAgICAvLyB0aGUgb2JqZWN0IFVSTCB0byBiZSBy
ZXNvbHZlZCBhZ2Fpbi4KKyAgICAgICAgaWYgKHRoaXMuX2ZvbnRPYmplY3RVUkwpCisgICAgICAg
ICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuX2ZvbnRPYmplY3RVUkwpOwogICAgIH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0ltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0ltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5qcwppbmRleCA0NDJhZmYz
MmM3YzE1NzU0ZTBlMjhkMGQ0NTJmYzE0NjdlNDJiZTU2Li4xNDY5ZGUxMjI0NDg5YjVlMDU3OTQy
NzFhNTk2YmZiZGU0NzdhZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9JbWFnZVJlc291cmNlQ29udGVudFZpZXcuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvSW1hZ2VSZXNvdXJjZUNvbnRlbnRW
aWV3LmpzCkBAIC00Niw4ICs0NiwxMiBAQCBXZWJJbnNwZWN0b3IuSW1hZ2VSZXNvdXJjZUNvbnRl
bnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVD
aGlsZHJlbigpOwogCisgICAgICAgIHZhciBvYmplY3RVUkwgPSB0aGlzLnJlc291cmNlLmNyZWF0
ZU9iamVjdFVSTCgpOwogICAgICAgICB0aGlzLl9pbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbWciKTsKLSAgICAgICAgdGhpcy5faW1hZ2VFbGVtZW50LnNyYyA9IHRoaXMu
cmVzb3VyY2UuY29udGVudFVSTDsKKyAgICAgICAgdGhpcy5faW1hZ2VFbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIFVSTC5yZXZva2VPYmpl
Y3RVUkwob2JqZWN0VVJMKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX2ltYWdlRWxlbWVu
dC5zcmMgPSBvYmplY3RVUkw7CiAKICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuX2ltYWdlRWxlbWVudCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246442</attachid>
            <date>2015-02-12 07:56:18 -0800</date>
            <delta_ts>2015-02-12 10:12:38 -0800</delta_ts>
            <desc>Proposed Fix (style nits)</desc>
            <filename>bug-141405-20150212075616.patch</filename>
            <type>text/plain</type>
            <size>13913</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5OTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA2
NzlhODNjNmJmMWJmYWM2ZDY5NzBkODQxYzZhZmZjMGNkNDMwNDgxLi43ZDU1NGIwYjM2NTdkMWRk
OWQyYTZhMzlhNDE1NTZmY2Q1OTRkMmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAxNS0wMi0xMSAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogTGFyZ2UgYmFja2dyb3VuZCBpbWFnZSBm
YWlscyB0byBsb2FkIGluIGluc3BlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ29udmVydCBiYXNlNjQtZW5jb2RlZCByZXNvdXJjZSBkYXRhIHRv
IGJpbmFyeSBkYXRhIHVzaW5nIFVpbnQ4QXJyYXkgYW5kIEJsb2JzLgorICAgICAgICBVc2Ugb2Jq
ZWN0IFVSTHMgZm9yIGJsb2JzIGluc3RlYWQgb2YgZGF0YSBVUkxzIHdoZW4gc2V0dGluZyBpbWFn
ZSAnc3JjJyBhdHRyaWJ1dGUKKyAgICAgICAgYW5kIGluIEBmb250LWZhY2UgdXJscy4gVGhpcyBj
b252ZXJzaW9uIGhhcHBlbnMgd2hlbiB0aGUgYmFja2VuZCBpbmRpY2F0ZXMgdGhhdAorICAgICAg
ICByZXNvdXJjZSBjb250ZW50IGlzIGJhc2U2NC1lbmNvZGVkLgorCisgICAgICAgIFVwZGF0ZSBp
bWFnZSBhbmQgZm9udCBjbGllbnRzIG9mIHJlc291cmNlLWZldGNoaW5nIGZ1bmN0aW9uYWxpdHkg
c28gdGhhdCB0aGV5IHVzZQorICAgICAgICBvYmplY3QgVVJMcyBjb3JyZWN0bHkuIEFkZCBzb21l
IHBsdW1iaW5nIHNvIHRoYXQgQmxvYnMgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGgKKyAgICAgICAg
dGhlIGNvcnJlY3QgbWltZS10eXBlLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL1V0
aWxpdGllcy5qczoKKyAgICAgICAgKGRlY29kZUJhc2U2NFRvQmxvYik6IEFkZGVkLgorICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hlZXQuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZ2V0IG1pbWVUeXBlKTogQWRkZWQuCisg
ICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmNyZWF0ZU9iamVjdFVSTCk6IEFkZGVkLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXRJbWFnZVNpemUuaW1hZ2VE
aWRMb2FkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0SW1h
Z2VTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IGNv
bnRlbnRVUkwpOiBEZWxldGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1Njcmlw
dC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLmdldCBtaW1lVHlw
ZSk6IEFkZGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuZ2V0IG1pbWVUeXBl
KTogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuX3By
b2Nlc3NDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlw
ZS5nZXQgY29udGVudElzQmFzZTY0RW5jb2RlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZVJldmlzaW9uLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVSZXZpc2lvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVJldmlzaW9uLnByb3RvdHlwZS5jb3B5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlUmV2aXNpb24ucHJvdG90eXBlLmdldCBjb250ZW50SXNCYXNlNjRFbmNvZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24ucHJvdG90eXBlLnNl
dCBjb250ZW50SXNCYXNlNjRFbmNvZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL1ZpZXdzL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5oaWRkZW4pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5jbG9zZWQpOgor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvSW1hZ2VSZXNvdXJjZUNvbnRlbnRWaWV3Lmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkltYWdlUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5
cGUuY29udGVudEF2YWlsYWJsZSk6CisKIDIwMTUtMDItMTAgIEpvc2VwaCBQZWNvcmFybyAgPHBl
Y29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBCZXR0ZXIgaGFuZGxl
IHVua25vd24gcmVsZWFzZSB2ZXJzaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5qcwppbmRleCA4ZDJkZGRmNzE4Mjk0OGE5
ZGY2ZDc4MjE1ODVhYzA1N2QyODZlOGUzLi5kNGViMTA4OWE3NzZmNWVhZWY4ZjRiZDgwN2VlZTky
NGU3OTcwYTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9CYXNlL1V0aWxpdGllcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9CYXNlL1V0aWxpdGllcy5qcwpAQCAtMTA0NCwzICsxMDQ0LDI2IEBAIGZ1bmN0aW9uIGlu
c2VydE9iamVjdEludG9Tb3J0ZWRBcnJheShvYmplY3QsIGFycmF5LCBjb21wYXJhdG9yKQogewog
ICAgIGFycmF5LnNwbGljZShpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVu
Y3Rpb24ob2JqZWN0LCBhcnJheSwgY29tcGFyYXRvciksIDAsIG9iamVjdCk7CiB9CisKK2Z1bmN0
aW9uIGRlY29kZUJhc2U2NFRvQmxvYihiYXNlNjREYXRhLCBtaW1lVHlwZSkKK3sKKyAgICBtaW1l
VHlwZSA9IG1pbWVUeXBlIHx8ICcnOworCisgICAgY29uc3Qgc2xpY2VTaXplID0gMTAyNDsKKyAg
ICB2YXIgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGJhc2U2NERhdGEpOworICAgIHZhciBieXRlc0xl
bmd0aCA9IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsKKyAgICB2YXIgc2xpY2VzQ291bnQgPSBNYXRo
LmNlaWwoYnl0ZXNMZW5ndGggLyBzbGljZVNpemUpOworICAgIHZhciBieXRlQXJyYXlzID0gbmV3
IEFycmF5KHNsaWNlc0NvdW50KTsKKworICAgIGZvciAodmFyIHNsaWNlSW5kZXggPSAwOyBzbGlj
ZUluZGV4IDwgc2xpY2VzQ291bnQ7ICsrc2xpY2VJbmRleCkgeworICAgICAgICB2YXIgYmVnaW4g
PSBzbGljZUluZGV4ICogc2xpY2VTaXplOworICAgICAgICB2YXIgZW5kID0gTWF0aC5taW4oYmVn
aW4gKyBzbGljZVNpemUsIGJ5dGVzTGVuZ3RoKTsKKworICAgICAgICB2YXIgYnl0ZXMgPSBuZXcg
QXJyYXkoZW5kIC0gYmVnaW4pOworICAgICAgICBmb3IgKHZhciBvZmZzZXQgPSBiZWdpbiwgaSA9
IDAgOyBvZmZzZXQgPCBlbmQ7ICsraSwgKytvZmZzZXQpCisgICAgICAgICAgICBieXRlc1tpXSA9
IGJ5dGVDaGFyYWN0ZXJzW29mZnNldF0uY2hhckNvZGVBdCgwKTsKKworICAgICAgICBieXRlQXJy
YXlzW3NsaWNlSW5kZXhdID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpOworICAgIH0KKyAgICByZXR1
cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywge3R5cGU6IG1pbWVUeXBlfSk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVl
dC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHls
ZVNoZWV0LmpzCmluZGV4IDQxZWI4NmFkNWRiMjljMmQ5NzA5NDRhOGY5OWUxMTEzYWFjODlhYjUu
LjBmZTMyMjdkNDdmMDkwYmFiZTU5ZDQ5OGU5ODAyODZmZTE3YmMzMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZVNoZWV0Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHls
ZVNoZWV0LmpzCkBAIC03NSw2ICs3NSwxMSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl91cmxDb21wb25lbnRzOwogICAgIH0s
CiAKKyAgICBnZXQgbWltZVR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJ0ZXh0L2NzcyI7
CisgICAgfSwKKwogICAgIGdldCBkaXNwbGF5TmFtZSgpCiAgICAgewogICAgICAgICBpZiAodGhp
cy5fdXJsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL1Jlc291cmNlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL1Jlc291cmNlLmpzCmluZGV4IDJkYjk0NDYwNDczOTcwYmJhZDNjZDcyNjQxNTA0MTdh
YzBiMzc2MWMuLjc2M2QwMTMwYzNlNzk2MDU2MTE1ZWJmM2Q3YWQ3NDI1ZWVhNDBmMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJj
ZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVz
b3VyY2UuanMKQEAgLTI1NCwxNiArMjU0LDE3IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9taW1lVHlwZTsKICAgICB9LAogCi0gICAg
Z2V0IGNvbnRlbnRVUkwoKQorICAgIGNyZWF0ZU9iamVjdFVSTDogZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgY29uc3QgbWF4aW11bURhdGFVUkxTaXplID0gMTAyNCAqIDEwMjQ7IC8vIDEgTWlC
CisgICAgICAgIC8vIElmIGNvbnRlbnQgaXMgbm90IGF2YWlsYWJsZSwgZmFsbGJhY2sgdG8gdXNp
bmcgb3JpZ2luYWwgVVJMLgorICAgICAgICAvLyBUaGUgY2xpZW50IG1heSB0cnkgdG8gcmV2b2tl
IGl0LCBidXQgbm90aGluZyB3aWxsIGhhcHBlbi4KKyAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnQp
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXJsOwogCi0gICAgICAgIC8vIElmIGNvbnRlbnQg
aXMgbm90IGF2YWlsYWJsZSBvciB3b24ndCBmaXQgYSBkYXRhIFVSTCwgZmFsbGJhY2sgdG8gdXNp
bmcgb3JpZ2luYWwgVVJMLgogICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuY29udGVudDsKLSAg
ICAgICAgaWYgKGNvbnRlbnQgPT09IG51bGwgfHwgY29udGVudC5sZW5ndGggPiBtYXhpbXVtRGF0
YVVSTFNpemUpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXJsOworICAgICAgICBjb25zb2xl
LmFzc2VydChjb250ZW50IGluc3RhbmNlb2YgQmxvYiwgY29udGVudCk7CiAKLSAgICAgICAgcmV0
dXJuICJkYXRhOiIgKyB0aGlzLm1pbWVUeXBlQ29tcG9uZW50cy50eXBlICsgKHRoaXMuY29udGVu
dElzQmFzZTY0RW5jb2RlZCA/ICI7YmFzZTY0LCIgKyBjb250ZW50IDogIiwiICsgZW5jb2RlVVJJ
Q29tcG9uZW50KGNvbnRlbnQpKTsKKyAgICAgICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwo
Y29udGVudCk7CiAgICAgfSwKIAogICAgIGlzTWFpblJlc291cmNlOiBmdW5jdGlvbigpCkBAIC02
NTEsOSArNjUyLDEzIEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICB2YXIgb2JqZWN0VVJMID0gbnVs
bDsKKwogICAgICAgICAvLyBFdmVudCBoYW5kbGVyIGZvciB0aGUgaW1hZ2UgImxvYWQiIGV2ZW50
LgogICAgICAgICBmdW5jdGlvbiBpbWFnZURpZExvYWQoKQogICAgICAgICB7CisgICAgICAgICAg
ICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVSTCk7CisKICAgICAgICAgICAgIC8vIENhY2hl
IHRoZSBpbWFnZSBtZXRyaWNzLgogICAgICAgICAgICAgdGhpcy5faW1hZ2VTaXplID0gewogICAg
ICAgICAgICAgICAgIHdpZHRoOiBpbWFnZS53aWR0aCwKQEAgLTY2OCw5ICs2NzMsOSBAQCBXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICB2YXIgaW1hZ2UgPSBuZXcg
SW1hZ2U7CiAgICAgICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBpbWFnZURpZExv
YWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCi0gICAgICAgIC8vIFNldCB0aGUgaW1hZ2Ugc291cmNl
IG9uY2Ugd2UndmUgb2J0YWluZWQgdGhlIGJhc2U2NC1lbmNvZGVkIFVSTCBmb3IgaXQuCisgICAg
ICAgIC8vIFNldCB0aGUgaW1hZ2Ugc291cmNlIHVzaW5nIGFuIG9iamVjdCBVUkwgb25jZSB3ZSd2
ZSBvYnRhaW5lZCBpdHMgZGF0YS4KICAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudCgpLnRoZW4o
ZnVuY3Rpb24oY29udGVudCkgewotICAgICAgICAgICAgaW1hZ2Uuc3JjID0gY29udGVudC5zb3Vy
Y2VDb2RlLmNvbnRlbnRVUkw7CisgICAgICAgICAgICBvYmplY3RVUkwgPSBpbWFnZS5zcmMgPSBj
b250ZW50LnNvdXJjZUNvZGUuY3JlYXRlT2JqZWN0VVJMKCk7CiAgICAgICAgIH0pOwogICAgIH0s
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9TY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
U2NyaXB0LmpzCmluZGV4IDg4NDcwYzQ5ZmY3YzdlZTMwNmQ5YjQ2MGFhMmZiYjAyODU2YjI2ZDUu
LmIwN2JhZDQzODFmMzZjZWVjYTgwZWVjNWYzNTg2Y2Y0OWRkOTkzMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwpAQCAt
ODQsNiArODQsMTEgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHJldHVybiB0aGlzLl91cmxDb21wb25lbnRzOwogICAgIH0sCiAKKyAgICBnZXQgbWltZVR5cGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlLm1pbWVUeXBlOworICAgIH0s
CisKICAgICBnZXQgZGlzcGxheU5hbWUoKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3VybCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9T
b3VyY2VDb2RlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L1NvdXJjZUNvZGUuanMKaW5kZXggNDFhYTg4Y2ExYmY1ZGVmMGFmMzhlZjY3NmJkZWEzOGEzMDg3
NmZmNy4uN2VjYzFhZDM5ZmI5ZmNiMTE4OWE2YmE3MjU3Yjg0MWFmMWI2MWQwYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJj
ZUNvZGUuanMKQEAgLTg4LDExICs4OCw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZXZpc2lvbi5jb250ZW50Owog
ICAgIH0sCiAKLSAgICBnZXQgY29udGVudElzQmFzZTY0RW5jb2RlZCgpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fY3VycmVudFJldmlzaW9uLmNvbnRlbnRJc0Jhc2U2NEVuY29kZWQ7Ci0g
ICAgfSwKLQogICAgIGdldCBzb3VyY2VNYXBzKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9zb3VyY2VNYXBzIHx8IFtdOwpAQCAtMTg2LDYgKzE4MSwxMiBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcg
RXJyb3IoIk5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGEgc3ViY2xhc3MuIikpOwogICAgIH0s
CiAKKyAgICBnZXQgbWltZVR5cGUoKQorICAgIHsKKyAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkg
c3ViY2xhc3Nlcy4KKyAgICAgICAgY29uc29sZS5lcnJvcigiTmVlZHMgdG8gYmUgaW1wbGVtZW50
ZWQgYnkgYSBzdWJjbGFzcy4iKTsKKyAgICB9LAorCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX3By
b2Nlc3NDb250ZW50OiBmdW5jdGlvbihwYXJhbWV0ZXJzKQpAQCAtMTkzLDIwICsxOTQsMTkgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlID0gewogICAgICAgICAvLyBEaWZmZXJl
bnQgYmFja2VuZCBBUElzIHJldHVybiBvbmUgb2YgYGNvbnRlbnQsIGBib2R5YCwgYHRleHRgLCBv
ciBgc2NyaXB0U291cmNlYC4KICAgICAgICAgdmFyIGNvbnRlbnQgPSBwYXJhbWV0ZXJzLmNvbnRl
bnQgfHwgcGFyYW1ldGVycy5ib2R5IHx8IHBhcmFtZXRlcnMudGV4dCB8fCBwYXJhbWV0ZXJzLnNj
cmlwdFNvdXJjZTsKICAgICAgICAgdmFyIGVycm9yID0gcGFyYW1ldGVycy5lcnJvcjsKLSAgICAg
ICAgdmFyIGJhc2U2NEVuY29kZWQgPSBwYXJhbWV0ZXJzLmJhc2U2NEVuY29kZWQ7CisgICAgICAg
IGlmIChwYXJhbWV0ZXJzLmJhc2U2NEVuY29kZWQpCisgICAgICAgICAgICBjb250ZW50ID0gZGVj
b2RlQmFzZTY0VG9CbG9iKGNvbnRlbnQsIHRoaXMubWltZVR5cGUpOwogCiAgICAgICAgIHZhciBy
ZXZpc2lvbiA9IHRoaXMucmV2aXNpb25Gb3JSZXF1ZXN0ZWRDb250ZW50OwogCiAgICAgICAgIHRo
aXMuX2lnbm9yZVJldmlzaW9uQ29udGVudERpZENoYW5nZUV2ZW50ID0gdHJ1ZTsKICAgICAgICAg
cmV2aXNpb24uY29udGVudCA9IGNvbnRlbnQgfHwgbnVsbDsKLSAgICAgICAgcmV2aXNpb24uY29u
dGVudElzQmFzZTY0RW5jb2RlZCA9IGJhc2U2NEVuY29kZWQgfHwgZmFsc2U7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9pZ25vcmVSZXZpc2lvbkNvbnRlbnREaWRDaGFuZ2VFdmVudDsKIAogICAgICAg
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKICAgICAgICAgICAgIGVycm9yOiBlcnJvciwKICAg
ICAgICAgICAgIHNvdXJjZUNvZGU6IHRoaXMsCiAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50
LAotICAgICAgICAgICAgYmFzZTY0RW5jb2RlZDogYmFzZTY0RW5jb2RlZAogICAgICAgICB9KTsK
ICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL1NvdXJjZUNvZGVSZXZpc2lvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlUmV2aXNpb24uanMKaW5kZXggY2ViN2EzYjk3
OGExZDM0MTIwYzViMzRiNDdmMGJmZWE0ZWIzZTI4Ni4uNzEwOTMzYTJmMDMyZWZiMjAxNGVjMjNm
ZTM1OTRkODljMzdlODExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVSZXZpc2lvbi5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZVJldmlzaW9uLmpzCkBAIC0y
Myw3ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbiA9IGZ1bmN0aW9uKHNvdXJjZUNvZGUsIGNv
bnRlbnQsIGNvbnRlbnRJc0Jhc2U2NEVuY29kZWQpCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZVJl
dmlzaW9uID0gZnVuY3Rpb24oc291cmNlQ29kZSwgY29udGVudCkKIHsKICAgICBXZWJJbnNwZWN0
b3IuUmV2aXNpb24uY2FsbCh0aGlzKTsKIApAQCAtMzEsNyArMzEsNiBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVJldmlzaW9uID0gZnVuY3Rpb24oc291cmNlQ29kZSwgY29udGVudCwgY29udGVu
dElzQmFzZTY0RQogCiAgICAgdGhpcy5fc291cmNlQ29kZSA9IHNvdXJjZUNvZGU7CiAgICAgdGhp
cy5fY29udGVudCA9IGNvbnRlbnQgfHwgIiI7Ci0gICAgdGhpcy5fY29udGVudElzQmFzZTY0RW5j
b2RlZCA9IGNvbnRlbnRJc0Jhc2U2NEVuY29kZWQgfHwgZmFsc2U7CiB9OwogCiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVJldmlzaW9uLnByb3RvdHlwZSA9IHsKQEAgLTYxLDE2ICs2MCw2IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24ucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
Ll9zb3VyY2VDb2RlLnJldmlzaW9uQ29udGVudERpZENoYW5nZSh0aGlzKTsKICAgICB9LAogCi0g
ICAgZ2V0IGNvbnRlbnRJc0Jhc2U2NEVuY29kZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX2NvbnRlbnRJc0Jhc2U2NEVuY29kZWQ7Ci0gICAgfSwKLQotICAgIHNldCBjb250ZW50SXNC
YXNlNjRFbmNvZGVkKGVuY29kZWQpCi0gICAgewotICAgICAgICB0aGlzLl9jb250ZW50SXNCYXNl
NjRFbmNvZGVkID0gZW5jb2RlZCB8fCBmYWxzZTsKLSAgICB9LAotCiAgICAgYXBwbHk6IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGUuY3VycmVudFJldmlzaW9uID0g
dGhpczsKQEAgLTgzLDcgKzcyLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbi5w
cm90b3R5cGUgPSB7CiAKICAgICBjb3B5OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24odGhpcy5fc291cmNlQ29kZSwg
dGhpcy5fY29udGVudCwgdGhpcy5fY29udGVudElzQmFzZTY0RW5jb2RlZCk7CisgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbih0aGlzLl9zb3VyY2VDb2Rl
LCB0aGlzLl9jb250ZW50KTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Gb250UmVzb3VyY2VDb250ZW50Vmlldy5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0ZvbnRSZXNvdXJjZUNv
bnRlbnRWaWV3LmpzCmluZGV4IGRmZTNiNDY0ZTM3NDBiZTFjOGM1ZGE3MDZhNjQ5MjFhMTg2ZGJi
ZWIuLmJlM2ExZjVjNmNkM2IxMmNlNzdiZmY1OGFkOTQ4ZDE4ZmIwM2Y2ODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0ZvbnRSZXNvdXJjZUNv
bnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0ZvbnRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCkBAIC05NCw4ICs5NCwxMCBAQCBXZWJJbnNw
ZWN0b3IuRm9udFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlID0gewogICAgICAgICBpZiAo
dGhpcy5fc3R5bGVFbGVtZW50ICYmIHRoaXMuX3N0eWxlRWxlbWVudC5wYXJlbnROb2RlKQogICAg
ICAgICAgICAgdGhpcy5fc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5f
c3R5bGVFbGVtZW50KTsKIAorICAgICAgICB0aGlzLl9mb250T2JqZWN0VVJMID0gdGhpcy5yZXNv
dXJjZS5jcmVhdGVPYmplY3RVUkwoKTsKKwogICAgICAgICB0aGlzLl9zdHlsZUVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwotICAgICAgICB0aGlzLl9zdHlsZUVsZW1l
bnQudGV4dENvbnRlbnQgPSAiQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIiIgKyB1bmlxdWVG
b250TmFtZSArICJcIjsgc3JjOiB1cmwoIiArIHRoaXMucmVzb3VyY2UuY29udGVudFVSTCArICIp
IiArIGZvcm1hdCArICI7IH0iOworICAgICAgICB0aGlzLl9zdHlsZUVsZW1lbnQudGV4dENvbnRl
bnQgPSAiQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIiIgKyB1bmlxdWVGb250TmFtZSArICJc
Ijsgc3JjOiB1cmwoIiArIHRoaXMuX2ZvbnRPYmplY3RVUkwgKyAiKSIgKyBmb3JtYXQgKyAiOyB9
IjsKIAogICAgICAgICAvLyBUaGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFkZGVkIHdoZW4gc2hv
d24gbGF0ZXIgaWYgd2UgYXJlIG5vdCB2aXNpYmxlIG5vdy4KICAgICAgICAgaWYgKHRoaXMudmlz
aWJsZSkKQEAgLTE1Myw2ICsxNTUsMTYgQEAgV2ViSW5zcGVjdG9yLkZvbnRSZXNvdXJjZUNvbnRl
bnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdHlsZSBlbGVtZW50
IHNvIGl0IHdpbGwgbm90IHN0aWNrIGFyb3VuZCB3aGVuIHRoaXMgY29udGVudCB2aWV3IGlzIGRl
c3Ryb3llZC4KICAgICAgICAgaWYgKHRoaXMuX3N0eWxlRWxlbWVudCAmJiB0aGlzLl9zdHlsZUVs
ZW1lbnQucGFyZW50Tm9kZSkKICAgICAgICAgICAgIHRoaXMuX3N0eWxlRWxlbWVudC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKHRoaXMuX3N0eWxlRWxlbWVudCk7CisgICAgfSwKKworICAgIGNsb3Nl
ZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9y
IHRoZSBmYWN0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc2VuZCBhbnkgZXZlbnRzCisgICAg
ICAgIC8vIHdoZW4gYSBAZm9udC1mYWNlIHJlc291cmNlIGlzIGxvYWRlZC4gU28sIHdlIGFzc3Vt
ZSBpdCBjb3VsZCBiZSBuZWVkZWQgdW50aWwKKyAgICAgICAgLy8gdGhlIGNvbnRlbnQgdmlldyBp
cyBkZXN0cm95ZWQsIGFzIHJlLWF0dGFjaGluZyB0aGUgc3R5bGUgZWxlbWVudCB3b3VsZCBjYXVz
ZQorICAgICAgICAvLyB0aGUgb2JqZWN0IFVSTCB0byBiZSByZXNvbHZlZCBhZ2Fpbi4KKyAgICAg
ICAgaWYgKHRoaXMuX2ZvbnRPYmplY3RVUkwpCisgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0
VVJMKHRoaXMuX2ZvbnRPYmplY3RVUkwpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0ltYWdlUmVzb3VyY2VDb250ZW50
Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0ltYWdl
UmVzb3VyY2VDb250ZW50Vmlldy5qcwppbmRleCA0NDJhZmYzMmM3YzE1NzU0ZTBlMjhkMGQ0NTJm
YzE0NjdlNDJiZTU2Li4xNDY5ZGUxMjI0NDg5YjVlMDU3OTQyNzFhNTk2YmZiZGU0NzdhZjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9JbWFn
ZVJlc291cmNlQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvSW1hZ2VSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCkBAIC00Niw4ICs0Niwx
MiBAQCBXZWJJbnNwZWN0b3IuSW1hZ2VSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsK
ICAgICB7CiAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCisgICAgICAg
IHZhciBvYmplY3RVUkwgPSB0aGlzLnJlc291cmNlLmNyZWF0ZU9iamVjdFVSTCgpOwogICAgICAg
ICB0aGlzLl9pbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKLSAg
ICAgICAgdGhpcy5faW1hZ2VFbGVtZW50LnNyYyA9IHRoaXMucmVzb3VyY2UuY29udGVudFVSTDsK
KyAgICAgICAgdGhpcy5faW1hZ2VFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VVJMKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHRoaXMuX2ltYWdlRWxlbWVudC5zcmMgPSBvYmplY3RVUkw7CiAK
ICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2ltYWdlRWxlbWVudCk7CiAg
ICAgfQo=
</data>
<flag name="review"
          id="271390"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>