<?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>12171</bug_id>
          
          <creation_ts>2007-01-08 16:01:52 -0800</creation_ts>
          <short_desc>Remove &quot;points&quot; hack from SVGPolyElement</short_desc>
          <delta_ts>2008-07-20 13:50:46 -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>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>20051</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>a.neumann</cc>
    
    <cc>koivisto</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>36234</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-08 16:01:52 -0800</bug_when>
    <thetext>SVGPolyElement has a grotesque hack in order to enable getAttribute(&quot;points&quot;) working correctly.

We have to be able to come up with a nicer solution:

void SVGPolyElement::notifyAttributeChange() const
{
    if (m_ignoreAttributeChanges || ownerDocument()-&gt;parsing())
        return;

    m_ignoreAttributeChanges = true;
    SVGStyledElement::notifyAttributeChange();

    ExceptionCode ec = 0;

    // Spec: Additionally, the &apos;points&apos; attribute on the original element
    // accessed via the XML DOM (e.g., using the getAttribute() method call)
    // will reflect any changes made to points.
    String _points;
    int len = points()-&gt;numberOfItems();
    for (int i = 0; i &lt; len; ++i) {
        FloatPoint p = points()-&gt;getItem(i, ec);
        _points += String::format(&quot;%.6lg %.6lg &quot;, p.x(), p.y());
    }
    
    RefPtr&lt;Attr&gt; attr = const_cast&lt;SVGPolyElement*&gt;(this)-&gt;getAttributeNode(SVGNames::pointsAttr.localName());
    if (attr) {
        ExceptionCode ec = 0;
        attr-&gt;setValue(_points, ec);
    }

    m_ignoreAttributeChanges = false;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36235</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-08 16:05:59 -0800</bug_when>
    <thetext>I&apos;m told the &quot;style&quot; attribute has a system in place to do this automatic regeneration as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7819</commentid>
    <comment_count>2</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-06-12 10:27:34 -0700</bug_when>
    <thetext>This still needs to be fixed, but low prio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80824</commentid>
    <comment_count>3</comment_count>
      <attachid>21215</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2008-05-17 10:31:31 -0700</bug_when>
    <thetext>Created attachment 21215
First attempt

In order to remove the hack I propose what I did in the patch, ie. change Attribute::value so that you can compute the value on the fly in cases where
it needs to be synced to some dom datastructure. I also applied it to path since
it needs the same mechanism for path data.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81027</commentid>
    <comment_count>4</comment_count>
      <attachid>21215</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-05-20 14:04:50 -0700</bug_when>
    <thetext>Comment on attachment 21215
First attempt

A few comments:

1.  Do the tests pass already?  If so, you should feel free to land them even before you complete this patch as is.

2.  Ideally the tests would use the js-pre stuff in fast/js/resources  We try to use those common &quot;shouldBe&quot; functions, etc. in all new tests.  I know that could get kinda tricky with these being SVG tests.  I eventually had planned to augment the JS testing system to allow js-only svg tests.  (where they would correctly use an SVG template instead of an html template).

3.  I&apos;m not sure it&apos;s OK to make Attribute::value virtual.  You should ask hyatt or mjs.  I have performance concerns about such a basic function being virtual.

+                RefPtr&lt;SVGPathSeg&gt; seg = path-&gt;pathSegList()-&gt;getItem(i, ec);
+                d += seg-&gt;toString();
+                if (++i == len) break;

+= is a slow way to build strings.  I think we have a Vector&lt;UChar&gt; way to build strings these days.  Or possibly a StringBuilder class, not sure.

Also, the if/break line needs a return before the break.

Again, slow:
+                points += String::format(&quot;%.6lg %.6lg&quot;, p.x(), p.y());
+                if (++i == len) break;

You could preallocate a buffer large enough for the entire string pretty easily.

r- for the perf concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86243</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-07-17 11:06:08 -0700</bug_when>
    <thetext>Easy implementable for me after 20051 landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86429</commentid>
    <comment_count>6</comment_count>
      <attachid>22383</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-07-19 16:17:49 -0700</bug_when>
    <thetext>Created attachment 22383
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86496</commentid>
    <comment_count>7</comment_count>
      <attachid>22383</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-07-20 13:44:51 -0700</bug_when>
    <thetext>Comment on attachment 22383
Initial patch

r=me, i&apos;d like a bug filed on slow SVGPointList::valueAsString tough</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86499</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-07-20 13:50:46 -0700</bug_when>
    <thetext>Landed in r35254. Bug 20120 filed for slow impl. of valueAsString().</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21215</attachid>
            <date>2008-05-17 10:31:31 -0700</date>
            <delta_ts>2008-07-19 16:17:49 -0700</delta_ts>
            <desc>First attempt</desc>
            <filename>12171.diff</filename>
            <type>text/plain</type>
            <size>16911</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMzU1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDgtMDUtMTcgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3MQorICAgICAgICBSZW1vdmUgInBvaW50
cyIgaGFjayBmcm9tIFNWR1BvbHlFbGVtZW50CisKKyAgICAgICAgQ3JlYXRlIHNwZWNpYWwgQXR0
cmlidXRlIGNsYXNzZXMgdG8gc3luYyBhdHRyaWJ1dGUKKyAgICAgICAgd2l0aCB0aGUgcG9seWxp
bmUgcG9pbnRzIGxpc3QgYW5kIHBhdGggc2VnbWVudCBsaXN0LgorCisgICAgICAgIFRlc3RzOiBz
dmcvY3VzdG9tL3BhdGgtZGF0YS1hdHRyaWJ1dGUtY2hhbmdlcy5zdmcKKyAgICAgICAgICAgICAg
IHN2Zy9jdXN0b20vcG9seS1wb2ludHMtYXR0cmlidXRlLWNoYW5nZXMuc3ZnCisKKyAgICAgICAg
KiBkb20vQXR0cmlidXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGU6OkF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGU6OnZhbHVlKToKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhTZWdMaXN0QXR0cmli
dXRlOjpQYXRoU2VnTGlzdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoU2VnTGlz
dEF0dHJpYnV0ZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNy
ZWF0ZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVt
ZW50OjpTVkdQb2x5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRzQXR0cmlidXRl
OjpQb2ludHNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRzQXR0cmlidXRlOjp2
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6Y3JlYXRlQXR0cmlidXRl
KToKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuaDoKKwogMjAwOC0wNS0xNiAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1p
dHouCkluZGV4OiBXZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9BdHRyaWJ1dGUuaAkocmV2aXNpb24gMzM1NTIpCisrKyBXZWJDb3JlL2RvbS9BdHRyaWJ1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTYgKzQ4LDE2IEBAIGNsYXNzIEF0dHJpYnV0ZSA6
IHB1YmxpYyBSZWZDb3VudGVkPEF0dHIKIHB1YmxpYzoKICAgICAvLyBudWxsIHZhbHVlIGlzIGZv
cmJpZGRlbiAhCiAgICAgQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUpCi0gICAgICAgIDogUmVmQ291bnRlZDxBdHRyaWJ1dGU+KDAp
LCBtX25hbWUobmFtZSksIG1fdmFsdWUodmFsdWUpLCBtX2ltcGwoMCkKKyAgICAgICAgOiBSZWZD
b3VudGVkPEF0dHJpYnV0ZT4oMCksIG1fdmFsdWUodmFsdWUpLCBtX25hbWUobmFtZSksIG1faW1w
bCgwKQogICAgIHt9CiAgICAgCiAgICAgQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgOiBSZWZDb3VudGVkPEF0dHJp
YnV0ZT4oMCksIG1fbmFtZShudWxsQXRvbSwgbmFtZSwgbnVsbEF0b20pLCBtX3ZhbHVlKHZhbHVl
KSwgbV9pbXBsKDApCisgICAgICAgIDogUmVmQ291bnRlZDxBdHRyaWJ1dGU+KDApLCBtX3ZhbHVl
KHZhbHVlKSwgbV9uYW1lKG51bGxBdG9tLCBuYW1lLCBudWxsQXRvbSksIG1faW1wbCgwKQogICAg
IHt9CiAKICAgICB2aXJ0dWFsIH5BdHRyaWJ1dGUoKSB7IH0KICAgICAKLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5wcmVm
aXgoKTsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lLmxvY2FsTmFtZSgpOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkoKSBjb25zdCB7IHJldHVybiBtX25hbWUubmFtZXNwYWNlVVJJKCk7IH0KQEAgLTc4LDkg
Kzc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9CiAgICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRv
bWljU3RyaW5nJiBwcmVmaXgpIHsgbV9uYW1lLnNldFByZWZpeChwcmVmaXgpOyB9CiAKK3Byb3Rl
Y3RlZDoKKyAgICBtdXRhYmxlIEF0b21pY1N0cmluZyBtX3ZhbHVlOworCiBwcml2YXRlOgogICAg
IFF1YWxpZmllZE5hbWUgbV9uYW1lOwotICAgIEF0b21pY1N0cmluZyBtX3ZhbHVlOwogICAgIEF0
dHIqIG1faW1wbDsKIH07CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDMz
NTUyKQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApA
QCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXQKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkQXR0cikgewogICAgICAgICBF
eGNlcHRpb25Db2RlIGVjOwogICAgICAgICBwYXRoU2VnTGlzdCgpLT5jbGVhcihlYyk7Ci0gICAg
ICAgIGlmICghcGF0aFNlZ0xpc3RGcm9tU1ZHRGF0YShwYXRoU2VnTGlzdCgpLCBhdHRyLT52YWx1
ZSgpLCB0cnVlKSkKKyAgICAgICAgaWYgKCFwYXRoU2VnTGlzdEZyb21TVkdEYXRhKHBhdGhTZWdM
aXN0KCksIGF0dHItPk1hcHBlZEF0dHJpYnV0ZTo6dmFsdWUoKSwgdHJ1ZSkpCiAgICAgICAgICAg
ICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJQcm9ibGVt
IHBhcnNpbmcgZD1cIiIgKyBhdHRyLT52YWx1ZSgpICsgIlwiIik7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyKSB7CiAgICAgICAgIG1fcGF0
aExlbmd0aCA9IGF0dHItPnZhbHVlKCkudG9GbG9hdCgpOwpAQCAtMjM5LDYgKzIzOSw0OCBAQCBQ
YXRoIFNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKICAgICByZXR1cm4gcGF0aFNl
Z0xpc3QoKS0+dG9QYXRoRGF0YSgpOwogfQogCitjbGFzcyBQYXRoU2VnTGlzdEF0dHJpYnV0ZSA6
IHB1YmxpYyBNYXBwZWRBdHRyaWJ1dGUKK3sKK3B1YmxpYzoKKyAgICBQYXRoU2VnTGlzdEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KQorICAgICAgICA6IE1hcHBlZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkKKyAgICB7fQorCisgICAg
UGF0aFNlZ0xpc3RBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQorICAgICAgICA6IE1hcHBlZEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUp
CisgICAge30KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoYXR0cigpICYmIGF0dHIoKS0+b3duZXJFbGVtZW50KCkpIHsK
KyAgICAgICAgICAgIC8vIFNwZWM6IEFkZGl0aW9uYWxseSwgdGhlICdkJyBhdHRyaWJ1dGUgb24g
dGhlICdwYXRoJyBlbGVtZW50CisgICAgICAgICAgICAvLyBhY2Nlc3NlZCB2aWEgdGhlIFhNTCBE
T00gKGUuZy4sIHVzaW5nIHRoZSBnZXRBdHRyaWJ1dGUoKSBtZXRob2QgY2FsbCkKKyAgICAgICAg
ICAgIC8vIHdpbGwgcmVmbGVjdCBhbnkgY2hhbmdlcyBtYWRlIHRvIHBhdGhTZWdMaXN0IG9yIG5v
cm1hbGl6ZWRQYXRoU2VnTGlzdC4KKyAgICAgICAgICAgIFN0cmluZyBkOworICAgICAgICAgICAg
QVNTRVJUKGF0dHIoKS0+b3duZXJFbGVtZW50KCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdGhU
YWcpKTsKKyAgICAgICAgICAgIFNWR1BhdGhFbGVtZW50KiBwYXRoID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aEVsZW1lbnQqPihhdHRyKCktPm93bmVyRWxlbWVudCgpKTsKKyAgICAgICAgICAgIGludCBs
ZW4gPSBwYXRoLT5wYXRoU2VnTGlzdCgpLT5udW1iZXJPZkl0ZW1zKCk7CisgICAgICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwO2kgPCBsZW47
KSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFNWR1BhdGhTZWc+IHNlZyA9IHBhdGgtPnBhdGhT
ZWdMaXN0KCktPmdldEl0ZW0oaSwgZWMpOworICAgICAgICAgICAgICAgIGQgKz0gc2VnLT50b1N0
cmluZygpOworICAgICAgICAgICAgICAgIGlmICgrK2kgPT0gbGVuKSBicmVhazsKKyAgICAgICAg
ICAgICAgICBkICs9ICIgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fdmFsdWUgPSBk
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KK307CisKK0F0dHJp
YnV0ZSogU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQoreworICAgIGlmIChuYW1lID09IFNW
R05hbWVzOjpkQXR0cikKKyAgICAgICAgcmV0dXJuIG5ldyBQYXRoU2VnTGlzdEF0dHJpYnV0ZShu
YW1lLCB2YWx1ZSk7CisKKyAgICByZXR1cm4gU1ZHU3R5bGVkRWxlbWVudDo6Y3JlYXRlQXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMzM1NTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRo
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMTAwLDYgKzEwMCw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNYXJrZXJzKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCisgICAgICAgIHZpcnR1YWwgQXR0cmlidXRlKiBjcmVhdGVBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSk7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR1BvbHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQb2x5
RWxlbWVudC5jcHAJKHJldmlzaW9uIDMzNTUyKQorKysgV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKQEAgLTQwLDcg
KzQxLDYgQEAgU1ZHUG9seUVsZW1lbnQ6OlNWR1BvbHlFbGVtZW50KGNvbnN0IFF1YQogICAgICwg
U1ZHTGFuZ1NwYWNlKCkKICAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQogICAg
ICwgU1ZHQW5pbWF0ZWRQb2ludHMoKQotICAgICwgbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzKGZh
bHNlKQogewogfQogCkBAIC02NCw3ICs2NCw3IEBAIFNWR1BvaW50TGlzdCogU1ZHUG9seUVsZW1l
bnQ6OmFuaW1hdGVkUG8KIAogdm9pZCBTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRy
LT5NYXBwZWRBdHRyaWJ1dGU6OnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6cG9pbnRzQXR0cikgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAg
ICAgcG9pbnRzKCktPmNsZWFyKGVjKTsKQEAgLTg2LDQ0ICs4Niw2MCBAQCB2b2lkIFNWR1BvbHlF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAKIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgaWYg
KG1faWdub3JlQXR0cmlidXRlQ2hhbmdlcykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
CiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsKLSAgICAgICAgbV9pZ25vcmVBdHRyaWJ1dGVD
aGFuZ2VzID0gdHJ1ZTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIg
fHwKKyAgICAgICAgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8CisgICAg
ICAgIFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwKKyAgICAgICAg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkg
fHwKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1
dGUoYXR0ck5hbWUpKQogICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsK
K30KIAotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQotICAgICAgICAvLyBTcGVjOiBB
ZGRpdGlvbmFsbHksIHRoZSAncG9pbnRzJyBhdHRyaWJ1dGUgb24gdGhlIG9yaWdpbmFsIGVsZW1l
bnQKLSAgICAgICAgLy8gYWNjZXNzZWQgdmlhIHRoZSBYTUwgRE9NIChlLmcuLCB1c2luZyB0aGUg
Z2V0QXR0cmlidXRlKCkgbWV0aG9kIGNhbGwpCi0gICAgICAgIC8vIHdpbGwgcmVmbGVjdCBhbnkg
Y2hhbmdlcyBtYWRlIHRvIHBvaW50cy4KLSAgICAgICAgU3RyaW5nIF9wb2ludHM7Ci0gICAgICAg
IGludCBsZW4gPSBwb2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHAgPSBwb2ludHMo
KS0+Z2V0SXRlbShpLCBlYyk7Ci0gICAgICAgICAgICBfcG9pbnRzICs9IFN0cmluZzo6Zm9ybWF0
KCIlLjZsZyAlLjZsZyAiLCBwLngoKSwgcC55KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KFJlZlB0cjxBdHRyPiBhdHRyID0gY29uc3RfY2FzdDxTVkdQb2x5RWxlbWVudCo+KHRoaXMpLT5n
ZXRBdHRyaWJ1dGVOb2RlKFNWR05hbWVzOjpwb2ludHNBdHRyLmxvY2FsTmFtZSgpKSkgeworY2xh
c3MgUG9pbnRzQXR0cmlidXRlIDogcHVibGljIE1hcHBlZEF0dHJpYnV0ZQoreworcHVibGljOgor
ICAgIFBvaW50c0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQorICAgICAgICA6IE1hcHBlZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkK
KyAgICB7fQorCisgICAgUG9pbnRzQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgOiBNYXBwZWRBdHRyaWJ1dGUoIG5h
bWUsIHZhbHVlKQorICAgIHt9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGF0dHIoKSAmJiBhdHRyKCktPm93bmVyRWxl
bWVudCgpKSB7CisgICAgICAgICAgICAvLyBTcGVjOiBBZGRpdGlvbmFsbHksIHRoZSAncG9pbnRz
JyBhdHRyaWJ1dGUgb24gdGhlIG9yaWdpbmFsIGVsZW1lbnQKKyAgICAgICAgICAgIC8vIGFjY2Vz
c2VkIHZpYSB0aGUgWE1MIERPTSAoZS5nLiwgdXNpbmcgdGhlIGdldEF0dHJpYnV0ZSgpIG1ldGhv
ZCBjYWxsKQorICAgICAgICAgICAgLy8gd2lsbCByZWZsZWN0IGFueSBjaGFuZ2VzIG1hZGUgdG8g
cG9pbnRzLgorICAgICAgICAgICAgU3RyaW5nIHBvaW50czsKKyAgICAgICAgICAgIEFTU0VSVChh
dHRyKCktPm93bmVyRWxlbWVudCgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpwb2x5bGluZVRhZykg
fHwKKyAgICAgICAgICAgICAgICAgICAgYXR0cigpLT5vd25lckVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6cG9seWdvblRhZykpOworICAgICAgICAgICAgU1ZHUG9seUVsZW1lbnQqIHBv
bHkgPSBzdGF0aWNfY2FzdDxTVkdQb2x5RWxlbWVudCo+KGF0dHIoKS0+b3duZXJFbGVtZW50KCkp
OworICAgICAgICAgICAgaW50IGxlbiA9IHBvbHktPnBvaW50cygpLT5udW1iZXJPZkl0ZW1zKCk7
CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIGF0dHItPnNl
dFZhbHVlKF9wb2ludHMsIGVjKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwO2kgPCBsZW47
KSB7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwID0gcG9seS0+cG9pbnRzKCktPmdldEl0
ZW0oaSwgZWMpOworICAgICAgICAgICAgICAgIHBvaW50cyArPSBTdHJpbmc6OmZvcm1hdCgiJS42
bGcgJS42bGciLCBwLngoKSwgcC55KCkpOworICAgICAgICAgICAgICAgIGlmICgrK2kgPT0gbGVu
KSBicmVhazsKKyAgICAgICAgICAgICAgICBwb2ludHMgKz0gIiAiOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbV92YWx1ZSA9IHBvaW50czsKICAgICAgICAgfQotCi0gICAgICAgIG1faWdu
b3JlQXR0cmlidXRlQ2hhbmdlcyA9IGZhbHNlOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlOwogICAgIH0KK307CiAKLSAgICBpZiAoU1ZHVGVzdHM6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpIHx8Ci0gICAgICAgIFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkgfHwKLSAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQotICAgICAgICByZW5kZXJlcigp
LT5zZXROZWVkc0xheW91dCh0cnVlKTsKK0F0dHJpYnV0ZSogU1ZHUG9seUVsZW1lbnQ6OmNyZWF0
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlKQoreworICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpwb2ludHNBdHRyKQorICAgICAg
ICByZXR1cm4gbmV3IFBvaW50c0F0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CisKKyAgICByZXR1cm4g
U1ZHU3R5bGVkRWxlbWVudDo6Y3JlYXRlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAogfQpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdQb2x5RWxlbWVudC5oCShyZXZpc2lvbiAzMzU1MikKKysrIFdlYkNvcmUvc3ZnL1NW
R1BvbHlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC01MiwxMSArNTIsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQo
c3R5bGUpOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01hcmtlcnMoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAKKyAgICAgICAgdmlydHVhbCBBdHRyaWJ1dGUqIGNyZWF0ZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIGJvb2wgbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzIDogMTsKICAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHUG9pbnRMaXN0PiBtX3BvaW50czsKIAogICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9GT1JXQVJEX0RFQ0xBUkFUSU9OUyhTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBi
b29sLCBFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMzM1NTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwOC0wNS0xNyAgUm9iIEJ1aXMgIDxidWlz
QGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdGNhc2VzIGZvcjoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMTcxCisgICAgICAgIFJlbW92ZSAicG9pbnRzIiBoYWNrIGZyb20gU1ZHUG9s
eUVsZW1lbnQKKworICAgICAgICAqIHN2Zy9jdXN0b20vcGF0aC1kYXRhLWF0dHJpYnV0ZS1jaGFu
Z2VzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wYXRoLWRhdGEt
YXR0cmlidXRlLWNoYW5nZXMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3BvbHkt
cG9pbnRzLWF0dHJpYnV0ZS1jaGFuZ2VzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
c3ZnL2N1c3RvbS9wb2x5LXBvaW50cy1hdHRyaWJ1dGUtY2hhbmdlcy5zdmc6IEFkZGVkLgorCiAy
MDA4LTA1LTE2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbmRlcnMuCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BhdGgtZGF0
YS1hdHRyaWJ1dGUtY2hhbmdlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9wYXRoLWRhdGEtYXR0cmlidXRlLWNoYW5nZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wYXRoLWRhdGEtYXR0cmlidXRl
LWNoYW5nZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1NVQ0NF
U1MKKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wYXRoLWRhdGEtYXR0cmlidXRlLWNo
YW5nZXMuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcGF0aC1kYXRh
LWF0dHJpYnV0ZS1jaGFuZ2VzLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9j
dXN0b20vcGF0aC1kYXRhLWF0dHJpYnV0ZS1jaGFuZ2VzLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzdmcg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBvbmxvYWQ9InJ1blRlc3QoKSI+Cisg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgPCFbQ0RBVEFbCisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKworICAgIGZ1bmN0aW9uIGxvZyhzdHJpbmcpIHsKKyAgICAgIHZhciBuZXdE
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiLCAiZGl2Iik7CisgICAgICBuZXdEaXYudGV4dENvbnRlbnQgPSBzdHJpbmc7CisgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJykuYXBwZW5kQ2hpbGQobmV3RGl2KTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICB2YXIgcGF0aCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwYXRoIik7CisgICAgICB2YXIgYXR0ciA9IHBhdGguZ2V0QXR0
cmlidXRlTm9kZSgiZCIpOworICAgICAgaWYgKGF0dHIudmFsdWUgIT0gIk0gMCAwIEwgMTAgMTAi
KSB7CisgICAgICAgIGxvZygiRkFJTFVSRSIpOworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgICBwYXRoLnNldEF0dHJpYnV0ZSgiZCIsICJNIDEwIDAgTCAxMCAxMCIpOworICAgICAgaWYg
KGF0dHIudmFsdWUgIT0gIk0gMTAgMCBMIDEwIDEwIikgeworICAgICAgICBsb2coIkZBSUxVUkUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdmFyIHBhdGhMaXN0ID0gcGF0aC5w
YXRoU2VnTGlzdDsKKyAgICAgIHBhdGhMaXN0LmFwcGVuZEl0ZW0ocGF0aC5jcmVhdGVTVkdQYXRo
U2VnTGluZXRvQWJzKDIwLCAyMCkpOworICAgICAgaWYgKGF0dHIudmFsdWUgIT0gIk0gMTAgMCBM
IDEwIDEwIEwgMjAgMjAiKSB7CisgICAgICAgIGxvZygiRkFJTFVSRSIpOworICAgICAgICByZXR1
cm47CisgICAgICB9CisgICAgICBsb2coIlNVQ0NFU1MiKTsKKyAgICB9CisgIF1dPgorICA8L3Nj
cmlwdD4KKyAgPGZvcmVpZ25PYmplY3QgeT0iMjAwIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjQwMCI+
CisgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAgICA8Ym9k
eT4KKyAgICAgIDxkaXYgaWQ9ImxvZyI+CisgICAgICA8L2Rpdj4KKyAgICA8L2JvZHk+CisgIDwv
aHRtbD4KKyAgPC9mb3JlaWduT2JqZWN0PgorICA8cGF0aCBpZD0icGF0aCIgZD0iTSAwIDAgTCAx
MCAxMCIvPgorPC9zdmc+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvbHktcG9pbnRz
LWF0dHJpYnV0ZS1jaGFuZ2VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9zdmcvY3VzdG9tL3BvbHktcG9pbnRzLWF0dHJpYnV0ZS1jaGFuZ2VzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcG9seS1wb2ludHMtYXR0cmli
dXRlLWNoYW5nZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1NV
Q0NFU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2x5LXBvaW50cy1hdHRyaWJ1
dGUtY2hhbmdlcy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2x5
LXBvaW50cy1hdHRyaWJ1dGUtY2hhbmdlcy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9zdmcvY3VzdG9tL3BvbHktcG9pbnRzLWF0dHJpYnV0ZS1jaGFuZ2VzLnN2ZwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgi
Pz4KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBvbmxvYWQ9InJ1blRl
c3QoKSI+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgPCFbQ0RBVEFbCisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIGZ1bmN0aW9uIGxvZyhzdHJpbmcpIHsKKyAgICAg
IHZhciBuZXdEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiLCAiZGl2Iik7CisgICAgICBuZXdEaXYudGV4dENvbnRlbnQgPSBzdHJpbmc7
CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJykuYXBwZW5kQ2hpbGQobmV3RGl2
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICB2YXIgcG9s
eWxpbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9seSIpOworICAgICAgdmFyIGF0dHIg
PSBwb2x5bGluZS5nZXRBdHRyaWJ1dGVOb2RlKCJwb2ludHMiKTsKKyAgICAgIGlmIChhdHRyLnZh
bHVlICE9ICIwIDAgMTAgMTAiKSB7CisgICAgICAgIGxvZygiRkFJTFVSRSIpOworICAgICAgICBy
ZXR1cm47CisgICAgICB9CisgICAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoInBvaW50cyIsICIx
MCAwIDEwIDEwIik7CisgICAgICBpZiAoYXR0ci52YWx1ZSAhPSAiMTAgMCAxMCAxMCIpIHsKKyAg
ICAgICAgbG9nKCJGQUlMVVJFIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHZh
ciBwb2ludHMgPSBwb2x5bGluZS5wb2ludHM7CisgICAgICB2YXIgcG9pbnQgPSBkb2N1bWVudC5y
b290RWxlbWVudC5jcmVhdGVTVkdQb2ludCgpOworICAgICAgcG9pbnQueCA9IDIwOworICAgICAg
cG9pbnQueSA9IDIwOworICAgICAgcG9pbnRzLmFwcGVuZEl0ZW0ocG9pbnQpOworICAgICAgaWYg
KGF0dHIudmFsdWUgIT0gIjEwIDAgMTAgMTAgMjAgMjAiKSB7CisgICAgICAgIGxvZygiRkFJTFVS
RSIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBsb2coIlNVQ0NFU1MiKTsKKyAg
ICB9CisgIF1dPgorICA8L3NjcmlwdD4KKyAgPGZvcmVpZ25PYmplY3QgeT0iMjAwIiB3aWR0aD0i
NjAwIiBoZWlnaHQ9IjQwMCI+CisgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIj4KKyAgICA8Ym9keT4KKyAgICAgIDxkaXYgaWQ9ImxvZyI+CisgICAgICA8L2Rpdj4K
KyAgICA8L2JvZHk+CisgIDwvaHRtbD4KKyAgPC9mb3JlaWduT2JqZWN0PgorICA8cG9seWxpbmUg
aWQ9InBvbHkiIHBvaW50cz0iMCAwIDEwIDEwIi8+Cis8L3N2Zz4K
</data>
<flag name="review"
          id="9270"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22383</attachid>
            <date>2008-07-19 16:17:49 -0700</date>
            <delta_ts>2008-07-20 13:44:51 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>RemovePolyPointsHack.diff</filename>
            <type>text/plain</type>
            <size>9897</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNTI0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDgtMDctMTkgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTcx
CisKKyAgICAgICAgUmVtb3ZlIG1hbnVhbCBTVkcgcHJvcGVydHkgPC0+IFhNTCBhdHRyaWJ1dGUg
c3luY2hyb25pemF0aW9uIGluIFNWR1BvbHlFbGVtZW50LgorICAgICAgICBBZGRlZCBzdmcvY3Vz
dG9tL3BvbHktcG9pbnRzLWF0dHJpYnV0ZS1jaGFuZ2VzLnN2ZyAodGVzdGNhc2UgZnJvbSBSb2Ip
CisKKyAgICAgICAgKiBzdmcvU1ZHUG9pbnRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BvaW50TGlzdDo6dmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpjcmVhdGUpOgorICAgICAgICAqIHN2
Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6
U1ZHUG9seUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnVwZGF0
ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuaDoK
KwogMjAwOC0wNy0xOSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoQnVpbGQgZml4KS4KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Bv
aW50TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAko
cmV2aXNpb24gMzUyNDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFC
TEUoU1ZHKQotCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNyw2ICszNywyNCBAQCBTVkdQ
b2ludExpc3Q6On5TVkdQb2ludExpc3QoKQogewogfQogCitTdHJpbmcgU1ZHUG9pbnRMaXN0Ojp2
YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1iZXJP
Zkl0ZW1zKCk7ICsraSkgeworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICByZXN1bHQg
Kz0gIiAiOworCisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBnZXRJdGVtKGksIGVjKTsKKyAg
ICAgICAgQVNTRVJUKGVjID09IDApOworCisgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6OmZvcm1h
dCgiJS42bGcgJS42bGciLCBwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1BvaW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BvaW50
TGlzdC5oCShyZXZpc2lvbiAzNTI0OSkKKysrIFdlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisgICAgY2xhc3MgU3RyaW5nOworCiAgICAgY2xhc3MgU1ZHUG9pbnRMaXN0IDogcHVibGljIFNW
R1BPRExpc3Q8RmxvYXRQb2ludD4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHUG9pbnRMaXN0PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1BvaW50TGlzdChhdHRyaWJ1dGVOYW1lKSk7
IH0KLQogICAgICAgICB2aXJ0dWFsIH5TVkdQb2ludExpc3QoKTsKLSAgICAgICAgCisKKyAgICAg
ICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IFNWR1BvaW50TGlzdChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgfTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQ
b2x5RWxlbWVudC5jcHAJKHJldmlzaW9uIDM1MjQ5KQorKysgV2ViQ29yZS9zdmcvU1ZHUG9seUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5o
IgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHkuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlz
dC5oIgpAQCAtNDAsNyArNDEsNiBAQCBTVkdQb2x5RWxlbWVudDo6U1ZHUG9seUVsZW1lbnQoY29u
c3QgUXVhCiAgICAgLCBTVkdMYW5nU3BhY2UoKQogICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpCiAgICAgLCBTVkdBbmltYXRlZFBvaW50cygpCi0gICAgLCBtX2lnbm9yZUF0dHJp
YnV0ZUNoYW5nZXMoZmFsc2UpCiB7CiB9CiAKQEAgLTg2LDM2ICs4NiwxNCBAQCB2b2lkIFNWR1Bv
bHlFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAKIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
aWYgKG1faWdub3JlQXR0cmlidXRlQ2hhbmdlcykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogCiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsKLSAgICAgICAgbV9pZ25vcmVBdHRyaWJ1
dGVDaGFuZ2VzID0gdHJ1ZTsKKyAgICAgICAgc2V0U3luY2hyb25pemVkU1ZHQXR0cmlidXRlcyhm
YWxzZSk7CiAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwotCi0gICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotCi0gICAgICAgIC8vIFNwZWM6IEFkZGl0aW9uYWxs
eSwgdGhlICdwb2ludHMnIGF0dHJpYnV0ZSBvbiB0aGUgb3JpZ2luYWwgZWxlbWVudAotICAgICAg
ICAvLyBhY2Nlc3NlZCB2aWEgdGhlIFhNTCBET00gKGUuZy4sIHVzaW5nIHRoZSBnZXRBdHRyaWJ1
dGUoKSBtZXRob2QgY2FsbCkKLSAgICAgICAgLy8gd2lsbCByZWZsZWN0IGFueSBjaGFuZ2VzIG1h
ZGUgdG8gcG9pbnRzLgotICAgICAgICBTdHJpbmcgX3BvaW50czsKLSAgICAgICAgaW50IGxlbiA9
IHBvaW50cygpLT5udW1iZXJPZkl0ZW1zKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuOyArK2kpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcCA9IHBvaW50cygpLT5nZXRJdGVt
KGksIGVjKTsKLSAgICAgICAgICAgIF9wb2ludHMgKz0gU3RyaW5nOjpmb3JtYXQoIiUuNmxnICUu
NmxnICIsIHAueCgpLCBwLnkoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUmVmUHRyPEF0
dHI+IGF0dHIgPSBjb25zdF9jYXN0PFNWR1BvbHlFbGVtZW50Kj4odGhpcyktPmdldEF0dHJpYnV0
ZU5vZGUoU1ZHTmFtZXM6OnBvaW50c0F0dHIubG9jYWxOYW1lKCkpKSB7Ci0gICAgICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIGF0dHItPnNldFZhbHVlKF9wb2ludHMs
IGVjKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1faWdub3JlQXR0cmlidXRlQ2hhbmdlcyA9IGZh
bHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjYsNiArMTA0LDI3IEBAIHZvaWQg
U1ZHUG9seUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAgICAgICAgcmVuZGVyZXIoKS0+
c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKKy8vIEN1c3RvbSBTVkc8LT5YTUwgc3luY2hyb25p
emF0aW9uIGxvZ2ljLCBhcyBTVkdQb2x5KkVsZW1lbnQgZG9lc24ndCB1c2UgYW5pbWF0ZWQKKy8v
IHByb3BlcnRpZXMgZm9yIHRoaXMsIGJ1dCBhIHNwZWNpYWwgc29sdXRpb246IFNWR0FuaW1hdGVk
UG9pbnRzIGluaGVyaXRhbmNlLgordm9pZCBTVkdQb2x5RWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRT
VkdBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIEFTU0VSVCghbV9h
cmVTVkdBdHRyaWJ1dGVzVmFsaWQpOworCisgICAgaWYgKG1fc3luY2hyb25pemluZ1NWR0F0dHJp
YnV0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpwb2lu
dHNBdHRyLmxvY2FsTmFtZSgpKSB7CisgICAgICAgIG1fc3luY2hyb25pemluZ1NWR0F0dHJpYnV0
ZXMgPSB0cnVlOworCisgICAgICAgIHN5bmNocm9uaXplUHJvcGVydHk8U1ZHUG9seUVsZW1lbnQs
IFNWR1BvaW50TGlzdCo+KHRoaXMsIFNWR05hbWVzOjpwb2ludHNBdHRyLCBtX3BvaW50cy5nZXQo
KSk7CisgICAgICAgIHNldFN5bmNocm9uaXplZFNWR0F0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAg
IG1fc3luY2hyb25pemluZ1NWR0F0dHJpYnV0ZXMgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojp1cGRhdGVBbmltYXRl
ZFNWR0F0dHJpYnV0ZShuYW1lKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHUG9seUVsZW1lbnQuaAkocmV2aXNpb24gMzUyNDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdQ
b2x5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUqIHN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxl
KTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNYXJrZXJzKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBbmltYXRlZFNWR0F0dHJp
YnV0ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRo
aXM7IH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzUyNDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAwOC0wNy0xOSAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8emltbWVybWFubkBrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIxNzEKKworICAgICAgICBSZW1vdmUgbWFudWFsIFNWRyBwcm9wZXJ0
eSA8LT4gWE1MIGF0dHJpYnV0ZSBzeW5jaHJvbml6YXRpb24gaW4gU1ZHUG9seUVsZW1lbnQuCisg
ICAgICAgIEFkZGVkIHN2Zy9jdXN0b20vcG9seS1wb2ludHMtYXR0cmlidXRlLWNoYW5nZXMuc3Zn
ICh0ZXN0Y2FzZSBmcm9tIFJvYikKKworICAgICAgICAqIHBsYXRmb3JtL21hYy1sZW9wYXJkL3N2
Zy9jdXN0b20vcG9seS1wb2ludHMtYXR0cmlidXRlLWNoYW5nZXMtZXhwZWN0ZWQuY2hlY2tzdW06
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy1sZW9wYXJkL3N2Zy9jdXN0b20vcG9seS1w
b2ludHMtYXR0cmlidXRlLWNoYW5nZXMtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBz
dmcvY3VzdG9tL3BvbHktcG9pbnRzLWF0dHJpYnV0ZS1jaGFuZ2VzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9wb2x5LXBvaW50cy1hdHRyaWJ1dGUtY2hhbmdlcy5z
dmc6IEFkZGVkLgorCiAyMDA4LTA3LTE4ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2FtZXJvbiBad2FyaWNoLgpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLWxlb3BhcmQvc3ZnL2N1c3RvbS9wb2x5LXBvaW50cy1hdHRyaWJ1dGUt
Y2hhbmdlcy1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMtbGVvcGFyZC9zdmcvY3VzdG9tL3BvbHktcG9pbnRzLWF0dHJpYnV0ZS1jaGFuZ2Vz
LWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLWxlb3BhcmQvc3ZnL2N1c3RvbS9wb2x5LXBvaW50cy1hdHRyaWJ1dGUtY2hhbmdlcy1leHBl
Y3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorNzcyNWQ0NzRkZTZiZjk3
ZDA1YjdlNjFkMzMzMGUxMDQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL3BvbHktcG9pbnRzLWF0dHJpYnV0ZS1jaGFuZ2VzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvbHktcG9pbnRzLWF0
dHJpYnV0ZS1jaGFuZ2VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3N2Zy9jdXN0b20vcG9seS1wb2ludHMtYXR0cmlidXRlLWNoYW5nZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1NVQ0NFU1MKKwpJbmRleDogTGF5b3V0VGVzdHMv
c3ZnL2N1c3RvbS9wb2x5LXBvaW50cy1hdHRyaWJ1dGUtY2hhbmdlcy5zdmcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wb2x5LXBvaW50cy1hdHRyaWJ1dGUtY2hhbmdlcy5z
dmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BvbHktcG9pbnRzLWF0
dHJpYnV0ZS1jaGFuZ2VzLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorPHN2ZyB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIG9ubG9hZD0icnVuVGVzdCgpIj4KKyAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICA8IVtDREFUQVsKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworCisgICAgZnVuY3Rpb24gbG9nKHN0cmluZykgeworICAgICAgdmFyIG5ld0Rp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIsICJkaXYiKTsKKyAgICAgIG5ld0Rpdi50ZXh0Q29udGVudCA9IHN0cmluZzsKKyAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKS5hcHBlbmRDaGlsZChuZXdEaXYpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgIHsKKyAgICAgIHZhciBwb2x5bGluZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb2x5Iik7CisgICAgICB2YXIgYXR0ciA9IHBvbHlsaW5l
LmdldEF0dHJpYnV0ZU5vZGUoInBvaW50cyIpOworICAgICAgaWYgKGF0dHIudmFsdWUgIT0gIjAg
MCAxMCAxMCIpIHsKKyAgICAgICAgbG9nKCJGQUlMOiBJbml0aWFsICdwb2ludHMnIHZhbHVlIGRp
ZmZlcnMiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgcG9seWxpbmUuc2V0QXR0
cmlidXRlKCJwb2ludHMiLCAiMTAgMCAxMCAxMCIpOworICAgICAgaWYgKGF0dHIudmFsdWUgIT0g
IjEwIDAgMTAgMTAiKSB7CisgICAgICAgIGxvZygiRkFJTDogVXBkYXRpbmcgcG9pbnRzIGF0dHJp
YnV0ZSBmYWlsZWQsIGNoYW5nZXMgbm90IHJlZmxlY3RlZCBpbiBleGlzdGluZyAnQXR0cicgb2Jq
ZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHZhciBwb2ludHMgPSBwb2x5
bGluZS5wb2ludHM7CisgICAgICB2YXIgcG9pbnQgPSBkb2N1bWVudC5yb290RWxlbWVudC5jcmVh
dGVTVkdQb2ludCgpOworICAgICAgcG9pbnQueCA9IDIwOworICAgICAgcG9pbnQueSA9IDIwOwor
ICAgICAgcG9pbnRzLmFwcGVuZEl0ZW0ocG9pbnQpOworICAgICAgLy8gVGhlIGF0dHJpYnV0ZSBu
b2RlIGlzIG5vdCBpbiBzeW5jLCBzaG91bGQgdGhpcyBiZSBmaXhlZD8gT3BlcmEgaGFuZGxlcyBp
dCBsaWtlIHVzLgorICAgICAgaWYgKHBvbHlsaW5lLmdldEF0dHJpYnV0ZSgicG9pbnRzIikgIT0g
IjEwIDAgMTAgMTAgMjAgMjAiKSB7CisgICAgICAgIGxvZygiRkFJTDogTW9kaWZpY2F0aW9uIHZp
YSBTVkcgRE9NIG5vdCByZWZsZWN0ZWQgaW4gWE1MIERPTSIpOworICAgICAgICByZXR1cm47Cisg
ICAgICB9CisgICAgICBsb2coIlNVQ0NFU1MiKTsKKyAgICB9CisgIF1dPgorICA8L3NjcmlwdD4K
KyAgPGZvcmVpZ25PYmplY3QgeT0iMjAwIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjQwMCI+CisgIDxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAgICA8Ym9keT4KKyAg
ICAgIDxkaXYgaWQ9ImxvZyI+CisgICAgICA8L2Rpdj4KKyAgICA8L2JvZHk+CisgIDwvaHRtbD4K
KyAgPC9mb3JlaWduT2JqZWN0PgorICA8cG9seWxpbmUgaWQ9InBvbHkiIHBvaW50cz0iMCAwIDEw
IDEwIi8+Cis8L3N2Zz4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy1sZW9wYXJkL3N2
Zy9jdXN0b20vcG9seS1wb2ludHMtYXR0cmlidXRlLWNoYW5nZXMtZXhwZWN0ZWQucG5nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjpt
aW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy1sZW9wYXJkL3N2Zy9jdXN0b20vcG9seS1wb2ludHMt
YXR0cmlidXRlLWNoYW5nZXMtZXhwZWN0ZWQucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUt
dHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoK
</data>
<flag name="review"
          id="9867"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>