<?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>173052</bug_id>
          
          <creation_ts>2017-06-07 03:54:00 -0700</creation_ts>
          <short_desc>RTCDataChannel connectivity issues in Safari 11</short_desc>
          <delta_ts>2017-09-14 12:45: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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ashley Gullen">ashley</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>db</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>juberti</cc>
    
    <cc>mail-154060</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1316433</commentid>
    <comment_count>0</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2017-06-07 03:54:00 -0700</bug_when>
    <thetext>WebRTC DataChannels appear to have connectivity issues on Safari 11 with macOS High Sierra.

This is a simple DataChannel-based multiplayer game demo made in Construct 2: https://www.scirra.com/labs/rtcgame/

Simply open the page, type in a name and click &apos;Join&apos;. If you do this with two browsers, you should be able to see each player&apos;s actions as they move around with WASD and mouse move &amp; click. However in Safari 11 the following cases fail to connect where Chrome can:

1) Two Safari windows on the same machine cannot connect
2) Safari &amp; Chrome on a Windows 10 machine on the same LAN cannot connect
3) Safari &amp; Chrome on a remote Windows machine (over the Internet) establish a connection, but after a moment the DataChannel send() method starts throwing &quot;InvalidStateError (DOM Exception 11): The object is in an invalid state.&quot;

Chrome and Firefox can interoperate in all of these cases; so should Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316916</commentid>
    <comment_count>1</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-06-08 08:41:08 -0700</bug_when>
    <thetext>(In reply to Ashley Gullen from comment #0)
&gt; WebRTC DataChannels appear to have connectivity issues on Safari 11 with
&gt; macOS High Sierra.
&gt; 
&gt; This is a simple DataChannel-based multiplayer game demo made in Construct
&gt; 2: https://www.scirra.com/labs/rtcgame/
&gt; 
&gt; Simply open the page, type in a name and click &apos;Join&apos;. If you do this with
&gt; two browsers, you should be able to see each player&apos;s actions as they move
&gt; around with WASD and mouse move &amp; click. However in Safari 11 the following
&gt; cases fail to connect where Chrome can:
&gt; 
&gt; 1) Two Safari windows on the same machine cannot connect
&gt; 2) Safari &amp; Chrome on a Windows 10 machine on the same LAN cannot connect
&gt; 3) Safari &amp; Chrome on a remote Windows machine (over the Internet) establish
&gt; a connection, but after a moment the DataChannel send() method starts
&gt; throwing &quot;InvalidStateError (DOM Exception 11): The object is in an invalid
&gt; state.&quot;
&gt; 
&gt; Chrome and Firefox can interoperate in all of these cases; so should Safari.

Hi Ashley, thanks for the report.
Contrary to Chrome and Firefox, we do not leak private IP addresses access unless camera or microphone access is also granted.

You can use the Debug menu (see https://webkit.org/debugging-webkit/ to use &quot;defaults write&quot; magic to make it appear). Then you can go to &quot;Media Flags&quot; and check &quot;Disable ICE candidate filtering&quot;. Once these options are set, make sure to create a new tab so that these options are propagated properly.

https://webrtc.github.io/samples/src/content/datachannel/basic/ does not work without this change but works with this change.

Would be great if you can test that and report the results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316937</commentid>
    <comment_count>2</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2017-06-08 09:37:09 -0700</bug_when>
    <thetext>Hi youenn,

I must emphasise case #3 was not a local case so I do not expect your suggestion to change it. However I have checked &quot;Disable ICE candidate filtering&quot; and restarted Safari and tested each case again. Results are:

1) Two Safari windows on the same machine: a connection is established, but send() calls fail with &quot;InvalidStateError (DOM Exception 11): The object is in an invalid state.&quot;
2) Safari &amp; Chrome on LAN: it works for a couple of seconds (players can see each other moving), then after a few seconds send() fails with &quot;InvalidStateError (DOM Exception 11): The object is in an invalid state.&quot;
3) Safari &amp; Chrome over Internet: identical to previous result (as expected, since not a local connection)

So there appear to be two issues here:
A) Local connections are blocked by default (apparently intentionally)
B) InvalidStateError occurs very soon after establishing a DataChannel connection

B definitely needs to be fixed, but I must try to make a case about A. Multiplayer games are a good use case for DataChannels, and players will frequently want to play over a LAN. Many games have no use for camera or microphone. It also encourages a weird workaround where games would have to ask for media permissions they don&apos;t need just to gain LAN connection permission. Alternatively we can put TURN servers in place, but this makes WebRTC games much more expensive to operate as you then have to run the relay server and pay its bandwidth bills, *and* the network performance will be far worse than the low-latency, high-bandwidth local connection that could otherwise be made. In practice this will result in games that are laggy in Safari and much more responsive in Chrome or Firefox.

There are also non-game use cases for local DataChannels: we have a browser-based game development IDE at https://editor.construct.net. It has a &quot;remote preview&quot; feature that allows you to preview your game on another device. It works by sending the entire game down a DataChannel to another device for testing, e.g. your phone. Many of our users are keen for this to work on iOS. In this case we run a TURN server. If a user has a 100mb game and wants to run it on their iPhone, in this case they&apos;ll have to wait for a huge transfer over the Internet (while running up our bandwidth bills) just to transfer it across their desk to their phone. It runs at LAN speed in Chrome, so again this will mean that fast, snappy loads in Chrome for Android are a slow drag on Safari.

I am sure there are several other use cases for DataChannels over LAN.

Besides, what&apos;s the concern about leaking a private IP? For a nontrivial percentage of users it can be guessed, e.g. it&apos;s probably 192.168.0.1 for a lot of people. I&apos;d be interested to know the rationale behind this. Perhaps there&apos;s something else that can be done? Surely online games don&apos;t have to suffer this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317001</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-06-08 11:34:05 -0700</bug_when>
    <thetext>One case where this error is thrown is when the channel is not yet ready (connection not opened...), as per https://w3c.github.io/webrtc-pc/#dfn-send.

Maybe there is a difference in behavior with other browsers with that regards.
Maybe send() is called to soon in your app, or maybe we have a bug on our side.

I&apos;ll try to have a closer look at this issue, probably by end of next week.
It would help if you can provide a reduced test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318217</commentid>
    <comment_count>4</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2017-06-12 07:18:00 -0700</bug_when>
    <thetext>The code in the demo specifically waits until the DataChannel onopen handler fires before trying to call send(). It&apos;s possible there&apos;s a bug in that code, but I suspect not based on the fact in some cases it works briefly, with data correctly being received, before failing with InvalidStateError.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318218</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-12 07:18:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/32712143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318968</commentid>
    <comment_count>6</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2017-06-13 19:07:23 -0700</bug_when>
    <thetext>*** Bug 173307 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348645</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-13 21:59:34 -0700</bug_when>
    <thetext>I looked at rtcgame more closely.
It seems that a lot of big messages (&gt;200Ko) are tried to be sent through RTCDataChannel, apparently more than the bandwidth available.
If more data is sent, it is buffered up to 16Mo when the channel is closed, hence the InvalidStateError.
Do you know what kind of data is sent and why it would be so big? 

Looking at Chrome, it does not appear that a lot of data is sent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348718</commentid>
    <comment_count>8</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2017-09-14 04:11:03 -0700</bug_when>
    <thetext>That sounds wrong, it should only be sending a tiny amount of data for player position and state - definitely &lt;5kb per message.

It works correctly in Chrome and Firefox so maybe there&apos;s an issue with DataChannels or perhaps there&apos;s some compatibility issue with Safari in the code that generates the messages to send?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348721</commentid>
    <comment_count>9</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2017-09-14 04:18:15 -0700</bug_when>
    <thetext>Oh, I just realised - our code reserves a 256kb ArrayBuffer and writes binary messages to be sent to that buffer. We then send a fraction of the buffer by creating a view to pass to send(), e.g.: new Uint8Array(buffer, 0, len)

I suspect in the ArrayBufferView overload of send(), Safari actually sends the entire ArrayBuffer. It should instead only send the data in the view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348737</commentid>
    <comment_count>10</comment_count>
    <who name="Lennart Grahl">mail-154060</who>
    <bug_when>2017-09-14 05:34:38 -0700</bug_when>
    <thetext>Sorry for jumping in here but I have a few questions to youenn fablet&apos;s response from comment #7:

&gt; It seems that a lot of big messages (&gt;200Ko) are tried to be sent through
&gt; RTCDataChannel, apparently more than the bandwidth available.

I don&apos;t understand the correlation between available bandwidth and being able to send a message of size n? Can you elaborate?

&gt; If more data is sent, it is buffered up to 16Mo when the channel is closed,
&gt; hence the InvalidStateError.

Why would the implementation buffer data on a non-open channel?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348790</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 09:11:48 -0700</bug_when>
    <thetext>(In reply to Ashley Gullen from comment #9)
&gt; Oh, I just realised - our code reserves a 256kb ArrayBuffer and writes
&gt; binary messages to be sent to that buffer. We then send a fraction of the
&gt; buffer by creating a view to pass to send(), e.g.: new Uint8Array(buffer, 0,
&gt; len)
&gt; 
&gt; I suspect in the ArrayBufferView overload of send(), Safari actually sends
&gt; the entire ArrayBuffer. It should instead only send the data in the view.

Thanks this is really useful!
There is probably a bug in our handling of ArrayBufferView here, I&apos;ll try to fix it asap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348791</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 09:14:14 -0700</bug_when>
    <thetext>(In reply to Lennart Grahl from comment #10)
&gt; Sorry for jumping in here but I have a few questions to youenn fablet&apos;s
&gt; response from comment #7:
&gt; 
&gt; &gt; It seems that a lot of big messages (&gt;200Ko) are tried to be sent through
&gt; &gt; RTCDataChannel, apparently more than the bandwidth available.
&gt; 
&gt; I don&apos;t understand the correlation between available bandwidth and being
&gt; able to send a message of size n? Can you elaborate?

If the web application sends more data than what the channel can actually send, this data must be buffered by the web engine.

RTCDataChannel.bufferedAmount should give this information.

&gt; &gt; If more data is sent, it is buffered up to 16Mo when the channel is closed,
&gt; &gt; hence the InvalidStateError.
&gt; 
&gt; Why would the implementation buffer data on a non-open channel?

If the channel is not opened, an exception will happen and nothing will be buffered.
In the rtcgame case, the channel is opened and instead of sending a few bytes, we are probably wrongly sending 256 kb, quickly exploding the buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348817</commentid>
    <comment_count>13</comment_count>
      <attachid>320779</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 10:06:33 -0700</bug_when>
    <thetext>Created attachment 320779
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348825</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 10:13:38 -0700</bug_when>
    <thetext>Patch seems to solve the rtcgame issue.
As of the ice candidate filtering issue, it might be best to file another bug dedicated to that specific topic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348839</commentid>
    <comment_count>15</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2017-09-14 10:25:22 -0700</bug_when>
    <thetext>That&apos;s great! Do you have any idea which Safari release or TP the fix will be in so I can verify?

I&apos;ll file a separate bug about local IP addresses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348850</commentid>
    <comment_count>16</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2017-09-14 10:46:30 -0700</bug_when>
    <thetext>Filed issue 176921 for making LAN connections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348876</commentid>
    <comment_count>17</comment_count>
      <attachid>320779</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-14 11:16:19 -0700</bug_when>
    <thetext>Comment on attachment 320779
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +
&gt; +        Covered by updated test.
&gt; +

This needs an explanation of the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348884</commentid>
    <comment_count>18</comment_count>
      <attachid>320794</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 11:26:50 -0700</bug_when>
    <thetext>Created attachment 320794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348887</commentid>
    <comment_count>19</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 11:27:43 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #17)
&gt; Comment on attachment 320779 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320779&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +
&gt; &gt; +        Covered by updated test.
&gt; &gt; +
&gt; 
&gt; This needs an explanation of the change.

Maybe we should have change the bug title.
Anyway, I beefed up the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348927</commentid>
    <comment_count>20</comment_count>
      <attachid>320794</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-14 12:45:35 -0700</bug_when>
    <thetext>Comment on attachment 320794
Patch

Clearing flags on attachment: 320794

Committed r222045: &lt;http://trac.webkit.org/changeset/222045&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348928</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-14 12:45:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320779</attachid>
            <date>2017-09-14 10:06:33 -0700</date>
            <delta_ts>2017-09-14 11:26:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173052-20170914100632.patch</filename>
            <type>text/plain</type>
            <size>7646</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgzOWJkZWVmN2NmYTJj
YzBhNTc1MzI4NzBiYjBmNzg0NjE2OWJkZC4uMmVkYzA4MTg4YTBmZDJkMjdmYTAxYTFkMGZiMDEx
OTg1NzNmYjdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3LTA5LTE0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSVENEYXRhQ2hhbm5lbCBj
b25uZWN0aXZpdHkgaXNzdWVzIGluIFNhZmFyaSAxMQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMDUyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MjcxMjE0Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IHVwZGF0ZWQgdGVzdC4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6
OnNlbmQpOiBDb29yZWN0bHkgaGFuZGxpbmcgc2VuZGluZyBvZiBBcnJheUJ1ZmZlclZpZXcuCisg
ICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5lbDo6c2VuZFJhd0RhdGEpOiBIZWxwZXIgcm91
dGluZSBmb3IgcmF3IGRhdGEgc2VuZGluZy4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RhdGFDaGFubmVsLmg6CisKIDIwMTctMDktMTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgY29kZSB1c2luZyBWZWN0b3I6Om1hcCB0byBXVEY6
bWFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0Rh
dGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0
YUNoYW5uZWwuY3BwCmluZGV4IGNjMGU5YjU0ZDEwNTA4OGJmYjQ2MTM5MmIxMGYzOTY2ZDdkMzI2
OWQuLjg4YWFmMWVhNDdhMTA3YTRiM2Q3YmU0OGRmNjJhMjQ2YjczZGUyYTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3Bw
CkBAIC0xMDUsNyArMTA1LDYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUlRDRGF0YUNoYW5uZWw6OnNl
dEJpbmFyeVR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBiaW5hcnlUeXBlKQogCiBFeGNlcHRpb25P
cjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcmIGRhdGEpCiB7Ci0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBvbmx5IHRocm93IGluIENvbm5lY3RlZCBzdGF0ZS4KICAgICBp
ZiAobV9yZWFkeVN0YXRlICE9IFJUQ0RhdGFDaGFubmVsU3RhdGU6Ok9wZW4pCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCkBAIC0xMTcsMTkgKzExNiwx
NSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcm
IGRhdGEpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gUlRDRGF0YUNo
YW5uZWw6OnNlbmQoQXJyYXlCdWZmZXImIGRhdGEpCitFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRh
Q2hhbm5lbDo6c2VuZFJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsK
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgdGhyb3cgaW4gQ29ubmVjdGVkIHN0YXRlLgog
ICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gUlRDRGF0YUNoYW5uZWxTdGF0ZTo6T3BlbikKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBzaXplX3Qg
ZGF0YUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aCgpOwotICAgIGlmICghZGF0YUxlbmd0aCkKKyAg
ICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNvbnN0IGNoYXIqIGRh
dGFQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKLQotICAg
IGlmICghbV9oYW5kbGVyLT5zZW5kUmF3RGF0YShkYXRhUG9pbnRlciwgZGF0YUxlbmd0aCkpIHsK
KyAgICBpZiAoIW1faGFuZGxlci0+c2VuZFJhd0RhdGEoZGF0YSwgbGVuZ3RoKSkgewogICAgICAg
ICAvLyBGSVhNRTogRGVjaWRlIHdoYXQgdGhlIHJpZ2h0IGV4Y2VwdGlvbiBoZXJlIGlzLgogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICB9CkBAIC0xMzcsMTAg
KzEzMiwxNSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChBcnJheUJ1
ZmZlciYgZGF0YSkKICAgICByZXR1cm4geyB9OwogfQogCisKK0V4Y2VwdGlvbk9yPHZvaWQ+IFJU
Q0RhdGFDaGFubmVsOjpzZW5kKEFycmF5QnVmZmVyJiBkYXRhKQoreworICAgIHJldHVybiBzZW5k
UmF3RGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpLCBkYXRhLmJ5dGVM
ZW5ndGgoKSk7Cit9CisKIEV4Y2VwdGlvbk9yPHZvaWQ+IFJUQ0RhdGFDaGFubmVsOjpzZW5kKEFy
cmF5QnVmZmVyVmlldyYgZGF0YSkKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgdGhy
b3cgaW4gQ29ubmVjdGVkIHN0YXRlLgotICAgIHJldHVybiBzZW5kKCpkYXRhLnVuc2hhcmVkQnVm
ZmVyKCkpOworICAgIHJldHVybiBzZW5kUmF3RGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YS5iYXNlQWRkcmVzcygpKSwgZGF0YS5ieXRlTGVuZ3RoKCkpOwogfQogCiBFeGNlcHRpb25P
cjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChCbG9iJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuaAppbmRleCBhM2JiNWM2ZTAx
ZTJlOTJiMmYzYTc0NzhhOTBiYTRmZTQ5NWZiMGFiLi42MjBhZGI0MzQ4YzY0NjJiZWJkN2I1ZWZl
NWU2NDNhMGEzNmFlNmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5oCkBAIC04OCw2ICs4OCw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgcmVmKCk7IH0KICAgICB2b2lkIGRlcmVmRXZl
bnRUYXJnZXQoKSBmaW5hbCB7IGRlcmVmKCk7IH0KIAorICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNl
bmRSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworCiAgICAgLy8gQWN0
aXZlRE9NT2JqZWN0IEFQSQogICAgIHZvaWQgc3RvcCgpIGZpbmFsOwogICAgIGNvbnN0IGNoYXIq
IGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiUlRDRGF0YUNoYW5u
ZWwiOyB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMWI2OTc5N2E0ZDMwYWUzOTIxNmM2NTkyZDUwMjJjODk0ZGJiOWNiOS4u
ODcyNWY2Y2I0N2ExZjA4NDliZTcyMjJhMThlYTA1YWNlNmU1MDkwYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDE3LTA5LTE0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSVENEYXRhQ2hhbm5lbCBjb25uZWN0aXZpdHkgaXNzdWVzIGluIFNhZmFyaSAxMQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMDUyCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjcxMjE0Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYnJ0Yy9kYXRhY2hhbm5lbC9iaW5hcnktZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHdlYnJ0Yy9kYXRhY2hhbm5lbC9iaW5hcnkuaHRtbDoKKwog
MjAxNy0wOS0xNCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTWFyayBzdmcvYXMtaW1hZ2Uvc3ZnLWltYWdlLXdpdGgtZGF0YS11cmktdXNlLWRhdGEtdXJp
LnN2ZyBhcyBmbGFreS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnJ0Yy9kYXRhY2hhbm5l
bC9iaW5hcnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2VicnRjL2RhdGFjaGFubmVsL2Jp
bmFyeS1leHBlY3RlZC50eHQKaW5kZXggMmVkMjhlZDZiN2Y0ZTM3ZGI2Njk1ZGRjMmI5MzViOTgx
MTllZDU5ZC4uZDY5MDM1ODA0ODRkZDgwZTA0NTk4ZTFlYmRiYTkyMTViNThkMGZhYSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvd2VicnRjL2RhdGFjaGFubmVsL2JpbmFyeS1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvd2VicnRjL2RhdGFjaGFubmVsL2JpbmFyeS1leHBlY3RlZC50eHQK
QEAgLTEsMyArMSwxMSBAQAogCiBQQVNTIEJhc2ljIGJpbmFyeSBkYXRhIGNoYW5uZWwgZXhjaGFu
Z2UgZnJvbSBvZmZlcmVyIHRvIHJlY2VpdmVyIAorUEFTUyB0ZXN0IGFycmF5IGJ1ZmZlciAxIAor
UEFTUyB0ZXN0IGFycmF5IGJ1ZmZlciAyIAorUEFTUyB0ZXN0IGFycmF5IGJ1ZmZlciAzIAorUEFT
UyB0ZXN0IGFycmF5IGJ1ZmZlciA0IAorUEFTUyB0ZXN0IGFycmF5IGJ1ZmZlciB2aWV3IDEgCitQ
QVNTIHRlc3QgYXJyYXkgYnVmZmVyIHZpZXcgMiAKK1BBU1MgdGVzdCBhcnJheSBidWZmZXIgdmll
dyAzIAorUEFTUyB0ZXN0IGFycmF5IGJ1ZmZlciB2aWV3IDQgCiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYnJ0Yy9kYXRhY2hhbm5lbC9iaW5hcnkuaHRtbCBiL0xheW91dFRlc3RzL3dlYnJ0
Yy9kYXRhY2hhbm5lbC9iaW5hcnkuaHRtbAppbmRleCBhYjkyZWNhMTgwNmI0Zjk5NTk1NzhmMjQx
ZjdmMTQwNTM0OWVhZGE3Li44Mjc0NTkzODQyMGRlNDc3MTk3MDBmZjU1MjhhNzFkNWRmY2FkYjMw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJydGMvZGF0YWNoYW5uZWwvYmluYXJ5Lmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvd2VicnRjL2RhdGFjaGFubmVsL2JpbmFyeS5odG1sCkBAIC0yNiw2
ICsyNiwxMSBAQCBmdW5jdGlvbiBjcmVhdGVBcnJheUJ1ZmZlcihsZW5ndGgpCiAgICAgcmV0dXJu
IGFycmF5OwogfQogCitmdW5jdGlvbiBjcmVhdGVBcnJheUJ1ZmZlclZpZXcobGVuZ3RoKQorewor
ICAgIHJldHVybiBjcmVhdGVBcnJheUJ1ZmZlcigyICogbGVuZ3RoKS5zdWJhcnJheShsZW5ndGgs
IDIgKiBsZW5ndGgpOworfQorCiBmdW5jdGlvbiBjaGVja0FycmF5QnVmZmVyKGFycmF5LCBsZW5n
dGgpCiB7CiAgICAgaWYgKGFycmF5LmJ5dGVMZW5ndGggIT09IGxlbmd0aCkKQEAgLTM5LDE2ICs0
NCw1MSBAQCBmdW5jdGlvbiBjaGVja0FycmF5QnVmZmVyKGFycmF5LCBsZW5ndGgpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Z1bmN0aW9uIGNoZWNrQXJyYXlCdWZmZXJWaWV3KGFycmF5LCBsZW5n
dGgpCit7CisgICAgaWYgKGFycmF5LmJ5dGVMZW5ndGggIT09IGxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgdmFyIGEgPSBuZXcgVWludDhBcnJheShhcnJheSk7CisgICAgZm9y
ICh2YXIgY3B0ciA9IDA7IGNwdHIgPCBsZW5ndGg7IGNwdHIrKykgeworICAgICAgICBpZiAoYVtj
cHRyXSAhPT0gY3B0ciArIGxlbmd0aCArIDEpCisgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gdGVzdEFycmF5QnVmZmVyKGFy
cmF5LCBsZW5ndGgpCit7CisgICAgdGVzdCgoKSA9PiB7CisgICAgICAgIGFzc2VydF90cnVlKGNo
ZWNrQXJyYXlCdWZmZXIoYXJyYXksIGxlbmd0aCkpOworICAgIH0sICJ0ZXN0IGFycmF5IGJ1ZmZl
ciAiICsgbGVuZ3RoKTsKK30KKworZnVuY3Rpb24gdGVzdEFycmF5QnVmZmVyVmlldyhhcnJheSwg
bGVuZ3RoKQoreworICAgIHRlc3QoKCkgPT4geworICAgICAgICBhc3NlcnRfdHJ1ZShjaGVja0Fy
cmF5QnVmZmVyVmlldyhhcnJheSwgbGVuZ3RoKSk7CisgICAgfSwgInRlc3QgYXJyYXkgYnVmZmVy
IHZpZXcgIiArIGxlbmd0aCk7Cit9CisKIGZ1bmN0aW9uIHJlY2VpdmVNZXNzYWdlcyhldmVudCkg
ewogICAgIHRyeSB7CiAgICAgICAgIGlmICgrK2NvdW50ZXIgPT09IDEpCi0gICAgICAgICAgICBh
c3NlcnRfdHJ1ZShjaGVja0FycmF5QnVmZmVyKGV2ZW50LmRhdGEsIDEpKTsKKyAgICAgICAgICAg
IHRlc3RBcnJheUJ1ZmZlcihldmVudC5kYXRhLCAxKTsKICAgICAgICAgZWxzZSBpZiAoY291bnRl
ciA9PT0gMikKLSAgICAgICAgICAgIGFzc2VydF90cnVlKGNoZWNrQXJyYXlCdWZmZXIoZXZlbnQu
ZGF0YSwgMikpOworICAgICAgICAgICAgdGVzdEFycmF5QnVmZmVyKGV2ZW50LmRhdGEsIDIpOwog
ICAgICAgICBlbHNlIGlmIChjb3VudGVyID09PSAzKQotICAgICAgICAgICAgYXNzZXJ0X3RydWUo
Y2hlY2tBcnJheUJ1ZmZlcihldmVudC5kYXRhLCAzKSk7Ci0gICAgICAgIGVsc2UgaWYgKGNvdW50
ZXIgPT09IDQpIHsKLSAgICAgICAgICAgIGFzc2VydF90cnVlKGNoZWNrQXJyYXlCdWZmZXIoZXZl
bnQuZGF0YSwgNCkpOworICAgICAgICAgICAgdGVzdEFycmF5QnVmZmVyKGV2ZW50LmRhdGEsIDMp
OworICAgICAgICBlbHNlIGlmIChjb3VudGVyID09PSA0KQorICAgICAgICAgICAgdGVzdEFycmF5
QnVmZmVyKGV2ZW50LmRhdGEsIDQpOworICAgICAgICBlbHNlIGlmIChjb3VudGVyID09PSA1KQor
ICAgICAgICAgICAgdGVzdEFycmF5QnVmZmVyVmlldyhldmVudC5kYXRhLCAxKTsKKyAgICAgICAg
ZWxzZSBpZiAoY291bnRlciA9PT0gNikKKyAgICAgICAgICAgIHRlc3RBcnJheUJ1ZmZlclZpZXco
ZXZlbnQuZGF0YSwgMik7CisgICAgICAgIGVsc2UgaWYgKGNvdW50ZXIgPT09IDcpCisgICAgICAg
ICAgICB0ZXN0QXJyYXlCdWZmZXJWaWV3KGV2ZW50LmRhdGEsIDMpOworICAgICAgICBlbHNlIGlm
IChjb3VudGVyID09PSA4KSB7CisgICAgICAgICAgICB0ZXN0QXJyYXlCdWZmZXJWaWV3KGV2ZW50
LmRhdGEsIDQpOwogICAgICAgICAgICAgY2xvc2VEYXRhQ2hhbm5lbHMoKTsKICAgICAgICAgICAg
IGZpbmlzaFRlc3QoKTsKICAgICAgICAgfSBlbHNlCkBAIC02NCw2ICsxMDQsMTAgQEAgZnVuY3Rp
b24gc2VuZE1lc3NhZ2VzKGNoYW5uZWwpCiAgICAgY2hhbm5lbC5zZW5kKGNyZWF0ZUFycmF5QnVm
ZmVyKDIpKTsKICAgICBjaGFubmVsLnNlbmQoY3JlYXRlQXJyYXlCdWZmZXIoMykpOwogICAgIGNo
YW5uZWwuc2VuZChjcmVhdGVBcnJheUJ1ZmZlcig0KSk7CisgICAgY2hhbm5lbC5zZW5kKGNyZWF0
ZUFycmF5QnVmZmVyVmlldygxKSk7CisgICAgY2hhbm5lbC5zZW5kKGNyZWF0ZUFycmF5QnVmZmVy
VmlldygyKSk7CisgICAgY2hhbm5lbC5zZW5kKGNyZWF0ZUFycmF5QnVmZmVyVmlldygzKSk7Cisg
ICAgY2hhbm5lbC5zZW5kKGNyZWF0ZUFycmF5QnVmZmVyVmlldyg0KSk7CiB9CiAKIHZhciBmaW5p
c2hUZXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320794</attachid>
            <date>2017-09-14 11:26:50 -0700</date>
            <delta_ts>2017-09-14 12:45:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173052-20170914112650.patch</filename>
            <type>text/plain</type>
            <size>7889</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJlYWQ2NjhlNzliNGI0
YmQxYTI3ZGU1MTJkZjQ4ODRiNTM0YjNmNS4uNjJiYzA3MWNjYjQ0MmFmNDFlMmQ1MDhiNmUxNmJh
OTkwMTJlODEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSVENEYXRhQ2hhbm5lbCBj
b25uZWN0aXZpdHkgaXNzdWVzIGluIFNhZmFyaSAxMQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMDUyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MjcxMjE0Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IHVwZGF0ZWQgdGVzdC4KKworICAgICAgICBCZWZvcmUgdGhlIHBhdGNoLCB3
aGVuIHNlbmRpbmcgYW4gQXJyYXlCdWZmZXJWaWV3LCBSVENEYXRhQ2hhbm5lbCB3YXMgc2VuZGlu
ZyB0aGUgd2hvbGUgQXJyYXlCdWZmZXIgYmFja2luZyB0aGUgQXJyYXlCdWZmZXJWaWV3LgorICAg
ICAgICBXaXRoIHRoaXMgcGF0Y2gsIFJUQ0RhdGFDaGFubmVsIHdpbGwgbm93IHNlbmQgb25seSB0
aGUgYnl0ZXMgdGhlIEFycmF5QnVmZmVyVmlldyBpcyBleHBvc2luZy4KKworICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UlRDRGF0YUNoYW5uZWw6OnNlbmQpOiBDb3JyZWN0bHkgaGFuZGxpbmcgc2VuZGluZyBvZiBBcnJh
eUJ1ZmZlclZpZXcuCisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5lbDo6c2VuZFJhd0Rh
dGEpOiBIZWxwZXIgcm91dGluZSBmb3IgcmF3IGRhdGEgc2VuZGluZy4KKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmg6CisKIDIwMTctMDktMTMgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgY29kZSB1c2luZyBWZWN0
b3I6Om1hcCB0byBXVEY6bWFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCmluZGV4IGNjMGU5YjU0ZDEwNTA4OGJmYjQ2MTM5
MmIxMGYzOTY2ZDdkMzI2OWQuLjg4YWFmMWVhNDdhMTA3YTRiM2Q3YmU0OGRmNjJhMjQ2YjczZGUy
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0
YUNoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
RGF0YUNoYW5uZWwuY3BwCkBAIC0xMDUsNyArMTA1LDYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUlRD
RGF0YUNoYW5uZWw6OnNldEJpbmFyeVR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBiaW5hcnlUeXBl
KQogCiBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcm
IGRhdGEpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IHRocm93IGluIENvbm5lY3Rl
ZCBzdGF0ZS4KICAgICBpZiAobV9yZWFkeVN0YXRlICE9IFJUQ0RhdGFDaGFubmVsU3RhdGU6Ok9w
ZW4pCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCkBA
IC0xMTcsMTkgKzExNiwxNSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2Vu
ZChjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8
dm9pZD4gUlRDRGF0YUNoYW5uZWw6OnNlbmQoQXJyYXlCdWZmZXImIGRhdGEpCitFeGNlcHRpb25P
cjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZFJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgdGhyb3cgaW4gQ29u
bmVjdGVkIHN0YXRlLgogICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gUlRDRGF0YUNoYW5uZWxTdGF0
ZTo6T3BlbikKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
CiAKLSAgICBzaXplX3QgZGF0YUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aCgpOwotICAgIGlmICgh
ZGF0YUxlbmd0aCkKKyAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGNvbnN0IGNoYXIqIGRhdGFQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEu
ZGF0YSgpKTsKLQotICAgIGlmICghbV9oYW5kbGVyLT5zZW5kUmF3RGF0YShkYXRhUG9pbnRlciwg
ZGF0YUxlbmd0aCkpIHsKKyAgICBpZiAoIW1faGFuZGxlci0+c2VuZFJhd0RhdGEoZGF0YSwgbGVu
Z3RoKSkgewogICAgICAgICAvLyBGSVhNRTogRGVjaWRlIHdoYXQgdGhlIHJpZ2h0IGV4Y2VwdGlv
biBoZXJlIGlzLgogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAg
ICB9CkBAIC0xMzcsMTAgKzEzMiwxNSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5l
bDo6c2VuZChBcnJheUJ1ZmZlciYgZGF0YSkKICAgICByZXR1cm4geyB9OwogfQogCisKK0V4Y2Vw
dGlvbk9yPHZvaWQ+IFJUQ0RhdGFDaGFubmVsOjpzZW5kKEFycmF5QnVmZmVyJiBkYXRhKQorewor
ICAgIHJldHVybiBzZW5kUmF3RGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRh
KCkpLCBkYXRhLmJ5dGVMZW5ndGgoKSk7Cit9CisKIEV4Y2VwdGlvbk9yPHZvaWQ+IFJUQ0RhdGFD
aGFubmVsOjpzZW5kKEFycmF5QnVmZmVyVmlldyYgZGF0YSkKIHsKLSAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG9ubHkgdGhyb3cgaW4gQ29ubmVjdGVkIHN0YXRlLgotICAgIHJldHVybiBzZW5kKCpk
YXRhLnVuc2hhcmVkQnVmZmVyKCkpOworICAgIHJldHVybiBzZW5kUmF3RGF0YShzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oZGF0YS5iYXNlQWRkcmVzcygpKSwgZGF0YS5ieXRlTGVuZ3RoKCkpOwog
fQogCiBFeGNlcHRpb25Pcjx2b2lkPiBSVENEYXRhQ2hhbm5lbDo6c2VuZChCbG9iJikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuaApp
bmRleCBhM2JiNWM2ZTAxZTJlOTJiMmYzYTc0NzhhOTBiYTRmZTQ5NWZiMGFiLi42MjBhZGI0MzQ4
YzY0NjJiZWJkN2I1ZWZlNWU2NDNhMGEzNmFlNmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5oCkBAIC04OCw2ICs4OCw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgcmVmKCk7IH0KICAg
ICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IGRlcmVmKCk7IH0KIAorICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNlbmRSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgp
OworCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSQogICAgIHZvaWQgc3RvcCgpIGZpbmFsOwog
ICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiUlRDRGF0YUNoYW5uZWwiOyB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWI2OTc5N2E0ZDMwYWUzOTIxNmM2NTkyZDUw
MjJjODk0ZGJiOWNiOS4uODcyNWY2Y2I0N2ExZjA4NDliZTcyMjJhMThlYTA1YWNlNmU1MDkwYiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA5LTE0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5u
QGFwcGxlLmNvbT4KKworICAgICAgICBSVENEYXRhQ2hhbm5lbCBjb25uZWN0aXZpdHkgaXNzdWVz
IGluIFNhZmFyaSAxMQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTczMDUyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjcxMjE0Mz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYnJ0Yy9kYXRhY2hh
bm5lbC9iaW5hcnktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYnJ0Yy9kYXRhY2hhbm5lbC9i
aW5hcnkuaHRtbDoKKwogMjAxNy0wOS0xNCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTWFyayBzdmcvYXMtaW1hZ2Uvc3ZnLWltYWdlLXdpdGgtZGF0YS11
cmktdXNlLWRhdGEtdXJpLnN2ZyBhcyBmbGFreS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YnJ0Yy9kYXRhY2hhbm5lbC9iaW5hcnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2VicnRj
L2RhdGFjaGFubmVsL2JpbmFyeS1leHBlY3RlZC50eHQKaW5kZXggMmVkMjhlZDZiN2Y0ZTM3ZGI2
Njk1ZGRjMmI5MzViOTgxMTllZDU5ZC4uZDY5MDM1ODA0ODRkZDgwZTA0NTk4ZTFlYmRiYTkyMTVi
NThkMGZhYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2VicnRjL2RhdGFjaGFubmVsL2JpbmFy
eS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2VicnRjL2RhdGFjaGFubmVsL2JpbmFy
eS1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwxMSBAQAogCiBQQVNTIEJhc2ljIGJpbmFyeSBkYXRh
IGNoYW5uZWwgZXhjaGFuZ2UgZnJvbSBvZmZlcmVyIHRvIHJlY2VpdmVyIAorUEFTUyB0ZXN0IGFy
cmF5IGJ1ZmZlciAxIAorUEFTUyB0ZXN0IGFycmF5IGJ1ZmZlciAyIAorUEFTUyB0ZXN0IGFycmF5
IGJ1ZmZlciAzIAorUEFTUyB0ZXN0IGFycmF5IGJ1ZmZlciA0IAorUEFTUyB0ZXN0IGFycmF5IGJ1
ZmZlciB2aWV3IDEgCitQQVNTIHRlc3QgYXJyYXkgYnVmZmVyIHZpZXcgMiAKK1BBU1MgdGVzdCBh
cnJheSBidWZmZXIgdmlldyAzIAorUEFTUyB0ZXN0IGFycmF5IGJ1ZmZlciB2aWV3IDQgCiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnJ0Yy9kYXRhY2hhbm5lbC9iaW5hcnkuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYnJ0Yy9kYXRhY2hhbm5lbC9iaW5hcnkuaHRtbAppbmRleCBhYjkyZWNhMTgw
NmI0Zjk5NTk1NzhmMjQxZjdmMTQwNTM0OWVhZGE3Li44Mjc0NTkzODQyMGRlNDc3MTk3MDBmZjU1
MjhhNzFkNWRmY2FkYjMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJydGMvZGF0YWNoYW5u
ZWwvYmluYXJ5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2VicnRjL2RhdGFjaGFubmVsL2JpbmFy
eS5odG1sCkBAIC0yNiw2ICsyNiwxMSBAQCBmdW5jdGlvbiBjcmVhdGVBcnJheUJ1ZmZlcihsZW5n
dGgpCiAgICAgcmV0dXJuIGFycmF5OwogfQogCitmdW5jdGlvbiBjcmVhdGVBcnJheUJ1ZmZlclZp
ZXcobGVuZ3RoKQoreworICAgIHJldHVybiBjcmVhdGVBcnJheUJ1ZmZlcigyICogbGVuZ3RoKS5z
dWJhcnJheShsZW5ndGgsIDIgKiBsZW5ndGgpOworfQorCiBmdW5jdGlvbiBjaGVja0FycmF5QnVm
ZmVyKGFycmF5LCBsZW5ndGgpCiB7CiAgICAgaWYgKGFycmF5LmJ5dGVMZW5ndGggIT09IGxlbmd0
aCkKQEAgLTM5LDE2ICs0NCw1MSBAQCBmdW5jdGlvbiBjaGVja0FycmF5QnVmZmVyKGFycmF5LCBs
ZW5ndGgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Z1bmN0aW9uIGNoZWNrQXJyYXlCdWZmZXJW
aWV3KGFycmF5LCBsZW5ndGgpCit7CisgICAgaWYgKGFycmF5LmJ5dGVMZW5ndGggIT09IGxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFyIGEgPSBuZXcgVWludDhBcnJheShh
cnJheSk7CisgICAgZm9yICh2YXIgY3B0ciA9IDA7IGNwdHIgPCBsZW5ndGg7IGNwdHIrKykgewor
ICAgICAgICBpZiAoYVtjcHRyXSAhPT0gY3B0ciArIGxlbmd0aCArIDEpCisgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gdGVz
dEFycmF5QnVmZmVyKGFycmF5LCBsZW5ndGgpCit7CisgICAgdGVzdCgoKSA9PiB7CisgICAgICAg
IGFzc2VydF90cnVlKGNoZWNrQXJyYXlCdWZmZXIoYXJyYXksIGxlbmd0aCkpOworICAgIH0sICJ0
ZXN0IGFycmF5IGJ1ZmZlciAiICsgbGVuZ3RoKTsKK30KKworZnVuY3Rpb24gdGVzdEFycmF5QnVm
ZmVyVmlldyhhcnJheSwgbGVuZ3RoKQoreworICAgIHRlc3QoKCkgPT4geworICAgICAgICBhc3Nl
cnRfdHJ1ZShjaGVja0FycmF5QnVmZmVyVmlldyhhcnJheSwgbGVuZ3RoKSk7CisgICAgfSwgInRl
c3QgYXJyYXkgYnVmZmVyIHZpZXcgIiArIGxlbmd0aCk7Cit9CisKIGZ1bmN0aW9uIHJlY2VpdmVN
ZXNzYWdlcyhldmVudCkgewogICAgIHRyeSB7CiAgICAgICAgIGlmICgrK2NvdW50ZXIgPT09IDEp
Ci0gICAgICAgICAgICBhc3NlcnRfdHJ1ZShjaGVja0FycmF5QnVmZmVyKGV2ZW50LmRhdGEsIDEp
KTsKKyAgICAgICAgICAgIHRlc3RBcnJheUJ1ZmZlcihldmVudC5kYXRhLCAxKTsKICAgICAgICAg
ZWxzZSBpZiAoY291bnRlciA9PT0gMikKLSAgICAgICAgICAgIGFzc2VydF90cnVlKGNoZWNrQXJy
YXlCdWZmZXIoZXZlbnQuZGF0YSwgMikpOworICAgICAgICAgICAgdGVzdEFycmF5QnVmZmVyKGV2
ZW50LmRhdGEsIDIpOwogICAgICAgICBlbHNlIGlmIChjb3VudGVyID09PSAzKQotICAgICAgICAg
ICAgYXNzZXJ0X3RydWUoY2hlY2tBcnJheUJ1ZmZlcihldmVudC5kYXRhLCAzKSk7Ci0gICAgICAg
IGVsc2UgaWYgKGNvdW50ZXIgPT09IDQpIHsKLSAgICAgICAgICAgIGFzc2VydF90cnVlKGNoZWNr
QXJyYXlCdWZmZXIoZXZlbnQuZGF0YSwgNCkpOworICAgICAgICAgICAgdGVzdEFycmF5QnVmZmVy
KGV2ZW50LmRhdGEsIDMpOworICAgICAgICBlbHNlIGlmIChjb3VudGVyID09PSA0KQorICAgICAg
ICAgICAgdGVzdEFycmF5QnVmZmVyKGV2ZW50LmRhdGEsIDQpOworICAgICAgICBlbHNlIGlmIChj
b3VudGVyID09PSA1KQorICAgICAgICAgICAgdGVzdEFycmF5QnVmZmVyVmlldyhldmVudC5kYXRh
LCAxKTsKKyAgICAgICAgZWxzZSBpZiAoY291bnRlciA9PT0gNikKKyAgICAgICAgICAgIHRlc3RB
cnJheUJ1ZmZlclZpZXcoZXZlbnQuZGF0YSwgMik7CisgICAgICAgIGVsc2UgaWYgKGNvdW50ZXIg
PT09IDcpCisgICAgICAgICAgICB0ZXN0QXJyYXlCdWZmZXJWaWV3KGV2ZW50LmRhdGEsIDMpOwor
ICAgICAgICBlbHNlIGlmIChjb3VudGVyID09PSA4KSB7CisgICAgICAgICAgICB0ZXN0QXJyYXlC
dWZmZXJWaWV3KGV2ZW50LmRhdGEsIDQpOwogICAgICAgICAgICAgY2xvc2VEYXRhQ2hhbm5lbHMo
KTsKICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKICAgICAgICAgfSBlbHNlCkBAIC02NCw2ICsx
MDQsMTAgQEAgZnVuY3Rpb24gc2VuZE1lc3NhZ2VzKGNoYW5uZWwpCiAgICAgY2hhbm5lbC5zZW5k
KGNyZWF0ZUFycmF5QnVmZmVyKDIpKTsKICAgICBjaGFubmVsLnNlbmQoY3JlYXRlQXJyYXlCdWZm
ZXIoMykpOwogICAgIGNoYW5uZWwuc2VuZChjcmVhdGVBcnJheUJ1ZmZlcig0KSk7CisgICAgY2hh
bm5lbC5zZW5kKGNyZWF0ZUFycmF5QnVmZmVyVmlldygxKSk7CisgICAgY2hhbm5lbC5zZW5kKGNy
ZWF0ZUFycmF5QnVmZmVyVmlldygyKSk7CisgICAgY2hhbm5lbC5zZW5kKGNyZWF0ZUFycmF5QnVm
ZmVyVmlldygzKSk7CisgICAgY2hhbm5lbC5zZW5kKGNyZWF0ZUFycmF5QnVmZmVyVmlldyg0KSk7
CiB9CiAKIHZhciBmaW5pc2hUZXN0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>