<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[172373] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/172373">172373</a></dd>
<dt>Author</dt> <dd>zalan@apple.com</dd>
<dt>Date</dt> <dd>2014-08-09 17:48:59 -0700 (Sat, 09 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Subpixel rendering: Transforms on non-compositing layers leave bits behind when the box boundaries changes.
https://bugs.webkit.org/show_bug.cgi?id=135786

Reviewed by Simon Fraser.

Since we don't control the transformed context painting's snapping strategy, our best bet to fully
include the transformed box when requesting for repaint is to use enclosing.
Pixelsnapping doesn't work here for all cases. For example, a scaled box at 0.8px can be anti-aliased painted
both at 0.5px and 1px, while with pixelsnapping we'd expect it to be painted starting from 1px;

Source/WebCore:

Test: fast/repaint/hidpi-transform-on-subpixel-repaintrect.html

* rendering/RenderBox.cpp:
(WebCore::RenderBox::computeRectForRepaint): enclose the result of the transform.

LayoutTests:

* fast/repaint/hidpi-transform-on-subpixel-repaintrect-expected.txt: Added.
* fast/repaint/hidpi-transform-on-subpixel-repaintrect.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxcpp">trunk/Source/WebCore/rendering/RenderBox.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastrepainthidpitransformonsubpixelrepaintrectexpectedtxt">trunk/LayoutTests/fast/repaint/hidpi-transform-on-subpixel-repaintrect-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastrepainthidpitransformonsubpixelrepaintrecthtml">trunk/LayoutTests/fast/repaint/hidpi-transform-on-subpixel-repaintrect.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (172372 => 172373)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-08-09 06:50:19 UTC (rev 172372)
+++ trunk/LayoutTests/ChangeLog        2014-08-10 00:48:59 UTC (rev 172373)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2014-08-09  Zalan Bujtas  &lt;zalan@apple.com&gt;
+
+        Subpixel rendering: Transforms on non-compositing layers leave bits behind when the box boundaries changes.
+        https://bugs.webkit.org/show_bug.cgi?id=135786
+
+        Reviewed by Simon Fraser.
+
+        Since we don't control the transformed context painting's snapping strategy, our best bet to fully
+        include the transformed box when requesting for repaint is to use enclosing.
+        Pixelsnapping doesn't work here for all cases. For example, a scaled box at 0.8px can be anti-aliased painted
+        both at 0.5px and 1px, while with pixelsnapping we'd expect it to be painted starting from 1px;
+
+        * fast/repaint/hidpi-transform-on-subpixel-repaintrect-expected.txt: Added.
+        * fast/repaint/hidpi-transform-on-subpixel-repaintrect.html: Added.
+
</ins><span class="cx"> 2014-08-08  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Load the layout test result image diff HTML from a file, rather than having it inline in webkitpy
</span></span></pre></div>
<a id="trunkLayoutTestsfastrepainthidpitransformonsubpixelrepaintrectexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/hidpi-transform-on-subpixel-repaintrect-expected.txt (0 => 172373)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/hidpi-transform-on-subpixel-repaintrect-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/hidpi-transform-on-subpixel-repaintrect-expected.txt        2014-08-10 00:48:59 UTC (rev 172373)
</span><span class="lines">@@ -0,0 +1,1203 @@
</span><ins>+(repaint rects
+  (rect 0 0 0.50 10)
+  (rect 10.50 0 0.50 10)
+  (rect 12 0 0.50 10)
+  (rect 22.50 0 0.50 10)
+  (rect 24 0 0.50 10)
+  (rect 34.50 0 0.50 10)
+  (rect 36 0 0.50 10)
+  (rect 46.50 0 0.50 10)
+  (rect 48 0 0.50 10)
+  (rect 58.50 0 0.50 10)
+  (rect 120.50 0.50 10.50 10)
+  (rect 120.50 0.50 10.50 10)
+  (rect 132.50 0.50 10.50 10)
+  (rect 132.50 0.50 10.50 10)
+  (rect 144.50 0.50 10.50 10)
+  (rect 144.50 0.50 10.50 10)
+  (rect 156.50 0.50 10.50 10)
+  (rect 156.50 0.50 10.50 10)
+  (rect 168.50 0.50 10.50 10)
+  (rect 168.50 0.50 10.50 10)
+  (rect 181 1 10.50 10)
+  (rect 180.50 1 10.50 10)
+  (rect 193 1 10.50 10)
+  (rect 192.50 1 10.50 10)
+  (rect 205 1 10.50 10)
+  (rect 204.50 1 10.50 10)
+  (rect 217 1 10.50 10)
+  (rect 216.50 1 10.50 10)
+  (rect 229 1 10.50 10)
+  (rect 228.50 1 10.50 10)
+  (rect 241 1 0.50 10)
+  (rect 251.50 1 0.50 10)
+  (rect 253 1 0.50 10)
+  (rect 263.50 1 0.50 10)
+  (rect 265 1 0.50 10)
+  (rect 275.50 1 0.50 10)
+  (rect 277 1 0.50 10)
+  (rect 287.50 1 0.50 10)
+  (rect 289 1 0.50 10)
+  (rect 299.50 1 0.50 10)
+  (rect 0 12 0.50 10)
+  (rect 10.50 12 0.50 10)
+  (rect 12 12 0.50 10)
+  (rect 22.50 12 0.50 10)
+  (rect 24 12 0.50 10)
+  (rect 34.50 12 0.50 10)
+  (rect 36 12 0.50 10)
+  (rect 46.50 12 0.50 10)
+  (rect 48 12 0.50 10)
+  (rect 58.50 12 0.50 10)
+  (rect 120.50 12.50 10.50 10)
+  (rect 120.50 12.50 10.50 10)
+  (rect 132.50 12.50 10.50 10)
+  (rect 132.50 12.50 10.50 10)
+  (rect 144.50 12.50 10.50 10)
+  (rect 144.50 12.50 10.50 10)
+  (rect 156.50 12.50 10.50 10)
+  (rect 156.50 12.50 10.50 10)
+  (rect 168.50 12.50 10.50 10)
+  (rect 168.50 12.50 10.50 10)
+  (rect 181 13 10.50 10)
+  (rect 180.50 13 10.50 10)
+  (rect 193 13 10.50 10)
+  (rect 192.50 13 10.50 10)
+  (rect 205 13 10.50 10)
+  (rect 204.50 13 10.50 10)
+  (rect 217 13 10.50 10)
+  (rect 216.50 13 10.50 10)
+  (rect 229 13 10.50 10)
+  (rect 228.50 13 10.50 10)
+  (rect 241 13 0.50 10)
+  (rect 251.50 13 0.50 10)
+  (rect 253 13 0.50 10)
+  (rect 263.50 13 0.50 10)
+  (rect 265 13 0.50 10)
+  (rect 275.50 13 0.50 10)
+  (rect 277 13 0.50 10)
+  (rect 287.50 13 0.50 10)
+  (rect 289 13 0.50 10)
+  (rect 299.50 13 0.50 10)
+  (rect 0 24 0.50 10)
+  (rect 10.50 24 0.50 10)
+  (rect 12 24 0.50 10)
+  (rect 22.50 24 0.50 10)
+  (rect 24 24 0.50 10)
+  (rect 34.50 24 0.50 10)
+  (rect 36 24 0.50 10)
+  (rect 46.50 24 0.50 10)
+  (rect 48 24 0.50 10)
+  (rect 58.50 24 0.50 10)
+  (rect 120.50 24.50 10.50 10)
+  (rect 120.50 24.50 10.50 10)
+  (rect 132.50 24.50 10.50 10)
+  (rect 132.50 24.50 10.50 10)
+  (rect 144.50 24.50 10.50 10)
+  (rect 144.50 24.50 10.50 10)
+  (rect 156.50 24.50 10.50 10)
+  (rect 156.50 24.50 10.50 10)
+  (rect 168.50 24.50 10.50 10)
+  (rect 168.50 24.50 10.50 10)
+  (rect 181 25 10.50 10)
+  (rect 180.50 25 10.50 10)
+  (rect 193 25 10.50 10)
+  (rect 192.50 25 10.50 10)
+  (rect 205 25 10.50 10)
+  (rect 204.50 25 10.50 10)
+  (rect 217 25 10.50 10)
+  (rect 216.50 25 10.50 10)
+  (rect 229 25 10.50 10)
+  (rect 228.50 25 10.50 10)
+  (rect 241 25 0.50 10)
+  (rect 251.50 25 0.50 10)
+  (rect 253 25 0.50 10)
+  (rect 263.50 25 0.50 10)
+  (rect 265 25 0.50 10)
+  (rect 275.50 25 0.50 10)
+  (rect 277 25 0.50 10)
+  (rect 287.50 25 0.50 10)
+  (rect 289 25 0.50 10)
+  (rect 299.50 25 0.50 10)
+  (rect 0 36 0.50 10)
+  (rect 10.50 36 0.50 10)
+  (rect 12 36 0.50 10)
+  (rect 22.50 36 0.50 10)
+  (rect 24 36 0.50 10)
+  (rect 34.50 36 0.50 10)
+  (rect 36 36 0.50 10)
+  (rect 46.50 36 0.50 10)
+  (rect 48 36 0.50 10)
+  (rect 58.50 36 0.50 10)
+  (rect 120.50 36.50 10.50 10)
+  (rect 120.50 36.50 10.50 10)
+  (rect 132.50 36.50 10.50 10)
+  (rect 132.50 36.50 10.50 10)
+  (rect 144.50 36.50 10.50 10)
+  (rect 144.50 36.50 10.50 10)
+  (rect 156.50 36.50 10.50 10)
+  (rect 156.50 36.50 10.50 10)
+  (rect 168.50 36.50 10.50 10)
+  (rect 168.50 36.50 10.50 10)
+  (rect 181 37 10.50 10)
+  (rect 180.50 37 10.50 10)
+  (rect 193 37 10.50 10)
+  (rect 192.50 37 10.50 10)
+  (rect 205 37 10.50 10)
+  (rect 204.50 37 10.50 10)
+  (rect 217 37 10.50 10)
+  (rect 216.50 37 10.50 10)
+  (rect 229 37 10.50 10)
+  (rect 228.50 37 10.50 10)
+  (rect 241 37 0.50 10)
+  (rect 251.50 37 0.50 10)
+  (rect 253 37 0.50 10)
+  (rect 263.50 37 0.50 10)
+  (rect 265 37 0.50 10)
+  (rect 275.50 37 0.50 10)
+  (rect 277 37 0.50 10)
+  (rect 287.50 37 0.50 10)
+  (rect 289 37 0.50 10)
+  (rect 299.50 37 0.50 10)
+  (rect 0 48 0.50 10)
+  (rect 10.50 48 0.50 10)
+  (rect 12 48 0.50 10)
+  (rect 22.50 48 0.50 10)
+  (rect 24 48 0.50 10)
+  (rect 34.50 48 0.50 10)
+  (rect 36 48 0.50 10)
+  (rect 46.50 48 0.50 10)
+  (rect 48 48 0.50 10)
+  (rect 58.50 48 0.50 10)
+  (rect 120.50 48.50 10.50 10)
+  (rect 120.50 48.50 10.50 10)
+  (rect 132.50 48.50 10.50 10)
+  (rect 132.50 48.50 10.50 10)
+  (rect 144.50 48.50 10.50 10)
+  (rect 144.50 48.50 10.50 10)
+  (rect 156.50 48.50 10.50 10)
+  (rect 156.50 48.50 10.50 10)
+  (rect 168.50 48.50 10.50 10)
+  (rect 168.50 48.50 10.50 10)
+  (rect 181 49 10.50 10)
+  (rect 180.50 49 10.50 10)
+  (rect 193 49 10.50 10)
+  (rect 192.50 49 10.50 10)
+  (rect 205 49 10.50 10)
+  (rect 204.50 49 10.50 10)
+  (rect 217 49 10.50 10)
+  (rect 216.50 49 10.50 10)
+  (rect 229 49 10.50 10)
+  (rect 228.50 49 10.50 10)
+  (rect 241 49 0.50 10)
+  (rect 251.50 49 0.50 10)
+  (rect 253 49 0.50 10)
+  (rect 263.50 49 0.50 10)
+  (rect 265 49 0.50 10)
+  (rect 275.50 49 0.50 10)
+  (rect 277 49 0.50 10)
+  (rect 287.50 49 0.50 10)
+  (rect 289 49 0.50 10)
+  (rect 299.50 49 0.50 10)
+  (rect 0 60 0.50 10)
+  (rect 10.50 60 0.50 10)
+  (rect 12 60 0.50 10)
+  (rect 22.50 60 0.50 10)
+  (rect 24 60 0.50 10)
+  (rect 34.50 60 0.50 10)
+  (rect 36 60 0.50 10)
+  (rect 46.50 60 0.50 10)
+  (rect 48 60 0.50 10)
+  (rect 58.50 60 0.50 10)
+  (rect 120.50 60.50 10.50 10)
+  (rect 120.50 60.50 10.50 10)
+  (rect 132.50 60.50 10.50 10)
+  (rect 132.50 60.50 10.50 10)
+  (rect 144.50 60.50 10.50 10)
+  (rect 144.50 60.50 10.50 10)
+  (rect 156.50 60.50 10.50 10)
+  (rect 156.50 60.50 10.50 10)
+  (rect 168.50 60.50 10.50 10)
+  (rect 168.50 60.50 10.50 10)
+  (rect 181 61 10.50 10)
+  (rect 180.50 61 10.50 10)
+  (rect 193 61 10.50 10)
+  (rect 192.50 61 10.50 10)
+  (rect 205 61 10.50 10)
+  (rect 204.50 61 10.50 10)
+  (rect 217 61 10.50 10)
+  (rect 216.50 61 10.50 10)
+  (rect 229 61 10.50 10)
+  (rect 228.50 61 10.50 10)
+  (rect 241 61 0.50 10)
+  (rect 251.50 61 0.50 10)
+  (rect 253 61 0.50 10)
+  (rect 263.50 61 0.50 10)
+  (rect 265 61 0.50 10)
+  (rect 275.50 61 0.50 10)
+  (rect 277 61 0.50 10)
+  (rect 287.50 61 0.50 10)
+  (rect 289 61 0.50 10)
+  (rect 299.50 61 0.50 10)
+  (rect 0 72 0.50 10)
+  (rect 10.50 72 0.50 10)
+  (rect 12 72 0.50 10)
+  (rect 22.50 72 0.50 10)
+  (rect 24 72 0.50 10)
+  (rect 34.50 72 0.50 10)
+  (rect 36 72 0.50 10)
+  (rect 46.50 72 0.50 10)
+  (rect 48 72 0.50 10)
+  (rect 58.50 72 0.50 10)
+  (rect 120.50 72.50 10.50 10)
+  (rect 120.50 72.50 10.50 10)
+  (rect 132.50 72.50 10.50 10)
+  (rect 132.50 72.50 10.50 10)
+  (rect 144.50 72.50 10.50 10)
+  (rect 144.50 72.50 10.50 10)
+  (rect 156.50 72.50 10.50 10)
+  (rect 156.50 72.50 10.50 10)
+  (rect 168.50 72.50 10.50 10)
+  (rect 168.50 72.50 10.50 10)
+  (rect 181 73 10.50 10)
+  (rect 180.50 73 10.50 10)
+  (rect 193 73 10.50 10)
+  (rect 192.50 73 10.50 10)
+  (rect 205 73 10.50 10)
+  (rect 204.50 73 10.50 10)
+  (rect 217 73 10.50 10)
+  (rect 216.50 73 10.50 10)
+  (rect 229 73 10.50 10)
+  (rect 228.50 73 10.50 10)
+  (rect 241 73 0.50 10)
+  (rect 251.50 73 0.50 10)
+  (rect 253 73 0.50 10)
+  (rect 263.50 73 0.50 10)
+  (rect 265 73 0.50 10)
+  (rect 275.50 73 0.50 10)
+  (rect 277 73 0.50 10)
+  (rect 287.50 73 0.50 10)
+  (rect 289 73 0.50 10)
+  (rect 299.50 73 0.50 10)
+  (rect 0 84 0.50 10)
+  (rect 10.50 84 0.50 10)
+  (rect 12 84 0.50 10)
+  (rect 22.50 84 0.50 10)
+  (rect 24 84 0.50 10)
+  (rect 34.50 84 0.50 10)
+  (rect 36 84 0.50 10)
+  (rect 46.50 84 0.50 10)
+  (rect 48 84 0.50 10)
+  (rect 58.50 84 0.50 10)
+  (rect 120.50 84.50 10.50 10)
+  (rect 120.50 84.50 10.50 10)
+  (rect 132.50 84.50 10.50 10)
+  (rect 132.50 84.50 10.50 10)
+  (rect 144.50 84.50 10.50 10)
+  (rect 144.50 84.50 10.50 10)
+  (rect 156.50 84.50 10.50 10)
+  (rect 156.50 84.50 10.50 10)
+  (rect 168.50 84.50 10.50 10)
+  (rect 168.50 84.50 10.50 10)
+  (rect 181 85 10.50 10)
+  (rect 180.50 85 10.50 10)
+  (rect 193 85 10.50 10)
+  (rect 192.50 85 10.50 10)
+  (rect 205 85 10.50 10)
+  (rect 204.50 85 10.50 10)
+  (rect 217 85 10.50 10)
+  (rect 216.50 85 10.50 10)
+  (rect 229 85 10.50 10)
+  (rect 228.50 85 10.50 10)
+  (rect 241 85 0.50 10)
+  (rect 251.50 85 0.50 10)
+  (rect 253 85 0.50 10)
+  (rect 263.50 85 0.50 10)
+  (rect 265 85 0.50 10)
+  (rect 275.50 85 0.50 10)
+  (rect 277 85 0.50 10)
+  (rect 287.50 85 0.50 10)
+  (rect 289 85 0.50 10)
+  (rect 299.50 85 0.50 10)
+  (rect 0 96 0.50 10)
+  (rect 10.50 96 0.50 10)
+  (rect 12 96 0.50 10)
+  (rect 22.50 96 0.50 10)
+  (rect 24 96 0.50 10)
+  (rect 34.50 96 0.50 10)
+  (rect 36 96 0.50 10)
+  (rect 46.50 96 0.50 10)
+  (rect 48 96 0.50 10)
+  (rect 58.50 96 0.50 10)
+  (rect 120.50 96.50 10.50 10)
+  (rect 120.50 96.50 10.50 10)
+  (rect 132.50 96.50 10.50 10)
+  (rect 132.50 96.50 10.50 10)
+  (rect 144.50 96.50 10.50 10)
+  (rect 144.50 96.50 10.50 10)
+  (rect 156.50 96.50 10.50 10)
+  (rect 156.50 96.50 10.50 10)
+  (rect 168.50 96.50 10.50 10)
+  (rect 168.50 96.50 10.50 10)
+  (rect 181 97 10.50 10)
+  (rect 180.50 97 10.50 10)
+  (rect 193 97 10.50 10)
+  (rect 192.50 97 10.50 10)
+  (rect 205 97 10.50 10)
+  (rect 204.50 97 10.50 10)
+  (rect 217 97 10.50 10)
+  (rect 216.50 97 10.50 10)
+  (rect 229 97 10.50 10)
+  (rect 228.50 97 10.50 10)
+  (rect 241 97 0.50 10)
+  (rect 251.50 97 0.50 10)
+  (rect 253 97 0.50 10)
+  (rect 263.50 97 0.50 10)
+  (rect 265 97 0.50 10)
+  (rect 275.50 97 0.50 10)
+  (rect 277 97 0.50 10)
+  (rect 287.50 97 0.50 10)
+  (rect 289 97 0.50 10)
+  (rect 299.50 97 0.50 10)
+  (rect 0 108 0.50 10)
+  (rect 10.50 108 0.50 10)
+  (rect 12 108 0.50 10)
+  (rect 22.50 108 0.50 10)
+  (rect 24 108 0.50 10)
+  (rect 34.50 108 0.50 10)
+  (rect 36 108 0.50 10)
+  (rect 46.50 108 0.50 10)
+  (rect 48 108 0.50 10)
+  (rect 58.50 108 0.50 10)
+  (rect 120.50 108.50 10.50 10)
+  (rect 120.50 108.50 10.50 10)
+  (rect 132.50 108.50 10.50 10)
+  (rect 132.50 108.50 10.50 10)
+  (rect 144.50 108.50 10.50 10)
+  (rect 144.50 108.50 10.50 10)
+  (rect 156.50 108.50 10.50 10)
+  (rect 156.50 108.50 10.50 10)
+  (rect 168.50 108.50 10.50 10)
+  (rect 168.50 108.50 10.50 10)
+  (rect 181 109 10.50 10)
+  (rect 180.50 109 10.50 10)
+  (rect 193 109 10.50 10)
+  (rect 192.50 109 10.50 10)
+  (rect 205 109 10.50 10)
+  (rect 204.50 109 10.50 10)
+  (rect 217 109 10.50 10)
+  (rect 216.50 109 10.50 10)
+  (rect 229 109 10.50 10)
+  (rect 228.50 109 10.50 10)
+  (rect 241 109 0.50 10)
+  (rect 251.50 109 0.50 10)
+  (rect 253 109 0.50 10)
+  (rect 263.50 109 0.50 10)
+  (rect 265 109 0.50 10)
+  (rect 275.50 109 0.50 10)
+  (rect 277 109 0.50 10)
+  (rect 287.50 109 0.50 10)
+  (rect 289 109 0.50 10)
+  (rect 299.50 109 0.50 10)
+  (rect 0 120 0.50 10)
+  (rect 10.50 120 0.50 10)
+  (rect 12 120 0.50 10)
+  (rect 22.50 120 0.50 10)
+  (rect 24 120 0.50 10)
+  (rect 34.50 120 0.50 10)
+  (rect 36 120 0.50 10)
+  (rect 46.50 120 0.50 10)
+  (rect 48 120 0.50 10)
+  (rect 58.50 120 0.50 10)
+  (rect 120.50 120.50 10.50 10)
+  (rect 120.50 120.50 10.50 10)
+  (rect 132.50 120.50 10.50 10)
+  (rect 132.50 120.50 10.50 10)
+  (rect 144.50 120.50 10.50 10)
+  (rect 144.50 120.50 10.50 10)
+  (rect 156.50 120.50 10.50 10)
+  (rect 156.50 120.50 10.50 10)
+  (rect 168.50 120.50 10.50 10)
+  (rect 168.50 120.50 10.50 10)
+  (rect 181 121 10.50 10)
+  (rect 180.50 121 10.50 10)
+  (rect 193 121 10.50 10)
+  (rect 192.50 121 10.50 10)
+  (rect 205 121 10.50 10)
+  (rect 204.50 121 10.50 10)
+  (rect 217 121 10.50 10)
+  (rect 216.50 121 10.50 10)
+  (rect 229 121 10.50 10)
+  (rect 228.50 121 10.50 10)
+  (rect 241 121 0.50 10)
+  (rect 251.50 121 0.50 10)
+  (rect 253 121 0.50 10)
+  (rect 263.50 121 0.50 10)
+  (rect 265 121 0.50 10)
+  (rect 275.50 121 0.50 10)
+  (rect 277 121 0.50 10)
+  (rect 287.50 121 0.50 10)
+  (rect 289 121 0.50 10)
+  (rect 299.50 121 0.50 10)
+  (rect 0 132 0.50 10)
+  (rect 10.50 132 0.50 10)
+  (rect 12 132 0.50 10)
+  (rect 22.50 132 0.50 10)
+  (rect 24 132 0.50 10)
+  (rect 34.50 132 0.50 10)
+  (rect 36 132 0.50 10)
+  (rect 46.50 132 0.50 10)
+  (rect 48 132 0.50 10)
+  (rect 58.50 132 0.50 10)
+  (rect 120.50 132.50 10.50 10)
+  (rect 120.50 132.50 10.50 10)
+  (rect 132.50 132.50 10.50 10)
+  (rect 132.50 132.50 10.50 10)
+  (rect 144.50 132.50 10.50 10)
+  (rect 144.50 132.50 10.50 10)
+  (rect 156.50 132.50 10.50 10)
+  (rect 156.50 132.50 10.50 10)
+  (rect 168.50 132.50 10.50 10)
+  (rect 168.50 132.50 10.50 10)
+  (rect 181 133 10.50 10)
+  (rect 180.50 133 10.50 10)
+  (rect 193 133 10.50 10)
+  (rect 192.50 133 10.50 10)
+  (rect 205 133 10.50 10)
+  (rect 204.50 133 10.50 10)
+  (rect 217 133 10.50 10)
+  (rect 216.50 133 10.50 10)
+  (rect 229 133 10.50 10)
+  (rect 228.50 133 10.50 10)
+  (rect 241 133 0.50 10)
+  (rect 251.50 133 0.50 10)
+  (rect 253 133 0.50 10)
+  (rect 263.50 133 0.50 10)
+  (rect 265 133 0.50 10)
+  (rect 275.50 133 0.50 10)
+  (rect 277 133 0.50 10)
+  (rect 287.50 133 0.50 10)
+  (rect 289 133 0.50 10)
+  (rect 299.50 133 0.50 10)
+  (rect 0 144 0.50 10)
+  (rect 10.50 144 0.50 10)
+  (rect 12 144 0.50 10)
+  (rect 22.50 144 0.50 10)
+  (rect 24 144 0.50 10)
+  (rect 34.50 144 0.50 10)
+  (rect 36 144 0.50 10)
+  (rect 46.50 144 0.50 10)
+  (rect 48 144 0.50 10)
+  (rect 58.50 144 0.50 10)
+  (rect 120.50 144.50 10.50 10)
+  (rect 120.50 144.50 10.50 10)
+  (rect 132.50 144.50 10.50 10)
+  (rect 132.50 144.50 10.50 10)
+  (rect 144.50 144.50 10.50 10)
+  (rect 144.50 144.50 10.50 10)
+  (rect 156.50 144.50 10.50 10)
+  (rect 156.50 144.50 10.50 10)
+  (rect 168.50 144.50 10.50 10)
+  (rect 168.50 144.50 10.50 10)
+  (rect 181 145 10.50 10)
+  (rect 180.50 145 10.50 10)
+  (rect 193 145 10.50 10)
+  (rect 192.50 145 10.50 10)
+  (rect 205 145 10.50 10)
+  (rect 204.50 145 10.50 10)
+  (rect 217 145 10.50 10)
+  (rect 216.50 145 10.50 10)
+  (rect 229 145 10.50 10)
+  (rect 228.50 145 10.50 10)
+  (rect 241 145 0.50 10)
+  (rect 251.50 145 0.50 10)
+  (rect 253 145 0.50 10)
+  (rect 263.50 145 0.50 10)
+  (rect 265 145 0.50 10)
+  (rect 275.50 145 0.50 10)
+  (rect 277 145 0.50 10)
+  (rect 287.50 145 0.50 10)
+  (rect 289 145 0.50 10)
+  (rect 299.50 145 0.50 10)
+  (rect 0 156 0.50 10)
+  (rect 10.50 156 0.50 10)
+  (rect 12 156 0.50 10)
+  (rect 22.50 156 0.50 10)
+  (rect 24 156 0.50 10)
+  (rect 34.50 156 0.50 10)
+  (rect 36 156 0.50 10)
+  (rect 46.50 156 0.50 10)
+  (rect 48 156 0.50 10)
+  (rect 58.50 156 0.50 10)
+  (rect 120.50 156.50 10.50 10)
+  (rect 120.50 156.50 10.50 10)
+  (rect 132.50 156.50 10.50 10)
+  (rect 132.50 156.50 10.50 10)
+  (rect 144.50 156.50 10.50 10)
+  (rect 144.50 156.50 10.50 10)
+  (rect 156.50 156.50 10.50 10)
+  (rect 156.50 156.50 10.50 10)
+  (rect 168.50 156.50 10.50 10)
+  (rect 168.50 156.50 10.50 10)
+  (rect 181 157 10.50 10)
+  (rect 180.50 157 10.50 10)
+  (rect 193 157 10.50 10)
+  (rect 192.50 157 10.50 10)
+  (rect 205 157 10.50 10)
+  (rect 204.50 157 10.50 10)
+  (rect 217 157 10.50 10)
+  (rect 216.50 157 10.50 10)
+  (rect 229 157 10.50 10)
+  (rect 228.50 157 10.50 10)
+  (rect 241 157 0.50 10)
+  (rect 251.50 157 0.50 10)
+  (rect 253 157 0.50 10)
+  (rect 263.50 157 0.50 10)
+  (rect 265 157 0.50 10)
+  (rect 275.50 157 0.50 10)
+  (rect 277 157 0.50 10)
+  (rect 287.50 157 0.50 10)
+  (rect 289 157 0.50 10)
+  (rect 299.50 157 0.50 10)
+  (rect 0 168 0.50 10)
+  (rect 10.50 168 0.50 10)
+  (rect 12 168 0.50 10)
+  (rect 22.50 168 0.50 10)
+  (rect 24 168 0.50 10)
+  (rect 34.50 168 0.50 10)
+  (rect 36 168 0.50 10)
+  (rect 46.50 168 0.50 10)
+  (rect 48 168 0.50 10)
+  (rect 58.50 168 0.50 10)
+  (rect 120.50 168.50 10.50 10)
+  (rect 120.50 168.50 10.50 10)
+  (rect 132.50 168.50 10.50 10)
+  (rect 132.50 168.50 10.50 10)
+  (rect 144.50 168.50 10.50 10)
+  (rect 144.50 168.50 10.50 10)
+  (rect 156.50 168.50 10.50 10)
+  (rect 156.50 168.50 10.50 10)
+  (rect 168.50 168.50 10.50 10)
+  (rect 168.50 168.50 10.50 10)
+  (rect 181 169 10.50 10)
+  (rect 180.50 169 10.50 10)
+  (rect 193 169 10.50 10)
+  (rect 192.50 169 10.50 10)
+  (rect 205 169 10.50 10)
+  (rect 204.50 169 10.50 10)
+  (rect 217 169 10.50 10)
+  (rect 216.50 169 10.50 10)
+  (rect 229 169 10.50 10)
+  (rect 228.50 169 10.50 10)
+  (rect 241 169 0.50 10)
+  (rect 251.50 169 0.50 10)
+  (rect 253 169 0.50 10)
+  (rect 263.50 169 0.50 10)
+  (rect 265 169 0.50 10)
+  (rect 275.50 169 0.50 10)
+  (rect 277 169 0.50 10)
+  (rect 287.50 169 0.50 10)
+  (rect 289 169 0.50 10)
+  (rect 299.50 169 0.50 10)
+  (rect 0 180 0.50 10)
+  (rect 10.50 180 0.50 10)
+  (rect 12 180 0.50 10)
+  (rect 22.50 180 0.50 10)
+  (rect 24 180 0.50 10)
+  (rect 34.50 180 0.50 10)
+  (rect 36 180 0.50 10)
+  (rect 46.50 180 0.50 10)
+  (rect 48 180 0.50 10)
+  (rect 58.50 180 0.50 10)
+  (rect 120.50 180.50 10.50 10)
+  (rect 120.50 180.50 10.50 10)
+  (rect 132.50 180.50 10.50 10)
+  (rect 132.50 180.50 10.50 10)
+  (rect 144.50 180.50 10.50 10)
+  (rect 144.50 180.50 10.50 10)
+  (rect 156.50 180.50 10.50 10)
+  (rect 156.50 180.50 10.50 10)
+  (rect 168.50 180.50 10.50 10)
+  (rect 168.50 180.50 10.50 10)
+  (rect 181 181 10.50 10)
+  (rect 180.50 181 10.50 10)
+  (rect 193 181 10.50 10)
+  (rect 192.50 181 10.50 10)
+  (rect 205 181 10.50 10)
+  (rect 204.50 181 10.50 10)
+  (rect 217 181 10.50 10)
+  (rect 216.50 181 10.50 10)
+  (rect 229 181 10.50 10)
+  (rect 228.50 181 10.50 10)
+  (rect 241 181 0.50 10)
+  (rect 251.50 181 0.50 10)
+  (rect 253 181 0.50 10)
+  (rect 263.50 181 0.50 10)
+  (rect 265 181 0.50 10)
+  (rect 275.50 181 0.50 10)
+  (rect 277 181 0.50 10)
+  (rect 287.50 181 0.50 10)
+  (rect 289 181 0.50 10)
+  (rect 299.50 181 0.50 10)
+  (rect 0 192 0.50 10)
+  (rect 10.50 192 0.50 10)
+  (rect 12 192 0.50 10)
+  (rect 22.50 192 0.50 10)
+  (rect 24 192 0.50 10)
+  (rect 34.50 192 0.50 10)
+  (rect 36 192 0.50 10)
+  (rect 46.50 192 0.50 10)
+  (rect 48 192 0.50 10)
+  (rect 58.50 192 0.50 10)
+  (rect 120.50 192.50 10.50 10)
+  (rect 120.50 192.50 10.50 10)
+  (rect 132.50 192.50 10.50 10)
+  (rect 132.50 192.50 10.50 10)
+  (rect 144.50 192.50 10.50 10)
+  (rect 144.50 192.50 10.50 10)
+  (rect 156.50 192.50 10.50 10)
+  (rect 156.50 192.50 10.50 10)
+  (rect 168.50 192.50 10.50 10)
+  (rect 168.50 192.50 10.50 10)
+  (rect 181 193 10.50 10)
+  (rect 180.50 193 10.50 10)
+  (rect 193 193 10.50 10)
+  (rect 192.50 193 10.50 10)
+  (rect 205 193 10.50 10)
+  (rect 204.50 193 10.50 10)
+  (rect 217 193 10.50 10)
+  (rect 216.50 193 10.50 10)
+  (rect 229 193 10.50 10)
+  (rect 228.50 193 10.50 10)
+  (rect 241 193 0.50 10)
+  (rect 251.50 193 0.50 10)
+  (rect 253 193 0.50 10)
+  (rect 263.50 193 0.50 10)
+  (rect 265 193 0.50 10)
+  (rect 275.50 193 0.50 10)
+  (rect 277 193 0.50 10)
+  (rect 287.50 193 0.50 10)
+  (rect 289 193 0.50 10)
+  (rect 299.50 193 0.50 10)
+  (rect 0 204 0.50 10)
+  (rect 10.50 204 0.50 10)
+  (rect 12 204 0.50 10)
+  (rect 22.50 204 0.50 10)
+  (rect 24 204 0.50 10)
+  (rect 34.50 204 0.50 10)
+  (rect 36 204 0.50 10)
+  (rect 46.50 204 0.50 10)
+  (rect 48 204 0.50 10)
+  (rect 58.50 204 0.50 10)
+  (rect 120.50 204.50 10.50 10)
+  (rect 120.50 204.50 10.50 10)
+  (rect 132.50 204.50 10.50 10)
+  (rect 132.50 204.50 10.50 10)
+  (rect 144.50 204.50 10.50 10)
+  (rect 144.50 204.50 10.50 10)
+  (rect 156.50 204.50 10.50 10)
+  (rect 156.50 204.50 10.50 10)
+  (rect 168.50 204.50 10.50 10)
+  (rect 168.50 204.50 10.50 10)
+  (rect 181 205 10.50 10)
+  (rect 180.50 205 10.50 10)
+  (rect 193 205 10.50 10)
+  (rect 192.50 205 10.50 10)
+  (rect 205 205 10.50 10)
+  (rect 204.50 205 10.50 10)
+  (rect 217 205 10.50 10)
+  (rect 216.50 205 10.50 10)
+  (rect 229 205 10.50 10)
+  (rect 228.50 205 10.50 10)
+  (rect 241 205 0.50 10)
+  (rect 251.50 205 0.50 10)
+  (rect 253 205 0.50 10)
+  (rect 263.50 205 0.50 10)
+  (rect 265 205 0.50 10)
+  (rect 275.50 205 0.50 10)
+  (rect 277 205 0.50 10)
+  (rect 287.50 205 0.50 10)
+  (rect 289 205 0.50 10)
+  (rect 299.50 205 0.50 10)
+  (rect 0 216 0.50 10)
+  (rect 10.50 216 0.50 10)
+  (rect 12 216 0.50 10)
+  (rect 22.50 216 0.50 10)
+  (rect 24 216 0.50 10)
+  (rect 34.50 216 0.50 10)
+  (rect 36 216 0.50 10)
+  (rect 46.50 216 0.50 10)
+  (rect 48 216 0.50 10)
+  (rect 58.50 216 0.50 10)
+  (rect 120.50 216.50 10.50 10)
+  (rect 120.50 216.50 10.50 10)
+  (rect 132.50 216.50 10.50 10)
+  (rect 132.50 216.50 10.50 10)
+  (rect 144.50 216.50 10.50 10)
+  (rect 144.50 216.50 10.50 10)
+  (rect 156.50 216.50 10.50 10)
+  (rect 156.50 216.50 10.50 10)
+  (rect 168.50 216.50 10.50 10)
+  (rect 168.50 216.50 10.50 10)
+  (rect 181 217 10.50 10)
+  (rect 180.50 217 10.50 10)
+  (rect 193 217 10.50 10)
+  (rect 192.50 217 10.50 10)
+  (rect 205 217 10.50 10)
+  (rect 204.50 217 10.50 10)
+  (rect 217 217 10.50 10)
+  (rect 216.50 217 10.50 10)
+  (rect 229 217 10.50 10)
+  (rect 228.50 217 10.50 10)
+  (rect 241 217 0.50 10)
+  (rect 251.50 217 0.50 10)
+  (rect 253 217 0.50 10)
+  (rect 263.50 217 0.50 10)
+  (rect 265 217 0.50 10)
+  (rect 275.50 217 0.50 10)
+  (rect 277 217 0.50 10)
+  (rect 287.50 217 0.50 10)
+  (rect 289 217 0.50 10)
+  (rect 299.50 217 0.50 10)
+  (rect 0 228 0.50 10)
+  (rect 10.50 228 0.50 10)
+  (rect 12 228 0.50 10)
+  (rect 22.50 228 0.50 10)
+  (rect 24 228 0.50 10)
+  (rect 34.50 228 0.50 10)
+  (rect 36 228 0.50 10)
+  (rect 46.50 228 0.50 10)
+  (rect 48 228 0.50 10)
+  (rect 58.50 228 0.50 10)
+  (rect 120.50 228.50 10.50 10)
+  (rect 120.50 228.50 10.50 10)
+  (rect 132.50 228.50 10.50 10)
+  (rect 132.50 228.50 10.50 10)
+  (rect 144.50 228.50 10.50 10)
+  (rect 144.50 228.50 10.50 10)
+  (rect 156.50 228.50 10.50 10)
+  (rect 156.50 228.50 10.50 10)
+  (rect 168.50 228.50 10.50 10)
+  (rect 168.50 228.50 10.50 10)
+  (rect 181 229 10.50 10)
+  (rect 180.50 229 10.50 10)
+  (rect 193 229 10.50 10)
+  (rect 192.50 229 10.50 10)
+  (rect 205 229 10.50 10)
+  (rect 204.50 229 10.50 10)
+  (rect 217 229 10.50 10)
+  (rect 216.50 229 10.50 10)
+  (rect 229 229 10.50 10)
+  (rect 228.50 229 10.50 10)
+  (rect 241 229 0.50 10)
+  (rect 251.50 229 0.50 10)
+  (rect 253 229 0.50 10)
+  (rect 263.50 229 0.50 10)
+  (rect 265 229 0.50 10)
+  (rect 275.50 229 0.50 10)
+  (rect 277 229 0.50 10)
+  (rect 287.50 229 0.50 10)
+  (rect 289 229 0.50 10)
+  (rect 299.50 229 0.50 10)
+  (rect 0 240 0.50 10)
+  (rect 10.50 240 0.50 10)
+  (rect 12 240 0.50 10)
+  (rect 22.50 240 0.50 10)
+  (rect 24 240 0.50 10)
+  (rect 34.50 240 0.50 10)
+  (rect 36 240 0.50 10)
+  (rect 46.50 240 0.50 10)
+  (rect 48 240 0.50 10)
+  (rect 58.50 240 0.50 10)
+  (rect 120.50 240.50 10.50 10)
+  (rect 120.50 240.50 10.50 10)
+  (rect 132.50 240.50 10.50 10)
+  (rect 132.50 240.50 10.50 10)
+  (rect 144.50 240.50 10.50 10)
+  (rect 144.50 240.50 10.50 10)
+  (rect 156.50 240.50 10.50 10)
+  (rect 156.50 240.50 10.50 10)
+  (rect 168.50 240.50 10.50 10)
+  (rect 168.50 240.50 10.50 10)
+  (rect 181 241 10.50 10)
+  (rect 180.50 241 10.50 10)
+  (rect 193 241 10.50 10)
+  (rect 192.50 241 10.50 10)
+  (rect 205 241 10.50 10)
+  (rect 204.50 241 10.50 10)
+  (rect 217 241 10.50 10)
+  (rect 216.50 241 10.50 10)
+  (rect 229 241 10.50 10)
+  (rect 228.50 241 10.50 10)
+  (rect 241 241 0.50 10)
+  (rect 251.50 241 0.50 10)
+  (rect 253 241 0.50 10)
+  (rect 263.50 241 0.50 10)
+  (rect 265 241 0.50 10)
+  (rect 275.50 241 0.50 10)
+  (rect 277 241 0.50 10)
+  (rect 287.50 241 0.50 10)
+  (rect 289 241 0.50 10)
+  (rect 299.50 241 0.50 10)
+  (rect 0 252 0.50 10)
+  (rect 10.50 252 0.50 10)
+  (rect 12 252 0.50 10)
+  (rect 22.50 252 0.50 10)
+  (rect 24 252 0.50 10)
+  (rect 34.50 252 0.50 10)
+  (rect 36 252 0.50 10)
+  (rect 46.50 252 0.50 10)
+  (rect 48 252 0.50 10)
+  (rect 58.50 252 0.50 10)
+  (rect 120.50 252.50 10.50 10)
+  (rect 120.50 252.50 10.50 10)
+  (rect 132.50 252.50 10.50 10)
+  (rect 132.50 252.50 10.50 10)
+  (rect 144.50 252.50 10.50 10)
+  (rect 144.50 252.50 10.50 10)
+  (rect 156.50 252.50 10.50 10)
+  (rect 156.50 252.50 10.50 10)
+  (rect 168.50 252.50 10.50 10)
+  (rect 168.50 252.50 10.50 10)
+  (rect 181 253 10.50 10)
+  (rect 180.50 253 10.50 10)
+  (rect 193 253 10.50 10)
+  (rect 192.50 253 10.50 10)
+  (rect 205 253 10.50 10)
+  (rect 204.50 253 10.50 10)
+  (rect 217 253 10.50 10)
+  (rect 216.50 253 10.50 10)
+  (rect 229 253 10.50 10)
+  (rect 228.50 253 10.50 10)
+  (rect 241 253 0.50 10)
+  (rect 251.50 253 0.50 10)
+  (rect 253 253 0.50 10)
+  (rect 263.50 253 0.50 10)
+  (rect 265 253 0.50 10)
+  (rect 275.50 253 0.50 10)
+  (rect 277 253 0.50 10)
+  (rect 287.50 253 0.50 10)
+  (rect 289 253 0.50 10)
+  (rect 299.50 253 0.50 10)
+  (rect 0 264 0.50 10)
+  (rect 10.50 264 0.50 10)
+  (rect 12 264 0.50 10)
+  (rect 22.50 264 0.50 10)
+  (rect 24 264 0.50 10)
+  (rect 34.50 264 0.50 10)
+  (rect 36 264 0.50 10)
+  (rect 46.50 264 0.50 10)
+  (rect 48 264 0.50 10)
+  (rect 58.50 264 0.50 10)
+  (rect 120.50 264.50 10.50 10)
+  (rect 120.50 264.50 10.50 10)
+  (rect 132.50 264.50 10.50 10)
+  (rect 132.50 264.50 10.50 10)
+  (rect 144.50 264.50 10.50 10)
+  (rect 144.50 264.50 10.50 10)
+  (rect 156.50 264.50 10.50 10)
+  (rect 156.50 264.50 10.50 10)
+  (rect 168.50 264.50 10.50 10)
+  (rect 168.50 264.50 10.50 10)
+  (rect 181 265 10.50 10)
+  (rect 180.50 265 10.50 10)
+  (rect 193 265 10.50 10)
+  (rect 192.50 265 10.50 10)
+  (rect 205 265 10.50 10)
+  (rect 204.50 265 10.50 10)
+  (rect 217 265 10.50 10)
+  (rect 216.50 265 10.50 10)
+  (rect 229 265 10.50 10)
+  (rect 228.50 265 10.50 10)
+  (rect 241 265 0.50 10)
+  (rect 251.50 265 0.50 10)
+  (rect 253 265 0.50 10)
+  (rect 263.50 265 0.50 10)
+  (rect 265 265 0.50 10)
+  (rect 275.50 265 0.50 10)
+  (rect 277 265 0.50 10)
+  (rect 287.50 265 0.50 10)
+  (rect 289 265 0.50 10)
+  (rect 299.50 265 0.50 10)
+  (rect 0 276 0.50 10)
+  (rect 10.50 276 0.50 10)
+  (rect 12 276 0.50 10)
+  (rect 22.50 276 0.50 10)
+  (rect 24 276 0.50 10)
+  (rect 34.50 276 0.50 10)
+  (rect 36 276 0.50 10)
+  (rect 46.50 276 0.50 10)
+  (rect 48 276 0.50 10)
+  (rect 58.50 276 0.50 10)
+  (rect 120.50 276.50 10.50 10)
+  (rect 120.50 276.50 10.50 10)
+  (rect 132.50 276.50 10.50 10)
+  (rect 132.50 276.50 10.50 10)
+  (rect 144.50 276.50 10.50 10)
+  (rect 144.50 276.50 10.50 10)
+  (rect 156.50 276.50 10.50 10)
+  (rect 156.50 276.50 10.50 10)
+  (rect 168.50 276.50 10.50 10)
+  (rect 168.50 276.50 10.50 10)
+  (rect 181 277 10.50 10)
+  (rect 180.50 277 10.50 10)
+  (rect 193 277 10.50 10)
+  (rect 192.50 277 10.50 10)
+  (rect 205 277 10.50 10)
+  (rect 204.50 277 10.50 10)
+  (rect 217 277 10.50 10)
+  (rect 216.50 277 10.50 10)
+  (rect 229 277 10.50 10)
+  (rect 228.50 277 10.50 10)
+  (rect 241 277 0.50 10)
+  (rect 251.50 277 0.50 10)
+  (rect 253 277 0.50 10)
+  (rect 263.50 277 0.50 10)
+  (rect 265 277 0.50 10)
+  (rect 275.50 277 0.50 10)
+  (rect 277 277 0.50 10)
+  (rect 287.50 277 0.50 10)
+  (rect 289 277 0.50 10)
+  (rect 299.50 277 0.50 10)
+  (rect 0 288 0.50 10)
+  (rect 10.50 288 0.50 10)
+  (rect 12 288 0.50 10)
+  (rect 22.50 288 0.50 10)
+  (rect 24 288 0.50 10)
+  (rect 34.50 288 0.50 10)
+  (rect 36 288 0.50 10)
+  (rect 46.50 288 0.50 10)
+  (rect 48 288 0.50 10)
+  (rect 58.50 288 0.50 10)
+  (rect 120.50 288.50 10.50 10)
+  (rect 120.50 288.50 10.50 10)
+  (rect 132.50 288.50 10.50 10)
+  (rect 132.50 288.50 10.50 10)
+  (rect 144.50 288.50 10.50 10)
+  (rect 144.50 288.50 10.50 10)
+  (rect 156.50 288.50 10.50 10)
+  (rect 156.50 288.50 10.50 10)
+  (rect 168.50 288.50 10.50 10)
+  (rect 168.50 288.50 10.50 10)
+  (rect 181 289 10.50 10)
+  (rect 180.50 289 10.50 10)
+  (rect 193 289 10.50 10)
+  (rect 192.50 289 10.50 10)
+  (rect 205 289 10.50 10)
+  (rect 204.50 289 10.50 10)
+  (rect 217 289 10.50 10)
+  (rect 216.50 289 10.50 10)
+  (rect 229 289 10.50 10)
+  (rect 228.50 289 10.50 10)
+  (rect 241 289 0.50 10)
+  (rect 251.50 289 0.50 10)
+  (rect 253 289 0.50 10)
+  (rect 263.50 289 0.50 10)
+  (rect 265 289 0.50 10)
+  (rect 275.50 289 0.50 10)
+  (rect 277 289 0.50 10)
+  (rect 287.50 289 0.50 10)
+  (rect 289 289 0.50 10)
+  (rect 299.50 289 0.50 10)
+  (rect 0 300 0.50 10)
+  (rect 10.50 300 0.50 10)
+  (rect 12 300 0.50 10)
+  (rect 22.50 300 0.50 10)
+  (rect 24 300 0.50 10)
+  (rect 34.50 300 0.50 10)
+  (rect 36 300 0.50 10)
+  (rect 46.50 300 0.50 10)
+  (rect 48 300 0.50 10)
+  (rect 58.50 300 0.50 10)
+  (rect 120.50 300.50 10.50 10)
+  (rect 120.50 300.50 10.50 10)
+  (rect 132.50 300.50 10.50 10)
+  (rect 132.50 300.50 10.50 10)
+  (rect 144.50 300.50 10.50 10)
+  (rect 144.50 300.50 10.50 10)
+  (rect 156.50 300.50 10.50 10)
+  (rect 156.50 300.50 10.50 10)
+  (rect 168.50 300.50 10.50 10)
+  (rect 168.50 300.50 10.50 10)
+  (rect 181 301 10.50 10)
+  (rect 180.50 301 10.50 10)
+  (rect 193 301 10.50 10)
+  (rect 192.50 301 10.50 10)
+  (rect 205 301 10.50 10)
+  (rect 204.50 301 10.50 10)
+  (rect 217 301 10.50 10)
+  (rect 216.50 301 10.50 10)
+  (rect 229 301 10.50 10)
+  (rect 228.50 301 10.50 10)
+  (rect 241 301 0.50 10)
+  (rect 251.50 301 0.50 10)
+  (rect 253 301 0.50 10)
+  (rect 263.50 301 0.50 10)
+  (rect 265 301 0.50 10)
+  (rect 275.50 301 0.50 10)
+  (rect 277 301 0.50 10)
+  (rect 287.50 301 0.50 10)
+  (rect 289 301 0.50 10)
+  (rect 299.50 301 0.50 10)
+  (rect 0 312 0.50 10)
+  (rect 10.50 312 0.50 10)
+  (rect 12 312 0.50 10)
+  (rect 22.50 312 0.50 10)
+  (rect 24 312 0.50 10)
+  (rect 34.50 312 0.50 10)
+  (rect 36 312 0.50 10)
+  (rect 46.50 312 0.50 10)
+  (rect 48 312 0.50 10)
+  (rect 58.50 312 0.50 10)
+  (rect 120.50 312.50 10.50 10)
+  (rect 120.50 312.50 10.50 10)
+  (rect 132.50 312.50 10.50 10)
+  (rect 132.50 312.50 10.50 10)
+  (rect 144.50 312.50 10.50 10)
+  (rect 144.50 312.50 10.50 10)
+  (rect 156.50 312.50 10.50 10)
+  (rect 156.50 312.50 10.50 10)
+  (rect 168.50 312.50 10.50 10)
+  (rect 168.50 312.50 10.50 10)
+  (rect 181 313 10.50 10)
+  (rect 180.50 313 10.50 10)
+  (rect 193 313 10.50 10)
+  (rect 192.50 313 10.50 10)
+  (rect 205 313 10.50 10)
+  (rect 204.50 313 10.50 10)
+  (rect 217 313 10.50 10)
+  (rect 216.50 313 10.50 10)
+  (rect 229 313 10.50 10)
+  (rect 228.50 313 10.50 10)
+  (rect 241 313 0.50 10)
+  (rect 251.50 313 0.50 10)
+  (rect 253 313 0.50 10)
+  (rect 263.50 313 0.50 10)
+  (rect 265 313 0.50 10)
+  (rect 275.50 313 0.50 10)
+  (rect 277 313 0.50 10)
+  (rect 287.50 313 0.50 10)
+  (rect 289 313 0.50 10)
+  (rect 299.50 313 0.50 10)
+  (rect 0 324 0.50 10)
+  (rect 10.50 324 0.50 10)
+  (rect 12 324 0.50 10)
+  (rect 22.50 324 0.50 10)
+  (rect 24 324 0.50 10)
+  (rect 34.50 324 0.50 10)
+  (rect 36 324 0.50 10)
+  (rect 46.50 324 0.50 10)
+  (rect 48 324 0.50 10)
+  (rect 58.50 324 0.50 10)
+  (rect 120.50 324.50 10.50 10)
+  (rect 120.50 324.50 10.50 10)
+  (rect 132.50 324.50 10.50 10)
+  (rect 132.50 324.50 10.50 10)
+  (rect 144.50 324.50 10.50 10)
+  (rect 144.50 324.50 10.50 10)
+  (rect 156.50 324.50 10.50 10)
+  (rect 156.50 324.50 10.50 10)
+  (rect 168.50 324.50 10.50 10)
+  (rect 168.50 324.50 10.50 10)
+  (rect 181 325 10.50 10)
+  (rect 180.50 325 10.50 10)
+  (rect 193 325 10.50 10)
+  (rect 192.50 325 10.50 10)
+  (rect 205 325 10.50 10)
+  (rect 204.50 325 10.50 10)
+  (rect 217 325 10.50 10)
+  (rect 216.50 325 10.50 10)
+  (rect 229 325 10.50 10)
+  (rect 228.50 325 10.50 10)
+  (rect 241 325 0.50 10)
+  (rect 251.50 325 0.50 10)
+  (rect 253 325 0.50 10)
+  (rect 263.50 325 0.50 10)
+  (rect 265 325 0.50 10)
+  (rect 275.50 325 0.50 10)
+  (rect 277 325 0.50 10)
+  (rect 287.50 325 0.50 10)
+  (rect 289 325 0.50 10)
+  (rect 299.50 325 0.50 10)
+  (rect 0 336 0.50 10)
+  (rect 10.50 336 0.50 10)
+  (rect 12 336 0.50 10)
+  (rect 22.50 336 0.50 10)
+  (rect 24 336 0.50 10)
+  (rect 34.50 336 0.50 10)
+  (rect 36 336 0.50 10)
+  (rect 46.50 336 0.50 10)
+  (rect 48 336 0.50 10)
+  (rect 58.50 336 0.50 10)
+  (rect 120.50 336.50 10.50 10)
+  (rect 120.50 336.50 10.50 10)
+  (rect 132.50 336.50 10.50 10)
+  (rect 132.50 336.50 10.50 10)
+  (rect 144.50 336.50 10.50 10)
+  (rect 144.50 336.50 10.50 10)
+  (rect 156.50 336.50 10.50 10)
+  (rect 156.50 336.50 10.50 10)
+  (rect 168.50 336.50 10.50 10)
+  (rect 168.50 336.50 10.50 10)
+  (rect 181 337 10.50 10)
+  (rect 180.50 337 10.50 10)
+  (rect 193 337 10.50 10)
+  (rect 192.50 337 10.50 10)
+  (rect 205 337 10.50 10)
+  (rect 204.50 337 10.50 10)
+  (rect 217 337 10.50 10)
+  (rect 216.50 337 10.50 10)
+  (rect 229 337 10.50 10)
+  (rect 228.50 337 10.50 10)
+  (rect 241 337 0.50 10)
+  (rect 251.50 337 0.50 10)
+  (rect 253 337 0.50 10)
+  (rect 263.50 337 0.50 10)
+  (rect 265 337 0.50 10)
+  (rect 275.50 337 0.50 10)
+  (rect 277 337 0.50 10)
+  (rect 287.50 337 0.50 10)
+  (rect 289 337 0.50 10)
+  (rect 299.50 337 0.50 10)
+  (rect 0 348 0.50 10)
+  (rect 10.50 348 0.50 10)
+  (rect 12 348 0.50 10)
+  (rect 22.50 348 0.50 10)
+  (rect 24 348 0.50 10)
+  (rect 34.50 348 0.50 10)
+  (rect 36 348 0.50 10)
+  (rect 46.50 348 0.50 10)
+  (rect 48 348 0.50 10)
+  (rect 58.50 348 0.50 10)
+  (rect 120.50 348.50 10.50 10)
+  (rect 120.50 348.50 10.50 10)
+  (rect 132.50 348.50 10.50 10)
+  (rect 132.50 348.50 10.50 10)
+  (rect 144.50 348.50 10.50 10)
+  (rect 144.50 348.50 10.50 10)
+  (rect 156.50 348.50 10.50 10)
+  (rect 156.50 348.50 10.50 10)
+  (rect 168.50 348.50 10.50 10)
+  (rect 168.50 348.50 10.50 10)
+  (rect 181 349 10.50 10)
+  (rect 180.50 349 10.50 10)
+  (rect 193 349 10.50 10)
+  (rect 192.50 349 10.50 10)
+  (rect 205 349 10.50 10)
+  (rect 204.50 349 10.50 10)
+  (rect 217 349 10.50 10)
+  (rect 216.50 349 10.50 10)
+  (rect 229 349 10.50 10)
+  (rect 228.50 349 10.50 10)
+  (rect 241 349 0.50 10)
+  (rect 251.50 349 0.50 10)
+  (rect 253 349 0.50 10)
+  (rect 263.50 349 0.50 10)
+  (rect 265 349 0.50 10)
+  (rect 275.50 349 0.50 10)
+  (rect 277 349 0.50 10)
+  (rect 287.50 349 0.50 10)
+  (rect 289 349 0.50 10)
+  (rect 299.50 349 0.50 10)
+)
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastrepainthidpitransformonsubpixelrepaintrecthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/hidpi-transform-on-subpixel-repaintrect.html (0 => 172373)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/hidpi-transform-on-subpixel-repaintrect.html                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/hidpi-transform-on-subpixel-repaintrect.html        2014-08-10 00:48:59 UTC (rev 172373)
</span><span class="lines">@@ -0,0 +1,58 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that we use correct repaint coordinates for transformed objects.&lt;/title&gt;
+&lt;style&gt;
+  div {
+    position: absolute;
+    top: 0px;
+    left: 0px;
+    width: 10px;
+    height: 10px;
+    background-color: red;
+    -webkit-transform: translateX(0.25px);
+  }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  for (i = 0; i &lt; 30; ++i) {
+    adjustment = 0;
+    for (j = 0; j &lt; 30; ++j) {
+      var d = document.createElement(&quot;div&quot;);
+      d.style.top = (12 * i + adjustment)  + &quot;px&quot;;
+      d.style.left = (12 * j + adjustment)  + &quot;px&quot;;
+      adjustment += 0.05;
+      container.appendChild(d);
+    }
+  }
+
+  function move() {
+    var divs = document.getElementsByTagName(&quot;div&quot;);
+    for (i = 0; i &lt; divs.length; ++i)
+      divs[i].style.left = parseInt(divs[i].style.left) + 0.3 + &quot;px&quot;;
+
+    if (window.testRunner &amp;&amp; window.internals) {
+        var dummy = document.body.offsetTop;
+        var repaintRects = window.internals.repaintRectsAsText();
+        window.internals.stopTrackingRepaints();
+
+        var pre = document.createElement('pre');
+        document.body.appendChild(pre);
+        pre.innerHTML = repaintRects;
+        testRunner.notifyDone();
+      }
+  }
+  
+  if (window.testRunner &amp;&amp; window.internals) {
+    window.testRunner.dumpAsText(false);
+    window.internals.startTrackingRepaints();
+    testRunner.waitUntilDone();
+  }
+
+  setTimeout(move, 0);
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (172372 => 172373)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-08-09 06:50:19 UTC (rev 172372)
+++ trunk/Source/WebCore/ChangeLog        2014-08-10 00:48:59 UTC (rev 172373)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2014-08-09  Zalan Bujtas  &lt;zalan@apple.com&gt;
+
+        Subpixel rendering: Transforms on non-compositing layers leave bits behind when the box boundaries changes.
+        https://bugs.webkit.org/show_bug.cgi?id=135786
+
+        Reviewed by Simon Fraser.
+
+        Since we don't control the transformed context painting's snapping strategy, our best bet to fully
+        include the transformed box when requesting for repaint is to use enclosing.
+        Pixelsnapping doesn't work here for all cases. For example, a scaled box at 0.8px can be anti-aliased painted
+        both at 0.5px and 1px, while with pixelsnapping we'd expect it to be painted starting from 1px;
+
+        Test: fast/repaint/hidpi-transform-on-subpixel-repaintrect.html
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::computeRectForRepaint): enclose the result of the transform.
+
</ins><span class="cx"> 2014-08-08  Mark Lam  &lt;mark.lam@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION: Inspector crashes when debugger is paused and injected scripts access window.screen().
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (172372 => 172373)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.cpp        2014-08-09 06:50:19 UTC (rev 172372)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp        2014-08-10 00:48:59 UTC (rev 172373)
</span><span class="lines">@@ -2116,7 +2116,7 @@
</span><span class="cx">         LayoutState* layoutState = view().layoutState();
</span><span class="cx"> 
</span><span class="cx">         if (layer() &amp;&amp; layer()-&gt;transform())
</span><del>-            rect = LayoutRect(layer()-&gt;transform()-&gt;mapRect(pixelSnappedForPainting(rect, document().deviceScaleFactor())));
</del><ins>+            rect = LayoutRect(enclosingRectForPainting(layer()-&gt;transform()-&gt;mapRect(rect), document().deviceScaleFactor()));
</ins><span class="cx"> 
</span><span class="cx">         // We can't trust the bits on RenderObject, because this might be called while re-resolving style.
</span><span class="cx">         if (styleToUse.hasInFlowPosition() &amp;&amp; layer())
</span><span class="lines">@@ -2169,7 +2169,7 @@
</span><span class="cx">     // in the parent's coordinate space that encloses us.
</span><span class="cx">     if (hasLayer() &amp;&amp; layer()-&gt;transform()) {
</span><span class="cx">         fixed = position == FixedPosition;
</span><del>-        rect = LayoutRect(layer()-&gt;transform()-&gt;mapRect(pixelSnappedForPainting(rect, document().deviceScaleFactor())));
</del><ins>+        rect = LayoutRect(enclosingRectForPainting(layer()-&gt;transform()-&gt;mapRect(rect), document().deviceScaleFactor()));
</ins><span class="cx">         topLeft = rect.location();
</span><span class="cx">         topLeft.move(locationOffset());
</span><span class="cx">     } else if (position == FixedPosition)
</span></span></pre>
</div>
</div>

</body>
</html>