<?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>161045</bug_id>
          
          <creation_ts>2016-08-22 09:11:10 -0700</creation_ts>
          <short_desc>Improve parsing of the menclose notation attribute value</short_desc>
          <delta_ts>2016-08-28 02:37:26 -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>MathML</component>
          <version>WebKit 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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>160461</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>alex</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbarton</cc>
    
    <cc>rego</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1221873</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-22 09:11:10 -0700</bug_when>
    <thetext>Follow-up of bug 160461. We should also:

* parse the list of notations without allocating a vector.
* accept any whitespace as separators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222177</commentid>
    <comment_count>1</comment_count>
      <attachid>286694</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-23 03:02:02 -0700</bug_when>
    <thetext>Created attachment 286694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224003</commentid>
    <comment_count>2</comment_count>
      <attachid>286694</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-27 18:03:47 -0700</bug_when>
    <thetext>Comment on attachment 286694
Patch

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

This is a fantastic change. The only thing I regret is that we should really have a helper function for this since this kind of thing is a common idiom.

&gt; Source/WebCore/mathml/MathMLMencloseElement.cpp:109
&gt; +    String value = attributeWithoutSynchronization(notationAttr);

This causes unnecessary reference count churn. The return value is actually &quot;const AtomicString&amp;&quot;, a reference to the actual string stored in the object. A better type to use here is StringView. Putting the const AtomicString&amp; into one of those will give us a pointer into the characters stored in the attribute string without any copying or reference count churn at all.

&gt; Source/WebCore/mathml/MathMLMencloseElement.cpp:120
&gt; +        addNotationFlags(value.substring(start, end - start));

If value is a StringView, then value.substring also will be, saving us a lot here: 1) no copying of the characters of each of these substrings, 2) no allocating a memory block to hold the characters and the rest of the StringImpl, 3) no reference counting overhead to create and then decide to destroy the local string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224037</commentid>
    <comment_count>3</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-28 01:36:12 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; This is a fantastic change. The only thing I regret is that we should really
&gt; have a helper function for this since this kind of thing is a common idiom.
&gt; 

Yes. I see that we need some flexibility, for example some menclose notations like &quot;box&quot; maps to 4 bits (top, left, right, bottom) and other tabular attributes are really converted into a list (bug 160075). So I guess this would mean passing &quot;addNotationFlags&quot; (and maybe &quot;isHTMLSpace&quot;) as some functions.

&gt; &gt; Source/WebCore/mathml/MathMLMencloseElement.cpp:109
&gt; &gt; +    String value = attributeWithoutSynchronization(notationAttr);
&gt; 
&gt; This causes unnecessary reference count churn. The return value is actually
&gt; &quot;const AtomicString&amp;&quot;, a reference to the actual string stored in the
&gt; object. A better type to use here is StringView. Putting the const
&gt; AtomicString&amp; into one of those will give us a pointer into the characters
&gt; stored in the attribute string without any copying or reference count churn
&gt; at all.
&gt; 

OK, I think this is because I tried StringView value = ... instead of StringView value(...). The latter will work better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224039</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-28 01:43:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; This is a fantastic change. The only thing I regret is that we should really
&gt; &gt; have a helper function for this since this kind of thing is a common idiom.
&gt; 
&gt; Yes. I see that we need some flexibility, for example some menclose
&gt; notations like &quot;box&quot; maps to 4 bits (top, left, right, bottom) and other
&gt; tabular attributes are really converted into a list (bug 160075). So I guess
&gt; this would mean passing &quot;addNotationFlags&quot; (and maybe &quot;isHTMLSpace&quot;) as some
&gt; functions.

The way I’d want to do this is to build a class that lets you iterate through a StringView in this fashion with a for loop. The way C++ for loops are written, we can make functions that return objects that use iterators like the way we do it in StringView::codeUnits(), although the function does not need to be a member of the StringView class. If we package it that way then we can write the main body of this as a simple for loop; the iterators need know nothing about addNotationFlags.

Could do one with isHTMLSpace built in, or one that takes a function as an argument.

&gt; OK, I think this is because I tried StringView value = ... instead of
&gt; StringView value(...).

Strange. I would have expected the former to work too, since the relevant constructor of StringView is not marked &quot;explicit&quot;. I’d like to know what kind of error we get when we try to use that form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224040</commentid>
    <comment_count>5</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-28 01:48:10 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; This is a fantastic change. The only thing I regret is that we should really
&gt; &gt; &gt; have a helper function for this since this kind of thing is a common idiom.
&gt; &gt; 
&gt; &gt; Yes. I see that we need some flexibility, for example some menclose
&gt; &gt; notations like &quot;box&quot; maps to 4 bits (top, left, right, bottom) and other
&gt; &gt; tabular attributes are really converted into a list (bug 160075). So I guess
&gt; &gt; this would mean passing &quot;addNotationFlags&quot; (and maybe &quot;isHTMLSpace&quot;) as some
&gt; &gt; functions.
&gt; 
&gt; The way I’d want to do this is to build a class that lets you iterate
&gt; through a StringView in this fashion with a for loop. The way C++ for loops
&gt; are written, we can make functions that return objects that use iterators
&gt; like the way we do it in StringView::codeUnits(), although the function does
&gt; not need to be a member of the StringView class. If we package it that way
&gt; then we can write the main body of this as a simple for loop; the iterators
&gt; need know nothing about addNotationFlags.

Yes, that sounds better. I guess this should be a separate bug entry, though.

&gt; Could do one with isHTMLSpace built in, or one that takes a function as an
&gt; argument.

Using isHTMLSpace built in will be fine, I guess.

&gt; Strange. I would have expected the former to work too, since the relevant
&gt; constructor of StringView is not marked &quot;explicit&quot;. I’d like to know what
&gt; kind of error we get when we try to use that form.

../../Source/WebCore/mathml/MathMLMencloseElement.cpp:109:55: error: conversion from ‘const WTF::AtomicString’ to non-scalar type ‘WTF::StringView’ requested
     StringView value = attributeWithoutSynchronization(notationAttr);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224044</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-28 02:19:48 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I guess this should be a separate bug entry, though.

Yes, agreed.

&gt; ../../Source/WebCore/mathml/MathMLMencloseElement.cpp:109:55: error:
&gt; conversion from ‘const WTF::AtomicString’ to non-scalar type
&gt; ‘WTF::StringView’ requested
&gt;      StringView value = attributeWithoutSynchronization(notationAttr);

I see the problem. I had forgotten that AtomicString does not derive from String. The workaround for now would be to add a call to string():

    StringView value = attributeWithoutSynchronization(notationAttr).string();

A better fix for the long term will be to add another constructor to StringView:

    StringView(const AtomicString&amp;);

It can simply call the AtomicString one:

    inline StringView::StringView(const AtomicString&amp; string)
        : StringView(string.string())
    {
    }

Maybe later someone working on the string classes can streamline this even more in some way within the classes, but this change should be enough to make things great for people using the StringView class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224045</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-28 02:20:13 -0700</bug_when>
    <thetext>I said the workaround “for now”, but I meant the workaround if you don’t want to touch the classes inside WTF in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224049</commentid>
    <comment_count>8</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-28 02:34:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I said the workaround “for now”, but I meant the workaround if you don’t
&gt; want to touch the classes inside WTF in this patch.

Thanks, I&apos;ll land with the workaround for now and will open follow-up bugs for the two non-MathML stuff tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224050</commentid>
    <comment_count>9</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-28 02:37:26 -0700</bug_when>
    <thetext>Committed r205101: &lt;http://trac.webkit.org/changeset/205101&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286694</attachid>
            <date>2016-08-23 03:02:02 -0700</date>
            <delta_ts>2016-08-27 18:03:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161045-20160823120003.patch</filename>
            <type>text/plain</type>
            <size>10477</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0Nzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI3YjAxY2JjZmRlMzMw
NDNjYzhlMmNiYjYzZmFkYTgzZjA2MWU4My4uZTI4NjFlZWYxMTQ5YzRmMGMyNThmODgwNzBjMzZk
Yjc3OWUwMzA1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTIzICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXByb3ZlIHBhcnNpbmcg
b2YgdGhlIG1lbmNsb3NlIG5vdGF0aW9uIGF0dHJpYnV0ZSB2YWx1ZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMDQ1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgaW1wcm92ZSB0aGUgd2F5IHRoZSBs
aXN0IG9mIG1lbmNsb3NlIG5vdGF0aW9ucyBpcyBwYXJzZWQgdG8gYXZvaWQgYWxsb2NhdGluZyBh
IHZlY3RvciBhbmQKKyAgICAgICAgYWNjZXB0IGFueSB3aGl0ZXNwYWNlIGFzIHNlcGFyYXRvcnMu
CisKKyAgICAgICAgTmV3IHRlc3QgY2FzZXMgaW4gbWF0aG1sL3ByZXNlbnRhdGlvbi9tZW5jbG9z
ZS1ub3RhdGlvbi1lcXVpdmFsZW5jZS5odG1sCisKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MTWVu
Y2xvc2VFbGVtZW50LmNwcDogSW5jbHVkZSBIVE1MUGFyc2VySWRpb21zLmggdG8gdXNlIGlzSFRN
TFNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MTWVuY2xvc2VFbGVtZW50OjphZGROb3Rh
dGlvbkZsYWdzKTogSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIHJlbGV2YW50CisgICAg
ICAgIGFkZE5vdGF0aW9uIGNhbGxzIGZyb20gYSBub3RhdGlvbiBuYW1lLgorICAgICAgICAoV2Vi
Q29yZTo6TWF0aE1MTWVuY2xvc2VFbGVtZW50OjpwYXJzZU5vdGF0aW9uQXR0cmlidXRlKTogVXNl
IG9ubHkgc2ltcGxlIHN0cmluZyBvcGVyYXRpb25zCisgICAgICAgIHRvIGRldGVybWluZSB0aGUg
bGlzdCBvZiBub3RhdGlvbnMuCisgICAgICAgICogbWF0aG1sL01hdGhNTE1lbmNsb3NlRWxlbWVu
dC5oOiBEZWNsYXJlIHRoZSBuZXcgaGVscGVyIGZ1bmN0aW9uLgorCiAyMDE2LTA4LTIzICBGcmVk
ZXJpYyBXYW5nICA8ZnJlZC53YW5nQGZyZWUuZnI+CiAKICAgICAgICAgSW50cm9kdWNlIGEgTWF0
aE1MUm93RWxlbWVudCBjbGFzcyBmb3IgbXJvdy1saWtlIGVsZW1lbnRzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL21hdGhtbC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuY3BwCmluZGV4IDY3ODkxYzU4MDEx
Njg4MTA1ZDVkNDUyYzIzMmEzYTliZDFlNTRjZDAuLjkxZGNiYmJiMGNkOTJjYjI4OGJmNDY3MWYz
Y2EwM2RjMTQ1YWE5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxN
ZW5jbG9zZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxNZW5j
bG9zZUVsZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE1BVEhNTCkKICNp
bmNsdWRlICJNYXRoTUxNZW5jbG9zZUVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlck1hdGhN
TE1lbmNsb3NlLmgiCiAKQEAgLTU0LDYgKzU1LDQ5IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50
PiBNYXRoTUxNZW5jbG9zZUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHls
CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1hdGhNTE1lbmNsb3NlPigqdGhpcywg
V1RGTW92ZShzdHlsZSkpOwogfQogCit2b2lkIE1hdGhNTE1lbmNsb3NlRWxlbWVudDo6YWRkTm90
YXRpb25GbGFncyhTdHJpbmdWaWV3IG5vdGF0aW9uKQoreworICAgIEFTU0VSVChtX25vdGF0aW9u
RmxhZ3MpOworICAgIGlmIChub3RhdGlvbiA9PSAibG9uZ2RpdiIpIHsKKyAgICAgICAgYWRkTm90
YXRpb24oTG9uZ0Rpdik7CisgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAicm91bmRlZGJveCIp
IHsKKyAgICAgICAgYWRkTm90YXRpb24oUm91bmRlZEJveCk7CisgICAgfSBlbHNlIGlmIChub3Rh
dGlvbiA9PSAiY2lyY2xlIikgeworICAgICAgICBhZGROb3RhdGlvbihDaXJjbGUpOworICAgIH0g
ZWxzZSBpZiAobm90YXRpb24gPT0gImxlZnQiKSB7CisgICAgICAgIGFkZE5vdGF0aW9uKExlZnQp
OworICAgIH0gZWxzZSBpZiAobm90YXRpb24gPT0gInJpZ2h0IikgeworICAgICAgICBhZGROb3Rh
dGlvbihSaWdodCk7CisgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAidG9wIikgeworICAgICAg
ICBhZGROb3RhdGlvbihUb3ApOworICAgIH0gZWxzZSBpZiAobm90YXRpb24gPT0gImJvdHRvbSIp
IHsKKyAgICAgICAgYWRkTm90YXRpb24oQm90dG9tKTsKKyAgICB9IGVsc2UgaWYgKG5vdGF0aW9u
ID09ICJ1cGRpYWdvbmFsc3RyaWtlIikgeworICAgICAgICBhZGROb3RhdGlvbihVcERpYWdvbmFs
U3RyaWtlKTsKKyAgICB9IGVsc2UgaWYgKG5vdGF0aW9uID09ICJkb3duZGlhZ29uYWxzdHJpa2Ui
KSB7CisgICAgICAgIGFkZE5vdGF0aW9uKERvd25EaWFnb25hbFN0cmlrZSk7CisgICAgfSBlbHNl
IGlmIChub3RhdGlvbiA9PSAidmVydGljYWxzdHJpa2UiKSB7CisgICAgICAgIGFkZE5vdGF0aW9u
KFZlcnRpY2FsU3RyaWtlKTsKKyAgICB9IGVsc2UgaWYgKG5vdGF0aW9uID09ICJob3Jpem9udGFs
c3RyaWtlIikgeworICAgICAgICBhZGROb3RhdGlvbihIb3Jpem9udGFsU3RyaWtlKTsKKyAgICB9
IGVsc2UgaWYgKG5vdGF0aW9uID09ICJ1cGRpYWdvbmFsYXJyb3ciKSB7CisgICAgICAgIGFkZE5v
dGF0aW9uKFVwRGlhZ29uYWxBcnJvdyk7CisgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAicGhh
c29yYW5nbGUiKSB7CisgICAgICAgIGFkZE5vdGF0aW9uKFBoYXNvckFuZ2xlKTsKKyAgICB9IGVs
c2UgaWYgKG5vdGF0aW9uID09ICJib3giKSB7CisgICAgICAgIGFkZE5vdGF0aW9uKExlZnQpOwor
ICAgICAgICBhZGROb3RhdGlvbihSaWdodCk7CisgICAgICAgIGFkZE5vdGF0aW9uKFRvcCk7Cisg
ICAgICAgIGFkZE5vdGF0aW9uKEJvdHRvbSk7CisgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAi
YWN0dWFyaWFsIikgeworICAgICAgICBhZGROb3RhdGlvbihSaWdodCk7CisgICAgICAgIGFkZE5v
dGF0aW9uKFRvcCk7CisgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAibWFkcnV3YiIpIHsKKyAg
ICAgICAgYWRkTm90YXRpb24oUmlnaHQpOworICAgICAgICBhZGROb3RhdGlvbihCb3R0b20pOwor
ICAgIH0KK30KKwogdm9pZCBNYXRoTUxNZW5jbG9zZUVsZW1lbnQ6OnBhcnNlTm90YXRpb25BdHRy
aWJ1dGUoKQogewogICAgIGNsZWFyTm90YXRpb25zKCk7CkBAIC02MSw0OCArMTA1LDIwIEBAIHZv
aWQgTWF0aE1MTWVuY2xvc2VFbGVtZW50OjpwYXJzZU5vdGF0aW9uQXR0cmlidXRlKCkKICAgICAg
ICAgYWRkTm90YXRpb24oTG9uZ0Rpdik7IC8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGxvbmdkaXYu
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYXV0byYgdmFsdWUgPSBhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKG5vdGF0aW9uQXR0cik7Ci0gICAgVmVjdG9yPFN0cmluZz4gbm90
YXRpb25zTGlzdDsKLSAgICBTdHJpbmcodmFsdWUpLnNwbGl0KCcgJywgbm90YXRpb25zTGlzdCk7
Ci0gICAgZm9yIChhdXRvJiBub3RhdGlvbiA6IG5vdGF0aW9uc0xpc3QpIHsKLSAgICAgICAgaWYg
KG5vdGF0aW9uID09ICJsb25nZGl2IikgewotICAgICAgICAgICAgYWRkTm90YXRpb24oTG9uZ0Rp
dik7Ci0gICAgICAgIH0gZWxzZSBpZiAobm90YXRpb24gPT0gInJvdW5kZWRib3giKSB7Ci0gICAg
ICAgICAgICBhZGROb3RhdGlvbihSb3VuZGVkQm94KTsKLSAgICAgICAgfSBlbHNlIGlmIChub3Rh
dGlvbiA9PSAiY2lyY2xlIikgewotICAgICAgICAgICAgYWRkTm90YXRpb24oQ2lyY2xlKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAibGVmdCIpIHsKLSAgICAgICAgICAgIGFkZE5v
dGF0aW9uKExlZnQpOwotICAgICAgICB9IGVsc2UgaWYgKG5vdGF0aW9uID09ICJyaWdodCIpIHsK
LSAgICAgICAgICAgIGFkZE5vdGF0aW9uKFJpZ2h0KTsKLSAgICAgICAgfSBlbHNlIGlmIChub3Rh
dGlvbiA9PSAidG9wIikgewotICAgICAgICAgICAgYWRkTm90YXRpb24oVG9wKTsKLSAgICAgICAg
fSBlbHNlIGlmIChub3RhdGlvbiA9PSAiYm90dG9tIikgewotICAgICAgICAgICAgYWRkTm90YXRp
b24oQm90dG9tKTsKLSAgICAgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAidXBkaWFnb25hbHN0
cmlrZSIpIHsKLSAgICAgICAgICAgIGFkZE5vdGF0aW9uKFVwRGlhZ29uYWxTdHJpa2UpOwotICAg
ICAgICB9IGVsc2UgaWYgKG5vdGF0aW9uID09ICJkb3duZGlhZ29uYWxzdHJpa2UiKSB7Ci0gICAg
ICAgICAgICBhZGROb3RhdGlvbihEb3duRGlhZ29uYWxTdHJpa2UpOwotICAgICAgICB9IGVsc2Ug
aWYgKG5vdGF0aW9uID09ICJ2ZXJ0aWNhbHN0cmlrZSIpIHsKLSAgICAgICAgICAgIGFkZE5vdGF0
aW9uKFZlcnRpY2FsU3RyaWtlKTsKLSAgICAgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAiaG9y
aXpvbnRhbHN0cmlrZSIpIHsKLSAgICAgICAgICAgIGFkZE5vdGF0aW9uKEhvcml6b250YWxTdHJp
a2UpOwotICAgICAgICB9IGVsc2UgaWYgKG5vdGF0aW9uID09ICJ1cGRpYWdvbmFsYXJyb3ciKSB7
Ci0gICAgICAgICAgICBhZGROb3RhdGlvbihVcERpYWdvbmFsQXJyb3cpOwotICAgICAgICB9IGVs
c2UgaWYgKG5vdGF0aW9uID09ICJwaGFzb3JhbmdsZSIpIHsKLSAgICAgICAgICAgIGFkZE5vdGF0
aW9uKFBoYXNvckFuZ2xlKTsKLSAgICAgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAiYm94Iikg
ewotICAgICAgICAgICAgYWRkTm90YXRpb24oTGVmdCk7Ci0gICAgICAgICAgICBhZGROb3RhdGlv
bihSaWdodCk7Ci0gICAgICAgICAgICBhZGROb3RhdGlvbihUb3ApOwotICAgICAgICAgICAgYWRk
Tm90YXRpb24oQm90dG9tKTsKLSAgICAgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAiYWN0dWFy
aWFsIikgewotICAgICAgICAgICAgYWRkTm90YXRpb24oUmlnaHQpOwotICAgICAgICAgICAgYWRk
Tm90YXRpb24oVG9wKTsKLSAgICAgICAgfSBlbHNlIGlmIChub3RhdGlvbiA9PSAibWFkcnV3YiIp
IHsKLSAgICAgICAgICAgIGFkZE5vdGF0aW9uKFJpZ2h0KTsKLSAgICAgICAgICAgIGFkZE5vdGF0
aW9uKEJvdHRvbSk7CisgICAgLy8gV2UgcGFyc2UgdGhlIGxpc3Qgb2Ygd2hpdGVzcGFjZS1zZXBh
cmF0ZWQgbm90YXRpb24gbmFtZXMuCisgICAgU3RyaW5nIHZhbHVlID0gYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihub3RhdGlvbkF0dHIpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHZh
bHVlLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKKyAgICB3aGlsZSAoc3RhcnQg
PCBsZW5ndGgpIHsKKyAgICAgICAgaWYgKGlzSFRNTFNwYWNlKHZhbHVlW3N0YXJ0XSkpIHsKKyAg
ICAgICAgICAgIHN0YXJ0Kys7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAg
ICAgICB1bnNpZ25lZCBlbmQgPSBzdGFydCArIDE7CisgICAgICAgIHdoaWxlIChlbmQgPCBsZW5n
dGggJiYgIWlzSFRNTFNwYWNlKHZhbHVlW2VuZF0pKQorICAgICAgICAgICAgZW5kKys7CisgICAg
ICAgIGFkZE5vdGF0aW9uRmxhZ3ModmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCkp
OworICAgICAgICBzdGFydCA9IGVuZDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL21hdGhtbC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL21h
dGhtbC9NYXRoTUxNZW5jbG9zZUVsZW1lbnQuaAppbmRleCA5MjA2ZGQxZWY1NmFiOTVlNDJkMGRl
Mjg1NmZkOGRjZGE5YThjODM0Li5mYzVjNDZmNzdjMTk2MjdhNTkzMDI1ZmUyODU0OGExY2UwMTBj
MjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MTWVuY2xvc2VFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1lbmNsb3NlRWxlbWVudC5o
CkBAIC02MSw2ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZU5vdGF0aW9uQXR0cmli
dXRlKCk7CiAgICAgdm9pZCBjbGVhck5vdGF0aW9ucygpIHsgbV9ub3RhdGlvbkZsYWdzID0gMDsg
fQogICAgIHZvaWQgYWRkTm90YXRpb24oTWVuY2xvc2VOb3RhdGlvbkZsYWcgbm90YXRpb25GbGFn
KSB7IG1fbm90YXRpb25GbGFncy52YWx1ZSgpIHw9IG5vdGF0aW9uRmxhZzsgfQorICAgIHZvaWQg
YWRkTm90YXRpb25GbGFncyhTdHJpbmdWaWV3IG5vdGF0aW9uKTsKICAgICBPcHRpb25hbDx1aW50
MTZfdD4gbV9ub3RhdGlvbkZsYWdzOwogfTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGYxNDA2NzVmYzkzZDJhOWNiMjkz
ZWUyMjcyZWRjODk0Y2Q5OTFkYzAuLjBjOWY1NWU3OWM0Yjk2YTI4YjEwNDRiZjk1ZWEzMTBhMTky
Mzg1ZWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wOC0yMyAgRnJlZGVyaWMgV2FuZyAg
PGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBwYXJzaW5nIG9mIHRoZSBtZW5j
bG9zZSBub3RhdGlvbiBhdHRyaWJ1dGUgdmFsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlIGFkZCBzb21lIGNhc2VzIGluIG1lbmNsb3NlLW5vdGF0
aW9uLWVxdWl2YWxlbmNlIHRvIHZlcmlmeSB0aGF0IG9uZSBjYW4gdXNlIGFueSBzZXF1ZW5jZSBv
ZgorICAgICAgICB3aGl0ZXNwYWNlIHRvIHNlcGFyYXRlIG5vdGF0aW9uIHZhbHVlcy4gV2UgdHJ5
IHdpdGggMCwgMSwgMiBvciAzIG5vdGF0aW9uIHZhbHVlcy4KKworICAgICAgICAqIG1hdGhtbC9w
cmVzZW50YXRpb24vbWVuY2xvc2Utbm90YXRpb24tZXF1aXZhbGVuY2UtZXhwZWN0ZWQuaHRtbDoK
KyAgICAgICAgKiBtYXRobWwvcHJlc2VudGF0aW9uL21lbmNsb3NlLW5vdGF0aW9uLWVxdWl2YWxl
bmNlLmh0bWw6CisKIDIwMTYtMDgtMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBEcm9wIFRleHRUcmFja0N1ZSdzIGNvbnN0cnVjdG9yIGFzIHBlciB0aGUgbGF0
ZXN0IHNwZWNpZmljYXRpb24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50
YXRpb24vbWVuY2xvc2Utbm90YXRpb24tZXF1aXZhbGVuY2UtZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWVuY2xvc2Utbm90YXRpb24tZXF1aXZhbGVuY2Ut
ZXhwZWN0ZWQuaHRtbAppbmRleCA2MDE5NDhiNWUwYTMwMWZiNzVhM2ZhYjFjNzdmMDBlZjU3Mzhj
MDliLi42ZTc5OGM2NzliOGM4MzAyYzBmYzMzYTViZmFhNWViNDExNzMzYTRjIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21lbmNsb3NlLW5vdGF0aW9uLWVxdWl2
YWxlbmNlLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlv
bi9tZW5jbG9zZS1ub3RhdGlvbi1lcXVpdmFsZW5jZS1leHBlY3RlZC5odG1sCkBAIC0yNSw1ICsy
NSwxMyBAQAogICAgIDwhLS0gbWVuY2xvc2Ugbm90YXRpb25zIGFyZSBpbmRlcGVuZGVudCBvZiBv
dmVyYWxsIGRpcmVjdGlvbmFsaXR5IC0tPgogICAgIDxtYXRoPjxtcm93PjxtZW5jbG9zZSBub3Rh
dGlvbj0ibGVmdCB1cGRpYWdvbmFsc3RyaWtlIj48bXNwYWNlIHdpZHRoPSIxMDBweCIgaGVpZ2h0
PSI1MHB4IiBtYXRoYmFja2dyb3VuZD0icmVkIi8+PC9tZW5jbG9zZT48L21yb3c+PC9tYXRoPgog
CisgICAgPCEtLSBtZW5jbG9zZSBub3RhdGlvbnMgY2FuIGJlIHNlcGFyYXRlZCBieSBhbnkgc2Vx
dWVuY2Ugb2Ygd2hpdGVzcGFjZS4gLS0+CisgICAgPHA+CisgICAgICA8bWF0aD48bXJvdz48bWVu
Y2xvc2Ugbm90YXRpb249IiI+PG1zcGFjZSB3aWR0aD0iMTAwcHgiIGhlaWdodD0iNTBweCIgbWF0
aGJhY2tncm91bmQ9InJlZCIvPjwvbWVuY2xvc2U+PC9tcm93PjwvbWF0aD4KKyAgICAgIDxtYXRo
Pjxtcm93PjxtZW5jbG9zZSBub3RhdGlvbj0idG9wIj48bXNwYWNlIHdpZHRoPSIxMDBweCIgaGVp
Z2h0PSI1MHB4IiBtYXRoYmFja2dyb3VuZD0icmVkIi8+PC9tZW5jbG9zZT48L21yb3c+PC9tYXRo
PgorICAgICAgPG1hdGg+PG1yb3c+PG1lbmNsb3NlIG5vdGF0aW9uPSJ0b3AgY2lyY2xlIj48bXNw
YWNlIHdpZHRoPSIxMDBweCIgaGVpZ2h0PSI1MHB4IiBtYXRoYmFja2dyb3VuZD0icmVkIi8+PC9t
ZW5jbG9zZT48L21yb3c+PC9tYXRoPgorICAgICAgPG1hdGg+PG1yb3c+PG1lbmNsb3NlIG5vdGF0
aW9uPSJ0b3AgY2lyY2xlIGhvcml6b250YWxzdHJpa2UiPjxtc3BhY2Ugd2lkdGg9IjEwMHB4IiBo
ZWlnaHQ9IjUwcHgiIG1hdGhiYWNrZ3JvdW5kPSJyZWQiLz48L21lbmNsb3NlPjwvbXJvdz48L21h
dGg+CisgICAgPC9wPgorCiAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWVuY2xvc2Utbm90YXRpb24tZXF1aXZhbGVuY2UuaHRt
bCBiL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWVuY2xvc2Utbm90YXRpb24tZXF1
aXZhbGVuY2UuaHRtbAppbmRleCBkY2E4YWI5ZDRiOTUxMjVkNDg2MmM4MzYxY2Q4NTg3ZGQwOWVm
YTFkLi4yMzAyMWNkNWUwYWEzYzc5NDUwMjY3YTdhY2QxNTRhN2Y3YTY0NGJlIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21lbmNsb3NlLW5vdGF0aW9uLWVxdWl2
YWxlbmNlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZW5jbG9z
ZS1ub3RhdGlvbi1lcXVpdmFsZW5jZS5odG1sCkBAIC0yNSw1ICsyNSwxMyBAQAogICAgIDwhLS0g
bWVuY2xvc2Ugbm90YXRpb25zIGFyZSBpbmRlcGVuZGVudCBvZiBvdmVyYWxsIGRpcmVjdGlvbmFs
aXR5IC0tPgogICAgIDxtYXRoIGRpcj0icnRsIj48bXJvdz48bWVuY2xvc2Ugbm90YXRpb249Imxl
ZnQgdXBkaWFnb25hbHN0cmlrZSI+PG1zcGFjZSB3aWR0aD0iMTAwcHgiIGhlaWdodD0iNTBweCIg
bWF0aGJhY2tncm91bmQ9InJlZCIvPjwvbWVuY2xvc2U+PC9tcm93PjwvbWF0aD4KIAorICAgIDwh
LS0gbWVuY2xvc2Ugbm90YXRpb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgYW55IHNlcXVlbmNlIG9m
IHdoaXRlc3BhY2UuIC0tPgorICAgIDxwPgorICAgICAgPG1hdGg+PG1yb3c+PG1lbmNsb3NlIG5v
dGF0aW9uPSImI3gyMDsmI3g5OyYjeEE7JiN4RDsmI3gyMDsmI3g5OyYjeEE7JiN4RDsiPjxtc3Bh
Y2Ugd2lkdGg9IjEwMHB4IiBoZWlnaHQ9IjUwcHgiIG1hdGhiYWNrZ3JvdW5kPSJyZWQiLz48L21l
bmNsb3NlPjwvbXJvdz48L21hdGg+CisgICAgICA8bWF0aD48bXJvdz48bWVuY2xvc2Ugbm90YXRp
b249IiYjeDIwOyYjeDk7JiN4QTsmI3hEOyYjeDIwOyYjeDk7JiN4QTsmI3hEO3RvcCYjeDIwOyYj
eDk7JiN4QTsmI3hEOyYjeDIwOyYjeDk7JiN4QTsmI3hEOyI+PG1zcGFjZSB3aWR0aD0iMTAwcHgi
IGhlaWdodD0iNTBweCIgbWF0aGJhY2tncm91bmQ9InJlZCIvPjwvbWVuY2xvc2U+PC9tcm93Pjwv
bWF0aD4KKyAgICAgIDxtYXRoPjxtcm93PjxtZW5jbG9zZSBub3RhdGlvbj0iJiN4MjA7JiN4OTsm
I3hBOyYjeEQ7JiN4MjA7JiN4OTsmI3hBOyYjeEQ7dG9wJiN4MjA7JiN4OTsmI3hBOyYjeEQ7JiN4
MjA7JiN4OTsmI3hBOyYjeEQ7Y2lyY2xlJiN4MjA7JiN4OTsmI3hBOyYjeEQ7JiN4MjA7JiN4OTsm
I3hBOyYjeEQ7Ij48bXNwYWNlIHdpZHRoPSIxMDBweCIgaGVpZ2h0PSI1MHB4IiBtYXRoYmFja2dy
b3VuZD0icmVkIi8+PC9tZW5jbG9zZT48L21yb3c+PC9tYXRoPgorICAgICAgPG1hdGg+PG1yb3c+
PG1lbmNsb3NlIG5vdGF0aW9uPSImI3gyMDsmI3g5OyYjeEE7JiN4RDsmI3gyMDsmI3g5OyYjeEE7
JiN4RDt0b3AmI3gyMDsmI3g5OyYjeEE7JiN4RDsmI3gyMDsmI3g5OyYjeEE7JiN4RDtjaXJjbGUm
I3gyMDsmI3g5OyYjeEE7JiN4RDsmI3gyMDsmI3g5OyYjeEE7JiN4RDtob3Jpem9udGFsc3RyaWtl
JiN4MjA7JiN4OTsmI3hBOyYjeEQ7JiN4MjA7JiN4OTsmI3hBOyYjeEQ7Ij48bXNwYWNlIHdpZHRo
PSIxMDBweCIgaGVpZ2h0PSI1MHB4IiBtYXRoYmFja2dyb3VuZD0icmVkIi8+PC9tZW5jbG9zZT48
L21yb3c+PC9tYXRoPgorICAgIDwvcD4KKwogICA8L2JvZHk+CiA8L2h0bWw+Cg==
</data>
<flag name="review"
          id="310207"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>