<?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>20667</bug_id>
          
          <creation_ts>2008-09-05 08:59:05 -0700</creation_ts>
          <short_desc>Animation of -webkit-transform matrix() function should not do linear interpolation</short_desc>
          <delta_ts>2008-09-08 15:52:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90274</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-05 08:59:05 -0700</bug_when>
    <thetext>Currently, the 6 components of the matrix() function are linearly interpolated. This causes simple rotations to grow and shrink as they animate and other problems. We should do decomposition of the matrix into scale, rotation, skew and translation components, then linearly interpolated, then recomposed into an affine transform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90275</commentid>
    <comment_count>1</comment_count>
      <attachid>23195</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-05 09:02:33 -0700</bug_when>
    <thetext>Created attachment 23195
Patch to fix bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90283</commentid>
    <comment_count>2</comment_count>
      <attachid>23195</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-05 10:33:49 -0700</bug_when>
    <thetext>Comment on attachment 23195
Patch to fix bug

Just style nits.

+    double sx, sy;
+    double angle;
We don&apos;t usually pre declare variables.

+    /* Compute scaling factors. */
We tend to use C++ style comments.  This issue is in a few 

+    sx = sqrt (m.a() * m.a() + m.b() * m.b());
+    sy = sqrt (m.c() * m.c() + m.d() * m.d());
Space after sqrt.

+    angle = atan2 (m.b(), m.a());
Space after atan2.

+    int i;
No need to pre declare this.

+        srA[2] += srA[2] &lt; 0 ? M_PI : -M_PI;
+    }
+
+    // Don&apos;t rotate the long way around.
+    srA[2] = fmod(srA[2], 2.0 * M_PI);
+    srB[2] = fmod(srB[2], 2.0 * M_PI);
+
+    if (fabs (srA[2] - srB[2]) &gt; M_PI) {
+        if (srA[2] &gt; srB[2])
+            srA[2] -= M_PI * 2.0;
+        else
+            srB[2] -= M_PI * 2.0;
+    }
We use piDouble/piFloat instead of M_PI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90329</commentid>
    <comment_count>3</comment_count>
      <attachid>23206</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-05 16:36:52 -0700</bug_when>
    <thetext>Created attachment 23206
New patch fixing nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90428</commentid>
    <comment_count>4</comment_count>
      <attachid>23206</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-07 12:59:49 -0700</bug_when>
    <thetext>Comment on attachment 23206
New patch fixing nits

Still one space after function name.
+    if (fabs (srA[2] - srB[2]) &gt; piDouble) {

Please fix that before landing. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90588</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-09-08 15:47:24 -0700</bug_when>
    <thetext>	M	LayoutTests/ChangeLog
	A	LayoutTests/animations/matrix-anim-expected.txt
	A	LayoutTests/animations/matrix-anim.html
	M	WebCore/ChangeLog
	M	WebCore/platform/graphics/AffineTransform.cpp
	M	WebCore/platform/graphics/AffineTransform.h
	M	WebCore/rendering/style/RenderStyle.cpp
Committed r36274

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90589</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-09-08 15:52:34 -0700</bug_when>
    <thetext>forgot to fix sam&apos;s comment.

	M	WebCore/ChangeLog
	M	WebCore/platform/graphics/AffineTransform.cpp
Committed r36275

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23195</attachid>
            <date>2008-09-05 09:02:33 -0700</date>
            <delta_ts>2008-09-05 16:36:52 -0700</delta_ts>
            <desc>Patch to fix bug</desc>
            <filename>20667.patch</filename>
            <type>text/plain</type>
            <size>10095</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjExMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDgtMDktMDUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0g
QW5pbWF0aW9uIG9mIC13ZWJraXQtdHJhbnNmb3JtIG1hdHJpeCgpIGZ1bmN0aW9uIHNob3VsZCBu
b3QgZG8gbGluZWFyIGludGVycG9sYXRpb24KKyAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NjcKKworICAgICAgICBUZXN0OiBhbmltYXRpb25zL21h
dHJpeC1hbmltLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5z
Zm9ybS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZmZpbmVUcmFuc2Zvcm1EZWNvbXBvc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVHJhbnNmb3JtQ29tcG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVu
ZCk6CisKIDIwMDgtMDktMDUgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4KIAogICAgICAg
ICBHdGsgYnVpbGQgZml4CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRy
YW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZp
bmVUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiAzNjEwMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNjEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCBhZmZpbmVUcmFuc2Zvcm1E
ZWNvbXBvc2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgsIGRvdWJsZSBzcls5XSkKK3sK
KyAgICBkb3VibGUgc3gsIHN5OworICAgIGRvdWJsZSBhbmdsZTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gbShtYXRyaXgpOworCisgICAgLyogQ29tcHV0ZSBzY2FsaW5nIGZhY3RvcnMuICovCisKKyAg
ICBzeCA9IHNxcnQgKG0uYSgpICogbS5hKCkgKyBtLmIoKSAqIG0uYigpKTsKKyAgICBzeSA9IHNx
cnQgKG0uYygpICogbS5jKCkgKyBtLmQoKSAqIG0uZCgpKTsKKworICAgIC8qIENvbXB1dGUgY3Jv
c3MgcHJvZHVjdCBvZiB0cmFuc2Zvcm1lZCB1bml0IHZlY3RvcnMuIElmIG5lZ2F0aXZlLAorICAg
ICAgICBvbmUgYXhpcyB3YXMgZmxpcHBlZC4gKi8KKworICAgIGlmIChtLmEoKSAqIG0uZCgpIC0g
bS5jKCkgKiBtLmIoKSA8IDAuMCkgeworICAgICAgICAvKiBGbGlwIGF4aXMgd2l0aCBtaW5pbXVt
IHVuaXQgdmVjdG9yIGRvdCBwcm9kdWN0LiAqLworCisgICAgICAgIGlmIChtLmEoKSA8IG0uZCgp
KQorICAgICAgICAgICAgc3ggPSAtc3g7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN5ID0g
LXN5OworICAgIH0KKworICAgIC8qIFJlbW92ZSBzY2FsZSBmcm9tIG1hdHJpeC4gKi8KKworICAg
IG0uc2NhbGUoMS4wIC8gc3gsIDEuMCAvIHN5KTsKKworICAgIC8qIENvbXB1dGUgcm90YXRpb24u
ICovCisKKyAgICBhbmdsZSA9IGF0YW4yIChtLmIoKSwgbS5hKCkpOworCisgICAgLyogUmVtb3Zl
IHJvdGF0aW9uIGZyb20gbWF0cml4LiAqLworCisgICAgbS5yb3RhdGUocmFkMmRlZygtYW5nbGUp
KTsKKworICAgIC8qIFJldHVybiByZXN1bHRzLiAqLworCisgICAgc3JbMF0gPSBzeDsgc3JbMV0g
PSBzeTsgc3JbMl0gPSBhbmdsZTsKKyAgICBzclszXSA9IG0uYSgpOyBzcls0XSA9IG0uYigpOwor
ICAgIHNyWzVdID0gbS5jKCk7IHNyWzZdID0gbS5kKCk7CisgICAgc3JbN10gPSBtLmUoKTsgc3Jb
OF0gPSBtLmYoKTsKK30KKworc3RhdGljIHZvaWQgYWZmaW5lVHJhbnNmb3JtQ29tcG9zZShBZmZp
bmVUcmFuc2Zvcm0mIG0sIGNvbnN0IGRvdWJsZSBzcls5XSkKK3sKKyAgICBtLnNldEEoc3JbM10p
OworICAgIG0uc2V0Qihzcls0XSk7CisgICAgbS5zZXRDKHNyWzVdKTsKKyAgICBtLnNldEQoc3Jb
Nl0pOworICAgIG0uc2V0RShzcls3XSk7CisgICAgbS5zZXRGKHNyWzhdKTsKKyAgICBtLnJvdGF0
ZShyYWQyZGVnKHNyWzJdKSk7CisgICAgbS5zY2FsZShzclswXSwgc3JbMV0pOworfQorCiBib29s
IEFmZmluZVRyYW5zZm9ybTo6aXNJbnZlcnRpYmxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZGV0
KCkgIT0gMC4wOwpAQCAtMTAwLDQgKzE1NSwzNiBAQCBGbG9hdFBvaW50IEFmZmluZVRyYW5zZm9y
bTo6bWFwUG9pbnQoY29uCiAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHgyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkyKSk7CiB9CiAKK3ZvaWQgQWZmaW5lVHJhbnNmb3Jt
OjpibGVuZChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZyb20sIGRvdWJsZSBwcm9ncmVzcykKK3sK
KyAgICBkb3VibGUgc3JBWzldLCBzckJbOV07CisgICAgaW50IGk7CisKKyAgICBhZmZpbmVUcmFu
c2Zvcm1EZWNvbXBvc2UoZnJvbSwgc3JBKTsKKyAgICBhZmZpbmVUcmFuc2Zvcm1EZWNvbXBvc2Uo
KnRoaXMsIHNyQik7CisKKyAgICAvLyBJZiB4LWF4aXMgb2Ygb25lIGlzIGZsaXBwZWQsIGFuZCB5
LWF4aXMgb2YgdGhlIG90aGVyLCBjb252ZXJ0IHRvIGFuIHVuZmxpcHBlZCByb3RhdGlvbi4KKyAg
ICBpZiAoKHNyQVswXSA8IDAuMCAmJiBzckJbMV0gPCAwLjApIHx8IChzckFbMV0gPCAwLjAgJiYg
IHNyQlswXSA8IDAuMCkpIHsKKyAgICAgICAgc3JBWzBdID0gLXNyQVswXTsKKyAgICAgICAgc3JB
WzFdID0gLXNyQVsxXTsKKyAgICAgICAgc3JBWzJdICs9IHNyQVsyXSA8IDAgPyBNX1BJIDogLU1f
UEk7CisgICAgfQorCisgICAgLy8gRG9uJ3Qgcm90YXRlIHRoZSBsb25nIHdheSBhcm91bmQuCisg
ICAgc3JBWzJdID0gZm1vZChzckFbMl0sIDIuMCAqIE1fUEkpOworICAgIHNyQlsyXSA9IGZtb2Qo
c3JCWzJdLCAyLjAgKiBNX1BJKTsKKworICAgIGlmIChmYWJzIChzckFbMl0gLSBzckJbMl0pID4g
TV9QSSkgeworICAgICAgICBpZiAoc3JBWzJdID4gc3JCWzJdKQorICAgICAgICAgICAgc3JBWzJd
IC09IE1fUEkgKiAyLjA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNyQlsyXSAtPSBNX1BJ
ICogMi4wOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisgICAgICAgIHNy
QVtpXSA9IHNyQVtpXSArIHByb2dyZXNzICogKHNyQltpXSAtIHNyQVtpXSk7CisKKyAgICBhZmZp
bmVUcmFuc2Zvcm1Db21wb3NlKCp0aGlzLCBzckEpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDM2MTAzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5
KQpAQCAtMTA2LDYgKzEwNiw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzSW52ZXJ0aWJsZSgpIGNv
bnN0OwogICAgIEFmZmluZVRyYW5zZm9ybSBpbnZlcnNlKCkgY29uc3Q7CiAKKyAgICB2b2lkIGJs
ZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKKwogI2lm
ICFQTEFURk9STShXWCkgfHwgVVNFKFdYR0MpCiAgICAgb3BlcmF0b3IgUGxhdGZvcm1BZmZpbmVU
cmFuc2Zvcm0oKSBjb25zdDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAkocmV2aXNpb24gMzYxMDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MywyOSArNTQzLDIxIEBAIFBh
c3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXhUcmEKIHsKICAgICBpZiAoZnJvbSAm
JiAhZnJvbS0+aXNNYXRyaXhPcGVyYXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAg
ICAvLyBjb252ZXJ0IHRoZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGludG8gbWF0cmljZXMKKyAgICBJ
bnRTaXplIHNpemU7CisgICAgQWZmaW5lVHJhbnNmb3JtIGZyb21UOworICAgIEFmZmluZVRyYW5z
Zm9ybSB0b1QobV9hLCBtX2IsIG1fYywgbV9kLCBtX2UsIG1fZik7CisgICAgaWYgKGZyb20pIHsK
KyAgICAgICAgY29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKiBtID0gc3RhdGljX2Nhc3Q8
Y29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJvbSk7CisgICAgICAgIGZyb21ULnNl
dE1hdHJpeChtLT5tX2EsIG0tPm1fYiwgbS0+bV9jLCBtLT5tX2QsIG0tPm1fZSwgbS0+bV9mKTsK
KyAgICB9CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIE1h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1fYSAqICgxLiAtIHByb2dyZXNzKSArIHBy
b2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Ig
KiAoMS4gLSBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYyAqICgxLiAtIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kICogKDEuIC0gcHJvZ3Jlc3MpICsgcHJvZ3Jlc3MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZSAqICgxLiAtIHByb2dy
ZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mICog
KDEuIC0gcHJvZ3Jlc3MpKTsKLQotICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiog
ZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJv
bSk7Ci0gICAgZG91YmxlIGZyb21BID0gZnJvbU9wID8gZnJvbU9wLT5tX2EgOiAxLjsKLSAgICBk
b3VibGUgZnJvbUIgPSBmcm9tT3AgPyBmcm9tT3AtPm1fYiA6IDA7Ci0gICAgZG91YmxlIGZyb21D
ID0gZnJvbU9wID8gZnJvbU9wLT5tX2MgOiAwOwotICAgIGRvdWJsZSBmcm9tRCA9IGZyb21PcCA/
IGZyb21PcC0+bV9kIDogMS47Ci0gICAgZG91YmxlIGZyb21FID0gZnJvbU9wID8gZnJvbU9wLT5t
X2UgOiAwOwotICAgIGRvdWJsZSBmcm9tRiA9IGZyb21PcCA/IGZyb21PcC0+bV9mIDogMDsKLSAg
ICAKLSAgICByZXR1cm4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbUEgKyAo
bV9hIC0gZnJvbUEpICogcHJvZ3Jlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnJvbUIgKyAobV9iIC0gZnJvbUIpICogcHJvZ3Jlc3MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUMgKyAobV9jIC0gZnJvbUMpICogcHJvZ3Jl
c3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUQgKyAobV9k
IC0gZnJvbUQpICogcHJvZ3Jlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJvbUUgKyAobV9lIC0gZnJvbUUpICogcHJvZ3Jlc3MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUYgKyAobV9mIC0gZnJvbUYpICogcHJvZ3Jlc3Mp
OworICAgICAgICBzdGQ6OnN3YXAoZnJvbVQsIHRvVCk7CisKKyAgICB0b1QuYmxlbmQoZnJvbVQs
IHByb2dyZXNzKTsKKyAgICByZXR1cm4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
dG9ULmEoKSwgdG9ULmIoKSwgdG9ULmMoKSwgdG9ULmQoKSwgdG9ULmUoKSwgdG9ULmYoKSk7CiB9
CiAKIGJvb2wgS2V5ZnJhbWVMaXN0OjpvcGVyYXRvcj09KGNvbnN0IEtleWZyYW1lTGlzdCYgbykg
Y29uc3QKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2MTEyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMDktMDUgIENocmlzIE1hcnJp
biAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gQW5pbWF0aW9uIG9mIC13ZWJraXQtdHJhbnNmb3JtIG1hdHJpeCgp
IGZ1bmN0aW9uIHNob3VsZCBub3QgZG8gbGluZWFyIGludGVycG9sYXRpb24KKyAgICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NjcKKworICAgICAgICAq
IGFuaW1hdGlvbnMvbWF0cml4LWFuaW0tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBh
bmltYXRpb25zL21hdHJpeC1hbmltLmh0bWw6IEFkZGVkLgorCiAyMDA4LTA5LTA0ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtp
bi4KSW5kZXg6IExheW91dFRlc3RzL2FuaW1hdGlvbnMvbWF0cml4LWFuaW0tZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FuaW1hdGlvbnMvbWF0cml4LWFuaW0tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9tYXRyaXgtYW5p
bS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorVGhpcyB0ZXN0IHBl
cmZvcm1zIGFuIGFuaW1hdGlvbiBvZiB0aGUgbWF0cml4IG9wZXJhdG9yLiBJdCBhbmltYXRlcyBv
dmVyIDIgc2Vjb25kcy4gQXQgMSBzZWNvbmQgaXQgdGFrZXMgYSBzbmFwc2hvdCBhbmQgZXhwZWN0
cyB0aGUgcmVzdWx0IHRvIGJlIHdpdGhpbiByYW5nZS4KK1BBU1MKSW5kZXg6IExheW91dFRlc3Rz
L2FuaW1hdGlvbnMvbWF0cml4LWFuaW0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9h
bmltYXRpb25zL21hdHJpeC1hbmltLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9h
bmltYXRpb25zL21hdHJpeC1hbmltLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAK
KzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25h
bC8vRU4iCisgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKworPGh0
bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKyAgPHRpdGxlPkFuaW1hdGlvbiB1
c2luZyBtYXRyaXgoKTwvdGl0bGU+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNj
cmVlbiI+CisgICAgI2JveCB7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgd2lkdGg6IDEw
MHB4OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICAgIC13ZWJraXQtYW5pbWF0
aW9uLWR1cmF0aW9uOiAxczsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlv
bjogbGluZWFyOworICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogImFuaW0iOworICAgIH0K
KyAgICBALXdlYmtpdC1rZXlmcmFtZXMgImFuaW0iIHsKKyAgICAgICAgZnJvbSB7IC13ZWJraXQt
dHJhbnNmb3JtOiBtYXRyaXgoMC43MDcsIC0wLjcwNywgMC43MDcsIDAuNzA3LCAwLCAwKTsgfQor
ICAgICAgICB0byAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjcwNywgMC43MDcsIC0w
LjcwNywgMC43MDcsIDAsIDApOyB9CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9Cisg
ICAgCisgICAgcmVzdWx0ID0gIlBBU1MiOworICAgIGNvbnN0IGRlZmF1bHRUb2xlcmFuY2UgPSAw
LjE7CisgICAgCisgICAgY29uc3QgZXhwZWN0ZWQgPSAgWyAxLCAwLCAwLCAxLCAwLCAwIF07Cisg
ICAgCisgICAgZnVuY3Rpb24gaXNFcXVhbChhY3R1YWwsIGRlc2lyZWQsIHRvbGVyYW5jZSkKKyAg
ICB7CisgICAgICAgIGlmICh0b2xlcmFuY2UgPT0gdW5kZWZpbmVkIHx8IHRvbGVyYW5jZSA9PSAw
KQorICAgICAgICAgICAgdG9sZXJhbmNlID0gZGVmYXVsdFRvbGVyYW5jZTsKKyAgICAgICAgdmFy
IGRpZmYgPSBNYXRoLmFicyhhY3R1YWwgLSBkZXNpcmVkKTsKKyAgICAgICAgcmV0dXJuIGRpZmYg
PCB0b2xlcmFuY2U7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHNuYXBzaG90KHdoaWNoKQor
ICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAiUEFTUyIpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgdmFyIHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm94JykpLmdldFByb3BlcnR5Q1NTVmFsdWUoJy13ZWJr
aXQtdHJhbnNmb3JtJyk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7ICsraSkgeworICAg
ICAgICAgICAgdmFyIHZhbCA9IHRbMF1baV0uZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZS5DU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIGlmICghaXNFcXVhbCh2YWwsIGV4cGVjdGVkW2ld
KSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJGQUlMKG1hdHJpeFsiK2krIl0gd2FzOiIr
dmFsKyIsIGV4cGVjdGVkOiIrZXhwZWN0ZWRbaV0rIikiOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkKKyAgICB7CisgICAgICAgIHNldFRpbWVvdXQoInNuYXBzaG90KDApIiwgNTAwKTsKKyAgICAg
ICAgCisgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRNTCA9IHJlc3VsdDsKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9LCA2MDApOwor
ICAgIH0KKyAgICAKKyAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRBbmltYXRp
b25TdGFydCcsIHN0YXJ0LCBmYWxzZSk7CisgICAgCisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CitUaGlzIHRlc3QgcGVyZm9ybXMgYW4gYW5pbWF0aW9uIG9mIHRoZSBtYXRyaXggb3BlcmF0
b3IuIEl0IGFuaW1hdGVzIG92ZXIgMiBzZWNvbmRzLgorQXQgMSBzZWNvbmQgaXQgdGFrZXMgYSBz
bmFwc2hvdCBhbmQgZXhwZWN0cyB0aGUgcmVzdWx0IHRvIGJlIHdpdGhpbiByYW5nZS4KKzxkaXYg
aWQ9ImJveCI+Cis8L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdCI+Cis8L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>
<flag name="review"
          id="10322"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23206</attachid>
            <date>2008-09-05 16:36:52 -0700</date>
            <delta_ts>2008-09-07 12:59:49 -0700</delta_ts>
            <desc>New patch fixing nits</desc>
            <filename>20667.patch</filename>
            <type>text/plain</type>
            <size>10081</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjEyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDgtMDktMDUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0g
QW5pbWF0aW9uIG9mIC13ZWJraXQtdHJhbnNmb3JtIG1hdHJpeCgpIGZ1bmN0aW9uIHNob3VsZCBu
b3QgZG8gbGluZWFyIGludGVycG9sYXRpb24KKyAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NjcKKworICAgICAgICBUZXN0OiBhbmltYXRpb25zL21h
dHJpeC1hbmltLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5z
Zm9ybS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZmZpbmVUcmFuc2Zvcm1EZWNvbXBvc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6YWZmaW5lVHJhbnNmb3JtQ29tcG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm06OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVu
ZCk6CisKIDIwMDgtMDktMDUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gMzYxMjApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDU4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIHZvaWQgYWZm
aW5lVHJhbnNmb3JtRGVjb21wb3NlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4LCBkb3Vi
bGUgc3JbOV0pCit7CisgICAgQWZmaW5lVHJhbnNmb3JtIG0obWF0cml4KTsKKworICAgIC8vIENv
bXB1dGUgc2NhbGluZyBmYWN0b3JzCisgICAgZG91YmxlIHN4ID0gc3FydChtLmEoKSAqIG0uYSgp
ICsgbS5iKCkgKiBtLmIoKSk7CisgICAgZG91YmxlIHN5ID0gc3FydChtLmMoKSAqIG0uYygpICsg
bS5kKCkgKiBtLmQoKSk7CisKKyAgICAvKiBDb21wdXRlIGNyb3NzIHByb2R1Y3Qgb2YgdHJhbnNm
b3JtZWQgdW5pdCB2ZWN0b3JzLiBJZiBuZWdhdGl2ZSwKKyAgICAgICAgb25lIGF4aXMgd2FzIGZs
aXBwZWQuICovCisKKyAgICBpZiAobS5hKCkgKiBtLmQoKSAtIG0uYygpICogbS5iKCkgPCAwLjAp
IHsKKyAgICAgICAgLy8gRmxpcCBheGlzIHdpdGggbWluaW11bSB1bml0IHZlY3RvciBkb3QgcHJv
ZHVjdAorCisgICAgICAgIGlmIChtLmEoKSA8IG0uZCgpKQorICAgICAgICAgICAgc3ggPSAtc3g7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN5ID0gLXN5OworICAgIH0KKworICAgIC8vIFJl
bW92ZSBzY2FsZSBmcm9tIG1hdHJpeAorCisgICAgbS5zY2FsZSgxLjAgLyBzeCwgMS4wIC8gc3kp
OworCisgICAgLy8gQ29tcHV0ZSByb3RhdGlvbgorCisgICAgZG91YmxlIGFuZ2xlID0gYXRhbjIo
bS5iKCksIG0uYSgpKTsKKworICAgIC8vIFJlbW92ZSByb3RhdGlvbiBmcm9tIG1hdHJpeAorCisg
ICAgbS5yb3RhdGUocmFkMmRlZygtYW5nbGUpKTsKKworICAgIC8vIFJldHVybiByZXN1bHRzCisK
KyAgICBzclswXSA9IHN4OyBzclsxXSA9IHN5OyBzclsyXSA9IGFuZ2xlOworICAgIHNyWzNdID0g
bS5hKCk7IHNyWzRdID0gbS5iKCk7CisgICAgc3JbNV0gPSBtLmMoKTsgc3JbNl0gPSBtLmQoKTsK
KyAgICBzcls3XSA9IG0uZSgpOyBzcls4XSA9IG0uZigpOworfQorCitzdGF0aWMgdm9pZCBhZmZp
bmVUcmFuc2Zvcm1Db21wb3NlKEFmZmluZVRyYW5zZm9ybSYgbSwgY29uc3QgZG91YmxlIHNyWzld
KQoreworICAgIG0uc2V0QShzclszXSk7CisgICAgbS5zZXRCKHNyWzRdKTsKKyAgICBtLnNldEMo
c3JbNV0pOworICAgIG0uc2V0RChzcls2XSk7CisgICAgbS5zZXRFKHNyWzddKTsKKyAgICBtLnNl
dEYoc3JbOF0pOworICAgIG0ucm90YXRlKHJhZDJkZWcoc3JbMl0pKTsKKyAgICBtLnNjYWxlKHNy
WzBdLCBzclsxXSk7Cit9CisKIGJvb2wgQWZmaW5lVHJhbnNmb3JtOjppc0ludmVydGlibGUoKSBj
b25zdAogewogICAgIHJldHVybiBkZXQoKSAhPSAwLjA7CkBAIC0xMDAsNCArMTUyLDM1IEBAIEZs
b2F0UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb24KICAgICByZXR1cm4gRmxvYXRQ
b2ludChzdGF0aWNfY2FzdDxmbG9hdD4oeDIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeTIpKTsKIH0K
IAordm9pZCBBZmZpbmVUcmFuc2Zvcm06OmJsZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJv
bSwgZG91YmxlIHByb2dyZXNzKQoreworICAgIGRvdWJsZSBzckFbOV0sIHNyQls5XTsKKworICAg
IGFmZmluZVRyYW5zZm9ybURlY29tcG9zZShmcm9tLCBzckEpOworICAgIGFmZmluZVRyYW5zZm9y
bURlY29tcG9zZSgqdGhpcywgc3JCKTsKKworICAgIC8vIElmIHgtYXhpcyBvZiBvbmUgaXMgZmxp
cHBlZCwgYW5kIHktYXhpcyBvZiB0aGUgb3RoZXIsIGNvbnZlcnQgdG8gYW4gdW5mbGlwcGVkIHJv
dGF0aW9uLgorICAgIGlmICgoc3JBWzBdIDwgMC4wICYmIHNyQlsxXSA8IDAuMCkgfHwgKHNyQVsx
XSA8IDAuMCAmJiAgc3JCWzBdIDwgMC4wKSkgeworICAgICAgICBzckFbMF0gPSAtc3JBWzBdOwor
ICAgICAgICBzckFbMV0gPSAtc3JBWzFdOworICAgICAgICBzckFbMl0gKz0gc3JBWzJdIDwgMCA/
IHBpRG91YmxlIDogLXBpRG91YmxlOworICAgIH0KKworICAgIC8vIERvbid0IHJvdGF0ZSB0aGUg
bG9uZyB3YXkgYXJvdW5kLgorICAgIHNyQVsyXSA9IGZtb2Qoc3JBWzJdLCAyLjAgKiBwaURvdWJs
ZSk7CisgICAgc3JCWzJdID0gZm1vZChzckJbMl0sIDIuMCAqIHBpRG91YmxlKTsKKworICAgIGlm
IChmYWJzIChzckFbMl0gLSBzckJbMl0pID4gcGlEb3VibGUpIHsKKyAgICAgICAgaWYgKHNyQVsy
XSA+IHNyQlsyXSkKKyAgICAgICAgICAgIHNyQVsyXSAtPSBwaURvdWJsZSAqIDIuMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3JCWzJdIC09IHBpRG91YmxlICogMi4wOworICAgIH0KKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQorICAgICAgICBzckFbaV0gPSBzckFbaV0g
KyBwcm9ncmVzcyAqIChzckJbaV0gLSBzckFbaV0pOworCisgICAgYWZmaW5lVHJhbnNmb3JtQ29t
cG9zZSgqdGhpcywgc3JBKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0FmZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAzNjEyMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsx
MDYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdDsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gaW52ZXJzZSgpIGNvbnN0OwogCisgICAgdm9pZCBibGVuZChjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGZyb20sIGRvdWJsZSBwcm9ncmVzcyk7CisKICNpZiAhUExBVEZPUk0oV1gp
IHx8IFVTRShXWEdDKQogICAgIG9wZXJhdG9yIFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtKCkgY29u
c3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJ
KHJldmlzaW9uIDM2MTIwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDMsMjkgKzU0MywyMSBAQCBQYXNzUmVmUHRyPFRyYW5z
Zm9ybU9wZXJhdGlvbj4gTWF0cml4VHJhCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzTWF0
cml4T3BlcmF0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgLy8gY29udmVydCB0
aGUgVHJhbnNmb3JtT3BlcmF0aW9ucyBpbnRvIG1hdHJpY2VzCisgICAgSW50U2l6ZSBzaXplOwor
ICAgIEFmZmluZVRyYW5zZm9ybSBmcm9tVDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdG9UKG1fYSwg
bV9iLCBtX2MsIG1fZCwgbV9lLCBtX2YpOworICAgIGlmIChmcm9tKSB7CisgICAgICAgIGNvbnN0
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOworICAgICAgICBmcm9tVC5zZXRNYXRyaXgobS0+bV9h
LCBtLT5tX2IsIG0tPm1fYywgbS0+bV9kLCBtLT5tX2UsIG0tPm1fZik7CisgICAgfQogICAgIAog
ICAgIGlmIChibGVuZFRvSWRlbnRpdHkpCi0gICAgICAgIHJldHVybiBNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShtX2EgKiAoMS4gLSBwcm9ncmVzcykgKyBwcm9ncmVzcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9iICogKDEuIC0gcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2MgKiAo
MS4gLSBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZCAqICgxLiAtIHByb2dyZXNzKSArIHByb2dyZXNzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2UgKiAoMS4gLSBwcm9ncmVzcyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZiAqICgxLiAtIHByb2dyZXNz
KSk7Ci0KLSAgICBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwotICAgIGRvdWJs
ZSBmcm9tQSA9IGZyb21PcCA/IGZyb21PcC0+bV9hIDogMS47Ci0gICAgZG91YmxlIGZyb21CID0g
ZnJvbU9wID8gZnJvbU9wLT5tX2IgOiAwOwotICAgIGRvdWJsZSBmcm9tQyA9IGZyb21PcCA/IGZy
b21PcC0+bV9jIDogMDsKLSAgICBkb3VibGUgZnJvbUQgPSBmcm9tT3AgPyBmcm9tT3AtPm1fZCA6
IDEuOwotICAgIGRvdWJsZSBmcm9tRSA9IGZyb21PcCA/IGZyb21PcC0+bV9lIDogMDsKLSAgICBk
b3VibGUgZnJvbUYgPSBmcm9tT3AgPyBmcm9tT3AtPm1fZiA6IDA7Ci0gICAgCi0gICAgcmV0dXJu
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb21BICsgKG1fYSAtIGZyb21BKSAq
IHByb2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21C
ICsgKG1fYiAtIGZyb21CKSAqIHByb2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyb21DICsgKG1fYyAtIGZyb21DKSAqIHByb2dyZXNzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21EICsgKG1fZCAtIGZyb21EKSAqIHBy
b2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FICsg
KG1fZSAtIGZyb21FKSAqIHByb2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyb21GICsgKG1fZiAtIGZyb21GKSAqIHByb2dyZXNzKTsKKyAgICAgICAgc3Rk
Ojpzd2FwKGZyb21ULCB0b1QpOworCisgICAgdG9ULmJsZW5kKGZyb21ULCBwcm9ncmVzcyk7Cisg
ICAgcmV0dXJuIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvVC5hKCksIHRvVC5i
KCksIHRvVC5jKCksIHRvVC5kKCksIHRvVC5lKCksIHRvVC5mKCkpOwogfQogCiBib29sIEtleWZy
YW1lTGlzdDo6b3BlcmF0b3I9PShjb25zdCBLZXlmcmFtZUxpc3QmIG8pIGNvbnN0CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjEyMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDA4LTA5LTA1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAtIEFuaW1hdGlvbiBvZiAtd2Via2l0LXRyYW5zZm9ybSBtYXRyaXgoKSBmdW5jdGlvbiBzaG91
bGQgbm90IGRvIGxpbmVhciBpbnRlcnBvbGF0aW9uCisgICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjY3CisKKyAgICAgICAgKiBhbmltYXRpb25zL21h
dHJpeC1hbmltLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYW5pbWF0aW9ucy9tYXRy
aXgtYW5pbS5odG1sOiBBZGRlZC4KKwogMjAwOC0wOS0wNCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCkluZGV4OiBMYXlv
dXRUZXN0cy9hbmltYXRpb25zL21hdHJpeC1hbmltLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9hbmltYXRpb25zL21hdHJpeC1hbmltLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2FuaW1hdGlvbnMvbWF0cml4LWFuaW0tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgdGVzdCBwZXJmb3JtcyBhbiBhbmlt
YXRpb24gb2YgdGhlIG1hdHJpeCBvcGVyYXRvci4gSXQgYW5pbWF0ZXMgb3ZlciAyIHNlY29uZHMu
IEF0IDEgc2Vjb25kIGl0IHRha2VzIGEgc25hcHNob3QgYW5kIGV4cGVjdHMgdGhlIHJlc3VsdCB0
byBiZSB3aXRoaW4gcmFuZ2UuCitQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9hbmltYXRpb25zL21h
dHJpeC1hbmltLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9tYXRy
aXgtYW5pbS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9tYXRy
aXgtYW5pbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRt
bCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAgImh0
dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CisKKzxodG1sIGxhbmc9ImVuIj4K
KzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQv
aHRtbDsgY2hhcnNldD11dGYtOCI+CisgIDx0aXRsZT5BbmltYXRpb24gdXNpbmcgbWF0cml4KCk8
L3RpdGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgICNi
b3ggeworICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGJsdWU7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjog
MXM7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjsKKyAg
ICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ICJhbmltIjsKKyAgICB9CisgICAgQC13ZWJraXQt
a2V5ZnJhbWVzICJhbmltIiB7CisgICAgICAgIGZyb20geyAtd2Via2l0LXRyYW5zZm9ybTogbWF0
cml4KDAuNzA3LCAtMC43MDcsIDAuNzA3LCAwLjcwNywgMCwgMCk7IH0KKyAgICAgICAgdG8gICB7
IC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC43MDcsIDAuNzA3LCAtMC43MDcsIDAuNzA3LCAw
LCAwKTsgfQorICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHJlc3Vs
dCA9ICJQQVNTIjsKKyAgICBjb25zdCBkZWZhdWx0VG9sZXJhbmNlID0gMC4xOworICAgIAorICAg
IGNvbnN0IGV4cGVjdGVkID0gIFsgMSwgMCwgMCwgMSwgMCwgMCBdOworICAgIAorICAgIGZ1bmN0
aW9uIGlzRXF1YWwoYWN0dWFsLCBkZXNpcmVkLCB0b2xlcmFuY2UpCisgICAgeworICAgICAgICBp
ZiAodG9sZXJhbmNlID09IHVuZGVmaW5lZCB8fCB0b2xlcmFuY2UgPT0gMCkKKyAgICAgICAgICAg
IHRvbGVyYW5jZSA9IGRlZmF1bHRUb2xlcmFuY2U7CisgICAgICAgIHZhciBkaWZmID0gTWF0aC5h
YnMoYWN0dWFsIC0gZGVzaXJlZCk7CisgICAgICAgIHJldHVybiBkaWZmIDwgdG9sZXJhbmNlOwor
ICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBzbmFwc2hvdCh3aGljaCkKKyAgICB7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gIlBBU1MiKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgIHZhciB0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2JveCcpKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCctd2Via2l0LXRyYW5zZm9ybScp
OworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHsKKyAgICAgICAgICAgIHZhciB2
YWwgPSB0WzBdW2ldLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX05VTUJFUik7
CisgICAgICAgICAgICBpZiAoIWlzRXF1YWwodmFsLCBleHBlY3RlZFtpXSkpIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSAiRkFJTChtYXRyaXhbIitpKyJdIHdhczoiK3ZhbCsiLCBleHBlY3Rl
ZDoiK2V4cGVjdGVkW2ldKyIpIjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGFydCgpCisgICAgeworICAg
ICAgICBzZXRUaW1lb3V0KCJzbmFwc2hvdCgwKSIsIDUwMCk7CisgICAgICAgIAorICAgICAgICB3
aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdyZXN1bHQnKS5pbm5lckhUTUwgPSByZXN1bHQ7CisgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSwgNjAwKTsKKyAgICB9CisgICAgCisg
ICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0QW5pbWF0aW9uU3RhcnQnLCBzdGFy
dCwgZmFsc2UpOworICAgIAorICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorVGhpcyB0ZXN0
IHBlcmZvcm1zIGFuIGFuaW1hdGlvbiBvZiB0aGUgbWF0cml4IG9wZXJhdG9yLiBJdCBhbmltYXRl
cyBvdmVyIDIgc2Vjb25kcy4KK0F0IDEgc2Vjb25kIGl0IHRha2VzIGEgc25hcHNob3QgYW5kIGV4
cGVjdHMgdGhlIHJlc3VsdCB0byBiZSB3aXRoaW4gcmFuZ2UuCis8ZGl2IGlkPSJib3giPgorPC9k
aXY+Cis8ZGl2IGlkPSJyZXN1bHQiPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="10331"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>