Glossary
This commit is contained in:
parent
d38e856629
commit
e4089948fa
|
@ -0,0 +1,454 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="463pt" height="310pt" viewBox="0 0 463 310" version="1.1">
|
||||
<defs>
|
||||
<g>
|
||||
<symbol overflow="visible" id="glyph0-0">
|
||||
<path style="stroke:none;" d=""/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-1">
|
||||
<path style="stroke:none;" d="M 6.703125 -0.84375 L 6.609375 -0.9375 C 5.984375 -0.546875 5.3125 -0.34375 4.546875 -0.34375 C 2.578125 -0.34375 1.296875 -1.640625 1.296875 -3.609375 C 1.296875 -5.453125 2.421875 -6.671875 4.15625 -6.671875 C 5.125 -6.671875 6.140625 -6.265625 6.140625 -5.875 L 6.140625 -5.15625 L 6.453125 -5.15625 C 6.453125 -5.65625 6.5 -6.015625 6.640625 -6.6875 C 5.78125 -6.953125 5.0625 -7.09375 4.328125 -7.09375 C 3.453125 -7.09375 2.640625 -6.875 1.953125 -6.484375 C 0.8125 -5.828125 0.21875 -4.765625 0.21875 -3.421875 C 0.21875 -1.25 1.796875 0.203125 4.15625 0.203125 C 4.984375 0.203125 5.71875 0.015625 6.421875 -0.34375 Z M 6.703125 -0.84375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-2">
|
||||
<path style="stroke:none;" d="M 2.796875 -4.6875 C 1.328125 -4.6875 0.3125 -3.65625 0.3125 -2.171875 C 0.3125 -0.765625 1.203125 0.203125 2.5 0.203125 C 4.046875 0.203125 5.140625 -0.875 5.140625 -2.375 C 5.140625 -3.734375 4.15625 -4.6875 2.796875 -4.6875 Z M 2.609375 -4.359375 C 3.546875 -4.359375 4.203125 -3.359375 4.203125 -2 C 4.203125 -0.84375 3.703125 -0.125 2.890625 -0.125 C 1.90625 -0.125 1.25 -1.09375 1.25 -2.515625 C 1.25 -3.703125 1.734375 -4.359375 2.609375 -4.359375 Z M 2.609375 -4.359375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-3">
|
||||
<path style="stroke:none;" d="M 0.15625 -0.265625 L 0.15625 0.03125 C 0.859375 0.015625 1.140625 0 1.4375 0 C 1.734375 0 2.015625 0.015625 2.625 0.03125 L 2.625 -0.265625 L 2.203125 -0.296875 C 1.84375 -0.328125 1.828125 -0.375 1.828125 -1.015625 L 1.828125 -3.140625 C 1.828125 -3.59375 2.484375 -4.078125 3.09375 -4.078125 C 3.625 -4.078125 4 -3.5625 4 -2.8125 L 4 -1.015625 C 4 -0.375 3.96875 -0.328125 3.625 -0.296875 L 3.171875 -0.265625 L 3.171875 0.03125 C 3.875 0.015625 4.15625 0 4.421875 0 C 4.6875 0 4.953125 0.015625 5.671875 0.03125 L 5.671875 -0.265625 L 5.203125 -0.296875 C 4.859375 -0.34375 4.84375 -0.359375 4.84375 -1.015625 L 4.84375 -3.140625 C 4.84375 -3.59375 5.5 -4.078125 6.09375 -4.078125 C 6.640625 -4.078125 7.015625 -3.5625 7.015625 -2.8125 L 7.015625 0.03125 C 7.453125 0.015625 7.625 0 7.796875 0 C 7.953125 0 8.140625 0.015625 8.6875 0.03125 L 8.6875 -0.265625 L 8.21875 -0.296875 C 7.875 -0.34375 7.859375 -0.359375 7.84375 -1.015625 L 7.84375 -3.078125 C 7.84375 -4.0625 7.265625 -4.6875 6.34375 -4.6875 C 5.984375 -4.6875 5.703125 -4.609375 5.53125 -4.4375 L 4.765625 -3.765625 C 4.453125 -4.4375 4.046875 -4.6875 3.34375 -4.6875 C 2.984375 -4.6875 2.703125 -4.609375 2.515625 -4.4375 L 1.828125 -3.796875 L 1.828125 -4.65625 L 1.734375 -4.6875 C 1.25 -4.484375 0.703125 -4.34375 0.1875 -4.28125 L 0.1875 -4 L 0.546875 -4 C 0.953125 -3.984375 0.984375 -3.953125 0.984375 -3.265625 L 0.984375 -1.015625 C 0.984375 -0.375 0.96875 -0.328125 0.625 -0.296875 Z M 0.15625 -0.265625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-4">
|
||||
<path style="stroke:none;" d="M 0.078125 2.515625 L 0.078125 2.8125 C 0.765625 2.796875 1.0625 2.78125 1.328125 2.78125 C 1.59375 2.78125 1.890625 2.796875 2.578125 2.8125 L 2.578125 2.515625 L 2.125 2.484375 C 1.765625 2.4375 1.765625 2.421875 1.75 1.765625 L 1.75 -0.125 C 2.0625 0.046875 2.375 0.125 2.8125 0.125 C 3.125 0.125 3.375 0.0625 3.53125 -0.046875 L 4.671875 -0.78125 C 5.0625 -1.046875 5.546875 -2.0625 5.546875 -2.703125 C 5.546875 -3.8125 4.625 -4.6875 3.453125 -4.6875 C 3.09375 -4.6875 2.734375 -4.59375 2.5625 -4.4375 L 1.75 -3.6875 L 1.75 -4.65625 L 1.65625 -4.6875 C 1.171875 -4.484375 0.625 -4.34375 0.09375 -4.28125 L 0.09375 -4 L 0.46875 -4 C 0.875 -3.984375 0.90625 -3.953125 0.90625 -3.265625 L 0.90625 1.765625 C 0.90625 2.421875 0.890625 2.4375 0.546875 2.484375 Z M 1.75 -3.0625 C 1.75 -3.203125 1.796875 -3.3125 1.9375 -3.484375 C 2.21875 -3.84375 2.640625 -4.046875 3.125 -4.046875 C 4.0625 -4.046875 4.671875 -3.375 4.671875 -2.34375 C 4.671875 -1.21875 4 -0.390625 3.09375 -0.390625 C 2.546875 -0.390625 2.140625 -0.5625 1.75 -0.984375 Z M 1.75 -3.0625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-5">
|
||||
<path style="stroke:none;" d="M 4.09375 0.03125 C 4.5625 0.015625 4.71875 0 4.890625 0 C 5.046875 0 5.21875 0.015625 5.71875 0.03125 L 5.71875 -0.265625 L 5.3125 -0.296875 C 4.953125 -0.328125 4.953125 -0.375 4.9375 -1.015625 L 4.9375 -2.953125 C 4.9375 -4.125 4.390625 -4.6875 3.265625 -4.6875 C 2.90625 -4.6875 2.6875 -4.625 2.484375 -4.4375 L 1.71875 -3.78125 L 1.71875 -4.65625 L 1.625 -4.6875 C 1.140625 -4.484375 0.59375 -4.34375 0.0625 -4.28125 L 0.0625 -4 L 0.4375 -4 C 0.84375 -3.984375 0.875 -3.953125 0.875 -3.265625 L 0.875 -1.015625 C 0.875 -0.375 0.84375 -0.328125 0.515625 -0.296875 L 0.0625 -0.265625 L 0.0625 0.03125 C 0.703125 0.015625 0.984375 0 1.296875 0 C 1.625 0 1.90625 0.015625 2.546875 0.03125 L 2.546875 -0.265625 L 2.09375 -0.296875 C 1.734375 -0.328125 1.71875 -0.375 1.71875 -1.015625 L 1.71875 -3.140625 C 1.71875 -3.59375 2.375 -4.078125 2.984375 -4.078125 C 3.65625 -4.078125 4.09375 -3.578125 4.09375 -2.8125 Z M 4.09375 0.03125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-6">
|
||||
<path style="stroke:none;" d="M 4.375 -0.703125 L 4.234375 -0.796875 C 3.609375 -0.421875 3.375 -0.328125 2.9375 -0.328125 C 2.296875 -0.328125 1.75 -0.625 1.46875 -1.109375 C 1.28125 -1.4375 1.203125 -1.71875 1.1875 -2.296875 L 2.65625 -2.296875 C 3.375 -2.296875 3.828125 -2.34375 4.453125 -2.4375 C 4.46875 -2.578125 4.484375 -2.671875 4.484375 -2.796875 C 4.484375 -3.9375 3.734375 -4.6875 2.609375 -4.6875 C 2.25 -4.6875 1.8125 -4.5625 1.40625 -4.3125 C 0.59375 -3.84375 0.265625 -3.234375 0.265625 -2.1875 C 0.265625 -1.5625 0.40625 -1.015625 0.6875 -0.640625 C 1.078125 -0.109375 1.734375 0.203125 2.5 0.203125 C 2.875 0.203125 3.234375 0.125 3.65625 -0.0625 C 3.90625 -0.171875 4.125 -0.296875 4.171875 -0.359375 Z M 3.59375 -2.671875 C 3.078125 -2.65625 2.84375 -2.640625 2.46875 -2.640625 C 2 -2.640625 1.75 -2.65625 1.203125 -2.703125 C 1.203125 -3.171875 1.25 -3.390625 1.375 -3.65625 C 1.59375 -4.09375 2.015625 -4.359375 2.484375 -4.359375 C 2.828125 -4.359375 3.09375 -4.234375 3.265625 -3.953125 C 3.484375 -3.625 3.5625 -3.34375 3.59375 -2.671875 Z M 3.59375 -2.671875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-7">
|
||||
<path style="stroke:none;" d="M 0.984375 -3.8125 L 0.984375 -0.9375 C 0.984375 -0.203125 1.3125 0.125 2.078125 0.125 C 2.3125 0.125 2.546875 0.0625 2.609375 0 L 3.09375 -0.53125 L 2.953125 -0.703125 C 2.703125 -0.546875 2.5625 -0.515625 2.375 -0.515625 C 1.984375 -0.515625 1.8125 -0.703125 1.8125 -1.203125 L 1.8125 -3.8125 L 3.09375 -3.8125 L 3.1875 -4.359375 L 1.8125 -4.296875 L 1.8125 -4.6875 C 1.8125 -5.09375 1.84375 -5.515625 1.9375 -6.09375 L 1.8125 -6.203125 C 1.5625 -6.0625 1.265625 -5.9375 0.953125 -5.828125 C 0.984375 -5.546875 1 -5.34375 1 -5.046875 L 1 -4.34375 L 0.21875 -3.984375 L 0.21875 -3.78125 Z M 0.984375 -3.8125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-8">
|
||||
<path style="stroke:none;" d="M 0.40625 -1.4375 C 0.40625 -0.734375 0.375 -0.4375 0.296875 -0.046875 C 0.828125 0.125 1.203125 0.203125 1.671875 0.203125 C 2.984375 0.203125 3.90625 -0.484375 3.90625 -1.484375 C 3.90625 -1.796875 3.8125 -2.015625 3.625 -2.21875 C 3.375 -2.46875 3.046875 -2.59375 2.15625 -2.765625 C 1.34375 -2.921875 1.0625 -3.125 1.0625 -3.578125 C 1.0625 -4.078125 1.40625 -4.359375 2.03125 -4.359375 C 2.703125 -4.359375 3.203125 -4.015625 3.203125 -3.546875 L 3.203125 -3.3125 L 3.484375 -3.3125 C 3.5 -3.890625 3.515625 -4.125 3.546875 -4.4375 C 3 -4.625 2.65625 -4.6875 2.234375 -4.6875 C 1.078125 -4.6875 0.375 -4.140625 0.375 -3.234375 C 0.375 -2.75 0.59375 -2.4375 1.046875 -2.203125 C 1.3125 -2.09375 1.84375 -1.9375 2.53125 -1.78125 C 2.984375 -1.6875 3.171875 -1.484375 3.171875 -1.09375 C 3.171875 -0.546875 2.671875 -0.171875 1.953125 -0.171875 C 1.234375 -0.171875 0.703125 -0.515625 0.703125 -1.015625 L 0.703125 -1.4375 Z M 0.40625 -1.4375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-9">
|
||||
<path style="stroke:none;" d="M 0.203125 -0.265625 L 0.203125 0.03125 C 0.875 0.015625 1.15625 0 1.4375 0 C 1.6875 0 2.046875 0.015625 2.875 0.03125 L 2.875 -0.265625 L 2.34375 -0.296875 C 1.890625 -0.328125 1.875 -0.34375 1.875 -1.015625 L 1.875 -2.734375 C 1.875 -3.34375 2.28125 -3.84375 2.765625 -3.84375 C 3.0625 -3.84375 3.28125 -3.703125 3.4375 -3.375 L 3.65625 -3.375 L 3.734375 -4.578125 C 3.625 -4.65625 3.453125 -4.6875 3.265625 -4.6875 C 2.96875 -4.6875 2.65625 -4.53125 2.4375 -4.28125 L 1.875 -3.625 L 1.875 -4.65625 L 1.796875 -4.6875 C 1.296875 -4.484375 0.75 -4.34375 0.234375 -4.28125 L 0.234375 -4 L 0.59375 -4 C 1.015625 -3.984375 1.03125 -3.953125 1.046875 -3.265625 L 1.046875 -1.015625 C 1.03125 -0.375 1.015625 -0.328125 0.671875 -0.296875 Z M 0.203125 -0.265625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-10">
|
||||
<path style="stroke:none;" d="M 3.40625 -7.171875 C 3.203125 -7.25 3.09375 -7.28125 2.9375 -7.28125 C 2.625 -7.28125 2.296875 -7.125 2.0625 -6.859375 L 1.484375 -6.203125 C 1.1875 -5.875 1.0625 -5.453125 1.0625 -4.765625 L 1.0625 -4.34375 L 0.375 -4.03125 L 0.375 -3.8125 L 1.0625 -3.84375 L 1.0625 -1.015625 C 1.0625 -0.375 1.03125 -0.328125 0.6875 -0.296875 L 0.234375 -0.265625 L 0.234375 0.03125 C 0.9375 0.015625 1.21875 0 1.484375 0 C 1.734375 0 2.03125 0.015625 2.734375 0.03125 L 2.734375 -0.265625 L 2.265625 -0.296875 C 1.921875 -0.34375 1.90625 -0.359375 1.90625 -1.015625 L 1.90625 -3.84375 L 3.140625 -3.84375 L 3.203125 -4.375 L 1.90625 -4.34375 L 1.90625 -5.1875 C 1.90625 -6.34375 2.03125 -6.625 2.59375 -6.625 C 2.875 -6.625 3.046875 -6.546875 3.296875 -6.34375 L 3.40625 -6.40625 Z M 3.40625 -7.171875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-11">
|
||||
<path style="stroke:none;" d=""/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-12">
|
||||
<path style="stroke:none;" d="M 5.03125 -4.65625 L 4.9375 -4.6875 C 4.453125 -4.484375 3.90625 -4.34375 3.375 -4.28125 L 3.375 -4 L 3.75 -4 C 4.15625 -3.984375 4.1875 -3.953125 4.1875 -3.265625 L 4.1875 -1.640625 C 4.1875 -1.421875 4.046875 -1.140625 3.8125 -0.90625 C 3.546875 -0.625 3.21875 -0.484375 2.828125 -0.484375 C 2.484375 -0.484375 2.203125 -0.59375 2.046875 -0.796875 C 1.90625 -0.953125 1.828125 -1.265625 1.828125 -1.703125 L 1.828125 -4.65625 L 1.734375 -4.6875 C 1.25 -4.484375 0.703125 -4.34375 0.1875 -4.28125 L 0.1875 -4 L 0.546875 -4 C 0.953125 -3.984375 0.984375 -3.953125 0.984375 -3.265625 L 0.984375 -1.59375 C 0.984375 -0.890625 1.046875 -0.578125 1.234375 -0.328125 C 1.453125 -0.03125 1.828125 0.125 2.40625 0.125 C 2.859375 0.125 3.234375 -0.015625 3.515625 -0.265625 L 4.1875 -0.890625 C 4.1875 -0.59375 4.1875 -0.40625 4.15625 0.03125 C 4.65625 0.015625 4.8125 0 4.984375 0 C 5.125 0 5.3125 0.015625 5.8125 0.03125 L 5.8125 -0.265625 L 5.40625 -0.296875 C 5.046875 -0.328125 5.03125 -0.375 5.03125 -1.015625 Z M 5.03125 -4.65625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-13">
|
||||
<path style="stroke:none;" d="M 3.234375 -0.8125 L 3.1875 0.03125 C 3.6875 0.015625 3.828125 0 3.96875 0 C 4.09375 0 4.15625 0 4.5 0.015625 L 4.703125 0.03125 L 4.703125 -0.265625 L 4.3125 -0.296875 C 4.0625 -0.3125 4.046875 -0.34375 4.046875 -0.875 L 4.046875 -2.703125 C 4.046875 -4.15625 3.625 -4.6875 2.453125 -4.6875 C 2.015625 -4.6875 1.625 -4.578125 1.25 -4.34375 L 0.71875 -4.03125 L 0.71875 -3.375 L 0.984375 -3.3125 L 1.109375 -3.625 C 1.3125 -4.09375 1.421875 -4.15625 1.875 -4.15625 C 2.8125 -4.15625 3.203125 -3.796875 3.234375 -2.875 L 2.25 -2.703125 C 0.890625 -2.453125 0.3125 -1.984375 0.3125 -1.09375 C 0.3125 -0.328125 0.78125 0.125 1.578125 0.125 C 1.765625 0.125 1.9375 0.09375 2 0.046875 Z M 3.234375 -1.234375 C 2.953125 -0.828125 2.3125 -0.453125 1.9375 -0.453125 C 1.515625 -0.453125 1.1875 -0.8125 1.1875 -1.25 C 1.1875 -1.625 1.375 -1.96875 1.671875 -2.15625 C 1.9375 -2.3125 2.484375 -2.453125 3.234375 -2.5625 Z M 3.234375 -1.234375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-14">
|
||||
<path style="stroke:none;" d="M 1.875 -4.65625 L 1.796875 -4.6875 C 1.296875 -4.484375 0.75 -4.34375 0.234375 -4.28125 L 0.234375 -4 L 0.59375 -4 C 1.015625 -3.984375 1.03125 -3.953125 1.046875 -3.265625 L 1.046875 -1.015625 C 1.046875 -0.375 1.015625 -0.328125 0.671875 -0.296875 L 0.203125 -0.265625 L 0.203125 0.03125 C 0.90625 0.015625 1.203125 0 1.453125 0 C 1.71875 0 2.015625 0.015625 2.703125 0.03125 L 2.703125 -0.265625 L 2.25 -0.296875 C 1.90625 -0.34375 1.890625 -0.359375 1.875 -1.015625 Z M 1.421875 -6.875 C 1.125 -6.875 0.859375 -6.609375 0.859375 -6.3125 C 0.859375 -6.015625 1.125 -5.765625 1.40625 -5.765625 C 1.703125 -5.765625 1.96875 -6.015625 1.96875 -6.3125 C 1.96875 -6.59375 1.703125 -6.875 1.421875 -6.875 Z M 1.421875 -6.875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-15">
|
||||
<path style="stroke:none;" d="M 3.984375 -3.109375 C 3.984375 -3.5625 4.046875 -3.984375 4.125 -4.34375 C 3.734375 -4.578125 3.375 -4.6875 2.96875 -4.6875 C 2.484375 -4.6875 1.9375 -4.5 1.328125 -4.125 C 0.625 -3.6875 0.265625 -2.984375 0.265625 -2.09375 C 0.265625 -0.75 1.203125 0.203125 2.546875 0.203125 C 3.0625 0.203125 3.8125 0.015625 3.921875 -0.140625 L 4.125 -0.453125 L 4.03125 -0.609375 C 3.65625 -0.40625 3.34375 -0.3125 2.984375 -0.3125 C 1.875 -0.3125 1.140625 -1.1875 1.140625 -2.5 C 1.140625 -3.5625 1.640625 -4.171875 2.546875 -4.171875 C 2.984375 -4.171875 3.453125 -3.984375 3.640625 -3.71875 L 3.703125 -3.109375 Z M 3.984375 -3.109375 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-16">
|
||||
<path style="stroke:none;" d="M 0.0625 -0.265625 L 0.0625 0.03125 C 0.703125 0.015625 0.984375 0 1.296875 0 C 1.625 0 1.90625 0.015625 2.546875 0.03125 L 2.546875 -0.265625 L 2.09375 -0.296875 C 1.734375 -0.328125 1.71875 -0.375 1.71875 -1.015625 L 1.71875 -3.140625 C 1.71875 -3.59375 2.375 -4.078125 2.984375 -4.078125 C 3.65625 -4.078125 4.09375 -3.578125 4.09375 -2.8125 L 4.09375 0.03125 C 4.5625 0.015625 4.71875 0 4.890625 0 C 5.046875 0 5.21875 0.015625 5.71875 0.03125 L 5.71875 -0.265625 L 5.3125 -0.296875 C 4.953125 -0.328125 4.953125 -0.375 4.9375 -1.015625 L 4.9375 -2.953125 C 4.9375 -4.125 4.390625 -4.6875 3.265625 -4.6875 C 2.90625 -4.6875 2.6875 -4.625 2.484375 -4.4375 L 1.71875 -3.78125 L 1.71875 -7.1875 L 1.625 -7.265625 C 1.1875 -7.09375 0.859375 -7.015625 0.0625 -6.890625 L 0.0625 -6.609375 L 0.625 -6.609375 C 0.8125 -6.609375 0.875 -6.5 0.875 -6.203125 L 0.875 -1.015625 C 0.875 -0.375 0.859375 -0.328125 0.515625 -0.296875 Z M 0.0625 -0.265625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-17">
|
||||
<path style="stroke:none;" d="M 5.390625 -4.3125 L 5.390625 -4.59375 C 4.859375 -4.5625 4.640625 -4.5625 4.453125 -4.5625 C 4.265625 -4.5625 4.046875 -4.5625 3.515625 -4.59375 L 3.515625 -4.3125 L 3.921875 -4.296875 C 4.078125 -4.28125 4.15625 -4.203125 4.15625 -4.03125 C 4.15625 -3.859375 4.09375 -3.625 3.96875 -3.296875 L 3.546875 -2.234375 C 3.4375 -1.953125 3.3125 -1.671875 2.9375 -0.84375 L 1.734375 -3.71875 C 1.6875 -3.859375 1.65625 -3.984375 1.65625 -4.09375 C 1.65625 -4.21875 1.734375 -4.28125 1.90625 -4.296875 L 2.390625 -4.3125 L 2.390625 -4.59375 C 1.734375 -4.5625 1.453125 -4.5625 1.203125 -4.5625 C 0.96875 -4.5625 0.703125 -4.5625 0.0625 -4.59375 L 0.0625 -4.3125 L 0.40625 -4.296875 C 0.546875 -4.265625 0.59375 -4.203125 0.703125 -3.953125 L 2.4375 0.0625 L 2.9375 0.0625 C 3.125 -0.453125 3.265625 -0.8125 3.34375 -1.015625 L 4.515625 -3.625 C 4.734375 -4.09375 4.890625 -4.265625 5.078125 -4.296875 Z M 5.390625 -4.3125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-18">
|
||||
<path style="stroke:none;" d="M 4.015625 -7.09375 C 1.734375 -7.09375 0.21875 -5.625 0.21875 -3.40625 C 0.21875 -1.3125 1.6875 0.203125 3.703125 0.203125 C 5.9375 0.203125 7.640625 -1.46875 7.640625 -3.671875 C 7.640625 -5.765625 6.234375 -7.09375 4.015625 -7.09375 Z M 3.84375 -6.671875 C 5.5625 -6.671875 6.5625 -5.453125 6.5625 -3.375 C 6.5625 -1.390625 5.65625 -0.21875 4.09375 -0.21875 C 2.40625 -0.21875 1.296875 -1.640625 1.296875 -3.78125 C 1.296875 -5.625 2.203125 -6.671875 3.84375 -6.671875 Z M 3.84375 -6.671875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-19">
|
||||
<path style="stroke:none;" d="M 4.125 -4.6875 C 3.296875 -2.75 3.1875 -2.46875 2.546875 -1.046875 L 1.703125 -3.796875 C 1.671875 -3.890625 1.65625 -3.96875 1.65625 -4.046875 C 1.65625 -4.203125 1.796875 -4.28125 2.046875 -4.296875 L 2.4375 -4.3125 L 2.4375 -4.59375 C 1.765625 -4.5625 1.484375 -4.5625 1.25 -4.5625 C 1.015625 -4.5625 0.734375 -4.5625 0.0625 -4.59375 L 0.0625 -4.3125 L 0.34375 -4.296875 C 0.625 -4.265625 0.75 -4.0625 1 -3.296875 L 2.015625 0.0625 L 2.484375 0.0625 L 3.46875 -2.234375 C 3.5625 -2.4375 3.5625 -2.453125 3.984375 -3.34375 L 5.34375 0.0625 L 5.8125 0.0625 C 5.90625 -0.1875 5.96875 -0.40625 6.046875 -0.59375 C 6.234375 -1.1875 6.453125 -1.796875 6.5 -1.859375 L 7.1875 -3.421875 C 7.484375 -4.09375 7.59375 -4.265625 7.8125 -4.296875 L 8.078125 -4.3125 L 8.078125 -4.59375 C 7.515625 -4.5625 7.296875 -4.5625 7.09375 -4.5625 C 6.90625 -4.5625 6.6875 -4.5625 6.125 -4.59375 L 6.125 -4.3125 L 6.453125 -4.296875 C 6.703125 -4.28125 6.84375 -4.15625 6.84375 -3.984375 C 6.84375 -3.875 6.828125 -3.75 6.78125 -3.625 L 6.28125 -2.21875 C 6.203125 -2 6.109375 -1.765625 5.796875 -0.984375 L 4.65625 -3.875 C 4.515625 -4.234375 4.4375 -4.421875 4.359375 -4.6875 Z M 4.125 -4.6875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-20">
|
||||
<path style="stroke:none;" d="M 1.59375 -0.265625 L 1.59375 0.03125 C 2.1875 0.015625 2.546875 0 3.0625 0 C 3.578125 0 3.9375 0.015625 4.53125 0.03125 L 4.53125 -0.265625 L 4.046875 -0.296875 C 3.59375 -0.3125 3.546875 -0.40625 3.546875 -1.203125 L 3.546875 -5.4375 C 3.546875 -5.9375 3.546875 -6.140625 3.578125 -6.4375 L 5.125 -6.4375 C 5.421875 -6.421875 5.515625 -6.34375 5.53125 -6.09375 L 5.5625 -5.3125 L 5.875 -5.3125 C 5.875 -5.953125 5.90625 -6.34375 5.953125 -6.921875 L 4.625 -6.90625 C 4.046875 -6.890625 3.953125 -6.890625 3.796875 -6.890625 L 2.203125 -6.890625 C 2.09375 -6.890625 1.5625 -6.90625 0.859375 -6.90625 L 0.1875 -6.921875 C 0.234375 -6.34375 0.25 -5.953125 0.25 -5.3125 L 0.5625 -5.3125 L 0.59375 -6.09375 C 0.625 -6.34375 0.703125 -6.421875 1 -6.4375 L 2.546875 -6.4375 C 2.578125 -6.125 2.59375 -5.890625 2.59375 -5.4375 L 2.59375 -1.203125 C 2.578125 -0.390625 2.546875 -0.3125 2.078125 -0.296875 Z M 1.59375 -0.265625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-21">
|
||||
<path style="stroke:none;" d="M 0.203125 -0.265625 L 0.203125 0.03125 C 0.90625 0.015625 1.203125 0 1.46875 0 C 1.765625 0 2.03125 0.015625 2.6875 0.03125 L 2.6875 -0.265625 L 2.25 -0.296875 C 1.90625 -0.328125 1.875 -0.375 1.875 -1.015625 L 1.875 -2.40625 L 4.53125 0.125 L 5.484375 -0.171875 L 5.484375 -0.40625 C 5.25 -0.40625 4.953125 -0.5625 4.640625 -0.875 L 3.375 -2.125 C 3.015625 -2.484375 2.90625 -2.609375 2.734375 -2.8125 L 4.03125 -3.8125 C 4.515625 -4.1875 4.765625 -4.296875 5.109375 -4.296875 L 5.109375 -4.59375 L 4.109375 -4.59375 C 3.46875 -3.953125 3 -3.515625 2.609375 -3.203125 L 1.875 -2.609375 L 1.875 -7.1875 L 1.796875 -7.265625 C 1.34375 -7.09375 1.015625 -7.015625 0.234375 -6.890625 L 0.234375 -6.609375 L 0.796875 -6.609375 C 0.96875 -6.609375 1.046875 -6.5 1.046875 -6.203125 L 1.046875 -1.015625 C 1.03125 -0.375 1.015625 -0.328125 0.671875 -0.296875 Z M 0.203125 -0.265625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-22">
|
||||
<path style="stroke:none;" d="M 4.125 -4.375 C 3.5625 -4.625 3.28125 -4.6875 2.9375 -4.6875 C 2.65625 -4.6875 2.421875 -4.625 2.171875 -4.5 L 1.296875 -4.046875 C 0.703125 -3.734375 0.34375 -3.015625 0.34375 -2.15625 C 0.34375 -1.359375 0.625 -0.703125 1.09375 -0.296875 C 1.453125 -0.015625 1.921875 0.125 2.5625 0.125 C 2.78125 0.125 3 0.078125 3.046875 0.046875 L 4.15625 -0.890625 L 4.109375 0.03125 C 4.5625 0.015625 4.734375 0 4.875 0 C 4.953125 0 5.109375 0 5.3125 0.015625 C 5.375 0.015625 5.5625 0.015625 5.796875 0.03125 L 5.796875 -0.265625 L 5.328125 -0.296875 C 4.984375 -0.34375 4.96875 -0.359375 4.953125 -1.015625 L 4.953125 -7.1875 L 4.875 -7.265625 C 4.4375 -7.09375 4.09375 -7.015625 3.3125 -6.890625 L 3.3125 -6.609375 L 3.875 -6.609375 C 4.046875 -6.609375 4.125 -6.5 4.125 -6.203125 Z M 4.125 -2.203125 C 4.125 -1.5625 4.09375 -1.453125 3.96875 -1.234375 C 3.6875 -0.765625 3.203125 -0.453125 2.734375 -0.453125 C 1.84375 -0.453125 1.21875 -1.296875 1.21875 -2.5 C 1.21875 -3.578125 1.765625 -4.21875 2.65625 -4.21875 C 3.046875 -4.21875 3.4375 -4.09375 3.796875 -3.84375 C 3.984375 -3.703125 4.125 -3.578125 4.125 -3.5 Z M 4.125 -2.203125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-23">
|
||||
<path style="stroke:none;" d="M 4.1875 -3.4375 C 4.765625 -3.390625 4.9375 -3.375 5.046875 -3.34375 C 5.203125 -3.296875 5.3125 -2.953125 5.3125 -2.546875 C 5.3125 -2.1875 5.203125 -1.890625 4.84375 -1.40625 C 3.953125 -2.3125 3.359375 -3.0625 2.796875 -3.96875 C 3.21875 -4.28125 3.40625 -4.4375 3.59375 -4.625 C 4.046875 -5.09375 4.234375 -5.53125 4.234375 -5.984375 C 4.234375 -6.5625 3.875 -6.890625 3.265625 -6.890625 C 2.984375 -6.890625 2.78125 -6.8125 2.59375 -6.65625 L 1.921875 -6.0625 C 1.765625 -5.921875 1.6875 -5.625 1.6875 -5.203125 C 1.6875 -4.78125 1.765625 -4.40625 1.984375 -3.875 C 0.875 -3.234375 0.4375 -2.59375 0.4375 -1.703125 C 0.4375 -0.59375 1.296875 0.203125 2.484375 0.203125 C 3.21875 0.203125 3.796875 -0.015625 4.515625 -0.5625 C 5.09375 -0.125 5.84375 0.203125 6.3125 0.203125 C 6.5 0.203125 6.59375 0.1875 6.65625 0.140625 L 7.53125 -0.484375 L 7.46875 -0.734375 C 7.171875 -0.59375 7.03125 -0.546875 6.859375 -0.546875 C 6.375 -0.546875 5.984375 -0.6875 5.140625 -1.1875 C 5.734375 -1.84375 5.953125 -2.3125 5.953125 -2.953125 C 5.953125 -3.109375 5.9375 -3.203125 5.90625 -3.34375 C 6.609375 -3.3125 6.90625 -3.28125 7.296875 -3.21875 C 7.296875 -3.46875 7.328125 -3.640625 7.421875 -3.9375 L 5.484375 -3.875 L 5.3125 -3.875 C 5.171875 -3.875 4.859375 -3.875 4.515625 -3.890625 Z M 2.125 -3.515625 C 2.578125 -2.71875 3.0625 -2.078125 4.203125 -0.8125 C 3.734375 -0.5 3.359375 -0.359375 2.953125 -0.359375 C 2.0625 -0.359375 1.296875 -1.15625 1.296875 -2.09375 C 1.296875 -2.671875 1.515625 -3.046875 2.125 -3.515625 Z M 2.640625 -4.3125 C 2.453125 -4.859375 2.375 -5.21875 2.375 -5.5625 C 2.375 -6.09375 2.59375 -6.359375 2.984375 -6.359375 C 3.3125 -6.359375 3.5625 -6.078125 3.5625 -5.6875 C 3.5625 -5.25 3.234375 -4.765625 2.640625 -4.3125 Z M 2.640625 -4.3125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-24">
|
||||
<path style="stroke:none;" d="M 4.46875 -5.265625 C 4.46875 -5.796875 4.515625 -6.15625 4.609375 -6.671875 C 3.8125 -6.984375 3.375 -7.09375 2.8125 -7.09375 C 1.3125 -7.09375 0.234375 -6.15625 0.234375 -4.84375 C 0.234375 -4.34375 0.375 -3.984375 0.65625 -3.71875 C 1 -3.40625 1.453125 -3.25 2.4375 -3.125 C 3.1875 -3.015625 3.546875 -2.90625 3.8125 -2.671875 C 4.0625 -2.453125 4.1875 -2.171875 4.1875 -1.796875 C 4.1875 -0.890625 3.4375 -0.234375 2.390625 -0.234375 C 1.59375 -0.234375 0.8125 -0.625 0.765625 -1.046875 L 0.6875 -1.703125 L 0.375 -1.703125 C 0.375 -0.9375 0.359375 -0.625 0.296875 -0.1875 C 0.875 0.078125 1.4375 0.203125 2.03125 0.203125 C 3.765625 0.203125 5.03125 -0.84375 5.03125 -2.296875 C 5.03125 -2.984375 4.765625 -3.40625 4.109375 -3.671875 C 3.796875 -3.796875 3.546875 -3.859375 2.734375 -3.96875 C 1.515625 -4.125 1.078125 -4.453125 1.078125 -5.234375 C 1.078125 -6.0625 1.703125 -6.671875 2.59375 -6.671875 C 2.984375 -6.671875 3.34375 -6.59375 3.625 -6.4375 C 3.953125 -6.265625 4.0625 -6.125 4.09375 -5.828125 L 4.15625 -5.265625 Z M 4.46875 -5.265625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-25">
|
||||
<path style="stroke:none;" d="M 0.203125 -0.265625 L 0.203125 0.03125 C 0.90625 0.015625 1.203125 0 1.453125 0 C 1.71875 0 2.015625 0.015625 2.703125 0.03125 L 2.703125 -0.265625 L 2.25 -0.296875 C 1.90625 -0.34375 1.890625 -0.359375 1.875 -1.015625 L 1.875 -7.1875 L 1.796875 -7.265625 C 1.34375 -7.09375 1.015625 -7.015625 0.234375 -6.890625 L 0.234375 -6.609375 L 0.796875 -6.609375 C 0.96875 -6.609375 1.046875 -6.5 1.046875 -6.203125 L 1.046875 -1.015625 C 1.03125 -0.375 1.015625 -0.328125 0.671875 -0.296875 Z M 0.203125 -0.265625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-26">
|
||||
<path style="stroke:none;" d="M 2.15625 -3.265625 C 2.421875 -3.296875 2.703125 -3.296875 3.1875 -3.296875 C 3.921875 -3.296875 4.203125 -3.265625 4.375 -3.1875 L 4.453125 -2.9375 L 4.515625 -2.34375 L 4.8125 -2.34375 C 4.796875 -3.015625 4.78125 -3.25 4.78125 -3.453125 C 4.78125 -3.640625 4.796875 -3.9375 4.8125 -4.609375 L 4.515625 -4.609375 L 4.453125 -4.09375 C 4.453125 -4 4.421875 -3.90625 4.375 -3.828125 C 4.203125 -3.75 3.921875 -3.71875 3.265625 -3.71875 C 2.78125 -3.71875 2.515625 -3.734375 2.15625 -3.75 L 2.15625 -6.421875 C 2.453125 -6.484375 2.65625 -6.5 3.234375 -6.5 C 3.703125 -6.5 4.28125 -6.4375 4.578125 -6.359375 C 4.8125 -6.296875 4.84375 -6.25 4.84375 -6.015625 L 4.84375 -5.375 L 5.203125 -5.375 C 5.203125 -5.96875 5.25 -6.4375 5.359375 -6.890625 C 4.875 -6.90625 4.59375 -6.921875 4.140625 -6.921875 L 3.0625 -6.90625 C 2.578125 -6.90625 2.21875 -6.890625 1.984375 -6.890625 C 1.625 -6.890625 1.171875 -6.90625 0.21875 -6.921875 L 0.21875 -6.625 L 0.703125 -6.59375 C 1.15625 -6.5625 1.203125 -6.5 1.203125 -5.6875 L 1.203125 -1.203125 C 1.203125 -0.40625 1.15625 -0.3125 0.703125 -0.296875 L 0.21875 -0.265625 L 0.21875 0.03125 C 0.8125 0.015625 1.15625 0 1.6875 0 C 2.203125 0 2.5625 0.015625 3.15625 0.03125 L 3.15625 -0.265625 L 2.671875 -0.296875 C 2.203125 -0.3125 2.171875 -0.390625 2.15625 -1.203125 Z M 2.15625 -3.265625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-27">
|
||||
<path style="stroke:none;" d="M 1.5 -7.1875 L 1.40625 -7.265625 C 0.96875 -7.09375 0.640625 -7.015625 -0.15625 -6.890625 L -0.15625 -6.609375 L 0.40625 -6.609375 C 0.59375 -6.609375 0.65625 -6.5 0.65625 -6.203125 L 0.65625 -1.53125 C 0.65625 -0.90625 0.65625 -0.625 0.578125 0.0625 L 0.734375 0.125 L 1.140625 -0.234375 C 1.546875 0.015625 1.90625 0.125 2.4375 0.125 C 2.8125 0.125 3.0625 0.0625 3.296875 -0.09375 L 4.296875 -0.8125 C 4.734375 -1.140625 5.078125 -1.96875 5.078125 -2.703125 C 5.078125 -3.875 4.328125 -4.6875 3.265625 -4.6875 C 2.796875 -4.6875 2.296875 -4.515625 2.046875 -4.25 L 1.5 -3.6875 Z M 1.5 -3.078125 C 1.5 -3.21875 1.59375 -3.40625 1.765625 -3.578125 C 2.03125 -3.875 2.4375 -4.046875 2.84375 -4.046875 C 3.6875 -4.046875 4.203125 -3.375 4.203125 -2.296875 C 4.203125 -1.171875 3.625 -0.390625 2.765625 -0.390625 C 2.234375 -0.390625 1.5 -0.703125 1.5 -0.9375 Z M 1.5 -3.078125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-28">
|
||||
<path style="stroke:none;" d="M 0.484375 -2.90625 L 0.484375 -2.3125 L 5.34375 -2.3125 L 5.34375 -2.90625 Z M 0.484375 -2.90625 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-29">
|
||||
<path style="stroke:none;" d="M 2.875 -2.546875 L 4.296875 -4.203125 C 4.359375 -4.265625 4.453125 -4.3125 4.640625 -4.3125 L 4.78125 -4.3125 L 4.78125 -4.59375 L 3.953125 -4.59375 L 2.71875 -2.84375 L 1.953125 -4 C 1.8125 -4.234375 1.703125 -4.34375 1.359375 -4.6875 L 0.203125 -4.484375 L 0.25 -4.234375 L 0.453125 -4.203125 C 0.625 -4.203125 0.875 -4.0625 0.953125 -3.921875 L 2.15625 -2.1875 L 0.671875 -0.421875 C 0.59375 -0.328125 0.46875 -0.265625 0.375 -0.265625 L 0.203125 -0.265625 L 0.203125 0 L 1.0625 0 C 1.125 -0.109375 1.15625 -0.15625 1.265625 -0.328125 C 1.4375 -0.609375 1.59375 -0.84375 1.65625 -0.9375 L 2.40625 -1.921875 L 3.46875 -0.296875 C 3.5625 -0.140625 3.640625 -0.046875 3.734375 0.03125 C 4.109375 0.015625 4.234375 0 4.34375 0 C 4.453125 0 4.578125 0.015625 4.953125 0.03125 L 4.953125 -0.265625 L 4.703125 -0.296875 C 4.59375 -0.3125 4.46875 -0.390625 4.359375 -0.546875 Z M 2.875 -2.546875 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-30">
|
||||
<path style="stroke:none;" d="M 4.546875 -4.3125 L 4.546875 -4.625 C 3.875 -4.59375 3.5625 -4.59375 3.140625 -4.59375 C 2.734375 -4.59375 1.921875 -4.59375 0.6875 -4.625 C 0.671875 -4.109375 0.65625 -3.984375 0.59375 -3.296875 L 0.90625 -3.296875 L 1.015625 -3.984375 C 1.0625 -4.1875 1.203125 -4.234375 1.984375 -4.234375 L 3.40625 -4.234375 C 3.203125 -3.90625 3.03125 -3.6875 2.765625 -3.34375 L 1.0625 -1.21875 C 0.8125 -0.921875 0.671875 -0.75 0.15625 -0.171875 L 0.21875 0.03125 C 0.96875 0.015625 1.3125 0 1.765625 0 C 2.140625 0 3.046875 0.015625 4.515625 0.03125 C 4.515625 -0.203125 4.53125 -0.453125 4.59375 -0.921875 L 4.65625 -1.390625 L 4.359375 -1.390625 L 4.1875 -0.59375 C 4.125 -0.421875 3.78125 -0.359375 2.765625 -0.34375 L 1.40625 -0.34375 Z M 4.546875 -4.3125 "/>
|
||||
</symbol>
|
||||
<symbol overflow="visible" id="glyph0-31">
|
||||
<path style="stroke:none;" d="M 1.234375 -1.109375 C 0.9375 -1.109375 0.671875 -0.828125 0.671875 -0.53125 C 0.671875 -0.21875 0.9375 0.046875 1.234375 0.046875 C 1.546875 0.046875 1.828125 -0.21875 1.828125 -0.53125 C 1.828125 -0.828125 1.546875 -1.109375 1.234375 -1.109375 Z M 1.234375 -1.109375 "/>
|
||||
</symbol>
|
||||
</g>
|
||||
</defs>
|
||||
<g id="surface1">
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 1211.992188 2730 L 2076.015625 2730 L 2076.015625 3090 L 1211.992188 3090 Z M 1211.992188 2730 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-1" x="136.01" y="22.22"/>
|
||||
<use xlink:href="#glyph0-2" x="143.1" y="22.22"/>
|
||||
<use xlink:href="#glyph0-3" x="148.56" y="22.22"/>
|
||||
<use xlink:href="#glyph0-4" x="157.39" y="22.22"/>
|
||||
<use xlink:href="#glyph0-2" x="163.4" y="22.22"/>
|
||||
<use xlink:href="#glyph0-5" x="168.86" y="22.22"/>
|
||||
<use xlink:href="#glyph0-6" x="174.68" y="22.22"/>
|
||||
<use xlink:href="#glyph0-5" x="179.47" y="22.22"/>
|
||||
<use xlink:href="#glyph0-7" x="185.29" y="22.22"/>
|
||||
<use xlink:href="#glyph0-8" x="188.55" y="22.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 1211.992188 2730 L 491.992188 2370 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 56.449219 71.398438 L 49.199219 73 L 54.851562 68.148438 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 564.492188 2386.015625 L 491.992188 2370 L 548.515625 2418.515625 Z M 564.492188 2386.015625 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-4" x="33.8801" y="58.22"/>
|
||||
<use xlink:href="#glyph0-6" x="39.8901" y="58.22"/>
|
||||
<use xlink:href="#glyph0-9" x="44.6801" y="58.22"/>
|
||||
<use xlink:href="#glyph0-10" x="48.6301" y="58.22"/>
|
||||
<use xlink:href="#glyph0-2" x="51.9601" y="58.22"/>
|
||||
<use xlink:href="#glyph0-9" x="57.4201" y="58.22"/>
|
||||
<use xlink:href="#glyph0-3" x="61.3701" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="70.2001" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="72.7001" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="75.2001" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="77.7001" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="80.2001" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="82.7001" y="58.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 60 2010 L 923.984375 2010 L 923.984375 2370 L 60 2370 Z M 60 2010 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-1" x="19.6352" y="94.22"/>
|
||||
<use xlink:href="#glyph0-2" x="26.7252" y="94.22"/>
|
||||
<use xlink:href="#glyph0-3" x="32.1852" y="94.22"/>
|
||||
<use xlink:href="#glyph0-4" x="41.0152" y="94.22"/>
|
||||
<use xlink:href="#glyph0-12" x="47.0252" y="94.22"/>
|
||||
<use xlink:href="#glyph0-7" x="53.0552" y="94.22"/>
|
||||
<use xlink:href="#glyph0-13" x="56.3152" y="94.22"/>
|
||||
<use xlink:href="#glyph0-7" x="61.3152" y="94.22"/>
|
||||
<use xlink:href="#glyph0-14" x="64.5752" y="94.22"/>
|
||||
<use xlink:href="#glyph0-2" x="67.4852" y="94.22"/>
|
||||
<use xlink:href="#glyph0-5" x="72.9452" y="94.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 491.992188 2010 L 491.992188 1650 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 51 137.800781 L 49.199219 145 L 47.398438 137.800781 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 510 1721.992188 L 491.992188 1650 L 473.984375 1721.992188 Z M 510 1721.992188 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-7" x="-0.419922" y="130.22"/>
|
||||
<use xlink:href="#glyph0-2" x="2.840078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="8.300078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-13" x="10.800078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-15" x="15.800078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-16" x="20.240078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-14" x="26.060078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-6" x="28.970078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-17" x="33.760078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-6" x="39.410078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="44.200078" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="46.700078" y="130.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 60 1290 L 923.984375 1290 L 923.984375 1650 L 60 1650 Z M 60 1290 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-18" x="24.3551" y="166.22"/>
|
||||
<use xlink:href="#glyph0-19" x="32.2151" y="166.22"/>
|
||||
<use xlink:href="#glyph0-5" x="40.5551" y="166.22"/>
|
||||
<use xlink:href="#glyph0-11" x="46.3751" y="166.22"/>
|
||||
<use xlink:href="#glyph0-20" x="48.8751" y="166.22"/>
|
||||
<use xlink:href="#glyph0-13" x="55.0051" y="166.22"/>
|
||||
<use xlink:href="#glyph0-8" x="60.0051" y="166.22"/>
|
||||
<use xlink:href="#glyph0-21" x="64.2451" y="166.22"/>
|
||||
<use xlink:href="#glyph0-8" x="69.8051" y="166.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2076.015625 2730 L 2796.015625 2370 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 273.949219 68.148438 L 279.601562 73 L 272.351562 71.398438 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2739.492188 2418.515625 L 2796.015625 2370 L 2723.515625 2386.015625 Z M 2739.492188 2418.515625 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-11" x="243.6" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="246.1" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="248.6" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="251.1" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="253.6" y="58.22"/>
|
||||
<use xlink:href="#glyph0-11" x="256.1" y="58.22"/>
|
||||
<use xlink:href="#glyph0-12" x="258.6" y="58.22"/>
|
||||
<use xlink:href="#glyph0-5" x="264.63" y="58.22"/>
|
||||
<use xlink:href="#glyph0-22" x="270.45" y="58.22"/>
|
||||
<use xlink:href="#glyph0-6" x="276.56" y="58.22"/>
|
||||
<use xlink:href="#glyph0-9" x="281.35" y="58.22"/>
|
||||
<use xlink:href="#glyph0-7" x="285.3" y="58.22"/>
|
||||
<use xlink:href="#glyph0-13" x="288.56" y="58.22"/>
|
||||
<use xlink:href="#glyph0-21" x="293.56" y="58.22"/>
|
||||
<use xlink:href="#glyph0-6" x="299.12" y="58.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2543.984375 2010 L 3408.007812 2010 L 3408.007812 2370 L 2543.984375 2370 Z M 2543.984375 2010 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-1" x="261.67" y="88.22"/>
|
||||
<use xlink:href="#glyph0-2" x="268.76" y="88.22"/>
|
||||
<use xlink:href="#glyph0-3" x="274.22" y="88.22"/>
|
||||
<use xlink:href="#glyph0-3" x="283.05" y="88.22"/>
|
||||
<use xlink:href="#glyph0-12" x="291.88" y="88.22"/>
|
||||
<use xlink:href="#glyph0-5" x="297.91" y="88.22"/>
|
||||
<use xlink:href="#glyph0-14" x="303.73" y="88.22"/>
|
||||
<use xlink:href="#glyph0-15" x="306.64" y="88.22"/>
|
||||
<use xlink:href="#glyph0-13" x="311.08" y="88.22"/>
|
||||
<use xlink:href="#glyph0-7" x="316.08" y="88.22"/>
|
||||
<use xlink:href="#glyph0-14" x="319.34" y="88.22"/>
|
||||
<use xlink:href="#glyph0-2" x="322.25" y="88.22"/>
|
||||
<use xlink:href="#glyph0-5" x="327.71" y="88.22"/>
|
||||
</g>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-23" x="262.83523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-11" x="270.61523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-1" x="273.11523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-2" x="280.20523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-2" x="285.66523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-9" x="291.12523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-22" x="295.07523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-14" x="301.18523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-5" x="304.09523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-13" x="309.91523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-7" x="314.91523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-14" x="318.17523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-2" x="321.08523" y="100.22"/>
|
||||
<use xlink:href="#glyph0-5" x="326.54523" y="100.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2723.984375 2010 L 2003.984375 1650 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 207.648438 143.398438 L 200.398438 145 L 206.050781 140.148438 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2076.484375 1666.015625 L 2003.984375 1650 L 2060.507812 1698.515625 Z M 2076.484375 1666.015625 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-7" x="176.78" y="130.22"/>
|
||||
<use xlink:href="#glyph0-2" x="180.04" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="185.5" y="130.22"/>
|
||||
<use xlink:href="#glyph0-13" x="188" y="130.22"/>
|
||||
<use xlink:href="#glyph0-15" x="193" y="130.22"/>
|
||||
<use xlink:href="#glyph0-16" x="197.44" y="130.22"/>
|
||||
<use xlink:href="#glyph0-14" x="203.26" y="130.22"/>
|
||||
<use xlink:href="#glyph0-6" x="206.17" y="130.22"/>
|
||||
<use xlink:href="#glyph0-17" x="210.96" y="130.22"/>
|
||||
<use xlink:href="#glyph0-6" x="216.61" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="221.4" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="223.9" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="226.4" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="228.9" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="231.4" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="233.9" y="130.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 1571.992188 1290 L 2436.015625 1290 L 2436.015625 1650 L 1571.992188 1650 Z M 1571.992188 1290 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-24" x="173.225" y="166.22"/>
|
||||
<use xlink:href="#glyph0-16" x="178.475" y="166.22"/>
|
||||
<use xlink:href="#glyph0-13" x="184.295" y="166.22"/>
|
||||
<use xlink:href="#glyph0-9" x="189.295" y="166.22"/>
|
||||
<use xlink:href="#glyph0-6" x="193.245" y="166.22"/>
|
||||
<use xlink:href="#glyph0-22" x="198.035" y="166.22"/>
|
||||
<use xlink:href="#glyph0-11" x="204.145" y="166.22"/>
|
||||
<use xlink:href="#glyph0-20" x="206.645" y="166.22"/>
|
||||
<use xlink:href="#glyph0-13" x="212.775" y="166.22"/>
|
||||
<use xlink:href="#glyph0-8" x="217.775" y="166.22"/>
|
||||
<use xlink:href="#glyph0-21" x="222.015" y="166.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2436.015625 1470 L 3516.015625 1470 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 344.398438 161.199219 L 351.601562 163 L 344.398438 164.800781 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3443.984375 1488.007812 L 3516.015625 1470 L 3443.984375 1451.992188 Z M 3443.984375 1488.007812 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-22" x="281.605" y="160.17"/>
|
||||
<use xlink:href="#glyph0-6" x="287.715" y="160.17"/>
|
||||
<use xlink:href="#glyph0-10" x="292.505" y="160.17"/>
|
||||
<use xlink:href="#glyph0-14" x="295.835" y="160.17"/>
|
||||
<use xlink:href="#glyph0-5" x="298.745" y="160.17"/>
|
||||
<use xlink:href="#glyph0-6" x="304.565" y="160.17"/>
|
||||
<use xlink:href="#glyph0-8" x="309.355" y="160.17"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3228.007812 2010 L 3948.007812 1650 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 389.148438 140.148438 L 394.800781 145 L 387.550781 143.398438 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3891.484375 1698.515625 L 3948.007812 1650 L 3875.507812 1666.015625 Z M 3891.484375 1698.515625 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-11" x="358.8" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="361.3" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="363.8" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="366.3" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="368.8" y="130.22"/>
|
||||
<use xlink:href="#glyph0-11" x="371.3" y="130.22"/>
|
||||
<use xlink:href="#glyph0-19" x="373.8" y="130.22"/>
|
||||
<use xlink:href="#glyph0-14" x="382.14" y="130.22"/>
|
||||
<use xlink:href="#glyph0-7" x="385.05" y="130.22"/>
|
||||
<use xlink:href="#glyph0-16" x="388.31" y="130.22"/>
|
||||
<use xlink:href="#glyph0-14" x="394.13" y="130.22"/>
|
||||
<use xlink:href="#glyph0-5" x="397.04" y="130.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3516.015625 1290 L 4380 1290 L 4380 1650 L 3516.015625 1650 Z M 3516.015625 1290 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-1" x="361.12" y="160.22"/>
|
||||
<use xlink:href="#glyph0-2" x="368.21" y="160.22"/>
|
||||
<use xlink:href="#glyph0-5" x="373.67" y="160.22"/>
|
||||
<use xlink:href="#glyph0-17" x="379.49" y="160.22"/>
|
||||
<use xlink:href="#glyph0-6" x="385.14" y="160.22"/>
|
||||
<use xlink:href="#glyph0-9" x="389.93" y="160.22"/>
|
||||
<use xlink:href="#glyph0-8" x="393.88" y="160.22"/>
|
||||
<use xlink:href="#glyph0-13" x="398.12" y="160.22"/>
|
||||
<use xlink:href="#glyph0-7" x="403.12" y="160.22"/>
|
||||
<use xlink:href="#glyph0-14" x="406.38" y="160.22"/>
|
||||
<use xlink:href="#glyph0-2" x="409.29" y="160.22"/>
|
||||
<use xlink:href="#glyph0-5" x="414.75" y="160.22"/>
|
||||
<use xlink:href="#glyph0-13" x="420.57" y="160.22"/>
|
||||
<use xlink:href="#glyph0-25" x="425.57" y="160.22"/>
|
||||
</g>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-26" x="380.7352" y="172.22"/>
|
||||
<use xlink:href="#glyph0-9" x="386.2952" y="172.22"/>
|
||||
<use xlink:href="#glyph0-13" x="390.2452" y="172.22"/>
|
||||
<use xlink:href="#glyph0-3" x="395.2452" y="172.22"/>
|
||||
<use xlink:href="#glyph0-6" x="404.0752" y="172.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2003.984375 1290 L 2003.984375 930 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 202.199219 209.800781 L 200.398438 217 L 198.601562 209.800781 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2021.992188 1001.992188 L 2003.984375 930 L 1986.015625 1001.992188 Z M 2021.992188 1001.992188 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-6" x="166.47" y="202.22"/>
|
||||
<use xlink:href="#glyph0-5" x="171.26" y="202.22"/>
|
||||
<use xlink:href="#glyph0-7" x="177.08" y="202.22"/>
|
||||
<use xlink:href="#glyph0-13" x="180.34" y="202.22"/>
|
||||
<use xlink:href="#glyph0-14" x="185.34" y="202.22"/>
|
||||
<use xlink:href="#glyph0-25" x="188.25" y="202.22"/>
|
||||
<use xlink:href="#glyph0-8" x="191.16" y="202.22"/>
|
||||
<use xlink:href="#glyph0-11" x="195.4" y="202.22"/>
|
||||
<use xlink:href="#glyph0-11" x="197.9" y="202.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 1571.992188 570 L 2436.015625 570 L 2436.015625 930 L 1571.992188 930 Z M 1571.992188 570 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-24" x="182.965" y="238.2199"/>
|
||||
<use xlink:href="#glyph0-12" x="188.215" y="238.2199"/>
|
||||
<use xlink:href="#glyph0-27" x="194.245" y="238.2199"/>
|
||||
<use xlink:href="#glyph0-7" x="199.775" y="238.2199"/>
|
||||
<use xlink:href="#glyph0-13" x="203.035" y="238.2199"/>
|
||||
<use xlink:href="#glyph0-8" x="208.035" y="238.2199"/>
|
||||
<use xlink:href="#glyph0-21" x="212.275" y="238.2199"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2436.015625 750 L 3516.015625 750 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 344.398438 233.199219 L 351.601562 235 L 344.398438 236.800781 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3443.984375 768.007812 L 3516.015625 750 L 3443.984375 731.992188 Z M 3443.984375 768.007812 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-22" x="281.605" y="232.1699"/>
|
||||
<use xlink:href="#glyph0-6" x="287.715" y="232.1699"/>
|
||||
<use xlink:href="#glyph0-10" x="292.505" y="232.1699"/>
|
||||
<use xlink:href="#glyph0-14" x="295.835" y="232.1699"/>
|
||||
<use xlink:href="#glyph0-5" x="298.745" y="232.1699"/>
|
||||
<use xlink:href="#glyph0-6" x="304.565" y="232.1699"/>
|
||||
<use xlink:href="#glyph0-8" x="309.355" y="232.1699"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:35.9831,35.9831;stroke-miterlimit:10.43;" d="M 2003.984375 570 L 2003.984375 210 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 202.199219 281.800781 L 200.398438 289 L 198.601562 281.800781 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 2021.992188 281.992188 L 2003.984375 210 L 1986.015625 281.992188 Z M 2021.992188 281.992188 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-24" x="169.915" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-12" x="175.165" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-27" x="181.195" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-28" x="186.725" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-8" x="192.785" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-12" x="197.025" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-27" x="203.055" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-7" x="208.585" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-13" x="211.845" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-8" x="216.845" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-21" x="221.085" y="304.21992"/>
|
||||
<use xlink:href="#glyph0-8" x="226.645" y="304.21992"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3948.007812 1290 L 3948.007812 930 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 396.601562 209.800781 L 394.800781 217 L 393 209.800781 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3966.015625 1001.992188 L 3948.007812 930 L 3930 1001.992188 Z M 3966.015625 1001.992188 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-11" x="394.8" y="202.22"/>
|
||||
<use xlink:href="#glyph0-11" x="397.3" y="202.22"/>
|
||||
<use xlink:href="#glyph0-15" x="399.8" y="202.22"/>
|
||||
<use xlink:href="#glyph0-2" x="404.24" y="202.22"/>
|
||||
<use xlink:href="#glyph0-5" x="409.7" y="202.22"/>
|
||||
<use xlink:href="#glyph0-7" x="415.52" y="202.22"/>
|
||||
<use xlink:href="#glyph0-6" x="418.78" y="202.22"/>
|
||||
<use xlink:href="#glyph0-29" x="423.57" y="202.22"/>
|
||||
<use xlink:href="#glyph0-7" x="428.73" y="202.22"/>
|
||||
<use xlink:href="#glyph0-12" x="431.99" y="202.22"/>
|
||||
<use xlink:href="#glyph0-13" x="438.02" y="202.22"/>
|
||||
<use xlink:href="#glyph0-25" x="443.02" y="202.22"/>
|
||||
<use xlink:href="#glyph0-14" x="445.93" y="202.22"/>
|
||||
<use xlink:href="#glyph0-30" x="448.84" y="202.22"/>
|
||||
<use xlink:href="#glyph0-6" x="453.84" y="202.22"/>
|
||||
<use xlink:href="#glyph0-8" x="458.63" y="202.22"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3516.015625 570 L 4380 570 L 4380 930 L 3516.015625 930 Z M 3516.015625 570 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-24" x="367.745" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-12" x="372.995" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-27" x="379.025" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-2" x="384.555" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-9" x="390.015" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-22" x="393.965" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-14" x="400.075" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-5" x="402.985" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-13" x="408.805" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-7" x="413.805" y="232.2199"/>
|
||||
<use xlink:href="#glyph0-6" x="417.065" y="232.2199"/>
|
||||
</g>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-1" x="366.22508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-2" x="373.31508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-5" x="378.77508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-17" x="384.59508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-31" x="390.24508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-11" x="392.74508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-26" x="395.24508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-9" x="400.80508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-13" x="404.75508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-3" x="409.75508" y="244.2199"/>
|
||||
<use xlink:href="#glyph0-6" x="418.58508" y="244.2199"/>
|
||||
</g>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:35.9831,35.9831;stroke-miterlimit:10.43;" d="M 3948.007812 570 L 3948.007812 210 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 396.601562 281.800781 L 394.800781 289 L 393 281.800781 "/>
|
||||
<path style="fill:none;stroke-width:6.77647;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10.43;" d="M 3966.015625 281.992188 L 3948.007812 210 L 3930 281.992188 Z M 3966.015625 281.992188 " transform="matrix(0.1,0,0,-0.1,0,310)"/>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-24" x="356.815" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-12" x="362.065" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-27" x="368.095" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-28" x="373.625" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-8" x="379.685" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-12" x="383.925" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-27" x="389.955" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-2" x="395.485" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-9" x="400.945" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-22" x="404.895" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-14" x="411.005" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-5" x="413.915" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-13" x="419.735" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-7" x="424.735" y="298.2199"/>
|
||||
<use xlink:href="#glyph0-6" x="427.995" y="298.2199"/>
|
||||
</g>
|
||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||
<use xlink:href="#glyph0-1" x="364.10523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-2" x="371.19523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-5" x="376.65523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-17" x="382.47523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-31" x="388.12523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-11" x="390.62523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-26" x="393.12523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-9" x="398.68523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-13" x="402.63523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-3" x="407.63523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-6" x="416.46523" y="310.2199"/>
|
||||
<use xlink:href="#glyph0-8" x="421.25523" y="310.2199"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 53 KiB |
803
src/glossary.md
803
src/glossary.md
|
@ -1,67 +1,683 @@
|
|||
# Glossary
|
||||
|
||||
## Action
|
||||
[Actions]: #action
|
||||
[Action]: #action
|
||||
|
||||
In the [Syndicated Actor Model][], an *action* may be performed by an [actor][] during a
|
||||
[turn][]. Actions are quasi-transactional, taking effect only if their containing turn is
|
||||
committed.
|
||||
|
||||
Four core varieties of action, each with a matching variety of [event][], are offered across
|
||||
all realisations of the [SAM][]:
|
||||
|
||||
- An *assertion* action publishes an [assertion][] at a [target entity][]. A unique [handle][]
|
||||
names the assertion action so that it may later be retracted. For more detail, [see below on
|
||||
Assertions][assertion].
|
||||
|
||||
- A *retraction* action withdraws a previously-published assertion from the target entity.
|
||||
|
||||
- A *message* action sends a [message][] to a target entity.
|
||||
|
||||
- A *synchronization* action carries a local [entity reference][] to a target entity. When it
|
||||
eventually reaches the target, the target will (by default) immediately reply with a simple
|
||||
acknowledgement to the entity reference carried in the request. For more detail, [see below
|
||||
on Synchronization][Synchronization].
|
||||
|
||||
Beside the core four actions, many individual implementations offer action variants such as the
|
||||
following:
|
||||
|
||||
- A *spawn* action will, when the containing turn commits, create a new actor running
|
||||
alongside the acting party. In many implementations, spawned actors may optionally be
|
||||
[linked][link] to the spawning actor.
|
||||
|
||||
- *Replacement* of a previously-established assertion, "altering" the target entity reference
|
||||
and/or [payload][]. This proceeds, conventionally, by establishment of the new assertion
|
||||
followed immediately by retraction of the old.
|
||||
|
||||
Finally, implementations may offer pseudo-actions whose effects are local to the acting party:
|
||||
|
||||
- Creation of a new [facet][].
|
||||
|
||||
- Creation of a new [entity reference][] associated with the [active facet][] denoting a
|
||||
freshly-created local [entity][].
|
||||
|
||||
- Shutdown (stopping) of the [active facet][] or any other [facet][] within the acting party.
|
||||
|
||||
- Stopping of the current actor, either gracefully or with a simulated crash.
|
||||
|
||||
- Creation of a new [field/cell/dataflow variable][dataflow variable].
|
||||
|
||||
- Creation of a new [dataflow block][dataflow block].
|
||||
|
||||
- Creation of a new [linked task][] associated with the [active facet][].
|
||||
|
||||
- Scheduling of a new one-off or periodic [alarm][].
|
||||
|
||||
## Active Facet
|
||||
[Active Facet]: #active-facet
|
||||
|
||||
The [facet][] associated with the [event][] currently being processed in an active [turn][].
|
||||
|
||||
## Actor
|
||||
[Actors]: #actor
|
||||
[Actor]: #actor
|
||||
|
||||
In the [Syndicated Actor Model][], an *actor* is an isolated thread of execution. An actor
|
||||
repeatedly takes [events][] from its [mailbox][], handling each in a [turn][]. In many
|
||||
implementations of the [SAM][], each actor is internally structured as a tree of [facets][].
|
||||
|
||||
## Alarm
|
||||
[Alarm]: #alarm
|
||||
See [timeout][].
|
||||
|
||||
## Assertion
|
||||
[Assertion]: #assertion
|
||||
[Assertions]: #assertion
|
||||
|
||||
- *verb.* To *assert* (or to *publish*) a value is to choose a [target entity][] and perform
|
||||
an [action][] conveying an *assertion* to that entity.
|
||||
|
||||
- *noun.* An *assertion* is a [value][] carried as the payload of an assertion [action][],
|
||||
denoting a relevant portion of a public aspect of the conversational state of the sending
|
||||
party that it has chosen to convey to the recipient entity.
|
||||
|
||||
The [value][] carried in an assertion may, in some implementations, depend on one or more
|
||||
[dataflow variables][]; in those implementations, when the contents of such a variable
|
||||
changes, the assertion is automatically withdrawn, recomputed, and re-published (with a
|
||||
fresh [handle][]).
|
||||
|
||||
## Attenuation
|
||||
[Attenuation]: #attenuation
|
||||
[Attenuated]: #attenuation
|
||||
|
||||
To *attenuate* a [capability][] (yielding an *attenuated capability*), a sequence of filters is
|
||||
prepended to the possibly-empty list of filters attached to an existing capability. Each filter
|
||||
either discards, rewrites, or accepts unchanged any [payload][] directed at the underlying
|
||||
capability. A special pattern language exists in the [Syndicate network protocol][] for
|
||||
describing filters; many implementations also allow in-memory capabilities to be filtered by
|
||||
the same language.
|
||||
|
||||
## Capability
|
||||
[Capability]: #capability
|
||||
[Cap]: #capability
|
||||
|
||||
a.k.a. Cap
|
||||
(a.k.a. **Cap**) Used roughly interchangeably with "[reference][]", connoting a security-,
|
||||
access-control-, or privacy-relevant aspect.
|
||||
|
||||
Pointer or handle denoting a live, stateful [entity](#entity) running within an
|
||||
[actor](#actor). The entity accepts [Preserves](#preserves)-format [messages](#message) and/or
|
||||
[assertions](#assertion). The capability may be [attenuated](#attenuation) to restrict the
|
||||
messages and assertions that may be delivered to the denoted entity by way of this particular
|
||||
handle.
|
||||
## Cell
|
||||
[Cell]: #cell
|
||||
See [dataflow variable][].
|
||||
|
||||
## Compositional
|
||||
[Compositional]: #compositional
|
||||
|
||||
To quote the [Stanford Encyclopedia of
|
||||
Philosophy](https://plato.stanford.edu/entries/compositionality/#Clar), the "principle of
|
||||
compositionality" can be understood to be that
|
||||
|
||||
> The meaning of a complex expression is determined by its structure and the meanings of its
|
||||
> constituents.
|
||||
|
||||
People often implicitly intend "... *and nothing else*." For example, when I claim that the
|
||||
[object-capability model][] is a compositional approach to system security, I mean that the
|
||||
access conveyed by an assemblage of capabilties can be understood in terms of the access
|
||||
conveyed by each individual capability taken in isolation, *and nothing else*.
|
||||
|
||||
## Configuration Scripting Language
|
||||
|
||||
The `syndicate-server` program includes a scripting language, used for configuration of the
|
||||
server and its clients, population of initial dataspaces for the system that the
|
||||
`syndicate-server` instance is part of, and scripting of simple behaviours in reaction to
|
||||
appearance of assertions or transmission of messages.
|
||||
|
||||
The scripting language is [documented here](./operation/scripting.md).
|
||||
|
||||
## Conversational State
|
||||
[Conversational State]: #conversational-state
|
||||
[Conversational Frame]: #conversational-state
|
||||
|
||||
The collection of facts and knowledge held by a component participating in an ongoing
|
||||
conversation about some task that the component is undertaking:
|
||||
|
||||
> The conversational state that accumulates as part of a collaboration among components can be
|
||||
> thought of as a collection of facts. First, there are those facts that define the *frame* of
|
||||
> a conversation. These are exactly the facts that identify the task at hand; we label them
|
||||
> “framing knowledge”, and taken together, they are the “conversational frame” for the
|
||||
> conversation whose purpose is completion of a particular shared task. Just as tasks can be
|
||||
> broken down into more finely-focused subtasks, so can conversations be broken down into
|
||||
> sub-conversations. In these cases, part of the conversational state of an overarching
|
||||
> interaction will describe a frame for each sub-conversation, within which corresponding
|
||||
> sub-conversational state exists. The knowledge framing a conversation acts as a bridge
|
||||
> between it and its wider context, defining its “purpose” in the sense of the [Gricean
|
||||
> Cooperative Principle]. [The following figure] schematically depicts these relationships.
|
||||
>
|
||||
> <span id="fig:conversation">![Figure 2 from Garnock-Jones 2017](./figures/conversation.svg)</span>
|
||||
>
|
||||
> Some facts define conversational frames, but *every* shared fact is contextualized *within*
|
||||
> some conversational frame. Within a frame, then, some facts will pertain directly to the task
|
||||
> at hand. These, we label “domain knowledge”. Generally, such facts describe global aspects of
|
||||
> the common problem that remain valid as we shift our perspective from participant to
|
||||
> participant. Other facts describe the knowledge or beliefs of particular components. These,
|
||||
> we label “epistemic knowledge”.
|
||||
>
|
||||
> — <cite>Excerpt from [Chapter 2 of (Garnock-Jones
|
||||
> 2017)](https://syndicate-lang.org/tonyg-dissertation/html/#x_2_2_0_0_1).</cite> The quoted
|
||||
> section continues [here](https://syndicate-lang.org/tonyg-dissertation/html/#x_2_2_0_0_7).
|
||||
|
||||
In the [Syndicated Actor Model][], there is often a one-to-one correspondence between a
|
||||
[facet][] and a conversational frame, with [fate-sharing][] employed to connect the lifetime of
|
||||
the one with the lifetime of the other.
|
||||
|
||||
|
||||
## Dataflow
|
||||
[Dataflow]: #dataflow
|
||||
|
||||
A programming model in which changes in stored state automatically cause re-evaluation of
|
||||
computations depending on that state. The results of such re-evaluations are themselves often
|
||||
used to update a store, potentially triggering further re-computation.
|
||||
|
||||
In the [Syndicated Actor Model][], dataflow appears in two guises: first, at a coarse
|
||||
granularity, among actors and entities in the form of changes in published [assertions][]; and
|
||||
second, at fine granularity, many implementations include [dataflow variables][] and [dataflow
|
||||
blocks][] for *intra*-actor dataflow-based management of [conversational state][] and related
|
||||
computation.
|
||||
|
||||
## Dataflow Block
|
||||
[Dataflow block]: #dataflow-block
|
||||
[Dataflow blocks]: #dataflow-block
|
||||
|
||||
Implementations of the [Syndicated Actor Model][] often include some language feature or
|
||||
library operation for marking a portion of code as participating in [dataflow][], where changes
|
||||
in observed [dataflow variables][] cause re-evaluation of the code block.
|
||||
|
||||
For example, in [a Smalltalk implementation of the
|
||||
SAM](https://syndicate-lang.org/code/#squeak),
|
||||
|
||||
```smalltalk
|
||||
a := Turn active cell: 1.
|
||||
b := Turn active cell: 2.
|
||||
sum := Turn active cell: 0.
|
||||
Turn active dataflow: [sum value: a value + b value].
|
||||
```
|
||||
|
||||
Later, as `a` and `b` have their values updated, `sum` will automatically be updated by
|
||||
re-evaluation of the block given to the `dataflow:` method.
|
||||
|
||||
Analogous code can be written in TypeScript:
|
||||
|
||||
```typescript
|
||||
field a: number = 1;
|
||||
field b: number = 2;
|
||||
field sum: number = 0;
|
||||
dataflow {
|
||||
sum.value = a.value + b.value;
|
||||
}
|
||||
```
|
||||
|
||||
in Racket:
|
||||
|
||||
```racket
|
||||
(define-field a 1)
|
||||
(define-field b 2)
|
||||
(define/dataflow sum (+ (a) (b)))
|
||||
```
|
||||
|
||||
in Python:
|
||||
|
||||
```python
|
||||
a = turn.field(1)
|
||||
b = turn.field(2)
|
||||
sum = turn.field(0)
|
||||
@turn.dataflow
|
||||
def maintain_sum():
|
||||
sum.value = a.value + b.value
|
||||
```
|
||||
|
||||
and in Rust:
|
||||
|
||||
```rust,noplayground
|
||||
turn.dataflow(|turn| {
|
||||
let a_value = turn.get(&a);
|
||||
let b_value = turn.get(&b);
|
||||
turn.set(&sum, a_value + b_value);
|
||||
})
|
||||
```
|
||||
|
||||
## Dataflow Variable
|
||||
[Dataflow Variable]: #dataflow-variable
|
||||
[Dataflow Variables]: #dataflow-variable
|
||||
|
||||
(a.k.a. **Field**, **Cell**) A *dataflow variable* is a store for a single value, used with
|
||||
[dataflow blocks][] in [dataflow][] programming.
|
||||
|
||||
When the value of a dataflow variable is read, the active [dataflow block][] is marked as
|
||||
*depending* on the variable; and when the value of the variable is updated, the variable is
|
||||
marked as *damaged*, leading eventually to re-evaluation of dataflow blocks depending on that
|
||||
variable.
|
||||
|
||||
## Dataspace
|
||||
[Dataspaces]: #dataspace
|
||||
[Dataspace]: #dataspace
|
||||
|
||||
In the [Syndicated Actor Model][], a *dataspace* is a particular class of [entity][] with
|
||||
prescribed behaviour. Its role is to route and replicate published [assertions][] according to
|
||||
the [declared interests][observe] of its peers.
|
||||
|
||||
See [here](./syndicated-actor-model.md#dataspaces) for a full explanation of dataspaces.
|
||||
|
||||
## Dataspace Pattern
|
||||
[Dataspace Pattern]: #dataspace-pattern
|
||||
|
||||
In the [Syndicated Actor Model][], a *dataspace pattern* is a structured [value][] describing a
|
||||
pattern over other values.
|
||||
|
||||
TODO: link to documentation
|
||||
|
||||
## E
|
||||
[E language]: #e
|
||||
[E]: #e
|
||||
|
||||
The E programming language is an [object-capability model][] Actor language that has strongly
|
||||
influenced the [Syndicated Actor Model][].
|
||||
|
||||
Many good sources exist describing the language and its associated philosophy, including:
|
||||
|
||||
- [The ERights.org website](http://www.erights.org/), the home of E
|
||||
|
||||
- [E (programming language)](https://en.wikipedia.org/wiki/E_(programming_language)) on
|
||||
Wikipedia
|
||||
|
||||
- Miller, Mark S. “Robust Composition: Towards a Unified Approach to Access Control and
|
||||
Concurrency Control.” PhD, Johns Hopkins University, 2006.
|
||||
[[PDF]](http://www.erights.org/talks/thesis/markm-thesis.pdf)
|
||||
|
||||
- Miller, Mark S., E. Dean Tribble, and Jonathan Shapiro. “Concurrency Among Strangers.” In
|
||||
Proc. Int. Symp. on Trustworthy Global Computing, 195–229. Edinburgh, Scotland, 2005.
|
||||
[[DOI]](https://dl.acm.org/doi/10.5555/1986262.1986274)
|
||||
[[PDF]](http://www.erights.org/talks/promises/paper/tgc05.pdf)
|
||||
|
||||
## Embedded References
|
||||
[Embedded References]: #embedded-references
|
||||
|
||||
In the [Syndicated Actor Model][], the [values][] carried by [assertions][] and [messages][]
|
||||
may include [references][] to [entities][]. Because the SAM uses [Preserves][] as its data
|
||||
language, the Preserves concept of an *embedded value* is used in the SAM to reliably mark
|
||||
portions of a datum referring to SAM entities.
|
||||
|
||||
Concretely, in [Preserves text
|
||||
syntax](https://preserves.gitlab.io/preserves/preserves.html#textual-syntax), embedded values
|
||||
appear prepended with `#!`. In messages transferred across links using the [Syndicate network
|
||||
protocol][], references might appear as `#![0 123]`, `#![1 555]`, etc. etc.
|
||||
|
||||
## Entity
|
||||
[Target Entity]: #entity
|
||||
[Entities]: #entity
|
||||
[Entity]: #entity
|
||||
|
||||
In the [Syndicated Actor Model][], an *entity* is a stateful programming-language construct,
|
||||
located within an [actor][], that is the target of [events][]. Each entity has its own
|
||||
behaviour, specifying in code how it responds to incoming events.
|
||||
|
||||
An entity is the SAM analogue of "object" in [E][]-style languages: an addressable construct
|
||||
logically contained within and [fate-sharing][] with an [actor][]. The concept of "entity"
|
||||
differs from "object" in that entities are able to respond to [assertions][], not just
|
||||
[messages][].
|
||||
|
||||
In many implementations of the [SAM][], entities [fate-share][] with individual [facets][]
|
||||
within their containing actor rather than with the actor as a whole: when the facet associated
|
||||
with an entity is stopped, the entity becomes unresponsive.
|
||||
|
||||
## Erlang
|
||||
[Erlang]: #erlang
|
||||
|
||||
[Erlang](https://www.erlang.org/) is a process-style Actor language that has strongly
|
||||
influenced the [Syndicated Actor Model][]. In particular, Erlang's approach to
|
||||
failure-handling, involving [supervisors][] arranged in [supervision trees][] and processes
|
||||
(actors) connected via [links and monitors][links], has been influential on the SAM. In the
|
||||
SAM, links and monitors become special cases of [assertions][], and Erlang's approach to
|
||||
process [supervision][] is used directly and is an important aspect of SAM system organisation.
|
||||
|
||||
## Event
|
||||
[Event]: #event
|
||||
[Events]: #event
|
||||
|
||||
In the [Syndicated Actor Model][], an *event* is processed by an [entity][] during a [turn][],
|
||||
and describes the outcome of an [action][] taken by some other [actor][].
|
||||
|
||||
Events come in four varieties corresponding to the four core [actions][] in the [SAM][]:
|
||||
|
||||
- An *assertion* event notifies the recipient entity of an [assertion][] published by some
|
||||
peer. A unique [handle][] names the event so that later retraction of the assertion can be
|
||||
correlated with the assertion event.
|
||||
|
||||
- A *retraction* event notifies the recipient entity of withdrawal of a previously-published
|
||||
assertion.
|
||||
|
||||
- A *message* event notifies the recipient entity of a [message][] sent by some peer.
|
||||
|
||||
- A *synchronization* event, usually not handled explicitly by an entity, carries an [entity
|
||||
reference][]. The recipient should arrange for an acknowledgement to be delivered to the
|
||||
referenced entity once previously-received events that might modify the recipient's state
|
||||
(or the state of a remote entity that it is proxy for) have been completely processed. For
|
||||
more detail, [see below on Synchronization][Synchronization].
|
||||
|
||||
## Facet
|
||||
[Facet]: #facet
|
||||
[Facets]: #facet
|
||||
|
||||
In many implementations of the [Syndicated Actor Model][], a *facet* is a programming-language
|
||||
construct representing a *conversation* and corresponding to a [conversational frame][]. Facets
|
||||
are similar to the "nested threads" of Martin Sústrik's idea of [Structured
|
||||
Concurrency](https://250bpm.com/blog:71/) (see also
|
||||
[Wikipedia](https://en.wikipedia.org/wiki/Structured_concurrency)).
|
||||
|
||||
Every [actor][] is structured as a tree of facets. (Compare and contrast with [the diagram in
|
||||
the entry for Conversational State](#fig:conversation).)
|
||||
|
||||
Every facet is either "running" or "stopped". Each facet is the logical owner of zero or more
|
||||
[entities][] as well as of zero or more published [assertions][]. A facet's entities and
|
||||
published assertions [share its fate][fate-sharing]. While a facet is running, its associated
|
||||
entities are responsive to incoming events; when it stops, its entities become permanently
|
||||
unresponsive. A stopped facet never starts running again. When a facet is stopped, all its
|
||||
assertions are retracted and all its subfacets are also stopped.
|
||||
|
||||
Facets may have *stop handlers* associated with them: when a facet is stopped, its stop
|
||||
handlers are executed, one at a time. The stop handlers of each facet are executed before the
|
||||
stop handlers of its parent and before its assertions are withdrawn.
|
||||
|
||||
Facets may be explicitly stopped by a stop [action][], or implicitly stopped when an actor
|
||||
crashes. When an actor crashes, its stop handlers are not run: stop handlers are for orderly
|
||||
processing of conversation termination. Instead, many implementations allow actors to have
|
||||
associated *crash handlers* which run only in case of an actor crash. In the limit, of course,
|
||||
even crash handlers cannot be guaranteed to run, because the underlying hardware or operating
|
||||
system may suffer some kind of catastrophic failure.
|
||||
|
||||
## Fate-sharing
|
||||
[Fate-sharing]: #fate-sharing
|
||||
[Fate-share]: #fate-sharing
|
||||
|
||||
A design principle from large-scale network engineering, due to David Clark:
|
||||
|
||||
> The fate-sharing model suggests that it is acceptable to lose the state information
|
||||
> associated with an entity if, at the same time, the entity itself is lost.
|
||||
>
|
||||
> — <cite>David D. Clark, “The Design Philosophy of the DARPA Internet Protocols.” ACM SIGCOMM
|
||||
> Computer Communication Review 18, no. 4 (August 1988): 106–14.
|
||||
> [[DOI]](https://doi.org/10.1145/52325.52336)</cite>
|
||||
|
||||
In the [Syndicated Actor Model][], fate-sharing is used in connecting the lifetime of
|
||||
[conversational state][] with the programming language representation of a conversational
|
||||
frame, a [facet][].
|
||||
|
||||
## Field
|
||||
[Field]: #field
|
||||
See [dataflow variable][].
|
||||
## Handle
|
||||
[Handle]: #handle
|
||||
|
||||
In the [Syndicated Actor Model][], every [assertion][] [action][] (and the corresponding
|
||||
[event][]) includes a [scope][]-lifetime-unique *handle* that denotes the specific action/event
|
||||
concerned, for purposes of later correlation with a retraction action.
|
||||
|
||||
Handles are, in many cases, implemented as unsigned integers, allocated using a simple
|
||||
scope-wide counter.
|
||||
|
||||
## Initial OID
|
||||
[Initial OID]: #initial-oid
|
||||
|
||||
In the [Syndicate network protocol][], the initial OID is a special [OID][] value understood by
|
||||
prior arrangement to denote an [entity][] (specified by the "[initial ref][]") owned by some
|
||||
remote peer across some network medium. The initial OID of a session is used to bootstrap
|
||||
activity within that session.
|
||||
|
||||
## Initial Ref
|
||||
[Initial Ref]: #initial-ref
|
||||
|
||||
In the [Syndicate network protocol][], the initial ref is a special [entity reference][]
|
||||
associated by prior arrangement with an [initial OID][] in a session in order to bootstrap
|
||||
session activity.
|
||||
|
||||
## Linked Actor
|
||||
[Links]: #linked-actor
|
||||
[Link]: #linked-actor
|
||||
[Linked Actor]: #linked-actor
|
||||
[Linked Actors]: #linked-actor
|
||||
|
||||
Many implementations of the [Syndicated Actor Model][] offer a feature whereby an [actor][] can
|
||||
be spawned so that its root [facet][] is *linked* to the spawning facet in the spawning actor,
|
||||
so that when one terminates, so does the other (by default).
|
||||
|
||||
```ditaa
|
||||
+-Actor 1---------------------------+
|
||||
| +----------+ |
|
||||
| |root facet| |
|
||||
| | (1) | |
|
||||
| ++--------++ |
|
||||
| | | |
|
||||
| +----++ ++----------+ |
|
||||
| |sub– | |sub–facet | |
|
||||
| |facet| |(1.3) | |
|
||||
| |(1.2)| +-+--------++ |
|
||||
| +-----+ | | | +-Actor 6------------+
|
||||
| +-----+--+ ++-------+| presence| +----------+ |
|
||||
| |sub–sub–| |sub–sub–+-------------->|root facet| |
|
||||
| |facet | |facet |<--------------+ (6) | |
|
||||
| |(1.3.4) | |(1.3.5) || presence ++--------++ |
|
||||
| +--------+ +--------+| | | | |
|
||||
| | |+----++ ++----+|
|
||||
+-----------------------------------+ ||sub– | |sub– ||
|
||||
||facet| |facet||
|
||||
||(6.7)| |(6.8)||
|
||||
|+-----+ +-----+|
|
||||
+--------------------+
|
||||
```
|
||||
|
||||
Links are implemented as a pair of "presence" [assertions][], atomically established at the
|
||||
time of the [spawn action][action], each indicating to a special entity with "stop on
|
||||
retraction" behaviour the presence of its peer. When one of these assertions is withdrawn, the
|
||||
targetted entity stops its associated [facet][], automatically terminating any subfacets and
|
||||
executing any stop handlers.
|
||||
|
||||
This allows a "parent" actor to react to termination of its child, perhaps releasing associated
|
||||
resources, and the corresponding "child" actor to be automatically terminated when the facet in
|
||||
its parent that spawned the actor terminates.
|
||||
|
||||
This idea is inspired by [Erlang][], whose
|
||||
"[links](https://www.erlang.org/doc/reference_manual/processes.html#links)" are symmetric,
|
||||
bidirectional, failure-propagating connections among Erlang processes (actors) and whose
|
||||
"[monitors](https://www.erlang.org/doc/reference_manual/processes.html#monitors)" are
|
||||
unidirectional connections similar to the individual "presence" assertions described above.
|
||||
|
||||
## Linked Task
|
||||
[Linked Tasks]: #linked-task
|
||||
[Linked Task]: #linked-task
|
||||
|
||||
Many implementations of the [Syndicated Actor Model][] offer the ability to associate a facet
|
||||
with zero or more native threads, coroutines, objects, or other language-specific
|
||||
representations of asynchronous activities. When such a facet stops (either by explicit [stop
|
||||
action][action] or by crash-termination of the facet's actor), its linked tasks are also
|
||||
terminated. By default, the converse is also the case: a terminating linked task will trigger
|
||||
termination of its associated actor. This allows for resource management patterns similar to
|
||||
those enabled by the related idea of [linked actors][].
|
||||
|
||||
## Macaroon
|
||||
|
||||
A *macaroon* is an access token for authorization of actions in distributed systems. Macaroons
|
||||
were introduced in the paper:
|
||||
|
||||
[*“Macaroons: Cookies with Contextual Caveats for Decentralized Authorization in the
|
||||
Cloud.”*](https://research.google/pubs/pub41892/), by Arnar Birgisson, Joe Gibbs Politz, Úlfar
|
||||
Erlingsson, Ankur Taly, Michael Vrable, and Mark Lentczner. In Proc. Network and Distributed
|
||||
System Security Symposium (NDSS), 2014. [[PDF]](https://research.google/pubs/pub41892.pdf)
|
||||
|
||||
In the [Syndicated Actor Model][], a variation of the macaroon concept is used to represent
|
||||
"sturdyrefs". A sturdyref is a long-lived token authorizing interaction with some entity, which
|
||||
can be upgraded to a live [entity reference][] by presenting it to a gatekeeper entity (TODO:
|
||||
link) across a session of the [Syndicate network protocol][]. (The term "sturdyref" is lifted
|
||||
directly from the [E language][] and associated ecosystem.)
|
||||
|
||||
## Mailbox
|
||||
[Mailbox]: #mailbox
|
||||
|
||||
Every [actor][] notionally has a *mailbox* which receives [events][] resulting from its peers'
|
||||
[actions][]. Each actor spends its existence waiting for an incoming event to appear in its
|
||||
mailbox, removing the event, taking a [turn][] to process it, and repeating the cycle.
|
||||
|
||||
## Membrane
|
||||
[Membrane]: #membrane
|
||||
|
||||
A *membrane* is a structure used in implementations of the [Syndicate network protocol][] to
|
||||
keep track of [wire symbols][].
|
||||
|
||||
## Message
|
||||
[Messages]: #message
|
||||
[Message]: #message
|
||||
|
||||
In the [Syndicated Actor Model][], a *message* is a [value][] carried as the payload or *body*
|
||||
of a message [action][] (and associated [event][]), conveying transient information from some
|
||||
sending [actor][] to a recipient [entity][].
|
||||
|
||||
## Network
|
||||
[Networks]: #network
|
||||
[Network]: #network
|
||||
|
||||
A network is a group of peers, plus a medium of communication, an addressing model, and an
|
||||
associated [scope](#scope).
|
||||
A network is a group of peers ([actors][]), plus a medium of communication (a [transport][]),
|
||||
an addressing model ([references][]), and an associated [scope][].
|
||||
|
||||
## Object-Capability Model
|
||||
[Object-Capability Model]: #object-capability-model
|
||||
|
||||
The [Object-capability model](https://en.wikipedia.org/wiki/Object-capability_model) is a
|
||||
compositional means of expressing access control in a distributed system. It has its roots in
|
||||
operating systems research stretching back decades, but was pioneered in a programming language
|
||||
setting by the [E language][] and the Scheme dialect
|
||||
[W7](http://mumble.net/~jar/pubs/secureos/secureos.html).
|
||||
|
||||
In the [Syndicated Actor Model][], object-capabilities manifest as potentially-[attenuated][]
|
||||
[entity references][].
|
||||
|
||||
## Object Capability Model
|
||||
## Observe
|
||||
[Observe]: #observe
|
||||
[Observation]: #observe
|
||||
|
||||
In the [Syndicated Actor Model][], [assertion][] of an `Observe` record at a [dataspace][]
|
||||
declares an *interest* in receiving notifications about matching [assertions][] and
|
||||
[messages][] as they are asserted, retracted and sent through the dataspace.
|
||||
|
||||
Each `Observe` record contains a [dataspace pattern][] describing a structural predicate over
|
||||
assertion and message [payloads][], plus an [entity reference][] to the [entity][] which should
|
||||
be informed as matching events appear at the dataspace.
|
||||
|
||||
## OID
|
||||
[OID]: #oid
|
||||
|
||||
An *OID* is an "object identifier", a small, session-unique integer acting as an [entity
|
||||
reference][] across a [transport][] link in an instance of the [Syndicate network protocol][].
|
||||
|
||||
## Publishing
|
||||
|
||||
To *publish* something is to *assert* it; see [assertion][].
|
||||
|
||||
## Preserves
|
||||
[Preserves]: #preserves
|
||||
|
||||
Many implementations of the [SAM][] use *Preserves*, a programming-language-independent
|
||||
language for data, as the language defining the possible [values][] that may be exchanged among
|
||||
[entities][] in [assertions][] and [values][].
|
||||
|
||||
See the [chapter on Preserves](./guide/preserves.md) in this manual for more information.
|
||||
|
||||
## Record
|
||||
a Preserves record
|
||||
|
||||
The [Preserves][] data language defines the notion of a *record*, a tuple containing a *label*
|
||||
and zero or more numbered *fields*. The [dataspace pattern][] language used by [dataspaces][]
|
||||
allows for patterns over records as well as over other compound data structures.
|
||||
|
||||
## Reference
|
||||
a.k.a. "Ref", "Entity Reference"
|
||||
[Entity References]: #reference
|
||||
[Entity Reference]: #reference
|
||||
[References]: #reference
|
||||
[Reference]: #reference
|
||||
[Ref]: #reference
|
||||
[Refs]: #reference
|
||||
|
||||
(a.k.a. **Ref**, **Entity Reference**, **[Capability][]**) A *reference* is a pointer or handle
|
||||
denoting a live, stateful [entity][] running within an [actor][]. The entity accepts
|
||||
[Preserves][]-format [messages][] and/or [assertions][]. The capability may be [attenuated][]
|
||||
to restrict the messages and assertions that may be delivered to the denoted entity by way of
|
||||
this particular reference.
|
||||
|
||||
## Retraction
|
||||
[Retraction]: #retraction
|
||||
|
||||
In the [Syndicated Actor Model][], a *retraction* is an [action][] (and corresponding
|
||||
[event][]) which withdraws a previous [assertion][]. Retractions can be explicitly performed
|
||||
within a [turn][], or implicitly performed during [facet][] shutdown or [actor][] termination
|
||||
(both normal termination and crash stop).
|
||||
|
||||
The [SAM][] guarantees that an actor's assertions will be retracted when it terminates, no
|
||||
matter whether an orderly shutdown or an exceptional or crashing situation was the cause.
|
||||
|
||||
## Relay
|
||||
[Relays]: #relay
|
||||
[Relay]: #relay
|
||||
|
||||
A *relay* connects [scopes][], allowing [references][] to denote [entities][] resident in
|
||||
remote [networks][], making use of the [Syndicate network protocol][] to do so.
|
||||
|
||||
See the [Syndicate network protocol][] for more on relays.
|
||||
|
||||
## Relay Entity
|
||||
[Relay Entity]: #relay-entity
|
||||
|
||||
A *relay entity* is a local proxy for an [entity][] at the other side of a [relay][] link. It
|
||||
forwards [events][] delivered to it across its [transport][] to its counterpart at the other
|
||||
end.
|
||||
|
||||
See the [Syndicate network protocol][] for more on relay entities.
|
||||
|
||||
## S6
|
||||
|
||||
[S6, "Skarnet's Small Supervision Suite"](https://skarnet.org/software/s6/), is
|
||||
|
||||
> a small suite of programs for UNIX, designed to allow process [supervision][] (a.k.a service
|
||||
> supervision), in the line of daemontools and runit, as well as various operations on
|
||||
> processes and daemons.
|
||||
>
|
||||
> — <cite>[The S6 website](https://skarnet.org/software/s6/)</cite>
|
||||
|
||||
Synit uses [`s6-log`](https://skarnet.org/software/s6/s6-log.html) to capture standard error
|
||||
output from [the root system bus](./operation/system-bus.md#the-root-system-bus).
|
||||
|
||||
## Schema
|
||||
[Schema]: #schema
|
||||
|
||||
A *schema* defines a mapping between [values][] and host-language types in various programming
|
||||
languages. The mapping describes how to parse values into host-language data, as well as how to
|
||||
unparse host-language data, generating equivalent values. Another way of thinking about a
|
||||
schema is as a specification of the allowable shapes for data to be used in a particular
|
||||
context.
|
||||
|
||||
Synit, and many programs making use of the [Syndicated Actor Model][], uses [Preserves][]'
|
||||
[schema language](https://preserves.gitlab.io/preserves/preserves-schema.html) to define
|
||||
schemas for many different applications.
|
||||
|
||||
For more, see [the section on schemas in the chapter on
|
||||
Preserves](http://zip.kpn:3000/guide/preserves.html#schemas).
|
||||
|
||||
## Scope
|
||||
[Scopes]: #scope
|
||||
[Scope]: #scope
|
||||
|
||||
A *scope* maps [refs](#reference) to the [entities](#entity) they denote. Scopes exist in
|
||||
one-to-one relationship to [networks](#network). Because [message bodies](#message) and
|
||||
[asserted values](#assertion) contain [embedded references](#embedded-references), each message
|
||||
and assertion transmitted via some network is also inseparable from its scope.
|
||||
A *scope* maps [refs][] to the [entities][] they denote. Scopes exist in one-to-one
|
||||
relationship to [networks][]. Because [message bodies][message] and [asserted
|
||||
values][assertion] contain [embedded references][], each message and assertion transmitted via
|
||||
some network is also inseparable from its scope.
|
||||
|
||||
Most [actors](#actor) will participate in a single scope. However, [relay](#relay) actors
|
||||
participate in two or more scopes, translating refs back and forth as messages and assertions
|
||||
traverse the relay.
|
||||
Most [actors][] will participate in a single scope. However, [relay][] actors participate in
|
||||
two or more scopes, translating refs back and forth as messages and assertions traverse the
|
||||
relay.
|
||||
|
||||
**Examples.**
|
||||
|
||||
|
@ -71,34 +687,169 @@ traverse the relay.
|
|||
references.
|
||||
|
||||
2. A TCP/IP socket (or serial link, or WebSocket, or Unix socket, etc.) is a scope for values
|
||||
travelling between two connected processes: [refs on the wire](#wire-symbol) denote
|
||||
travelling between two connected processes: [refs on the wire][wire symbol] denote
|
||||
entities owned by one or the other of the two participants. The "network" for a socket's
|
||||
scope is exactly the two connected peers (NB. and is *not* the underlying TCP/IP network,
|
||||
HTTP network, or Unix kernel that supports the point-to-point link).
|
||||
|
||||
3. An ethernet segment is a scope for values broadcast among stations: the embedded refs are
|
||||
(MAC address, [OID](#oid)) pairs. The network is the set of participating peers.
|
||||
(MAC address, [OID][]) pairs. The network is the set of participating peers.
|
||||
|
||||
4. A running web page is a scope for the JavaScript objects it contains: both local and remote
|
||||
entities are represented by JavaScript objects. The "network" is the JavaScript heap.
|
||||
|
||||
## Subscription
|
||||
See [observation][].
|
||||
## Supervision tree
|
||||
[Supervision trees]: #supervision-tree
|
||||
[Supervision tree]: #supervision-tree
|
||||
|
||||
A *supervision tree* is a concept borrowed from [Erlang][], where a root [supervisor][]
|
||||
supervises other supervisors, which in turn supervise worker [actors][] engaged in some task.
|
||||
As workers fail, their supervisors restart them; if the failures are too severe or too
|
||||
frequent, their direct supervisors fail in turn, and the supervisors' supervisors take action
|
||||
to recover from the failures.
|
||||
|
||||
## Supervisor
|
||||
[Supervisors]: #supervisor
|
||||
[Supervisor]: #supervisor
|
||||
[Supervision]: #supervisor
|
||||
|
||||
A *supervisor* is an [actor][] or [facet][] whose role is to monitor the state of some service,
|
||||
taking action to ensure its availability to other portions of a complete system. When the
|
||||
service fails, the supervisor is able to restart it. If the failures are too severe or too
|
||||
frequent, the supervisor can take an alternative action, perhaps pausing for some time before
|
||||
retrying the service, or perhaps even terminating itself to give its own supervisor in a
|
||||
[supervision tree][] a chance to get things back on track.
|
||||
|
||||
Synit uses supervisors extensively to monitor system daemons and other system services.
|
||||
|
||||
## Sync Peer Entity
|
||||
|
||||
The *sync peer entity* is the [entity reference][] carried in a [synchronization][] [action][]
|
||||
or [event][].
|
||||
|
||||
## Synchronization
|
||||
(`sync` action)
|
||||
[Synchronization]: #synchronization
|
||||
|
||||
An [actor][] may *synchronize* with an [entity][] by scheduling a *synchronization* [action][]
|
||||
targeted at that entity. The action will carry a local [entity reference][] acting as a
|
||||
continuation. When the target entity eventually responds, it will transmit an acknowledgement
|
||||
to the continuation entity reference carried in the request.
|
||||
|
||||
An entity receiving a synchronization [event][] should arrange for an acknowledgement to be
|
||||
delivered to the referenced continuation entity once previously-received events that might
|
||||
modify the recipient's state (or the state of a remote entity that it is proxy for) have been
|
||||
completely processed.
|
||||
|
||||
Most entities do not explicitly include code for responding to synchronization requests. The
|
||||
default code, which simply replies to the continuation immediately, usually suffices. However,
|
||||
sometimes the default is not appropriate. For example, when [relay entity][] is proxying for
|
||||
some remote entity via a [relay][] across a [transport][], it should react to synchronization
|
||||
events by forwarding them to the remote entity. When the remote entity receives the forwarded
|
||||
request, it will reply to its local proxy for the continuation entity, which will in turn
|
||||
forward the reply back across the transport.
|
||||
|
||||
## Syndicate Protocol
|
||||
[Syndicate Network Protocol]: #syndicate-protocol
|
||||
[Syndicate Protocol]: #syndicate-protocol
|
||||
[Protocol]: #syndicate-protocol
|
||||
|
||||
The Syndicate Protocol (a.k.a the **Syndicate Network Protocol**) allows [relays][] to proxy
|
||||
entities from remote [scopes][] into the local scope.
|
||||
|
||||
For more, see [the protocol specification document](./protocol.md).
|
||||
|
||||
## Syndicated Actor Model
|
||||
[Syndicated Actor Model]: #syndicated-actor-model
|
||||
[SAM]: #syndicated-actor-model
|
||||
|
||||
Often abbreviated **SAM**.
|
||||
**Main article: [The Syndicated Actor Model](./syndicated-actor-model.md)**
|
||||
|
||||
Source [entities](#entity) running within an [actor](#actor) publish [assertions](#assertion)
|
||||
and send [messages](#message) to target entities, possibly in other actors.
|
||||
The *Syndicated Actor Model* (often abbreviated **SAM**) is the model of concurrency and
|
||||
communication underpinning Synit. The SAM offers a “conversational” metaphor: programs meet and
|
||||
converse in virtual locations, building common understanding of the state of their shared
|
||||
tasks.
|
||||
|
||||
Essential idea: state replication is more useful than message-passing. (Message-passing
|
||||
protocols usually end up simulating it, badly, anyway.)
|
||||
In the SAM, source [entities][] running within an [actor][] publish [assertions][] and send
|
||||
[messages][] to target entities, possibly in other actors. The essential idea of the SAM is
|
||||
that state replication is more useful than message-passing; message-passing protocols often end
|
||||
up simulating state replication.
|
||||
|
||||
[A thorough introduction to the Syndicated Actor Model](./syndicated-actor-model.md) is
|
||||
available.
|
||||
|
||||
## System Layer
|
||||
|
||||
The *system layer* is an essential part of an operating system, mediating between user-facing
|
||||
programs and the kernel. It provides the technical foundation for many qualities relevant to
|
||||
system security, resilience, connectivity, maintainability and usability.
|
||||
|
||||
The concept of a system layer has only been recently recognised—the term itself was [coined by
|
||||
Benno Rice in a 2019 conference
|
||||
presentation](https://2019.linux.conf.au/schedule/presentation/156/)—although many of the ideas
|
||||
it entails have a long history.
|
||||
|
||||
The hypothesis that the Synit system explores is that the [Syndicated Actor model][] provides a
|
||||
suitable theoretical and practical foundation for a system layer. The system layer demands, and
|
||||
the SAM supplies, well-integrated expression of features such as service naming, presence,
|
||||
discovery and activation; security mechanism and policy; subsystem isolation; and robust
|
||||
handling of partial failure.
|
||||
|
||||
## System Dataspace
|
||||
|
||||
The *system dataspace* in Synit is the primary dataspace entity, owned by an [actor][] running
|
||||
within [the root system bus](./operation/system-bus.md#the-root-system-bus), and (selectively)
|
||||
made available to daemons, system services, and user programs.
|
||||
|
||||
## Timeout
|
||||
[Timeout]: #timeout
|
||||
|
||||
Many implementations of the [Syndicated Actor Model][] offer [actions][] for establishing
|
||||
*timeouts*, i.e. one-off or repeating alarms. Timeouts are frequently implemented as [linked
|
||||
tasks][].
|
||||
|
||||
## Transport
|
||||
[Transport]: #transport
|
||||
|
||||
A *transport* is the underlying medium connecting one [relay][] to its counterpart(s) in an
|
||||
instance of the [Syndicate network protocol][]. For example, a TLS-on-TCP/IP socket may connect
|
||||
a pair of relays to one another, or a UDP multicast socket may connect an entire group of
|
||||
relays across an ethernet.
|
||||
|
||||
## Turn
|
||||
[Turn]: #turn
|
||||
|
||||
Each time an [event][] arrives at an [actor][]'s [mailbox][], the actor takes a *turn*. A turn
|
||||
is the process of handling the triggering event, from the moment of its withdrawal from the
|
||||
mailbox to the moment of the completion of its interpretation.
|
||||
|
||||
In the [SAM][], a turn comprises
|
||||
|
||||
- the [event][] that triggers the turn,
|
||||
- the [entity][] addressed by the event,
|
||||
- the [facet][] owning the targeted entity, and
|
||||
- the collection of pending [actions][] produced during execution.
|
||||
|
||||
If a turn proceeds to completion without an exception or other crash, its pending actions are
|
||||
*committed* (finalised and/or delivered to their target entities). If, on the other hand, the
|
||||
turn is aborted for some reason, its pending actions are *rolled back* (discarded), the actor
|
||||
is terminated, its assertions [retracted][retraction], and all its resources released.
|
||||
|
||||
## Value
|
||||
[Values]: #value
|
||||
[Value]: #value
|
||||
[Payloads]: #value
|
||||
[Payload]: #value
|
||||
|
||||
A [Preserves][] `Value` with embedded data. The embedded data are often [embedded references][]
|
||||
but, in some implementations, may be other kinds of datum. Every [message][] body and every
|
||||
[assertion][] payload is a value.
|
||||
|
||||
## Wire Symbol
|
||||
[Wire Symbols]: #wire-symbol
|
||||
[Wire Symbol]: #wire-symbol
|
||||
|
||||
A *wire symbol* is a structure used in implementations of the [Syndicate network protocol][] to
|
||||
maintain a connection between an in-memory [entity reference][] and the equivalent name for the
|
||||
entity as used in packets sent across the network.
|
||||
|
|
Loading…
Reference in New Issue