copy over 01 and 00

This commit is contained in:
James Turk 2024-09-25 23:41:41 -05:00
commit 7799db0e2f
21 changed files with 3799 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.pyc

1
.python-version Normal file
View File

@ -0,0 +1 @@
3.10

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 KiB

View File

@ -0,0 +1,497 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="792pt" height="576pt" viewBox="0 0 792 576" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke: none;" d="M 0.421875 0 L 0.421875 -9.296875 L 7.796875 -9.296875 L 7.796875 0 L 0.421875 0 Z M 6.625 -1.15625 L 6.625 -8.125 L 1.578125 -8.125 L 1.578125 -1.15625 L 6.625 -1.15625 Z M 6.625 -1.15625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke: none;" d="M 4.28125 -3.203125 L 4.28125 -7.3125 L 1.375 -3.203125 L 4.28125 -3.203125 Z M 4.296875 0 L 4.296875 -2.21875 L 0.328125 -2.21875 L 0.328125 -3.328125 L 4.484375 -9.078125 L 5.4375 -9.078125 L 5.4375 -3.203125 L 6.78125 -3.203125 L 6.78125 -2.21875 L 5.4375 -2.21875 L 5.4375 0 L 4.296875 0 Z M 4.296875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke: none;" d="M 3.78125 -9.09375 C 4.800781 -9.09375 5.507812 -8.828125 5.90625 -8.296875 C 6.300781 -7.773438 6.5 -7.238281 6.5 -6.6875 L 5.375 -6.6875 C 5.3125 -7.039062 5.203125 -7.320312 5.046875 -7.53125 C 4.773438 -7.90625 4.363281 -8.09375 3.8125 -8.09375 C 3.175781 -8.09375 2.671875 -7.796875 2.296875 -7.203125 C 1.921875 -6.617188 1.707031 -5.78125 1.65625 -4.6875 C 1.925781 -5.070312 2.257812 -5.359375 2.65625 -5.546875 C 3.007812 -5.710938 3.410156 -5.796875 3.859375 -5.796875 C 4.617188 -5.796875 5.28125 -5.550781 5.84375 -5.0625 C 6.414062 -4.582031 6.703125 -3.863281 6.703125 -2.90625 C 6.703125 -2.082031 6.429688 -1.351562 5.890625 -0.71875 C 5.359375 -0.0820312 4.597656 0.234375 3.609375 0.234375 C 2.753906 0.234375 2.019531 -0.0820312 1.40625 -0.71875 C 0.789062 -1.363281 0.484375 -2.453125 0.484375 -3.984375 C 0.484375 -5.109375 0.617188 -6.0625 0.890625 -6.84375 C 1.421875 -8.34375 2.382812 -9.09375 3.78125 -9.09375 Z M 3.703125 -0.78125 C 4.304688 -0.78125 4.753906 -0.976562 5.046875 -1.375 C 5.347656 -1.78125 5.5 -2.257812 5.5 -2.8125 C 5.5 -3.269531 5.363281 -3.707031 5.09375 -4.125 C 4.832031 -4.550781 4.351562 -4.765625 3.65625 -4.765625 C 3.164062 -4.765625 2.734375 -4.597656 2.359375 -4.265625 C 1.992188 -3.941406 1.8125 -3.457031 1.8125 -2.8125 C 1.8125 -2.238281 1.976562 -1.753906 2.3125 -1.359375 C 2.644531 -0.972656 3.109375 -0.78125 3.703125 -0.78125 Z M 3.703125 -0.78125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke: none;" d="M 3.515625 -5.265625 C 4.023438 -5.265625 4.421875 -5.40625 4.703125 -5.6875 C 4.984375 -5.96875 5.125 -6.300781 5.125 -6.6875 C 5.125 -7.019531 4.988281 -7.328125 4.71875 -7.609375 C 4.445312 -7.890625 4.035156 -8.03125 3.484375 -8.03125 C 2.929688 -8.03125 2.53125 -7.890625 2.28125 -7.609375 C 2.039062 -7.328125 1.921875 -7 1.921875 -6.625 C 1.921875 -6.195312 2.078125 -5.863281 2.390625 -5.625 C 2.710938 -5.382812 3.085938 -5.265625 3.515625 -5.265625 Z M 3.59375 -0.78125 C 4.125 -0.78125 4.5625 -0.921875 4.90625 -1.203125 C 5.25 -1.484375 5.421875 -1.910156 5.421875 -2.484375 C 5.421875 -3.066406 5.238281 -3.507812 4.875 -3.8125 C 4.519531 -4.113281 4.066406 -4.265625 3.515625 -4.265625 C 2.960938 -4.265625 2.515625 -4.109375 2.171875 -3.796875 C 1.828125 -3.492188 1.65625 -3.066406 1.65625 -2.515625 C 1.65625 -2.046875 1.8125 -1.640625 2.125 -1.296875 C 2.445312 -0.953125 2.9375 -0.78125 3.59375 -0.78125 Z M 1.96875 -4.828125 C 1.65625 -4.960938 1.410156 -5.117188 1.234375 -5.296875 C 0.898438 -5.640625 0.734375 -6.078125 0.734375 -6.609375 C 0.734375 -7.285156 0.976562 -7.863281 1.46875 -8.34375 C 1.957031 -8.832031 2.648438 -9.078125 3.546875 -9.078125 C 4.410156 -9.078125 5.085938 -8.847656 5.578125 -8.390625 C 6.078125 -7.929688 6.328125 -7.398438 6.328125 -6.796875 C 6.328125 -6.222656 6.1875 -5.765625 5.90625 -5.421875 C 5.738281 -5.222656 5.488281 -5.03125 5.15625 -4.84375 C 5.53125 -4.664062 5.828125 -4.46875 6.046875 -4.25 C 6.441406 -3.820312 6.640625 -3.269531 6.640625 -2.59375 C 6.640625 -1.800781 6.367188 -1.125 5.828125 -0.5625 C 5.296875 -0.0078125 4.539062 0.265625 3.5625 0.265625 C 2.6875 0.265625 1.941406 0.0234375 1.328125 -0.453125 C 0.722656 -0.929688 0.421875 -1.628906 0.421875 -2.546875 C 0.421875 -3.078125 0.550781 -3.535156 0.8125 -3.921875 C 1.070312 -4.316406 1.457031 -4.617188 1.96875 -4.828125 Z M 1.96875 -4.828125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke: none;" d="M 1.234375 -6.40625 L 1.234375 -7.28125 C 2.054688 -7.363281 2.628906 -7.5 2.953125 -7.6875 C 3.285156 -7.875 3.53125 -8.316406 3.6875 -9.015625 L 4.578125 -9.015625 L 4.578125 0 L 3.375 0 L 3.375 -6.40625 L 1.234375 -6.40625 Z M 1.234375 -6.40625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke: none;" d="M 3.5 -9.0625 C 4.675781 -9.0625 5.523438 -8.578125 6.046875 -7.609375 C 6.453125 -6.859375 6.65625 -5.835938 6.65625 -4.546875 C 6.65625 -3.304688 6.472656 -2.285156 6.109375 -1.484375 C 5.578125 -0.328125 4.707031 0.25 3.5 0.25 C 2.40625 0.25 1.59375 -0.222656 1.0625 -1.171875 C 0.625 -1.960938 0.40625 -3.019531 0.40625 -4.34375 C 0.40625 -5.375 0.535156 -6.257812 0.796875 -7 C 1.296875 -8.375 2.195312 -9.0625 3.5 -9.0625 Z M 3.484375 -0.796875 C 4.078125 -0.796875 4.546875 -1.054688 4.890625 -1.578125 C 5.242188 -2.097656 5.421875 -3.070312 5.421875 -4.5 C 5.421875 -5.53125 5.296875 -6.375 5.046875 -7.03125 C 4.796875 -7.695312 4.304688 -8.03125 3.578125 -8.03125 C 2.898438 -8.03125 2.40625 -7.710938 2.09375 -7.078125 C 1.789062 -6.453125 1.640625 -5.523438 1.640625 -4.296875 C 1.640625 -3.378906 1.738281 -2.640625 1.9375 -2.078125 C 2.238281 -1.222656 2.753906 -0.796875 3.484375 -0.796875 Z M 3.484375 -0.796875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke: none;" d="M 0.40625 0 C 0.445312 -0.78125 0.609375 -1.457031 0.890625 -2.03125 C 1.171875 -2.613281 1.71875 -3.140625 2.53125 -3.609375 L 3.75 -4.3125 C 4.289062 -4.625 4.671875 -4.894531 4.890625 -5.125 C 5.234375 -5.46875 5.40625 -5.867188 5.40625 -6.328125 C 5.40625 -6.847656 5.242188 -7.265625 4.921875 -7.578125 C 4.609375 -7.890625 4.191406 -8.046875 3.671875 -8.046875 C 2.890625 -8.046875 2.347656 -7.75 2.046875 -7.15625 C 1.890625 -6.84375 1.800781 -6.40625 1.78125 -5.84375 L 0.625 -5.84375 C 0.632812 -6.632812 0.78125 -7.273438 1.0625 -7.765625 C 1.550781 -8.648438 2.421875 -9.09375 3.671875 -9.09375 C 4.710938 -9.09375 5.472656 -8.8125 5.953125 -8.25 C 6.429688 -7.6875 6.671875 -7.0625 6.671875 -6.375 C 6.671875 -5.644531 6.414062 -5.023438 5.90625 -4.515625 C 5.601562 -4.210938 5.070312 -3.847656 4.3125 -3.421875 L 3.453125 -2.953125 C 3.035156 -2.722656 2.707031 -2.503906 2.46875 -2.296875 C 2.050781 -1.929688 1.785156 -1.523438 1.671875 -1.078125 L 6.625 -1.078125 L 6.625 0 L 0.40625 0 Z M 0.40625 0 "/>
</symbol>
<symbol overflow="visible" id="glyph1-0">
<path style="stroke: none;" d="M 0.640625 0 L 0.640625 -14.296875 L 11.984375 -14.296875 L 11.984375 0 L 0.640625 0 Z M 10.1875 -1.796875 L 10.1875 -12.5 L 2.4375 -12.5 L 2.4375 -1.796875 L 10.1875 -1.796875 Z M 10.1875 -1.796875 "/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke: none;" d="M 0.296875 -10.421875 L 2.5625 -10.421875 L 4.953125 -6.75 L 7.375 -10.421875 L 9.5 -10.375 L 5.984375 -5.34375 L 9.65625 0 L 7.421875 0 L 4.828125 -3.90625 L 2.328125 0 L 0.109375 0 L 3.78125 -5.34375 L 0.296875 -10.421875 Z M 0.296875 -10.421875 "/>
</symbol>
<symbol overflow="visible" id="glyph2-0">
<path style="stroke: none;" d="M 0.453125 0 L 0.453125 -10 L 8.390625 -10 L 8.390625 0 L 0.453125 0 Z M 7.125 -1.25 L 7.125 -8.75 L 1.703125 -8.75 L 1.703125 -1.25 L 7.125 -1.25 Z M 7.125 -1.25 "/>
</symbol>
<symbol overflow="visible" id="glyph2-1">
<path style="stroke: none;" d="M 1.328125 -6.90625 L 1.328125 -7.84375 C 2.210938 -7.925781 2.828125 -8.066406 3.171875 -8.265625 C 3.523438 -8.472656 3.789062 -8.953125 3.96875 -9.703125 L 4.9375 -9.703125 L 4.9375 0 L 3.625 0 L 3.625 -6.90625 L 1.328125 -6.90625 Z M 1.328125 -6.90625 "/>
</symbol>
<symbol overflow="visible" id="glyph2-2">
<path style="stroke: none;" d="M 0.4375 0 C 0.476562 -0.84375 0.648438 -1.570312 0.953125 -2.1875 C 1.253906 -2.8125 1.84375 -3.378906 2.71875 -3.890625 L 4.03125 -4.640625 C 4.613281 -4.984375 5.023438 -5.273438 5.265625 -5.515625 C 5.628906 -5.890625 5.8125 -6.320312 5.8125 -6.8125 C 5.8125 -7.375 5.640625 -7.820312 5.296875 -8.15625 C 4.960938 -8.488281 4.515625 -8.65625 3.953125 -8.65625 C 3.109375 -8.65625 2.523438 -8.335938 2.203125 -7.703125 C 2.035156 -7.359375 1.941406 -6.882812 1.921875 -6.28125 L 0.671875 -6.28125 C 0.679688 -7.132812 0.835938 -7.828125 1.140625 -8.359375 C 1.671875 -9.304688 2.609375 -9.78125 3.953125 -9.78125 C 5.066406 -9.78125 5.878906 -9.476562 6.390625 -8.875 C 6.910156 -8.269531 7.171875 -7.597656 7.171875 -6.859375 C 7.171875 -6.078125 6.894531 -5.410156 6.34375 -4.859375 C 6.03125 -4.535156 5.460938 -4.144531 4.640625 -3.6875 L 3.703125 -3.171875 C 3.265625 -2.921875 2.914062 -2.6875 2.65625 -2.46875 C 2.207031 -2.070312 1.921875 -1.632812 1.796875 -1.15625 L 7.125 -1.15625 L 7.125 0 L 0.4375 0 Z M 0.4375 0 "/>
</symbol>
<symbol overflow="visible" id="glyph2-3">
<path style="stroke: none;" d="M 3.625 0.265625 C 2.46875 0.265625 1.628906 -0.0507812 1.109375 -0.6875 C 0.585938 -1.320312 0.328125 -2.09375 0.328125 -3 L 1.609375 -3 C 1.660156 -2.363281 1.78125 -1.90625 1.96875 -1.625 C 2.28125 -1.101562 2.851562 -0.84375 3.6875 -0.84375 C 4.332031 -0.84375 4.847656 -1.015625 5.234375 -1.359375 C 5.628906 -1.710938 5.828125 -2.160156 5.828125 -2.703125 C 5.828125 -3.367188 5.617188 -3.835938 5.203125 -4.109375 C 4.796875 -4.378906 4.226562 -4.515625 3.5 -4.515625 C 3.414062 -4.515625 3.332031 -4.507812 3.25 -4.5 C 3.164062 -4.5 3.082031 -4.5 3 -4.5 L 3 -5.578125 C 3.125 -5.566406 3.226562 -5.554688 3.3125 -5.546875 C 3.394531 -5.546875 3.488281 -5.546875 3.59375 -5.546875 C 4.050781 -5.546875 4.425781 -5.617188 4.71875 -5.765625 C 5.238281 -6.015625 5.5 -6.46875 5.5 -7.125 C 5.5 -7.613281 5.328125 -7.988281 4.984375 -8.25 C 4.640625 -8.507812 4.238281 -8.640625 3.78125 -8.640625 C 2.957031 -8.640625 2.390625 -8.367188 2.078125 -7.828125 C 1.910156 -7.523438 1.816406 -7.097656 1.796875 -6.546875 L 0.578125 -6.546875 C 0.578125 -7.273438 0.722656 -7.890625 1.015625 -8.390625 C 1.515625 -9.304688 2.390625 -9.765625 3.640625 -9.765625 C 4.640625 -9.765625 5.410156 -9.539062 5.953125 -9.09375 C 6.492188 -8.65625 6.765625 -8.015625 6.765625 -7.171875 C 6.765625 -6.578125 6.601562 -6.09375 6.28125 -5.71875 C 6.082031 -5.488281 5.828125 -5.304688 5.515625 -5.171875 C 6.023438 -5.035156 6.421875 -4.765625 6.703125 -4.359375 C 6.992188 -3.953125 7.140625 -3.460938 7.140625 -2.890625 C 7.140625 -1.953125 6.832031 -1.191406 6.21875 -0.609375 C 5.613281 -0.0234375 4.75 0.265625 3.625 0.265625 Z M 3.625 0.265625 "/>
</symbol>
<symbol overflow="visible" id="glyph2-4">
<path style="stroke: none;" d="M 4.609375 -3.453125 L 4.609375 -7.859375 L 1.484375 -3.453125 L 4.609375 -3.453125 Z M 4.625 0 L 4.625 -2.375 L 0.359375 -2.375 L 0.359375 -3.578125 L 4.8125 -9.765625 L 5.859375 -9.765625 L 5.859375 -3.453125 L 7.28125 -3.453125 L 7.28125 -2.375 L 5.859375 -2.375 L 5.859375 0 L 4.625 0 Z M 4.625 0 "/>
</symbol>
<symbol overflow="visible" id="glyph3-0">
<path style="stroke: none;" d="M 0 -0.640625 L -14.296875 -0.640625 L -14.296875 -11.984375 L 0 -11.984375 L 0 -0.640625 Z M -1.796875 -10.1875 L -12.5 -10.1875 L -12.5 -2.4375 L -1.796875 -2.4375 L -1.796875 -10.1875 Z M -1.796875 -10.1875 "/>
</symbol>
<symbol overflow="visible" id="glyph3-1">
<path style="stroke: none;" d="M -10.421875 -7.796875 L -10.421875 -9.734375 C -9.753906 -9.484375 -8.226562 -8.929688 -5.84375 -8.078125 C -4.050781 -7.441406 -2.59375 -6.910156 -1.46875 -6.484375 C 1.1875 -5.472656 2.804688 -4.757812 3.390625 -4.34375 C 3.972656 -3.925781 4.265625 -3.210938 4.265625 -2.203125 C 4.265625 -1.960938 4.253906 -1.773438 4.234375 -1.640625 C 4.222656 -1.503906 4.191406 -1.335938 4.140625 -1.140625 L 2.53125 -1.140625 C 2.625 -1.453125 2.675781 -1.675781 2.6875 -1.8125 C 2.707031 -1.945312 2.71875 -2.066406 2.71875 -2.171875 C 2.71875 -2.492188 2.664062 -2.726562 2.5625 -2.875 C 2.457031 -3.03125 2.328125 -3.160156 2.171875 -3.265625 C 2.117188 -3.296875 1.851562 -3.410156 1.375 -3.609375 C 0.894531 -3.816406 0.535156 -3.96875 0.296875 -4.0625 L -10.421875 -0.203125 L -10.421875 -2.1875 L -1.9375 -4.984375 L -10.421875 -7.796875 Z M -10.671875 -4.96875 L -10.671875 -4.96875 Z M -10.671875 -4.96875 "/>
</symbol>
<symbol overflow="visible" id="glyph4-0">
<path style="stroke: none;" d="M 0 -0.453125 L -10 -0.453125 L -10 -8.390625 L 0 -8.390625 L 0 -0.453125 Z M -1.25 -7.125 L -8.75 -7.125 L -8.75 -1.703125 L -1.25 -1.703125 L -1.25 -7.125 Z M -1.25 -7.125 "/>
</symbol>
<symbol overflow="visible" id="glyph4-1">
<path style="stroke: none;" d="M -6.90625 -1.328125 L -7.84375 -1.328125 C -7.925781 -2.210938 -8.066406 -2.828125 -8.265625 -3.171875 C -8.472656 -3.523438 -8.953125 -3.789062 -9.703125 -3.96875 L -9.703125 -4.9375 L 0 -4.9375 L 0 -3.625 L -6.90625 -3.625 L -6.90625 -1.328125 Z M -6.90625 -1.328125 "/>
</symbol>
<symbol overflow="visible" id="glyph4-2">
<path style="stroke: none;" d="M 0 -0.4375 C -0.84375 -0.476562 -1.570312 -0.648438 -2.1875 -0.953125 C -2.8125 -1.253906 -3.378906 -1.84375 -3.890625 -2.71875 L -4.640625 -4.03125 C -4.984375 -4.613281 -5.273438 -5.023438 -5.515625 -5.265625 C -5.890625 -5.628906 -6.320312 -5.8125 -6.8125 -5.8125 C -7.375 -5.8125 -7.820312 -5.640625 -8.15625 -5.296875 C -8.488281 -4.960938 -8.65625 -4.515625 -8.65625 -3.953125 C -8.65625 -3.109375 -8.335938 -2.523438 -7.703125 -2.203125 C -7.359375 -2.035156 -6.882812 -1.941406 -6.28125 -1.921875 L -6.28125 -0.671875 C -7.132812 -0.679688 -7.828125 -0.835938 -8.359375 -1.140625 C -9.304688 -1.671875 -9.78125 -2.609375 -9.78125 -3.953125 C -9.78125 -5.066406 -9.476562 -5.878906 -8.875 -6.390625 C -8.269531 -6.910156 -7.597656 -7.171875 -6.859375 -7.171875 C -6.078125 -7.171875 -5.410156 -6.894531 -4.859375 -6.34375 C -4.535156 -6.03125 -4.144531 -5.460938 -3.6875 -4.640625 L -3.171875 -3.703125 C -2.921875 -3.265625 -2.6875 -2.914062 -2.46875 -2.65625 C -2.070312 -2.207031 -1.632812 -1.921875 -1.15625 -1.796875 L -1.15625 -7.125 L 0 -7.125 L 0 -0.4375 Z M 0 -0.4375 "/>
</symbol>
<symbol overflow="visible" id="glyph4-3">
<path style="stroke: none;" d="M 0.265625 -3.625 C 0.265625 -2.46875 -0.0507812 -1.628906 -0.6875 -1.109375 C -1.320312 -0.585938 -2.09375 -0.328125 -3 -0.328125 L -3 -1.609375 C -2.363281 -1.660156 -1.90625 -1.78125 -1.625 -1.96875 C -1.101562 -2.28125 -0.84375 -2.851562 -0.84375 -3.6875 C -0.84375 -4.332031 -1.015625 -4.847656 -1.359375 -5.234375 C -1.710938 -5.628906 -2.160156 -5.828125 -2.703125 -5.828125 C -3.367188 -5.828125 -3.835938 -5.617188 -4.109375 -5.203125 C -4.378906 -4.796875 -4.515625 -4.226562 -4.515625 -3.5 C -4.515625 -3.414062 -4.507812 -3.332031 -4.5 -3.25 C -4.5 -3.164062 -4.5 -3.082031 -4.5 -3 L -5.578125 -3 C -5.566406 -3.125 -5.554688 -3.226562 -5.546875 -3.3125 C -5.546875 -3.394531 -5.546875 -3.488281 -5.546875 -3.59375 C -5.546875 -4.050781 -5.617188 -4.425781 -5.765625 -4.71875 C -6.015625 -5.238281 -6.46875 -5.5 -7.125 -5.5 C -7.613281 -5.5 -7.988281 -5.328125 -8.25 -4.984375 C -8.507812 -4.640625 -8.640625 -4.238281 -8.640625 -3.78125 C -8.640625 -2.957031 -8.367188 -2.390625 -7.828125 -2.078125 C -7.523438 -1.910156 -7.097656 -1.816406 -6.546875 -1.796875 L -6.546875 -0.578125 C -7.273438 -0.578125 -7.890625 -0.722656 -8.390625 -1.015625 C -9.304688 -1.515625 -9.765625 -2.390625 -9.765625 -3.640625 C -9.765625 -4.640625 -9.539062 -5.410156 -9.09375 -5.953125 C -8.65625 -6.492188 -8.015625 -6.765625 -7.171875 -6.765625 C -6.578125 -6.765625 -6.09375 -6.601562 -5.71875 -6.28125 C -5.488281 -6.082031 -5.304688 -5.828125 -5.171875 -5.515625 C -5.035156 -6.023438 -4.765625 -6.421875 -4.359375 -6.703125 C -3.953125 -6.992188 -3.460938 -7.140625 -2.890625 -7.140625 C -1.953125 -7.140625 -1.191406 -6.832031 -0.609375 -6.21875 C -0.0234375 -5.613281 0.265625 -4.75 0.265625 -3.625 Z M 0.265625 -3.625 "/>
</symbol>
<symbol overflow="visible" id="glyph4-4">
<path style="stroke: none;" d="M -3.453125 -4.609375 L -7.859375 -4.609375 L -3.453125 -1.484375 L -3.453125 -4.609375 Z M 0 -4.625 L -2.375 -4.625 L -2.375 -0.359375 L -3.578125 -0.359375 L -9.765625 -4.8125 L -9.765625 -5.859375 L -3.453125 -5.859375 L -3.453125 -7.28125 L -2.375 -7.28125 L -2.375 -5.859375 L 0 -5.859375 L 0 -4.625 Z M 0 -4.625 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 65.734375 29.878906 L 367.117188 29.878906 L 367.117188 223.261719 L 65.734375 223.261719 Z M 65.734375 29.878906 "/>
</clipPath>
<clipPath id="clip2">
<path d="M 0 0 L 793 0 L 793 577 L 0 577 Z M 0 0 "/>
</clipPath>
<clipPath id="clip3">
<path d="M 0 0 L 397 0 L 397 289 L 0 289 Z M 0 0 "/>
</clipPath>
<clipPath id="clip4">
<path d="M 65.734375 29.878906 L 367.117188 29.878906 L 367.117188 223.261719 L 65.734375 223.261719 Z M 65.734375 29.878906 "/>
</clipPath>
<clipPath id="clip5">
<path d="M 461.734375 29.878906 L 763.117188 29.878906 L 763.117188 223.261719 L 461.734375 223.261719 Z M 461.734375 29.878906 "/>
</clipPath>
<clipPath id="clip6">
<path d="M 0 0 L 793 0 L 793 577 L 0 577 Z M 0 0 "/>
</clipPath>
<clipPath id="clip7">
<path d="M 396 0 L 793 0 L 793 289 L 396 289 Z M 396 0 "/>
</clipPath>
<clipPath id="clip8">
<path d="M 461.734375 29.878906 L 763.117188 29.878906 L 763.117188 223.261719 L 461.734375 223.261719 Z M 461.734375 29.878906 "/>
</clipPath>
<clipPath id="clip9">
<path d="M 65.734375 317.878906 L 367.117188 317.878906 L 367.117188 511.261719 L 65.734375 511.261719 Z M 65.734375 317.878906 "/>
</clipPath>
<clipPath id="clip10">
<path d="M 0 0 L 793 0 L 793 577 L 0 577 Z M 0 0 "/>
</clipPath>
<clipPath id="clip11">
<path d="M 0 288 L 397 288 L 397 577 L 0 577 Z M 0 288 "/>
</clipPath>
<clipPath id="clip12">
<path d="M 65.734375 317.878906 L 367.117188 317.878906 L 367.117188 511.261719 L 65.734375 511.261719 Z M 65.734375 317.878906 "/>
</clipPath>
<clipPath id="clip13">
<path d="M 461.734375 317.878906 L 763.117188 317.878906 L 763.117188 511.261719 L 461.734375 511.261719 Z M 461.734375 317.878906 "/>
</clipPath>
<clipPath id="clip14">
<path d="M 0 0 L 793 0 L 793 577 L 0 577 Z M 0 0 "/>
</clipPath>
<clipPath id="clip15">
<path d="M 396 288 L 793 288 L 793 577 L 396 577 Z M 396 288 "/>
</clipPath>
<clipPath id="clip16">
<path d="M 461.734375 317.878906 L 763.117188 317.878906 L 763.117188 511.261719 L 461.734375 511.261719 Z M 461.734375 317.878906 "/>
</clipPath>
</defs>
<g id="surface0">
<rect x="0" y="0" width="792" height="576" style="fill: rgb(100%,100%,100%); fill-opacity: 1; stroke: none;"/>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 203.921875 125.359375 C 203.921875 132.53125 193.167969 132.53125 193.167969 125.359375 C 193.167969 118.1875 203.921875 118.1875 203.921875 125.359375 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 169.15625 144.777344 C 169.15625 151.945312 158.398438 151.945312 158.398438 144.777344 C 158.398438 137.605469 169.15625 137.605469 169.15625 144.777344 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 256.074219 133.554688 C 256.074219 140.726562 245.316406 140.726562 245.316406 133.554688 C 245.316406 126.382812 256.074219 126.382812 256.074219 133.554688 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 186.539062 111.644531 C 186.539062 118.8125 175.78125 118.8125 175.78125 111.644531 C 175.78125 104.472656 186.539062 104.472656 186.539062 111.644531 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 221.304688 120.195312 C 221.304688 127.363281 210.550781 127.363281 210.550781 120.195312 C 210.550781 113.023438 221.304688 113.023438 221.304688 120.195312 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 273.457031 91.15625 C 273.457031 98.328125 262.699219 98.328125 262.699219 91.15625 C 262.699219 83.988281 273.457031 83.988281 273.457031 91.15625 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 134.390625 139.609375 C 134.390625 146.78125 123.632812 146.78125 123.632812 139.609375 C 123.632812 132.4375 134.390625 132.4375 134.390625 139.609375 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 99.625 192.695312 C 99.625 199.863281 88.867188 199.863281 88.867188 192.695312 C 88.867188 185.523438 99.625 185.523438 99.625 192.695312 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 238.691406 75.480469 C 238.691406 82.652344 227.933594 82.652344 227.933594 75.480469 C 227.933594 68.3125 238.691406 68.3125 238.691406 75.480469 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 151.773438 182.71875 C 151.773438 189.890625 141.015625 189.890625 141.015625 182.71875 C 141.015625 175.546875 151.773438 175.546875 151.773438 182.71875 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 117.007812 167.398438 C 117.007812 174.570312 106.25 174.570312 106.25 167.398438 C 106.25 160.226562 117.007812 160.226562 117.007812 167.398438 "/>
</g>
<g clip-path="url(#clip2)" clip-rule="nonzero">
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 94.246094 222.265625 L 337.613281 222.265625 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 94.246094 222.265625 L 94.246094 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 129.011719 222.265625 L 129.011719 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 163.777344 222.265625 L 163.777344 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 198.542969 222.265625 L 198.542969 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 233.3125 222.265625 L 233.3125 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 268.078125 222.265625 L 268.078125 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 302.84375 222.265625 L 302.84375 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 337.613281 222.265625 L 337.613281 228.238281 "/>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-1" x="90.644531" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-2" x="125.410156" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-3" x="160.175781" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="191.339844" y="244.972656"/>
<use xlink:href="#glyph0-5" x="198.543762" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="226.109375" y="244.972656"/>
<use xlink:href="#glyph0-6" x="233.313293" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="260.875" y="244.972656"/>
<use xlink:href="#glyph0-1" x="268.078918" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="295.640625" y="244.972656"/>
<use xlink:href="#glyph0-2" x="302.844543" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="330.410156" y="244.972656"/>
<use xlink:href="#glyph0-3" x="337.614075" y="244.972656"/>
</g>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 197.324219 L 65.734375 54.820312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 197.324219 L 59.761719 197.324219 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 161.699219 L 59.761719 161.699219 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 126.070312 L 59.761719 126.070312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 90.445312 L 59.761719 90.445312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 54.820312 L 59.761719 54.820312 "/>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-1" x="46.582031" y="201.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-2" x="46.582031" y="166.347656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-3" x="46.582031" y="130.71875"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="39.378906" y="95.09375"/>
<use xlink:href="#glyph0-5" x="46.582825" y="95.09375"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="39.378906" y="59.46875"/>
<use xlink:href="#glyph0-6" x="46.582825" y="59.46875"/>
</g>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 222.265625 L 65.734375 222.265625 L 366.121094 222.265625 L 366.121094 29.878906 L 65.734375 29.878906 L 65.734375 222.265625 "/>
</g>
<g clip-path="url(#clip3)" clip-rule="nonzero">
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph1-1" x="207.070312" y="266.425781"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph2-1" x="217.03125" y="270.070312"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph3-1" x="25.613281" y="134.929688"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph4-1" x="29.261719" y="124.96875"/>
</g>
</g>
<g clip-path="url(#clip4)" clip-rule="nonzero">
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,100%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 194.113281 L 366.121094 40.179688 "/>
</g>
<g clip-path="url(#clip5)" clip-rule="nonzero">
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 599.921875 105.765625 C 599.921875 112.9375 589.167969 112.9375 589.167969 105.765625 C 589.167969 98.59375 599.921875 98.59375 599.921875 105.765625 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 123.578125 C 565.15625 130.75 554.398438 130.75 554.398438 123.578125 C 554.398438 116.40625 565.15625 116.40625 565.15625 123.578125 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 652.074219 112.890625 C 652.074219 120.0625 641.316406 120.0625 641.316406 112.890625 C 641.316406 105.71875 652.074219 105.71875 652.074219 112.890625 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 582.539062 112.355469 C 582.539062 119.527344 571.78125 119.527344 571.78125 112.355469 C 571.78125 105.183594 582.539062 105.183594 582.539062 112.355469 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 617.304688 103.628906 C 617.304688 110.796875 606.550781 110.796875 606.550781 103.628906 C 606.550781 96.457031 617.304688 96.457031 617.304688 103.628906 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 669.457031 124.289062 C 669.457031 131.460938 658.699219 131.460938 658.699219 124.289062 C 658.699219 117.121094 669.457031 117.121094 669.457031 124.289062 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 530.390625 159.382812 C 530.390625 166.554688 519.632812 166.554688 519.632812 159.382812 C 519.632812 152.210938 530.390625 152.210938 530.390625 159.382812 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 495.625 213.355469 C 495.625 220.527344 484.867188 220.527344 484.867188 213.355469 C 484.867188 206.1875 495.625 206.1875 495.625 213.355469 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 634.691406 105.941406 C 634.691406 113.113281 623.933594 113.113281 623.933594 105.941406 C 623.933594 98.773438 634.691406 98.773438 634.691406 105.941406 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 547.773438 139.253906 C 547.773438 146.425781 537.015625 146.425781 537.015625 139.253906 C 537.015625 132.082031 547.773438 132.082031 547.773438 139.253906 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 513.007812 184.144531 C 513.007812 191.316406 502.25 191.316406 502.25 184.144531 C 502.25 176.972656 513.007812 176.972656 513.007812 184.144531 "/>
</g>
<g clip-path="url(#clip6)" clip-rule="nonzero">
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 490.246094 222.265625 L 733.613281 222.265625 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 490.246094 222.265625 L 490.246094 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 525.011719 222.265625 L 525.011719 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 559.777344 222.265625 L 559.777344 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 594.542969 222.265625 L 594.542969 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 629.3125 222.265625 L 629.3125 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 664.078125 222.265625 L 664.078125 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 698.84375 222.265625 L 698.84375 228.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 733.613281 222.265625 L 733.613281 228.238281 "/>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-1" x="486.644531" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-2" x="521.410156" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-3" x="556.175781" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="587.339844" y="244.972656"/>
<use xlink:href="#glyph0-5" x="594.543762" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="622.109375" y="244.972656"/>
<use xlink:href="#glyph0-6" x="629.313293" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="656.875" y="244.972656"/>
<use xlink:href="#glyph0-1" x="664.078918" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="691.640625" y="244.972656"/>
<use xlink:href="#glyph0-2" x="698.844543" y="244.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="726.410156" y="244.972656"/>
<use xlink:href="#glyph0-3" x="733.614075" y="244.972656"/>
</g>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 197.324219 L 461.734375 54.820312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 197.324219 L 455.761719 197.324219 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 161.699219 L 455.761719 161.699219 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 126.070312 L 455.761719 126.070312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 90.445312 L 455.761719 90.445312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 54.820312 L 455.761719 54.820312 "/>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-1" x="442.582031" y="201.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-2" x="442.582031" y="166.347656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-3" x="442.582031" y="130.71875"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="435.378906" y="95.09375"/>
<use xlink:href="#glyph0-5" x="442.582825" y="95.09375"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="435.378906" y="59.46875"/>
<use xlink:href="#glyph0-6" x="442.582825" y="59.46875"/>
</g>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 222.265625 L 461.734375 222.265625 L 762.121094 222.265625 L 762.121094 29.878906 L 461.734375 29.878906 L 461.734375 222.265625 "/>
</g>
<g clip-path="url(#clip7)" clip-rule="nonzero">
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph1-1" x="603.070312" y="266.425781"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph2-2" x="613.03125" y="270.070312"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph3-1" x="421.613281" y="134.929688"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph4-2" x="425.261719" y="124.96875"/>
</g>
</g>
<g clip-path="url(#clip8)" clip-rule="nonzero">
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,100%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 194.101562 L 762.121094 40.195312 "/>
</g>
<g clip-path="url(#clip9)" clip-rule="nonzero">
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 203.921875 423.691406 C 203.921875 430.863281 193.167969 430.863281 193.167969 423.691406 C 193.167969 416.519531 203.921875 416.519531 203.921875 423.691406 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 169.15625 435.980469 C 169.15625 443.152344 158.398438 443.152344 158.398438 435.980469 C 158.398438 428.8125 169.15625 428.8125 169.15625 435.980469 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 256.074219 329.636719 C 256.074219 336.808594 245.316406 336.808594 245.316406 329.636719 C 245.316406 322.464844 256.074219 322.464844 256.074219 329.636719 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 186.539062 429.925781 C 186.539062 437.097656 175.78125 437.097656 175.78125 429.925781 C 175.78125 422.753906 186.539062 422.753906 186.539062 429.925781 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 221.304688 417.457031 C 221.304688 424.628906 210.550781 424.628906 210.550781 417.457031 C 210.550781 410.285156 221.304688 410.285156 221.304688 417.457031 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 273.457031 399.109375 C 273.457031 406.28125 262.699219 406.28125 262.699219 399.109375 C 262.699219 391.9375 273.457031 391.9375 273.457031 399.109375 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 134.390625 448.273438 C 134.390625 455.445312 123.632812 455.445312 123.632812 448.273438 C 123.632812 441.101562 134.390625 441.101562 134.390625 448.273438 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 99.625 460.566406 C 99.625 467.734375 88.867188 467.734375 88.867188 460.566406 C 88.867188 453.394531 99.625 453.394531 99.625 460.566406 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 238.691406 411.398438 C 238.691406 418.570312 227.933594 418.570312 227.933594 411.398438 C 227.933594 404.230469 238.691406 404.230469 238.691406 411.398438 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 151.773438 442.21875 C 151.773438 449.386719 141.015625 449.386719 141.015625 442.21875 C 141.015625 435.046875 151.773438 435.046875 151.773438 442.21875 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 117.007812 454.507812 C 117.007812 461.679688 106.25 461.679688 106.25 454.507812 C 106.25 447.335938 117.007812 447.335938 117.007812 454.507812 "/>
</g>
<g clip-path="url(#clip10)" clip-rule="nonzero">
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 94.246094 510.265625 L 337.613281 510.265625 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 94.246094 510.265625 L 94.246094 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 129.011719 510.265625 L 129.011719 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 163.777344 510.265625 L 163.777344 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 198.542969 510.265625 L 198.542969 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 233.3125 510.265625 L 233.3125 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 268.078125 510.265625 L 268.078125 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 302.84375 510.265625 L 302.84375 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 337.613281 510.265625 L 337.613281 516.238281 "/>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-1" x="90.644531" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-2" x="125.410156" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-3" x="160.175781" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="191.339844" y="532.972656"/>
<use xlink:href="#glyph0-5" x="198.543762" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="226.109375" y="532.972656"/>
<use xlink:href="#glyph0-6" x="233.313293" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="260.875" y="532.972656"/>
<use xlink:href="#glyph0-1" x="268.078918" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="295.640625" y="532.972656"/>
<use xlink:href="#glyph0-2" x="302.844543" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="330.410156" y="532.972656"/>
<use xlink:href="#glyph0-3" x="337.614075" y="532.972656"/>
</g>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 485.324219 L 65.734375 342.820312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 485.324219 L 59.761719 485.324219 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 449.699219 L 59.761719 449.699219 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 414.070312 L 59.761719 414.070312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 378.445312 L 59.761719 378.445312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 342.820312 L 59.761719 342.820312 "/>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-1" x="46.582031" y="489.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-2" x="46.582031" y="454.347656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-3" x="46.582031" y="418.71875"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="39.378906" y="383.09375"/>
<use xlink:href="#glyph0-5" x="46.582825" y="383.09375"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="39.378906" y="347.46875"/>
<use xlink:href="#glyph0-6" x="46.582825" y="347.46875"/>
</g>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 510.265625 L 65.734375 510.265625 L 366.121094 510.265625 L 366.121094 317.878906 L 65.734375 317.878906 L 65.734375 510.265625 "/>
</g>
<g clip-path="url(#clip11)" clip-rule="nonzero">
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph1-1" x="207.070312" y="554.160156"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph2-3" x="217.03125" y="557.804688"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph3-1" x="25.613281" y="422.929688"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph4-3" x="29.261719" y="412.96875"/>
</g>
</g>
<g clip-path="url(#clip12)" clip-rule="nonzero">
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,100%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 65.734375 482.085938 L 366.121094 328.261719 "/>
</g>
<g clip-path="url(#clip13)" clip-rule="nonzero">
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 439.367188 C 565.15625 446.539062 554.398438 446.539062 554.398438 439.367188 C 554.398438 432.195312 565.15625 432.195312 565.15625 439.367188 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 453.972656 C 565.15625 461.144531 554.398438 461.144531 554.398438 453.972656 C 554.398438 446.800781 565.15625 446.800781 565.15625 453.972656 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 419.238281 C 565.15625 426.410156 554.398438 426.410156 554.398438 419.238281 C 554.398438 412.066406 565.15625 412.066406 565.15625 419.238281 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 399.109375 C 565.15625 406.28125 554.398438 406.28125 554.398438 399.109375 C 554.398438 391.9375 565.15625 391.9375 565.15625 399.109375 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 405.699219 C 565.15625 412.871094 554.398438 412.871094 554.398438 405.699219 C 554.398438 398.527344 565.15625 398.527344 565.15625 405.699219 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 431.171875 C 565.15625 438.34375 554.398438 438.34375 554.398438 431.171875 C 554.398438 424 565.15625 424 565.15625 431.171875 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 463.058594 C 565.15625 470.230469 554.398438 470.230469 554.398438 463.058594 C 554.398438 455.886719 565.15625 455.886719 565.15625 463.058594 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 756.375 333.910156 C 756.375 341.082031 745.617188 341.082031 745.617188 333.910156 C 745.617188 326.742188 756.375 326.742188 756.375 333.910156 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 457.535156 C 565.15625 464.707031 554.398438 464.707031 554.398438 457.535156 C 554.398438 450.367188 565.15625 450.367188 565.15625 457.535156 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 415.675781 C 565.15625 422.847656 554.398438 422.847656 554.398438 415.675781 C 554.398438 408.503906 565.15625 408.503906 565.15625 415.675781 "/>
<path style="fill-rule: nonzero; fill: rgb(100%,64.705882%,0%); fill-opacity: 1;stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(100%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 565.15625 433.84375 C 565.15625 441.015625 554.398438 441.015625 554.398438 433.84375 C 554.398438 426.671875 565.15625 426.671875 565.15625 433.84375 "/>
</g>
<g clip-path="url(#clip14)" clip-rule="nonzero">
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 490.246094 510.265625 L 733.613281 510.265625 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 490.246094 510.265625 L 490.246094 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 525.011719 510.265625 L 525.011719 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 559.777344 510.265625 L 559.777344 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 594.542969 510.265625 L 594.542969 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 629.3125 510.265625 L 629.3125 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 664.078125 510.265625 L 664.078125 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 698.84375 510.265625 L 698.84375 516.238281 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 733.613281 510.265625 L 733.613281 516.238281 "/>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-1" x="486.644531" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-2" x="521.410156" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-3" x="556.175781" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="587.339844" y="532.972656"/>
<use xlink:href="#glyph0-5" x="594.543762" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="622.109375" y="532.972656"/>
<use xlink:href="#glyph0-6" x="629.313293" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="656.875" y="532.972656"/>
<use xlink:href="#glyph0-1" x="664.078918" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="691.640625" y="532.972656"/>
<use xlink:href="#glyph0-2" x="698.844543" y="532.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="726.410156" y="532.972656"/>
<use xlink:href="#glyph0-3" x="733.614075" y="532.972656"/>
</g>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 485.324219 L 461.734375 342.820312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 485.324219 L 455.761719 485.324219 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 449.699219 L 455.761719 449.699219 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 414.070312 L 455.761719 414.070312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 378.445312 L 455.761719 378.445312 "/>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 342.820312 L 455.761719 342.820312 "/>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-1" x="442.582031" y="489.972656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-2" x="442.582031" y="454.347656"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-3" x="442.582031" y="418.71875"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="435.378906" y="383.09375"/>
<use xlink:href="#glyph0-5" x="442.582825" y="383.09375"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph0-4" x="435.378906" y="347.46875"/>
<use xlink:href="#glyph0-6" x="442.582825" y="347.46875"/>
</g>
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,0%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 510.265625 L 461.734375 510.265625 L 762.121094 510.265625 L 762.121094 317.878906 L 461.734375 317.878906 L 461.734375 510.265625 "/>
</g>
<g clip-path="url(#clip15)" clip-rule="nonzero">
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph1-1" x="603.070312" y="554.425781"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph2-4" x="613.03125" y="558.070312"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph3-1" x="421.613281" y="422.929688"/>
</g>
<g style="fill: rgb(0%,0%,0%); fill-opacity: 1;">
<use xlink:href="#glyph4-4" x="425.261719" y="412.96875"/>
</g>
</g>
<g clip-path="url(#clip16)" clip-rule="nonzero">
<path style="fill: none; stroke-width: 0.75; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0%,0%,100%); stroke-opacity: 1;stroke-miterlimit: 10; " d="M 461.734375 482.09375 L 762.121094 328.210938 "/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 KiB

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,341 @@
# 30239: Data Visualization for Policy Analysis
## James Turk
---
## Today
- What is the value of data visualization?
- Focus of this course
- Course Logistics
---
![infographic: a day in data](a-day-in-data.jpg)
<!--
Modern data visualization is largely a product of the sheer amount of data we produce.
-->
---
![data.gov](datagov.png)
<!--
In part this is a function of the digitization of most of our lives.
15 years ago there was no data.gov, it has added 300k data sets since then.
-->
---
![taxis](taxis.png)
<!--
As technology advances, our data gets to be incredibly fine grained.
This is a sample of ride share rides over a six year period. Each pixel is a pick up or drop off.
-->
---
OK, there is **a lot** of data, but isn't that a **good thing**?
---
"What information consumes is rather obvious: it consumes the attention of its recipients. Hence a wealth of information creates a poverty of attention, and a need to allocate that attention efficiently among the overabundance of information sources that might consume it."
~Herb Simon
_as quoted by Hal Varian. Scientific American, September 1995_
---
## What is Visualization?
“... finding the **artificial memory** that best supports our natural means of perception.”
_[Bertin 1967]_
“Transformation of the symbolic into the geometric”
_[McCormick et al. 1987]_
“The use of computer-generated, interactive, visual representations of data to **amplify cognition**.”
_[Card, Mackinlay, & Shneiderman 1999]_
---
## Information Visualization
"The use of computer-generated, interactive, visual representations of (abstract) data to **amplify cognition**."
What does it mean to amplify cognition?
Why do we often seek visualizations?
---
## Why do we create visualizations?
- What visualizations have you created?
- What visualizations have you seen that you remember?
---
## Reasons for Data Visualization
- Means of reasoning about large quantities without reduction/over-simplification.
- Assist in gaining unique insights into data: clustering, correlation, trends, etc.
- Deepen understanding, for ourselves or others.
---
### Four Samples
| x1 | y1 | x2 | y2 | x3 | y3 | x4 | y4 |
| ---- | ----- | ---- | ---- | ---- | ----- | ---- | ----- |
| 10.0 | 8.04 | 10.0 | 9.14 | 10.0 | 7.46 | 8.0 | 6.58 |
| 8.0 | 6.95 | 8.0 | 8.14 | 8.0 | 6.77 | 8.0 | 5.76 |
| 13.0 | 7.58 | 13.0 | 8.74 | 13.0 | 12.74 | 8.0 | 7.71 |
| 9.0 | 8.81 | 9.0 | 8.77 | 9.0 | 7.11 | 8.0 | 8.84 |
| 11.0 | 8.33 | 11.0 | 9.26 | 11.0 | 7.81 | 8.0 | 8.47 |
| 14.0 | 9.96 | 14.0 | 8.10 | 14.0 | 8.84 | 8.0 | 7.04 |
| 6.0 | 7.24 | 6.0 | 6.13 | 6.0 | 6.08 | 8.0 | 5.25 |
| 4.0 | 4.26 | 4.0 | 3.10 | 4.0 | 5.39 | 19.0 | 12.50 |
| 12.0 | 10.84 | 12.0 | 9.13 | 12.0 | 8.15 | 8.0 | 5.56 |
| 7.0 | 4.82 | 7.0 | 7.26 | 7.0 | 6.42 | 8.0 | 7.91 |
| 5.0 | 5.68 | 5.0 | 4.74 | 5.0 | 5.73 | 8.0 | 6.89 |
What sense can we make of this?
---
| | Sample 1 | Sample 2 | Sample 3 | Sample 4 |
| ----------------------- | ----------------- | ----------------- | ----------------- | ----------------- |
| Mean of x | 9 | 9 | 9 | 9 |
| Variance of x | 11 | 11 | 11 | 11 |
| Mean of y | 7.50 | 7.50 | 7.50 | 7.50 |
| Variance of y (±0.003 ) | 4.125 | 4.125 | 4.125 | 4.125 |
| Correlation x & y | 0.816 | 0.816 | 0.816 | 0.816 |
| Linear Regression | y = 3.00 + 0.500x | y = 3.00 + 0.500x | y = 3.00 + 0.500x | y = 3.00 + 0.500x |
| R² coefficient | 0.67 | 0.67 | 0.67 | 0.67 |
---
![Anscombe's quartet](anscome.svg)
---
Our understanding of the data is enhanced by these visualizations in a way summary statistics won't capture.
What things are easier to see?
---
## Benefits of Visualizing Data
- outliers
- "shape of data"
- clusters
- _intuition_ and _questions_ - "why is it like that?"
- tap into human capacity for pattern recognition
- often easier to test theories or models
_exploratory visualization_
---
## Explanatory Visualization
- Highlight interesting findings
- Tell a story
- Present a thesis
- Persuade
- Support larger story/argument
- Inspire
---
## Visualizations and Policy
Visualizations have an outsized influence on human cognition, we seem to trust images more than words.
This means that visualizations can be used to **persuade**, but also **mislead**.
There does not need to be intention, we can easily deceive ourselves without realizing it.
---
![](rockets_chart.png)
<!-- images from presentation on O-ring temperature anomaly -->
---
![bg](challenger.jpg)
![bg](feynman.jpg)
<!-- the result -->
---
![](cholera.jpg)
<!-- Cholera outbreak. London, 1854. John Snow. -->
---
## Data Visualization for Policy Analysis
---
## Course Goals
- Understand & appreciate what makes a good data visualization.
- Learn practical visualization techniques that will apply in any language & library.
- Build a portfolio of static & interactive visualizations using real-world policy data.
- Gain exposure to useful libraries in Python and JavaScript.
---
## Topics
- Fundamentals, Grammar of Graphics
- Design principles. How to use color, human perception, chart design.
- How to evaluate and critique visualizations.
- Uncertainty & Narrative
- HTML/CSS/JS overview
- D3.js
- Interactive & non-chart data visualization.
- Geospatial visualization
- Special Topics: to be discussed
---
## Programming Workload
Key Idea: You get better at visualizations by making *a lot* of them. (20-30 this quarter)
- Expect to write code every week, mostly fairly short Python functions.
- You will be learning at least one library (Altair) mostly independently.
- You'll also need to be comfortable with `pandas` or `polars`.
### JavaScript and D3
*"You aren't going to make them learn D3 are you?"*
- 1 Assignment
- 1-2 Lectures
Final project will have a place where D3 will be helpful, but other options will be presented.
After introductory lecture, some examples will continue to be in D3, but you will not need to understand their inner workings.
<!--
It has however, become a "library's library" in some ways. Most developers interact with d3 through a higher-level interface.
We will be learning Altair, which generates Vega JSON, which in turn is drawn using D3.
D3 underpins dozens of other charting libraries as well, and D3's own documentation says:
D3 makes things possible, not necessarily easy; even simple things that should be easy are often not. To paraphrase Amanda Cox: “Use D3 if you think its perfectly normal to write a hundred lines of code for a bar chart.”
Learning D3 both requires working in an unfamiliar environment (JavaScript) and with a very unique style of programming based around their concept of the ["data join"](https://d3js.org/d3-selection/joining), which requires a decent understanding of the HTML Document Object Model.
So, if you are here to learn visualization, I think that it is fair that you can succeed in this class without putting yourself through that.
-->
---
## Course Structure
- **Lecture and Discussion**: Introduce and explore key concepts, mostly focused on theory.
- **Readings**: Supplement course materials with more examples, technical tutorials.
- **2 "minor" assignments: Altair & D3** - Gain practice with commonly used tools in a structured setting.
- **Projects**: Learn to explore a topic on your own from conception to practice. Leave here with a portfolio you can show off.
---
## Course Staff
- James Turk
- TODO
**All official information will be on the course site and/or Ed as appropriate.**
---
## Projects
| | Static | Interactive |
| -------------- | ------ | ----------- |
| Proposal | Week 1 | Week 6 |
| Feedback Draft | Week 3 | Week 8 |
| Peer Critique | Week 4 | Week 9 |
| Final | Week 5 | Week 10 |
## Practice Assignments
- Altair (Week 2)
- D3 (Week 6)
---
## Grading
15 SNU grades
**Completion:** 9 (2x Proposals, Drafts & Critiques + 2 Labs + 1 Participation)
**Quality Grades:** 6 (2x Design, Narrative, Code Quality)
---
## AI Policy
In this course, all usage of generative AI must be *fully cited*.
Details on specific rules: <https://capp30239.netlify.app/policies/ai/>
You are, as always, expected to turn in **your own work**, not the work of an LLM.
---
## Static Visualization Project
<https://capp30239.netlify.app/coursework/static/>
**End Product**
Using real data of your choosing:
- 8-12 distinct images, of at least 5 different types.
- Presented as part of a **narrative**: an article, infographic, poster.
- Cohesive visual design: custom theme for graphs, matching colors and fonts with supplementary material.
Use of Altair is **strongly** recommended, but other libraries allowed.
---
## Examples
<https://capp-30239-winter-2021.netlify.app/#staticShowcase>
---
## Milestones
- Milestone 1 (Week 1): Draft proposal.
- Milestone 2 (Week 3): Draft of 8 visualizations for review & critique.
- Milestone 3 (Week 4): Peer Critique
- Milestone 4 (Week 5): Final Deliverable
---
## Acknowledgements
Thanks to Alex Hale, Andrew McNutt, and Jessica Hullman for sharing their materials.
[Why Is Data Visualization Important? What Is Important in Data Visualization?](https://hdsr.mitpress.mit.edu/pub/zok97i7p/release/4) - An tony Unwin

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

@ -0,0 +1,226 @@
import marimo
__generated_with = "0.8.20"
app = marimo.App(width="medium")
@app.cell
def __():
import marimo as mo
import altair as alt
import polars as pl
from pathlib import Path
return Path, alt, mo, pl
@app.cell
def __(mo):
mo.md(
"""
## Tidy Data
Altair expects our data to be [tidy](http://vita.had.co.nz/papers/tidy-data.html).
- Each variable is a column.
- Each observation is a row.
- Each type of observational unit is a table.
You can use `pandas` or `polars` DataFrames.
"""
)
return
@app.cell
def __(Path, __file__, pl):
# first let's load and look at a dataframe with three columns
# there is an observation for each state legislature, showing how many bills they introduced in a given year
df = pl.read_csv(Path(__file__).parent / "midwest_bills.csv")
# (having a dataframe or chart as the last line in a notebook cell will automatically display it)
df
return (df,)
@app.cell
def __(alt, df):
# Let's make our own charts of this dat, first we bind the data to a new chart object
chart = alt.Chart(df)
return (chart,)
@app.cell
def __(chart):
# we add a geometry, we'll start with a point (at this point *something* can be displayed, but it won't be useful)
chart.mark_point()
return
@app.cell
def __(chart):
# We use encodings to map our data to particular dimensions.
# Altair will make then make appropriate choices based upon the type of data.
chart.mark_point().encode(
y="state",
x="num_bills"
)
return
@app.cell
def __():
return
@app.cell
def __(alt, chart):
# what happens when we try to add color?
chart.mark_point().encode(
alt.Y("state"),
alt.X("num_bills"),
alt.Color("session_start_year"),
)
return
@app.cell
def __(alt, chart):
# the prior example treated year as an Ordinal because it was numeric
# instead we would treat it as Nominal for this data
# we can use :Q, :O, :N, :T to mark the type that should be used
by_year = chart.mark_point().encode(
alt.Y("state:N"),
alt.X("num_bills:Q"),
alt.Color("session_start_year:N"),
)
# we're saving this one for later
by_year
return (by_year,)
@app.cell
def __(alt, chart):
# Here we make a different chart from the same base data
# by re-using our `chart` variable.
#
# We choose a different shape (parameters that don't need to vary can be passed into the mark_* functions)
# We also use an aggregate function average(num_bills)
avgs = chart.mark_point(shape="wedge", color="black").encode(
alt.Y("state"),
alt.X("average(num_bills)"),
)
avgs
return (avgs,)
@app.cell
def __(avgs, by_year):
# two charts with compatible data can be layered with +
by_year + avgs
return
@app.cell
def __(alt, by_year, chart):
# perhaps we don't want to use mark_point anymore, maybe a bar?
bar_avgs = chart.mark_bar(color="#ccc").encode(
alt.Y("state"),
alt.X("average(num_bills)"),
)
bar_avgs + by_year
return (bar_avgs,)
@app.cell
def __(alt, chart):
# We can customize titles and other details by using `.title` and `.properties`
# the latter sets chart-wide properties.
final = chart.mark_point(shape="diamond").encode(
alt.Y("state:N"),
alt.X("num_bills:Q"),
alt.Color("session_start_year:N").title("Session Year"),
) + chart.mark_bar(color="#70905050").encode(
alt.Y("state"),
alt.X("average(num_bills)").title("Number of Bills Introduced"),
)
final.properties(
title='Midwest Bills by State',
background='#f5f5dc'
)
return (final,)
@app.cell
def __(alt, chart):
# Let's say we instead want to see if there are trends by year.
# create a new chart object with year on the X-axis, and bills on the Y-axis
# Also, make the chart print/colorblind friendly by encoding state in multiple ways.
new_chart = chart.mark_point().encode(
alt.Y("num_bills"),
alt.X("session_start_year:N"),
alt.Color("state"),
alt.Shape("state"),
)
new_chart.properties(
title='Midwest Bills by Year',
background='#f5f5dc'
)
return (new_chart,)
@app.cell
def __(mo):
mo.md(
"""
### Recommended Reading
Altair Tutorial
- Specifying Data (you can stop when you hit 'Generated Data')
- Encodings
- Encodings -> Channels (skim Channel Options)
- Marks (skim a few of the mark guides, including Bar & Point)
- Data Transformations (skim a few, including Regression)
- Layered and Multi-View Charts
- Customizing Visualizations
Once you've read the above you have the core ideas of Altair.
The remaining sections are useful as reference, and as you use Altair you will find your way to them as you ask yourself questions like "how do I work with geospatial data" or "how can I combine these axes"?
The other common thing you will use the documentation for is "what arguments can I pass to this?"
For that, use the [API Reference](https://altair-viz.github.io/user_guide/api.html) and find the class you're working with.
Example:
- Let's say we want to adjust the color scheme, start with <https://altair-viz.github.io/user_guide/generated/channels/altair.Color.html>
- Note that it can take a scale, and click to <https://altair-viz.github.io/user_guide/generated/core/altair.Scale.html#altair.Scale>
"""
)
return
@app.cell
def __(alt, chart):
color_scheme = alt.Scale(scheme="set2")
chart.mark_line().encode(
alt.Y("num_bills"),
alt.X("session_start_year:N"),
alt.Color("state", scale=color_scheme),
) + chart.mark_point().encode(
alt.Y("num_bills").title("Bills Introduced"),
alt.X("session_start_year:N").title("Session Year"),
alt.Color("state", scale=color_scheme),
alt.Shape("state"),
).properties(
title='Midwest Bills by Session',
)
return (color_scheme,)
@app.cell
def __():
return
if __name__ == "__main__":
app.run()

Binary file not shown.

After

Width:  |  Height:  |  Size: 858 KiB

View File

@ -0,0 +1,13 @@
state,session_start_year,num_bills
IL,2017,13616
IL,2019,12760
IL,2021,12847
IL,2023,11951
MI,2017,4818
MI,2019,4450
MI,2021,4520
MI,2023,3424
WI,2017,1820
WI,2019,2264
WI,2021,2618
WI,2023,2656
1 state session_start_year num_bills
2 IL 2017 13616
3 IL 2019 12760
4 IL 2021 12847
5 IL 2023 11951
6 MI 2017 4818
7 MI 2019 4450
8 MI 2021 4520
9 MI 2023 3424
10 WI 2017 1820
11 WI 2019 2264
12 WI 2021 2618
13 WI 2023 2656

180
01.gog-altair/outline.html Normal file

File diff suppressed because one or more lines are too long

144
01.gog-altair/outline.md Normal file
View File

@ -0,0 +1,144 @@
# Grammar of Graphics with Altair
## CAPP 30239
---
## Today
- Grammar of Graphics
- Types of Data
- Intro to Altair
---
## Grammar of Graphics
Hadley Wickham, creator of `ggplot2` and `tidyverse`, ["A Layered Grammar of Graphics"](http://vita.had.co.nz/papers/layered-grammar.pdf).
Key Idea: move beyond pre-defined composites like "scatter plot" and "bar chart" into a composable grammar from which we can construct a wide variety of visualizations.
---
## Wickham's Components:
1. data and aesthetic mappings,
2. one or more layers, each with
- a geometric object (line, point, etc.)
- (optional) statistical transformation
- (optional) position adjustment
3. one scale per aesthetic mapping (color, size, etc.)
4. a coordinate system
5. facet specification
---
## Types of Data
### **N** - Nominal
"strings" with no **order** (alphabetical does not count)
Species
States
Countries
### **O** - Ordered
- Grades: A, B, C, D, E, F
- Rankings: 1st, 2nd, 3rd
---
## Types of Data (Quantitative)
### **Q** - Interval (arbitrary zero)
- Dates (1 CE, Jan 1 1970, or...)
- Location (lat, lon)
Only differences matter, can't compare ratios.
_(What is 2024 / 1990?)_
### **T**emporal
Some systems (like Altair) will also offer this option specifically for dates and times.
### **Q** - Ratio (zero fixed)
Physical measurements, counts, amounts.
"4 km is _twice as far_ as 2 km"
---
## Types of Data (Operations)
| | =, != | <, >, <=, >= | +, - | ÷ |
| -------- | ----- | ------------ | ---- | --- |
| Nominal | ✓ | | | |
| Ordered | ✓ | ✓ | | |
| Interval | ✓ | ✓ | ✓ | |
| Ratio | ✓ | ✓ | ✓ | ✓ |
---
## Data Model to N, O, Q
- string?
- bool?
- float/int?
Possible exceptions?
---
## Data Model to N, O, Q
_Typically:_
- string - nominal or ordered
- bool - nominal
- float/int - interval or ratio
Possible Exceptions?
- Numeric IDs
- ZIP Codes
- ratio data stored with units (e.g. "10km")
---
## Mapping of Variables to Aesthetics
- position (X, Y, Z)
- length
- angle
- slope
- area
- volume
- density
- hue
- saturation
- texture
- connection
- containment/grouping
- shape
---
### Mackinlay's "effectiveness"
![width:800px](effectiveness.png)
---
## Altair's Grammar
Altair condenses several of the different pieces of the grammar to _"encoding channels"_.
We've seen X, Y, and color, let's take a look at some examples of other encoding channels.
---

16
README.md Normal file
View File

@ -0,0 +1,16 @@
# 30239 Notes Repository
## How to use this Repo
I will push notes to this repository throughout the quarter, so if you are keeping your own notes in this repository you should generally keep them in separate files to avoid accidental git conflicts.
Either make companion files in each directory, or keep your notes in a separate directory/notebook altogether.
### Marimo Notebooks
Marimo notebooks are similar to Jupyter notebooks, but work much better with Git and have some other nice features I appreciate.
If you have ever looked at a Jupyter notebook file (.ipynb) in an editor, you know they are large JSON files, and once they are checked into Git changes become very difficult to track.
`uv run marimo`

13
pyproject.toml Normal file
View File

@ -0,0 +1,13 @@
[project]
name = "30239-notes"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"altair>=5.4.1",
"jupyter>=1.1.1",
"marimo>=0.8.20",
"pandas>=2.2.3",
"polars>=1.8.2",
]

1903
uv.lock generated Normal file

File diff suppressed because it is too large Load Diff