.
authorKim Nguyễn <kn@lri.fr>
Sun, 12 Apr 2015 15:33:04 +0000 (17:33 +0200)
committerKim Nguyễn <kn@lri.fr>
Sun, 12 Apr 2015 15:33:04 +0000 (17:33 +0200)
15 files changed:
pres-esop15/01.xhtml [new file with mode: 0644]
pres-esop15/LICENSE.txt [new file with mode: 0644]
pres-esop15/OpenSans-Bold.ttf [new file with mode: 0644]
pres-esop15/OpenSans-BoldItalic.ttf [new file with mode: 0644]
pres-esop15/OpenSans-ExtraBold.ttf [new file with mode: 0644]
pres-esop15/OpenSans-ExtraBoldItalic.ttf [new file with mode: 0644]
pres-esop15/OpenSans-Italic.ttf [new file with mode: 0644]
pres-esop15/OpenSans-Light.ttf [new file with mode: 0644]
pres-esop15/OpenSans-LightItalic.ttf [new file with mode: 0644]
pres-esop15/OpenSans-Regular.ttf [new file with mode: 0644]
pres-esop15/OpenSans-Semibold.ttf [new file with mode: 0644]
pres-esop15/OpenSans-SemiboldItalic.ttf [new file with mode: 0644]
pres-esop15/anbn_tree.svg [new file with mode: 0644]
pres-esop15/ex_ntree.svg [new file with mode: 0644]
pres-esop15/rb_tree.svg [new file with mode: 0644]

diff --git a/pres-esop15/01.xhtml b/pres-esop15/01.xhtml
new file mode 100644 (file)
index 0000000..845513e
--- /dev/null
@@ -0,0 +1,672 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+[
+         <!ENTITY in  "<small style='font-size:small'>∈</small>">
+         <!ENTITY notin  "<small style='font-size:small'>∉</small>">
+         <!ENTITY emptyset  "⦰">
+         <!ENTITY cup       "∪">
+         <!ENTITY cap       "∩">
+         <!ENTITY mapsto  "↦">
+         <!ENTITY rarrow   "⟶">
+         <!ENTITY rsarrow   "→">
+         <!ENTITY cduce   "&#x2102;Duce">
+          <!ENTITY land    "∧" >
+          <!ENTITY lor      "∨" >
+          <!ENTITY setminus "∖" >
+         <!ENTITY bottom   "𝟘" >
+         <!ENTITY top      "𝟙" >
+         <!ENTITY subseteq "⊆" >
+         <!ENTITY leq      "≤" >
+         <!ENTITY Lrarrow  "⟺">
+         <!ENTITY lbag  "⟅">
+         <!ENTITY rbag  "⟆">
+         <!ENTITY lbrack "<span style='font-size:xx-large;'>⟦</span>" >
+         <!ENTITY rbrack "<span style='font-size:xx-large;'>⟧</span>" >
+         <!ENTITY bcirc  "⏺" >
+         <!ENTITY left  "<tt style='color:#d33'>L</tt>" >
+         <!ENTITY right  "<tt style='color:#33d'>R</tt>">
+         <!ENTITY ztop      "⊤" >
+         <!ENTITY rleadsto  "⟿"> <!-- -->
+         <!ENTITY rwave   "↝">
+         <!ENTITY mathV     "𝓥">
+         <!ENTITY mathT     "𝓣">
+         <!ENTITY vdash     "⊢">
+]
+          >
+<html xmlns="http://www.w3.org/1999/xhtml" >
+  <head>
+    <title>A Core Calculus for XQuery 3.0</title>
+
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=utf-8" />
+    <meta name="copyright"
+          content="Copyright &#169; 2013 Kim Nguyễn" />
+
+    <!-- Load jQuery -->
+    <script src="../jquery-2.0.3.min.js" type="text/javascript" ></script>
+    <script src="../libs/raphael-min.js" type="text/javascript" ></script>
+    <!-- Load the library -->
+    <script src="../simpleWebSlides.js" type="text/javascript" ></script>
+
+    <link rel="stylesheet" href="../simpleWebSlides.css" type="text/css"  media="all" />
+    <!-- Load a custom Theme, the class-element marks this style-sheet
+         a "theme" that can be swtiched dynamicaly -->
+    <link class="sws-theme" rel="stylesheet"  title="U-Psud style"  href="../themes/uPsud.css" type="text/css" />
+
+    <!-- Customize some templates and initialize -->
+
+    <script type="text/javascript">
+      SWS.Config['sws-slide-change'] = SWS.Effects.slideChangeFadeOutIn;
+      SWS.Config['sws-object-deactivate'] =  SWS.Effects.objectDeactivateFadeOut;
+      SWS.Config['sws-object-activate'] = SWS.Effects.objectActivateFadeIn;
+
+      //Ensures that we load SWS at the very end, after MathJax has
+      //been initialized
+
+      $(window).load(SWS.Presentation.init);
+
+      var col_change = function (sel, col) {
+      return function (canvas) {
+        canvas.find(".xpath *").css("color","");
+        var objs = canvas.find(sel);
+        objs.css("color", col);
+      };
+      };
+      var reg = SWS.Presentation.registerCallback;
+    </script>
+    <style>
+      <![CDATA[
+
+       @font-face {
+         src: url("OpenSans-Regular.ttf") format("truetype");
+         font-family: "Open Sans";
+         font-weight: normal;
+       }
+
+      @font-face {
+         src: url("OpenSans-Bold.ttf") format("truetype");
+         font-family: "Open Sans";
+         font-weight: bold;
+       }
+
+      @font-face {
+         src: url("OpenSans-Italic.ttf") format("truetype");
+         font-family: "Open Sans";
+         font-style: italic;
+       }
+
+      @font-face {
+         src: url("OpenSans-BoldItalic.ttf") format("truetype");
+         font-family: "Open Sans";
+         font-weight: bold;
+         font-style: italic;
+       }
+
+        ]]>
+
+      body {
+      font-family: 'Open Sans',sans-serif;
+      font-size: 3.75vh;
+      background-color: white;
+      color:  #393938;
+      }
+
+      .sws-canvas {
+            color: #393938;
+      }
+      code, tt {
+                  color: #292928;
+      }
+      pre, dfn, .infer { font-family : serif;
+      font-style:normal;
+      color: #292928;
+      }
+
+      .stack {
+      text-align:center;
+      vertical-align:text-bottom;
+      display:inline-block;
+      }
+      .over {
+      display:block;
+      font-size:small;
+      margin: 0pt;
+      padding: 0pt;
+      }
+
+      .infer {
+      text-align:center;
+      vertical-align:text-bottom;
+      display:inline-block;
+      margin-bottom:1em;
+      margin-top:0em;
+      }
+      .infer > span {
+               display:block;
+               margin: 0pt 0pt 0pt 0pt;
+               padding: 0pt 0pt 0pt 0pt;
+               border-width: 0pt;
+      }
+      .infer > span:last-child {
+               margin: 0pt 0pt 0pt 0pt;
+               padding: 0pt 0pt 0pt 0pt;
+               border-width: 1pt 0pt 0pt 0pt;
+               border-style: solid;
+               border-color:  #292928;
+      }
+      .infer + span {
+               vertical-align:text-top;
+               position:relative;
+               top:-1.75em;
+               display:inline;
+               font-size:80%;
+               color: #00486c;
+               margin: 0pt 0pt 0pt 0pt;
+               padding: 0pt 0pt 0pt 0pt;
+      }
+      span.fill { display:inline-block;
+                  width:100%;
+                  height: 0pt;
+      }
+
+    </style>
+  </head>
+  <body>
+    <div class="sws-slide sws-cover sws-option-nofooter">
+      <h1 style="font-size:200%;position:relative;top:-1em;">A Core Calculus for XQuery 3.0</h1>
+      <h3>Combining Navigational and Pattern-Matching Approaches</h3>
+      <div style="text-align:center;">
+       <table style="display:inline-block">
+         <tr>
+           <td>Giuseppe Castagna<sup>1</sup></td>
+           <td>Hyeonseung Im<sup>2</sup></td>
+         </tr>
+         <tr>
+           <td><u>Kim Nguyễn</u><sup>3</sup></td>
+           <td>Véronique Benzaken<sup>3</sup></td>
+         </tr>
+       </table>
+      </div>
+      <p style="font-size:80%;position:absolute;bottom:2.5em;left:4em;">
+       CNRS, PPS, Université Paris-Diderot, Paris, France <br/>
+       Kangwon National University, Chuncheon, Rep. of Korea<br/>
+       LRI, Université Paris-Sud, Orsay, France
+      </p>
+    </div>
+    <div class="sws-slide">
+      <h1>XQuery 3.0</h1>
+      <p>W3C standard language for querying XML
+      databases/documents</p>
+<code style="background:white">
+   declare function <u>get_links</u>(<u>$page</u>, <u>$print</u>) {
+
+       <span class="for">for</span> <u>$i</u> <span class="for">in</span> <u>$page</u><span class="xpath">/descendant::a[not(ancestor::b)]</span>
+       <span class="for">return</span> <u>print</u>(<u>$i</u>)
+   }
+
+   declare function <u>pretty</u>(<u>$link</u>) {
+       <span class="ts">typeswitch</span>(<u>$link</u>)
+           <span class="ts">case</span> <u>$l</u> <span class="ts">as element(a)</span>
+              return <span class="sw">switch</span> (<u>$l</u><span class="xpath">/@class</span>)
+                 <span class="sw">case</span> "style1"
+                     return &lt;a href={<u>$l</u><span class="xpath">/@href</span>}&gt;&lt;b&gt;{<u>$l</u><span class="xpath">/text()</span>}&lt;/b&gt;&lt;/a&gt;
+                 default return <u>$l</u>
+
+           <span class="ts">default return</span> <u>$link</u>
+   }
+</code>
+    <script type="text/javascript">
+      reg ("0", col_change(".xpath, .for, .ts, .sw",""));
+      reg ("1", col_change(".xpath", "#f80"));
+      reg ("2", col_change(".for",""));
+      reg ("2", col_change(".for", "#290"));
+      reg ("3", col_change(".ts", ""));
+      reg ("3", col_change(".ts", "#80f"));
+      reg ("4", col_change(".sw", ""));
+      reg ("4", col_change(".sw", "#0f2"));
+    </script>
+    </div>
+    <div class="sws-slide">
+      <h1>XQuery 3.0</h1>
+      <ul>
+       <li>Pros<br/>
+         + standardized <br/>
+         + nice declarative syntax for paths
+       </li>
+       <li>Cons<br/>
+         - weird distinction between types/value case<br/>
+         - <s>no type-checking for functions</s>
+       </li>
+      </ul>
+      <p>It's a pity since XML <em>documents</em> are very precisely
+      typed (DTD, XMLSchemas)</p>
+      <p>Document type information is validated at runtime rather than
+      checked statically</p>
+    </div>
+    <div class="sws-slide">
+      <h1>&cduce;</h1>
+      <p>A polymorphic functional language (ML-style) equipped with
+      semantic subtyping</p>
+
+<code>
+  let <u>pretty</u> (&lt;a&gt;_ -&gt; &lt;a&gt;_  &amp;  Any\&lt;a&gt;_ &rarrow; Any\&lt;a>_)
+
+    | &lt;a class="style1" href=<u>h</u> ..&gt; <u>l</u> &rarrow; &lt;a href=<u>h</u>&gt;[ &lt;b&gt;<u>l</u> ]
+    | x &rarrow; x
+
+
+  let <u>get_links</u> (page: &lt;_&gt;_) (print: &lt;a&gt;_ -&gt; &lt;a&gt;_) : [ &lt;a&gt;_ * ] =
+
+      match page with
+      &lt;a&gt;_ &amp; x &rarrow; [ (print x) ]
+    | &lt; (_\‘b) &gt; l &rarrow;
+                 (transform l with (i &amp; &lt;_&gt;_) &rarrow; get_links i print)
+    | _ -&gt; [ ]
+
+
+
+
+</code>
+
+
+    </div>
+    <div class="sws-slide">
+      <h1>&cduce;</h1>
+      <ul>
+       <li>Pros<br/>
+         + Statically typed <br/>
+         + compact (and efficient) type and value pattern-matching
+       </li>
+       <li>Cons<br/>
+         - <s>complex navigation encoded through recursion</s>
+         - no type inference for functions
+       </li>
+      </ul>
+      <p>Writing functions to traverse documents is painfull</p>
+    </div>
+    <div class="sws-slide">
+      <h1>This work</h1>
+      <ol style="margin-left:1em; margin-right:0.25em;list-style-position:inside;">
+       <li id="tobox" style="padding:1em 0em 1em 0em;"><span class="lh">Add support for path navigation to
+           &cduce;</span>
+         <ul id="toshow" style="margin-top:2em;display:none;">
+           <li>Enrich the type algebra with <em>zippers</em> (à la Huet)</li>
+           <li>Extend pattern-matching construct to <em>zipped values  and types</em></li>
+           <li>Encode path expressions as recursive patterns</li>
+         </ul>
+       </li>
+       <li style="padding:1em 0em 1em 0em;">Perform a type-directed translation from XQuery to
+         &cduce;</li>
+
+      </ol>
+      <script type="text/javascript">
+       reg ("0", col_change(".lh",""));
+       reg ("1", col_change(".lh", "#f80"));
+
+       reg ("2", function (canvas) { $("#toshow").show(); });
+       reg ("3", function (c) { $("#tobox").css (
+       { 'background' : '#dfd', 'border-radius': '1em' });});
+      </script>
+    </div>
+    <div class="sws-slide">
+      <h1>&cduce;'s type algebra</h1>
+<pre>
+    t ::=  b  |  c  |  t × t  |  t &rarrow; t  |  t &lor; t  |  t  &land; t  |  t &setminus; t  |  &top;  |  &bottom;  |  &alpha;
+</pre>
+<p><dfn>b</dfn> : ranges over basic types (<tt>Int</tt>, <tt>String</tt>, …)<br/>
+   <dfn>c</dfn> : ranges over singleton types
+   (<tt>`A</tt>, <tt>42</tt>, …)<br/>
+   <dfn>&alpha;</dfn> : type variables<br/>
+   types are interpreted co-inductively (recursive types) and regular
+   expression types<br/>
+</p>
+<pre>
+    t<sub>1</sub> ≡ (<tt>Int</tt> × t<sub>1</sub>) &lor; t<sub>2</sub>
+    t<sub>2</sub> ≡ (<tt>Bool</tt> × t<sub>2</sub>) &lor; (<tt>Bool</tt> × <tt>`nil</tt>)
+
+    <span class="sws-pause">t<sub>1</sub> ≡ <tt>[ Int* Bool+ ]</tt></span>
+
+</pre>
+    </div>
+    <div class="sws-slide">
+      <h1>Semantic subtyping</h1>
+<pre style="text-align:center;">
+t &leq; s   &Lrarrow;   &lbrack;t&rbrack; &subseteq;  &lbrack;s&rbrack;
+</pre>
+<p><dfn>&lbrack; &rbrack;</dfn> interpretation of types as sets of
+  values<br/>
+  Allows to reason <i>modulo</i> semantic equivalence of type connectives :
+</p>
+<pre >
+      <tt>[ Int* (Int | Bool*)? ]</tt> &land; <tt>[ Int+ (Bool+ | Int)* ]</tt> ≡ <tt>[Int+ Bool*]</tt>
+</pre>
+</div>
+<div class="sws-slide">
+      <h1>&cduce; patterns</h1>
+<pre style="text-align:center;">    p ::=  t  |  p | p  |  p &amp; p  | (p, p) |  x   </pre>
+<p><dfn>t</dfn> ranges over types<br/>
+  <dfn>x</dfn> ranges over capture variables<br/>
+  patterns are also co-inductively interpreted (recursive patterns)
+</p>
+<p><dfn><u>v / p</u></dfn> : matching a value against a pattern yields a
+  substitution from variables to values<br/>
+   <dfn><u>&lbag; p &rbag;</u></dfn> : the set of values accepted by a
+   pattern is <u>a type</u><br/>
+   <dfn><u> t / p</u></dfn> : matching a type against a pattern yields a
+   substitution from variables to types<br/>
+</p>
+</div>
+<div class="sws-slide">
+      <h1>&cduce; patterns (example)</h1>
+<p>Assume <tt><u>l</u></tt> has type <tt>[ Int+ Bool* ]</tt>,  consider:</p>
+<code>
+       match <u>l</u> with
+       [ _* (<u>x</u> &amp; Int) Bool* (<u>y</u> &amp; Bool) ] &rarrow;  (<u>x</u>, <u>y</u>)
+    |  [ _* (<u>x</u> &amp; Int) ]                  &rarrow;  (<u>x</u>, `false)
+    |  [ ]                               &rarrow;  (0, `false)
+</code>
+<ol>
+<li><dfn>&lbag;<tt>[ _* (<u>x</u> &amp; Int) Bool* (<u>y</u> &amp; Bool) ]</tt>&rbag; ≡ <tt>[ &top;* Int Bool+ ]</tt></dfn><br/>
+  yield : { x &mapsto; <tt>Int</tt>, y &mapsto; <tt>Bool</tt> }
+</li>
+<li><dfn>&lbag;<tt>[ _* (<u>x</u> &amp; Int) ]</tt>&rbag; ≡ <tt>[ &top;* Int ]</tt></dfn><br/>
+  yield : { x &mapsto; <tt>Int</tt> }
+</li>
+<li>Since <dfn><tt>[Int+ Bool* ]</tt> &setminus; ( <tt>[ &top;* Int Bool+ ]</tt> &lor;  <tt>[ &top;* Int]</tt>) ≡ &bottom;  </dfn>
+    the third case is unreachable.
+</li>
+
+
+</ol>
+
+</div>
+<div class="sws-slide">
+<h1>&cduce; data-model</h1>
+<p>Sequences are nested pairs: <dfn><tt>[</tt> v<sub>1</sub>  … v<sub>n</sub> <tt>]</tt> ≡ (v<sub>1</sub>, (…, (v<sub>n</sub>, <tt>`nil</tt>)))
+</dfn></p>
+<p>XML documents are tagged sequences: <pre style="text-align:center;"><tt>&lt;foo&gt;[</tt> v<sub>1</sub>  … v<sub>n</sub> <tt>]</tt> ≡ (<tt>`foo</tt>, <tt>[</tt> v<sub>1</sub>  … v<sub>n</sub> <tt>]</tt>)</pre>
+</p>
+<p>Ususal lisp-like encoding of trees, how to perform navigation
+  (including upward ?)</p>
+</div>
+<div class="sws-slide">
+<h1>Zippers (1/2)</h1>
+<ul>
+  <li>Introduced in 1997 by Gérard Huet</li>
+  <li>Stack of visited</li>
+  <li>Push the current node on the stack when descending</li>
+  <li>Put the top of the stack and pop it to go backward</li>
+  <li>Tag the elements of the stack to remember which of a node we
+  have visited</li>
+</ul>
+<pre style="text-align:center;"> v ::=  …  |  v<sub>&delta;</sub>
+ &delta; ::=  &bcirc;  | &left;v · &delta; | &right;v · &delta;
+</pre>
+
+</div>
+<div class="sws-slide">
+<h1>Zippers (2/2)</h1>
+<p><tt><u>fst</u></tt> (resp. <tt><u>snd</u></tt>) takes the first (resp. second)
+  projection of a pair and update its zipper accordingly:</p>
+<pre>    v<sub>1</sub> ≡ (1, (2, (3, (4, `nil))))<sub>&bcirc;</sub>
+    v<sub>11</sub> ≡ fst v<sub>1</sub> ≡ 1<sub>&left;(1, (2, (3, (4, `nil))))<sub>&bcirc;</sub> · &bcirc; </sub>
+    v<sub>2</sub> ≡ snd v<sub>1</sub> ≡ (2, (3, (4, `nil)))<sub>&right;(1, (2, (3, (4, `nil))))<sub>&bcirc;</sub> · &bcirc; </sub>
+    v<sub>3</sub> ≡ snd v<sub>2</sub> ≡ (3, (4, `nil))<sub>&right;v<sub>2</sub> · &right;v<sub>1</sub> · &bcirc; </sub>
+</pre>
+<p><tt><u>up</u></tt> pops returns the head of the zipper: </p>
+<pre>    up v<sub>3</sub> ≡ v<sub>2</sub> ≡ (2, (3, (4, `nil)))<sub>&right;(1, (2, (3, (4, `nil))))<sub>&bcirc;</sub> · &bcirc; </sub>
+</pre>
+</div>
+<div class="sws-slide">
+  <h1>Zipper types</h1>
+<p>We extend the type-algebra with zipper types:</p>
+<pre style="text-align:center;"> t ::=  …  |  t<sub>&tau;</sub>
+ &tau; ::=  &bcirc;  |  &left;t · &tau;  | &right;t · &tau;  |  &tau; &lor; &tau;  |  &tau; &setminus; &tau;  |  &ztop;
+</pre>
+<p><dfn>&bcirc;</dfn>: singleton type denoting the empty zipper<br/>
+   <dfn>&ztop;</dfn>: the top zipper types<br/>
+   Zipper types are interpreted co-inductively (regular expressions on
+   zippers)<br/><br/>
+   <dfn><tt>Int</tt><sub>(&left;&top;)* &bcirc;</sub></dfn>: type of
+   integers that are the leftmost descendant of a tree.<br/>
+   <dfn><tt><![CDATA[<html>[ <head>[…] <body>[…] ]]]></tt><sub>&bcirc;</sub></dfn>: type of
+   HTML documents<br/>
+   <dfn><tt><![CDATA[<a href=String>[ … ]]]></tt><sub>&ztop;</sub></dfn>: types of links in any context
+
+</p>
+</div>
+<div class="sws-slide">
+<h1>Tree navigation</h1>
+<p>Since patterns contain types, we can check complex
+  conditions:</p>
+<pre style="width:60%;display:inline-block;border-width:0pt 1pt 0pt 0pt; border-style:dashed;border-color: black;vertical-align:middle">
+    p ≡ <tt id="test">&lt;a&gt;_</tt>   &lor;   <tt>&lt;_&gt;[ _* p _* ]</tt>
+    &tau; ≡ &bcirc;   &lor;   &right;&top; · &tau;   &lor;   &left;(&top;&setminus; <tt>&lt;b&gt;_</tt>) · &tau; 
+
+</pre>
+<code style="width:20%;display:inline-block;vertical-align:middle">
+    match <u>v</u> with
+       <dfn>p<sub>&tau;</sub></dfn> &amp; <u>x</u> &rarrow; …
+   | _        &rarrow; …
+</code>
+<p style="background:white">
+We want more, namely return <i>all</i> descendants (ancestor,
+  children,  siblings, …) of a node matching a particular condition
+<br/><br/>
+Remark: (recursive) patterns <u>already perform a recursive traversal
+  of the value</u>
+<br/><br/>
+<em>Idea</em>: Piggy back on the traversal and <em>accumulate</em>
+nodes in special variables
+</p>
+<script type="text/javascript">
+  reg (0, col_change ("#test", ""));
+  reg (1, col_change ("#test", "orange"));
+</script>
+</div>
+<div class="sws-slide">
+  <h1>Operators and Accumulators</h1>
+<p>An <u>operator</u> is a 4-tupple <dfn>(o, n<sub>o</sub>,
+    &rleadsto;<sub>o</sub>, &rarrow;<sub>o</sub>)</dfn>, where:</p>
+<p><dfn><u>o</u></dfn>: is the accumulator name<br/>
+<dfn><u>n<sub>o</sub></u></dfn>: is the arity of <u>o</u><br/>
+<dfn><u>&rleadsto;<sub>o</sub></u></dfn>:
+&mathV;<sup>n<sub>o</sub></sup> &rsarrow; &mathV;, the reduction relation <br/>
+<dfn><u>&rarrow;<sub>o</sub></u></dfn>:
+&mathT;<sup>n<sub>o</sub></sup> &rsarrow; &mathT;, the typing relation <br/>
+</p>
+<p>An <u>accumulator</u> is a variable (ranged over
+  by <u>ẋ</u>, <u>ẏ</u>, …) with:<br/><br/>
+  <dfn><u>Op(ẋ)</u></dfn>: an operator<br/>
+  <dfn><u>Init(ẋ)</u> &in; &mathV;</dfn> : an initial value<br/>
+</p>
+</div>
+<div class="sws-slide">
+  <h1>Some operators</h1>
+  <pre>
+    v, v' &rleadsto;<sup>cons,</sup> (v, v') <br/>
+    v, <tt>`nil</tt> &rleadsto;<sup>snoc</sup> (v, <tt>`nil</tt>)<br/>
+    v, (v',v'') &rleadsto;<sup>snoc</sup> (v', snoc(v,v''))<br/>
+  </pre>
+<p>Now we can use accumulators equipped with cons/snoc in
+  patterns. Instead of matching a single node against a variable, it
+  <u>accumulates</u> that node in sequence (in reverse or in-order).</p>
+</div>
+<div class="sws-slide">
+<h1>Pattern matching semantics (v/p)</h1>
+<pre style="text-align:center;">
+  &sigma;; &delta; &vdash; v / p &rleadsto; &gamma;, &sigma;'
+</pre>
+<p style="font-size:90%"><dfn><u>&sigma;</u>, <u>&sigma;'</u></dfn>: mapping from accumulators to
+  values<br/>
+  <dfn><u>v</u></dfn>: input value<br/>
+  <dfn><u>p</u></dfn>: pattern<br/>
+  <dfn><u>&gamma;</u></dfn>: mapping from capture variables to
+  values<br/>
+  <dfn><u>&delta;</u></dfn>: current context
+</p>
+<div style="padding:0em 1em 0em; text-align:justify;font-size:85%;background:white;">
+  <div class="infer">
+    <span> v &in; &lbrack; t &rbrack;</span>
+    <span>&sigma;; &delta; &vdash; v / t &rleadsto; &emptyset;,
+      &sigma;</span>
+  </div><span>(type)</span>
+
+  <div class="infer">
+    <span></span>
+    <span>&sigma;; &delta; &vdash; v / ẋ &rleadsto; &emptyset;,
+      &sigma;[ ẋ := Op(ẋ) (v<sub>&delta;</sub>, &sigma;(ẋ)) ]</span>
+  </div><span>(acc)</span>
+
+  <div class="infer">
+    <span></span>
+    <span>&sigma;; &delta; &vdash; v / x &rleadsto; { x &mapsto; v },
+      &sigma;</span>
+  </div><span>(var)</span>
+
+  <div class="infer">
+    <span>&sigma;; &left;v · &delta; &vdash; (fst v)/p<sub>1</sub>
+    &rleadsto; &gamma;<sub>1</sub>, &sigma;' </span>
+    <span>&sigma;'; &right;v · &delta; &vdash; (snd v)/p<sub>2</sub> 
+      &rleadsto; &gamma;<sub>2</sub>, &sigma;''
+    </span>
+    <span>&sigma;; &delta; &vdash; v /
+      (p<sub>1</sub>, p<sub>2</sub>)  &rleadsto;
+      &gamma;<sub>1</sub>&cup; &gamma;<sub>2</sub>,
+      &sigma;''</span>
+  </div><span>(pair)</span>  <span class="fill"></span>
+<span>… and some other rules for alternation, failure, recursion, <i>etc.</i></span>
+</div>
+</div>
+<div class="sws-slide">
+  <h1>Typing of patterns (with accumulators) 1/2</h1>
+  <p>Well known that typing path expressions escapes regular tree languages
+    (i.e. &cduce;'s types). Consider:
+  </p>
+<pre style="margin:-3em 0pt -1em;">
+      t ≡ <tt>&lt;c&gt;[ <u>&lt;a&gt;[]</u> t <u>&lt;b&gt;[]</u> ] </tt>   &lor;   <tt>&lt;c&gt;[]</tt>   <img style="margin-left:3em;width:15%;vertical-align:middle;" src="anbn_tree.svg" alt="anbn"/>
+</pre>
+<p>The set of all <tt><u>a</u></tt> or <tt><u>b</u></tt> labeled
+  descendants
+  is <dfn>{ <tt>[<u>&lt;a&gt;[]</u></tt><sup>n</sup> <tt><u>&lt;b&gt;[]</u></tt><sup>n</sup> <tt>]</tt>  | n ≥ 0 }</dfn>
+which is not a type.</p>
+<p> Intuitively it means that when applying a
+  recursive pattern against a recursive type, we may generate an
+  <s>infinite number of distinct types</s> for an accumulator.
+</p>
+</div>
+<div class="sws-slide">
+  <h1>Typing of patterns (with accumulators) 2/2</h1>
+  <p>We use the typing relation of operators to introduce
+  approximations:</p>
+  <pre>
+    <u>t<sub>0</sub></u>, <tt>[</tt> (t<sub>1</sub> &lor; … &lor; t<sub>n</sub>)<tt>* ]</tt> &rarrow;<sup>cons</sup> <tt>[</tt> (<u>t<sub>0</sub></u> &lor; t<sub>1</sub> &lor; … &lor; t<sub>n</sub>)<tt>* ]</tt> <br/>
+    <u>t<sub>0</sub></u>, <tt>[</tt> (t<sub>1</sub> &lor; … &lor; t<sub>n</sub>)<tt>* ]</tt> &rarrow;<sup>snoc</sup> <tt>[</tt> (<u>t<sub>0</sub></u> &lor; t<sub>1</sub> &lor; … &lor; t<sub>n</sub>)<tt>* ]</tt>
+  </pre>
+  <p>Ensures termination of typechecking of patterns.</p>
+</div>
+<div class="sws-slide">
+  <h1>Results</h1>
+<p>Zippers (in values, types, patterns) are orthogonal to the rest of the language</p>
+<ul>
+  <li><u>Subtyping and typechecking</u> are extended straightforwardly</li>
+  <li>Typing of patterns introduces <u>sound approximations</u> only for accumulators</li>
+  <li>Provided the operators are sound, the whole language remains <u>type-safe</u></li>
+</ul>
+</div>
+<div class="sws-slide">
+  <h1>From zippers to XPath</h1>
+  <p>We use  <u>regular expressions</u> over basic &left;/&right; zippers to encode XPath</p>
+<code style="width:50%;float:left;">   <![CDATA[<a>[ <b>[
+          <c>[]
+          <d>[]
+          <e>[ <f> [] ]
+        ]
+   ]]]>
+</code><img style="width:17.5%;" src="ex_ntree.svg" alt="ex_ntree" /><br/>
+<p class="sws-pause"><img style="margin-top:-1em;margin-left:5%;width:85%;" src="rb_tree.svg" alt="rb_tree"/></p>
+</div>
+<div class="sws-slide">
+<h1>Downward axes</h1>
+<tt>  <![CDATA[<a>[ <b>[  <c>[]  <d>[] <e>[ <f> [] ]   ]  ]]]><sub>&bcirc;</sub></tt>
+<object id="svgRBTree" data="rb_tree.svg" type="image/svg+xml" style="margin-left:7.5%;width:85%"  />
+<pre>
+     <tt>self ::</tt> t ≡    (ẋ <tt>&amp;</tt> t | _ )<sub>&ztop;</sub>
+     <tt>child ::</tt> t ≡  <tt>&lt;_&gt;[</tt> (ẋ <tt>&amp;</tt> t | _ )<tt>* ]</tt><sub>&ztop;</sub>
+     <tt>descendant-or-self::</tt> t ≡   X ≡ ((ẋ <tt>&amp;</tt> t | _ ) <tt> &amp; &lt;_&gt;[</tt> X <tt>* ]</tt>)<sub>&ztop;</sub>
+     <tt>descendant</tt> :: t ≡ <tt>&lt;_&gt;[ (descendant-or-self::</tt>t<tt>)* ]</tt><sub>&ztop;</sub>
+</pre>
+<!--
+<script type="text/javascript">
+/* <![CDATA[ */
+  var svgDoc = null;
+
+  function reset () {
+        svgDoc = svgDoc || document.getElementById("svgRBTree").contentDocument;
+        var f = svgDoc.getElementById("nodef");
+        f.style['fillOpacity'] = "0";
+        var elems = svgDoc.getElementsByClassName("parentf");
+        for(var i = 0; i < elems.length; i++) {
+            elems[i].style['strokeWidth'] = '2px';
+       };
+  };
+
+  reg (0, function (c) {
+         console.log(0);
+         reset();
+  });
+
+  reg (1, function (c) {
+         console.log(1);
+         var f = svgDoc.getElementById("nodef");
+         console.log(' Opacity ' + f.style['fillOpacity']);
+         f.style['fillOpacity'] = "0.5";
+         console.log(' Opacity ' + f.style['fillOpacity']);
+     });
+
+  reg (2, function (c) {
+         console.log(2);
+        var elems = svgDoc.getElementsByClassName("parentf");
+        for(i = 0; i < elems.length; i++) {
+             elems[i].style['strokeWidth'] = '6px';
+          }
+     });
+   reg (3, function (c) {          console.log(3); reset(); });
+/*]]>*/
+</script>
+-->
+</div>
+<div class="sws-slide">
+<h1>Upward axes</h1>
+<tt>  <![CDATA[<a>[ <b>[  <c>[]  <d>[] <e>[ <f> [] ]   ]  ]]]><sub>&bcirc;</sub></tt>
+<object id="svgRBTree" data="rb_tree.svg" type="image/svg+xml" style="margin-left:7.5%;width:85%"  />
+<pre>
+     <tt>parent ::</tt> t ≡   &top;<sub> (&left;_) · (&right;_)* · (&right; ẋ &amp; t) · (( (&left; _) · &ztop;)  &lor;  &bcirc; )</sub>
+     <tt>ancestor ::</tt> t ≡   &top;<sub> ((&left;_) · (&right;_)* · (&right; ẋ &amp; t))* · &bcirc; </sub>
+</pre>
+</div>
+<div class="sws-slide">
+  <h1>Other results</h1>
+<ul>
+  <li>Encoding of paths is compositional</li>
+  <li>Once we have path, translation from XQuery to &cduce; is straightforward</li>
+  <li>We also give a direct typing algorithm for XQuery 3.0 rather than typing the translation to &cduce;</li>
+</ul>
+</div>
+<div class="sws-slide">
+<h1>Conclusion, thoughts and future work</h1>
+<ul>
+  <li>Adding path expressions to a functional language such as &cduce; is possible </li>
+  <li>Semantic subtyping and regular expression types play nicely with zippers</li>
+  <li>In terms of language design, exposing directly zippers patterns to the programmer is a big no-no</li>
+  <li>Can also be applied to XSLT</li>
+  <li>Implementation on-going (including a &cduce; to javascript backend)</li>
+  <li>Extend the approach to Json (google ``path language for json''), i.e. generalise from products to extensible records</li>
+</ul>
+
+</div>
+
+  </body>
+</html>
diff --git a/pres-esop15/LICENSE.txt b/pres-esop15/LICENSE.txt
new file mode 100644 (file)
index 0000000..75b5248
--- /dev/null
@@ -0,0 +1,202 @@
+\r
+                                 Apache License\r
+                           Version 2.0, January 2004\r
+                        http://www.apache.org/licenses/\r
+\r
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r
+\r
+   1. Definitions.\r
+\r
+      "License" shall mean the terms and conditions for use, reproduction,\r
+      and distribution as defined by Sections 1 through 9 of this document.\r
+\r
+      "Licensor" shall mean the copyright owner or entity authorized by\r
+      the copyright owner that is granting the License.\r
+\r
+      "Legal Entity" shall mean the union of the acting entity and all\r
+      other entities that control, are controlled by, or are under common\r
+      control with that entity. For the purposes of this definition,\r
+      "control" means (i) the power, direct or indirect, to cause the\r
+      direction or management of such entity, whether by contract or\r
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r
+      outstanding shares, or (iii) beneficial ownership of such entity.\r
+\r
+      "You" (or "Your") shall mean an individual or Legal Entity\r
+      exercising permissions granted by this License.\r
+\r
+      "Source" form shall mean the preferred form for making modifications,\r
+      including but not limited to software source code, documentation\r
+      source, and configuration files.\r
+\r
+      "Object" form shall mean any form resulting from mechanical\r
+      transformation or translation of a Source form, including but\r
+      not limited to compiled object code, generated documentation,\r
+      and conversions to other media types.\r
+\r
+      "Work" shall mean the work of authorship, whether in Source or\r
+      Object form, made available under the License, as indicated by a\r
+      copyright notice that is included in or attached to the work\r
+      (an example is provided in the Appendix below).\r
+\r
+      "Derivative Works" shall mean any work, whether in Source or Object\r
+      form, that is based on (or derived from) the Work and for which the\r
+      editorial revisions, annotations, elaborations, or other modifications\r
+      represent, as a whole, an original work of authorship. For the purposes\r
+      of this License, Derivative Works shall not include works that remain\r
+      separable from, or merely link (or bind by name) to the interfaces of,\r
+      the Work and Derivative Works thereof.\r
+\r
+      "Contribution" shall mean any work of authorship, including\r
+      the original version of the Work and any modifications or additions\r
+      to that Work or Derivative Works thereof, that is intentionally\r
+      submitted to Licensor for inclusion in the Work by the copyright owner\r
+      or by an individual or Legal Entity authorized to submit on behalf of\r
+      the copyright owner. For the purposes of this definition, "submitted"\r
+      means any form of electronic, verbal, or written communication sent\r
+      to the Licensor or its representatives, including but not limited to\r
+      communication on electronic mailing lists, source code control systems,\r
+      and issue tracking systems that are managed by, or on behalf of, the\r
+      Licensor for the purpose of discussing and improving the Work, but\r
+      excluding communication that is conspicuously marked or otherwise\r
+      designated in writing by the copyright owner as "Not a Contribution."\r
+\r
+      "Contributor" shall mean Licensor and any individual or Legal Entity\r
+      on behalf of whom a Contribution has been received by Licensor and\r
+      subsequently incorporated within the Work.\r
+\r
+   2. Grant of Copyright License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      copyright license to reproduce, prepare Derivative Works of,\r
+      publicly display, publicly perform, sublicense, and distribute the\r
+      Work and such Derivative Works in Source or Object form.\r
+\r
+   3. Grant of Patent License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      (except as stated in this section) patent license to make, have made,\r
+      use, offer to sell, sell, import, and otherwise transfer the Work,\r
+      where such license applies only to those patent claims licensable\r
+      by such Contributor that are necessarily infringed by their\r
+      Contribution(s) alone or by combination of their Contribution(s)\r
+      with the Work to which such Contribution(s) was submitted. If You\r
+      institute patent litigation against any entity (including a\r
+      cross-claim or counterclaim in a lawsuit) alleging that the Work\r
+      or a Contribution incorporated within the Work constitutes direct\r
+      or contributory patent infringement, then any patent licenses\r
+      granted to You under this License for that Work shall terminate\r
+      as of the date such litigation is filed.\r
+\r
+   4. Redistribution. You may reproduce and distribute copies of the\r
+      Work or Derivative Works thereof in any medium, with or without\r
+      modifications, and in Source or Object form, provided that You\r
+      meet the following conditions:\r
+\r
+      (a) You must give any other recipients of the Work or\r
+          Derivative Works a copy of this License; and\r
+\r
+      (b) You must cause any modified files to carry prominent notices\r
+          stating that You changed the files; and\r
+\r
+      (c) You must retain, in the Source form of any Derivative Works\r
+          that You distribute, all copyright, patent, trademark, and\r
+          attribution notices from the Source form of the Work,\r
+          excluding those notices that do not pertain to any part of\r
+          the Derivative Works; and\r
+\r
+      (d) If the Work includes a "NOTICE" text file as part of its\r
+          distribution, then any Derivative Works that You distribute must\r
+          include a readable copy of the attribution notices contained\r
+          within such NOTICE file, excluding those notices that do not\r
+          pertain to any part of the Derivative Works, in at least one\r
+          of the following places: within a NOTICE text file distributed\r
+          as part of the Derivative Works; within the Source form or\r
+          documentation, if provided along with the Derivative Works; or,\r
+          within a display generated by the Derivative Works, if and\r
+          wherever such third-party notices normally appear. The contents\r
+          of the NOTICE file are for informational purposes only and\r
+          do not modify the License. You may add Your own attribution\r
+          notices within Derivative Works that You distribute, alongside\r
+          or as an addendum to the NOTICE text from the Work, provided\r
+          that such additional attribution notices cannot be construed\r
+          as modifying the License.\r
+\r
+      You may add Your own copyright statement to Your modifications and\r
+      may provide additional or different license terms and conditions\r
+      for use, reproduction, or distribution of Your modifications, or\r
+      for any such Derivative Works as a whole, provided Your use,\r
+      reproduction, and distribution of the Work otherwise complies with\r
+      the conditions stated in this License.\r
+\r
+   5. Submission of Contributions. Unless You explicitly state otherwise,\r
+      any Contribution intentionally submitted for inclusion in the Work\r
+      by You to the Licensor shall be under the terms and conditions of\r
+      this License, without any additional terms or conditions.\r
+      Notwithstanding the above, nothing herein shall supersede or modify\r
+      the terms of any separate license agreement you may have executed\r
+      with Licensor regarding such Contributions.\r
+\r
+   6. Trademarks. This License does not grant permission to use the trade\r
+      names, trademarks, service marks, or product names of the Licensor,\r
+      except as required for reasonable and customary use in describing the\r
+      origin of the Work and reproducing the content of the NOTICE file.\r
+\r
+   7. Disclaimer of Warranty. Unless required by applicable law or\r
+      agreed to in writing, Licensor provides the Work (and each\r
+      Contributor provides its Contributions) on an "AS IS" BASIS,\r
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r
+      implied, including, without limitation, any warranties or conditions\r
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r
+      PARTICULAR PURPOSE. You are solely responsible for determining the\r
+      appropriateness of using or redistributing the Work and assume any\r
+      risks associated with Your exercise of permissions under this License.\r
+\r
+   8. Limitation of Liability. In no event and under no legal theory,\r
+      whether in tort (including negligence), contract, or otherwise,\r
+      unless required by applicable law (such as deliberate and grossly\r
+      negligent acts) or agreed to in writing, shall any Contributor be\r
+      liable to You for damages, including any direct, indirect, special,\r
+      incidental, or consequential damages of any character arising as a\r
+      result of this License or out of the use or inability to use the\r
+      Work (including but not limited to damages for loss of goodwill,\r
+      work stoppage, computer failure or malfunction, or any and all\r
+      other commercial damages or losses), even if such Contributor\r
+      has been advised of the possibility of such damages.\r
+\r
+   9. Accepting Warranty or Additional Liability. While redistributing\r
+      the Work or Derivative Works thereof, You may choose to offer,\r
+      and charge a fee for, acceptance of support, warranty, indemnity,\r
+      or other liability obligations and/or rights consistent with this\r
+      License. However, in accepting such obligations, You may act only\r
+      on Your own behalf and on Your sole responsibility, not on behalf\r
+      of any other Contributor, and only if You agree to indemnify,\r
+      defend, and hold each Contributor harmless for any liability\r
+      incurred by, or claims asserted against, such Contributor by reason\r
+      of your accepting any such warranty or additional liability.\r
+\r
+   END OF TERMS AND CONDITIONS\r
+\r
+   APPENDIX: How to apply the Apache License to your work.\r
+\r
+      To apply the Apache License to your work, attach the following\r
+      boilerplate notice, with the fields enclosed by brackets "[]"\r
+      replaced with your own identifying information. (Don't include\r
+      the brackets!)  The text should be enclosed in the appropriate\r
+      comment syntax for the file format. We also recommend that a\r
+      file or class name and description of purpose be included on the\r
+      same "printed page" as the copyright notice for easier\r
+      identification within third-party archives.\r
+\r
+   Copyright [yyyy] [name of copyright owner]\r
+\r
+   Licensed under the Apache License, Version 2.0 (the "License");\r
+   you may not use this file except in compliance with the License.\r
+   You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
diff --git a/pres-esop15/OpenSans-Bold.ttf b/pres-esop15/OpenSans-Bold.ttf
new file mode 100644 (file)
index 0000000..fd79d43
Binary files /dev/null and b/pres-esop15/OpenSans-Bold.ttf differ
diff --git a/pres-esop15/OpenSans-BoldItalic.ttf b/pres-esop15/OpenSans-BoldItalic.ttf
new file mode 100644 (file)
index 0000000..9bc8009
Binary files /dev/null and b/pres-esop15/OpenSans-BoldItalic.ttf differ
diff --git a/pres-esop15/OpenSans-ExtraBold.ttf b/pres-esop15/OpenSans-ExtraBold.ttf
new file mode 100644 (file)
index 0000000..21f6f84
Binary files /dev/null and b/pres-esop15/OpenSans-ExtraBold.ttf differ
diff --git a/pres-esop15/OpenSans-ExtraBoldItalic.ttf b/pres-esop15/OpenSans-ExtraBoldItalic.ttf
new file mode 100644 (file)
index 0000000..31cb688
Binary files /dev/null and b/pres-esop15/OpenSans-ExtraBoldItalic.ttf differ
diff --git a/pres-esop15/OpenSans-Italic.ttf b/pres-esop15/OpenSans-Italic.ttf
new file mode 100644 (file)
index 0000000..c90da48
Binary files /dev/null and b/pres-esop15/OpenSans-Italic.ttf differ
diff --git a/pres-esop15/OpenSans-Light.ttf b/pres-esop15/OpenSans-Light.ttf
new file mode 100644 (file)
index 0000000..0d38189
Binary files /dev/null and b/pres-esop15/OpenSans-Light.ttf differ
diff --git a/pres-esop15/OpenSans-LightItalic.ttf b/pres-esop15/OpenSans-LightItalic.ttf
new file mode 100644 (file)
index 0000000..68299c4
Binary files /dev/null and b/pres-esop15/OpenSans-LightItalic.ttf differ
diff --git a/pres-esop15/OpenSans-Regular.ttf b/pres-esop15/OpenSans-Regular.ttf
new file mode 100644 (file)
index 0000000..db43334
Binary files /dev/null and b/pres-esop15/OpenSans-Regular.ttf differ
diff --git a/pres-esop15/OpenSans-Semibold.ttf b/pres-esop15/OpenSans-Semibold.ttf
new file mode 100644 (file)
index 0000000..1a7679e
Binary files /dev/null and b/pres-esop15/OpenSans-Semibold.ttf differ
diff --git a/pres-esop15/OpenSans-SemiboldItalic.ttf b/pres-esop15/OpenSans-SemiboldItalic.ttf
new file mode 100644 (file)
index 0000000..59b6d16
Binary files /dev/null and b/pres-esop15/OpenSans-SemiboldItalic.ttf differ
diff --git a/pres-esop15/anbn_tree.svg b/pres-esop15/anbn_tree.svg
new file mode 100644 (file)
index 0000000..5e15f2d
--- /dev/null
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="106.0083"
+   height="154.96484"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="New document 1">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.3141509"
+     inkscape:cx="-65.243251"
+     inkscape:cy="15.362654"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     fit-margin-top="3"
+     fit-margin-left="3"
+     fit-margin-right="3"
+     fit-margin-bottom="3"
+     units="pt"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-277.03076px"
+       originy="-706.06592px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-277.03076,-191.33142)">
+    <text
+       xml:space="preserve"
+       style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="342.42642"
+       y="182.59908"
+       id="text2987"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989"
+         x="342.42642"
+         y="182.59908" /></text>
+    <g
+       id="g3170"
+       style="stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none" />
+    <g
+       id="g4186">
+      <g
+         id="g3068-9"
+         transform="translate(0,40.000003)"
+         style="stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none">
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="330"
+           y="162.36218"
+           id="text2995-7"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan2997-6"
+             x="330"
+             y="162.36218">c</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 320,162.36218 -30,20"
+           id="path3036-6"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 340,162.36218 30,20"
+           id="path3038-6"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="280"
+           y="192.36218"
+           id="text3042-3"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3044-9"
+             x="280"
+             y="192.36218">a</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="380"
+           y="192.36218"
+           id="text3046-7"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3048-9"
+             x="380"
+             y="192.36218">b</tspan></text>
+      </g>
+      <g
+         id="g3068-4"
+         transform="translate(0,80)"
+         style="stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none">
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="330"
+           y="162.36218"
+           id="text2995-6"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan2997-4"
+             x="330"
+             y="162.36218">c</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 320,162.36218 -30,20"
+           id="path3036-9"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 340,162.36218 30,20"
+           id="path3038-4"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="280"
+           y="192.36218"
+           id="text3042-2"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3044-2"
+             x="280"
+             y="192.36218">a</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="380"
+           y="192.36218"
+           id="text3046-9"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3048-0"
+             x="380"
+             y="192.36218">b</tspan></text>
+      </g>
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path3143-1"
+         d="m 330,212.36218 0,20"
+         style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5, 5;stroke-dashoffset:0"
+         d="m 330,252.36218 0,40"
+         id="path3143-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cc" />
+      <g
+         id="g3068-6"
+         transform="translate(-1.71875e-6,140)"
+         style="stroke-width:2.5;stroke-miterlimit:4;stroke-dasharray:none">
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="330"
+           y="162.36218"
+           id="text2995-1"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan2997-7"
+             x="330"
+             y="162.36218">c</tspan></text>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 320,162.36218 -30,20"
+           id="path3036-64"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 340,162.36218 30,20"
+           id="path3038-7"
+           inkscape:connector-curvature="0" />
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="280"
+           y="192.36218"
+           id="text3042-9"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3044-8"
+             x="280"
+             y="192.36218">a</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:13px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+           x="380"
+           y="192.36218"
+           id="text3046-5"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3048-5"
+             x="380"
+             y="192.36218">b</tspan></text>
+      </g>
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path3143-1-2"
+         d="m 330,312.36218 0,20"
+         style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2995-1-3"
+         y="342.36218"
+         x="330"
+         style="font-size:13px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="342.36218"
+           x="330"
+           id="tspan2997-7-0"
+           sodipodi:role="line">c</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/pres-esop15/ex_ntree.svg b/pres-esop15/ex_ntree.svg
new file mode 100644 (file)
index 0000000..5c50d87
--- /dev/null
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="86.455078"
+   height="108.70117"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="New document 1">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.468011"
+     inkscape:cx="16.685239"
+     inkscape:cy="15.587734"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     fit-margin-top="3"
+     units="pt"
+     fit-margin-right="3"
+     fit-margin-bottom="3"
+     fit-margin-left="3"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-142.13867px"
+       originy="-786.25003px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-142.13867,-157.41101)">
+    <g
+       id="g3906">
+      <text
+         sodipodi:linespacing="125%"
+         id="text2991"
+         y="197.82793"
+         x="209.48042"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+         xml:space="preserve"><tspan
+           y="197.82793"
+           x="209.48042"
+           id="tspan2993"
+           sodipodi:role="line" /></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987"
+         y="172.36218"
+         x="185"
+         style="font-size:20px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Monospace;-inkscape-font-specification:Monospace"
+           y="172.36218"
+           x="185"
+           id="tspan2989"
+           sodipodi:role="line">a</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text2997"
+         y="202.36218"
+         x="185"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+         xml:space="preserve"><tspan
+           y="202.36218"
+           x="185"
+           id="tspan2999"
+           sodipodi:role="line">b</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3057"
+         y="232.36218"
+         x="150"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+         xml:space="preserve"><tspan
+           y="232.36218"
+           x="150"
+           id="tspan3059"
+           sodipodi:role="line">c</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3061"
+         y="232.36218"
+         x="185"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+         xml:space="preserve"><tspan
+           y="232.36218"
+           x="185"
+           id="tspan3063"
+           sodipodi:role="line">d</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-0"
+         y="232.36218"
+         x="220"
+         style="font-size:20px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Monospace;-inkscape-font-specification:Monospace"
+           y="232.36218"
+           x="220"
+           id="tspan2989-0"
+           sodipodi:role="line">e</tspan></text>
+      <g
+         style="stroke:#525252;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.3, 1.3;stroke-dashoffset:0"
+         id="g3131">
+        <path
+           style="fill:none;stroke:#525252;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.3, 1.3;stroke-dashoffset:0"
+           d="m 185,177.36218 c 0,20 0,10 0,10"
+           id="path2995"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#525252;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.3, 1.3;stroke-dashoffset:0"
+           d="m 150,217.36218 c 35,-10 35,-10 35,-10"
+           id="path3019"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;stroke:#525252;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.3, 1.3;stroke-dashoffset:0"
+           d="m 220,217.36218 c -35,-10 -35,-10 -35,-10"
+           id="path3019-5"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;stroke:#525252;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.3, 1.3;stroke-dashoffset:0"
+           d="m 185,207.36218 c 0,20 0,10 0,10"
+           id="path2995-6"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#525252;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.3, 1.3;stroke-dashoffset:0"
+           d="m 220,237.36218 c 0,20 0,10 0,10"
+           id="path2995-62"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+      </g>
+      <text
+         sodipodi:linespacing="125%"
+         id="text2997-0"
+         y="262.36218"
+         x="220"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+         xml:space="preserve"><tspan
+           y="262.36218"
+           x="220"
+           id="tspan2999-7"
+           sodipodi:role="line">f</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/pres-esop15/rb_tree.svg b/pres-esop15/rb_tree.svg
new file mode 100644 (file)
index 0000000..e5edacb
--- /dev/null
@@ -0,0 +1,723 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="573.23145"
+   height="241.30859"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="rb_tree.svg"
+   preserveAspectRatio="xMinYMin meet"
+   viewBox="0 0 573.23145 241.30859">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.9408862"
+     inkscape:cx="314.80765"
+     inkscape:cy="93.36751"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1317"
+     inkscape:window-height="744"
+     inkscape:window-x="49"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     units="pt"
+     fit-margin-top="2"
+     fit-margin-left="2"
+     fit-margin-bottom="2"
+     fit-margin-right="2">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-54.758789px"
+       originy="-617.50003px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-54.758789,-193.55359)">
+    <rect
+       style="fill:#33ddc3;fill-opacity:0;stroke:none"
+       id="nodef"
+       width="95"
+       height="65"
+       x="470.24121"
+       y="173.80862"
+       transform="translate(54.758789,193.55359)"
+       ry="14.999999" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="70"
+       y="232.36218"
+       id="text2987"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989"
+         x="70"
+         y="232.36218">&lt;&gt;</tspan></text>
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 150,222.36218 c -60,0 -60,0 -60,0"
+       id="path2991"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       class="ancf" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="170"
+       y="232.36218"
+       id="text2993"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2995"
+         x="170"
+         y="232.36218">(,)</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 70,242.36218 c 0,30 0,20 0,20"
+       id="path2997"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 170,242.36218 c 0,30 0,20 0,20"
+       id="path2997-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       class="ancf" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="170"
+       y="282.36218"
+       id="text2987-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-9"
+         x="170"
+         y="282.36218">&lt;&gt;</tspan></text>
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 240,272.36218 c -60,0 -60,0 -60,0"
+       id="path2991-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       class="ancf decb" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="260"
+       y="282.36218"
+       id="text2993-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2995-1"
+         x="260"
+         y="282.36218">(,)</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 260,292.36218 c 0,30 0,20 0,20"
+       id="path2997-1-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 340,272.36218 c -60,0 -60,0 -60,0"
+       id="path2991-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       class="ancf decb" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="360"
+       y="282.36218"
+       id="text2993-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2995-5"
+         x="360"
+         y="282.36218">(,)</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 360,292.36218 c 0,30 0,20 0,20"
+       id="path2997-1-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 440,272.36218 c -60,0 -60,0 -60,0"
+       id="path2991-26"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       class="ancf decb" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="460"
+       y="282.36218"
+       id="text2993-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2995-4"
+         x="460"
+         y="282.36218">(,)</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 460,292.36218 c 0,30 0,20 0,20"
+       id="path2997-1-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       class=" ancf decb" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="260"
+       y="332.36218"
+       id="text2987-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-0"
+         x="260"
+         y="332.36218">&lt;&gt;</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 260,342.36218 c 0,30 0,20 0,20"
+       id="path2997-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="360"
+       y="332.36218"
+       id="text2987-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-6"
+         x="360"
+         y="332.36218">&lt;&gt;</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 360,342.36218 c 0,30 0,20 0,20"
+       id="path2997-54"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="460"
+       y="332.36218"
+       id="text2987-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-4"
+         x="460"
+         y="332.36218">&lt;&gt;</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 460,342.36218 c 0,30 0,20 0,20"
+       id="path2997-17"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 530,322.36218 c -60,0 -60,0 -60,0"
+       id="path2991-26-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       class="parentf ancf decb" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="550"
+       y="332.36218"
+       id="text2993-5-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2995-4-9"
+         x="550"
+         y="332.36218">(,)</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 550,342.36218 c 0,30 0,20 0,20"
+       id="path2997-1-9-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc"
+       class="parentf ancf decb" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="550"
+       y="382.36218"
+       id="text2987-3-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-4-0"
+         x="550"
+         y="382.36218">&lt;&gt;</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 550,392.36218 c 0,30 0,20 0,20"
+       id="path2997-17-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 190,222.36218 c 20,0 20,0 20,0"
+       id="path3242"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="230"
+       y="232.36218"
+       id="text3244"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3246"
+         x="230"
+         y="232.36218">`nil</tspan></text>
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 270,322.36218 c 20,0 20,0 20,0"
+       id="path3242-8"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="310"
+       y="332.36218"
+       id="text3244-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3246-1"
+         x="310"
+         y="332.36218">`nil</tspan></text>
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 370,322.36219 c 20,0 20,0 20,0"
+       id="path3242-4"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="410"
+       y="332.36218"
+       id="text3244-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3246-7"
+         x="410"
+         y="332.36218">`nil</tspan></text>
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 480,272.36219 c 20,0 20,0 20,0"
+       id="path3242-5"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="520"
+       y="282.36218"
+       id="text3244-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3246-16"
+         x="520"
+         y="282.36218">`nil</tspan></text>
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 570,322.36218 c 20,0 20,0 20,0"
+       id="path3242-4-3"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="610"
+       y="332.36218"
+       id="text3244-8-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3246-7-4"
+         x="610"
+         y="332.36218">`nil</tspan></text>
+    <path
+       style="fill:none;stroke:#3333dd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 560,372.36218 c 20,0 20,0 20,0"
+       id="path3242-4-7"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="600"
+       y="382.36218"
+       id="text3244-8-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3246-7-44"
+         x="600"
+         y="382.36218">`nil</tspan></text>
+    <path
+       style="fill:none;stroke:#dd3333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 170,292.36218 c 0,30 0,20 0,20"
+       id="path2997-5-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="70"
+       y="282.36218"
+       id="text3377"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3379"
+         x="70"
+         y="282.36218">`a</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="170"
+       y="332.36218"
+       id="text3381"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3383"
+         x="170"
+         y="332.36218">`b</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="260"
+       y="382.36218"
+       id="text3385"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3387"
+         x="260"
+         y="382.36218">`c</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="360"
+       y="382.36218"
+       id="text3389"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3391"
+         x="360"
+         y="382.36218">`d</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="460"
+       y="382.36218"
+       id="text3393"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3395"
+         x="460"
+         y="382.36218">`e</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="550"
+       y="432.36218"
+       id="text3397"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3399"
+         x="550"
+         y="432.36218">`f</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="70"
+       y="207.36218"
+       id="text4194"
+       sodipodi:linespacing="125%"
+       class="ancf"><tspan
+         sodipodi:role="line"
+         id="tspan4196"
+         x="70"
+         y="207.36218">⏺</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="60"
+       y="252.36218"
+       id="text4198"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200"
+         x="60"
+         y="252.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="160"
+       y="252.36218"
+       id="text4198-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-3"
+         x="160"
+         y="252.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="160"
+       y="302.36218"
+       id="text4198-11"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-5"
+         x="160"
+         y="302.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="250"
+       y="302.36218"
+       id="text4198-17"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-9"
+         x="250"
+         y="302.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="250"
+       y="352.36218"
+       id="text4198-18"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-2"
+         x="250"
+         y="352.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="350"
+       y="302.36218"
+       id="text4198-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-31"
+         x="350"
+         y="302.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="350"
+       y="352.36218"
+       id="text4198-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-0"
+         x="350"
+         y="352.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="450"
+       y="352.36218"
+       id="text4198-16"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-8"
+         x="450"
+         y="352.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="450"
+       y="302.36218"
+       id="text4198-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-56"
+         x="450"
+         y="302.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="540"
+       y="352.36218"
+       id="text4198-79"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-00"
+         x="540"
+         y="352.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#dd3333;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="540"
+       y="402.36218"
+       id="text4198-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-35"
+         x="540"
+         y="402.36218">L</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="120"
+       y="217.36218"
+       id="text4198-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4"
+         x="120"
+         y="217.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="200"
+       y="217.36218"
+       id="text4198-6-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-8"
+         x="200"
+         y="217.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="210"
+       y="267.36218"
+       id="text4198-6-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-1"
+         x="210"
+         y="267.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="310"
+       y="267.36218"
+       id="text4198-6-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-16"
+         x="310"
+         y="267.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="410"
+       y="267.36218"
+       id="text4198-6-16"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-7"
+         x="410"
+         y="267.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="280"
+       y="317.36218"
+       id="text4198-6-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-6"
+         x="280"
+         y="317.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="380"
+       y="317.36218"
+       id="text4198-6-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-61"
+         x="380"
+         y="317.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="490"
+       y="267.36218"
+       id="text4198-6-39"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-72"
+         x="490"
+         y="267.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="500"
+       y="317.36218"
+       id="text4198-6-64"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-0"
+         x="500"
+         y="317.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="580"
+       y="317.36218"
+       id="text4198-6-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-62"
+         x="580"
+         y="317.36218">R</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#3333dd;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
+       x="570"
+       y="367.36218"
+       id="text4198-6-79"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4200-4-726"
+         x="570"
+         y="367.36218">R</tspan></text>
+  </g>
+</svg>