<?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>160362</bug_id>
          
          <creation_ts>2016-07-29 16:02:50 -0700</creation_ts>
          <short_desc>NULL Reference Error in ElementRuleCollector</short_desc>
          <delta_ts>2016-08-05 22:38:56 -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>CSS</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1215731</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-07-29 16:02:50 -0700</bug_when>
    <thetext>The ElementRuleCollector class defines m_authorStyle as a reference.  However, in some cases, this reference is instantiated by a pointer from DocumentRuleSets, and this pointer is occasionally NULL.  This is clearly undefined behavior, although surprisingly, many of the tests which exhibit this (canvas/philip/tests/2d.strokeRect.path.html, for example) still pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215734</commentid>
    <comment_count>1</comment_count>
      <attachid>284910</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-07-29 16:10:08 -0700</bug_when>
    <thetext>Created attachment 284910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215737</commentid>
    <comment_count>2</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-07-29 16:13:39 -0700</bug_when>
    <thetext>Note that it is possible the issue is much deeper than just this fix.

This fix only applies if it is legal for m_authorStyle to be undefined.  It seems like this should be the case, particularly since DocumentRuleSets seems to think such a case is legal, and all but one use of m_authorStyle was using the address of the reference anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216001</commentid>
    <comment_count>3</comment_count>
      <attachid>284910</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-07-31 21:04:44 -0700</bug_when>
    <thetext>Comment on attachment 284910
Patch

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

I’m not sure this change is the best fix.

Before landing this we need to understand why authorStyle is null. It doesn’t make sense because StyleResolver is the only place I see us creating a DocumentRuleSets object, and when creating it we call resetAuthorStyle. If authorStyle is null I suppose that means this is happening inside the StyleResolver constructor before resetAuthorStyle is called. If so, this can be fixed by reordering the code so it is called earlier.

In fact, I think DocumentRuleSets could probably call resetAuthorStyle inside its own constructor; there is no reason it has to wait until later. Then we could remove the explicit call to it inside the StyleResolver. And we could even change the authorStyle() function to return a reference rather than a pointer.

&gt; Source/WebCore/css/ElementRuleCollector.cpp:299
&gt; +        collectMatchingRulesForList(&amp;(m_authorStyle-&gt;slottedPseudoElementRules()), matchRequest, ruleRange);

No need to add the parentheses to this expression. Please don’t add them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216038</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-08-01 00:25:59 -0700</bug_when>
    <thetext>Another possibility is that DocumentRuleSets is dead (==StyleResolver is dead). A trivially crashing logic error here would be surprising.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216040</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-08-01 00:30:57 -0700</bug_when>
    <thetext>&gt; undefined behavior, although surprisingly, many of the tests which exhibit
&gt; this (canvas/philip/tests/2d.strokeRect.path.html, for example) still pass.

Null pointer dereference always crashes. How do the tests &quot;exhibit&quot; this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216109</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-01 08:17:00 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; undefined behavior, although surprisingly, many of the tests which exhibit
&gt; &gt; this (canvas/philip/tests/2d.strokeRect.path.html, for example) still pass.
&gt; 
&gt; Null pointer dereference always crashes. How do the tests &quot;exhibit&quot; this?

This bug was found through open source clang&apos;s undefined behavior sanitizer.  As far as I can tell, a reference is being bound to a dereferenced NULL pointer but then this reference is never used.  If the reference were used, we would see a crash.

Tests &quot;exhibit&quot; this (not even sure if that&apos;s the right way to describe this) when the undefined behavior sanitizer flags the reference being bound to a dereferenced NULL pointer during runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216123</commentid>
    <comment_count>7</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-01 09:30:34 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 284910 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=284910&amp;action=review
&gt; 
&gt; I’m not sure this change is the best fix.
&gt; 
&gt; Before landing this we need to understand why authorStyle is null. It
&gt; doesn’t make sense because StyleResolver is the only place I see us creating
&gt; a DocumentRuleSets object, and when creating it we call resetAuthorStyle. If
&gt; authorStyle is null I suppose that means this is happening inside the
&gt; StyleResolver constructor before resetAuthorStyle is called. If so, this can
&gt; be fixed by reordering the code so it is called earlier.
&gt; 
&gt; In fact, I think DocumentRuleSets could probably call resetAuthorStyle
&gt; inside its own constructor; there is no reason it has to wait until later.
&gt; Then we could remove the explicit call to it inside the StyleResolver. And
&gt; we could even change the authorStyle() function to return a reference rather
&gt; than a pointer.
&gt; 
&gt; &gt; Source/WebCore/css/ElementRuleCollector.cpp:299
&gt; &gt; +        collectMatchingRulesForList(&amp;(m_authorStyle-&gt;slottedPseudoElementRules()), matchRequest, ruleRange);
&gt; 
&gt; No need to add the parentheses to this expression. Please don’t add them.

I think your points here center around the question I had when I first encountered this bug: should the authorStyle ever be undefined?  I&apos;m not familiar enough with the desired behavior here to answer this question.

If the author style should always be defined, then should it not be an object in the DocumentRulesSets instead of a pointer?  And, if the author style should always be defined, what about the user style, which has a very similar pattern to the author style in the DocumentRulesSets (i.e.: both are pointers, instantiated through member functions but left undefined after the constructor).  I modeled the handling of the author style in ElementRuleCollector after the way the class handles the user style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216124</commentid>
    <comment_count>8</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-01 09:37:33 -0700</bug_when>
    <thetext>Some more details about the circumstances when the author style is NULL:

I have been debugging this with canvas/philip.2d.strokeRect.path.html.  It is not the only test where this happens, but it does seems to be fairly representative of the very long list of tests I have seen this in.

The author style only appears to be NULL when it is the StyleResolver which calls StyleResolver::styleForElement in it&apos;s constructor.  (As Darin pointed out)

In the canvas/philip.2d.strokeRect.path.html test, the author style is defined, but not until the TreeResolver calls StyeResolver::styleForElement.

Ensuring that the author style is instantiated seems like a good approach, especially since it appears that there is a well-defined default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216129</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-01 09:51:43 -0700</bug_when>
    <thetext>In attempting to change the author style from a pointer to a reference to an object, some of the logic in ElementRuleCollector::matchSlottedPseudoElementRules(), in ElementRuleCollector.cpp line 256, seems to indicate that the author style can be NULL, and that this is a meaningful state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216571</commentid>
    <comment_count>10</comment_count>
      <attachid>285128</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-02 13:04:51 -0700</bug_when>
    <thetext>Created attachment 285128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216579</commentid>
    <comment_count>11</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-02 13:26:46 -0700</bug_when>
    <thetext>This latest patch assumes the opposite of the first, that there should always be a defined author style.

As noted in the change log, however, there is a bit of a catch with this approach: some tests need the author style to be undefined to trigger a redefinition, such as css3/masking/mask-repeat-space-border.html.  So, I added a flag so that functions can access if the current author style was created in the constructor.  This approach results in the tests which need the author style to be undefined working.

Additionally, these changes cause css3/masking/mask-repeat-space-border.html and css3/flexbox/multiline-reverse-wrap-baseline.html to pass, which they did not before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217981</commentid>
    <comment_count>12</comment_count>
      <attachid>285128</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-05 11:14:08 -0700</bug_when>
    <thetext>Comment on attachment 285128
Patch

I know you are just following my direction here, but it seems strange now to allocate an authorStyle in this peculiar case where there is &quot;no author style defined&quot;. I think this change is OK as-is, but someone should refine this to get rid of this peculiar state. Maybe Antti has an idea how to clean this up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217991</commentid>
    <comment_count>13</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-05 11:37:30 -0700</bug_when>
    <thetext>I think what is happening here (although I am by no means an expert in CSS) is that if the author style is undefined for a particular element, it adopts the author style of the entire page.  However, if it tries to access the author style before adapting the author style of the page (which really shouldn&apos;t happen) then it will be accessing a NULL pointer.  As far as I can tell, what is happening in this case is the ElementRuleCollector is being instantiated before this adoption happens and then either being re-instantiated after or never using the bound NULL reference (although the behavior of the the two newly passing tests may indicate that in some circumstances ElementRuleCollector was using the NULL reference)

What this comes down to is that the old code made two competing assumptions: that the author style would never be NULL when accessed and that the author style could be NULL and would need to instantiated with the author style of the page when it was.  I&apos;m not sure which assumption is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218007</commentid>
    <comment_count>14</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-05 12:32:23 -0700</bug_when>
    <thetext>Actually, taking a closer look at our build bots, those two tests seem to have been passing for some time, and are unrelated to this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218189</commentid>
    <comment_count>15</comment_count>
      <attachid>285128</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-05 22:17:15 -0700</bug_when>
    <thetext>Comment on attachment 285128
Patch

Where is the code path where we</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218194</commentid>
    <comment_count>16</comment_count>
      <attachid>285128</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-05 22:38:51 -0700</bug_when>
    <thetext>Comment on attachment 285128
Patch

Clearing flags on attachment: 285128

Committed r204220: &lt;http://trac.webkit.org/changeset/204220&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218195</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-05 22:38:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284910</attachid>
            <date>2016-07-29 16:10:08 -0700</date>
            <delta_ts>2016-08-02 13:04:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160362-20160729160854.patch</filename>
            <type>text/plain</type>
            <size>3858</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA3LTI5ICBKb25hdGhh
biBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAgICAgICBOVUxMIFJlZmVyZW5jZSBF
cnJvciBpbiBFbGVtZW50UnVsZUNvbGxlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMzYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW4gc29tZSBjYXNlcywgbV9hdXRob3JTdHlsZSB3YXMgaW5p
dGlhbGl6ZWQgd2l0aCBhIE5VTEwgcG9pbnRlciwgd2hpY2ggaXMKKyAgICAgICAgdW5kZWZpbmVk
IGJlaGF2aW9yLgorCisgICAgICAgIFRlc3Q6IE4vQS4gIFNvbWUgZXhpc3RpbmcgdGVzdHMgZXho
aWJpdCB0aGlzIHByb2JsZW0sIHN1Y2ggYXMgY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5zdHJva2VS
ZWN0LnBhdGguaHRtbC4KKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oOiBD
aGFuZ2VkIG1fYXV0aG9yIHJlZmVyZW5jZSB0byBwb2ludGVyLgorICAgICAgICAqIGNzcy9FbGVt
ZW50UnVsZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxl
Y3Rvcjo6RWxlbWVudFJ1bGVDb2xsZWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdFNsb3R0ZWRQc2V1ZG9FbGVtZW50
UnVsZXNGb3JTbG90KTogRGl0dG8uCisKIDIwMTYtMDctMjkgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBCYWNrc3BhY2Uga2V5IHJlbW92ZXMgb25s
eSB0aGUgcmFpbmJvdyBmcm9tIHRoZSByYWluYm93IGZsYWcKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gMjAzOTA1KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAKIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpFbGVtZW50
UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBEb2N1bWVudFJ1bGVT
ZXRzJiBydWxlU2V0cywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogICAg
IDogbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgLCBtX2F1dGhvclN0eWxlKCpydWxlU2V0cy5hdXRo
b3JTdHlsZSgpKQorICAgICwgbV9hdXRob3JTdHlsZShydWxlU2V0cy5hdXRob3JTdHlsZSgpKQog
ICAgICwgbV91c2VyU3R5bGUocnVsZVNldHMudXNlclN0eWxlKCkpCiAgICAgLCBtX3NlbGVjdG9y
RmlsdGVyKHNlbGVjdG9yRmlsdGVyKQogewpAQCAtOTEsNyArOTEsNyBAQCBFbGVtZW50UnVsZUNv
bGxlY3Rvcjo6RWxlbWVudFJ1bGVDb2xsZWN0CiAKIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSdWxlU2V0JiBh
dXRob3JTdHlsZSwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogICAgIDog
bV9lbGVtZW50KGVsZW1lbnQpCi0gICAgLCBtX2F1dGhvclN0eWxlKGF1dGhvclN0eWxlKQorICAg
ICwgbV9hdXRob3JTdHlsZSgmYXV0aG9yU3R5bGUpCiAgICAgLCBtX3NlbGVjdG9yRmlsdGVyKHNl
bGVjdG9yRmlsdGVyKQogewogICAgIEFTU0VSVCghbV9zZWxlY3RvckZpbHRlciB8fCBtX3NlbGVj
dG9yRmlsdGVyLT5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChlbGVtZW50LnBhcmVudE5vZGUoKSkp
OwpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoQXV0
aG9yUnUKICAgICBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UgcnVsZVJhbmdlID0gbV9yZXN1bHQu
cmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwogCiAgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBy
dWxlcy4KLSAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KCZtX2F1dGhvclN0eWxlLCBpbmNs
dWRlRW1wdHlSdWxlcyk7CisgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX2F1dGhvclN0
eWxlLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hS
ZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1h
dGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKIApAQCAtMjkzLDkgKzI5MywxMCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8UnVsZVNldDo6UnVsZURhdGFWZWN0b3I+CiAgICAgbV9tb2RlID0gU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXM7CiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9y
IHJ1bGVzLgotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QoJm1fYXV0aG9yU3R5bGUsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fYXV0aG9y
U3R5bGUsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2Ug
cnVsZVJhbmdlID0gbV9yZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdCgmbV9hdXRob3JTdHlsZS5zbG90dGVkUHNldWRvRWxlbWVu
dFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAobV9hdXRob3JTdHls
ZSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KCYobV9hdXRob3JTdHlsZS0+
c2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcygpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwog
CiAgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCShyZXZpc2lv
biAyMDM5MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkTWF0
Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEmLCB1bnNpZ25lZCBzcGVjaWZpY2l0eSwgdW5zaWduZWQg
dHJlZUNvbnRleHRPcmRpbmFsLCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKIAogICAgIGNv
bnN0IEVsZW1lbnQmIG1fZWxlbWVudDsKLSAgICBjb25zdCBSdWxlU2V0JiBtX2F1dGhvclN0eWxl
OworICAgIGNvbnN0IFJ1bGVTZXQqIG1fYXV0aG9yU3R5bGUgeyBudWxscHRyIH07CiAgICAgY29u
c3QgUnVsZVNldCogbV91c2VyU3R5bGUgeyBudWxscHRyIH07CiAgICAgY29uc3QgU2VsZWN0b3JG
aWx0ZXIqIG1fc2VsZWN0b3JGaWx0ZXIgeyBudWxscHRyIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285128</attachid>
            <date>2016-08-02 13:04:51 -0700</date>
            <delta_ts>2016-08-05 22:38:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160362-20160802130329.patch</filename>
            <type>text/plain</type>
            <size>14398</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDAzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA4LTAyICBKb25hdGhh
biBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKworICAgICAgICBOVUxMIFJlZmVyZW5jZSBF
cnJvciBpbiBFbGVtZW50UnVsZUNvbGxlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMzYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBleGlzdGluZyBDU1MgdGVzdHMgY292
ZXIgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgVW5kZWZpbmVkIGJlaGF2aW9yIHNhbml0aXplciBm
b3VuZCBhIHJlZmVyZW5jZSBib3VuZCB0byBhIE5VTEwgcG9pbnRlci4KKyAgICAgICAgVGhlIHJv
b3QgY2F1c2Ugb2YgdGhpcyBpc3N1ZSB3YXMgYSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHdoZXRoZXIg
YW4gYXV0aG9yIHN0eWxlIG5lZWRlZCB0byBiZSBkZWZpbmVkLiAgSW4gc29tZSBsb2dpYywgYW4g
dW5kZWZpbmVkIGF1dGhvciBzdHlsZSB3YXMgY29uc2lkZXJlZCBhY2NlcHRhYmxlLCBidXQgaW4g
b3RoZXIgbG9naWMsIGF1dGhvciBzdHlsZSB3YXMgYWx3YXlzIGFzc3VtZWQgdG8gYmUgZGVmaW5l
ZC4gIFRvIGZpeCB0aGlzLCBhIHZhcmlhYmxlIHdhcyBhZGRlZCBzbyB0aGF0IHdoaWxlIGF1dGhv
ciBzdHlsZSBpcyBhbHdheXMgZGVmaW5lZCwgdGhlcmUgaXMgYSBmbGFnIGluZGljYXRpbmcgaWYg
dGhpcyBkZWZpbml0aW9uIG9jY3VycmVkIGluIHRoZSBjb25zdHJ1Y3RvciBmb3IgdXNlIGJ5IGZ1
bmN0aW9ucyB3aGljaCBhbGxvdyBhbiB1bmRlZmluZWQgYXV0aG9yIHN0eWxlLgorCisgICAgICAg
ICogY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRS
dWxlU2V0czo6RG9jdW1lbnRSdWxlU2V0cyk6IERlZmluZSBhdXRob3Igc3R5bGUgYnkgZGVmYXVs
dC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UnVsZVNldHM6OnJlc2V0QXV0aG9yU3R5bGUp
OiBTd2l0Y2ggYXV0aG9yIHN0eWxlIGZsYWcuCisgICAgICAgICogY3NzL0RvY3VtZW50UnVsZVNl
dHMuaDogQWRkZWQgYXV0aG9yIHN0eWxlIGZsYWcsIGNoYW5nZWQgYXV0aG9yU3R5bGUgYWNjZXNz
b3IgdG8gcmVmZXJlbmNlIGZyb20gcG9pbnRlci4KKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OkVs
ZW1lbnRSdWxlQ29sbGVjdG9yKTogT3JpZ2luYWwgbG9jYXRpb24gb2YgdW5kZWZpbmVkIGJlaGF2
aW9yLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoSG9zdFBz
ZXVkb0NsYXNzUnVsZXMpOiBDaGFuZ2VkIHBvaW50ZXIgdG8gcmVmZXJlbmNlLgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoU2xvdHRlZFBzZXVkb0VsZW1lbnRS
dWxlcyk6IENoYW5nZWQgcG9pbnRlciB0byByZWZlcmVuY2UuCisgICAgICAgICogY3NzL1BhZ2VS
dWxlQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VSdWxlQ29sbGVjdG9yOjpt
YXRjaEFsbFBhZ2VSdWxlcyk6IENoZWNrIG5ldyBmbGFnLCBjaGFuZ2VkIHBvaW50ZXIgdG8gcmVm
ZXJlbmNlLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOiBDaGFuZ2VkIHBvaW50
ZXIgdG8gcmVmZXJlbmNlLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6IERpdG8uCisgICAg
ICAgICogc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDogRGl0by4KKyAgICAg
ICAgKiBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHA6IERpdG8uCisgICAgICAgICog
c3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOiBEaXRvLgorICAgICAgICAqIHN0eWxlL1N0
eWxlU2hhcmluZ1Jlc29sdmVyLmNwcDogRGl0by4KKwogMjAxNi0wOC0wMiAgRnJlZGVyaWMgV2Fu
ZyAgPGZyZWQud2FuZ0BmcmVlLmZyPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZXJyb3Ig
Zml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAkocmV2aXNp
b24gMjAzOTczKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRG9j
dW1lbnRSdWxlU2V0czo6RG9jdW1lbnRSdWxlU2V0cygpCiB7CisgICAgbV9hdXRob3JTdHlsZSA9
IHN0ZDo6bWFrZV91bmlxdWU8UnVsZVNldD4oKTsKKyAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxl
QXV0b1Nocmlua1RvRml0KCk7CiB9CiAKIERvY3VtZW50UnVsZVNldHM6On5Eb2N1bWVudFJ1bGVT
ZXRzKCkKQEAgLTc4LDYgKzgwLDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSdWxlU2V0PiBt
YWtlUnVsZQogCiB2b2lkIERvY3VtZW50UnVsZVNldHM6OnJlc2V0QXV0aG9yU3R5bGUoKQogewor
ICAgIG1faXNBdXRob3JTdHlsZURlZmluZWQgPSB0cnVlOwogICAgIG1fYXV0aG9yU3R5bGUgPSBz
dGQ6Om1ha2VfdW5pcXVlPFJ1bGVTZXQ+KCk7CiAgICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1
dG9TaHJpbmtUb0ZpdCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVs
ZVNldHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0
cy5oCShyZXZpc2lvbiAyMDM5NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxl
U2V0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw5IEBAIGNsYXNzIERvY3VtZW50UnVs
ZVNldHMgewogcHVibGljOgogICAgIERvY3VtZW50UnVsZVNldHMoKTsKICAgICB+RG9jdW1lbnRS
dWxlU2V0cygpOwotICAgIFJ1bGVTZXQqIGF1dGhvclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9h
dXRob3JTdHlsZS5nZXQoKTsgfQorICAgIAorICAgIGJvb2wgaXNBdXRob3JTdHlsZURlZmluZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzQXV0aG9yU3R5bGVEZWZpbmVkOyB9CisgICAgUnVsZVNldCYg
YXV0aG9yU3R5bGUoKSBjb25zdCB7IHJldHVybiAqbV9hdXRob3JTdHlsZS5nZXQoKTsgfQogICAg
IFJ1bGVTZXQqIHVzZXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlLmdldCgpOyB9
CiAgICAgY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKCkgY29uc3Q7CiAgICAgUnVsZVNl
dCogc2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2libGluZ1J1bGVTZXQuZ2V0KCk7IH0KQEAg
LTY5LDYgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpIGNvbnN0
OwogICAgIHZvaWQgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYsIFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXImKTsKIAorICAgIGJvb2wgbV9pc0F1dGhvclN0
eWxlRGVmaW5lZCB7IGZhbHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTZXQ+IG1fYXV0
aG9yU3R5bGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAJKHJldmlz
aW9uIDIwMzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiBFbGVtZW50UnVs
ZUNvbGxlY3Rvcjo6RWxlbWVudFJ1bGVDb2xsZWN0b3IoY29uc3QgRWxlbWVudCYgZWxlbWVudCwg
Y29uc3QgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBz
ZWxlY3RvckZpbHRlcikKICAgICA6IG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9hdXRob3JT
dHlsZSgqcnVsZVNldHMuYXV0aG9yU3R5bGUoKSkKKyAgICAsIG1fYXV0aG9yU3R5bGUocnVsZVNl
dHMuYXV0aG9yU3R5bGUoKSkKICAgICAsIG1fdXNlclN0eWxlKHJ1bGVTZXRzLnVzZXJTdHlsZSgp
KQogICAgICwgbV9zZWxlY3RvckZpbHRlcihzZWxlY3RvckZpbHRlcikKIHsKQEAgLTIzNCw3ICsy
MzQsNyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEhvc3RQc2V1CiAKICAgICBt
YXRjaFJlcXVlc3QudHJlZUNvbnRleHRPcmRpbmFsKys7CiAKLSAgICBhdXRvJiBzaGFkb3dBdXRo
b3JTdHlsZSA9ICptX2VsZW1lbnQuc2hhZG93Um9vdCgpLT5zdHlsZVJlc29sdmVyKCkucnVsZVNl
dHMoKS5hdXRob3JTdHlsZSgpOworICAgIGF1dG8mIHNoYWRvd0F1dGhvclN0eWxlID0gbV9lbGVt
ZW50LnNoYWRvd1Jvb3QoKS0+c3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCkuYXV0aG9yU3R5bGUo
KTsKICAgICBhdXRvJiBzaGFkb3dIb3N0UnVsZXMgPSBzaGFkb3dBdXRob3JTdHlsZS5ob3N0UHNl
dWRvQ2xhc3NSdWxlcygpOwogICAgIGlmIChzaGFkb3dIb3N0UnVsZXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNjUsMTIgKzI2NSwxMSBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVj
dG9yOjptYXRjaFNsb3R0ZWRQCiAKICAgICAgICAgLy8gSW4gbmVzdGVkIGNhc2UgdGhlIHNsb3Qg
bWF5IGl0c2VsZiBiZSBhc3NpZ25lZCB0byBhIHNsb3QuIENvbGxlY3QgOjpzbG90dGVkIHJ1bGVz
IGZyb20gYWxsIHRoZSBuZXN0ZWQgdHJlZXMuCiAgICAgICAgIG1heWJlU2xvdHRlZCA9IHNsb3Q7
Ci0gICAgICAgIGF1dG8qIHNoYWRvd0F1dGhvclN0eWxlID0gaG9zdFNoYWRvd1Jvb3QtPnN0eWxl
UmVzb2x2ZXIoKS5ydWxlU2V0cygpLmF1dGhvclN0eWxlKCk7Ci0gICAgICAgIGlmICghc2hhZG93
QXV0aG9yU3R5bGUpCisgICAgICAgIGlmICghaG9zdFNoYWRvd1Jvb3QtPnN0eWxlUmVzb2x2ZXIo
KS5ydWxlU2V0cygpLmlzQXV0aG9yU3R5bGVEZWZpbmVkKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgLy8gRmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSA6OnNsb3R0ZWQgcnVsZXMg
aW4gdGhlIHNoYWRvdyB0cmVlIG1hdGNoaW5nIHRoZSBjdXJyZW50IHNsb3QuCiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHJlYWxseSBwYXJ0IG9mIHRoZSBzbG90IHN0eWxlIGFuZCBjb3VsZCBi
ZSBjYWNoZWQgd2hlbiByZXNvbHZpbmcgaXQuCi0gICAgICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9y
IGNvbGxlY3Rvcigqc2xvdCwgKnNoYWRvd0F1dGhvclN0eWxlLCBudWxscHRyKTsKKyAgICAgICAg
RWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKCpzbG90LCBob3N0U2hhZG93Um9vdC0+c3R5
bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCkuYXV0aG9yU3R5bGUoKSwgbnVsbHB0cik7CiAgICAgICAg
IGF1dG8gc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcyA9IGNvbGxlY3Rvci5jb2xsZWN0U2xvdHRl
ZFBzZXVkb0VsZW1lbnRSdWxlc0ZvclNsb3QobWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVz
KTsKICAgICAgICAgaWYgKCFzbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzKQogICAgICAgICAgICAg
Y29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAJ
KHJldmlzaW9uIDIwMzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDggQEAgdm9pZCBQYWdlUnVsZUNvbGxl
Y3Rvcjo6bWF0Y2hBbGxQYWdlUnVsZQogICAgIG1hdGNoUGFnZVJ1bGVzKENTU0RlZmF1bHRTdHls
ZVNoZWV0czo6ZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAg
bWF0Y2hQYWdlUnVsZXMobV9ydWxlU2V0cy51c2VyU3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBw
YWdlKTsKICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9y
IEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCi0gICAgbWF0Y2hQYWdlUnVsZXMo
bV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOworICAgIGlm
IChtX3J1bGVTZXRzLmlzQXV0aG9yU3R5bGVEZWZpbmVkKCkpCisgICAgICAgIG1hdGNoUGFnZVJ1
bGVzKCZtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiB9
CiAKIHZvaWQgUGFnZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVz
LCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5h
bWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMDM5
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNjEsMTAgKzEwNjEsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5k
ZXJTdHlsZShSZQogCiBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU3R5bGUoY29uc3Qg
RWxlbWVudCogcmVnaW9uRWxlbWVudCkKIHsKLSAgICB1bnNpZ25lZCBydWxlc1NpemUgPSBtX3J1
bGVTZXRzLmF1dGhvclN0eWxlKCktPnJlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzKCkuc2l6ZSgp
OworICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5yZWdp
b25TZWxlY3RvcnNBbmRSdWxlU2V0cygpLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcnVsZXNTaXplOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKG1fcnVsZVNldHMuYXV0aG9y
U3R5bGUoKS0+cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMoKS5hdChpKS5ydWxlU2V0LmdldCgp
KTsKLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV9ydWxlU2V0cy5hdXRob3JTdHls
ZSgpLT5yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cygpLmF0KGkpLnNlbGVjdG9yLCByZWdpb25F
bGVtZW50KSkKKyAgICAgICAgQVNTRVJUKG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5yZWdpb25T
ZWxlY3RvcnNBbmRSdWxlU2V0cygpLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOworICAgICAgICBpZiAo
Y2hlY2tSZWdpb25TZWxlY3RvcihtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCkucmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMoKS5hdChpKS5zZWxlY3RvciwgcmVnaW9uRWxlbWVudCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRo
b3JTdHlsZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0F1dGhv
clN0eWxlU2hlZXRzLmNwcAkocmV2aXNpb24gMjAzOTczKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0F1dGhvclN0eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDkgKzM1Nyw5IEBA
IHZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnVwZGF0ZVN0eWxlUmVzb2wKICAgICB9CiAKICAgICB1
c2VyQWdlbnRTaGFkb3dUcmVlU3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLnJlc2V0QXV0aG9yU3R5
bGUoKTsKLSAgICBhdXRvJiBhdXRob3JSdWxlU2V0ID0gKnN0eWxlUmVzb2x2ZXIucnVsZVNldHMo
KS5hdXRob3JTdHlsZSgpOworICAgIGF1dG8mIGF1dGhvclJ1bGVTZXQgPSBzdHlsZVJlc29sdmVy
LnJ1bGVTZXRzKCkuYXV0aG9yU3R5bGUoKTsKICAgICBpZiAoYXV0aG9yUnVsZVNldC5oYXNTaGFk
b3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkKLSAgICAgICAgdXNlckFnZW50U2hhZG93VHJlZVN0eWxl
UmVzb2x2ZXIucnVsZVNldHMoKS5hdXRob3JTdHlsZSgpLT5jb3B5U2hhZG93UHNldWRvRWxlbWVu
dFJ1bGVzRnJvbShhdXRob3JSdWxlU2V0KTsKKyAgICAgICAgdXNlckFnZW50U2hhZG93VHJlZVN0
eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5hdXRob3JTdHlsZSgpLmNvcHlTaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXNGcm9tKGF1dGhvclJ1bGVTZXQpOwogfQogCiBjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiBBdXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNw
ZWN0b3IoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMDM5
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjEyLDkgKzIyMTIsOSBAQCBTdHlsZVJlc29sdmVyJiBEb2N1bWVudDo6dXNlckFnZW50U2hh
ZG93CiAgICAgICAgIG1fdXNlckFnZW50U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPFN0eWxlUmVzb2x2ZXI+KCp0aGlzKTsKIAogICAgICAgICAvLyBGSVhNRTogRmls
dGVyIG91dCBzaGFkb3cgcHNldWRvIGVsZW1lbnRzIHdlIGRvbid0IHdhbnQgdG8gZXhwb3NlIHRv
IGF1dGhvcnMuCi0gICAgICAgIGF1dG8mIGRvY3VtZW50QXV0aG9yU3R5bGUgPSAqZW5zdXJlU3R5
bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCkuYXV0aG9yU3R5bGUoKTsKKyAgICAgICAgYXV0byYgZG9j
dW1lbnRBdXRob3JTdHlsZSA9IGVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpLmF1dGhv
clN0eWxlKCk7CiAgICAgICAgIGlmIChkb2N1bWVudEF1dGhvclN0eWxlLmhhc1NoYWRvd1BzZXVk
b0VsZW1lbnRSdWxlcygpKQotICAgICAgICAgICAgbV91c2VyQWdlbnRTaGFkb3dUcmVlU3R5bGVS
ZXNvbHZlci0+cnVsZVNldHMoKS5hdXRob3JTdHlsZSgpLT5jb3B5U2hhZG93UHNldWRvRWxlbWVu
dFJ1bGVzRnJvbShkb2N1bWVudEF1dGhvclN0eWxlKTsKKyAgICAgICAgICAgIG1fdXNlckFnZW50
U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXItPnJ1bGVTZXRzKCkuYXV0aG9yU3R5bGUoKS5jb3B5U2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzRnJvbShkb2N1bWVudEF1dGhvclN0eWxlKTsKICAgICB9CiAK
ICAgICByZXR1cm4gKm1fdXNlckFnZW50U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlv
bi5jcHAJKHJldmlzaW9uIDIwMzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJpYnV0
ZUNoYW5nZUludmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
bmFtZXNwYWNlIFN0eWxlIHsKIHN0YXRpYyBib29sIG1heUJlQWZmZWN0ZWRCeUhvc3RTdHlsZShT
aGFkb3dSb290JiBzaGFkb3dSb290LCBib29sIGlzSFRNTCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlTmFtZSkKIHsKICAgICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNoYWRvd1Jvb3Qu
c3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgaWYgKHNoYWRvd1J1bGVTZXRzLmF1dGhv
clN0eWxlKCktPmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpKQorICAgIGlmIChzaGFk
b3dSdWxlU2V0cy5hdXRob3JTdHlsZSgpLmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBuYW1lU2V0ID0gaXNIVE1MID8g
c2hhZG93UnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVDYW5vbmljYWxMb2NhbE5hbWVzSW5S
dWxlcyA6IHNoYWRvd1J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0cmlidXRlTG9jYWxOYW1lc0luUnVs
ZXM7CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uOjpp
bnZhbGkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2VsZW1lbnQuc2hhZG93
Um9vdCgpICYmIHJ1bGVTZXRzLmF1dGhvclN0eWxlKCktPmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRS
dWxlcygpKSB7CisgICAgaWYgKG1fZWxlbWVudC5zaGFkb3dSb290KCkgJiYgcnVsZVNldHMuYXV0
aG9yU3R5bGUoKS5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkgewogICAgICAgICBtX2Vs
ZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlk
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdl
SW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjAzOTczKQorKysgU291cmNlL1dlYkNvcmUvc3R5
bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4
OCw3IEBAIHN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb21wdXRlQ2xhc3NDaGEKIHN0YXRpYyBi
b29sIG1heUJlQWZmZWN0ZWRCeUhvc3RTdHlsZShTaGFkb3dSb290JiBzaGFkb3dSb290LCBBdG9t
aWNTdHJpbmdJbXBsKiBjaGFuZ2VkQ2xhc3MpCiB7CiAgICAgYXV0byYgc2hhZG93UnVsZVNldHMg
PSBzaGFkb3dSb290LnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpOwotICAgIGlmIChzaGFkb3dS
dWxlU2V0cy5hdXRob3JTdHlsZSgpLT5ob3N0UHNldWRvQ2xhc3NSdWxlcygpLmlzRW1wdHkoKSkK
KyAgICBpZiAoc2hhZG93UnVsZVNldHMuYXV0aG9yU3R5bGUoKS5ob3N0UHNldWRvQ2xhc3NSdWxl
cygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBzaGFkb3dS
dWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRDbGFzcyk7
CiB9CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52
YWxpZGF0ZQogICAgIGlmIChjaGFuZ2VkQ2xhc3Nlc0FmZmVjdGluZ1N0eWxlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNoYWRvd1Jvb3QgJiYgcnVsZVNldHMuYXV0aG9y
U3R5bGUoKS0+aGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpIHsKKyAgICBpZiAoc2hhZG93
Um9vdCAmJiBydWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
cygpKSB7CiAgICAgICAgIG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNo
YW5nZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9JZENoYW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMDM5NzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9JZENoYW5nZUludmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFN0eWxlIHsKIHN0YXRpYyBib29sIG1heUJlQWZm
ZWN0ZWRCeUhvc3RTdHlsZShTaGFkb3dSb290JiBzaGFkb3dSb290LCBjb25zdCBBdG9taWNTdHJp
bmcmIGNoYW5nZWRJZCkKIHsKICAgICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNoYWRvd1Jvb3Qu
c3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgaWYgKHNoYWRvd1J1bGVTZXRzLmF1dGhv
clN0eWxlKCktPmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpKQorICAgIGlmIChzaGFk
b3dSdWxlU2V0cy5hdXRob3JTdHlsZSgpLmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gc2hhZG93UnVsZVNldHMuZmVh
dHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRJZC5pbXBsKCkpOwpAQCAtNTksNyAr
NTksNyBAQCB2b2lkIElkQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5CiAgICAgaWYg
KCFtYXlBZmZlY3RTdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZWxlbWVudC5z
aGFkb3dSb290KCkgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+aGFzU2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzKCkpIHsKKyAgICBpZiAobV9lbGVtZW50LnNoYWRvd1Jvb3QoKSAmJiBydWxlU2V0
cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKSB7CiAgICAgICAg
IG1fZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKEZ1bGxTdHlsZUNoYW5nZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJpbmdS
ZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTaGFy
aW5nUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMDM5NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTaGFyaW5nUmVzbwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChlbGVtZW50LnNoYWRvd1Jvb3QoKSAmJiAh
ZWxlbWVudC5zaGFkb3dSb290KCktPnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpLmF1dGhvclN0
eWxlKCktPmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpKQorICAgIGlmIChlbGVtZW50
LnNoYWRvd1Jvb3QoKSAmJiAhZWxlbWVudC5zaGFkb3dSb290KCktPnN0eWxlUmVzb2x2ZXIoKS5y
dWxlU2V0cygpLmF1dGhvclN0eWxlKCkuaG9zdFBzZXVkb0NsYXNzUnVsZXMoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQ29udGV4dCBjb250ZXh0IHsKQEAgLTI4
Niw3ICsyODYsNyBAQCBib29sIFNoYXJpbmdSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFCiAg
ICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQubWF0Y2hlc0RlZmF1bHRQc2V1ZG9DbGFzcygpICE9IGVs
ZW1lbnQubWF0Y2hlc0RlZmF1bHRQc2V1ZG9DbGFzcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoZWxlbWVudC5zaGFkb3dSb290KCkgJiYgIWVsZW1lbnQuc2hhZG93Um9vdCgp
LT5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKS5hdXRob3JTdHlsZSgpLT5ob3N0UHNldWRvQ2xh
c3NSdWxlcygpLmlzRW1wdHkoKSkKKyAgICBpZiAoZWxlbWVudC5zaGFkb3dSb290KCkgJiYgIWVs
ZW1lbnQuc2hhZG93Um9vdCgpLT5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKS5hdXRob3JTdHls
ZSgpLmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>