<?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>46066</bug_id>
          
          <creation_ts>2010-09-19 17:39:03 -0700</creation_ts>
          <short_desc>SVG: Make SVGLength&apos;s stringToLengthType() stricter and faster</short_desc>
          <delta_ts>2010-09-24 15:57:39 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>krit</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>281335</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-19 17:39:03 -0700</bug_when>
    <thetext>stringToLengthType() in SVGLength.cpp is currently testing String::endsWith(&quot;foo&quot;) which causes temporary WTF::Strings to be created.

We can easily hand-compare the characters to speed up this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281337</commentid>
    <comment_count>1</comment_count>
      <attachid>68042</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-19 17:43:47 -0700</bug_when>
    <thetext>Created attachment 68042
Proposed patch

This patch yields a 10.5% speedup on http://data.xeoh.net/svg.benchmark/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281339</commentid>
    <comment_count>2</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-09-19 18:02:52 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=68042) [details]
&gt; Proposed patch
&gt; 
&gt; This patch yields a 10.5% speedup on http://data.xeoh.net/svg.benchmark/

L_Great_TM :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281404</commentid>
    <comment_count>3</comment_count>
      <attachid>68042</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-19 23:55:12 -0700</bug_when>
    <thetext>Comment on attachment 68042
Proposed patch

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

&gt; WebCore/svg/SVGLength.cpp:97
&gt; +    if (characters[length - 1] == &apos;%&apos;)

Can you put UChar b = characters[length - 1]; right before this check? The names should indicate the content. Can you use &apos;lastChar&apos; for b or simply &apos;end&apos;? a also needs a better name. Just a bit strange that we give back number, if the string doesn&apos;t end with a length type that we know.

&gt; WebCore/svg/SVGLength.cpp:104
&gt; +    UChar a = characters[length - 2];
&gt; +    UChar b = characters[length - 1];
Should be const.

I was looking at setValueAsString, the caller of this function. And it looks bogus to me, to just check the last or last two chars. Following example would parse on WebKit, while it doesn&apos;t on other Viewers:
&lt;rect width=&quot;20    mm&quot; height=&quot;20*SomethinStupid*px&quot;/&gt;

Can&apos;t you just use &apos;ptr&apos; and &apos;end&apos; of setValueAsString? &apos;ptr&apos; is the first char after the parsed number of the string. We don&apos;t need String at all on lengthTypeToString. This change will need new layouttests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284632</commentid>
    <comment_count>4</comment_count>
      <attachid>68733</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-24 12:46:29 -0700</bug_when>
    <thetext>Created attachment 68733
Proposed patch v2

Strictified SVGLength to only accept unit types immediately following the numeric value, and with no whitespace after.
This behavior matches Firefox, but not IE9 or Opera.
IE9 accepts whitespace on both sides of the unit type.
Opera doesn&apos;t accept whitespace between the numeric value and the unit type, but accepts it after the unit type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284698</commentid>
    <comment_count>5</comment_count>
      <attachid>68733</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-24 14:24:36 -0700</bug_when>
    <thetext>Comment on attachment 68733
Proposed patch v2

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

The code is not realy faster with the mentioned changes, but looks more like the rest of the parsing code in SVGParserUttilities.cpp. And it may make it easier to change the code to ignore whitespaces at the end without parsing error later (the default behavior on Opera, but not specified yet) by just adding two more lines. The test looks great! Great patch!

&gt; WebCore/svg/SVGLength.cpp:89
&gt; +inline SVGLengthType stringToLengthType(const UChar* characters, const UChar* end)

const UChar*&amp; ptr

&gt; WebCore/svg/SVGLength.cpp:94
&gt; +    unsigned length = end - characters;
&gt; +
&gt; +    if (!length)
&gt; +        return LengthTypeNumber;

if (ptr == end)
 return LengthTypeNumber;

&gt; WebCore/svg/SVGLength.cpp:105
&gt; +    if (length != 1 &amp;&amp; length != 2)
&gt; +        return LengthTypeUnknown;
&gt; +
&gt; +    const UChar lastChar = characters[length - 1];
&gt; +
&gt; +    if (length == 1) {
&gt; +        if (lastChar == &apos;%&apos;)
&gt; +            return LengthTypePercentage;
&gt; +        return LengthTypeUnknown;
&gt; +    }

const UChar firstChar = *ptr;
++ptr;
if (firstChar == &apos;%&apos;) {
  if (ptr == end)
    return LengthTypePercentage;
  return LengthTypeUnkown;
}

const UChar secondChar = *ptr;
if (++ptr != end)
  return LengthTypeUnkown;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284741</commentid>
    <comment_count>6</comment_count>
      <attachid>68761</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-24 15:01:23 -0700</bug_when>
    <thetext>Created attachment 68761
Proposed patch v3

Updated with Dirk&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284749</commentid>
    <comment_count>7</comment_count>
      <attachid>68761</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-24 15:10:21 -0700</bug_when>
    <thetext>Comment on attachment 68761
Proposed patch v3

LGTM. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284795</commentid>
    <comment_count>8</comment_count>
      <attachid>68761</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-24 15:57:33 -0700</bug_when>
    <thetext>Comment on attachment 68761
Proposed patch v3

Clearing flags on attachment: 68761

Committed r68307: &lt;http://trac.webkit.org/changeset/68307&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284796</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-24 15:57:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68042</attachid>
            <date>2010-09-19 17:43:47 -0700</date>
            <delta_ts>2010-09-24 12:46:29 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-46066.diff</filename>
            <type>text/plain</type>
            <size>2415</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzVmNTJiZi4uYjAyNWM4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wOS0xOSAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNWRzogT3B0aW1pemUgc3RyaW5nVG9MZW5ndGhUeXBlKCkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2MDY2CisK
KyAgICAgICAgVXNpbmcgU3RyaW5nOjplbmRzV2l0aCgiZm9vIikgY2F1c2VzIGEgdGVtcG9yYXJ5
IFdURjo6U3RyaW5nIHRvIGJlIGNyZWF0ZWQuCisgICAgICAgIEF2b2lkIHRoaXMgYnkgY29tcGFy
aW5nIGNoYXJhY3RlcnMgZGlyZWN0bHkuCisKKyAgICAgICAgMTAuNSUgc3BlZWR1cCBvbiA8aHR0
cDovL2RhdGEueGVvaC5uZXQvc3ZnLmJlbmNobWFyay8+CisKKyAgICAgICAgKiBzdmcvU1ZHTGVu
Z3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1RvTGVuZ3RoVHlwZSk6CisKIDIwMTAt
MDktMTkgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0xlbmd0
aC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwCmluZGV4IGJkZDViMjcuLjNkMjg2Yzcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAKKysrIGIvV2ViQ29yZS9zdmcv
U1ZHTGVuZ3RoLmNwcApAQCAtODgsMjggKzg4LDM5IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGxl
bmd0aFR5cGVUb1N0cmluZyhTVkdMZW5ndGhUeXBlIHR5cGUpCiAKIGlubGluZSBTVkdMZW5ndGhU
eXBlIHN0cmluZ1RvTGVuZ3RoVHlwZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBpZiAo
c3RyaW5nLmVuZHNXaXRoKCIlIikpCisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBMZW5ndGhUeXBlVW5rbm93bjsKKworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
ID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CisKKyAgICBpZiAoY2hhcmFjdGVyc1tsZW5ndGggLSAxXSA9PSAnJScpCiAgICAgICAg
IHJldHVybiBMZW5ndGhUeXBlUGVyY2VudGFnZTsKLSAgICBlbHNlIGlmIChzdHJpbmcuZW5kc1dp
dGgoImVtIikpCisKKyAgICBpZiAobGVuZ3RoIDwgMikKKyAgICAgICAgcmV0dXJuIExlbmd0aFR5
cGVOdW1iZXI7CisKKyAgICBVQ2hhciBhID0gY2hhcmFjdGVyc1tsZW5ndGggLSAyXTsKKyAgICBV
Q2hhciBiID0gY2hhcmFjdGVyc1tsZW5ndGggLSAxXTsKKworICAgIGlmIChhID09ICdlJyAmJiBi
ID09ICdtJykKICAgICAgICAgcmV0dXJuIExlbmd0aFR5cGVFTVM7Ci0gICAgZWxzZSBpZiAoc3Ry
aW5nLmVuZHNXaXRoKCJleCIpKQorICAgIGlmIChhID09ICdlJyAmJiBiID09ICd4JykKICAgICAg
ICAgcmV0dXJuIExlbmd0aFR5cGVFWFM7Ci0gICAgZWxzZSBpZiAoc3RyaW5nLmVuZHNXaXRoKCJw
eCIpKQorICAgIGlmIChhID09ICdwJyAmJiBiID09ICd4JykKICAgICAgICAgcmV0dXJuIExlbmd0
aFR5cGVQWDsKLSAgICBlbHNlIGlmIChzdHJpbmcuZW5kc1dpdGgoImNtIikpCisgICAgaWYgKGEg
PT0gJ2MnICYmIGIgPT0gJ20nKQogICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZUNNOwotICAgIGVs
c2UgaWYgKHN0cmluZy5lbmRzV2l0aCgibW0iKSkKKyAgICBpZiAoYSA9PSAnbScgJiYgYiA9PSAn
bScpCiAgICAgICAgIHJldHVybiBMZW5ndGhUeXBlTU07Ci0gICAgZWxzZSBpZiAoc3RyaW5nLmVu
ZHNXaXRoKCJpbiIpKQorICAgIGlmIChhID09ICdpJyAmJiBiID09ICduJykKICAgICAgICAgcmV0
dXJuIExlbmd0aFR5cGVJTjsKLSAgICBlbHNlIGlmIChzdHJpbmcuZW5kc1dpdGgoInB0IikpCisg
ICAgaWYgKGEgPT0gJ3AnICYmIGIgPT0gJ3QnKQogICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZVBU
OwotICAgIGVsc2UgaWYgKHN0cmluZy5lbmRzV2l0aCgicGMiKSkKKyAgICBpZiAoYSA9PSAncCcg
JiYgYiA9PSAnYycpCiAgICAgICAgIHJldHVybiBMZW5ndGhUeXBlUEM7Ci0gICAgZWxzZSBpZiAo
IXN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBMZW5ndGhUeXBlTnVtYmVyOwogCi0g
ICAgcmV0dXJuIExlbmd0aFR5cGVVbmtub3duOworICAgIHJldHVybiBMZW5ndGhUeXBlTnVtYmVy
OwogfQogCiBTVkdMZW5ndGg6OlNWR0xlbmd0aChTVkdMZW5ndGhNb2RlIG1vZGUsIGNvbnN0IFN0
cmluZyYgdmFsdWVBc1N0cmluZykK
</data>
<flag name="review"
          id="57486"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68733</attachid>
            <date>2010-09-24 12:46:29 -0700</date>
            <delta_ts>2010-09-24 15:01:23 -0700</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-46066-v2.diff</filename>
            <type>text/plain</type>
            <size>8252</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2MGI4YjE3Li43NTkwNmVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDkt
MjQgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkc6IE1ha2UgU1ZHTGVuZ3Ro
J3Mgc3RyaW5nVG9MZW5ndGhUeXBlKCkgc3RyaWN0ZXIgYW5kIGZhc3RlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYwNjYKKworICAgICAgICBBZGQg
dGVzdCBjb3ZlcmFnZSBmb3IgaGFuZGxpbmcgb2YgaW52YWxpZCBTVkdMZW5ndGggdW5pdHMuCisK
KyAgICAgICAgKiBzdmcvY3VzdG9tL2ludmFsaWQtbGVuZ3RoLXVuaXRzLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9pbnZhbGlkLWxlbmd0aC11bml0cy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3NjcmlwdC10ZXN0cy9pbnZhbGlkLWxlbmd0aC11
bml0cy5qczogQWRkZWQuCisgICAgICAgICh0cnlTZXR0aW5nTGVuZ3RoKToKKwogMjAxMC0wOS0y
NCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHVwZGF0aW5nIHRlc3RfZXhwZWN0YXRpb25zLnR4dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N2Zy9jdXN0b20vaW52YWxpZC1sZW5ndGgtdW5pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9pbnZhbGlkLWxlbmd0aC11bml0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxMmFlMQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N2Zy9jdXN0b20vaW52YWxpZC1sZW5ndGgtdW5pdHMtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMjkgQEAKK1Rlc3RzIGhhbmRsaW5nIG9mIGludmFsaWQgU1ZHIGxlbmd0aCB1bml0
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcmVjdC5zZXRBdHRyaWJ1
dGUoJ3gnLCAnJyk7IHJlY3QueC5iYXNlVmFsLnZhbHVlQXNTdHJpbmcgaXMgJzAnCitQQVNTIHJl
Y3Quc2V0QXR0cmlidXRlKCd4JywgJyAnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBp
cyAnMCcKK1BBU1MgcmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCAnZm9vJyk7IHJlY3QueC5iYXNlVmFs
LnZhbHVlQXNTdHJpbmcgaXMgJzAnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEwZm9v
Jyk7IHJlY3QueC5iYXNlVmFsLnZhbHVlQXNTdHJpbmcgaXMgJzAnCitQQVNTIHJlY3Quc2V0QXR0
cmlidXRlKCd4JywgJ3B4Jyk7IHJlY3QueC5iYXNlVmFsLnZhbHVlQXNTdHJpbmcgaXMgJzAnCitQ
QVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEwcHggJyk7IHJlY3QueC5iYXNlVmFsLnZhbHVl
QXNTdHJpbmcgaXMgJzAnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEwJSAnKTsgcmVj
dC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMCcKK1BBU1MgcmVjdC5zZXRBdHRyaWJ1dGUo
J3gnLCAnMTAgJSAnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMCcKK1BBU1Mg
cmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCAnMTAgJScpOyByZWN0LnguYmFzZVZhbC52YWx1ZUFzU3Ry
aW5nIGlzICcwJworUEFTUyByZWN0LnNldEF0dHJpYnV0ZSgneCcsICcxMCBweCAnKTsgcmVjdC54
LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMCcKK1BBU1MgcmVjdC5zZXRBdHRyaWJ1dGUoJ3gn
LCAnMTAgcHgnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMCcKK1BBU1MgcmVj
dC5zZXRBdHRyaWJ1dGUoJ3gnLCAnMTAnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBp
cyAnMTAnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEwJScpOyByZWN0LnguYmFzZVZh
bC52YWx1ZUFzU3RyaW5nIGlzICcxMCUnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEw
ZW0nKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMTBlbScKK1BBU1MgcmVjdC5z
ZXRBdHRyaWJ1dGUoJ3gnLCAnMTBleCcpOyByZWN0LnguYmFzZVZhbC52YWx1ZUFzU3RyaW5nIGlz
ICcxMGV4JworUEFTUyByZWN0LnNldEF0dHJpYnV0ZSgneCcsICcxMHB4Jyk7IHJlY3QueC5iYXNl
VmFsLnZhbHVlQXNTdHJpbmcgaXMgJzEwcHgnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4Jywg
JzEwY20nKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMTBjbScKK1BBU1MgcmVj
dC5zZXRBdHRyaWJ1dGUoJ3gnLCAnMTBtbScpOyByZWN0LnguYmFzZVZhbC52YWx1ZUFzU3RyaW5n
IGlzICcxMG1tJworUEFTUyByZWN0LnNldEF0dHJpYnV0ZSgneCcsICcxMHB0Jyk7IHJlY3QueC5i
YXNlVmFsLnZhbHVlQXNTdHJpbmcgaXMgJzEwcHQnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4
JywgJzEwcGMnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMTBwYycKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2ludmFsaWQtbGVuZ3RoLXVuaXRzLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL2ludmFsaWQtbGVuZ3RoLXVuaXRzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5MDk5YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3N2Zy9jdXN0b20vaW52YWxpZC1sZW5ndGgtdW5pdHMuaHRtbApAQCAtMCwwICsxLDEz
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9pbnZhbGlkLWxlbmd0aC11bml0cy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20v
c2NyaXB0LXRlc3RzL2ludmFsaWQtbGVuZ3RoLXVuaXRzLmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2N1
c3RvbS9zY3JpcHQtdGVzdHMvaW52YWxpZC1sZW5ndGgtdW5pdHMuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3ZjVjMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N2Zy9jdXN0b20vc2NyaXB0LXRlc3RzL2ludmFsaWQtbGVuZ3RoLXVuaXRzLmpzCkBAIC0w
LDAgKzEsNDAgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBoYW5kbGluZyBvZiBpbnZhbGlkIFNWRyBs
ZW5ndGggdW5pdHMuIik7CisKK3ZhciBzdmdOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyI7CisKK3ZhciBzdmdSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCAic3Zn
Iik7Citkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnUm9vdCk7CisKK3Jl
Y3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsICJyZWN0Iik7CitzdmdSb290LmFw
cGVuZENoaWxkKHJlY3QpOworCitmdW5jdGlvbiB0cnlTZXR0aW5nTGVuZ3RoKGxlbmd0aCwgZXhw
ZWN0ZWQpCit7CisgICAgcmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCAiMTIzNCIpOworICAgIHNob3Vs
ZEJlKCJyZWN0LnNldEF0dHJpYnV0ZSgneCcsICciICsgbGVuZ3RoICsgIicpOyByZWN0LnguYmFz
ZVZhbC52YWx1ZUFzU3RyaW5nIiwgZXhwZWN0ZWQpOworfQorCit0cnlTZXR0aW5nTGVuZ3RoKCIi
LCAiJzAnIik7Cit0cnlTZXR0aW5nTGVuZ3RoKCIgIiwgIicwJyIpOwordHJ5U2V0dGluZ0xlbmd0
aCgiZm9vIiwgIicwJyIpOwordHJ5U2V0dGluZ0xlbmd0aCgiMTBmb28iLCAiJzAnIik7Cit0cnlT
ZXR0aW5nTGVuZ3RoKCJweCIsICInMCciKTsKK3RyeVNldHRpbmdMZW5ndGgoIjEwcHggIiwgIicw
JyIpOwordHJ5U2V0dGluZ0xlbmd0aCgiMTAlICIsICInMCciKTsKK3RyeVNldHRpbmdMZW5ndGgo
IjEwICUgIiwgIicwJyIpOwordHJ5U2V0dGluZ0xlbmd0aCgiMTAgJSIsICInMCciKTsKK3RyeVNl
dHRpbmdMZW5ndGgoIjEwIHB4ICIsICInMCciKTsKK3RyeVNldHRpbmdMZW5ndGgoIjEwIHB4Iiwg
IicwJyIpOwordHJ5U2V0dGluZ0xlbmd0aCgiMTAiLCAiJzEwJyIpOwordHJ5U2V0dGluZ0xlbmd0
aCgiMTAlIiwgIicxMCUnIik7Cit0cnlTZXR0aW5nTGVuZ3RoKCIxMGVtIiwgIicxMGVtJyIpOwor
dHJ5U2V0dGluZ0xlbmd0aCgiMTBleCIsICInMTBleCciKTsKK3RyeVNldHRpbmdMZW5ndGgoIjEw
cHgiLCAiJzEwcHgnIik7Cit0cnlTZXR0aW5nTGVuZ3RoKCIxMGNtIiwgIicxMGNtJyIpOwordHJ5
U2V0dGluZ0xlbmd0aCgiMTBtbSIsICInMTBtbSciKTsKK3RyeVNldHRpbmdMZW5ndGgoIjEwcHQi
LCAiJzEwcHQnIik7Cit0cnlTZXR0aW5nTGVuZ3RoKCIxMHBjIiwgIicxMHBjJyIpOworCitkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoc3ZnUm9vdCk7CisKK3ZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAzODg1ZGFkLi43MmVkNmVkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEw
LTA5LTI0ICBBbmRyZWFzIEtsaW5nICA8YW5kcmVhcy5rbGluZ0Bub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU1ZHOiBNYWtlIFNWR0xl
bmd0aCdzIHN0cmluZ1RvTGVuZ3RoVHlwZSgpIHN0cmljdGVyIGFuZCBmYXN0ZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2MDY2CisKKyAgICAgICAg
T25seSBhY2NlcHQgdW5pdCBuYW1lcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIG51bWVyaWMg
dmFsdWUuCisgICAgICAgIFRoaXMgYmVoYXZpb3IgbWF0Y2hlcyBHZWNrby4KKworICAgICAgICBB
bHNvLCB1c2luZyBTdHJpbmc6OmVuZHNXaXRoKCJmb28iKSBjYXVzZWQgYSB0ZW1wb3JhcnkgV1RG
OjpTdHJpbmcgdG8gYmUgY3JlYXRlZC4KKyAgICAgICAgQXZvaWQgdGhpcyBieSBjb21wYXJpbmcg
Y2hhcmFjdGVycyBkaXJlY3RseS4KKworICAgICAgICAxMC41JSBzcGVlZHVwIG9uIDxodHRwOi8v
ZGF0YS54ZW9oLm5ldC9zdmcuYmVuY2htYXJrLz4KKworICAgICAgICBUZXN0OiBzdmcvY3VzdG9t
L2ludmFsaWQtbGVuZ3RoLXVuaXRzLmh0bWwKKworICAgICAgICAqIHN2Zy9TVkdMZW5ndGguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c3RyaW5nVG9MZW5ndGhUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0xlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyk6CisKIDIwMTAtMDktMjQgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwIGIvV2ViQ29yZS9zdmcvU1ZH
TGVuZ3RoLmNwcAppbmRleCBiZGQ1YjI3Li43ZGY3ZTg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2
Zy9TVkdMZW5ndGguY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAKQEAgLTg2LDI4
ICs4Niw0MiBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBsZW5ndGhUeXBlVG9TdHJpbmcoU1ZHTGVu
Z3RoVHlwZSB0eXBlKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotaW5saW5lIFNWR0xlbmd0
aFR5cGUgc3RyaW5nVG9MZW5ndGhUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoraW5saW5lIFNW
R0xlbmd0aFR5cGUgc3RyaW5nVG9MZW5ndGhUeXBlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBj
b25zdCBVQ2hhciogZW5kKQogewotICAgIGlmIChzdHJpbmcuZW5kc1dpdGgoIiUiKSkKLSAgICAg
ICAgcmV0dXJuIExlbmd0aFR5cGVQZXJjZW50YWdlOwotICAgIGVsc2UgaWYgKHN0cmluZy5lbmRz
V2l0aCgiZW0iKSkKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBlbmQgLSBjaGFyYWN0ZXJzOworCisg
ICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBMZW5ndGhUeXBlTnVtYmVyOworCisgICAg
aWYgKGxlbmd0aCAhPSAxICYmIGxlbmd0aCAhPSAyKQorICAgICAgICByZXR1cm4gTGVuZ3RoVHlw
ZVVua25vd247CisKKyAgICBjb25zdCBVQ2hhciBsYXN0Q2hhciA9IGNoYXJhY3RlcnNbbGVuZ3Ro
IC0gMV07CisKKyAgICBpZiAobGVuZ3RoID09IDEpIHsKKyAgICAgICAgaWYgKGxhc3RDaGFyID09
ICclJykKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhUeXBlUGVyY2VudGFnZTsKKyAgICAgICAg
cmV0dXJuIExlbmd0aFR5cGVVbmtub3duOworICAgIH0KKworICAgIGNvbnN0IFVDaGFyIG5leHRU
b0xhc3RDaGFyID0gY2hhcmFjdGVyc1tsZW5ndGggLSAyXTsKKworICAgIGlmIChuZXh0VG9MYXN0
Q2hhciA9PSAnZScgJiYgbGFzdENoYXIgPT0gJ20nKQogICAgICAgICByZXR1cm4gTGVuZ3RoVHlw
ZUVNUzsKLSAgICBlbHNlIGlmIChzdHJpbmcuZW5kc1dpdGgoImV4IikpCisgICAgaWYgKG5leHRU
b0xhc3RDaGFyID09ICdlJyAmJiBsYXN0Q2hhciA9PSAneCcpCiAgICAgICAgIHJldHVybiBMZW5n
dGhUeXBlRVhTOwotICAgIGVsc2UgaWYgKHN0cmluZy5lbmRzV2l0aCgicHgiKSkKKyAgICBpZiAo
bmV4dFRvTGFzdENoYXIgPT0gJ3AnICYmIGxhc3RDaGFyID09ICd4JykKICAgICAgICAgcmV0dXJu
IExlbmd0aFR5cGVQWDsKLSAgICBlbHNlIGlmIChzdHJpbmcuZW5kc1dpdGgoImNtIikpCisgICAg
aWYgKG5leHRUb0xhc3RDaGFyID09ICdjJyAmJiBsYXN0Q2hhciA9PSAnbScpCiAgICAgICAgIHJl
dHVybiBMZW5ndGhUeXBlQ007Ci0gICAgZWxzZSBpZiAoc3RyaW5nLmVuZHNXaXRoKCJtbSIpKQor
ICAgIGlmIChuZXh0VG9MYXN0Q2hhciA9PSAnbScgJiYgbGFzdENoYXIgPT0gJ20nKQogICAgICAg
ICByZXR1cm4gTGVuZ3RoVHlwZU1NOwotICAgIGVsc2UgaWYgKHN0cmluZy5lbmRzV2l0aCgiaW4i
KSkKKyAgICBpZiAobmV4dFRvTGFzdENoYXIgPT0gJ2knICYmIGxhc3RDaGFyID09ICduJykKICAg
ICAgICAgcmV0dXJuIExlbmd0aFR5cGVJTjsKLSAgICBlbHNlIGlmIChzdHJpbmcuZW5kc1dpdGgo
InB0IikpCisgICAgaWYgKG5leHRUb0xhc3RDaGFyID09ICdwJyAmJiBsYXN0Q2hhciA9PSAndCcp
CiAgICAgICAgIHJldHVybiBMZW5ndGhUeXBlUFQ7Ci0gICAgZWxzZSBpZiAoc3RyaW5nLmVuZHNX
aXRoKCJwYyIpKQorICAgIGlmIChuZXh0VG9MYXN0Q2hhciA9PSAncCcgJiYgbGFzdENoYXIgPT0g
J2MnKQogICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZVBDOwotICAgIGVsc2UgaWYgKCFzdHJpbmcu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZU51bWJlcjsKIAogICAgIHJldHVy
biBMZW5ndGhUeXBlVW5rbm93bjsKIH0KQEAgLTI2MCw4ICsyNzQsOCBAQCBib29sIFNWR0xlbmd0
aDo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIHMpCiAgICAgaWYgKCFwYXJzZU51bWJl
cihwdHIsIGVuZCwgY29udmVydGVkTnVtYmVyLCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFNWR0xlbmd0aFR5cGUgdHlwZSA9IHN0cmluZ1RvTGVuZ3RoVHlwZShzKTsKLSAg
ICBpZiAocHRyICE9IGVuZCAmJiB0eXBlID09IExlbmd0aFR5cGVOdW1iZXIpCisgICAgU1ZHTGVu
Z3RoVHlwZSB0eXBlID0gc3RyaW5nVG9MZW5ndGhUeXBlKHB0ciwgZW5kKTsKKyAgICBpZiAodHlw
ZSA9PSBMZW5ndGhUeXBlVW5rbm93bikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV91
bml0ID0gc3RvcmVVbml0KGV4dHJhY3RNb2RlKG1fdW5pdCksIHR5cGUpOwo=
</data>
<flag name="review"
          id="58293"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68761</attachid>
            <date>2010-09-24 15:01:23 -0700</date>
            <delta_ts>2010-09-24 15:57:32 -0700</delta_ts>
            <desc>Proposed patch v3</desc>
            <filename>bug-46066-v3.diff</filename>
            <type>text/plain</type>
            <size>8141</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2MGI4YjE3Li43NTkwNmVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDkt
MjQgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkc6IE1ha2UgU1ZHTGVuZ3Ro
J3Mgc3RyaW5nVG9MZW5ndGhUeXBlKCkgc3RyaWN0ZXIgYW5kIGZhc3RlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYwNjYKKworICAgICAgICBBZGQg
dGVzdCBjb3ZlcmFnZSBmb3IgaGFuZGxpbmcgb2YgaW52YWxpZCBTVkdMZW5ndGggdW5pdHMuCisK
KyAgICAgICAgKiBzdmcvY3VzdG9tL2ludmFsaWQtbGVuZ3RoLXVuaXRzLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9pbnZhbGlkLWxlbmd0aC11bml0cy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3NjcmlwdC10ZXN0cy9pbnZhbGlkLWxlbmd0aC11
bml0cy5qczogQWRkZWQuCisgICAgICAgICh0cnlTZXR0aW5nTGVuZ3RoKToKKwogMjAxMC0wOS0y
NCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHVwZGF0aW5nIHRlc3RfZXhwZWN0YXRpb25zLnR4dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N2Zy9jdXN0b20vaW52YWxpZC1sZW5ndGgtdW5pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9pbnZhbGlkLWxlbmd0aC11bml0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxMmFlMQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N2Zy9jdXN0b20vaW52YWxpZC1sZW5ndGgtdW5pdHMtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMjkgQEAKK1Rlc3RzIGhhbmRsaW5nIG9mIGludmFsaWQgU1ZHIGxlbmd0aCB1bml0
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcmVjdC5zZXRBdHRyaWJ1
dGUoJ3gnLCAnJyk7IHJlY3QueC5iYXNlVmFsLnZhbHVlQXNTdHJpbmcgaXMgJzAnCitQQVNTIHJl
Y3Quc2V0QXR0cmlidXRlKCd4JywgJyAnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBp
cyAnMCcKK1BBU1MgcmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCAnZm9vJyk7IHJlY3QueC5iYXNlVmFs
LnZhbHVlQXNTdHJpbmcgaXMgJzAnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEwZm9v
Jyk7IHJlY3QueC5iYXNlVmFsLnZhbHVlQXNTdHJpbmcgaXMgJzAnCitQQVNTIHJlY3Quc2V0QXR0
cmlidXRlKCd4JywgJ3B4Jyk7IHJlY3QueC5iYXNlVmFsLnZhbHVlQXNTdHJpbmcgaXMgJzAnCitQ
QVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEwcHggJyk7IHJlY3QueC5iYXNlVmFsLnZhbHVl
QXNTdHJpbmcgaXMgJzAnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEwJSAnKTsgcmVj
dC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMCcKK1BBU1MgcmVjdC5zZXRBdHRyaWJ1dGUo
J3gnLCAnMTAgJSAnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMCcKK1BBU1Mg
cmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCAnMTAgJScpOyByZWN0LnguYmFzZVZhbC52YWx1ZUFzU3Ry
aW5nIGlzICcwJworUEFTUyByZWN0LnNldEF0dHJpYnV0ZSgneCcsICcxMCBweCAnKTsgcmVjdC54
LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMCcKK1BBU1MgcmVjdC5zZXRBdHRyaWJ1dGUoJ3gn
LCAnMTAgcHgnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMCcKK1BBU1MgcmVj
dC5zZXRBdHRyaWJ1dGUoJ3gnLCAnMTAnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBp
cyAnMTAnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEwJScpOyByZWN0LnguYmFzZVZh
bC52YWx1ZUFzU3RyaW5nIGlzICcxMCUnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4JywgJzEw
ZW0nKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMTBlbScKK1BBU1MgcmVjdC5z
ZXRBdHRyaWJ1dGUoJ3gnLCAnMTBleCcpOyByZWN0LnguYmFzZVZhbC52YWx1ZUFzU3RyaW5nIGlz
ICcxMGV4JworUEFTUyByZWN0LnNldEF0dHJpYnV0ZSgneCcsICcxMHB4Jyk7IHJlY3QueC5iYXNl
VmFsLnZhbHVlQXNTdHJpbmcgaXMgJzEwcHgnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4Jywg
JzEwY20nKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMTBjbScKK1BBU1MgcmVj
dC5zZXRBdHRyaWJ1dGUoJ3gnLCAnMTBtbScpOyByZWN0LnguYmFzZVZhbC52YWx1ZUFzU3RyaW5n
IGlzICcxMG1tJworUEFTUyByZWN0LnNldEF0dHJpYnV0ZSgneCcsICcxMHB0Jyk7IHJlY3QueC5i
YXNlVmFsLnZhbHVlQXNTdHJpbmcgaXMgJzEwcHQnCitQQVNTIHJlY3Quc2V0QXR0cmlidXRlKCd4
JywgJzEwcGMnKTsgcmVjdC54LmJhc2VWYWwudmFsdWVBc1N0cmluZyBpcyAnMTBwYycKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2ludmFsaWQtbGVuZ3RoLXVuaXRzLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL2ludmFsaWQtbGVuZ3RoLXVuaXRzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5MDk5YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3N2Zy9jdXN0b20vaW52YWxpZC1sZW5ndGgtdW5pdHMuaHRtbApAQCAtMCwwICsxLDEz
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9pbnZhbGlkLWxlbmd0aC11bml0cy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20v
c2NyaXB0LXRlc3RzL2ludmFsaWQtbGVuZ3RoLXVuaXRzLmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2N1
c3RvbS9zY3JpcHQtdGVzdHMvaW52YWxpZC1sZW5ndGgtdW5pdHMuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3ZjVjMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N2Zy9jdXN0b20vc2NyaXB0LXRlc3RzL2ludmFsaWQtbGVuZ3RoLXVuaXRzLmpzCkBAIC0w
LDAgKzEsNDAgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBoYW5kbGluZyBvZiBpbnZhbGlkIFNWRyBs
ZW5ndGggdW5pdHMuIik7CisKK3ZhciBzdmdOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyI7CisKK3ZhciBzdmdSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCAic3Zn
Iik7Citkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnUm9vdCk7CisKK3Jl
Y3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsICJyZWN0Iik7CitzdmdSb290LmFw
cGVuZENoaWxkKHJlY3QpOworCitmdW5jdGlvbiB0cnlTZXR0aW5nTGVuZ3RoKGxlbmd0aCwgZXhw
ZWN0ZWQpCit7CisgICAgcmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCAiMTIzNCIpOworICAgIHNob3Vs
ZEJlKCJyZWN0LnNldEF0dHJpYnV0ZSgneCcsICciICsgbGVuZ3RoICsgIicpOyByZWN0LnguYmFz
ZVZhbC52YWx1ZUFzU3RyaW5nIiwgZXhwZWN0ZWQpOworfQorCit0cnlTZXR0aW5nTGVuZ3RoKCIi
LCAiJzAnIik7Cit0cnlTZXR0aW5nTGVuZ3RoKCIgIiwgIicwJyIpOwordHJ5U2V0dGluZ0xlbmd0
aCgiZm9vIiwgIicwJyIpOwordHJ5U2V0dGluZ0xlbmd0aCgiMTBmb28iLCAiJzAnIik7Cit0cnlT
ZXR0aW5nTGVuZ3RoKCJweCIsICInMCciKTsKK3RyeVNldHRpbmdMZW5ndGgoIjEwcHggIiwgIicw
JyIpOwordHJ5U2V0dGluZ0xlbmd0aCgiMTAlICIsICInMCciKTsKK3RyeVNldHRpbmdMZW5ndGgo
IjEwICUgIiwgIicwJyIpOwordHJ5U2V0dGluZ0xlbmd0aCgiMTAgJSIsICInMCciKTsKK3RyeVNl
dHRpbmdMZW5ndGgoIjEwIHB4ICIsICInMCciKTsKK3RyeVNldHRpbmdMZW5ndGgoIjEwIHB4Iiwg
IicwJyIpOwordHJ5U2V0dGluZ0xlbmd0aCgiMTAiLCAiJzEwJyIpOwordHJ5U2V0dGluZ0xlbmd0
aCgiMTAlIiwgIicxMCUnIik7Cit0cnlTZXR0aW5nTGVuZ3RoKCIxMGVtIiwgIicxMGVtJyIpOwor
dHJ5U2V0dGluZ0xlbmd0aCgiMTBleCIsICInMTBleCciKTsKK3RyeVNldHRpbmdMZW5ndGgoIjEw
cHgiLCAiJzEwcHgnIik7Cit0cnlTZXR0aW5nTGVuZ3RoKCIxMGNtIiwgIicxMGNtJyIpOwordHJ5
U2V0dGluZ0xlbmd0aCgiMTBtbSIsICInMTBtbSciKTsKK3RyeVNldHRpbmdMZW5ndGgoIjEwcHQi
LCAiJzEwcHQnIik7Cit0cnlTZXR0aW5nTGVuZ3RoKCIxMHBjIiwgIicxMHBjJyIpOworCitkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoc3ZnUm9vdCk7CisKK3ZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAzODg1ZGFkLi43MmVkNmVkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEw
LTA5LTI0ICBBbmRyZWFzIEtsaW5nICA8YW5kcmVhcy5rbGluZ0Bub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU1ZHOiBNYWtlIFNWR0xl
bmd0aCdzIHN0cmluZ1RvTGVuZ3RoVHlwZSgpIHN0cmljdGVyIGFuZCBmYXN0ZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2MDY2CisKKyAgICAgICAg
T25seSBhY2NlcHQgdW5pdCBuYW1lcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIG51bWVyaWMg
dmFsdWUuCisgICAgICAgIFRoaXMgYmVoYXZpb3IgbWF0Y2hlcyBHZWNrby4KKworICAgICAgICBB
bHNvLCB1c2luZyBTdHJpbmc6OmVuZHNXaXRoKCJmb28iKSBjYXVzZWQgYSB0ZW1wb3JhcnkgV1RG
OjpTdHJpbmcgdG8gYmUgY3JlYXRlZC4KKyAgICAgICAgQXZvaWQgdGhpcyBieSBjb21wYXJpbmcg
Y2hhcmFjdGVycyBkaXJlY3RseS4KKworICAgICAgICAxMC41JSBzcGVlZHVwIG9uIDxodHRwOi8v
ZGF0YS54ZW9oLm5ldC9zdmcuYmVuY2htYXJrLz4KKworICAgICAgICBUZXN0OiBzdmcvY3VzdG9t
L2ludmFsaWQtbGVuZ3RoLXVuaXRzLmh0bWwKKworICAgICAgICAqIHN2Zy9TVkdMZW5ndGguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c3RyaW5nVG9MZW5ndGhUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0xlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyk6CisKIDIwMTAtMDktMjQgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwIGIvV2ViQ29yZS9zdmcvU1ZH
TGVuZ3RoLmNwcAppbmRleCBiZGQ1YjI3Li5hOGNmYjRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2
Zy9TVkdMZW5ndGguY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAKQEAgLTg2LDI4
ICs4Niw0MSBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBsZW5ndGhUeXBlVG9TdHJpbmcoU1ZHTGVu
Z3RoVHlwZSB0eXBlKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotaW5saW5lIFNWR0xlbmd0
aFR5cGUgc3RyaW5nVG9MZW5ndGhUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoraW5saW5lIFNW
R0xlbmd0aFR5cGUgc3RyaW5nVG9MZW5ndGhUeXBlKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBV
Q2hhciogZW5kKQogewotICAgIGlmIChzdHJpbmcuZW5kc1dpdGgoIiUiKSkKLSAgICAgICAgcmV0
dXJuIExlbmd0aFR5cGVQZXJjZW50YWdlOwotICAgIGVsc2UgaWYgKHN0cmluZy5lbmRzV2l0aCgi
ZW0iKSkKKyAgICBpZiAocHRyID09IGVuZCkKKyAgICAgICAgcmV0dXJuIExlbmd0aFR5cGVOdW1i
ZXI7CisKKyAgICBjb25zdCBVQ2hhciBmaXJzdENoYXIgPSAqcHRyOworICAgICsrcHRyOworCisg
ICAgaWYgKGZpcnN0Q2hhciA9PSAnJScpIHsKKyAgICAgICAgaWYgKHB0ciA9PSBlbmQpCisgICAg
ICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZVBlcmNlbnRhZ2U7CisgICAgICAgIHJldHVybiBMZW5n
dGhUeXBlVW5rbm93bjsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciBzZWNvbmRDaGFyID0gKnB0
cjsKKworICAgIGlmICgrK3B0ciAhPSBlbmQpCisgICAgICAgIHJldHVybiBMZW5ndGhUeXBlVW5r
bm93bjsKKworICAgIGlmIChmaXJzdENoYXIgPT0gJ2UnICYmIHNlY29uZENoYXIgPT0gJ20nKQog
ICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZUVNUzsKLSAgICBlbHNlIGlmIChzdHJpbmcuZW5kc1dp
dGgoImV4IikpCisgICAgaWYgKGZpcnN0Q2hhciA9PSAnZScgJiYgc2Vjb25kQ2hhciA9PSAneCcp
CiAgICAgICAgIHJldHVybiBMZW5ndGhUeXBlRVhTOwotICAgIGVsc2UgaWYgKHN0cmluZy5lbmRz
V2l0aCgicHgiKSkKKyAgICBpZiAoZmlyc3RDaGFyID09ICdwJyAmJiBzZWNvbmRDaGFyID09ICd4
JykKICAgICAgICAgcmV0dXJuIExlbmd0aFR5cGVQWDsKLSAgICBlbHNlIGlmIChzdHJpbmcuZW5k
c1dpdGgoImNtIikpCisgICAgaWYgKGZpcnN0Q2hhciA9PSAnYycgJiYgc2Vjb25kQ2hhciA9PSAn
bScpCiAgICAgICAgIHJldHVybiBMZW5ndGhUeXBlQ007Ci0gICAgZWxzZSBpZiAoc3RyaW5nLmVu
ZHNXaXRoKCJtbSIpKQorICAgIGlmIChmaXJzdENoYXIgPT0gJ20nICYmIHNlY29uZENoYXIgPT0g
J20nKQogICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZU1NOwotICAgIGVsc2UgaWYgKHN0cmluZy5l
bmRzV2l0aCgiaW4iKSkKKyAgICBpZiAoZmlyc3RDaGFyID09ICdpJyAmJiBzZWNvbmRDaGFyID09
ICduJykKICAgICAgICAgcmV0dXJuIExlbmd0aFR5cGVJTjsKLSAgICBlbHNlIGlmIChzdHJpbmcu
ZW5kc1dpdGgoInB0IikpCisgICAgaWYgKGZpcnN0Q2hhciA9PSAncCcgJiYgc2Vjb25kQ2hhciA9
PSAndCcpCiAgICAgICAgIHJldHVybiBMZW5ndGhUeXBlUFQ7Ci0gICAgZWxzZSBpZiAoc3RyaW5n
LmVuZHNXaXRoKCJwYyIpKQorICAgIGlmIChmaXJzdENoYXIgPT0gJ3AnICYmIHNlY29uZENoYXIg
PT0gJ2MnKQogICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZVBDOwotICAgIGVsc2UgaWYgKCFzdHJp
bmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gTGVuZ3RoVHlwZU51bWJlcjsKIAogICAgIHJl
dHVybiBMZW5ndGhUeXBlVW5rbm93bjsKIH0KQEAgLTI2MCw4ICsyNzMsOCBAQCBib29sIFNWR0xl
bmd0aDo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIHMpCiAgICAgaWYgKCFwYXJzZU51
bWJlcihwdHIsIGVuZCwgY29udmVydGVkTnVtYmVyLCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFNWR0xlbmd0aFR5cGUgdHlwZSA9IHN0cmluZ1RvTGVuZ3RoVHlwZShzKTsK
LSAgICBpZiAocHRyICE9IGVuZCAmJiB0eXBlID09IExlbmd0aFR5cGVOdW1iZXIpCisgICAgU1ZH
TGVuZ3RoVHlwZSB0eXBlID0gc3RyaW5nVG9MZW5ndGhUeXBlKHB0ciwgZW5kKTsKKyAgICBpZiAo
dHlwZSA9PSBMZW5ndGhUeXBlVW5rbm93bikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
bV91bml0ID0gc3RvcmVVbml0KGV4dHJhY3RNb2RlKG1fdW5pdCksIHR5cGUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>