index.html (165220B)
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 <html xmlns="http://www.w3.org/1999/xhtml" 5 lang="en" xml:lang="en"> 6 <head> 7 8 <title>WPS: PostScript for the Web</title> 9 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 10 <meta name="generator" content="Org-mode"/> 11 <meta name="generated" content="2010-01-24 21:15:49 CET"/> 12 <meta name="author" content="Tomas Hlavaty"/> 13 <meta name="description" content="PostScript and PDF interpreter for HTML 5 canvas"/> 14 <meta name="keywords" content="PostScript, PDF, interpreter, HTML 5, canvas, JavaScript"/> 15 <style type="text/css"> 16 <!--/*--><![CDATA[/*><!--*/ 17 html { font-family: Times, serif; font-size: 12pt; } 18 .title { text-align: center; } 19 .todo { color: red; } 20 .done { color: green; } 21 .tag { background-color: #add8e6; font-weight:normal } 22 .target { } 23 .timestamp { color: #bebebe; } 24 .timestamp-kwd { color: #5f9ea0; } 25 p.verse { margin-left: 3% } 26 pre { 27 border: 1pt solid #AEBDCC; 28 background-color: #F3F5F7; 29 padding: 5pt; 30 font-family: courier, monospace; 31 font-size: 90%; 32 overflow:auto; 33 } 34 table { border-collapse: collapse; } 35 td, th { vertical-align: top; } 36 dt { font-weight: bold; } 37 div.figure { padding: 0.5em; } 38 div.figure p { text-align: center; } 39 .linenr { font-size:smaller } 40 .code-highlighted {background-color:#ffff00;} 41 .org-info-js_info-navigation { border-style:none; } 42 #org-info-js_console-label { font-size:10px; font-weight:bold; 43 white-space:nowrap; } 44 .org-info-js_search-highlight {background-color:#ffff00; color:#000000; 45 font-weight:bold; } 46 /*]]>*/--> 47 </style> 48 <script type="text/javascript"> 49 <!--/*--><![CDATA[/*><!--*/ 50 function CodeHighlightOn(elem, id) 51 { 52 var target = document.getElementById(id); 53 if(null != target) { 54 elem.cacheClassElem = elem.className; 55 elem.cacheClassTarget = target.className; 56 target.className = "code-highlighted"; 57 elem.className = "code-highlighted"; 58 } 59 } 60 function CodeHighlightOff(elem, id) 61 { 62 var target = document.getElementById(id); 63 if(elem.cacheClassElem) 64 elem.className = elem.cacheClassElem; 65 if(elem.cacheClassTarget) 66 target.className = elem.cacheClassTarget; 67 } 68 /*]]>*///--> 69 </script> 70 </head> 71 <body> 72 <div id="content"> 73 74 75 <p class="h0">WPS: PostScript for the Web</p> 76 77 <p> 78 Welcome to WPS, a PostScript and PDF interpreter for HTML 5 canvas. 79 </p> 80 <p> 81 Note that to see and run the examples, JavaScript must be enabled and 82 your browser must support HTML 5 canvas (latest Firefox, Opera and 83 Chrome should work). 84 </p> 85 <p> 86 This document allows you to try simple PostScript programs in the WPS 87 sandbox. A few examples are presented here accompanied by a brief 88 description of the interpreter and listing some implementation notes 89 for my future reference. 90 </p> 91 92 93 <style> 94 tt {background-color:#fdf} 95 canvas {width:12em;height:12em;border:1px dashed black} 96 </style> 97 98 <div id="wps" style="display:none"> 99 100 <pre class="src src-text">%%% (c) 2009 Tomas Hlavaty 101 102 currentdict/systemdict currentdict put 103 systemdict/{/mark cvx put 104 systemdict/[/mark cvx put 105 systemdict/] 106 /counttomark cvx 107 /array cvx 108 /astore cvx 109 /exch cvx 110 /pop cvx 111 5 array astore cvx put 112 systemdict/}/] cvx/cvx cvx 2 array astore cvx put 113 systemdict/def{currentdict 2 index 2 index put pop pop}put 114 115 /maxlength 1000 def % TODO 116 /.bdef{bind def}bind def 117 /.xdef{exch def}.bdef 118 /dup{0 index}.bdef 119 /load{dup where pop exch get}.bdef 120 /.ldef{load def}.bdef 121 /if{{}ifelse}.bdef 122 /cleartomark{array pop}.bdef 123 /known{exch begin where{currentdict eq}{false}if end}.bdef 124 /store{1 index where{3 1 roll put}{def}ifelse}.bdef 125 /not{{false}{true}ifelse}.bdef 126 /.logand{{{true}{false}ifelse}{pop false}ifelse}.bdef 127 /and/.logand .ldef % TODO numeric and 128 /.logor{{pop true}{{true}{false}ifelse}ifelse}.bdef 129 /or/.logor .ldef % TODO numeric or 130 /ne{eq not}.bdef 131 /ge{lt not}.bdef 132 /le{1 index 1 index eq 3 1 roll lt or}.bdef 133 /gt{le not}.bdef 134 /.repeat{1 1 4 2 roll for}.bdef 135 136 %% math 137 138 /floor{.math(floor)1 .call}.bdef 139 140 /neg{0 exch sub}.bdef 141 /add{neg sub}.bdef 142 /idiv{div floor}.bdef 143 144 /abs{.math(abs)1 .call}.bdef 145 /.acos{.math(acos)1 .call}.bdef 146 /.asin{.math(asin)1 .call}.bdef 147 /atan{exch .math(atan)1 .call}.bdef 148 /.atan2{.math(atan2)2 .call}.bdef 149 /ceiling{.math(ceil)1 .call}.bdef 150 /cos{.math(cos)1 .call}.bdef 151 /.exp{.math(exp)1 .call}.bdef 152 /log{.math(log)1 .call}.bdef 153 /.max{.math(max)2 .call}.bdef 154 /.min{.math(min)2 .call}.bdef 155 /.pow{.math(pow)2 .call}.bdef 156 /.random{.math(random)0 .call}.bdef 157 /rand{.random}.bdef % TODO follow spec 158 /round{.math(round)1 .call}.bdef 159 /sin{.math(sin)1 .call}.bdef 160 /sqrt{.math(sqrt)1 .call}.bdef 161 /.tan{.math(tan)1 .call}.bdef 162 /truncate{.math(truncate)1 .call}.bdef % TODO Math.truncate does not exist! 163 164 /.e{.math(E)get}.bdef 165 /.ln2{.math(LN2)get}.bdef 166 /.ln10{.math(LN10)get}.bdef 167 /.log2e{.math(LOG2E)get}.bdef 168 /.log10e{.math(LOG10E)get}.bdef 169 /.pi{.math(PI)get}.bdef 170 /.sqrt1_2{.math(SQRT1_2)get}.bdef 171 /.sqrt2{.math(SQRT2)get}.bdef 172 173 /cvr{1.0 mul}.bdef 174 /cvi{round}.bdef 175 176 %% html 177 178 /.setTimeout{.window(setTimeout)2 .call}.bdef % cb ms -- id 179 /.clearTimeout{.window(clearTimeout)1 .call pop}.bdef % id -- 180 /.setInterval{.window(setInterval)2 .call}.bdef % cb ms -- id 181 /.clearInterval{.window(clearInterval)1 .call pop}.bdef % id -- 182 /.document{.window(document)get}.bdef % -- document 183 /.getElementById{.document(getElementById)1 .call}.bdef % id -- w 184 /.hook{put}.bdef % e k cb -- 185 186 %% canvas 187 188 /.setGc{.getElementById(2d)exch(getContext)1 .call/.$gc .xdef}.bdef 189 /.gc{/.$gc load}.bdef 190 /.gget{.gc exch get}.bdef 191 /.gput{.gc 3 1 roll exch put}.bdef 192 /.gcall0{.gc 3 1 roll .call pop}.bdef 193 /.gcall1{.gc 3 1 roll .call}.bdef 194 /.gcanvas{(canvas).gget}.bdef 195 /.gdim{.gcanvas exch(height)exch put .gcanvas exch(width)exch put}.bdef 196 /.gbox{.gdim pop pop}.bdef % TODO compute properly 197 198 /.save{(save)0 .gcall0}.bdef 199 /.restore{(restore)0 .gcall0}.bdef 200 /.scale{(scale)2 .gcall0}.bdef 201 /.rotate{(rotate)1 .gcall0}.bdef 202 /.translate{(translate)2 .gcall0}.bdef 203 /.transform{(transform)6 .gcall0}.bdef 204 /.setTransform{(setTransform)6 .gcall0}.bdef 205 /.createLinearGradient{(createLinearGradient)4 .gcall1}.bdef 206 /.createRadialGradient{(createRadialGradient)6 .gcall1}.bdef 207 /.createPattern{(createPattern)2 .gcall1}.bdef 208 /.clearRect{(clearRect)4 .gcall0}.bdef 209 /.fillRect{(fillRect)4 .gcall0}.bdef 210 /.strokeRect{(strokeRect)4 .gcall0}.bdef 211 /.beginPath{(beginPath)0 .gcall0}.bdef 212 /.closePath{(closePath)0 .gcall0}.bdef 213 /.moveTo{(moveTo)2 .gcall0}.bdef 214 /.lineTo{(lineTo)2 .gcall0}.bdef 215 /.quadraticCurveTo{(quadraticCurveTo)4 .gcall0}.bdef 216 /.bezierCurveTo{(bezierCurveTo)6 .gcall0}.bdef 217 /.arcTo{(arcTo)5 .gcall0}.bdef 218 /.rect{(rect)4 .gcall0}.bdef 219 /.arc{(arc)6 .gcall0}.bdef 220 /.fill{(fill)0 .gcall0}.bdef 221 /.stroke{(stroke)0 .gcall0}.bdef 222 /.clip{(clip)0 .gcall0}.bdef 223 /.isPointInPath{(isPointInPath)2 .gcall1}.bdef 224 /.fillText{(fillText)4 .gcall0}.bdef 225 %/.fillText{}.bdef % TODO not working in Firefox 226 /.strokeText{(strokeText)4 .gcall0}.bdef 227 %/.strokeText{}.bdef % TODO not working in Firefox 228 /.measureText{(measureText)1 .gcall1}.bdef 229 /.drawImage1{(drawImage1)5 .gcall0}.bdef 230 /.drawImage2{(drawImage2)9 .gcall0}.bdef 231 /.createImageData1{(createImageData1)1 .gcall1}.bdef 232 /.createImageData2{(createImageData2)2 .gcall1}.bdef 233 /.getImageData{(getImageData)4 .gcall1}.bdef 234 /.putImageData{(putImageData)7 .gcall0}.bdef 235 236 /.getGlobalAlpha{(globalAlpha).gget}.bdef 237 /.getGlobalCompositeOperation{(globalCompositeOperation).gget}.bdef 238 /.getStrokeStyle{(strokeStyle).gget}.bdef 239 /.getFillStyle{(fillStyle).gget}.bdef 240 /.getLineWidth{(lineWidth).gget}.bdef 241 /.getLineCap{(lineCap).gget}.bdef 242 /.getLineJoin{(lineJoin).gget}.bdef 243 /.getMiterLimit{(miterLimit).gget}.bdef 244 /.getShadowOffsetX{(shadowOffsetX).gget}.bdef 245 /.getShadowOffsetY{(shadowOffsetY).gget}.bdef 246 /.getShadowBlur{(shadowBlur).gget}.bdef 247 /.getShadowColor{(shadowColor).gget}.bdef 248 /.getFont{(font).gget}.bdef 249 /.getTextAlign{(textAlign).gget}.bdef 250 /.getTextBaseline{(textBaseline).gget}.bdef 251 252 /.setGlobalAlpha{(globalAlpha).gput}.bdef 253 /.setGlobalCompositeOperation{(globalCompositeOperation).gput}.bdef 254 /.setStrokeStyle{(strokeStyle).gput}.bdef 255 /.setFillStyle{(fillStyle).gput}.bdef 256 /.setLineWidth{(lineWidth).gput}.bdef 257 /.setLineCap{(lineCap).gput}.bdef 258 /.setLineJoin{(lineJoin).gput}.bdef 259 %/.setLineCap{pop}.bdef % TODO remove this later (Firefox throws) 260 %/.setLineJoin{pop}.bdef % TODO remove this later (Firefox throws) 261 /.setMiterLimit{(miterLimit).gput}.bdef 262 /.setShadowOffsetX{(shadowOffsetX).gput}.bdef 263 /.setShadowOffsetY{(shadowOffsetY).gput}.bdef 264 /.setShadowBlur{(shadowBlur).gput}.bdef 265 /.setShadowColor{(shadowColor).gput}.bdef 266 /.setFont{(font).gput}.bdef 267 /.setTextAlign{(textAlign).gput}.bdef 268 /.setTextBaseline{(textBaseline).gput}.bdef 269 270 %% PostScript 271 272 /.deg2rad{.pi 180 div mul}.bdef 273 /.rad2deg{180 .pi div mul}.bdef 274 275 /.$cx 0 def 276 /.$cy 0 def 277 /.$px 0 def 278 /.$py 0 def 279 /.setPoint{/.$cy .xdef/.$cx .xdef}.bdef 280 /.setPath{/.$py .xdef/.$px .xdef}.bdef 281 /currentpoint{/.$cx load /.$cy load}.bdef 282 /.getPath{/.$px load /.$py load}.bdef 283 284 /identmatrix{pop [1 0 0 1 0 0]}.bdef % TODO fill 285 /matrix{6 array identmatrix}.bdef 286 /setmatrix{/.$tm .xdef}.bdef 287 /defaultmatrix{pop matrix}.bdef % TODO fill 288 /initmatrix{matrix defaultmatrix setmatrix}.bdef 289 /currentmatrix{pop /.$tm load}.bdef % TODO fill 290 initmatrix 291 292 /.getTmd{/.$tmd load}.bdef 293 /.setTmd{/.$tmd .xdef}.bdef 294 /.resetTmd{matrix .setTmd}.bdef 295 .resetTmd 296 297 /.update{ % m -- 298 currentpoint 2 index % m .$cx .$cy m 299 .xy .setPoint % m 300 dup .getTmd exch .mmul .setTmd % (.$tmd x m) 301 dup currentmatrix exch .mmul setmatrix % = .$tm x m 302 }.bdef 303 304 /transform{dup type(arraytype)ne{.getTmd}if .xy}.bdef 305 /itransform{dup type(arraytype)ne{.getTmd}if .minv .xy}.bdef 306 307 /.scaleM{0 0 3 2 roll 0 0 6 array astore}.bdef % x y -- [x 0 0 y 0 0] 308 /.scale3{pop .scaleM}.bdef 309 /.scale2{2 copy .scaleM .update .scale}.bdef 310 /scale{dup type(arraytype)eq{.scale3}{.scale2}ifelse}.bdef 311 312 /.translateM{1 0 0 1 6 4 roll 6 array astore}.bdef % x y -- [1 0 0 1 x y] 313 /.translate3{pop .translateM}.bdef 314 /.translate2{2 copy .translateM .update .translate}.bdef 315 /translate{dup type(arraytype)eq{.translate3}{.translate2}ifelse}.bdef 316 317 /.rotateM{dup cos exch sin dup neg 2 index 0 0 6 array astore}.bdef % a -- [c s -s c 0 0] 318 /.rotate2{pop .deg2rad .rotateM}.bdef 319 /.rotate1{.deg2rad dup .rotateM .update .rotate}.bdef 320 /rotate{dup type(arraytype)eq{.rotate2}{.rotate1}ifelse}.bdef 321 322 %matrix concat – Replace CTM by matrix ´ CTM 323 %matrix1 matrix2 matrix3 concatmatrix matrix3 Fill matrix3 with matrix1 ´ matrix2 324 325 %dx dy dtransform dx¢ dy¢ Transform distance (dx, dy) by CTM 326 %dx dy matrix dtransform dx¢ dy¢ Transform distance (dx, dy) by matrix 327 328 %dx¢ dy¢ idtransform dx dy Perform inverse transform of distance (dx¢, dy¢) by CTM 329 %dx¢ dy¢ matrix idtransform dx dy Perform inverse transform of distance (dx¢, dy¢) by matrix 330 331 %matrix1 matrix2 invertmatrix matrix2 Fill matrix2 with inverse of matrix1 332 333 /gsave{.save}.bdef 334 /grestore{.restore}.bdef 335 /clip{.clip}.bdef 336 /rectclip{.clearRect}.bdef 337 /rectfill{.fillRect}.bdef 338 /rectstroke{.strokeRect}.bdef 339 /newpath{.beginPath}.bdef 340 /closepath{.closePath}.bdef 341 /moveto{2 copy .setPoint 2 copy .setPath .resetTmd .moveTo}.bdef 342 /lineto{2 copy .setPoint 2 copy .setPath .resetTmd .lineTo}.bdef 343 /arcto{.arcTo}.bdef 344 345 /setlinewidth{.setLineWidth}.bdef 346 /setlinecap{.setLineCap}.bdef % TODO 347 /setlinejoin{.setLineJoin}.bdef % TODO 348 /setmiterlimit{.setMiterLimit}.bdef 349 350 /currentlinewidth{.getLineWidth}.bdef 351 /currentlinecap{<</butt 0/round 1/square 2>> .getLineCap get}.bdef 352 /currentlinejoin{<</miter 0/round 1/bevel 2>> .getLineJoin get}.bdef 353 /currentmiterlimit{.getMiterLimit}.bdef 354 355 /setgray{255 mul dup dup .rgb dup .setStrokeStyle .setFillStyle}.bdef 356 /setrgbcolor{3{255 mul round 3 1 roll}repeat .rgb dup .setStrokeStyle .setFillStyle}.bdef 357 /setcmykcolor{setrgbcolor pop}.bdef % TODO 358 /sethsbcolor{setrgbcolor}.bdef % TODO 359 /clippath{0 0 .gcanvas(width)get .gcanvas(height)get .rect}.bdef % TODO 360 /show{currentpoint 3 2 roll 3 copy .fillText .strokeText}.bdef % TODO 361 362 /rlineto{.getTmd .xy /.$py load add exch /.$px load add exch .getTmd .minv .xy lineto}.bdef 363 /curveto{2 copy .setPoint 2 copy .setPath .resetTmd .bezierCurveTo}.bdef 364 365 /currentflat{42}.bdef % TODO 366 /setflat{pop}.bdef % TODO 367 368 /arc{.deg2rad exch .deg2rad exch true .arc}.bdef % TODO currentpoint 369 /arcn{.deg2rad exch .deg2rad exch false .arc}.bdef % TODO currentpoint 370 371 /fill{.fill newpath currentpoint .moveTo}.bdef % TODO 372 373 /setdash{pop pop}.bdef % TODO 374 375 /stroke{.stroke newpath currentpoint .moveTo}.bdef 376 377 /showpage{}.bdef % TODO 378 /grestoreall{}.bdef % TODO 379 /readonly{}.bdef % TODO 380 /currentfile{(url?)}.bdef % TODO 381 /eexec{pop}.bdef % TODO 382 /findfont{}.bdef % TODO 383 /scalefont{pop}.bdef % TODO 384 /setfont{pop}.bdef % TODO C.font = N + "pt " + F.V; 385 /stopped{}.bdef % TODO 386 /loop{}.bdef % TODO !!! 387 /string{}.bdef % TODO 388 /pathbbox{}.bdef % TODO 389 /urx{}.bdef % TODO 390 /ury{}.bdef % TODO 391 /llx{}.bdef % TODO 392 /lly{}.bdef % TODO 393 /pagewidth{}.bdef % TODO 394 /pageheight{}.bdef % TODO 395 /inwidth{}.bdef % TODO 396 /inheight{}.bdef % TODO 397 /usertime{}.bdef % TODO 398 /srand{}.bdef % TODO 399 400 %% PDF 401 402 /w{setlinewidth}.bdef 403 /J{setlinecap}.bdef % TODO 404 /j{setlinejoin}.bdef % TODO 405 /M{setmiterlimit}.bdef 406 /d{setdash}.bdef % TODO 407 /ri{}.bdef % TODO 408 /i{1 .min setflat}.bdef 409 /gs{}.bdef % TODO 410 /q{gsave}.bdef 411 /Q{grestore}.bdef 412 /cm{.transform}.bdef 413 /m{newpath moveto}.bdef % TODO only if not m previously 414 /l{lineto}.bdef 415 /c{.bezierCurveTo}.bdef 416 /v{currentpoint 6 2 roll c}.bdef 417 /y{2 copy c}.bdef 418 /h{closepath}.bdef % TODO 419 /re{.rect}.bdef % TODO really, or x y m , x+w y l , x+w y+h l , x y+h l , h 420 /S{stroke}.bdef 421 /s{h S}.bdef 422 /f{fill}.bdef % TODO 423 /F{f}.bdef 424 /f*{}.bdef % TODO 425 /B{f S}.bdef 426 /B*{f* S}.bdef 427 /b{h B}.bdef 428 /b*{h B*}.bdef 429 /n{}.bdef % TODO 430 /W{clip}.bdef % TODO 431 /W*{clip}.bdef % TODO 432 /BT{}.bdef % TODO 433 /ET{}.bdef % TODO 434 /Tc{}.bdef % TODO 435 /Tw{}.bdef % TODO 436 /Tz{}.bdef % TODO 437 /TL{}.bdef % TODO 438 /Tf{setfont}.bdef % TODO 439 /Tr{}.bdef % TODO 440 /Ts{}.bdef % TODO 441 /Td{translate 0 0 moveto}.bdef 442 /TD{}.bdef % TODO 443 /Tm{}.bdef % TODO 444 /T*{}.bdef % TODO 445 /Tj{show}.bdef % TODO 446 /TJ{}.bdef % TODO 447 /'{}.bdef % TODO 448 /"{}.bdef % TODO 449 /d0{}.bdef % TODO 450 /d1{}.bdef % TODO 451 /CS{}.bdef % TODO 452 /cs{}.bdef % TODO 453 %/SC/setcolor .ldef 454 /SCN{}.bdef % TODO 455 %/sc/setcolor .ldef 456 /scn{}.bdef % TODO 457 /G{}.bdef % TODO 458 /g{}.bdef % TODO 459 /RG{}.bdef % TODO 460 /rg{setrgbcolor}.bdef % TODO 461 /K{}.bdef % TODO 462 /k{}.bdef % TODO 463 /sh{}.bdef % TODO 464 /BI{}.bdef % TODO 465 /ID{}.bdef % TODO 466 /EI{}.bdef % TODO 467 /Do{}.bdef % TODO 468 /MP{}.bdef % TODO 469 /DP{}.bdef % TODO 470 /BMC{}.bdef % TODO 471 /BDC{}.bdef % TODO 472 /EMC{}.bdef % TODO 473 /BX{}.bdef % TODO 474 /EX{}.bdef % TODO 475 476 %% finish 477 478 false .strictBind 479 480 /userdict 1000 dict def 481 userdict begin 482 </pre> 483 484 485 486 </div> 487 488 <script type="text/javascript" src="wps.js"></script> 489 <script> 490 function $(Id) {return document.getElementById(Id);} 491 function $$(Id) {return $(Id).textContent;} 492 wps = new Wps; 493 wps.parse($$("wps")); 494 </script> 495 496 497 <div id="table-of-contents"> 498 <h1>Table of Contents</h1> 499 <div id="text-table-of-contents"> 500 <ul> 501 <li><a href="#sec-1">WPS sandbox </a></li> 502 <li><a href="#sec-2">PostScript interpreter </a> 503 <ul> 504 <li><a href="#sec-2.1">Trivial example </a></li> 505 <li><a href="#sec-2.2">Example with PostScript reader </a></li> 506 <li><a href="#sec-2.3">Example with recursion </a></li> 507 <li><a href="#sec-2.4">Execution stack </a></li> 508 <li><a href="#sec-2.5">PostScript data types </a></li> 509 <li><a href="#sec-2.6">Quoting and execution </a></li> 510 </ul> 511 </li> 512 <li><a href="#sec-3">Drawing with PostScript </a> 513 <ul> 514 <li><a href="#sec-3.1">Bowtie example </a></li> 515 <li><a href="#sec-3.2">Analog clock example </a></li> 516 <li><a href="#sec-3.3">Fill example </a></li> 517 <li><a href="#sec-3.4">Tiger example </a></li> 518 </ul> 519 </li> 520 <li><a href="#sec-4">Drawing with PDF </a> 521 <ul> 522 <li><a href="#sec-4.1">Heart example </a></li> 523 <li><a href="#sec-4.2">Rectangle example </a></li> 524 <li><a href="#sec-4.3">Triangles example </a></li> 525 <li><a href="#sec-4.4">Smile example </a></li> 526 <li><a href="#sec-4.5">Star example </a></li> 527 <li><a href="#sec-4.6">Squares example </a></li> 528 <li><a href="#sec-4.7">Two squares example </a></li> 529 </ul> 530 </li> 531 <li><a href="#sec-5">Operators and JavaScript bindings </a> 532 <ul> 533 <li><a href="#sec-5.1">Native operators </a></li> 534 <li><a href="#sec-5.2">Core operators </a></li> 535 <li><a href="#sec-5.3">HTML 5 canvas methods and attributes </a> 536 <ul> 537 <li><a href="#sec-5.3.1">Canvas methods </a></li> 538 <li><a href="#sec-5.3.2">Canvas attributes </a></li> 539 <li><a href="#sec-5.3.3">Other operators </a></li> 540 <li><a href="#sec-5.3.4">Other attributes </a></li> 541 </ul> 542 </li> 543 <li><a href="#sec-5.4">PostScript operators </a></li> 544 <li><a href="#sec-5.5">PDF operators </a></li> 545 </ul> 546 </li> 547 <li><a href="#sec-6">Supported Browsers </a></li> 548 <li><a href="#sec-7">Limitations and Known Issues </a></li> 549 <li><a href="#sec-8">Changes </a></li> 550 <li><a href="#sec-9">Links </a></li> 551 </ul> 552 </div> 553 </div> 554 555 <div id="outline-container-1" class="outline-1"> 556 <h1 id="sec-1">WPS sandbox </h1> 557 <div class="outline-text-1" id="text-1"> 558 559 560 561 562 <canvas id="xsandbox"></canvas> 563 <p>Sandbox:</p> 564 <p> 565 <textarea id="sandbox" style="width:100%" rows="18"> 566 /n 10 def 567 /w 25 def 568 569 0 0 n w mul dup .gbox 570 571 4 dict begin 572 0 1 n 1 sub { 573 /i exch def 574 /ii 1 1 n div i mul sub def 575 0 1 n 1 sub { 576 /j exch def 577 /jj 1 1 n div j mul sub def 578 ii jj 0 setrgbcolor 579 w j mul w i mul w w rectfill 580 } for 581 } for 582 end 583 </textarea> 584 </p> 585 <script> 586 function sandbox() {(new Wps).parse($$("wps"), "(xsandbox) .setGc", $("sandbox").value);} 587 </script> 588 <button onclick="javascript:sandbox();">Run</button> code from sandbox. 589 590 </div> 591 592 </div> 593 594 <div id="outline-container-2" class="outline-1"> 595 <h1 id="sec-2">PostScript interpreter </h1> 596 <div class="outline-text-1" id="text-2"> 597 598 599 <p> 600 A few initial ideas and questions: 601 </p> 602 <ul> 603 <li> 604 Learn and implement a Forth like language. PostScript seems like a 605 good choice: 606 <ul> 607 <li> 608 It has the right syntax and stack based evaluation. 609 </li> 610 <li> 611 It is practical and widely used. 612 </li> 613 <li> 614 It has long sucessful history in print and publishing (and more). 615 </li> 616 <li> 617 It is a predecessor of PDF. 618 </li> 619 <li> 620 Almost everything (e.g. editors, pictures, documentation) can be 621 reused to a great extent. 622 </li> 623 <li> 624 It is ideal for HTML 5 canvas experiments because from the 625 PostScript point of view, canvas is just another low level device. 626 </li> 627 </ul> 628 </li> 629 <li> 630 Flexibility and simplicity first. 631 <ul> 632 <li> 633 Optimize for fast code change, not for raw running speed. Keep 634 the code small and regular if possible. 635 </li> 636 <li> 637 Can JavaScript be used as a portable assembler for the Web? Is 638 building scripting languages on top of JavaScript feasible and 639 efficient enough for real-world use? If not, why? Find the 640 limits. 641 </li> 642 </ul> 643 </li> 644 <li> 645 Keep the language/environment specific core as small as possible. 646 <ul> 647 <li> 648 Allow to port the interpreter to other languages on both 649 client and server side. 650 </li> 651 <li> 652 Be open for the possibility of running "the same code" on both the 653 client and server side. 654 </li> 655 </ul> 656 </li> 657 <li> 658 Can PDF documents be displayed in web browsers without server-side 659 image rendering? 660 <ul> 661 <li> 662 Implement a canvas based version of PDF page contents in <a href="../ondoc/index.html">OnDoc</a>. 663 </li> 664 </ul> 665 </li> 666 <li> 667 It might be possible to implement different backend devices to be 668 used instead of HTML 5 canvas, for example an SVG device. 669 </li> 670 <li> 671 Investigate the possibility of implementing a Lisp interpreter 672 suitable for production use in web applications. 673 674 </li> 675 </ul> 676 677 <p>There are several things WPS is about: 678 </p> 679 <ul> 680 <li> 681 stack(s) 682 </li> 683 <li> 684 function (operator) dictionary 685 </li> 686 <li> 687 reader 688 </li> 689 <li> 690 interpreter/evaluator 691 </li> 692 <li> 693 data types 694 </li> 695 <li> 696 native bindings (JavaScript FFI) 697 </li> 698 <li> 699 PostScript and PDF API 700 701 </li> 702 </ul> 703 704 <p><a href="http://en.wikipedia.org/wiki/PostScript">PostScript</a> can be seen as a crossover between <a href="http://en.wikipedia.org/wiki/Forth_(programming_language)">Forth</a> and <a href="http://en.wikipedia.org/wiki/LISP">Lisp</a> 705 programming languages. It is (roughly) a programming language with 706 <a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation">RPN</a>, complex data types, garbage collection and specialized 707 drawing operators. 708 </p> 709 710 </div> 711 712 <div id="outline-container-2.1" class="outline-2"> 713 <h2 id="sec-2.1">Trivial example </h2> 714 <div class="outline-text-2" id="text-2.1"> 715 716 717 <p> 718 The core essence of a RPN calculator is captured in the JavaScript 719 code bellow. 720 </p> 721 722 723 <div id="example1"> 724 725 <pre class="src src-js2"><span style="color: #00cdcd; font-weight: bold;">function</span> <span style="color: #0000cd; font-weight: bold;">example1</span>() { 726 <span style="color: #cd0000;">// define stack and operators 727 </span> <span style="color: #00cdcd; font-weight: bold;">var</span> <span style="color: #cdcd00;">Os</span> = []; 728 <span style="color: #00cdcd; font-weight: bold;">var</span> <span style="color: #cdcd00;">Sd</span> = {}; 729 Sd[<span style="color: #008b00;">"+"</span>] = <span style="color: #00cdcd; font-weight: bold;">function</span>() {Os.push(Os.pop() + Os.pop());}; 730 Sd[<span style="color: #008b00;">"="</span>] = <span style="color: #00cdcd; font-weight: bold;">function</span>() {alert(Os.pop());}; 731 <span style="color: #cd0000;">// compute 1 2 = 3 + = 732 </span> Os.push(1); 733 Os.push(2); 734 Sd[<span style="color: #008b00;">"="</span>](); 735 Os.push(3); 736 Sd[<span style="color: #008b00;">"+"</span>](); 737 Sd[<span style="color: #008b00;">"="</span>](); 738 } 739 </pre> 740 741 742 743 </div> 744 <script> 745 function ex1() { 746 eval($$("example1")); 747 example1(); 748 } 749 </script> 750 <button onclick="javascript:ex1()">Eval</button> 751 "<tt>1 2 = 3 + =</tt>" 752 753 <p> 754 <code>Os</code> stands for Operand Stack, which holds arguments for operators. 755 <code>Sd</code> is a System Dictionary which contains definitions of operators 756 (JavaScript functions in this case). 757 </p> 758 </div> 759 760 </div> 761 762 <div id="outline-container-2.2" class="outline-2"> 763 <h2 id="sec-2.2">Example with PostScript reader </h2> 764 <div class="outline-text-2" id="text-2.2"> 765 766 767 <p> 768 PostScript has simple but non-trivial syntax so a reader which reads 769 text and creates internal PostScript objects is necessary. The reader 770 and evaluator is called <code>Ps0</code> (an empty PostScript interpreter) in the 771 JavaScript code bellow. 772 </p> 773 774 775 <div id="example2"> 776 777 <pre class="src src-js2"><span style="color: #00cdcd; font-weight: bold;">function</span> <span style="color: #0000cd; font-weight: bold;">example2</span>(<span style="color: #2e8b57;">T</span>) { 778 <span style="color: #00cdcd; font-weight: bold;">var</span> <span style="color: #cdcd00;">Os</span> = []; 779 <span style="color: #00cdcd; font-weight: bold;">var</span> <span style="color: #cdcd00;">Sd</span> = {}; 780 <span style="color: #00cdcd; font-weight: bold;">var</span> <span style="color: #cdcd00;">Ds</span> = [Sd]; 781 <span style="color: #00cdcd; font-weight: bold;">var</span> <span style="color: #cdcd00;">Es</span> = []; 782 Sd[<span style="color: #00cdcd; font-weight: bold;">new</span> Symbol(<span style="color: #008b00;">"+"</span>)] = <span style="color: #00cdcd; font-weight: bold;">function</span>() {Os.push(Os.pop() + Os.pop());}; 783 Sd[<span style="color: #00cdcd; font-weight: bold;">new</span> Symbol(<span style="color: #008b00;">"dup"</span>)] = <span style="color: #00cdcd; font-weight: bold;">function</span>() {<span style="color: #00cdcd; font-weight: bold;">var</span> <span style="color: #cdcd00;">X</span> = Os.pop(); Os.push(X); Os.push(X);}; 784 Sd[<span style="color: #00cdcd; font-weight: bold;">new</span> Symbol(<span style="color: #008b00;">"="</span>)] = <span style="color: #00cdcd; font-weight: bold;">function</span>() {alert(Os.pop());}; 785 (<span style="color: #00cdcd; font-weight: bold;">new</span> Ps0(Os, Ds, Es)).parse(T); <span style="color: #cd0000;">// read and interpret code T 786 </span>} 787 </pre> 788 789 790 791 </div> 792 <script> 793 function ex2() { 794 eval($$("example2")); 795 example2($$("ex2")); 796 } 797 </script> 798 <button onclick="javascript:ex2()">Eval</button> 799 "<tt id="ex2">12 34 + dup = 56 + =</tt>" 800 801 <p> 802 <code>Ds</code> is a Dictionary Stack allowing users to redefine existing 803 operators and revert back to the original ones. <code>Es</code> is an Execution 804 Stack which is used to implement a tail recursive evaluator. 805 </p> 806 </div> 807 808 </div> 809 810 <div id="outline-container-2.3" class="outline-2"> 811 <h2 id="sec-2.3">Example with recursion </h2> 812 <div class="outline-text-2" id="text-2.3"> 813 814 815 <p> 816 It is possible to write recursive code in PostScript. The following 817 PostScript code is from the <a href="http://www.math.ubc.ca/~cass/graphics/manual/pdf/ch9.pdf">Recursion in PostScript PDF document</a>. 818 </p> 819 820 821 <div id="example3"> 822 823 <pre class="src src-ps"><span style="color: #0000cd; font-weight: bold;">/factorial1</span> { 824 1 <span style="color: #00cdcd; font-weight: bold;">dict</span> <span style="color: #00cdcd; font-weight: bold;">begin</span> 825 <span style="color: #cdcd00;">/n</span> exch <span style="color: #00cdcd; font-weight: bold;">def</span> 826 n 0 eq {1}{n n 1 sub factorial1 mul} <span style="color: #00cdcd; font-weight: bold;">ifelse</span> 827 <span style="color: #00cdcd; font-weight: bold;">end</span> 828 } <span style="color: #00cdcd; font-weight: bold;">def</span> 829 830 5 factorial1 = 831 832 <span style="color: #0000cd; font-weight: bold;">/factorial2</span> { 833 dup 0 eq {pop 1}{dup 1 sub factorial2 mul} <span style="color: #00cdcd; font-weight: bold;">ifelse</span> 834 } <span style="color: #00cdcd; font-weight: bold;">def</span> 835 836 5 factorial2 = 837 838 <span style="color: #cd0000;">% based on the PostScript example from</span> 839 <span style="color: #cd0000;">% http://partners.adobe.com/public/developer/en/ps/sdk/sample/BlueBook.zip</span> 840 841 <span style="color: #0000cd; font-weight: bold;">/factorial3</span> { 842 dup 1 gt {dup 1 sub factorial3 mul} <span style="color: #00cdcd; font-weight: bold;">if</span> 843 } <span style="color: #00cdcd; font-weight: bold;">def</span> 844 845 5 factorial3 = 846 </pre> 847 848 849 850 </div> 851 <script> 852 function ex3() {(new Wps).parse($$("wps"), $$("example3"));} 853 </script> 854 <button onclick="javascript:ex3();">Run</button> the example. 855 856 </div> 857 858 </div> 859 860 <div id="outline-container-2.4" class="outline-2"> 861 <h2 id="sec-2.4">Execution stack </h2> 862 <div class="outline-text-2" id="text-2.4"> 863 864 865 <p> 866 The interpreter manages its Execution Stack explicitly. 867 </p> 868 <p> 869 Most operators simply: 870 </p> 871 <ol> 872 <li> 873 get their arguments from the Operand Stack 874 </li> 875 <li> 876 perform some computation and/or side effects 877 </li> 878 <li> 879 push results to the Operand Stack 880 881 </li> 882 </ol> 883 884 <p>Some operators are more complex and involve some kind of control flow, 885 e.g. <a href="http://www.capcode.de/help/if">if</a>, <a href="http://www.capcode.de/help/repeat">repeat</a>, <a href="http://www.capcode.de/help/for">for</a>, <a href="http://www.capcode.de/help/loop">loop</a> 886 operators. Such operators: 887 </p> 888 <ol> 889 <li> 890 get their arguments from the Operand Stack 891 </li> 892 <li> 893 perform single step of some computation and/or side effects 894 </li> 895 <li> 896 push the continuation (code and arguments to be executed next) to 897 the Execution Stack 898 899 </li> 900 </ol> 901 902 <p><a href="http://en.wikipedia.org/wiki/Tail_call">Tail Call Optimisation</a> is implemented using <a href="http://logand.com/picoWiki/trampoline">trampoline</a>. The evaluator 903 runs in a loop getting the next <a href="http://en.wikipedia.org/wiki/Continuation">continuation</a> from the Execution Stack. 904 Operators that want to "continue" their execution (i.e. use the 905 interpreter to run other operators, including themselves) must perform 906 only one step at a time and save the remaining steps (continuation) on 907 the Execution Stack. 908 </p> 909 <p> 910 For example, the <a href="http://www.capcode.de/help/if">if</a> operator saves the "then" or "else" code 911 branch to the Execution Stack depending on the value of the "test" 912 argument. It does not "evaluate" the chosen branch directly 913 (recursively) but leaves the control to the evaluator loop. 914 </p> 915 <p> 916 The whole process of interpreting is fed from JavaScript strings which 917 are obtained from the content of HTML elements (sometimes hidden from 918 this document). 919 </p> 920 </div> 921 922 </div> 923 924 <div id="outline-container-2.5" class="outline-2"> 925 <h2 id="sec-2.5">PostScript data types </h2> 926 <div class="outline-text-2" id="text-2.5"> 927 928 929 <p> 930 PostScript has quite rich set of data types. 931 See <a href="http://www.adobe.com/devnet/postscript/pdfs/PLRM.pdf">PostScript Language Reference PDF document</a> for more details. 932 </p> 933 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 934 <caption></caption> 935 <colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /> 936 </colgroup> 937 <thead> 938 <tr><th scope="col">category</th><th scope="col">type</th><th scope="col">executable</th><th scope="col">example</th><th scope="col">spec</th></tr> 939 </thead> 940 <tbody> 941 <tr><td>simple</td><td>boolean</td><td></td><td>true false</td><td></td></tr> 942 <tr><td></td><td>fontID</td><td></td><td></td><td></td></tr> 943 <tr><td></td><td>integer</td><td></td><td>42 -123 0</td><td></td></tr> 944 <tr><td></td><td>mark</td><td></td><td></td><td></td></tr> 945 <tr><td></td><td>name</td><td>Y</td><td>draw /draw</td><td></td></tr> 946 <tr><td></td><td>null</td><td></td><td>null</td><td></td></tr> 947 <tr><td></td><td>operator</td><td>Y</td><td></td><td></td></tr> 948 <tr><td></td><td>real</td><td></td><td>3.14 1e-10</td><td></td></tr> 949 <tr><td></td><td>save</td><td></td><td></td><td></td></tr> 950 <tr><td>composite</td><td>array</td><td>Y</td><td>[1 /hi 3.14] {1 2 add}</td><td></td></tr> 951 <tr><td></td><td>condition</td><td></td><td></td><td>Display PostScript</td></tr> 952 <tr><td></td><td>dictionary</td><td></td><td><a name="/a==1/b==2" class="target">/a 1/b 2</a></td><td></td></tr> 953 <tr><td></td><td>file</td><td></td><td></td><td></td></tr> 954 <tr><td></td><td>gstate</td><td></td><td></td><td>Level 2</td></tr> 955 <tr><td></td><td>lock</td><td></td><td></td><td>Display PostScript</td></tr> 956 <tr><td></td><td>packedarray</td><td></td><td></td><td>Level 2</td></tr> 957 <tr><td></td><td>string</td><td>Y</td><td>(hi) <a33f></td><td></td></tr> 958 </tbody> 959 </table> 960 961 962 <p> 963 The following data types are implemented in WPS: 964 </p> 965 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 966 <caption></caption> 967 <colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /> 968 </colgroup> 969 <thead> 970 <tr><th scope="col">category</th><th scope="col">type</th><th scope="col">direct</th><th scope="col">literal</th><th scope="col">executable</th></tr> 971 </thead> 972 <tbody> 973 <tr><td>simple</td><td>boolean</td><td>Y</td><td>Y</td><td>-</td></tr> 974 <tr><td></td><td>number</td><td>Y</td><td>Y</td><td>-</td></tr> 975 <tr><td></td><td>mark</td><td>-</td><td>Y</td><td>-</td></tr> 976 <tr><td></td><td>name</td><td>-</td><td>Y</td><td>Y</td></tr> 977 <tr><td></td><td>null</td><td>Y</td><td>Y</td><td>-</td></tr> 978 <tr><td></td><td>operator</td><td>Y</td><td>-</td><td>Y</td></tr> 979 <tr><td>composite</td><td>array</td><td>Y</td><td>Y</td><td>-</td></tr> 980 <tr><td></td><td>proc</td><td>-</td><td>-</td><td>Y</td></tr> 981 <tr><td></td><td>dictionary</td><td>Y</td><td>Y</td><td>-</td></tr> 982 <tr><td></td><td>string</td><td>Y</td><td>Y</td><td>-</td></tr> 983 </tbody> 984 </table> 985 986 987 <p> 988 All the above types are represented directly in JavaScript except: 989 </p> 990 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 991 <caption></caption> 992 <colgroup><col align="left" /><col align="left" /> 993 </colgroup> 994 <thead> 995 <tr><th scope="col">type</th><th scope="col">representation</th></tr> 996 </thead> 997 <tbody> 998 <tr><td>mark</td><td>unique object</td></tr> 999 <tr><td>literal name</td><td>quoted symbol</td></tr> 1000 <tr><td>executable name</td><td>unquoted symbol</td></tr> 1001 <tr><td>operator</td><td>function</td></tr> 1002 <tr><td>proc</td><td>quoted array</td></tr> 1003 </tbody> 1004 </table> 1005 1006 1007 <p> 1008 The interpreter needs to understand when to evaluate an argument. The 1009 distinction between a "literal" and "executable" is the key. For the 1010 "proc" type, its origin from the Execution Stack is also important. 1011 </p> 1012 </div> 1013 1014 </div> 1015 1016 <div id="outline-container-2.6" class="outline-2"> 1017 <h2 id="sec-2.6">Quoting and execution </h2> 1018 <div class="outline-text-2" id="text-2.6"> 1019 1020 1021 <p> 1022 There are two important operators to control evaluation at the 1023 PostScript language level. 1024 </p> 1025 <p> 1026 The <a href="http://www.capcode.de/help/exec">exec</a> operator usually leaves the argument as is except: 1027 </p> 1028 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 1029 <caption></caption> 1030 <colgroup><col align="left" /><col align="left" /> 1031 </colgroup> 1032 <thead> 1033 <tr><th scope="col">type</th><th scope="col">result</th></tr> 1034 </thead> 1035 <tbody> 1036 <tr><td>executable name</td><td>exec value</td></tr> 1037 <tr><td>operator</td><td>apply operator</td></tr> 1038 <tr><td>proc</td><td>exec each element</td></tr> 1039 </tbody> 1040 </table> 1041 1042 1043 <p> 1044 The <a href="http://www.capcode.de/help/cvx">cvx</a> operator makes the argument "executable". Usually 1045 leaves the argument as is except: 1046 </p> 1047 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 1048 <caption></caption> 1049 <colgroup><col align="left" /><col align="left" /><col align="left" /> 1050 </colgroup> 1051 <thead> 1052 <tr><th scope="col">from</th><th scope="col">to</th><th scope="col">how</th></tr> 1053 </thead> 1054 <tbody> 1055 <tr><td>literal name</td><td>executable name</td><td>unquote</td></tr> 1056 <tr><td>array</td><td>proc</td><td>quote</td></tr> 1057 <tr><td>string</td><td>proc</td><td>~ parse</td></tr> 1058 </tbody> 1059 </table> 1060 1061 1062 <p> 1063 The ~ (tilde) character in the above table means that the 1064 functionality has not been implemented yet. 1065 </p> 1066 </div> 1067 </div> 1068 1069 </div> 1070 1071 <div id="outline-container-3" class="outline-1"> 1072 <h1 id="sec-3">Drawing with PostScript </h1> 1073 <div class="outline-text-1" id="text-3"> 1074 1075 1076 <p> 1077 As a convention, operators beginning with dot are non-standard, low 1078 level operators which are subject to change. 1079 </p> 1080 <p> 1081 There is a difference in how HTML 5 canvas, PostScript and PDF measure 1082 angles: 1083 </p> 1084 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 1085 <caption></caption> 1086 <colgroup><col align="left" /><col align="left" /> 1087 </colgroup> 1088 <thead> 1089 <tr><th scope="col">language/device</th><th scope="col">unit</th></tr> 1090 </thead> 1091 <tbody> 1092 <tr><td>canvas</td><td>rad</td></tr> 1093 <tr><td>PostScript</td><td>deg</td></tr> 1094 <tr><td>PDF</td><td>rad</td></tr> 1095 </tbody> 1096 </table> 1097 1098 1099 <p> 1100 Many of the examples below set up their bounding box using the 1101 <code>.gbox</code> operator, e.g. 1102 </p> 1103 1104 1105 1106 <pre class="src src-ps">0 0 180 180 .gbox 1107 </pre> 1108 1109 1110 1111 1112 <p> 1113 Only the width and height of the canvas clipping rectangle are taken 1114 into account so far. The width and height is related to the drawing 1115 units rather than to the size of the canvas element. 1116 </p> 1117 <p> 1118 Both PostScript and PDF documents have the origin of the coordinate 1119 system in the bottom left corner while HTML 5 canvas in the top left 1120 corner. Thus, some of the following pictures are displayed upside 1121 down unless an explicit coordinate transformation was added. This 1122 discrepancy between the origin of the coordinate system is a problem 1123 when drawing text because a simple coordinate transformation on its 1124 own would draw the text upside-down. 1125 </p> 1126 1127 </div> 1128 1129 <div id="outline-container-3.1" class="outline-2"> 1130 <h2 id="sec-3.1">Bowtie example </h2> 1131 <div class="outline-text-2" id="text-3.1"> 1132 1133 1134 <p> 1135 See the <a href="https://developer.mozilla.org/en/drawing_graphics_with_canvas#section_6">original example</a> in JavaScript. 1136 </p> 1137 1138 1139 <canvas id="xbowtie"></canvas> 1140 <div id="bowtie"> 1141 1142 <pre class="src src-ps"><span style="color: #cd0000;">% based on the JavaScript example from</span> 1143 <span style="color: #cd0000;">% https://developer.mozilla.org/en/drawing_graphics_with_canvas#section_6</span> 1144 1145 0 0 180 180 .gbox 1146 1147 <span style="color: #0000cd; font-weight: bold;">/bowtie</span> { <span style="color: #cd0000;">% fillStyle --</span> 1148 200 200 200 0.3 .rgba .setFillStyle 1149 -30 -30 60 60 rectfill 1150 .setFillStyle 1.0 .setGlobalAlpha 1151 newpath 1152 25 25 moveto 1153 -25 -25 lineto 1154 25 -25 lineto 1155 -25 25 lineto 1156 closepath 1157 fill 1158 } <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1159 1160 <span style="color: #0000cd; font-weight: bold;">/bowtieDot</span> { <span style="color: #cd0000;">% --</span> 1161 0 0 0 setrgbcolor 1162 -2 -2 4 4 rectfill 1163 } <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1164 1165 <span style="color: #0000cd; font-weight: bold;">/bowtie1</span> { <span style="color: #cd0000;">% fillStyle angle x y --</span> 1166 <span style="color: #00cdcd; font-weight: bold;">gsave</span> 1167 translate 1168 rotate 1169 bowtie 1170 bowtieDot 1171 <span style="color: #00cdcd; font-weight: bold;">grestore</span> 1172 } <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1173 1174 45 45 translate 1175 <span style="color: #008b00;">(red)</span> 0 0 0 bowtie1 1176 <span style="color: #008b00;">(green)</span> 45 85 0 bowtie1 1177 <span style="color: #008b00;">(blue)</span> 135 0 85 bowtie1 1178 <span style="color: #008b00;">(yellow)</span> 90 85 85 bowtie1 1179 </pre> 1180 1181 1182 1183 </div> 1184 <script>wps.parse("save (xbowtie) .setGc", $$("bowtie"), "restore");</script> 1185 1186 </div> 1187 1188 </div> 1189 1190 <div id="outline-container-3.2" class="outline-2"> 1191 <h2 id="sec-3.2">Analog clock example </h2> 1192 <div class="outline-text-2" id="text-3.2"> 1193 1194 1195 <p> 1196 See the <a href="http://oreilly.com/openbook/cgi/ch06_02.html">original example</a>. 1197 </p> 1198 <p> 1199 Click on the clock to start/stop it. (If using Chrome, you might need 1200 to reload the page for this to work. Not sure why?) 1201 </p> 1202 1203 1204 <canvas id="xclock2"></canvas> 1205 1206 <div id="clock2"> 1207 1208 <pre class="src src-ps"><span style="color: #cd0000;">% based on the PostScript example from</span> 1209 <span style="color: #cd0000;">% http://oreilly.com/openbook/cgi/ch06_02.html</span> 1210 1211 0 0 150 150 .gbox 1212 0 150 translate 1213 1 -1 scale 1214 1215 <span style="color: #0000cd; font-weight: bold;">/max</span> 150 <span style="color: #00cdcd; font-weight: bold;">def</span> 1216 <span style="color: #0000cd; font-weight: bold;">/width</span> 1.5 <span style="color: #00cdcd; font-weight: bold;">def</span> 1217 <span style="color: #0000cd; font-weight: bold;">/marker</span> 5 <span style="color: #00cdcd; font-weight: bold;">def</span> 1218 <span style="color: #0000cd; font-weight: bold;">/origin</span> {0 0} <span style="color: #00cdcd; font-weight: bold;">def</span> 1219 <span style="color: #0000cd; font-weight: bold;">/center</span> {max 2 div} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1220 <span style="color: #0000cd; font-weight: bold;">/radius</span> <span style="color: #cdcd00;">/center</span> load <span style="color: #00cdcd; font-weight: bold;">def</span> 1221 <span style="color: #0000cd; font-weight: bold;">/hsegment</span> 0.50 radius mul <span style="color: #00cdcd; font-weight: bold;">def</span> 1222 <span style="color: #0000cd; font-weight: bold;">/msegment</span> 0.80 radius mul <span style="color: #00cdcd; font-weight: bold;">def</span> 1223 <span style="color: #0000cd; font-weight: bold;">/ssegment</span> 0.90 radius mul <span style="color: #00cdcd; font-weight: bold;">def</span> 1224 1225 <span style="color: #0000cd; font-weight: bold;">/yellow</span> {1 1 0 setrgbcolor} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1226 <span style="color: #0000cd; font-weight: bold;">/red</span> {1 0 0 setrgbcolor} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1227 <span style="color: #0000cd; font-weight: bold;">/green</span> {0 1 0 setrgbcolor} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1228 <span style="color: #0000cd; font-weight: bold;">/blue</span> {0 0 1 setrgbcolor} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1229 <span style="color: #0000cd; font-weight: bold;">/black</span> {0 0 0 setrgbcolor} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1230 1231 <span style="color: #0000cd; font-weight: bold;">/hangle</span> {<span style="color: #cdcd00;">/$h</span> load 60 mul <span style="color: #cdcd00;">/$m</span> load add 2 div neg .deg2rad} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1232 <span style="color: #0000cd; font-weight: bold;">/mangle</span> {<span style="color: #cdcd00;">/$m</span> load 6 mul neg .deg2rad} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1233 <span style="color: #0000cd; font-weight: bold;">/sangle</span> {<span style="color: #cdcd00;">/$s</span> load 6 mul neg .deg2rad} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1234 1235 <span style="color: #0000cd; font-weight: bold;">/hand</span> { <span style="color: #cd0000;">% segment angle color width --</span> 1236 origin moveto 1237 width mul setlinewidth 1238 load <span style="color: #00cdcd; font-weight: bold;">exec</span> 1239 2 copy cos mul 1240 3 1 roll sin mul 1241 lineto stroke 1242 } <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1243 1244 <span style="color: #0000cd; font-weight: bold;">/draw</span> { 1245 <span style="color: #cdcd00;">/$h</span> .date <span style="color: #008b00;">(getHours)</span> 0 .call <span style="color: #00cdcd; font-weight: bold;">def</span> 1246 <span style="color: #cdcd00;">/$m</span> .date <span style="color: #008b00;">(getMinutes)</span> 0 .call <span style="color: #00cdcd; font-weight: bold;">def</span> 1247 <span style="color: #cdcd00;">/$s</span> .date <span style="color: #008b00;">(getSeconds)</span> 0 .call <span style="color: #00cdcd; font-weight: bold;">def</span> 1248 <span style="color: #00cdcd; font-weight: bold;">gsave</span> 1249 width setlinewidth 1250 black clippath fill <span style="color: #cd0000;">% background</span> 1251 center dup translate 1252 90 rotate 1253 <span style="color: #00cdcd; font-weight: bold;">gsave</span> <span style="color: #cd0000;">% markers</span> 1254 12 { 1255 radius marker sub 0 moveto 1256 marker 0 rlineto red stroke 1257 360 12 div rotate 1258 } <span style="color: #00cdcd; font-weight: bold;">repeat</span> 1259 <span style="color: #00cdcd; font-weight: bold;">grestore</span> 1260 newpath origin radius 0 360 arc blue stroke <span style="color: #cd0000;">% circle</span> 1261 hsegment hangle <span style="color: #cdcd00;">/green</span> 2 hand <span style="color: #cd0000;">% hour</span> 1262 msegment mangle <span style="color: #cdcd00;">/green</span> 1 hand <span style="color: #cd0000;">% minute</span> 1263 ssegment sangle <span style="color: #cdcd00;">/yellow</span> 0.5 hand <span style="color: #cd0000;">% second</span> 1264 origin width 2 mul 0 360 arc red fill <span style="color: #cd0000;">% dot</span> 1265 <span style="color: #00cdcd; font-weight: bold;">grestore</span> 1266 } <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1267 1268 draw 1269 1270 <span style="color: #0000cd; font-weight: bold;">/timer</span> <span style="color: #00cdcd; font-weight: bold;">false</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1271 <span style="color: #0000cd; font-weight: bold;">/go</span> {{draw} .callback 1000 .setInterval <span style="color: #cdcd00;">/timer</span> exch <span style="color: #00cdcd; font-weight: bold;">def</span>} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1272 <span style="color: #0000cd; font-weight: bold;">/halt</span> {<span style="color: #cdcd00;">/timer</span> load .clearTimeout <span style="color: #cdcd00;">/timer</span> <span style="color: #00cdcd; font-weight: bold;">false</span> <span style="color: #00cdcd; font-weight: bold;">def</span>} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1273 <span style="color: #0000cd; font-weight: bold;">/callback</span> {<span style="color: #cdcd00;">/timer</span> load type <span style="color: #008b00;">(booleantype)</span> eq {go} {halt} <span style="color: #00cdcd; font-weight: bold;">ifelse</span>} <span style="color: #00cdcd; font-weight: bold;">bind</span> <span style="color: #00cdcd; font-weight: bold;">def</span> 1274 1275 .gcanvas <span style="color: #008b00;">(onclick)</span> <span style="color: #cdcd00;">/callback</span> load .callback .hook 1276 </pre> 1277 1278 1279 1280 </div> 1281 <script>(new Wps).parse($$("wps"), "(xclock2) .setGc", $$("clock2"));</script> 1282 1283 <p> 1284 Running the clock keeps the CPU noticeably busy. Chrome is best with 1285 very little overhead. Firefox and Opera perform significantly worse. 1286 WPS seems to be fast enough for one-off drawings, but its usability 1287 depends on the efficiency of the host JavaScript interpreter when 1288 running the interpreter in a tight loop. 1289 </p> 1290 </div> 1291 1292 </div> 1293 1294 <div id="outline-container-3.3" class="outline-2"> 1295 <h2 id="sec-3.3">Fill example </h2> 1296 <div class="outline-text-2" id="text-3.3"> 1297 1298 1299 <p> 1300 See the <a href="https://developer.mozilla.org/samples/canvas-tutorial/4_1_canvas_fillstyle.html">original example</a> in JavaScript. 1301 </p> 1302 1303 1304 <canvas id="xfill"></canvas> 1305 <div id="fill"> 1306 1307 <pre class="src src-ps"><span style="color: #cd0000;">% based on the JavaScript example from</span> 1308 <span style="color: #cd0000;">% https://developer.mozilla.org/samples/canvas-tutorial/4_1_canvas_fillstyle.html</span> 1309 1310 <span style="color: #0000cd; font-weight: bold;">/n</span> 5 <span style="color: #00cdcd; font-weight: bold;">def</span> 1311 <span style="color: #0000cd; font-weight: bold;">/w</span> 25 <span style="color: #00cdcd; font-weight: bold;">def</span> 1312 1313 0 0 n w mul dup .gbox 1314 1315 4 <span style="color: #00cdcd; font-weight: bold;">dict</span> <span style="color: #00cdcd; font-weight: bold;">begin</span> 1316 0 1 n { 1317 <span style="color: #cdcd00;">/i</span> exch <span style="color: #00cdcd; font-weight: bold;">def</span> 1318 <span style="color: #cdcd00;">/ii</span> 1 1 n div i mul sub <span style="color: #00cdcd; font-weight: bold;">def</span> 1319 0 1 n { 1320 <span style="color: #cdcd00;">/j</span> exch <span style="color: #00cdcd; font-weight: bold;">def</span> 1321 <span style="color: #cdcd00;">/jj</span> 1 1 n div j mul sub <span style="color: #00cdcd; font-weight: bold;">def</span> 1322 ii jj 0 setrgbcolor 1323 w j mul w i mul w w rectfill 1324 } <span style="color: #00cdcd; font-weight: bold;">for</span> 1325 } <span style="color: #00cdcd; font-weight: bold;">for</span> 1326 <span style="color: #00cdcd; font-weight: bold;">end</span> 1327 </pre> 1328 1329 1330 1331 </div> 1332 <script>wps.parse("save (xfill) .setGc", $$("fill"), "restore");</script> 1333 1334 </div> 1335 1336 </div> 1337 1338 <div id="outline-container-3.4" class="outline-2"> 1339 <h2 id="sec-3.4">Tiger example </h2> 1340 <div class="outline-text-2" id="text-3.4"> 1341 1342 1343 <p> 1344 The <a href="http://svn.ghostscript.com/viewvc/trunk/gs/examples/tiger.eps?view=co">original example</a> is included with <a href="http://ghostscript.com/">Ghostscript</a>. 1345 </p> 1346 1347 1348 <canvas id="xtiger" style="width:283pt;height:369pt"> 1349 </canvas> 1350 <p>Drawing took <span id="msg">--</span> seconds.</p> 1351 1352 <div id="tiger" style="display:none"> 1353 1354 <pre class="src src-text">%!PS-Adobe-2.0 EPSF-1.2 1355 %%Creator: Adobe Illustrator(TM) 1.2d4 1356 %%For: OpenWindows Version 2 1357 %%Title: tiger.eps 1358 %%CreationDate: 4/12/90 3:20 AM 1359 %%DocumentProcSets: Adobe_Illustrator_1.2d1 0 0 1360 %%DocumentSuppliedProcSets: Adobe_Illustrator_1.2d1 0 0 1361 %%BoundingBox: 17 171 567 739 1362 %%EndComments 1363 /tigersave save def % prevent residual side effects 1364 1365 %%BeginProcSet:Adobe_Illustrator_1.2d1 0 0 1366 1367 /Adobe_Illustrator_1.2d1 dup 100 dict def load begin 1368 % definition operators 1369 /bdef {bind def} bind def 1370 /ldef {load def} bdef 1371 /xdef {exch def} bdef 1372 % graphic state operators 1373 /_K { 3 index add neg dup 0 lt {pop 0} if 3 1 roll } bdef 1374 /_k /setcmybcolor where { 1375 /setcmybcolor get 1376 } { 1377 { 1 sub 4 1 roll _K _K _K setrgbcolor pop } bind 1378 } ifelse def 1379 /g {/_b xdef /p {_b setgray} def} bdef 1380 /G {/_B xdef /P {_B setgray} def} bdef 1381 /k {/_b xdef /_y xdef /_m xdef /_c xdef /p {_c _m _y _b _k} def} bdef 1382 /K {/_B xdef /_Y xdef /_M xdef /_C xdef /P {_C _M _Y _B _k} def} bdef 1383 /d /setdash ldef 1384 /_i currentflat def 1385 /i {dup 0 eq {pop _i} if setflat} bdef 1386 /j /setlinejoin ldef 1387 /J /setlinecap ldef 1388 /M /setmiterlimit ldef 1389 /w /setlinewidth ldef 1390 % path construction operators 1391 /_R {.25 sub round .25 add} bdef 1392 /_r {transform _R exch _R exch itransform} bdef 1393 /c {_r curveto} bdef 1394 /C /c ldef 1395 /v {currentpoint 6 2 roll _r curveto} bdef 1396 /V /v ldef 1397 /y {_r 2 copy curveto} bdef 1398 /Y /y ldef 1399 /l {_r lineto} bdef 1400 /L /l ldef 1401 /m {_r moveto} bdef 1402 % path painting operators 1403 /n /newpath ldef 1404 /N /n ldef 1405 /F {p fill} bdef 1406 /f {closepath F} bdef 1407 /S {P stroke} bdef 1408 /s {closepath S} bdef 1409 /B {gsave F grestore S} bdef 1410 /b {closepath B} bdef 1411 end 1412 %%EndProcSet 1413 %%EndProlog 1414 1415 %%Page: 1 1 1416 1417 Adobe_Illustrator_1.2d1 begin 1418 1419 .8 setgray 1420 clippath fill 1421 -110 -300 translate 1422 1.1 dup scale 1423 1424 0 g 1425 0 G 1426 0 i 1427 0 J 1428 0 j 1429 0.172 w 1430 10 M 1431 []0 d 1432 0 0 0 0 k 1433 1434 177.696 715.715 m 1435 177.797 713.821 176.973 713.84 v 1436 176.149 713.859 159.695 761.934 139.167 759.691 C 1437 156.95 767.044 177.696 715.715 V 1438 b 1439 181.226 718.738 m 1440 180.677 716.922 179.908 717.221 v 1441 179.14 717.519 180.023 768.325 159.957 773.199 C 1442 179.18 774.063 181.226 718.738 V 1443 b 1444 208.716 676.41 m 1445 210.352 675.45 209.882 674.773 v 1446 209.411 674.096 160.237 686.898 150.782 668.541 C 1447 154.461 687.428 208.716 676.41 V 1448 b 1449 205.907 666.199 m 1450 207.763 665.803 207.529 665.012 v 1451 207.296 664.221 156.593 660.879 153.403 640.478 C 1452 150.945 659.563 205.907 666.199 V 1453 b 1454 201.696 671.724 m 1455 203.474 671.061 203.128 670.313 v 1456 202.782 669.565 152.134 673.654 146.002 653.936 C 1457 146.354 673.175 201.696 671.724 V 1458 b 1459 190.991 689.928 m 1460 192.299 688.554 191.66 688.033 v 1461 191.021 687.512 147.278 713.366 133.131 698.324 C 1462 141.872 715.467 190.991 689.928 V 1463 b 1464 183.446 685.737 m 1465 184.902 684.52 184.326 683.929 v 1466 183.75 683.339 137.362 704.078 125.008 687.531 C 1467 131.753 705.553 183.446 685.737 V 1468 b 1469 180.846 681.665 m 1470 182.454 680.657 181.964 679.994 v 1471 181.474 679.331 132.692 693.554 122.709 675.478 C 1472 126.934 694.251 180.846 681.665 V 1473 b 1474 191.58 681.051 m 1475 192.702 679.52 192.001 679.085 v 1476 191.3 678.65 151.231 709.898 135.273 696.793 C 1477 146.138 712.674 191.58 681.051 V 1478 b 1479 171.8 710 m 1480 172.4 708.2 171.6 708 v 1481 170.8 707.8 142.2 749.8 122.999 742.2 C 1482 138.2 754 171.8 710 V 1483 b 1484 172.495 703.021 m 1485 173.47 701.392 172.731 701.025 v 1486 171.993 700.657 135.008 735.501 117.899 723.939 C 1487 130.196 738.739 172.495 703.021 V 1488 b 1489 172.38 698.651 m 1490 173.502 697.12 172.801 696.685 v 1491 172.1 696.251 132.031 727.498 116.073 714.393 C 1492 126.938 730.274 172.38 698.651 V 1493 b 1494 0 J 1 w 1495 170.17 696.935 m 1496 170.673 690.887 171.661 684.318 173.4 681.199 C 1497 169.8 668.799 178.6 655.599 V 1498 178.2 648.399 179.8 645.199 V 1499 183.8 636.799 188.6 635.999 v 1500 192.484 635.352 201.207 632.283 211.068 630.879 c 1501 228.2 616.799 225 603.999 V 1502 224.6 587.599 221 585.999 V 1503 232.6 597.199 223 580.399 V 1504 218.6 561.599 l 1505 244.2 583.199 228.6 564.799 V 1506 218.6 538.799 l 1507 238.2 557.199 231 548.799 V 1508 227.8 539.999 l 1509 271 567.199 240.2 537.599 V 1510 248.2 541.199 252.6 538.399 V 1511 259.4 539.599 258.6 537.999 V 1512 237.8 527.599 234.2 509.199 V 1513 242.6 519.199 239.4 508.399 V 1514 239.8 496.799 l 1515 243.8 518.399 243.4 480.799 V 1516 262.6 498.799 251 477.999 V 1517 251 461.199 l 1518 266.2 477.599 259.8 464.799 V 1519 269.8 473.599 265.8 458.399 V 1520 265 447.999 269.4 459.199 V 1521 285.4 489.799 279.4 463.599 V 1522 278.6 444.399 283.4 459.199 V 1523 283.8 448.799 293 441.599 V 1524 291.8 492.399 304.6 456.399 V 1525 308.6 439.999 l 1526 311.4 449.199 311 454.399 V 1527 325.8 470.799 319 446.399 V 1528 334.2 469.199 331 455.999 V 1529 323.4 439.999 325 435.199 V 1530 341.8 469.999 343 471.599 V 1531 341 429.198 351.8 465.199 V 1532 357.4 453.199 354.6 448.799 V 1533 362.6 456.799 361.8 459.999 V 1534 366.4 468.199 369.2 454.599 V 1535 371 445.199 372.6 448.399 V 1536 376.6 424.398 377.8 447.199 V 1537 379.4 460.799 372.2 472.399 V 1538 373 475.599 370.2 479.599 v 1539 383.8 457.999 376.6 486.799 V 1540 387.801 478.799 389.001 478.799 V 1541 375.4 501.999 384.2 497.199 V 1542 379 507.599 397.001 495.599 V 1543 381 511.599 398.601 501.999 V 1544 406.601 495.599 399.001 505.599 V 1545 384.6 521.599 406.601 503.599 V 1546 418.201 487.199 419.001 484.399 V 1547 409.001 513.599 404.601 516.399 V 1548 413.001 552.799 454.201 537.199 V 1549 461.001 519.999 465.401 538.399 V 1550 478.201 544.799 489.401 517.199 V 1551 493.401 530.799 492.601 533.599 V 1552 499.401 532.399 498.601 533.599 V 1553 511.801 529.199 513.001 529.999 V 1554 519.801 523.199 520.201 526.799 V 1555 529.401 523.999 527.401 527.599 V 1556 536.201 511.999 536.601 508.399 V 1557 539.001 522.399 l 1558 541.001 519.599 l 1559 542.601 527.199 541.801 528.399 v 1560 541.001 529.599 561.801 521.599 566.601 500.799 C 1561 568.601 492.399 l 1562 574.601 507.199 573.001 511.199 V 1563 578.201 510.399 578.601 505.999 V 1564 582.601 529.199 577.801 535.199 V 1565 582.201 535.999 583.401 532.399 V 1566 583.401 539.599 l 1567 590.601 538.799 590.601 541.199 V 1568 595.001 545.199 597.001 540.399 V 1569 584.601 575.599 603.001 556.399 V 1570 610.201 545.599 606.601 564.399 v 1571 603.001 583.199 599.001 584.799 603.801 585.199 C 1572 604.601 588.799 602.601 590.399 v 1573 600.601 591.999 603.801 590.399 y 1574 608.601 586.399 603.401 608.399 V 1575 609.801 606.799 597.801 635.999 V 1576 600.601 638.399 596.601 646.799 V 1577 604.601 642.399 607.401 643.999 V 1578 607.001 645.599 603.801 649.599 V 1579 582.201 704.4 602.601 682.399 V 1580 614.451 668.849 608.051 691.649 V 1581 598.94 715.659 599.717 719.955 V 1582 170.17 696.935 l 1583 b 1584 0.2 0.55 0.85 0 k 1585 599.717 719.755 m 1586 600.345 719.574 602.551 718.45 603.801 716.8 C 1587 610.601 706 605.401 724.4 V 1588 596.201 753.2 605.001 742 V 1589 611.001 734.8 607.801 748.4 v 1590 603.936 764.827 601.401 771.2 y 1591 613.001 766.4 586.201 806 V 1592 595.001 802.4 l 1593 575.401 842 553.801 847.2 V 1594 545.801 853.2 l 1595 584.201 891.2 571.401 928 V 1596 564.601 933.2 555.001 924 V 1597 548.601 919.2 542.601 920.8 V 1598 511.801 919.6 509.801 919.6 v 1599 507.801 919.6 473.001 956.8 407.401 939.2 C 1600 402.201 937.2 397.801 938.4 V 1601 379.4 954.4 330.6 931.6 v 1602 320.6 929.6 319 929.6 v 1603 317.4 929.6 314.6 929.6 306.6 923.2 c 1604 298.6 916.8 298.2 916 296.2 914.4 C 1605 279.8 903.2 275 902.4 V 1606 263.4 896 259 886 V 1607 255.4 884.8 l 1608 253.8 877.6 253.4 876.4 V 1609 248.6 872.8 247.8 867.2 V 1610 239 861.2 239.4 856.8 V 1611 237.8 851.6 237 846.8 V 1612 229.8 842 230.6 839.2 V 1613 223 825.2 224.2 818.4 V 1614 217.8 818.8 215 816.4 V 1615 214.2 811.6 212.6 811.2 V 1616 209.8 810 212.2 806 V 1617 210.6 803.2 210.2 801.6 V 1618 211 798.8 206.6 793.2 V 1619 200.2 774.4 202.2 769.2 V 1620 202.6 764.4 199.8 762.8 V 1621 196.2 763.2 204.6 751.2 V 1622 205.4 750 202.2 747.6 V 1623 185 744 182.6 727.6 V 1624 169 712.8 169 707.6 v 1625 169 705.295 169.271 702.148 169.97 697.535 C 1626 169.4 689.199 197 688.399 v 1627 224.6 687.599 599.717 719.755 Y 1628 b 1629 184.4 697.4 m 1630 159.4 736.8 173.8 680.399 Y 1631 182.6 645.999 312.2 683.599 y 1632 481.001 714 492.201 718 v 1633 503.401 722 598.601 715.6 y 1634 593.001 732.4 L 1635 528.201 778.8 509.001 755.6 495.401 759.6 c 1636 481.801 763.6 484.201 754 481.001 753.2 c 1637 477.801 752.4 438.601 777.2 432.201 776.4 c 1638 425.801 775.6 400.459 799.351 415.401 767.6 c 1639 431.401 733.6 357 728.4 340.2 739.6 c 1640 323.4 750.8 347.4 721.2 Y 1641 365.8 701.2 331.4 718 y 1642 297 730.8 273 705.2 269.8 704.4 c 1643 266.6 703.6 261.8 700.4 261 706.8 c 1644 260.2 713.2 252.69 729.901 221 703.6 c 1645 201 686.999 187.2 709 Y 1646 184.4 697.4 L 1647 f 1648 0.09 0.5 0.772 0 k 1649 433.51 774.654 m 1650 427.11 773.854 401.743 797.593 416.71 765.854 c 1651 433.31 730.654 358.31 726.654 341.51 737.854 c 1652 324.709 749.054 348.71 719.454 Y 1653 367.11 699.454 332.709 716.254 y 1654 298.309 729.054 274.309 703.454 271.109 702.654 c 1655 267.909 701.854 263.109 698.654 262.309 705.054 c 1656 261.509 711.454 254.13 727.988 222.309 701.854 c 1657 201.073 684.508 187.582 705.963 Y 1658 184.382 695.854 L 1659 159.382 735.654 174.454 677.345 Y 1660 183.255 642.944 313.509 681.854 y 1661 482.31 712.254 493.51 716.254 v 1662 504.71 720.254 599.038 713.927 y 1663 593.51 731.236 L 1664 528.71 777.636 510.31 753.854 496.71 757.854 c 1665 483.11 761.854 485.51 752.254 482.31 751.454 c 1666 479.11 750.654 439.91 775.454 433.51 774.654 c 1667 f 1668 0.081 0.45 0.695 0 k 1669 434.819 772.909 m 1670 428.419 772.109 403.685 796.138 418.019 764.109 c 1671 434.219 727.908 359.619 724.908 342.819 736.108 c 1672 326.019 747.308 350.019 717.708 Y 1673 368.419 697.708 334.019 714.508 y 1674 299.619 727.308 275.618 701.708 272.418 700.908 c 1675 269.218 700.108 264.418 696.908 263.618 703.308 c 1676 262.818 709.708 255.57 726.075 223.618 700.108 c 1677 201.145 682.017 187.964 702.926 Y 1678 184.364 694.308 L 1679 160.564 733.308 175.109 674.29 Y 1680 183.909 639.89 314.819 680.108 y 1681 483.619 710.508 494.819 714.508 v 1682 506.019 718.508 599.474 712.254 y 1683 594.02 730.072 L 1684 529.219 776.472 511.619 752.109 498.019 756.109 c 1685 484.419 760.109 486.819 750.509 483.619 749.708 c 1686 480.419 748.908 441.219 773.709 434.819 772.909 c 1687 f 1688 0.072 0.4 0.618 0 k 1689 436.128 771.163 m 1690 429.728 770.363 404.999 794.395 419.328 762.363 c 1691 436.128 724.807 360.394 723.518 344.128 734.363 c 1692 327.328 745.563 351.328 715.963 Y 1693 369.728 695.963 335.328 712.763 y 1694 300.928 725.563 276.928 699.963 273.728 699.163 c 1695 270.528 698.363 265.728 695.163 264.928 701.563 c 1696 264.128 707.963 257.011 724.161 224.927 698.363 c 1697 201.218 679.526 188.345 699.89 Y 1698 184.345 692.763 L 1699 162.545 729.563 175.764 671.235 Y 1700 184.564 636.835 316.128 678.363 y 1701 484.928 708.763 496.129 712.763 v 1702 507.329 716.763 599.911 710.581 y 1703 594.529 728.908 L 1704 529.729 775.309 512.929 750.363 499.329 754.363 c 1705 485.728 758.363 488.128 748.763 484.928 747.963 c 1706 481.728 747.163 442.528 771.963 436.128 771.163 c 1707 f 1708 0.063 0.35 0.54 0 k 1709 437.438 769.417 m 1710 431.037 768.617 406.814 792.871 420.637 760.617 c 1711 437.438 721.417 362.237 721.417 345.437 732.617 c 1712 328.637 743.817 352.637 714.217 Y 1713 371.037 694.217 336.637 711.017 y 1714 302.237 723.817 278.237 698.217 275.037 697.417 c 1715 271.837 696.617 267.037 693.417 266.237 699.817 c 1716 265.437 706.217 258.452 722.248 226.237 696.617 c 1717 201.291 677.035 188.727 696.854 Y 1718 184.327 691.217 L 1719 164.527 726.018 176.418 668.181 Y 1720 185.218 633.78 317.437 676.617 y 1721 486.238 707.017 497.438 711.017 v 1722 508.638 715.017 600.347 708.908 y 1723 595.038 727.745 L 1724 530.238 774.145 514.238 748.617 500.638 752.617 c 1725 487.038 756.617 489.438 747.017 486.238 746.217 c 1726 483.038 745.417 443.838 770.217 437.438 769.417 c 1727 f 1728 0.054 0.3 0.463 0 k 1729 438.747 767.672 m 1730 432.347 766.872 406.383 790.323 421.947 758.872 c 1731 441.147 720.072 363.546 719.672 346.746 730.872 c 1732 329.946 742.072 353.946 712.472 Y 1733 372.346 692.472 337.946 709.272 y 1734 303.546 722.072 279.546 696.472 276.346 695.672 c 1735 273.146 694.872 268.346 691.672 267.546 698.072 c 1736 266.746 704.472 259.892 720.335 227.546 694.872 c 1737 201.364 674.544 189.109 693.817 Y 1738 184.309 689.672 L 1739 166.309 722.872 177.073 665.126 Y 1740 185.873 630.726 318.746 674.872 y 1741 487.547 705.272 498.747 709.272 v 1742 509.947 713.272 600.783 707.236 y 1743 595.547 726.581 L 1744 530.747 772.981 515.547 746.872 501.947 750.872 c 1745 488.347 754.872 490.747 745.272 487.547 744.472 c 1746 484.347 743.672 445.147 768.472 438.747 767.672 c 1747 f 1748 0.045 0.25 0.386 0 k 1749 440.056 765.927 m 1750 433.655 765.127 407.313 788.387 423.255 757.127 c 1751 443.656 717.126 364.855 717.926 348.055 729.126 c 1752 331.255 740.326 355.255 710.726 Y 1753 373.655 690.726 339.255 707.526 y 1754 304.855 720.326 280.855 694.726 277.655 693.926 c 1755 274.455 693.126 269.655 689.926 268.855 696.326 c 1756 268.055 702.726 261.332 718.422 228.855 693.126 c 1757 201.436 672.053 189.491 690.781 Y 1758 184.291 688.126 L 1759 168.291 718.326 177.727 662.071 Y 1760 186.527 627.671 320.055 673.126 y 1761 488.856 703.526 500.056 707.526 v 1762 511.256 711.526 601.22 705.563 y 1763 596.056 725.417 L 1764 531.256 771.817 516.856 745.126 503.256 749.126 c 1765 489.656 753.127 492.056 743.526 488.856 742.726 c 1766 485.656 741.926 446.456 766.727 440.056 765.927 c 1767 f 1768 0.036 0.2 0.309 0 k 1769 441.365 764.181 m 1770 434.965 763.381 407.523 786.056 424.565 755.381 c 1771 446.565 715.781 366.164 716.181 349.364 727.381 c 1772 332.564 738.581 356.564 708.981 Y 1773 374.964 688.981 340.564 705.781 y 1774 306.164 718.581 282.164 692.981 278.964 692.181 c 1775 275.764 691.381 270.964 688.181 270.164 694.581 c 1776 269.364 700.981 262.773 716.508 230.164 691.381 c 1777 201.509 669.562 189.873 687.744 Y 1778 184.273 686.581 L 1779 169.872 714.981 178.382 659.017 Y 1780 187.182 624.616 321.364 671.381 y 1781 490.165 701.781 501.365 705.781 v 1782 512.565 709.781 601.656 703.89 y 1783 596.565 724.254 L 1784 531.765 770.654 518.165 743.381 504.565 747.381 c 1785 490.965 751.381 493.365 741.781 490.165 740.981 c 1786 486.965 740.181 447.765 764.981 441.365 764.181 c 1787 f 1788 0.027 0.15 0.231 0 k 1789 442.674 762.435 m 1790 436.274 761.635 408.832 784.311 425.874 753.635 c 1791 447.874 714.035 367.474 714.435 350.674 725.635 c 1792 333.874 736.835 357.874 707.235 Y 1793 376.274 687.235 341.874 704.035 y 1794 307.473 716.835 283.473 691.235 280.273 690.435 c 1795 277.073 689.635 272.273 686.435 271.473 692.835 c 1796 270.673 699.235 264.214 714.595 231.473 689.635 c 1797 201.582 667.071 190.255 684.707 Y 1798 184.255 685.035 L 1799 170.654 711.436 179.037 655.962 Y 1800 187.837 621.562 322.673 669.635 y 1801 491.474 700.035 502.674 704.035 v 1802 513.874 708.035 602.093 702.217 y 1803 597.075 723.09 L 1804 532.274 769.49 519.474 741.635 505.874 745.635 c 1805 492.274 749.635 494.674 740.035 491.474 739.235 c 1806 488.274 738.435 449.074 763.235 442.674 762.435 c 1807 f 1808 0.018 0.1 0.154 0 k 1809 443.983 760.69 m 1810 437.583 759.89 410.529 782.777 427.183 751.89 c 1811 449.183 711.09 368.783 712.69 351.983 723.89 c 1812 335.183 735.09 359.183 705.49 Y 1813 377.583 685.49 343.183 702.29 y 1814 308.783 715.09 284.783 689.49 281.583 688.69 c 1815 278.382 687.89 273.582 684.69 272.782 691.09 c 1816 271.982 697.49 265.654 712.682 232.782 687.89 c 1817 201.655 664.58 190.637 681.671 Y 1818 184.236 683.49 L 1819 171.236 707.49 179.691 652.907 Y 1820 188.491 618.507 323.983 667.89 y 1821 492.783 698.29 503.983 702.29 v 1822 515.183 706.29 602.529 700.544 y 1823 597.583 721.926 L 1824 532.783 768.327 520.783 739.89 507.183 743.89 c 1825 493.583 747.89 495.983 738.29 492.783 737.49 c 1826 489.583 736.69 450.383 761.49 443.983 760.69 c 1827 f 1828 0.009 0.05 0.077 0 k 1829 445.292 758.945 m 1830 438.892 758.145 412.917 781.589 428.492 750.145 c 1831 449.692 707.344 370.092 710.944 353.292 722.144 c 1832 336.492 733.344 360.492 703.744 Y 1833 378.892 683.744 344.492 700.544 y 1834 310.092 713.344 286.092 687.744 282.892 686.944 c 1835 279.692 686.144 274.892 682.944 274.092 689.344 c 1836 273.292 695.744 267.095 710.768 234.092 686.144 c 1837 201.727 662.089 191.018 678.635 Y 1838 184.218 681.944 L 1839 171.418 705.144 180.346 649.853 Y 1840 189.146 615.453 325.292 666.144 y 1841 494.093 696.544 505.293 700.544 v 1842 516.493 704.544 602.965 698.872 y 1843 598.093 720.763 L 1844 533.292 767.163 522.093 738.144 508.493 742.144 c 1845 494.893 746.145 497.293 736.544 494.093 735.744 c 1846 490.892 734.944 451.692 759.745 445.292 758.945 c 1847 f 1848 1 g 1849 184.2 680.399 m 1850 171.4 702.4 181 646.799 Y 1851 189.8 612.399 326.6 664.399 y 1852 495.401 694.8 506.601 698.8 v 1853 517.801 702.8 603.401 697.2 y 1854 598.601 719.6 L 1855 533.801 766 523.401 736.4 509.801 740.4 c 1856 496.201 744.4 498.601 734.8 495.401 734 c 1857 492.201 733.2 453.001 758 446.601 757.2 c 1858 440.201 756.4 414.981 780.207 429.801 748.4 c 1859 452.028 700.693 369.041 710.773 354.6 720.4 c 1860 337.8 731.6 361.8 702 Y 1861 380.2 681.999 345.8 698.8 y 1862 311.4 711.6 287.4 685.999 284.2 685.199 c 1863 281 684.399 276.2 681.199 275.4 687.599 c 1864 274.6 694 268.535 708.856 235.4 684.399 c 1865 201.8 659.599 191.4 675.599 Y 1866 184.2 680.399 L 1867 f 1868 0 g 1869 225.8 650.399 m 1870 218.6 638.799 239.4 625.599 V 1871 240.8 624.199 222.8 628.399 V 1872 216.6 630.399 215 640.799 V 1873 210.2 645.199 205.4 650.799 v 1874 200.6 656.399 225.8 650.399 y 1875 f 1876 0.8 g 1877 365.8 698 m 1878 383.498 671.179 382.9 666.399 v 1879 381.6 655.999 381.4 646.399 384.6 642.399 c 1880 387.801 638.399 396.601 605.199 y 1881 396.201 603.999 408.601 641.999 V 1882 420.201 657.999 400.201 676.399 V 1883 365 705.2 365.8 698 v 1884 f 1885 0 g 1886 1 J 0.1 w 1887 245.8 623.599 m 1888 257 616.399 242.6 585.199 V 1889 249 587.599 l 1890 248.2 576.399 245 573.999 V 1891 252.2 577.199 l 1892 257 569.199 253 564.399 V 1893 269.8 556.399 269 549.999 V 1894 275.4 557.999 271.4 564.399 v 1895 267.4 570.799 260.2 566.799 261 585.199 C 1896 252.2 581.999 l 1897 257.8 590.799 257.8 597.199 V 1898 249.8 594.799 l 1899 265.269 621.377 254.6 622.799 v 1900 248.6 623.599 245.8 623.599 Y 1901 f 1902 0.8 g 1903 278.2 606.799 m 1904 281 611.199 278.2 610.399 v 1905 275.4 609.599 244.2 594.799 238.2 585.199 C 1906 272.6 609.599 278.2 606.799 V 1907 f 1908 288.6 598.799 m 1909 291.4 603.199 288.6 602.399 v 1910 285.8 601.599 254.6 586.799 248.6 577.199 C 1911 283 601.599 288.6 598.799 V 1912 f 1913 301.8 613.999 m 1914 304.6 618.399 301.8 617.599 v 1915 299 616.799 267.8 601.999 261.8 592.399 C 1916 296.2 616.799 301.8 613.999 V 1917 f 1918 278.6 570.399 m 1919 278.6 576.399 275.8 575.599 v 1920 273 574.799 237 557.199 231 547.599 C 1921 273 573.199 278.6 570.399 V 1922 f 1923 279.8 581.199 m 1924 281 585.999 278.2 585.199 V 1925 276.2 585.199 249.8 573.599 243.8 563.999 C 1926 273.4 585.599 279.8 581.199 V 1927 f 1928 265.4 533.599 m 1929 255.4 525.999 l 1930 265.8 533.599 269.4 532.399 V 1931 262.6 521.199 261.8 515.999 V 1932 272.2 528.799 277.8 528.399 V 1933 285.4 527.999 285.4 517.199 V 1934 291 527.599 294.2 527.199 V 1935 295.4 520.799 294.2 513.999 V 1936 298.2 521.599 302.2 519.999 V 1937 308.6 521.999 307.8 510.399 V 1938 307.8 499.999 307 497.199 V 1939 312.6 523.599 315 523.999 V 1940 323 525.199 327.8 516.399 V 1941 323.8 523.999 328.6 521.999 V 1942 339.4 520.399 342.6 513.599 V 1943 335.8 525.599 341.4 522.399 V 1944 348.2 522.399 349.4 515.999 V 1945 357.8 494.799 359.8 493.199 V 1946 352.2 514.799 353.8 514.799 V 1947 351.8 526.799 357 511.999 V 1948 353.8 525.999 359.4 525.199 v 1949 365 524.399 369.4 514.399 377.8 516.799 C 1950 387.401 511.199 389.401 580.399 V 1951 265.4 533.599 L 1952 f 1953 0 g 1954 0 J 1 w 1955 270.2 626.399 m 1956 285 632.399 325 626.399 V 1957 332.2 625.999 339 634.799 v 1958 345.8 643.599 372.6 650.799 379 648.799 C 1959 388.601 642.399 l 1960 389.401 641.199 l 1961 401.801 630.799 402.201 623.199 v 1962 402.601 615.599 387.801 567.599 378.2 551.599 c 1963 368.6 535.599 359 523.199 339.8 525.599 C 1964 319 529.599 293.4 525.599 v 1965 264.2 527.199 261.4 535.199 v 1966 258.6 543.199 272.6 558.399 y 1967 277 566.799 275.8 581.199 v 1968 274.6 595.599 275 623.599 270.2 626.399 c 1969 f 1970 0.1 0.6 0.45 0 k 1971 292.2 624.399 m 1972 300.6 605.999 271 540.799 y 1973 269 539.199 283.66 533.154 293.8 535.599 c 1974 304.746 538.237 345 533.999 Y 1975 368.6 549.599 381.4 593.999 y 1976 391.801 617.999 374.2 621.199 v 1977 356.6 624.399 292.2 624.399 y 1978 f 1979 0.1 0.6 0.45 0.2 k 1980 290.169 593.503 m 1981 293.495 606.293 295.079 618.094 292.2 624.399 c 1982 354.6 617.999 365.8 638.799 v 1983 370.041 646.674 384.801 615.999 384.4 606.399 c 1984 321.4 591.999 306.6 603.199 V 1985 290.169 593.503 L 1986 f 1987 0.1 0.6 0.45 0.25 k 1988 294.6 577.199 m 1989 296.6 569.999 294.2 565.999 V 1990 292.6 565.199 291.4 564.799 V 1991 292.6 561.199 298.6 559.599 V 1992 300.6 555.199 303 554.799 v 1993 305.4 554.399 310.2 548.799 314.2 549.999 c 1994 318.2 551.199 329.4 555.199 y 1995 335 558.399 343.8 554.799 V 1996 346.175 555.601 346.6 559.599 v 1997 347.1 564.299 350.2 567.999 352.2 569.999 c 1998 354.2 571.999 363.8 584.799 362.6 585.199 c 1999 361.4 585.599 294.6 577.199 Y 2000 f 2001 0 0.55 0.5 0 k 2002 290.2 625.599 m 2003 287.4 603.199 290.6 594.799 v 2004 293.8 586.399 293 584.399 292.2 580.399 c 2005 291.4 576.399 295.8 566.399 301.4 560.399 C 2006 313.4 558.799 l 2007 328.6 562.399 337.8 559.599 V 2008 346.794 558.256 350.2 573.199 V 2009 355 579.599 362.2 582.399 v 2010 369.4 585.199 376.6 626.799 372.6 634.799 c 2011 368.6 642.799 354.2 647.199 338.2 631.599 c 2012 322.2 615.999 320.2 632.799 290.2 625.599 C 2013 b 2014 0 0 0.2 0 k 2015 0.5 w 2016 291.8 550.799 m 2017 291 552.799 286.6 553.199 V 2018 264.2 556.799 255.8 569.199 V 2019 249 574.799 253.4 563.199 V 2020 263.8 542.799 270.6 539.999 V 2021 287 535.999 291.8 550.799 V 2022 b 2023 0 0.55 0.5 0.2 k 2024 1 w 2025 371.742 614.771 m 2026 372.401 622.677 374.354 631.291 372.6 634.799 c 2027 366.154 647.693 349.181 642.305 338.2 631.599 c 2028 322.2 615.999 320.2 632.799 290.2 625.599 C 2029 288.455 611.636 289.295 601.624 v 2030 326.6 613.199 327.4 607.599 V 2031 329 610.799 338.2 610.799 v 2032 347.4 610.799 370.142 611.971 371.742 614.771 C 2033 f 2034 0 g 2035 0 0.55 0.5 0.35 K 2036 2 w 2037 328.6 624.799 m 2038 333.4 619.999 329.8 610.399 V 2039 315.4 594.399 317.4 580.399 v 2040 S 2041 0 0 0.2 0 k 2042 0 G 2043 0.5 w 2044 280.6 539.999 m 2045 276.2 552.799 285 545.999 V 2046 289.8 543.999 288.6 542.399 v 2047 287.4 540.799 281.8 536.799 280.6 539.999 C 2048 b 2049 285.64 538.799 m 2050 282.12 549.039 289.16 543.599 V 2051 293.581 541.151 292.04 540.719 v 2052 287.48 539.439 292.04 536.879 285.64 538.799 C 2053 b 2054 290.44 538.799 m 2055 286.92 549.039 293.96 543.599 V 2056 298.335 541.289 296.84 540.719 v 2057 293.48 539.439 296.84 536.879 290.44 538.799 C 2058 b 2059 297.04 538.599 m 2060 293.52 548.839 300.56 543.399 V 2061 304.943 541.067 303.441 540.519 v 2062 300.48 539.439 303.441 536.679 297.04 538.599 C 2063 b 2064 303.52 538.679 m 2065 300 548.919 307.041 543.479 V 2066 310.881 541.879 309.921 540.599 v 2067 308.961 539.319 309.921 536.759 303.52 538.679 C 2068 b 2069 310.2 537.999 m 2070 305.4 550.399 314.6 543.999 V 2071 319.4 541.999 318.2 540.399 v 2072 317 538.799 318.2 535.599 310.2 537.999 C 2073 b 2074 0 g 2075 0.1 0.6 0.45 0.25 K 2076 2 w 2077 281.8 555.199 m 2078 295 557.999 301 554.799 V 2079 307 553.599 308.2 553.999 v 2080 309.4 554.399 312.6 554.799 y 2081 S 2082 315.8 546.399 m 2083 327.8 559.999 339.8 555.599 v 2084 346.816 553.026 345.8 556.399 346.6 559.199 c 2085 347.4 561.999 347.6 566.199 352.6 569.199 c 2086 S 2087 0 0 0.2 0 k 2088 0 G 2089 0.5 w 2090 333 562.399 m 2091 329 573.199 326.2 560.399 v 2092 323.4 547.599 320.2 543.999 318.6 541.199 C 2093 318.6 535.999 327 536.399 V 2094 337.8 536.799 338.2 539.599 v 2095 338.6 542.399 337 553.999 333 562.399 C 2096 b 2097 0 g 2098 0.1 0.6 0.45 0.25 K 2099 2 w 2100 347 555.199 m 2101 350.6 557.599 353 556.399 v 2102 S 2103 353.5 571.599 m 2104 356.4 576.499 361.2 577.299 v 2105 S 2106 0.7 g 2107 0 G 2108 1 w 2109 274.2 534.799 m 2110 292.2 531.599 296.6 533.199 V 2111 305.4 533.199 297 531.199 V 2112 284.2 531.199 276.2 532.399 V 2113 264.6 537.999 274.2 534.799 V 2114 f 2115 0 0 0.2 0 k 2116 0.5 w 2117 288.2 627.999 m 2118 305.8 627.999 307.8 627.199 V 2119 315 596.399 311.4 588.799 V 2120 310.2 585.999 307.4 591.599 V 2121 289 624.399 285.8 626.399 v 2122 282.6 628.399 287 627.999 288.2 627.999 C 2123 b 2124 211.1 630.699 m 2125 220 628.999 232.6 626.399 V 2126 237.4 603.999 240.6 599.199 v 2127 243.8 594.399 240.2 594.399 236.6 597.199 c 2128 233 599.999 218.2 613.999 216.2 618.399 c 2129 214.2 622.799 211.1 630.699 y 2130 b 2131 232.961 626.182 m 2132 238.761 624.634 239.77 622.419 v 2133 240.778 620.205 238.568 616.908 y 2134 237.568 613.603 236.366 615.765 v 2135 235.164 617.928 232.292 625.588 232.961 626.182 c 2136 b 2137 0 g 2138 233 626.399 m 2139 236.6 621.199 240.2 621.199 v 2140 243.8 621.199 244.182 621.612 247 620.999 c 2141 251.6 619.999 251.2 621.999 257.8 620.799 c 2142 260.44 620.319 263 621.199 265.8 619.999 c 2143 268.6 618.799 271.8 619.599 273 621.599 c 2144 274.2 623.599 279 627.799 Y 2145 266.2 625.999 263.4 625.199 V 2146 241 623.999 233 626.399 V 2147 f 2148 0 0 0.2 0 k 2149 277.6 626.199 m 2150 271.15 622.699 270.75 620.299 v 2151 270.35 617.899 276 614.199 y 2152 278.75 609.599 279.35 611.999 v 2153 279.95 614.399 278.4 625.799 277.6 626.199 c 2154 b 2155 240.115 620.735 m 2156 247.122 609.547 247.339 620.758 V 2157 247.896 622.016 246.136 622.038 v 2158 240.061 622.114 241.582 626.216 240.115 620.735 C 2159 b 2160 247.293 620.486 m 2161 255.214 609.299 254.578 620.579 V 2162 254.585 620.911 252.832 621.064 v 2163 248.085 621.478 248.43 625.996 247.293 620.486 C 2164 b 2165 254.506 620.478 m 2166 262.466 609.85 261.797 619.516 V 2167 261.916 620.749 260.262 621.05 v 2168 256.37 621.756 256.159 625.005 254.506 620.478 C 2169 b 2170 261.382 620.398 m 2171 269.282 608.837 269.63 618.618 V 2172 271.274 619.996 269.528 620.218 v 2173 263.71 620.958 264.508 625.412 261.382 620.398 C 2174 b 2175 0 0 0.2 0.1 k 2176 225.208 616.868 m 2177 217.55 618.399 l 2178 214.95 623.399 212.85 629.549 y 2179 219.2 628.549 231.7 625.749 V 2180 232.576 622.431 234.048 616.636 v 2181 225.208 616.868 l 2182 f 2183 290.276 621.53 m 2184 288.61 624.036 287.293 625.794 286.643 626.2 c 2185 283.63 628.083 287.773 627.706 288.902 627.706 C 2186 305.473 627.706 307.356 626.953 V 2187 307.88 624.711 308.564 621.32 V 2188 298.476 623.33 290.276 621.53 V 2189 f 2190 0.2 0.55 0.85 0 k 2191 1 w 2192 343.88 759.679 m 2193 371.601 755.719 397.121 791.359 398.881 801.04 c 2194 400.641 810.72 390.521 822.6 Y 2195 391.841 825.68 387.001 839.76 381.721 849 c 2196 376.441 858.24 360.54 857.266 343 858.24 c 2197 327.16 859.12 308.68 835.8 307.36 834.04 c 2198 306.04 832.28 312.2 793.999 313.52 788.279 c 2199 314.84 782.559 312.2 756.159 y 2200 346.44 765.259 316.16 763.639 343.88 759.679 c 2201 f 2202 0.08 0.44 0.68 0 k 2203 308.088 833.392 m 2204 306.792 831.664 312.84 794.079 314.136 788.463 c 2205 315.432 782.847 312.84 756.927 y 2206 345.512 765.807 316.728 764.271 343.944 760.383 c 2207 371.161 756.495 396.217 791.487 397.945 800.992 c 2208 399.673 810.496 389.737 822.16 Y 2209 391.033 825.184 386.281 839.008 381.097 848.08 c 2210 375.913 857.152 360.302 856.195 343.08 857.152 c 2211 327.528 858.016 309.384 835.12 308.088 833.392 c 2212 f 2213 0.06 0.33 0.51 0 k 2214 308.816 832.744 m 2215 307.544 831.048 313.48 794.159 314.752 788.647 c 2216 316.024 783.135 313.48 757.695 y 2217 344.884 766.855 317.296 764.903 344.008 761.087 c 2218 370.721 757.271 395.313 791.615 397.009 800.944 c 2219 398.705 810.272 388.953 821.72 Y 2220 390.225 824.688 385.561 838.256 380.473 847.16 c 2221 375.385 856.064 360.063 855.125 343.16 856.064 c 2222 327.896 856.912 310.088 834.44 308.816 832.744 c 2223 f 2224 0.04 0.22 0.34 0 k 2225 309.544 832.096 m 2226 308.296 830.432 314.12 794.239 315.368 788.831 c 2227 316.616 783.423 314.12 758.463 y 2228 343.556 767.503 317.864 765.535 344.072 761.791 c 2229 370.281 758.047 394.409 791.743 396.073 800.895 c 2230 397.737 810.048 388.169 821.28 Y 2231 389.417 824.192 384.841 837.504 379.849 846.24 c 2232 374.857 854.976 359.824 854.055 343.24 854.976 c 2233 328.264 855.808 310.792 833.76 309.544 832.096 c 2234 f 2235 0.02 0.11 0.17 0 k 2236 310.272 831.448 m 2237 309.048 829.816 314.76 794.319 315.984 789.015 c 2238 317.208 783.711 314.76 759.231 y 2239 342.628 768.151 318.432 766.167 344.136 762.495 c 2240 369.841 758.823 393.505 791.871 395.137 800.848 c 2241 396.769 809.824 387.385 820.84 Y 2242 388.609 823.696 384.121 836.752 379.225 845.32 c 2243 374.329 853.888 359.585 852.985 343.32 853.888 c 2244 328.632 854.704 311.496 833.08 310.272 831.448 c 2245 f 2246 1 g 2247 344.2 763.2 m 2248 369.4 759.6 392.601 792 394.201 800.8 c 2249 395.801 809.6 386.601 820.4 Y 2250 387.801 823.2 383.4 836 378.6 844.4 c 2251 373.8 852.8 359.346 851.914 343.4 852.8 c 2252 329 853.6 312.2 832.4 311 830.8 c 2253 309.8 829.2 315.4 794.4 316.6 789.2 c 2254 317.8 784 315.4 760 y 2255 340.9 768.6 319 766.8 344.2 763.2 c 2256 f 2257 0.8 g 2258 390.601 797.2 m 2259 362.8 789.6 351.2 791.2 V 2260 335.4 797.8 326.6 776 V 2261 323 768.8 321 766.8 v 2262 319 764.8 390.601 797.2 Y 2263 f 2264 0 g 2265 394.401 799.4 m 2266 365.4 787.2 355.4 787.6 v 2267 339 792.2 330.6 777.6 V 2268 322.2 768.4 319 766.8 V 2269 318.6 765.2 325 769.2 V 2270 335.4 764 l 2271 350.2 754.4 359.8 770.4 V 2272 363.8 781.6 363.8 783.6 v 2273 363.8 785.6 385 791.2 386.601 791.6 c 2274 388.201 792 394.801 796.2 394.401 799.4 C 2275 f 2276 0.4 0.2 0.8 0 k 2277 347 763.486 m 2278 340.128 763.486 331.755 767.351 331.755 773.6 c 2279 331.755 779.848 340.128 786.113 347 786.113 c 2280 353.874 786.113 359.446 781.048 359.446 774.8 c 2281 359.446 768.551 353.874 763.486 347 763.486 c 2282 f 2283 0.4 0.2 0.8 0.2 k 2284 343.377 780.17 m 2285 338.531 779.448 333.442 777.945 333.514 778.161 c 2286 335.054 782.78 341.415 786.113 347 786.113 c 2287 351.296 786.113 355.084 784.135 357.32 781.125 c 2288 352.004 781.455 343.377 780.17 v 2289 f 2290 1 g 2291 355.4 780.4 m 2292 351 783.6 351 781.4 V 2293 354.6 777 355.4 780.4 V 2294 f 2295 0 g 2296 345.4 772.274 m 2297 342.901 772.274 340.875 774.3 340.875 776.8 c 2298 340.875 779.299 342.901 781.325 345.4 781.325 c 2299 347.9 781.325 349.926 779.299 349.926 776.8 c 2300 349.926 774.3 347.9 772.274 345.4 772.274 c 2301 f 2302 0.2 0.55 0.85 0 k 2303 241.4 785.6 m 2304 238.2 806.8 240.6 811.2 V 2305 251.4 821.2 251 824.8 V 2306 250.6 842.8 249.4 843.6 v 2307 248.2 844.4 240.6 850.4 234.6 844 C 2308 224.2 826 225 819.6 V 2309 225 817.6 l 2310 217.4 818 215.8 816 V 2311 214.6 810.8 213.4 810.4 V 2312 210.6 808 212.6 805.2 V 2313 210.6 802.8 211 798.8 V 2314 218.6 794.8 L 2315 220.6 780.4 231.4 775.2 v 2316 236.236 772.871 239.4 779.6 241.4 785.6 c 2317 f 2318 1 g 2319 240.4 787.44 m 2320 237.52 806.52 239.68 810.48 V 2321 249.4 819.48 249.04 822.72 V 2322 248.68 838.92 247.6 839.64 v 2323 246.52 840.36 239.68 845.76 234.28 840 C 2324 224.92 823.8 225.64 818.04 V 2325 225.64 816.24 l 2326 218.8 816.6 217.36 814.8 V 2327 216.28 810.12 215.2 809.76 V 2328 212.68 807.6 214.48 805.08 V 2329 212.68 802.92 213.04 799.32 V 2330 219.88 795.72 L 2331 221.68 782.76 231.4 778.08 v 2332 235.752 775.985 238.6 782.04 240.4 787.44 c 2333 f 2334 0.075 0.412 0.637 0 k 2335 248.95 842.61 m 2336 247.86 843.47 240.37 849.24 234.52 843 C 2337 224.38 825.45 225.16 819.21 V 2338 225.16 817.26 l 2339 217.75 817.65 216.19 815.7 V 2340 215.02 810.63 213.85 810.24 V 2341 211.12 807.9 213.07 805.17 V 2342 211.12 802.83 211.51 798.93 V 2343 218.92 795.03 L 2344 220.87 780.99 231.4 775.92 v 2345 236.114 773.65 239.2 780.21 241.15 786.06 c 2346 238.03 806.73 240.37 811.02 V 2347 250.9 820.77 250.51 824.28 V 2348 250.12 841.83 248.95 842.61 V 2349 f 2350 0.05 0.275 0.425 0 k 2351 248.5 841.62 m 2352 247.52 842.54 240.14 848.08 234.44 842 C 2353 224.56 824.9 225.32 818.82 V 2354 225.32 816.92 l 2355 218.1 817.3 216.58 815.4 V 2356 215.44 810.46 214.3 810.08 V 2357 211.64 807.8 213.54 805.14 V 2358 211.64 802.86 212.02 799.06 V 2359 219.24 795.26 L 2360 221.14 781.58 231.4 776.64 v 2361 235.994 774.428 239 780.82 240.9 786.52 c 2362 237.86 806.66 240.14 810.84 V 2363 250.4 820.34 250.02 823.76 V 2364 249.64 840.86 248.5 841.62 V 2365 f 2366 0.025 0.137 0.212 0 k 2367 248.05 840.63 m 2368 247.18 841.61 239.91 846.92 234.36 841 C 2369 224.74 824.35 225.48 818.43 V 2370 225.48 816.58 l 2371 218.45 816.95 216.97 815.1 V 2372 215.86 810.29 214.75 809.92 V 2373 212.16 807.7 214.01 805.11 V 2374 212.16 802.89 212.53 799.19 V 2375 219.56 795.49 L 2376 221.41 782.17 231.4 777.36 v 2377 235.873 775.206 238.8 781.43 240.65 786.98 c 2378 237.69 806.59 239.91 810.66 V 2379 249.9 819.91 249.53 823.24 V 2380 249.16 839.89 248.05 840.63 V 2381 f 2382 1 g 2383 240.4 787.54 m 2384 237.52 806.52 239.68 810.48 V 2385 249.4 819.48 249.04 822.72 V 2386 248.68 838.92 247.6 839.64 V 2387 246.84 840.68 239.68 845.76 234.28 840 C 2388 224.92 823.8 225.64 818.04 V 2389 225.64 816.24 l 2390 218.8 816.6 217.36 814.8 V 2391 216.28 810.12 215.2 809.76 V 2392 212.68 807.6 214.48 805.08 V 2393 212.68 802.92 213.04 799.32 V 2394 219.88 795.72 L 2395 221.68 782.76 231.4 778.08 v 2396 235.752 775.985 238.6 782.14 240.4 787.54 c 2397 f 2398 0.8 g 2399 237.3 793.8 m 2400 215.7 804 214.8 804.8 V 2401 223.9 796.6 224.7 796.6 v 2402 225.5 796.6 237.3 793.8 Y 2403 f 2404 0 g 2405 220.2 800 m 2406 238.6 796.4 238.6 792 v 2407 238.6 789.088 238.357 775.669 233 777.2 c 2408 224.6 779.6 228.2 794 220.2 800 c 2409 f 2410 0.4 0.2 0.8 0 k 2411 228.6 796.2 m 2412 237.578 794.726 238.6 792 v 2413 239.2 790.4 239.863 782.092 234.4 781 c 2414 229.848 780.089 227.618 790.31 228.6 796.2 c 2415 f 2416 0 g 2417 314.595 753.651 m 2418 314.098 755.393 315.409 755.262 317.2 755.8 c 2419 319.2 756.4 331.4 760.2 332.2 762.8 c 2420 333 765.4 346.2 761 Y 2421 348 760.2 352.4 757.6 Y 2422 357.2 756.4 363.8 756 Y 2423 366.2 755 369.6 752.2 Y 2424 384.2 742 396.601 749.2 Y 2425 416.601 755.8 410.601 773 Y 2426 407.601 782 410.801 785.4 Y 2427 411.001 789.2 418.201 782.8 Y 2428 420.801 778.6 421.601 773.6 Y 2429 429.601 762.4 426.201 780.2 Y 2430 426.401 781.2 423.601 784.8 423.601 786 c 2431 423.601 787.2 421.801 790.6 Y 2432 418.801 794 421.201 801 Y 2433 423.001 814.8 420.801 813 Y 2434 419.601 814.8 410.401 804.8 Y 2435 408.201 801.4 402.201 799.8 Y 2436 399.401 798 396.001 799.4 Y 2437 393.401 799.8 387.801 792.8 Y 2438 390.601 793 393.001 788.6 395.401 788.4 c 2439 397.801 788.2 399.601 790.8 401.201 791.4 c 2440 402.801 792 405.601 786.2 Y 2441 406.001 783.6 400.401 778.8 Y 2442 400.001 774.2 398.401 775.8 Y 2443 395.401 776.4 394.201 772.6 393.201 768 c 2444 392.201 763.4 388.001 763 y 2445 386.401 755.6 385.2 758.6 Y 2446 385 764.2 379 758.4 Y 2447 377.8 756.4 373.2 758.6 Y 2448 366.4 760.6 368.8 762.6 Y 2449 370.6 764.8 381.8 762.6 Y 2450 384 764.2 376 768.2 Y 2451 375.4 770 376.4 774.4 Y 2452 377.6 777.6 384.4 783.2 Y 2453 393.801 784.4 391.001 786 Y 2454 384.801 791.2 379 783.6 Y 2455 376.8 777.4 359.4 762.4 Y 2456 354.6 759 357.2 765.8 353.2 762.4 c 2457 349.2 759 328.6 768 y 2458 317.038 769.193 314.306 753.451 310.777 756.571 c 2459 316.195 748.051 314.595 753.651 v 2460 f 2461 509.401 920 m 2462 483.801 912 481.001 893.2 V 2463 478.601 870.4 499.001 852.8 V 2464 499.401 846.4 501.401 843.2 v 2465 499.801 838.4 518.601 846 V 2466 545.801 854.4 l 2467 552.201 856.8 557.401 865.6 v 2468 562.601 874.4 577.801 893.2 574.201 918.4 C 2469 575.401 929.6 569.401 930 V 2470 561.001 931.6 553.801 924 V 2471 547.001 920.8 544.601 921.2 V 2472 509.401 920 L 2473 f 2474 564.022 920.99 m 2475 566.122 929.92 561.282 925.08 V 2476 554.242 919.36 546.761 919.36 V 2477 532.241 917.16 527.841 903.96 V 2478 523.881 877.12 531.801 871.4 V 2479 536.641 863.92 543.681 870.52 v 2480 550.722 877.12 566.222 907.35 564.022 920.99 C 2481 f 2482 0.2 g 2483 563.648 920.632 m 2484 565.738 929.376 560.986 924.624 V 2485 554.074 919.008 546.729 919.008 V 2486 532.473 916.848 528.153 903.888 V 2487 524.265 877.536 532.041 871.92 V 2488 536.793 864.576 543.705 871.056 v 2489 550.618 877.536 565.808 907.24 563.648 920.632 C 2490 f 2491 0.4 g 2492 563.274 920.274 m 2493 565.354 928.832 560.69 924.168 V 2494 553.906 918.656 546.697 918.656 V 2495 532.705 916.536 528.465 903.816 V 2496 524.649 877.952 532.281 872.44 V 2497 536.945 865.232 543.729 871.592 v 2498 550.514 877.952 565.394 907.13 563.274 920.274 C 2499 f 2500 0.6 g 2501 562.9 919.916 m 2502 564.97 928.288 560.394 923.712 V 2503 553.738 918.304 546.665 918.304 V 2504 532.937 916.224 528.777 903.744 V 2505 525.033 878.368 532.521 872.96 V 2506 537.097 865.888 543.753 872.128 v 2507 550.41 878.368 564.98 907.02 562.9 919.916 C 2508 f 2509 0.8 g 2510 562.526 919.558 m 2511 564.586 927.744 560.098 923.256 V 2512 553.569 917.952 546.633 917.952 V 2513 533.169 915.912 529.089 903.672 V 2514 525.417 878.784 532.761 873.48 V 2515 537.249 866.544 543.777 872.664 v 2516 550.305 878.784 564.566 906.91 562.526 919.558 C 2517 f 2518 1 g 2519 562.151 919.2 m 2520 564.201 927.2 559.801 922.8 V 2521 553.401 917.6 546.601 917.6 V 2522 533.401 915.6 529.401 903.6 V 2523 525.801 879.2 533.001 874 V 2524 537.401 867.2 543.801 873.2 v 2525 550.201 879.2 564.151 906.8 562.151 919.2 C 2526 f 2527 0.1 0.55 0.85 0.3 k 2528 350.6 716 m 2529 330.2 735.2 322.2 736 V 2530 287.8 740 273 722 V 2531 290.6 742.4 318.2 736.8 V 2532 296.6 741.2 284.2 738 V 2533 267.4 738 257.8 724 V 2534 255 719.2 l 2535 259 734 277.4 740 V 2536 300.2 744.8 311 740 V 2537 289.4 746.8 279.4 744.8 V 2538 249 747.2 236.2 720.8 V 2539 240.2 735.2 255 742.4 V 2540 268.6 751.2 289 748.4 V 2541 303.4 745.2 308.6 742.8 v 2542 313.8 740.4 312.6 743.2 304.2 748 C 2543 298.6 758 284.6 757.6 V 2544 241.8 754 231.4 742 V 2545 245 753.2 255.4 756 V 2546 277.8 764 286.2 763.2 V 2547 311 762.2 318.6 766.2 V 2548 307.4 761.2 310.6 758 v 2549 313.8 754.8 320.6 747.2 320.6 746 c 2550 320.6 744.8 344.8 722.7 348.4 718.3 C 2551 350.6 716 l 2552 f 2553 0.8 g 2554 1 J 0.1 w 2555 489 522 m 2556 473.5 558.5 461 568 V 2557 487 552 490.5 534 V 2558 490.5 524 489 522 V 2559 f 2560 536 514.5 m 2561 509.5 569.5 491 593.5 V 2562 534.5 556 539.5 529.5 V 2563 540 524 l 2564 537 526.5 l 2565 536.5 517.5 536 514.5 V 2566 f 2567 592.5 563 m 2568 530 622.5 528.5 625 V 2569 589 559 592 551.5 V 2570 590 560.5 592.5 563 V 2571 f 2572 404 519.5 m 2573 423.5 571.5 442.5 549 V 2574 457.5 539 457 536 V 2575 453 542.5 435 542 V 2576 416 545 404 519.5 V 2577 f 2578 594.5 647 m 2579 549.5 675.5 542 677 v 2580 530.193 679.361 591.5 648 596.5 637.5 C 2581 598.5 640 594.5 647 V 2582 f 2583 0 g 2584 0 J 1 w 2585 443.801 540.399 m 2586 464.201 542.399 471.001 549.199 V 2587 475.401 545.599 l 2588 493.001 583.999 l 2589 496.601 578.799 l 2590 511.001 593.599 510.201 601.599 v 2591 509.401 609.599 523.001 595.599 y 2592 522.201 607.199 529.401 600.399 V 2593 527.001 615.999 535.401 607.999 V 2594 524.864 638.156 547.401 612.399 v 2595 553.001 605.999 548.601 612.799 y 2596 522.601 660.799 544.201 646.399 v 2597 546.201 669.199 545.001 673.599 v 2598 543.801 677.999 541.801 700.4 537.001 705.6 c 2599 532.201 710.8 537.401 712.4 543.001 707.2 C 2600 531.801 731.2 545.001 719.2 V 2601 541.401 734.4 537.001 737.2 V 2602 531.401 754.4 546.601 743.6 V 2603 542.201 756 539.001 759.2 V 2604 527.401 786.8 534.601 782 V 2605 539.001 778.4 l 2606 532.201 792.4 538.601 788 v 2607 545.001 783.6 545.001 784 y 2608 523.801 817.2 544.201 799.6 V 2609 536.042 813.518 532.601 820.4 V 2610 513.801 840.8 528.201 834.4 V 2611 533.001 832.8 l 2612 524.201 842.8 516.201 844.4 v 2613 508.201 846 518.601 852.4 525.001 850.4 c 2614 531.401 848.4 547.001 840.8 y 2615 559.801 822 563.801 821.6 V 2616 543.801 829.2 549.801 821.2 V 2617 564.201 807.2 557.001 807.6 V 2618 551.001 800.4 555.801 791.6 V 2619 537.342 809.991 552.201 784.4 v 2620 559.001 768 l 2621 534.601 792.8 545.801 770.8 V 2622 563.001 747.2 565.001 746.8 v 2623 567.001 746.4 571.401 737.6 y 2624 567.001 739.6 l 2625 572.201 730.8 l 2626 561.001 742.8 567.001 729.6 V 2627 572.601 715.2 l 2628 552.201 737.2 565.801 707.6 V 2629 549.401 712.8 558.201 695.6 V 2630 556.601 679.599 557.001 674.399 v 2631 557.401 669.199 558.601 640.799 554.201 632.799 c 2632 549.801 624.799 560.201 605.599 562.201 601.599 c 2633 564.201 597.599 567.801 586.799 559.001 595.999 c 2634 550.201 605.199 554.601 599.599 556.601 590.799 c 2635 558.601 581.999 564.601 566.399 563.801 560.799 C 2636 562.601 559.599 559.401 563.199 V 2637 544.601 585.999 546.201 571.599 V 2638 545.001 563.599 541.801 554.799 V 2639 538.601 543.999 538.601 552.799 V 2640 535.401 569.599 532.601 561.999 v 2641 529.801 554.399 526.201 548.399 523.401 545.999 c 2642 520.601 543.599 515.401 566.399 514.201 555.999 C 2643 502.201 568.399 497.401 551.999 V 2644 485.801 535.599 l 2645 485.401 547.999 484.201 541.999 V 2646 454.201 535.999 443.801 540.399 V 2647 f 2648 409.401 897.2 m 2649 397.801 905.2 393.801 904.8 v 2650 389.801 904.4 421.401 913.6 462.601 886 C 2651 467.401 883.2 471.001 883.6 V 2652 474.201 881.2 471.401 877.6 V 2653 462.601 868 473.801 856.8 V 2654 492.201 850 486.601 858.8 V 2655 497.401 854.8 499.801 850.8 v 2656 502.201 846.8 501.001 850.8 y 2657 494.601 858 488.601 863.2 V 2658 483.401 865.2 480.601 873.6 v 2659 477.801 882 475.401 892 479.801 895.2 C 2660 475.801 890.8 476.601 894.8 v 2661 477.401 898.8 481.001 902.4 482.601 902.8 c 2662 484.201 903.2 500.601 919 507.401 919.4 C 2663 498.201 918 495.201 919 v 2664 492.201 920 465.601 931.4 459.601 932.6 C 2665 442.801 939.2 454.801 937.2 V 2666 490.601 933.4 508.801 920.2 V 2667 501.601 928.6 483.201 935.6 V 2668 461.001 948.2 425.801 943.2 V 2669 408.001 940 400.201 938.2 V 2670 397.601 938.8 397.001 939.2 v 2671 396.401 939.6 384.6 948.6 357 941.6 C 2672 340 937 331.4 932.2 V 2673 316.2 931 312.6 927.8 V 2674 294 913.2 292 912.4 v 2675 290 911.6 278.6 904 277.8 903.6 C 2676 302.4 910.2 304.8 912.6 v 2677 307.2 915 324.6 917.6 327 916.2 c 2678 329.4 914.8 337.8 915.4 328.2 914.8 C 2679 403.801 900 404.601 898 v 2680 405.401 896 409.401 897.2 y 2681 f 2682 0.2 0.55 0.85 0 k 2683 480.801 906.4 m 2684 470.601 913.8 468.601 913.8 v 2685 466.601 913.8 454.201 924 450.001 923.6 c 2686 445.801 923.2 433.601 933.2 406.201 925 C 2687 405.601 927 409.201 927.8 V 2688 415.601 930 416.001 930.6 V 2689 436.201 934.8 443.401 931.2 V 2690 452.601 928.6 458.801 922.4 V 2691 470.001 919.2 473.201 920.2 V 2692 482.001 918 482.401 916.2 V 2693 488.201 913.2 486.401 910.6 V 2694 486.801 909 480.801 906.4 V 2695 f 2696 468.33 908.509 m 2697 469.137 907.877 470.156 907.779 470.761 906.97 c 2698 470.995 906.656 470.706 906.33 470.391 906.233 c 2699 469.348 905.916 468.292 906.486 467.15 905.898 c 2700 466.748 905.691 466.106 905.873 465.553 906.022 c 2701 463.921 906.463 462.092 906.488 460.401 905.8 C 2702 458.416 906.929 456.056 906.345 453.975 907.346 c 2703 453.917 907.373 453.695 907.027 453.621 907.054 c 2704 450.575 908.199 446.832 907.916 444.401 910.2 C 2705 441.973 910.612 439.616 911.074 437.188 911.754 c 2706 435.37 912.263 433.961 913.252 432.341 914.084 c 2707 430.964 914.792 429.507 915.314 427.973 915.686 c 2708 426.11 916.138 424.279 916.026 422.386 916.546 c 2709 422.293 916.571 422.101 916.227 422.019 916.254 c 2710 421.695 916.362 421.405 916.945 421.234 916.892 c 2711 419.553 916.37 418.065 917.342 416.401 917 C 2712 415.223 918.224 413.495 917.979 411.949 918.421 c 2713 408.985 919.269 405.831 917.999 402.801 919 C 2714 406.914 920.842 411.601 919.61 415.663 921.679 c 2715 417.991 922.865 420.653 921.763 423.223 922.523 c 2716 423.71 922.667 424.401 922.869 424.801 922.2 C 2717 424.935 922.335 425.117 922.574 425.175 922.546 c 2718 427.625 921.389 429.94 920.115 432.422 919.049 c 2719 432.763 918.903 433.295 919.135 433.547 918.933 c 2720 435.067 917.717 437.01 917.82 438.401 916.6 C 2721 440.099 917.102 441.892 916.722 443.621 917.346 c 2722 443.698 917.373 443.932 917.032 443.965 917.054 c 2723 445.095 917.802 446.25 917.531 447.142 917.227 c 2724 447.48 917.112 448.143 916.865 448.448 916.791 c 2725 449.574 916.515 450.43 916.035 451.609 915.852 c 2726 451.723 915.834 451.908 916.174 451.98 916.146 c 2727 453.103 915.708 454.145 915.764 454.801 914.6 C 2728 454.936 914.735 455.101 914.973 455.183 914.946 c 2729 456.21 914.608 456.859 913.853 457.96 913.612 c 2730 458.445 913.506 459.057 912.88 459.633 912.704 c 2731 462.025 911.973 463.868 910.444 466.062 909.549 c 2732 466.821 909.239 467.697 909.005 468.33 908.509 c 2733 f 2734 391.696 922.739 m 2735 389.178 924.464 386.81 925.57 384.368 927.356 c 2736 384.187 927.489 383.827 927.319 383.625 927.441 c 2737 382.618 928.05 381.73 928.631 380.748 929.327 c 2738 380.209 929.709 379.388 929.698 378.88 929.956 c 2739 376.336 931.248 373.707 931.806 371.2 933 C 2740 371.882 933.638 373.004 933.394 373.6 934.2 C 2741 373.795 933.92 374.033 933.636 374.386 933.827 c 2742 376.064 934.731 377.914 934.884 379.59 934.794 c 2743 381.294 934.702 383.014 934.397 384.789 934.125 c 2744 385.096 934.078 385.295 933.555 385.618 933.458 c 2745 387.846 932.795 390.235 933.32 392.354 932.482 c 2746 393.945 931.853 395.515 931.03 396.754 929.755 c 2747 397.006 929.495 396.681 929.194 396.401 929 C 2748 396.789 929.109 397.062 928.903 397.173 928.59 c 2749 397.257 928.351 397.257 928.049 397.173 927.81 c 2750 397.061 927.498 396.782 927.397 396.408 927.346 c 2751 395.001 927.156 396.773 928.536 396.073 928.088 c 2752 394.8 927.274 395.546 925.868 394.801 924.6 C 2753 394.521 924.794 394.291 925.012 394.401 925.4 C 2754 394.635 924.878 394.033 924.588 393.865 924.272 c 2755 393.48 923.547 392.581 922.132 391.696 922.739 c 2756 f 2757 359.198 915.391 m 2758 356.044 916.185 352.994 916.07 349.978 917.346 c 2759 349.911 917.374 349.688 917.027 349.624 917.054 c 2760 348.258 917.648 347.34 918.614 346.264 919.66 c 2761 345.351 920.548 343.693 920.161 342.419 920.648 c 2762 342.095 920.772 341.892 921.284 341.591 921.323 c 2763 340.372 921.48 339.445 922.429 338.4 923 C 2764 340.736 923.795 343.147 923.764 345.609 924.148 c 2765 345.722 924.166 345.867 923.845 346 923.845 c 2766 346.136 923.845 346.266 924.066 346.4 924.2 C 2767 346.595 923.92 346.897 923.594 347.154 923.848 c 2768 347.702 924.388 348.258 924.198 348.798 924.158 c 2769 348.942 924.148 349.067 923.845 349.2 923.845 c 2770 349.336 923.845 349.467 924.156 349.6 924.156 c 2771 349.736 924.155 349.867 923.845 350 923.845 c 2772 350.136 923.845 350.266 924.066 350.4 924.2 C 2773 351.092 923.418 351.977 923.972 352.799 923.793 c 2774 353.837 923.566 354.104 922.418 355.178 922.12 c 2775 359.893 920.816 364.03 918.671 368.393 916.584 c 2776 368.7 916.437 368.91 916.189 368.8 915.8 C 2777 369.067 915.8 369.38 915.888 369.57 915.756 c 2778 370.628 915.024 371.669 914.476 372.366 913.378 c 2779 372.582 913.039 372.253 912.632 372.02 912.684 c 2780 367.591 913.679 363.585 914.287 359.198 915.391 c 2781 f 2782 345.338 871.179 m 2783 343.746 872.398 343.162 874.429 342.034 876.221 c 2784 341.82 876.561 342.094 876.875 342.411 876.964 c 2785 342.971 877.123 343.514 876.645 343.923 876.443 c 2786 345.668 875.581 347.203 874.339 349.2 874.2 C 2787 351.19 871.966 355.45 871.581 355.457 868.2 c 2788 355.458 867.341 354.03 868.259 353.6 867.4 C 2789 351.149 868.403 348.76 868.3 346.38 869.767 c 2790 345.763 870.148 346.093 870.601 345.338 871.179 c 2791 f 2792 317.8 923.756 m 2793 317.935 923.755 324.966 923.522 324.949 923.408 c 2794 324.904 923.099 317.174 922.05 316.81 922.22 c 2795 316.646 922.296 309.134 919.866 309 920 C 2796 309.268 920.135 317.534 923.756 317.8 923.756 c 2797 f 2798 0 g 2799 333.2 914 m 2800 318.4 912.2 314 911 v 2801 309.6 909.8 291 902.2 288 900.2 C 2802 274.6 894.8 257.6 874.8 V 2803 265.2 878.2 267.4 881 V 2804 281 893.6 280.8 891 V 2805 293 899.6 292.4 897.4 V 2806 316.8 908.6 314.8 905.4 V 2807 336.4 910 335.4 908 V 2808 354.2 903.6 351.4 903.4 V 2809 345.6 902.2 352 898.6 V 2810 348.6 894.2 343.2 898.2 v 2811 337.8 902.2 340.8 900 335.8 899 C 2812 333.2 898.2 328.6 902.2 V 2813 323 906.8 314.2 903.2 V 2814 283.6 890.6 281.6 890 V 2815 278 887.2 275.6 883.6 V 2816 269.8 879.2 266.8 877.8 V 2817 254 866.2 252.8 864.8 V 2818 249.4 859.6 248.6 859.2 V 2819 255 863 257 865 V 2820 271 875 276.4 875.8 V 2821 280.8 878.8 281.6 880.2 V 2822 296 889.4 300.2 889.4 V 2823 309.4 884.2 311.8 891.2 V 2824 317.6 893 323.2 891.8 V 2825 326.4 894.4 325.6 896.6 V 2826 327.2 898.4 328.2 894.6 V 2827 331.6 891 336.4 893 V 2828 340.4 893.2 338.4 890.8 V 2829 334 887 322.2 886.8 V 2830 309.8 886.2 293.4 878.6 V 2831 263.6 868.2 254.4 857.8 V 2832 248 849 242.6 847.8 V 2833 236.8 847 230.8 839.6 V 2834 240.6 845.4 249.6 845.4 V 2835 253.6 847.8 249.8 844.2 V 2836 246.2 836.6 247.8 831.2 V 2837 247.2 826 246.4 824.4 V 2838 238.6 811.6 238.6 809.2 v 2839 238.6 806.8 239.8 797 240.2 796.4 c 2840 240.6 795.8 239.2 798 243 795.6 c 2841 246.8 793.2 249.6 791.6 250.4 788.8 c 2842 251.2 786 248.4 794.2 248.2 796 c 2843 248 797.8 243.8 805 244.6 807.4 C 2844 245.6 806.4 246.4 805 V 2845 245.8 805.6 246.4 809.2 V 2846 247.2 814.4 248.6 817.6 v 2847 250 820.8 252 824.6 252.4 825.4 c 2848 252.8 826.2 252.8 832 254.2 829.4 C 2849 257.6 826.8 l 2850 254.8 829.4 257 831.6 V 2851 256 837.2 257.8 839.8 V 2852 264.8 848.2 266.4 849.2 v 2853 268 850.2 266.6 849.8 y 2854 272.6 854 266.8 852.4 V 2855 262.8 850.8 259.8 850.8 V 2856 252.2 848.8 256.2 853 v 2857 260.2 857.2 270.2 862.6 274 862.4 C 2858 274.8 860.8 l 2859 286 863.2 l 2860 284.8 862.4 l 2861 284.6 862.6 288.8 863 v 2862 293 863.4 298.8 862 300.2 863.8 c 2863 301.6 865.6 305 866.6 304.6 865.2 c 2864 304.2 863.8 304 861.8 y 2865 309 867.6 308.4 865.4 v 2866 307.8 863.2 299.6 858 298.2 851.8 C 2867 308.6 860 l 2868 312.2 863 l 2869 315.8 860.8 316 862.4 v 2870 316.2 864 320.8 869.8 322 869.6 c 2871 323.2 869.4 325.2 872.2 325 869.6 c 2872 324.8 867 332.4 861.6 y 2873 335.6 863.4 337 862 v 2874 338.4 860.6 342.6 881.8 y 2875 367.6 892.4 l 2876 411.201 895.8 l 2877 394.201 902.6 l 2878 333.2 914 l 2879 f 2880 0.2 0.55 0.85 0.5 K 2881 1 J 2 w 2882 351.4 715 m 2883 336.4 731.8 328 734.4 V 2884 314.6 741.2 290 733.4 v 2885 S 2886 324.8 735.8 m 2887 299.6 743.8 284.2 739.6 V 2888 265.8 737.6 257.4 723.8 v 2889 S 2890 321.2 737 m 2891 304.2 744.2 289.4 746.4 V 2892 272.8 749 256.2 741.8 V 2893 244 735.8 238.6 725.6 v 2894 S 2895 322.2 736.6 m 2896 306.8 747.6 305.8 749 V 2897 298.8 760 285.8 760.4 V 2898 264.4 759.6 247.2 751.6 v 2899 S 2900 0 G 2901 0 J 1 w 2902 320.895 745.593 m 2903 322.437 744.13 349.4 715.2 Y 2904 384.6 678.599 356.6 712.8 Y 2905 349 717.6 339.8 736.4 Y 2906 338.6 739.2 353.8 729.2 Y 2907 357.8 728.4 371.4 709.2 Y 2908 364.6 711.6 369.4 704.4 Y 2909 372.2 702.4 392.601 686.799 Y 2910 396.201 682.799 400.201 681.199 Y 2911 414.201 686.399 407.801 673.199 Y 2912 410.201 666.399 415.801 677.999 Y 2913 427.001 694.8 410.601 692.399 Y 2914 380.6 689.599 373.8 705.6 Y 2915 371.4 708 380.2 705.6 Y 2916 388.601 703.6 373 718 Y 2917 375.4 718 384.6 711.2 Y 2918 395.001 702 397.001 704 Y 2919 415.001 712.8 425.401 705.2 Y 2920 427.401 703.6 421.801 696.8 423.401 691.599 c 2921 425.001 686.399 429.801 673.999 Y 2922 427.401 672.399 427.801 661.599 Y 2923 444.601 638.399 435.001 640.399 Y 2924 419.401 640.799 434.201 633.199 Y 2925 437.401 631.199 446.201 623.999 Y 2926 443.401 625.199 441.801 619.999 Y 2927 446.601 615.999 443.801 611.199 Y 2928 437.801 609.999 436.601 605.999 Y 2929 443.401 597.999 433.401 597.599 Y 2930 437.001 593.199 432.201 581.199 Y 2931 427.401 581.199 421.001 575.599 Y 2932 423.401 570.799 413.001 565.199 Y 2933 404.601 563.599 407.401 556.799 Y 2934 399.401 550.799 397.001 534.799 Y 2935 396.201 524.399 393.801 521.199 399.001 523.199 c 2936 404.201 525.199 403.401 537.599 Y 2937 398.601 553.199 441.401 569.199 Y 2938 445.401 570.799 446.201 575.999 Y 2939 448.201 575.599 457.001 567.999 Y 2940 464.601 556.799 465.001 565.999 Y 2941 466.201 569.599 464.601 575.599 Y 2942 470.601 597.199 456.601 603.599 Y 2943 446.601 637.199 460.601 628.799 Y 2944 463.401 623.199 474.201 617.999 y 2945 477.801 620.399 L 2946 476.201 625.199 484.601 631.199 Y 2947 487.401 624.799 493.401 632.799 Y 2948 497.001 657.199 509.401 642.799 Y 2949 513.401 641.599 514.601 648.399 Y 2950 518.201 658.799 514.601 672.399 Y 2951 518.201 672.799 527.801 666.799 Y 2952 530.601 670.399 521.401 687.199 525.401 684.799 c 2953 529.401 682.399 533.801 680.799 Y 2954 534.601 682.799 524.601 695.199 Y 2955 520.201 698 515.001 718.4 Y 2956 522.201 714.8 512.201 730 Y 2957 512.201 733.2 518.201 744.4 Y 2958 517.401 751.2 518.201 750.8 Y 2959 521.001 749.6 529.001 748 522.201 754.4 c 2960 515.401 760.8 523.001 765.6 Y 2961 527.401 768.4 513.801 768 Y 2962 508.601 772.4 509.001 776.4 Y 2963 517.001 774.4 502.601 788.8 500.201 792.4 c 2964 497.801 796 507.401 801.2 Y 2965 520.601 804.8 509.001 808 Y 2966 489.401 807.6 500.201 818.4 Y 2967 506.201 818 504.601 820.4 Y 2968 499.401 821.6 489.801 828 Y 2969 485.801 831.6 489.401 830.8 Y 2970 506.201 829.6 477.401 840.8 Y 2971 485.401 840.8 467.401 851.2 Y 2972 465.401 852.8 462.201 860.4 Y 2973 456.201 865.6 451.401 872.4 Y 2974 451.001 876.8 446.201 881.6 Y 2975 434.601 895.2 429.001 894.8 Y 2976 414.201 898.4 409.001 897.6 Y 2977 356.2 893.2 l 2978 329.8 880.4 337.6 859.4 Y 2979 344 851 353.2 854.8 Y 2980 357.8 861 369.4 858.8 Y 2981 389.801 855.6 387.201 859.2 Y 2982 384.801 863.8 368.6 870 368.4 870.6 c 2983 368.2 871.2 359.4 874.6 Y 2984 356.4 875.8 352 885 Y 2985 348.8 888.4 364.6 882.6 Y 2986 363.4 881.6 370.8 877.6 Y 2987 388.201 878.6 398.801 867.8 Y 2988 409.601 851.2 409.801 859.4 Y 2989 412.601 868.8 400.801 890 Y 2990 401.201 892 409.401 885.4 Y 2991 410.801 887.4 411.601 881.6 Y 2992 411.801 879.2 415.601 871.2 Y 2993 418.401 858.2 422.001 865.6 Y 2994 426.601 856.2 L 2995 428.001 853.6 422.001 846 Y 2996 421.801 843.2 422.601 843.4 417.001 835.8 c 2997 411.401 828.2 414.801 823.8 Y 2998 413.401 817.2 422.201 817.6 Y 2999 424.801 815.4 428.201 815.4 Y 3000 430.001 813.4 432.401 814 Y 3001 434.001 817.8 440.201 815.8 Y 3002 441.601 818.2 449.801 818.6 Y 3003 450.801 821.2 451.201 822.8 454.601 823.4 c 3004 458.001 824 433.401 867 Y 3005 439.801 867.8 431.601 880.2 Y 3006 429.401 886.8 440.801 872.2 443.001 870.8 c 3007 445.201 869.4 446.201 867.2 444.601 867.4 c 3008 443.001 867.6 441.201 865.4 442.601 865.2 c 3009 444.001 865 457.001 850 460.401 839.8 c 3010 463.801 829.6 469.801 825.6 476.001 819.6 c 3011 482.201 813.6 481.401 789.4 Y 3012 481.001 780.6 487.001 770 Y 3013 489.001 766.2 484.801 748 Y 3014 482.801 745.8 484.201 745 Y 3015 485.201 743.8 492.001 730.6 Y 3016 490.201 730.8 493.801 727.2 Y 3017 499.001 721.2 492.601 724.2 Y 3018 486.601 725.8 493.601 716 Y 3019 494.801 714.2 485.801 718.8 Y 3020 476.601 719.4 488.201 712.2 Y 3021 496.801 705 485.401 709.4 Y 3022 480.801 711.2 484.001 704.4 Y 3023 487.201 702.8 504.401 695.8 Y 3024 504.801 691.999 501.801 686.999 Y 3025 502.201 682.999 500.001 679.599 Y 3026 498.801 671.399 498.201 670.599 Y 3027 494.001 670.399 486.601 656.599 Y 3028 484.801 653.999 474.601 641.999 Y 3029 472.601 634.999 454.601 642.199 Y 3030 448.001 638.799 450.001 642.199 Y 3031 449.601 644.399 454.401 650.399 Y 3032 461.401 652.999 458.801 663.799 Y 3033 462.801 665.199 451.601 667.999 451.801 669.199 c 3034 452.001 670.399 457.801 671.799 Y 3035 465.801 673.799 461.401 676.199 Y 3036 460.801 680.199 463.801 685.799 Y 3037 475.401 686.599 463.801 702.8 Y 3038 453.001 710.4 452.001 716.2 Y 3039 464.601 724.4 456.401 736.8 456.601 740.4 c 3040 456.801 744 458.001 765.6 Y 3041 456.001 771.8 453.001 785.4 Y 3042 455.201 790.6 462.601 803.2 Y 3043 465.401 807.4 474.201 812.2 472.001 815.2 c 3044 469.801 818.2 462.001 816.4 Y 3045 454.201 817.8 454.801 812.6 Y 3046 453.201 811.6 452.401 806.6 Y 3047 451.68 798.667 442.801 792.4 Y 3048 431.601 786.2 440.801 782.2 Y 3049 446.801 775.6 437.001 775.4 Y 3050 426.001 777.2 434.201 767 Y 3051 445.001 754.2 442.001 751.4 Y 3052 431.801 750.4 444.401 741.2 y 3053 443.601 743.2 443.801 741.4 v 3054 444.001 739.6 447.001 735.4 447.801 733.4 c 3055 448.601 731.4 444.601 731.2 Y 3056 445.201 721.6 429.801 725.8 y 3057 429.801 725.8 428.201 725.6 v 3058 426.601 725.4 415.401 726.2 409.601 728.4 c 3059 403.801 730.6 397.001 730.6 y 3060 393.001 728.8 385.4 729 v 3061 377.8 729.2 369.8 726.4 Y 3062 365.4 726.8 374 731.2 374.2 731 c 3063 374.4 730.8 380 736.4 372 735.8 c 3064 350.203 734.165 339.4 744.4 Y 3065 337.4 745.8 334.8 748.6 Y 3066 324.8 750.6 336.2 736.2 Y 3067 337.4 734.8 336 733.8 Y 3068 335.2 735.4 327.4 740.8 Y 3069 324.589 741.773 323.226 743.107 320.895 745.593 C 3070 f 3071 0.2 0.55 0.85 0.5 k 3072 1 J 2 w 3073 297 757.2 m 3074 308.6 751.6 311.2 748.8 v 3075 313.8 746 327.8 734.6 y 3076 322.4 736.6 319.8 738.4 v 3077 317.2 740.2 306.4 748.4 y 3078 302.6 754.4 297 757.2 v 3079 f 3080 0.4 0.2 0.8 0 k 3081 0 J 1 w 3082 238.991 788.397 m 3083 239.328 788.545 238.804 791.257 238.6 791.8 c 3084 237.578 794.526 228.6 796 y 3085 228.373 794.635 228.318 793.039 228.424 791.401 c 3086 233.292 785.882 238.991 788.397 v 3087 f 3088 0.4 0.2 0.8 0.2 k 3089 238.991 788.597 m 3090 238.542 788.439 238.976 791.331 238.8 791.8 c 3091 237.778 794.526 228.6 796.1 y 3092 228.373 794.735 228.318 793.139 228.424 791.501 c 3093 232.692 786.382 238.991 788.597 v 3094 f 3095 0 g 3096 234.6 788.454 m 3097 233.975 788.454 233.469 789.594 233.469 791 c 3098 233.469 792.405 233.975 793.545 234.6 793.545 c 3099 235.225 793.545 235.732 792.405 235.732 791 c 3100 235.732 789.594 235.225 788.454 234.6 788.454 c 3101 f 3102 234.6 791 m 3103 F 3104 189 690.399 m 3105 183.4 680.399 208.2 686.399 V 3106 222.2 687.599 224.6 689.999 V 3107 225.8 689.199 234.166 686.266 237 685.599 c 3108 243.8 683.999 252.2 694 y 3109 256.8 704.5 259.6 704.5 v 3110 262.4 704.5 259.2 702.9 y 3111 252.6 692.799 253 691.199 V 3112 247.8 671.199 231.8 670.399 V 3113 215.65 669.449 217 663.599 V 3114 225.8 665.999 228.2 663.599 V 3115 239 663.999 231 657.599 V 3116 224.2 645.999 l 3117 224.34 642.081 214.2 645.599 v 3118 204.4 648.999 194.1 661.899 y 3119 178.15 676.449 189 690.399 V 3120 f 3121 0.1 0.4 0.4 0 k 3122 187.8 686.399 m 3123 185.8 676.799 222.6 687.199 V 3124 227 687.199 229.4 686.399 v 3125 231.8 685.599 243.8 682.799 245.8 683.999 C 3126 238.6 670.399 227 671.999 V 3127 213.8 670.399 214.2 665.599 V 3128 218.2 658.399 223 655.999 V 3129 225.8 653.599 225.4 650.399 v 3130 225 647.199 222.2 645.599 220.2 644.799 c 3131 218.2 643.999 215 647.199 213.4 647.199 c 3132 211.8 647.199 203.4 653.599 199 658.399 c 3133 194.6 663.199 186.2 675.199 186.6 677.999 c 3134 187 680.799 187.8 686.399 Y 3135 f 3136 0.1 0.4 0.4 0.2 k 3137 191 668.949 m 3138 193.6 664.999 196.8 660.799 199 658.399 c 3139 203.4 653.599 211.8 647.199 213.4 647.199 c 3140 215 647.199 218.2 643.999 220.2 644.799 c 3141 222.2 645.599 225 647.199 225.4 650.399 c 3142 225.8 653.599 223 655.999 Y 3143 219.934 657.532 217.194 661.024 215.615 663.347 C 3144 215.8 660.799 210.6 661.599 v 3145 205.4 662.399 200.2 665.199 198.6 668.399 c 3146 197 671.599 194.6 673.999 196.2 670.399 c 3147 197.8 666.799 200.2 663.199 201.8 662.799 c 3148 203.4 662.399 203 661.199 200.6 661.599 c 3149 198.2 661.999 195.4 662.399 191 667.599 c 3150 F 3151 0.1 0.55 0.85 0.3 k 3152 188.4 689.999 m 3153 190.2 703.6 191.4 707.6 V 3154 190.6 714.4 193 718.6 v 3155 195.4 722.8 197.4 729 200.4 734.4 c 3156 203.4 739.8 203.6 743.8 207.6 745.4 c 3157 211.6 747 217.6 755.6 220.4 756.6 c 3158 223.2 757.6 223 756.8 y 3159 229.8 771.6 243.4 767.6 V 3160 227.2 770.4 243 779.8 V 3161 238.2 778.7 241.5 785.7 v 3162 243.701 790.368 243.2 783.6 232.2 771.8 C 3163 227.2 763.2 222 760.2 v 3164 216.8 757.2 204.8 750.2 203.6 746.4 c 3165 202.4 742.6 199.2 736.8 197.2 735.2 c 3166 195.2 733.6 192.4 729.4 192 726 C 3167 190.8 722 189.4 720.8 v 3168 188 719.6 187.8 716.4 187.8 714.4 c 3169 187.8 712.4 185.8 709.6 186 707.2 C 3170 186.8 688.199 186.4 686.199 V 3171 188.4 689.999 L 3172 f 3173 1 g 3174 179.8 685.399 m 3175 177.8 686.799 173.4 680.799 V 3176 180.7 647.799 180.7 646.399 V 3177 181.8 648.499 180.5 655.699 v 3178 179.2 662.899 178.3 675.599 y 3179 179.8 685.399 l 3180 f 3181 0.1 0.55 0.85 0.3 k 3182 201.4 746 m 3183 183.8 742.8 184.2 713.6 V 3184 183.4 688.799 l 3185 182.2 714.4 181 716 v 3186 179.8 717.6 183.8 728.8 180.6 722.8 C 3187 166.6 708.8 174.6 687.599 V 3188 176.1 684.299 173.1 688.899 V 3189 168.5 701.5 169.6 707.9 V 3190 169.8 710.1 171.7 712.9 V 3191 180.3 724.6 183 726.9 V 3192 184.8 741.3 200.2 746.5 V 3193 205.9 748.8 201.4 746 V 3194 f 3195 0 g 3196 340.8 812.2 m 3197 341.46 812.554 341.451 813.524 342.031 813.697 c 3198 343.18 814.041 343.344 815.108 343.862 815.892 c 3199 344.735 817.211 344.928 818.744 345.51 820.235 c 3200 345.782 820.935 345.809 821.89 345.496 822.55 c 3201 344.322 825.031 343.62 827.48 342.178 829.906 c 3202 341.91 830.356 341.648 831.15 341.447 831.748 c 3203 340.984 833.132 339.727 834.123 338.867 835.443 c 3204 338.579 835.884 339.104 836.809 338.388 836.893 c 3205 337.491 836.998 336.042 837.578 335.809 836.552 c 3206 335.221 833.965 336.232 831.442 337.2 829 C 3207 336.418 828.308 336.752 827.387 336.904 826.62 c 3208 337.614 823.014 336.416 819.662 335.655 816.188 c 3209 335.632 816.084 335.974 815.886 335.946 815.824 c 3210 334.724 813.138 333.272 810.693 331.453 808.312 c 3211 330.695 807.32 329.823 806.404 329.326 805.341 c 3212 328.958 804.554 328.55 803.588 328.8 802.6 C 3213 325.365 799.82 323.115 795.975 320.504 792.129 c 3214 320.042 791.449 320.333 790.24 320.884 789.971 c 3215 321.697 789.573 322.653 790.597 323.123 791.443 c 3216 323.512 792.141 323.865 792.791 324.356 793.434 c 3217 324.489 793.609 324.31 794.028 324.445 794.149 c 3218 327.078 796.496 328.747 799.432 331.2 801.8 C 3219 333.15 802.129 334.687 803.127 336.435 804.14 c 3220 336.743 804.319 337.267 804.07 337.557 804.265 c 3221 339.31 805.442 339.308 807.478 339.414 809.388 c 3222 339.464 810.272 339.66 811.589 340.8 812.2 c 3223 f 3224 331.959 816.666 m 3225 332.083 816.743 331.928 817.166 332.037 817.382 c 3226 332.199 817.706 332.602 817.894 332.764 818.218 c 3227 332.873 818.434 332.71 818.814 332.846 818.956 c 3228 335.179 821.403 335.436 824.427 334.4 827.4 C 3229 335.424 828.02 335.485 829.282 335.06 830.129 c 3230 334.207 831.829 334.014 833.755 333.039 835.298 c 3231 332.237 836.567 330.659 837.811 329.288 836.508 c 3232 328.867 836.108 328.546 835.321 328.824 834.609 c 3233 328.888 834.446 329.173 834.3 329.146 834.218 c 3234 329.039 833.894 328.493 833.67 328.487 833.398 c 3235 328.457 831.902 327.503 830.391 328.133 829.062 c 3236 328.905 827.433 329.724 825.576 330.4 823.8 C 3237 329.166 821.684 330.199 819.235 328.446 817.358 c 3238 328.31 817.212 328.319 816.826 328.441 816.624 c 3239 328.733 816.138 329.139 815.732 329.625 815.44 c 3240 329.827 815.319 330.175 815.317 330.375 815.441 c 3241 330.953 815.803 331.351 816.29 331.959 816.666 c 3242 f 3243 394.771 826.977 m 3244 396.16 825.185 396.45 822.39 394.401 821 C 3245 394.951 817.691 398.302 819.67 400.401 820.2 C 3246 400.292 820.588 400.519 820.932 400.802 820.937 c 3247 401.859 820.952 402.539 821.984 403.601 821.8 C 3248 404.035 823.357 405.673 824.059 406.317 825.439 c 3249 408.043 829.134 407.452 833.407 404.868 836.653 c 3250 404.666 836.907 404.883 837.424 404.759 837.786 c 3251 404.003 839.997 401.935 840.312 400.001 841 C 3252 398.824 844.875 398.163 848.906 396.401 852.6 C 3253 394.787 852.85 394.089 854.589 392.752 855.309 c 3254 391.419 856.028 390.851 854.449 390.892 853.403 c 3255 390.899 853.198 391.351 852.974 391.181 852.609 c 3256 391.105 852.445 390.845 852.334 390.845 852.2 c 3257 390.846 852.065 391.067 851.934 391.201 851.8 C 3258 390.283 850.98 388.86 850.503 388.565 849.358 c 3259 387.611 845.648 390.184 842.523 391.852 839.322 c 3260 392.443 838.187 391.707 836.916 390.947 835.708 c 3261 390.509 835.013 390.617 833.886 390.893 833.03 c 3262 391.645 830.699 393.236 828.96 394.771 826.977 c 3263 f 3264 357.611 808.591 m 3265 356.124 806.74 352.712 804.171 355.629 802.243 c 3266 355.823 802.114 356.193 802.11 356.366 802.244 c 3267 358.387 803.809 360.39 804.712 362.826 805.294 c 3268 362.95 805.323 363.224 804.856 363.593 805.017 c 3269 365.206 805.72 367.216 805.662 368.4 807 C 3270 372.167 806.776 375.732 807.892 379.123 809.2 c 3271 380.284 809.648 381.554 810.207 382.755 810.709 c 3272 384.131 811.285 385.335 812.213 386.447 813.354 c 3273 386.58 813.49 386.934 813.4 387.201 813.4 C 3274 387.161 814.263 388.123 814.39 388.37 815.012 c 3275 388.462 815.244 388.312 815.64 388.445 815.742 c 3276 390.583 817.372 391.503 819.39 390.334 821.767 c 3277 390.049 822.345 389.8 822.963 389.234 823.439 c 3278 388.149 824.35 387.047 823.496 386 823.8 C 3279 385.841 823.172 385.112 823.344 384.726 823.146 c 3280 383.867 822.707 382.534 823.292 381.675 822.854 c 3281 380.313 822.159 379.072 821.99 377.65 821.613 c 3282 377.338 821.531 376.56 821.627 376.4 821 C 3283 376.266 821.134 376.118 821.368 376.012 821.346 c 3284 374.104 820.95 372.844 820.736 371.543 819.044 c 3285 371.44 818.911 370.998 819.09 370.839 818.955 c 3286 369.882 818.147 369.477 816.913 368.376 816.241 c 3287 368.175 816.118 367.823 816.286 367.629 816.157 c 3288 366.983 815.726 366.616 815.085 365.974 814.638 c 3289 365.645 814.409 365.245 814.734 365.277 814.99 c 3290 365.522 816.937 366.175 818.724 365.6 820.6 C 3291 367.677 823.12 370.194 825.069 372 827.8 C 3292 372.015 829.966 372.707 832.112 372.594 834.189 c 3293 372.584 834.382 372.296 835.115 372.17 835.462 c 3294 371.858 836.316 372.764 837.382 371.92 838.106 c 3295 370.516 839.309 369.224 838.433 368.4 837 C 3296 366.562 836.61 364.496 835.917 362.918 837.151 c 3297 361.911 837.938 361.333 838.844 360.534 839.9 c 3298 359.549 841.202 359.884 842.638 359.954 844.202 c 3299 359.96 844.33 359.645 844.466 359.645 844.6 c 3300 359.646 844.735 359.866 844.866 360 845 C 3301 359.294 845.626 359.019 846.684 358 847 C 3302 358.305 848.092 357.629 848.976 356.758 849.278 c 3303 354.763 849.969 353.086 848.057 351.194 847.984 c 3304 350.68 847.965 350.213 849.003 349.564 849.328 c 3305 349.132 849.544 348.428 849.577 348.066 849.311 c 3306 347.378 848.807 346.789 848.693 346.031 848.488 c 3307 344.414 848.052 343.136 846.958 341.656 846.103 c 3308 340.171 845.246 339.216 843.809 338.136 842.489 c 3309 337.195 841.337 337.059 838.923 338.479 838.423 c 3310 340.322 837.773 341.626 840.476 343.592 840.15 c 3311 343.904 840.099 344.11 839.788 344 839.4 C 3312 344.389 839.291 344.607 839.52 344.8 839.8 C 3313 345.658 838.781 346.822 838.444 347.76 837.571 c 3314 348.73 836.667 350.476 837.085 351.491 836.088 c 3315 353.02 834.586 352.461 831.905 354.4 830.6 C 3316 353.814 829.287 353.207 828.01 352.872 826.583 c 3317 352.59 825.377 353.584 824.18 354.795 824.271 c 3318 356.053 824.365 356.315 825.124 356.8 826.2 C 3319 357.067 825.933 357.536 825.636 357.495 825.42 c 3320 357.038 823.033 356.011 821.04 355.553 818.609 c 3321 355.494 818.292 355.189 818.09 354.8 818.2 C 3322 354.332 814.051 350.28 811.657 347.735 808.492 c 3323 347.332 807.99 347.328 806.741 347.737 806.338 c 3324 349.14 804.951 351.1 806.497 352.8 807 C 3325 353.013 808.206 353.872 809.148 355.204 809.092 c 3326 355.46 809.082 355.695 809.624 356.019 809.754 c 3327 356.367 809.892 356.869 809.668 357.155 809.866 c 3328 358.884 811.061 360.292 812.167 362.03 813.356 c 3329 362.222 813.487 362.566 813.328 362.782 813.436 c 3330 363.107 813.598 363.294 813.985 363.617 814.17 c 3331 363.965 814.37 364.207 814.08 364.4 813.8 C 3332 363.754 813.451 363.75 812.494 363.168 812.292 c 3333 362.393 812.024 361.832 811.511 361.158 811.064 c 3334 360.866 810.871 360.207 811.119 360.103 810.94 c 3335 359.505 809.912 358.321 809.474 357.611 808.591 c 3336 f 3337 302.2 858 m 3338 292.962 860.872 281.8 835.2 V 3339 279.4 830 277 828 v 3340 274.6 826 263.4 822.4 261.4 818.4 C 3341 251 802.4 L 3342 265.8 818.4 269 820.8 V 3343 277 829.2 273.8 822.4 V 3344 259.8 811.6 261 802.4 V 3345 255.4 788 254.6 786 V 3346 270.6 818 273 819.2 v 3347 275.4 820.4 276.6 820.4 275.4 816.8 c 3348 274.2 813.2 273.8 796.8 271 794.8 C 3349 279 815.2 278.2 818.4 V 3350 281.4 822 283.8 816.8 V 3351 282.6 800.8 l 3352 287 788.8 l 3353 284.6 800 286.2 815.6 V 3354 284.2 826 288.2 820.4 v 3355 292.2 814.8 301.8 808.8 301.8 804 C 3356 296.6 821.6 287.4 826.4 V 3357 283.4 820.4 l 3358 282.2 822.4 l 3359 278.6 823.2 283 830 v 3360 287.4 836.8 287 837.6 y 3361 293.4 830.4 295 830.4 V 3362 308.2 838 309.4 813.6 V 3363 316.2 828 307 834.8 V 3364 292.2 836.8 293.4 842 V 3365 300.6 854.4 L 3366 304.2 859.6 302.6 856.8 y 3367 F 3368 282.2 841.6 m 3369 269.4 841.6 266.2 836.4 V 3370 259 826.8 l 3371 276.2 836.8 280.2 838 v 3372 284.2 839.2 282.2 841.6 Y 3373 f 3374 242.2 835.2 m 3375 240.2 834 239.8 831.2 v 3376 239.4 828.4 237 828 237.8 825.2 c 3377 238.6 822.4 240.6 820 240.6 824 c 3378 240.6 828 242.2 830 243 831.2 c 3379 243.8 832.4 245.4 836.8 242.2 835.2 c 3380 f 3381 233.4 774 m 3382 225 778 221.8 781.6 v 3383 218.6 785.2 219.052 780.034 214.2 780.4 c 3384 208.353 780.841 209.4 796.8 y 3385 205.4 789.2 l 3386 204.2 774.8 212.2 777.2 v 3387 216.107 778.372 217.4 776.8 215.8 776 c 3388 214.2 775.2 221.4 774.8 218.6 773.2 c 3389 215.8 771.6 230.2 776.8 227.8 766.4 C 3390 233.4 774 L 3391 f 3392 220.8 759.6 m 3393 205.4 755.2 201.8 764.8 V 3394 197 762.4 199.2 759.4 v 3395 201.4 756.4 202.6 756 y 3396 208 754.8 207.4 754 v 3397 206.8 753.2 204.4 749.8 y 3398 214.6 755.8 220.8 759.6 v 3399 f 3400 1 g 3401 449.201 681.399 m 3402 448.774 679.265 447.103 678.464 445.201 677.799 C 3403 443.284 678.757 440.686 681.863 438.801 679.799 C 3404 438.327 680.279 437.548 680.339 437.204 681.001 c 3405 436.739 681.899 437.011 682.945 436.669 683.743 c 3406 436.124 685.015 435.415 686.381 435.601 687.799 C 3407 437.407 688.511 438.002 690.417 437.528 692.18 c 3408 437.459 692.437 437.03 692.634 437.23 692.983 c 3409 437.416 693.306 437.734 693.533 438.001 693.8 C 3410 437.866 693.665 437.721 693.432 437.61 693.452 c 3411 437 693.558 437.124 694.195 437.254 694.582 c 3412 437.839 696.328 439.853 696.592 441.201 695.4 C 3413 441.457 695.965 441.966 695.771 442.401 695.8 C 3414 442.351 696.379 442.759 696.906 442.957 697.326 c 3415 443.475 698.424 445.104 697.318 445.901 697.93 c 3416 446.977 698.755 448.04 699.454 449.118 698.851 c 3417 450.927 697.838 452.636 696.626 453.835 694.885 c 3418 454.41 694.051 454.65 692.77 454.592 691.812 c 3419 454.554 691.165 453.173 691.517 452.83 690.588 c 3420 452.185 688.84 454.016 688.321 454.772 686.983 c 3421 454.97 686.634 454.706 686.33 454.391 686.232 c 3422 453.98 686.104 453.196 686.293 453.334 685.84 c 3423 454.306 682.647 451.55 681.969 449.201 681.399 C 3424 f 3425 439.6 661.799 m 3426 439.593 663.537 437.992 665.293 439.201 666.999 C 3427 439.336 666.865 439.467 666.644 439.601 666.644 c 3428 439.736 666.644 439.867 666.865 440.001 666.999 C 3429 441.496 664.783 445.148 663.855 445.006 661.009 c 3430 444.984 660.562 443.897 659.644 444.801 658.999 C 3431 442.988 657.651 442.933 655.281 442.001 653.399 C 3432 440.763 653.685 439.551 654.048 438.401 654.599 C 3433 438.753 656.085 438.636 657.769 439.456 659.089 c 3434 439.89 659.787 439.603 660.866 439.6 661.799 c 3435 f 3436 0.8 g 3437 273.4 670.799 m 3438 256.542 660.663 270.6 675.999 v 3439 279.4 685.599 289.4 691.199 y 3440 299.8 695.6 303.4 696.8 v 3441 307 698 322.2 703.2 325.4 703.6 c 3442 328.6 704 338.2 708 345 704 c 3443 351.8 700 359.8 695.6 y 3444 343.4 704 339.8 701.6 v 3445 336.2 699.2 329 699.6 323 696.4 C 3446 308.2 691.999 305 689.999 v 3447 301.8 687.999 291.4 676.399 289.8 677.199 c 3448 288.2 677.999 290.2 678.399 291.4 681.199 c 3449 292.6 683.999 290.6 685.599 282.6 679.199 c 3450 274.6 672.799 273.4 670.799 Y 3451 f 3452 0 g 3453 280.805 676.766 m 3454 282.215 689.806 290.693 688.141 V 3455 298.919 692.311 301.641 694.279 V 3456 309.78 695.981 311.09 696.598 v 3457 329.569 705.298 344.288 700.779 344.835 701.899 c 3458 345.381 703.018 365.006 695.901 368.615 691.815 c 3459 369.006 691.372 358.384 697.412 348.686 699.303 c 3460 340.413 700.917 318.811 699.056 307.905 693.52 c 3461 304.932 692.011 295.987 686.227 293.456 686.338 c 3462 290.925 686.45 280.805 676.766 Y 3463 f 3464 0.8 g 3465 277 651.199 m 3466 261.8 653.599 278.6 655.199 V 3467 296.6 657.199 300.6 662.399 V 3468 314.2 671.599 317 671.999 v 3469 319.8 672.399 349.8 679.599 350.2 681.999 c 3470 350.6 684.399 356.2 684.399 357.8 683.599 c 3471 359.4 682.799 358.6 681.599 355.8 680.799 c 3472 353 679.999 321.8 663.599 315.4 662.399 c 3473 309 661.199 297.4 653.599 292.6 652.399 c 3474 287.8 651.199 277 651.199 Y 3475 f 3476 0 g 3477 296.52 658.597 m 3478 287.938 659.426 296.539 660.245 V 3479 305.355 663.669 307.403 666.332 V 3480 314.367 671.043 315.8 671.247 v 3481 317.234 671.452 331.194 675.139 331.399 676.367 c 3482 331.604 677.596 365.67 690.177 370.09 686.987 c 3483 373.001 684.886 363.1 686.563 353.466 682.153 c 3484 352.111 681.533 318.258 666.946 314.981 666.332 c 3485 311.704 665.717 305.765 661.826 303.307 661.212 c 3486 300.85 660.597 296.52 658.597 Y 3487 f 3488 288.6 656.399 m 3489 293.8 656.799 292.6 655.199 v 3490 291.4 653.599 289 654.399 y 3491 288.6 656.399 l 3492 f 3493 281.4 654.799 m 3494 286.6 655.199 285.4 653.599 v 3495 284.2 651.999 281.8 652.799 y 3496 281.4 654.799 l 3497 f 3498 271 653.199 m 3499 276.2 653.599 275 651.999 v 3500 273.8 650.399 271.4 651.199 y 3501 271 653.199 l 3502 f 3503 263.4 652.399 m 3504 268.6 652.799 267.4 651.199 v 3505 266.2 649.599 263.8 650.399 y 3506 263.4 652.399 l 3507 f 3508 301.8 691.999 m 3509 306.2 691.999 305 690.399 v 3510 303.8 688.799 300.6 689.199 y 3511 301.8 691.999 l 3512 f 3513 291.8 686.399 m 3514 298.306 688.54 295.8 685.199 v 3515 294.6 683.599 292.2 684.399 y 3516 291.8 686.399 l 3517 f 3518 280.6 681.599 m 3519 285.8 681.999 284.6 680.399 v 3520 283.4 678.799 281 679.599 y 3521 280.6 681.599 l 3522 f 3523 273 675.599 m 3524 278.2 675.999 277 674.399 v 3525 275.8 672.799 273.4 673.599 y 3526 273 675.599 l 3527 f 3528 266.2 670.799 m 3529 271.4 671.199 270.2 669.599 v 3530 269 667.999 266.6 668.799 y 3531 266.2 670.799 l 3532 f 3533 305.282 664.402 m 3534 312.203 664.934 310.606 662.805 v 3535 309.009 660.675 305.814 661.74 y 3536 305.282 664.402 l 3537 f 3538 315.682 669.202 m 3539 322.603 669.734 321.006 667.605 v 3540 319.409 665.475 316.214 666.54 y 3541 315.682 669.202 l 3542 f 3543 326.482 673.602 m 3544 333.403 674.134 331.806 672.005 v 3545 330.209 669.875 327.014 670.94 y 3546 326.482 673.602 l 3547 f 3548 336.882 678.402 m 3549 343.803 678.934 342.206 676.805 v 3550 340.609 674.675 337.414 675.74 y 3551 336.882 678.402 l 3552 f 3553 309.282 696.402 m 3554 316.203 696.934 314.606 694.805 v 3555 313.009 692.675 309.014 692.94 y 3556 309.282 696.402 l 3557 f 3558 319.282 699.602 m 3559 326.203 700.134 324.606 698.005 v 3560 323.009 695.875 318.614 696.14 y 3561 319.282 699.602 l 3562 f 3563 296.6 659.599 m 3564 301.8 659.999 300.6 658.399 v 3565 299.4 656.799 297 657.599 y 3566 296.6 659.599 l 3567 f 3568 0.1 0.55 0.85 0.3 k 3569 223.4 758.8 m 3570 219 750 218.6 746.8 V 3571 219.4 755.6 220.6 757.6 v 3572 221.8 759.6 223.4 758.8 y 3573 f 3574 205 744.8 m 3575 201.8 730.4 202.2 727.6 V 3576 201 739.2 201.4 740.4 v 3577 201.8 741.6 205 744.8 y 3578 f 3579 0.8 g 3580 225.8 819.4 m 3581 225.6 816.2 l 3582 223.4 816 l 3583 237.6 803.4 238.2 795.8 V 3584 239 804 225.8 819.4 V 3585 f 3586 0 g 3587 229.784 818.135 m 3588 229.353 818.551 229.572 819.296 229.164 819.556 c 3589 228.355 820.072 230.462 820.129 230.234 820.845 c 3590 229.851 822.051 230.038 822.072 229.916 823.348 c 3591 229.859 823.946 230.447 825.486 230.832 825.926 c 3592 232.278 827.578 230.954 830.51 232.594 832.061 c 3593 232.898 832.35 233.274 832.902 233.559 833.32 c 3594 234.218 834.283 235.402 834.771 236.352 835.599 c 3595 236.67 835.875 236.469 836.702 237.038 836.61 c 3596 237.752 836.495 238.993 836.625 238.948 835.784 c 3597 238.835 833.664 237.506 831.944 236.226 830.276 C 3598 236.677 829.572 236.219 828.937 235.935 828.38 c 3599 234.6 825.76 234.789 822.919 234.615 820.079 c 3600 234.61 819.994 234.303 819.916 234.311 819.863 c 3601 234.664 817.528 235.248 815.329 236.127 813.1 c 3602 236.493 812.17 236.964 811.275 237.114 810.348 c 3603 237.225 809.662 237.328 808.829 236.92 808.124 C 3604 238.955 805.234 237.646 802.583 238.815 799.052 c 3605 239.022 798.427 240.714 796.513 240.251 796.674 c 3606 237.738 797.545 237.626 797.943 237.449 798.696 c 3607 237.303 799.319 236.973 800.696 236.736 801.298 c 3608 236.672 801.462 236.501 803.346 236.423 803.468 c 3609 234.91 805.85 236.268 805.674 234.898 808.032 C 3610 233.47 808.712 232.504 809.816 231.381 810.978 c 3611 231.183 811.182 232.326 811.906 232.145 812.119 c 3612 231.053 813.408 229.9 814.175 230.236 815.668 c 3613 230.391 816.358 230.528 817.415 229.784 818.135 c 3614 f 3615 226.2 816.4 m 3616 226.6 809.6 229 808 v 3617 231.4 806.4 230.2 807.2 227 808.4 c 3618 223.8 809.6 225 810.4 y 3619 222.2 810 224.6 808 v 3620 227 806 230.6 803.6 229 803.6 c 3621 227.4 803.6 219.8 807.6 219.8 810.4 c 3622 219.8 813.2 218.8 817.3 y 3623 219.9 818.1 224.7 818 V 3624 226.1 817.3 226.2 816.4 V 3625 f 3626 1 g 3627 1 J 0.1 w 3628 225.4 797.8 m 3629 216.88 800.591 198.4 797.2 V 3630 207.431 799.278 226.2 797 v 3631 236.5 795.75 225.4 797.8 Y 3632 b 3633 227.498 797.871 m 3634 219.252 801.389 200.547 799.608 V 3635 209.725 800.897 228.226 797.005 v 3636 238.38 794.869 227.498 797.871 Y 3637 b 3638 229.286 797.778 m 3639 221.324 801.899 202.539 801.514 V 3640 211.787 802.118 229.948 796.86 v 3641 239.914 793.975 229.286 797.778 Y 3642 b 3643 230.556 797.555 m 3644 223.732 801.862 206.858 802.96 V 3645 215.197 802.79 231.078 796.681 v 3646 239.794 793.328 230.556 797.555 Y 3647 b 3648 345.84 787.039 m 3649 344.91 786.395 345.124 787.576 v 3650 345.339 788.757 373.547 801.927 377.161 801.677 C 3651 346.913 788.471 345.84 787.039 V 3652 b 3653 342.446 786.4 m 3654 341.57 785.685 341.691 786.879 v 3655 341.812 788.073 368.899 803.418 372.521 803.452 C 3656 343.404 787.911 342.446 786.4 V 3657 b 3658 339.16 785.025 m 3659 338.332 784.253 338.374 785.453 v 3660 338.416 786.652 358.233 802.149 368.045 804.023 C 3661 350.015 795.896 339.16 785.025 V 3662 b 3663 336.284 783.162 m 3664 335.539 782.468 335.577 783.547 v 3665 335.615 784.627 353.449 798.574 362.28 800.26 C 3666 346.054 792.946 336.284 783.162 V 3667 b 3668 0.8 g 3669 0 J 1 w 3670 304.6 635.199 m 3671 289.4 637.599 306.2 639.199 V 3672 324.2 641.199 328.2 646.399 V 3673 341.8 655.599 344.6 655.999 v 3674 347.4 656.399 363.8 659.999 364.2 662.399 c 3675 364.6 664.799 370.6 667.199 372.2 666.399 c 3676 373.8 665.599 373.8 656.399 371 655.599 c 3677 368.2 654.799 349.4 647.599 343 646.399 c 3678 336.6 645.199 325 637.599 320.2 636.399 c 3679 315.4 635.199 304.6 635.199 Y 3680 f 3681 0 g 3682 377.6 672.599 m 3683 374.6 670.999 373.4 668.399 V 3684 367 657.799 352.8 654.599 V 3685 329.8 645.599 322 643.599 V 3686 308.6 638.599 301.2 639.399 V 3687 294.2 639.199 300.4 637.599 V 3688 320.6 639.599 324 641.399 V 3689 339.6 646.599 342.6 649.199 v 3690 345.6 651.799 363.8 656.799 366 658.799 c 3691 368.2 660.799 378 669.199 377.6 672.599 C 3692 f 3693 318.882 641.089 m 3694 324.111 641.315 322.958 639.766 v 3695 321.805 638.216 319.357 639.09 y 3696 318.882 641.089 l 3697 f 3698 311.68 639.737 m 3699 316.908 639.963 315.756 638.414 v 3700 314.603 636.864 312.155 637.737 y 3701 311.68 639.737 l 3702 f 3703 301.251 638.489 m 3704 306.48 638.716 305.327 637.166 v 3705 304.174 635.617 301.726 636.49 y 3706 301.251 638.489 l 3707 f 3708 293.617 637.945 m 3709 298.846 638.171 297.693 636.622 v 3710 296.54 635.072 294.092 635.946 y 3711 293.617 637.945 l 3712 f 3713 335.415 648.487 m 3714 342.375 648.788 340.84 646.726 v 3715 339.306 644.664 336.047 645.826 y 3716 335.415 648.487 l 3717 f 3718 345.73 652.912 m 3719 351.689 656.213 351.155 651.151 v 3720 350.885 648.595 346.362 650.251 y 3721 345.73 652.912 l 3722 f 3723 354.862 655.726 m 3724 362.021 659.427 360.287 653.965 v 3725 359.509 651.515 355.493 653.065 y 3726 354.862 655.726 l 3727 f 3728 364.376 660.551 m 3729 368.735 665.452 369.801 658.79 v 3730 370.207 656.252 365.008 657.89 y 3731 364.376 660.551 l 3732 f 3733 326.834 644.003 m 3734 332.062 644.23 330.91 642.68 v 3735 329.757 641.131 327.308 642.004 y 3736 326.834 644.003 l 3737 f 3738 1 g 3739 1 J 0.1 w 3740 362.434 765.397 m 3741 361.708 764.732 361.707 765.803 v 3742 361.707 766.873 379.191 780.137 388.034 781.521 C 3743 371.935 774.792 362.434 765.397 V 3744 b 3745 0 g 3746 0 J 1 w 3747 365.4 701.6 m 3748 387.401 679.199 396.601 675.599 V 3749 405.801 664.399 401.801 638.399 V 3750 398.601 630.799 395.401 651.599 V 3751 398.601 676.799 387.401 660.799 V 3752 379 670.699 385.4 670.399 V 3753 388.601 668.399 389.001 669.999 v 3754 389.401 671.599 381.4 685.199 364.2 699.6 c 3755 347 714 365.4 701.6 Y 3756 f 3757 1 g 3758 1 J 0.1 w 3759 307 662.799 m 3760 306.8 664.599 308.6 663.799 v 3761 310.4 662.999 404.601 656.799 436.201 632.799 C 3762 391.001 655.999 307 662.799 V 3763 b 3764 317.4 667.199 m 3765 317.2 668.999 319 668.199 v 3766 320.8 667.399 457.401 668.399 481.001 635.999 C 3767 459.001 661.199 317.4 667.199 V 3768 b 3769 329 671.199 m 3770 328.8 672.999 330.6 672.199 v 3771 332.4 671.399 505.801 684.399 529.401 651.999 C 3772 519.801 677.599 329 671.199 V 3773 b 3774 339 675.999 m 3775 338.8 677.799 340.6 676.999 v 3776 342.4 676.199 464.601 714.8 488.201 682.399 C 3777 474.801 707 339 675.999 V 3778 b 3779 281 653.199 m 3780 280.8 654.999 282.6 654.199 v 3781 284.4 653.399 302.2 651.199 304.2 612.399 C 3782 297 654.399 281 653.199 V 3783 b 3784 272.2 651.599 m 3785 272 653.399 273.8 652.599 v 3786 275.6 651.799 289.8 656.399 287 617.599 C 3787 288.2 652.799 272.2 651.599 V 3788 b 3789 264.2 651.199 m 3790 264 652.999 265.8 652.199 v 3791 267.6 651.399 283 650.799 270.6 628.399 C 3792 280.2 652.399 264.2 651.199 V 3793 b 3794 311.526 695.535 m 3795 311.082 693.536 312.631 694.753 v 3796 328.699 707.378 361.141 766.28 416.826 771.914 C 3797 378.518 784.024 311.526 695.535 V 3798 b 3799 322.726 697.335 m 3800 321.363 698.528 323.231 699.153 v 3801 325.099 699.778 437.541 772.28 476.826 764.314 C 3802 449.719 771.824 322.726 697.335 V 3803 b 3804 301.885 691.233 m 3805 301.376 689.634 303.087 690.61 v 3806 312.062 695.73 315.677 752.941 359.254 754.196 C 3807 326.843 768.91 301.885 691.233 V 3808 b 3809 281.962 680.207 m 3810 280.885 678.921 282.838 679.175 v 3811 293.084 680.507 314.489 721.778 358.928 716.699 C 3812 326.962 731.045 281.962 680.207 V 3813 b 3814 293.2 686.333 m 3815 292.389 684.864 294.258 685.489 v 3816 304.057 688.763 317.141 733.375 361.729 736.922 C 3817 327.603 744.865 293.2 686.333 V 3818 b 3819 274.922 675.088 m 3820 274.049 674.046 275.631 674.252 v 3821 283.93 675.331 301.268 708.76 337.264 704.646 C 3822 311.371 716.266 274.922 675.088 V 3823 b 3824 267.323 669.179 m 3825 266.318 668.134 267.909 668.252 v 3826 272.077 668.561 302.715 701.64 321.183 686.138 C 3827 309.168 704.861 267.323 669.179 V 3828 b 3829 336.855 701.102 m 3830 335.654 702.457 337.586 702.842 v 3831 339.518 703.226 460.221 760.939 498.184 748.073 C 3832 472.243 758.947 336.855 701.102 V 3833 b 3834 303.4 636.799 m 3835 303.2 638.599 305 637.799 v 3836 306.8 636.999 322.2 636.399 309.8 613.999 C 3837 319.4 637.999 303.4 636.799 V 3838 b 3839 313.8 638.399 m 3840 313.6 640.199 315.4 639.399 v 3841 317.2 638.599 335 636.399 337 597.599 C 3842 329.8 639.599 313.8 638.399 V 3843 b 3844 320.6 639.999 m 3845 320.4 641.799 322.2 640.999 v 3846 324 640.199 348.6 636.799 372.2 604.399 C 3847 336.6 641.199 320.6 639.999 V 3848 b 3849 328.225 642.028 m 3850 327.788 643.786 329.678 643.232 v 3851 331.568 642.678 352.002 644.577 390.099 610.401 C 3852 343.924 645.344 328.225 642.028 V 3853 b 3854 338.625 646.428 m 3855 338.188 648.186 340.078 647.632 v 3856 341.968 647.078 376.802 642.577 428.499 607.601 C 3857 354.324 649.744 338.625 646.428 V 3858 b 3859 298.2 657.999 m 3860 298 659.799 299.8 658.999 v 3861 301.6 658.199 355 655.599 385.4 628.799 C 3862 350.499 653.574 298.2 657.999 V 3863 b 3864 288.2 653.999 m 3865 288 655.799 289.8 654.999 v 3866 291.6 654.199 316.2 650.799 339.8 618.399 C 3867 304.2 655.199 288.2 653.999 V 3868 b 3869 349.503 651.038 m 3870 348.938 652.759 350.864 652.345 v 3871 352.79 651.932 387.86 649.996 441.981 618.902 C 3872 364.317 653.296 349.503 651.038 V 3873 b 3874 357.903 653.438 m 3875 357.338 655.159 359.264 654.745 v 3876 361.19 654.332 396.26 652.396 450.381 621.302 C 3877 373.317 656.096 357.903 653.438 V 3878 b 3879 367.503 658.438 m 3880 366.938 660.159 368.864 659.745 v 3881 370.79 659.332 413.86 654.996 503.582 620.702 C 3882 382.917 661.096 367.503 658.438 V 3883 b 3884 0 g 3885 0 J 1 w 3886 256.2 651.599 m 3887 261.4 651.999 260.2 650.399 v 3888 259 648.799 256.6 649.599 y 3889 256.2 651.599 l 3890 f 3891 287 637.599 m 3892 292.2 637.999 291 636.399 v 3893 289.8 634.799 287.4 635.599 y 3894 287 637.599 l 3895 f 3896 278.2 637.999 m 3897 283.4 638.399 282.2 636.799 v 3898 281 635.199 278.6 635.999 y 3899 278.2 637.999 l 3900 f 3901 182.831 649.818 m 3902 187.876 648.495 186.218 647.376 v 3903 184.561 646.256 182.554 647.798 y 3904 182.831 649.818 l 3905 f 3906 184.831 659.418 m 3907 189.876 658.095 188.218 656.976 v 3908 186.561 655.856 184.554 657.398 y 3909 184.831 659.418 l 3910 f 3911 177.631 663.818 m 3912 182.676 662.495 181.018 661.376 v 3913 179.361 660.256 177.354 661.798 y 3914 177.631 663.818 l 3915 f 3916 0.8 g 3917 1 J 0.1 w 3918 257.4 588.799 m 3919 255.8 588.799 251.8 586.799 V 3920 249.8 586.799 238.6 583.199 233 573.199 C 3921 245.4 582.799 257.4 588.799 V 3922 f 3923 345.116 496.153 m 3924 345.257 495.895 345.312 495.475 345.604 495.458 c 3925 346.262 495.418 347.495 495.117 347.37 495.753 c 3926 346.522 500.059 345.648 504.996 341.515 506.803 c 3927 340.876 507.082 339.434 506.669 339.36 505.785 c 3928 339.233 504.261 339.116 502.912 339.425 501.446 c 3929 339.725 500.025 341.883 500.015 342.8 501.399 C 3930 343.736 499.727 344.168 497.884 345.116 496.153 c 3931 f 3932 334.038 491.419 m 3933 334.786 490.006 334.659 488.147 336.074 487.584 c 3934 336.814 487.29 338.664 488.265 338.246 489.339 c 3935 337.444 491.4 337.056 493.639 335.667 495.45 c 3936 335.467 495.712 335.707 496.245 335.547 496.573 c 3937 334.953 497.793 333.808 498.528 332.4 498.199 C 3938 331.285 495.996 332.433 493.867 333.955 492.158 c 3939 334.091 492.006 333.925 491.63 334.038 491.419 c 3940 f 3941 294.436 496.609 m 3942 294.328 496.986 294.29 497.449 294.455 497.77 c 3943 294.986 498.803 295.779 499.925 295.442 500.947 c 3944 295.094 502.003 293.978 501.821 293.328 501.252 c 3945 292.193 500.258 292.144 498.432 291.453 497.073 c 3946 291.257 496.687 291.308 496.114 290.867 495.723 c 3947 290.393 495.302 289.953 493.778 290.049 493.207 c 3948 290.102 492.894 289.919 482.986 290.141 483.249 c 3949 290.76 483.982 293.81 493.716 293.879 494.608 c 3950 293.936 495.339 294.668 495.804 294.436 496.609 c 3951 f 3952 268.798 503.401 m 3953 271.432 505.9 274.222 508.861 273.78 512.573 c 3954 273.664 513.549 271.889 513.022 271.702 512.176 c 3955 270.9 508.551 268.861 505.89 266.293 503.498 c 3956 264.097 501.451 262.235 495.107 262 494.599 C 3957 265.697 499.855 267.954 502.601 268.798 503.401 c 3958 f 3959 255.224 509.365 m 3960 255.747 509.735 255.445 510.226 255.662 510.558 c 3961 256.615 512.016 257.916 513.262 257.934 515 c 3962 257.937 515.277 257.559 515.586 257.224 515.362 c 3963 256.947 515.178 256.605 515.048 256.497 514.918 c 3964 254.467 512.469 253.067 509.798 251.624 506.986 c 3965 251.441 506.629 250.297 502.138 250.61 502.027 c 3966 250.849 501.942 252.569 506.123 252.779 506.237 c 3967 254.042 506.923 254.054 508.538 255.224 509.365 c 3968 f 3969 271.957 489.821 m 3970 272.401 490.69 273.977 491.892 273.864 492.781 c 3971 273.746 493.709 274.214 495.152 273.302 494.464 c 3972 272.045 493.516 268.596 492.167 268.326 486.359 c 3973 268.3 485.788 271.274 488.481 271.957 489.821 c 3974 f 3975 286.4 506.999 m 3976 286.8 507.667 287.508 507.194 287.967 507.457 c 3977 288.615 507.829 289.226 508.387 289.518 509.036 c 3978 290.488 511.185 292.257 513.005 292.4 515.399 C 3979 290.909 516.804 290.23 514.764 289.6 513.799 C 3980 288.277 515.446 287.278 513.572 285.978 513.053 c 3981 285.908 513.025 285.695 513.372 285.62 513.345 c 3982 284.443 512.905 283.763 511.824 282.765 511.043 c 3983 282.594 510.909 282.189 511.089 282.042 510.953 c 3984 281.39 510.35 280.417 510.025 280.137 509.343 c 3985 279.027 506.636 275.887 504.541 274 496.999 C 3986 274.381 496.09 278.512 503.641 278.999 504.339 c 3987 279.835 505.535 279.953 502.678 281.229 503.344 c 3988 281.28 503.371 281.466 503.133 281.6 502.999 C 3989 281.794 503.279 282.012 503.508 282.4 503.399 C 3990 282.4 503.799 282.266 504.355 282.467 504.514 c 3991 283.704 505.491 283.62 506.559 284.4 507.799 C 3992 284.858 507.01 285.919 507.729 286.4 506.999 C 3993 f 3994 346.2 452.599 m 3995 353.6 472.999 349.2 484.199 V 3996 360.6 462.599 356 451.399 V 3997 355.6 461.799 351.6 466.799 V 3998 347.6 453.999 346.2 452.599 V 3999 f 4000 331.4 455.199 m 4001 336.8 463.999 328.8 482.399 V 4002 328 461.999 321.2 450.999 V 4003 335.4 471.199 331.4 455.199 V 4004 f 4005 321.4 457.199 m 4006 321.2 477.199 321.6 480.199 V 4007 317.8 463.599 307.6 453.999 V 4008 322 465.999 321.4 457.199 V 4009 f 4010 311.8 489.199 m 4011 317.8 475.599 307.8 457.199 V 4012 314.2 469.399 309.4 476.399 V 4013 312 479.799 311.8 489.199 V 4014 f 4015 292.6 457.599 m 4016 291.6 473.199 293.4 475.399 V 4017 293.6 481.799 293.2 482.799 V 4018 297.2 488.999 297.4 481.599 V 4019 298.8 473.799 301.6 469.199 V 4020 305.2 463.799 305 457.399 V 4021 295 487.599 292.6 457.599 V 4022 f 4023 289 485.199 m 4024 282.4 474.399 280.6 455.399 V 4025 279.2 461.599 283 475.999 V 4026 287.2 491.399 289 485.199 V 4027 f 4028 267.2 465.399 m 4029 272.2 470.799 273.6 475.799 V 4030 277.2 491.599 270.8 482.999 V 4031 271 474.999 262.8 467.599 V 4032 267.6 469.999 267.2 465.399 V 4033 f 4034 261.4 470.399 m 4035 264.8 487.799 265.6 488.599 V 4036 267.4 491.999 264.6 488.799 V 4037 255.8 469.599 251.8 462.999 V 4038 259.8 472.199 261.4 470.399 V 4039 f 4040 255.6 486.999 m 4041 267.2 509.399 245.4 483.599 V 4042 256.4 493.399 255.6 486.999 V 4043 f 4044 240.2 501.599 m 4045 245 520.399 247.6 520.199 V 4046 255.8 529.199 249.2 518.599 V 4047 243.2 508.999 243.8 499.199 V 4048 243.2 508.799 240.2 501.599 V 4049 f 4050 570.5 513 m 4051 558.5 523 556 526.5 V 4052 569.5 508 569.5 501 V 4053 572 508.5 570.5 513 V 4054 f 4055 576 535 m 4056 555 550 551.5 557.5 V 4057 578 528 578 523.5 V 4058 578.5 532.5 576 535 V 4059 f 4060 593 689 m 4061 581 697 579.5 695 V 4062 590 688.5 592.5 680 V 4063 591 689 593 689 V 4064 f 4065 601.5 608.5 m 4066 584 620.5 l 4067 603 603.5 603.5 599.5 V 4068 601.5 608.5 L 4069 f 4070 0 g 4071 1 w 4072 210.75 631 m 4073 232.75 626.25 l 4074 S 4075 261 469 m 4076 260.5 472.5 251.5 462 v 4077 S 4078 266.5 464 m 4079 268.5 470.5 262 466 v 4080 S 4081 320.5 455.5 m 4082 322 466.5 310.5 453.5 v 4083 S 4084 4085 showpage 4086 4087 %%Trailer 4088 end 4089 tigersave restore 4090 %%EOF 4091 </pre> 4092 4093 4094 4095 </div> 4096 4097 <div id="tiger1" style="display:none"> 4098 (xtiger) .setGc 4099 0 0 567 739 .gbox 4100 1 0 0 -1 0 739 .transform 4101 /time1 .date (getTime) 0 .call def 4102 </div> 4103 4104 <div id="tiger2" style="display:none"> 4105 /time2 .date (getTime) 0 .call def 4106 (msg) .getElementById (textContent) time2 time1 sub 1000 div put 4107 </div> 4108 4109 <script> 4110 function tiger() {(new Wps).parse($$("wps"), $$("tiger1"), $$("tiger"), $$("tiger2"));} 4111 </script> 4112 <button onclick="javascript:tiger();">Draw</button> the tiger (be patient). 4113 4114 <p> 4115 Is this an interesting JavaScript and canvas benchmark? 4116 </p> 4117 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4118 <caption></caption> 4119 <colgroup><col align="left" /><col align="right" /><col align="right" /><col align="left" /> 4120 </colgroup> 4121 <thead> 4122 <tr><th scope="col">browser</th><th scope="col">WPS time [s]</th><th scope="col">WPS time (no bind) [s]</th><th scope="col">PostCanvas time [s]</th></tr> 4123 </thead> 4124 <tbody> 4125 <tr><td>Chrome</td><td>2.7</td><td>4.1</td><td>1.6</td></tr> 4126 <tr><td>Opera</td><td>17.9</td><td>12.3</td><td>0</td></tr> 4127 <tr><td>Firefox 3.0</td><td>21.0</td><td>19.0</td><td>7.0</td></tr> 4128 <tr><td>Firefox 3.5</td><td>13.0</td><td>9.5</td><td>3.3</td></tr> 4129 <tr><td>Safari</td><td>2.9</td><td>0</td><td>0</td></tr> 4130 </tbody> 4131 </table> 4132 4133 4134 <p> 4135 The above times were on Vaio T7200 Core 2 2GHz 2GB running Ubuntu. 4136 </p> 4137 <p> 4138 <a href="http://www.feiri.de/pcan/">PostCanvas</a> runs this <a href="http://www.feiri.de/pcan/example1.html">example</a> about 1.5 times (Chrome) to 3 times 4139 (Firefox) faster. I am actually surprised that WPS runs only about 4140 1.5 times slower in Chrome even though it interprets almost everything 4141 with minimal number of operators coded directly in JavaScript 4142 (compared to PostCanvas which implements all operators directly in 4143 JavaScript). Time for Safari was reported by Will King and even 4144 though it was not run on the same machine as the other tests, it shows 4145 that the speed is comparable to Chrome. 4146 </p> 4147 <p> 4148 Another surprise to me is that I expected more significant speed up 4149 after implementing the <a href="http://www.capcode.de/help/bind">bind</a> operator. Why does Opera and 4150 Firefox get slower in this case? 4151 </p> 4152 <p> 4153 It should be fairly easy to speed WPS up by coding more operators 4154 directly in JavaScript. The speed of PostCanvas could probably be 4155 taken as the best case that could be achieved by optimizing WPS. 4156 </p> 4157 4158 <div class="figure"> 4159 <p><img src="tiger.png" alt="tiger.png" /></p> 4160 </div> 4161 4162 <p> 4163 Note by Dave Chapman: 4164 </p> 4165 <blockquote> 4166 4167 4168 <p> 4169 I've found that reducing the number of function calls in complex 4170 scripts has by far the biggest gains in speed - but I guess you 4171 already know this. For instance, when I run the Tiger demo it takes 4172 about 19sec on my machine (FF3.0, dual core, 4gb ram) but according to 4173 the firebug profiler it's making nearly 4 million function calls (as a 4174 comparison PostCanvas is <b>only</b> making about 220,000 calls). 4175 </p> 4176 4177 </blockquote> 4178 4179 4180 <p> 4181 Note by Ray Johnson: 4182 </p> 4183 <blockquote> 4184 4185 4186 <p> 4187 Tested Safari 4.0.4 (Win) and Firefox 3.5.5 (Win): 4188 </p> 4189 <ul> 4190 <li> 4191 Safari 4.0.4 Tiger drawing time = 1.76 4192 </li> 4193 <li> 4194 Firefox 3.5.5 Tiger drawing time = 6.945 4195 4196 </li> 4197 </ul> 4198 4199 <p>I’m on a Dell T7400 Xeon Quad Core 3.0 GHz with 4GB Ram and Vista SP2 32 Bit-and 4200 </p> 4201 4202 </blockquote> 4203 4204 4205 <p> 4206 Firefox throws error about linecap and linejoin not being supported so 4207 these were not used here. Opera throws an error when running the 4208 PostCanvas example. The tiger does not look the same as rendered by 4209 <a href="http://projects.gnome.org/evince/">Evince</a> (<a href="http://poppler.freedesktop.org/">poppler</a>/<a href="http://cairographics.org/">cairo</a>) so maybe the linecap and linejoin are 4210 really needed to get proper image as intended. 4211 </p> 4212 <p> 4213 It is also interesting to observe that PDF operators and their names 4214 probably came up from shortening/compressing common "user-space" 4215 PostScript operators in PostScript files. The tiger.eps file was 4216 created in 1990 and contains some "shortcuts" that match PDF operators 4217 standardised later. 4218 </p> 4219 </div> 4220 </div> 4221 4222 </div> 4223 4224 <div id="outline-container-4" class="outline-1"> 4225 <h1 id="sec-4">Drawing with PDF </h1> 4226 <div class="outline-text-1" id="text-4"> 4227 4228 4229 <p> 4230 PDF is rather complex format. WPS aims to implement only drawing 4231 operators that can be present in PDF content streams. The number of 4232 these operators is fixed and limited. Even though the full PostScript 4233 language is not required, it can be convenient to implement them in 4234 PostScript. 4235 </p> 4236 <p> 4237 However, some aspects (e.g. colors) are handled differently in PDF 4238 compared to PostScript and these differences are not addressed by WPS. 4239 I imagine that a supporting server-side solution like <a href="../ondoc/index.html">OnDoc</a> would 4240 provide necessary data (e.g. decomposing PDF into pages and objects, 4241 providing HTML 5 web fonts and font metrics) and WPS would only draw 4242 preprocessed page content. 4243 </p> 4244 <p> 4245 Quoting from <a href="http://www.adobe.com/print/features/psvspdf/index.html">Adobe</a>: 4246 </p> 4247 <blockquote> 4248 4249 <p>A PDF file is actually a PostScript file which has already been 4250 interpreted by a RIP and made into clearly defined objects. 4251 </p> 4252 </blockquote> 4253 4254 4255 4256 </div> 4257 4258 <div id="outline-container-4.1" class="outline-2"> 4259 <h2 id="sec-4.1">Heart example </h2> 4260 <div class="outline-text-2" id="text-4.1"> 4261 4262 4263 <p> 4264 See also the <a href="https://developer.mozilla.org/samples/canvas-tutorial/2_6_canvas_beziercurveto.html">original example</a> in JavaScript. 4265 </p> 4266 4267 4268 <canvas id="xheart"></canvas> 4269 <div id="heart"> 4270 4271 <pre class="src src-ps"><span style="color: #cd0000;">% based on the JavaScript example from</span> 4272 <span style="color: #cd0000;">% https://developer.mozilla.org/samples/canvas-tutorial/2_6_canvas_beziercurveto.html</span> 4273 4274 0 0 150 150 .gbox 4275 4276 q 4277 75 40 m 4278 75 37 70 25 50 25 c 4279 20 25 20 62.5 20 62.5 c 4280 20 80 40 102 75 120 c 4281 110 102 130 80 130 62.5 c 4282 130 62.5 130 25 100 25 c 4283 85 25 75 37 75 40 c 4284 f 4285 Q 4286 </pre> 4287 4288 4289 4290 </div> 4291 <script>wps.parse("save (xheart) .setGc", $$("heart"), "restore");</script> 4292 4293 </div> 4294 4295 </div> 4296 4297 <div id="outline-container-4.2" class="outline-2"> 4298 <h2 id="sec-4.2">Rectangle example </h2> 4299 <div class="outline-text-2" id="text-4.2"> 4300 4301 4302 <p> 4303 TODO find the original example 4304 </p> 4305 4306 4307 <canvas id="xrect"></canvas> 4308 <div id="rect"> 4309 4310 <pre class="src src-ps">0 0 170 170 .gbox 4311 4312 1 0 0 1 80 80 cm 4313 0 72 m 4314 72 0 l 4315 0 -72 l 4316 -72 0 l 4317 4 w 4318 h S 4319 </pre> 4320 4321 4322 4323 </div> 4324 <script>wps.parse("save (xrect) .setGc", $$("rect"), "restore");</script> 4325 4326 </div> 4327 4328 </div> 4329 4330 <div id="outline-container-4.3" class="outline-2"> 4331 <h2 id="sec-4.3">Triangles example </h2> 4332 <div class="outline-text-2" id="text-4.3"> 4333 4334 4335 <p> 4336 See also the <a href="https://developer.mozilla.org/samples/canvas-tutorial/2_3_canvas_lineto.html">original example</a> in JavaScript. 4337 </p> 4338 4339 4340 <canvas id="xtriangles"></canvas> 4341 <div id="triangles"> 4342 4343 <pre class="src src-ps"><span style="color: #cd0000;">% based on the PDF example from</span> 4344 <span style="color: #cd0000;">% https://developer.mozilla.org/samples/canvas-tutorial/2_3_canvas_lineto.html</span> 4345 4346 0 0 150 150 .gbox 4347 4348 25 25 m 4349 105 25 l 4350 25 105 l 4351 f 4352 4353 125 125 m 4354 125 45 l 4355 45 125 l 4356 h 4357 S 4358 </pre> 4359 4360 4361 4362 </div> 4363 <script>wps.parse("save (xtriangles) .setGc", $$("triangles"), "restore");</script> 4364 4365 </div> 4366 4367 </div> 4368 4369 <div id="outline-container-4.4" class="outline-2"> 4370 <h2 id="sec-4.4">Smile example </h2> 4371 <div class="outline-text-2" id="text-4.4"> 4372 4373 4374 <p> 4375 See also the <a href="http://developer.mozilla.org/samples/canvas-tutorial/2_2_canvas_moveto.html">original example</a> in JavaScript. 4376 </p> 4377 4378 4379 <canvas id="xsmile"></canvas> 4380 <div id="smile"> 4381 4382 <pre class="src src-ps"><span style="color: #cd0000;">% based on the JavaScript example from</span> 4383 <span style="color: #cd0000;">% http://developer.mozilla.org/samples/canvas-tutorial/2_2_canvas_moveto.html</span> 4384 4385 0 0 150 150 .gbox 4386 4387 <span style="color: #cd0000;">%0 0 m % TODO m op meaning?</span> 4388 newpath 4389 75 75 50 0 360 arc <span style="color: #cd0000;">% TODO pdf way to draw arc?</span> 4390 S 4391 110 75 m 4392 75 75 35 0 180 arcn 4393 S 4394 65 65 m 4395 60 65 5 0 360 arc 4396 S 4397 95 65 m 4398 90 65 5 0 360 arc 4399 S 4400 </pre> 4401 4402 4403 4404 </div> 4405 <script>wps.parse("save (xsmile) .setGc", $$("smile"), "restore");</script> 4406 4407 </div> 4408 4409 </div> 4410 4411 <div id="outline-container-4.5" class="outline-2"> 4412 <h2 id="sec-4.5">Star example </h2> 4413 <div class="outline-text-2" id="text-4.5"> 4414 4415 4416 <p> 4417 See also the <a href="http://www.adobe.com/technology/pdfs/presentations/KingPDFTutorial.pdf">original PDF document</a> where this example is presented. 4418 </p> 4419 4420 4421 <canvas id="xstar"></canvas> 4422 <div id="star"> 4423 4424 <pre class="src src-ps"><span style="color: #cd0000;">% based on the PDF example from</span> 4425 <span style="color: #cd0000;">% http://www.adobe.com/technology/pdfs/presentations/KingPDFTutorial.pdf</span> 4426 4427 0 0 100 100 .gbox 4428 1 0 0 -1 0 100 cm 4429 4430 q 4431 0 0 1 rg 4432 4 0 0 4 50 50 cm 4433 0 5.5 m 4434 -4 -5.5 l 4435 6 1 l 4436 -6 1 l 4437 4 -5.5 l 4438 f 4439 Q 4440 </pre> 4441 4442 4443 4444 </div> 4445 <script>wps.parse("save (xstar) .setGc", $$("star"), "restore");</script> 4446 4447 </div> 4448 4449 </div> 4450 4451 <div id="outline-container-4.6" class="outline-2"> 4452 <h2 id="sec-4.6">Squares example </h2> 4453 <div class="outline-text-2" id="text-4.6"> 4454 4455 4456 <p> 4457 See also the <a href="https://developer.mozilla.org/samples/canvas-tutorial/5_1_canvas_savestate.html">original example</a> in JavaScript. 4458 </p> 4459 4460 4461 <canvas id="xsquares"></canvas> 4462 <div id="squares"> 4463 4464 <pre class="src src-ps"><span style="color: #cd0000;">% based on the JavaScript example from</span> 4465 <span style="color: #cd0000;">% https://developer.mozilla.org/samples/canvas-tutorial/5_1_canvas_savestate.html</span> 4466 4467 0 0 150 150 .gbox 4468 4469 q 4470 0 0 m 0 0 150 150 re f 4471 q 4472 0 0.4 1 rg 4473 0 0 m 15 15 120 120 re f 4474 q 4475 1 1 1 rg 4476 0.5 .setGlobalAlpha 4477 0 0 m 30 30 90 90 re f 4478 Q 4479 0 0 m 45 45 60 60 re f 4480 Q 4481 0 0 m 60 60 30 30 re f 4482 Q 4483 </pre> 4484 4485 4486 4487 </div> 4488 <script>wps.parse("save (xsquares) .setGc", $$("squares"), "restore");</script> 4489 4490 </div> 4491 4492 </div> 4493 4494 <div id="outline-container-4.7" class="outline-2"> 4495 <h2 id="sec-4.7">Two squares example </h2> 4496 <div class="outline-text-2" id="text-4.7"> 4497 4498 4499 <p> 4500 See also the <a href="https://developer.mozilla.org/en/drawing_graphics_with_canvas">original example</a> in JavaScript. 4501 </p> 4502 4503 4504 <canvas id="xsquares2"></canvas> 4505 <div id="squares2"> 4506 4507 <pre class="src src-ps"><span style="color: #cd0000;">% based on the JavaScript example from</span> 4508 <span style="color: #cd0000;">% https://developer.mozilla.org/en/drawing_graphics_with_canvas</span> 4509 4510 0 0 100 100 .gbox 4511 4512 q 4513 0.8 0 0 rg 4514 0 0 m 4515 10 10 55 50 re 4516 f 4517 0 0 0.8 rg 4518 0.5 .setGlobalAlpha 4519 0 0 m 4520 30 30 55 50 re 4521 f 4522 Q 4523 </pre> 4524 4525 4526 4527 </div> 4528 <script>wps.parse("save (xsquares2) .setGc", $$("squares2"), "restore");</script> 4529 4530 </div> 4531 </div> 4532 4533 </div> 4534 4535 <div id="outline-container-5" class="outline-1"> 4536 <h1 id="sec-5">Operators and JavaScript bindings </h1> 4537 <div class="outline-text-1" id="text-5"> 4538 4539 4540 <p> 4541 WPS implements a minimum core in JavaScript and the rest is 4542 implemented in PostScript itself. 4543 </p> 4544 <p> 4545 Many JavaScript data types map quite easily to PostScript data types 4546 so native bindings can be implemented mostly in PostScript via 4547 PostScript dictionaries (JavaScript objects). <a href="http://www.whatwg.org/specs/web-apps/current-work/#the-canvas-element">HTML 5 canvas API</a> 4548 bindings are quite straightforward. 4549 </p> 4550 4551 </div> 4552 4553 <div id="outline-container-5.1" class="outline-2"> 4554 <h2 id="sec-5.1">Native operators </h2> 4555 <div class="outline-text-2" id="text-5.1"> 4556 4557 4558 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4559 <caption></caption> 4560 <colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /> 4561 </colgroup> 4562 <thead> 4563 <tr><th scope="col">category</th><th scope="col">in</th><th scope="col">operator</th><th scope="col">out</th></tr> 4564 </thead> 4565 <tbody> 4566 <tr><td>Trivial</td><td></td><td><a href="http://www.capcode.de/help/true">true</a></td><td>true</td></tr> 4567 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/false">false</a></td><td>false</td></tr> 4568 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/null">null</a></td><td>null</td></tr> 4569 <tr><td>Math</td><td>x y</td><td><a href="http://www.capcode.de/help/sub">sub</a></td><td>x-y</td></tr> 4570 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/mul">mul</a></td><td>x*y</td></tr> 4571 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/div">div</a></td><td>x/y</td></tr> 4572 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/mod">mod</a></td><td>x%y</td></tr> 4573 <tr><td>Stack</td><td></td><td><a href="http://www.capcode.de/help/mark">mark</a></td><td>mark</td></tr> 4574 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/counttomark">counttomark</a></td><td>n</td></tr> 4575 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/exch">exch</a></td><td>y x</td></tr> 4576 <tr><td></td><td>…</td><td><a href="http://www.capcode.de/help/clear">clear</a></td><td></td></tr> 4577 <tr><td></td><td>x</td><td><a href="http://www.capcode.de/help/pop">pop</a></td><td></td></tr> 4578 <tr><td></td><td>x<sub>n</sub> … x<sub>0</sub> n</td><td><a href="http://www.capcode.de/help/index">index</a></td><td>x<sub>n</sub> … x<sub>0</sub> x<sub>n</sub></td></tr> 4579 <tr><td></td><td>x<sub>(n-1)</sub> … x<sub>0</sub> n j</td><td><a href="http://www.capcode.de/help/roll">roll</a></td><td>x<sub>((j-1) mod n)</sub> … x<sub>0</sub> … x<sub>(n-1)</sub> … x<sub>(j mod n)</sub></td></tr> 4580 <tr><td></td><td>x<sub>1</sub> … x<sub>n</sub> n</td><td><a href="http://www.capcode.de/help/copy">copy</a></td><td>x<sub>1</sub> … x<sub>n</sub> x<sub>1</sub> … x<sub>n</sub></td></tr> 4581 <tr><td>Array</td><td>array</td><td><a href="http://www.capcode.de/help/length">length</a></td><td>n</td></tr> 4582 <tr><td></td><td>x<sub>n</sub> … x<sub>0</sub> array</td><td><a href="http://www.capcode.de/help/astore">astore</a></td><td>array</td></tr> 4583 <tr><td></td><td>n</td><td><a href="http://www.capcode.de/help/array">array</a></td><td>array</td></tr> 4584 <tr><td>Conditionals</td><td>x y</td><td><a href="http://www.capcode.de/help/eq">eq</a></td><td>bool</td></tr> 4585 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/lt">lt</a></td><td>bool</td></tr> 4586 <tr><td>Control</td><td>bool then else</td><td><a href="http://www.capcode.de/help/ifelse">ifelse</a></td><td></td></tr> 4587 <tr><td></td><td>n proc</td><td><a href="http://www.capcode.de/help/repeat">repeat</a></td><td></td></tr> 4588 <tr><td></td><td>i j k proc</td><td><a href="http://www.capcode.de/help/for">for</a></td><td></td></tr> 4589 <tr><td></td><td>array/dict/string proc</td><td><a href="http://www.capcode.de/help/forall">forall</a></td><td></td></tr> 4590 <tr><td></td><td>any</td><td><a href="http://www.capcode.de/help/exec">exec</a></td><td></td></tr> 4591 <tr><td></td><td>any</td><td><a href="http://www.capcode.de/help/cvx">cvx</a></td><td>any</td></tr> 4592 <tr><td></td><td>any</td><td><a href="http://www.capcode.de/help/cvlit">cvlit</a></td><td>any</td></tr> 4593 <tr><td>Dictionary</td><td>n</td><td><a href="http://www.capcode.de/help/dict">dict</a></td><td>dict</td></tr> 4594 <tr><td></td><td>dict key</td><td><a href="http://www.capcode.de/help/get">get</a></td><td>any</td></tr> 4595 <tr><td></td><td>dict key any</td><td><a href="http://www.capcode.de/help/put">put</a></td><td></td></tr> 4596 <tr><td></td><td>dict</td><td><a href="http://www.capcode.de/help/begin">begin</a></td><td></td></tr> 4597 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/end">end</a></td><td></td></tr> 4598 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/currentdict">currentdict</a></td><td>dict</td></tr> 4599 <tr><td></td><td>sym</td><td><a href="http://www.capcode.de/help/where">where</a></td><td>false / dict true</td></tr> 4600 <tr><td>Miscellaneous</td><td></td><td><a href="http://www.capcode.de/help/save">save</a></td><td>dstack</td></tr> 4601 <tr><td></td><td>dstack</td><td><a href="http://www.capcode.de/help/restore">restore</a></td><td></td></tr> 4602 <tr><td></td><td>any</td><td><a href="http://www.capcode.de/help/type">type</a></td><td>name</td></tr> 4603 <tr><td></td><td>bool</td><td>.strictBind</td><td></td></tr> 4604 <tr><td></td><td>any</td><td><a href="http://www.capcode.de/help/bind">bind</a></td><td>any</td></tr> 4605 <tr><td>Debugging</td><td>x</td><td><a href="http://www.capcode.de/help/=">=</a></td><td></td></tr> 4606 <tr><td></td><td>x</td><td><a href="http://www.capcode.de/help/==">==</a></td><td></td></tr> 4607 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/stack">stack</a></td><td></td></tr> 4608 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/pstack">pstack</a></td><td></td></tr> 4609 <tr><td>JavaScript FFI</td><td>x<sub>1</sub> … x<sub>n</sub> dict key n</td><td>.call</td><td>any</td></tr> 4610 <tr><td></td><td></td><td>.math</td><td>Math</td></tr> 4611 <tr><td></td><td></td><td>.date</td><td>(new Date)</td></tr> 4612 <tr><td></td><td></td><td>.window</td><td>window</td></tr> 4613 <tr><td></td><td>proc</td><td>.callback</td><td>callback</td></tr> 4614 <tr><td>HTML</td><td>m</td><td>.minv</td><td>m<sup>-1</sup></td></tr> 4615 <tr><td></td><td>m<sub>1</sub> m<sub>2</sub></td><td>.mmul</td><td>(m<sub>1</sub> x m<sub>2</sub>)</td></tr> 4616 <tr><td></td><td>x y m</td><td>.xy</td><td>x' y'</td></tr> 4617 <tr><td></td><td>r g b</td><td>.rgb</td><td>text</td></tr> 4618 <tr><td></td><td>r g b a</td><td>.rgba</td><td>text</td></tr> 4619 </tbody> 4620 </table> 4621 4622 4623 <p> 4624 Some of the above operators could still be implemented in PostScript 4625 instead of directly in JavaScript. 4626 </p> 4627 </div> 4628 4629 </div> 4630 4631 <div id="outline-container-5.2" class="outline-2"> 4632 <h2 id="sec-5.2">Core operators </h2> 4633 <div class="outline-text-2" id="text-5.2"> 4634 4635 4636 <p> 4637 TODO update 4638 </p> 4639 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4640 <caption></caption> 4641 <colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /> 4642 </colgroup> 4643 <thead> 4644 <tr><th scope="col">category</th><th scope="col">in</th><th scope="col">operator</th><th scope="col">out</th><th scope="col"></th></tr> 4645 </thead> 4646 <tbody> 4647 <tr><td>Math</td><td></td><td><a href="http://www.capcode.de/help/abs">abs</a></td><td></td><td></td></tr> 4648 <tr><td></td><td></td><td>.acos</td><td></td><td></td></tr> 4649 <tr><td></td><td></td><td>.asin</td><td></td><td></td></tr> 4650 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/atan">atan</a></td><td></td><td></td></tr> 4651 <tr><td></td><td></td><td>.atan2</td><td></td><td></td></tr> 4652 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/ceiling">ceiling</a></td><td></td><td></td></tr> 4653 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/cos">cos</a></td><td></td><td></td></tr> 4654 <tr><td></td><td></td><td>.exp</td><td></td><td></td></tr> 4655 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/floor">floor</a></td><td></td><td></td></tr> 4656 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/log">log</a></td><td></td><td></td></tr> 4657 <tr><td></td><td></td><td>.max</td><td></td><td></td></tr> 4658 <tr><td></td><td></td><td>.min</td><td></td><td></td></tr> 4659 <tr><td></td><td></td><td>.pow</td><td></td><td></td></tr> 4660 <tr><td></td><td></td><td>.random</td><td></td><td></td></tr> 4661 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/rand">rand</a></td><td></td><td></td></tr> 4662 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/round">round</a></td><td></td><td></td></tr> 4663 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/sin">sin</a></td><td></td><td></td></tr> 4664 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/sqrt">sqrt</a></td><td></td><td></td></tr> 4665 <tr><td></td><td></td><td>.tan</td><td></td><td></td></tr> 4666 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/truncate">truncate</a></td><td></td><td></td></tr> 4667 <tr><td></td><td></td><td>.e</td><td></td><td></td></tr> 4668 <tr><td></td><td></td><td>.ln2</td><td></td><td></td></tr> 4669 <tr><td></td><td></td><td>.ln10</td><td></td><td></td></tr> 4670 <tr><td></td><td></td><td>.log2e</td><td></td><td></td></tr> 4671 <tr><td></td><td></td><td>.log10e</td><td></td><td></td></tr> 4672 <tr><td></td><td></td><td>.pi</td><td></td><td></td></tr> 4673 <tr><td></td><td></td><td>.sqrt1<sub>2</sub></td><td></td><td></td></tr> 4674 <tr><td></td><td></td><td>.sqrt2</td><td></td><td></td></tr> 4675 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/sub">sub</a></td><td></td><td></td></tr> 4676 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/idiv">idiv</a></td><td></td><td></td></tr> 4677 <tr><td></td><td>num/string</td><td><a href="http://www.capcode.de/help/cvr">cvr</a></td><td>real</td><td></td></tr> 4678 <tr><td></td><td>num/string</td><td><a href="http://www.capcode.de/help/cvi">cvi</a></td><td>int</td><td></td></tr> 4679 <tr><td>Stack</td><td>x</td><td><a href="http://www.capcode.de/help/dup">dup</a></td><td>x x</td><td></td></tr> 4680 <tr><td>Conditionals</td><td>x y</td><td><a href="http://www.capcode.de/help/ne">ne</a></td><td>bool</td><td></td></tr> 4681 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/ge">ge</a></td><td>bool</td><td></td></tr> 4682 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/le">le</a></td><td>bool</td><td></td></tr> 4683 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/gt">gt</a></td><td>bool</td><td></td></tr> 4684 <tr><td></td><td>bool proc</td><td><a href="http://www.capcode.de/help/if">if</a></td><td></td><td></td></tr> 4685 <tr><td>HTML 5</td><td>key</td><td>.gget</td><td></td><td></td></tr> 4686 <tr><td></td><td>any key</td><td>.gput</td><td></td><td></td></tr> 4687 <tr><td></td><td>key nargs</td><td>.gcall0</td><td></td><td></td></tr> 4688 <tr><td></td><td>key nargs</td><td>.gcall1</td><td></td><td></td></tr> 4689 <tr><td></td><td></td><td>.gcanvas</td><td>canvas</td><td></td></tr> 4690 <tr><td></td><td>w h</td><td>.gdim</td><td></td><td></td></tr> 4691 <tr><td></td><td>x0 y0 x1 y1</td><td>.gbox</td><td></td><td></td></tr> 4692 </tbody> 4693 </table> 4694 4695 4696 </div> 4697 4698 </div> 4699 4700 <div id="outline-container-5.3" class="outline-2"> 4701 <h2 id="sec-5.3">HTML 5 canvas methods and attributes </h2> 4702 <div class="outline-text-2" id="text-5.3"> 4703 4704 4705 4706 </div> 4707 4708 <div id="outline-container-5.3.1" class="outline-3"> 4709 <h3 id="sec-5.3.1">Canvas methods </h3> 4710 <div class="outline-text-3" id="text-5.3.1"> 4711 4712 4713 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4714 <caption></caption> 4715 <colgroup><col align="left" /><col align="left" /><col align="left" /></colgroup> 4716 <colgroup><col align="left" /></colgroup> 4717 <colgroup><col align="left" /> 4718 </colgroup> 4719 <thead> 4720 <tr><th scope="col">in</th><th scope="col">canvas</th><th scope="col">out</th><th scope="col">ps</th><th scope="col">pdf</th></tr> 4721 </thead> 4722 <tbody> 4723 <tr><td></td><td>.save</td><td></td><td><a href="http://www.capcode.de/help/gsave">gsave</a></td><td>q</td></tr> 4724 <tr><td></td><td>.restore</td><td></td><td><a href="http://www.capcode.de/help/grestore">grestore</a></td><td>Q</td></tr> 4725 <tr><td>x y</td><td>.scale</td><td></td><td><a href="http://www.capcode.de/help/scale">scale</a></td><td>-</td></tr> 4726 <tr><td>angle</td><td>.rotate</td><td></td><td><a href="http://www.capcode.de/help/rotate">rotate</a></td><td>-</td></tr> 4727 <tr><td>x y</td><td>.translate</td><td></td><td><a href="http://www.capcode.de/help/translate">translate</a></td><td>-</td></tr> 4728 <tr><td>m11 m12 m21 m22 dx dy</td><td>.transform</td><td></td><td>-</td><td>cm</td></tr> 4729 <tr><td>m11 m12 m21 m22 dx dy</td><td>.setTransform</td><td></td><td>-</td><td>-</td></tr> 4730 <tr><td>x0 y0 x1 y1</td><td>.createLinearGradient</td><td>canvasGradient</td><td></td><td></td></tr> 4731 <tr><td>x0 y0 r0 x1 y1 r1</td><td>.createRadialGradient</td><td>canvasGradient</td><td></td><td></td></tr> 4732 <tr><td>image repetition</td><td>.createPattern</td><td>canvasPattern</td><td></td><td></td></tr> 4733 <tr><td>x y w h</td><td>.clearRect</td><td></td><td><a href="http://www.capcode.de/help/rectclip">rectclip</a></td><td></td></tr> 4734 <tr><td>x y w h</td><td>.fillRect</td><td></td><td><a href="http://www.capcode.de/help/rectfill">rectfill</a></td><td></td></tr> 4735 <tr><td>x y w h</td><td>.strokeRect</td><td></td><td><a href="http://www.capcode.de/help/rectstroke">rectstroke</a></td><td></td></tr> 4736 <tr><td></td><td>.beginPath</td><td></td><td><a href="http://www.capcode.de/help/newpath">newpath</a></td><td>m ?</td></tr> 4737 <tr><td></td><td>.closePath</td><td></td><td><a href="http://www.capcode.de/help/closepath">closepath</a></td><td>~ h ? ~ n ?</td></tr> 4738 <tr><td>x y</td><td>.moveTo</td><td></td><td><a href="http://www.capcode.de/help/moveto">moveto</a></td><td>m ?</td></tr> 4739 <tr><td>x y</td><td>.lineTo</td><td></td><td><a href="http://www.capcode.de/help/lineto">lineto</a></td><td>l</td></tr> 4740 <tr><td>cpx cpy x y</td><td>.quadraticCurveTo</td><td></td><td></td><td></td></tr> 4741 <tr><td>cp1x cp1y cp2x cp2y x y</td><td>.bezierCurveTo</td><td></td><td></td><td>c</td></tr> 4742 <tr><td>x1 y1 x2 y2 radius</td><td>.arcTo</td><td></td><td><a href="http://www.capcode.de/help/arcto">arcto</a></td><td></td></tr> 4743 <tr><td>x y w h</td><td>.rect</td><td></td><td>-</td><td>~ re</td></tr> 4744 <tr><td>x y radius startAngle endAngle anticlockwise</td><td>.arc</td><td></td><td>~ <a href="http://www.capcode.de/help/arc">arc</a> <a href="http://www.capcode.de/help/arcn">arcn</a></td><td></td></tr> 4745 <tr><td></td><td>.fill</td><td></td><td><a href="http://www.capcode.de/help/fill">fill</a></td><td>~ f ?</td></tr> 4746 <tr><td></td><td>.stroke</td><td></td><td><a href="http://www.capcode.de/help/stroke">stroke</a></td><td>S</td></tr> 4747 <tr><td></td><td>.clip</td><td></td><td><a href="http://www.capcode.de/help/clip">clip</a></td><td>~ W ?</td></tr> 4748 <tr><td>x y</td><td>.isPointInPath</td><td>boolean</td><td></td><td></td></tr> 4749 <tr><td>text x y</td><td>.fillText1</td><td></td><td></td><td></td></tr> 4750 <tr><td>text x y maxWidth</td><td>.fillText2</td><td></td><td></td><td></td></tr> 4751 <tr><td>text x y</td><td>.strokeText1</td><td></td><td></td><td></td></tr> 4752 <tr><td>text x y maxWidth</td><td>.strokeText2</td><td></td><td></td><td></td></tr> 4753 <tr><td>text</td><td>.measureText</td><td>textMetrics</td><td></td><td></td></tr> 4754 <tr><td>image dx dy</td><td>.drawImage1</td><td></td><td></td><td></td></tr> 4755 <tr><td>image dx dy dw dh</td><td>.drawImage2</td><td></td><td></td><td></td></tr> 4756 <tr><td>image sx sy sw sh dx dy dw dh</td><td>.drawImage3</td><td></td><td></td><td></td></tr> 4757 <tr><td>imagedata</td><td>.createImageData1</td><td>imageData</td><td></td><td></td></tr> 4758 <tr><td>sw sh</td><td>.createImageData1</td><td>imageData</td><td></td><td></td></tr> 4759 <tr><td>sx sy sw sh</td><td>.getImageData</td><td>imageData</td><td></td><td></td></tr> 4760 <tr><td>imagedata dx dy</td><td>.putImageData1</td><td></td><td></td><td></td></tr> 4761 <tr><td>imagedata dx dy dirtyX dirtyY dirtyW dirtyH</td><td>.putImageData2</td><td></td><td></td><td></td></tr> 4762 </tbody> 4763 </table> 4764 4765 4766 </div> 4767 4768 </div> 4769 4770 <div id="outline-container-5.3.2" class="outline-3"> 4771 <h3 id="sec-5.3.2">Canvas attributes </h3> 4772 <div class="outline-text-3" id="text-5.3.2"> 4773 4774 4775 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4776 <caption></caption> 4777 <colgroup><col align="left" /></colgroup> 4778 <colgroup><col align="left" /><col align="left" /></colgroup> 4779 <colgroup><col align="left" /></colgroup> 4780 <colgroup><col align="left" /> 4781 </colgroup> 4782 <thead> 4783 <tr><th scope="col">type</th><th scope="col">attribute</th><th scope="col">values</th><th scope="col">ps</th><th scope="col">pdf</th></tr> 4784 </thead> 4785 <tbody> 4786 <tr><td>num</td><td>.globalAlpha</td><td>(1.0)</td><td></td><td></td></tr> 4787 <tr><td>str</td><td>.globalCompositeOperation</td><td>(source-over)</td><td></td><td></td></tr> 4788 <tr><td>any</td><td>.strokeStyle</td><td>(black)</td><td>~ <a href="http://www.capcode.de/help/setdash">setdash</a> ?</td><td>~ d ?</td></tr> 4789 <tr><td>any</td><td>.fillStyle</td><td>(black)</td><td></td><td></td></tr> 4790 <tr><td>num</td><td>.lineWidth</td><td>(1)</td><td><a href="http://www.capcode.de/help/setlinewidth">setlinewidth</a></td><td>w</td></tr> 4791 <tr><td>str</td><td>.lineCap</td><td>(butt) round square</td><td>~ <a href="http://www.capcode.de/help/setlinecap">setlinecap</a></td><td>J</td></tr> 4792 <tr><td>str</td><td>.lineJoin</td><td>round bevel (miter)</td><td>~ <a href="http://www.capcode.de/help/setlinejoin">setlinejoin</a></td><td>j</td></tr> 4793 <tr><td>num</td><td>.miterLimit</td><td>(10)</td><td><a href="http://www.capcode.de/help/setmiterlimit">setmiterlimit</a></td><td>M</td></tr> 4794 <tr><td>num</td><td>.shadowOffsetX</td><td>(0)</td><td></td><td></td></tr> 4795 <tr><td>num</td><td>.shadowOffsetY</td><td>(0)</td><td></td><td></td></tr> 4796 <tr><td>num</td><td>.shadowBlur</td><td>(0)</td><td></td><td></td></tr> 4797 <tr><td>str</td><td>.shadowColor</td><td>(transparent black)</td><td></td><td></td></tr> 4798 <tr><td>str</td><td>.font</td><td>(10px sans-serif)</td><td></td><td></td></tr> 4799 <tr><td>str</td><td>.textAlign</td><td>(start) end left right center</td><td></td><td></td></tr> 4800 <tr><td>str</td><td>.textBaseline</td><td>top hanging middle (alphabetic) ideographic bottom</td><td></td><td></td></tr> 4801 </tbody> 4802 </table> 4803 4804 4805 </div> 4806 4807 </div> 4808 4809 <div id="outline-container-5.3.3" class="outline-3"> 4810 <h3 id="sec-5.3.3">Other operators </h3> 4811 <div class="outline-text-3" id="text-5.3.3"> 4812 4813 4814 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4815 <caption></caption> 4816 <colgroup><col align="left" /></colgroup> 4817 <colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /> 4818 </colgroup> 4819 <thead> 4820 <tr><th scope="col">in</th><th scope="col">canvas</th><th scope="col">out</th><th scope="col">ps</th><th scope="col">pdf</th></tr> 4821 </thead> 4822 <tbody> 4823 <tr><td>canvasGradient offset color</td><td>.addColorStop</td><td></td><td></td><td></td></tr> 4824 </tbody> 4825 </table> 4826 4827 4828 </div> 4829 4830 </div> 4831 4832 <div id="outline-container-5.3.4" class="outline-3"> 4833 <h3 id="sec-5.3.4">Other attributes </h3> 4834 <div class="outline-text-3" id="text-5.3.4"> 4835 4836 4837 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4838 <caption></caption> 4839 <colgroup><col align="left" /><col align="left" /></colgroup> 4840 <colgroup><col align="left" /><col align="left" /></colgroup> 4841 <colgroup><col align="left" /></colgroup> 4842 <colgroup><col align="left" /> 4843 </colgroup> 4844 <thead> 4845 <tr><th scope="col">dict</th><th scope="col">type</th><th scope="col">attribute</th><th scope="col">values</th><th scope="col">ps</th><th scope="col">pdf</th></tr> 4846 </thead> 4847 <tbody> 4848 <tr><td>textMetrics</td><td>num</td><td>width</td><td></td><td></td><td></td></tr> 4849 <tr><td>imageData</td><td>cnt</td><td>width</td><td></td><td></td><td></td></tr> 4850 <tr><td>imageData</td><td>cnt</td><td>heigth</td><td></td><td></td><td></td></tr> 4851 <tr><td>imageData</td><td>canvasPixelArray</td><td>data</td><td></td><td></td><td></td></tr> 4852 <tr><td>canvasPixelArray</td><td>cnt</td><td>length</td><td></td><td></td><td></td></tr> 4853 </tbody> 4854 </table> 4855 4856 4857 <p> 4858 TODO [IndexGetter, IndexSetter] CanvasPixelArray 4859 </p> 4860 </div> 4861 </div> 4862 4863 </div> 4864 4865 <div id="outline-container-5.4" class="outline-2"> 4866 <h2 id="sec-5.4">PostScript operators </h2> 4867 <div class="outline-text-2" id="text-5.4"> 4868 4869 4870 <p> 4871 TODO update 4872 </p> 4873 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4874 <caption></caption> 4875 <colgroup><col align="left" /></colgroup> 4876 <colgroup><col align="left" /></colgroup> 4877 <colgroup><col align="left" /></colgroup> 4878 <colgroup><col align="left" /> 4879 </colgroup> 4880 <thead> 4881 <tr><th scope="col">category</th><th scope="col">in</th><th scope="col">operator</th><th scope="col">out</th></tr> 4882 </thead> 4883 <tbody> 4884 <tr><td></td><td>x y [m]</td><td><a href="http://www.capcode.de/help/transform">transform</a></td><td>x y</td></tr> 4885 <tr><td></td><td>x y [m]</td><td><a href="http://www.capcode.de/help/itransform">itransform</a></td><td>x y</td></tr> 4886 <tr><td></td><td>gray</td><td><a href="http://www.capcode.de/help/setgray">setgray</a></td><td></td></tr> 4887 <tr><td></td><td>r g b</td><td><a href="http://www.capcode.de/help/setrgbcolor">setrgbcolor</a></td><td></td></tr> 4888 <tr><td></td><td>???</td><td><a href="http://www.capcode.de/help/setfont">setfont</a> ?</td><td></td></tr> 4889 <tr><td></td><td></td><td><a href="http://www.capcode.de/help/clippath">clippath</a> ?</td><td></td></tr> 4890 <tr><td></td><td>text</td><td><a href="http://www.capcode.de/help/show">show</a> ?</td><td></td></tr> 4891 <tr><td></td><td>x y</td><td><a href="http://www.capcode.de/help/rlineto">rlineto</a></td><td></td></tr> 4892 </tbody> 4893 </table> 4894 4895 4896 </div> 4897 4898 </div> 4899 4900 <div id="outline-container-5.5" class="outline-2"> 4901 <h2 id="sec-5.5">PDF operators </h2> 4902 <div class="outline-text-2" id="text-5.5"> 4903 4904 4905 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 4906 <caption></caption> 4907 <colgroup><col align="left" /></colgroup> 4908 <colgroup><col align="left" /><col align="left" /> 4909 </colgroup> 4910 <thead> 4911 <tr><th scope="col">category</th><th scope="col">operator</th><th scope="col">meaning</th></tr> 4912 </thead> 4913 <tbody> 4914 <tr><td>General graphics state</td><td>w</td><td>setlinewidth</td></tr> 4915 <tr><td></td><td>J</td><td>~ setlinecap</td></tr> 4916 <tr><td></td><td>j</td><td>~ setlinejoin</td></tr> 4917 <tr><td></td><td>M</td><td>setmiterlimit</td></tr> 4918 <tr><td></td><td>d</td><td>~ setdash ?</td></tr> 4919 <tr><td></td><td>ri</td><td></td></tr> 4920 <tr><td></td><td>i</td><td>1 .min setflat</td></tr> 4921 <tr><td></td><td>gs</td><td></td></tr> 4922 <tr><td>Special graphics state</td><td>q</td><td>gsave</td></tr> 4923 <tr><td></td><td>Q</td><td>grestore</td></tr> 4924 <tr><td></td><td>cm</td><td>.transform</td></tr> 4925 <tr><td>Path construction</td><td>m</td><td>moveto</td></tr> 4926 <tr><td></td><td>l</td><td>lineto</td></tr> 4927 <tr><td></td><td>c</td><td>.bezierCurveTo (~ curveto)</td></tr> 4928 <tr><td></td><td>v</td><td>currentpoint 6 2 roll c</td></tr> 4929 <tr><td></td><td>y</td><td>2 copy c</td></tr> 4930 <tr><td></td><td>h</td><td>closepath</td></tr> 4931 <tr><td></td><td>re</td><td>! x y m , x+w y l , x+w y+h l , x y+h l , h</td></tr> 4932 <tr><td>Path painting</td><td>S</td><td>stroke</td></tr> 4933 <tr><td></td><td>s</td><td>h S</td></tr> 4934 <tr><td></td><td>f</td><td>~ fill</td></tr> 4935 <tr><td></td><td>F</td><td>f</td></tr> 4936 <tr><td></td><td>f*</td><td>~ eofill</td></tr> 4937 <tr><td></td><td>B</td><td>f S ! q f Q S</td></tr> 4938 <tr><td></td><td>B*</td><td>f* S ! q f* Q S</td></tr> 4939 <tr><td></td><td>b</td><td>h B</td></tr> 4940 <tr><td></td><td>b*</td><td>h B*</td></tr> 4941 <tr><td></td><td>n</td><td>~ newpath</td></tr> 4942 <tr><td>Clipping paths</td><td>W</td><td>clip</td></tr> 4943 <tr><td></td><td>W*</td><td>eoclip</td></tr> 4944 <tr><td>Text objects</td><td>BT</td><td>~ q</td></tr> 4945 <tr><td></td><td>ET</td><td>~ Q</td></tr> 4946 <tr><td>Text state</td><td>Tc</td><td></td></tr> 4947 <tr><td></td><td>Tw</td><td></td></tr> 4948 <tr><td></td><td>Tz</td><td></td></tr> 4949 <tr><td></td><td>TL</td><td></td></tr> 4950 <tr><td></td><td>Tf</td><td></td></tr> 4951 <tr><td></td><td>Tr</td><td></td></tr> 4952 <tr><td></td><td>Ts</td><td></td></tr> 4953 <tr><td>Text positioning</td><td>Td</td><td></td></tr> 4954 <tr><td></td><td>TD</td><td></td></tr> 4955 <tr><td></td><td>Tm</td><td></td></tr> 4956 <tr><td></td><td>T*</td><td></td></tr> 4957 <tr><td>Text showing</td><td>Tj</td><td>~ show</td></tr> 4958 <tr><td></td><td>TJ</td><td></td></tr> 4959 <tr><td></td><td>'</td><td></td></tr> 4960 <tr><td></td><td>"</td><td></td></tr> 4961 <tr><td>Type 3 fonts</td><td>d0</td><td>setcharwidth</td></tr> 4962 <tr><td></td><td>d1</td><td>setcachedevice</td></tr> 4963 <tr><td>Color</td><td>CS</td><td></td></tr> 4964 <tr><td></td><td>cs</td><td></td></tr> 4965 <tr><td></td><td>SC</td><td></td></tr> 4966 <tr><td></td><td>SCN</td><td></td></tr> 4967 <tr><td></td><td>sc</td><td></td></tr> 4968 <tr><td></td><td>scn</td><td></td></tr> 4969 <tr><td></td><td>G</td><td>g</td></tr> 4970 <tr><td></td><td>g</td><td>setgray</td></tr> 4971 <tr><td></td><td>RG</td><td>rg</td></tr> 4972 <tr><td></td><td>rg</td><td>setrgbcolor</td></tr> 4973 <tr><td></td><td>K</td><td>k</td></tr> 4974 <tr><td></td><td>k</td><td>setcmykcolor</td></tr> 4975 <tr><td>Shading patterns</td><td>sh</td><td></td></tr> 4976 <tr><td>Inline images</td><td>BI</td><td></td></tr> 4977 <tr><td></td><td>ID</td><td></td></tr> 4978 <tr><td></td><td>EI</td><td></td></tr> 4979 <tr><td>XObjects</td><td>Do</td><td></td></tr> 4980 <tr><td>Marked content</td><td>MP</td><td></td></tr> 4981 <tr><td></td><td>DP</td><td></td></tr> 4982 <tr><td></td><td>BMC</td><td></td></tr> 4983 <tr><td></td><td>BDC</td><td></td></tr> 4984 <tr><td></td><td>EMC</td><td></td></tr> 4985 <tr><td>Compatibility</td><td>BX</td><td></td></tr> 4986 <tr><td></td><td>EX</td><td></td></tr> 4987 </tbody> 4988 </table> 4989 4990 4991 </div> 4992 </div> 4993 4994 </div> 4995 4996 <div id="outline-container-6" class="outline-1"> 4997 <h1 id="sec-6">Supported Browsers </h1> 4998 <div class="outline-text-1" id="text-6"> 4999 5000 5001 <p> 5002 I have tried the following browsers so far: 5003 </p> 5004 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> 5005 <caption></caption> 5006 <colgroup><col align="left" /></colgroup> 5007 <colgroup><col align="left" /><col align="left" /> 5008 </colgroup> 5009 <thead> 5010 <tr><th scope="col">Browser</th><th scope="col">Version</th><th scope="col">Note</th></tr> 5011 </thead> 5012 <tbody> 5013 <tr><td>Firefox</td><td>3.0.11</td><td>no text drawing, linecap, linejoin</td></tr> 5014 <tr><td></td><td>3.5b4pre</td><td>~ same as Firefox 3.0.11?</td></tr> 5015 <tr><td></td><td>3.5.5 Win</td><td>reported by Ray Johnson</td></tr> 5016 <tr><td>Opera</td><td>10.00 Beta</td><td>no text drawing, ugly aliasing</td></tr> 5017 <tr><td>Chrome</td><td>3.0.189.0</td><td>lines not joined properly</td></tr> 5018 <tr><td>Safari</td><td>for Mac Version 4.0.2 (5530.19)</td><td>reported by Will King</td></tr> 5019 <tr><td></td><td>4.0.4 Win</td><td>reported by Ray Johnson</td></tr> 5020 </tbody> 5021 </table> 5022 5023 5024 <p> 5025 If you are using a different browser, please <a href="http://logand.com/contact.html">let me know</a> if it works 5026 for you. 5027 </p> 5028 </div> 5029 5030 </div> 5031 5032 <div id="outline-container-7" class="outline-1"> 5033 <h1 id="sec-7">Limitations and Known Issues </h1> 5034 <div class="outline-text-1" id="text-7"> 5035 5036 5037 <ul> 5038 <li> 5039 many PostScript operators are still to be implemented 5040 </li> 5041 <li> 5042 only small fraction of PDF operators has been implemented 5043 </li> 5044 <li> 5045 text drawing and font related functionality has not been implemented 5046 5047 </li> 5048 </ul> 5049 </div> 5050 5051 </div> 5052 5053 <div id="outline-container-8" class="outline-1"> 5054 <h1 id="sec-8">Changes </h1> 5055 <div class="outline-text-1" id="text-8"> 5056 5057 5058 <p> 5059 2009-07-15 v0.2 5060 </p> 5061 <ul> 5062 <li> 5063 Capable of drawing tiger.eps 5064 </li> 5065 <li> 5066 JavaScript callbacks and timer added 5067 </li> 5068 <li> 5069 bind operator implemented 5070 </li> 5071 <li> 5072 Refactored JavaScript code: parser, evaluator and PostScript 5073 interpreter separated 5074 </li> 5075 <li> 5076 Improved documentation 5077 5078 </li> 5079 </ul> 5080 5081 <p>2009-06-30 v0.1 5082 </p> 5083 <ul> 5084 <li> 5085 Initial version 5086 5087 </li> 5088 </ul> 5089 </div> 5090 5091 </div> 5092 5093 <div id="outline-container-9" class="outline-1"> 5094 <h1 id="sec-9">Links </h1> 5095 <div class="outline-text-1" id="text-9"> 5096 5097 5098 <p> 5099 Discussions about WPS on <a href="http://www.reddit.com/r/programming/comments/95xll/wps_postscript_and_pdf_interpreter_for_html_5/">reddit</a> and <a href="http://ajaxian.com/archives/wps-postscript-and-pdf-interpreter-for-html-5-canvas">ajaxian</a>. 5100 </p> 5101 <p> 5102 <a href="http://www.feiri.de/pcan/">PostCanvas</a> is a RPN interpreter with many PostScript operators 5103 implemented directly in JavaScript. It is faster than WPS but not a 5104 "real" PostScript. 5105 </p> 5106 <p> 5107 <a href="http://svgkit.sourceforge.net/">SVGKit</a> has a PostScript interpreter on the wish list. 5108 </p> 5109 <p> 5110 PostScript is a registered trademark of <a href="http://www.adobe.com">Adobe Systems Incorporated</a>. 5111 </p></div> 5112 </div> 5113 <div id="postamble"> 5114 <p class="author"> Author: Tomas Hlavaty 5115 <a href="mailto:tom@logand.com"><tom@logand.com></a> 5116 </p> 5117 <p class="date"> Date: 2010-01-24 21:15:49 CET</p> 5118 <p class="creator">HTML generated by org-mode 6.30trans in emacs 23</p> 5119 </div> 5120 </div> 5121 </body> 5122 </html>