diff --git a/dotparse.cabal b/dotparse.cabal
--- a/dotparse.cabal
+++ b/dotparse.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.4
 name:            dotparse
-version:         0.0.1
+version:         0.0.2
 synopsis:        dot language parsing and printing.
 description:     This package provides parsing and printing of the dot language.
 
@@ -13,7 +13,7 @@
   >>> import Chart
   >>> import DotParse.Examples (exInt)
   >>> ex <- processGraph exInt
-  >>> writeChartSvg "other/ex.svg" (graphToChartWith defaultChartConfig ex)
+  >>> writeChartOptions "other/ex.svg" (graphToChartWith defaultChartConfig ex)
   .
   ![usage example](docs/other/ex.svg)
   .
@@ -37,24 +37,22 @@
   default-extensions:
   ghc-options:
     -Wall -Wcompat -Wincomplete-record-updates
-    -Wincomplete-uni-patterns -Wredundant-constraints -fwrite-ide-info
-    -hiedir=.hie
+    -Wincomplete-uni-patterns -Wredundant-constraints
 
   build-depends:
-    , algebraic-graphs    ^>=0.6
+    , algebraic-graphs    >=0.6 && <0.8
     , base                >=4.7    && <5
     , bytestring          ^>=0.11.3
-    , chart-svg           ^>=0.3
+    , chart-svg           >=0.3 && < 0.5
     , containers          ^>=0.6
-    , flatparse           ^>=0.3.2
-    , neat-interpolation  ^>=0.5.1
-    , numhask             ^>=0.10
+    , flatparse           >=0.3.2 && <0.5
     , numhask-space       ^>=0.10
     , optics-core         ^>=0.4
     , process-extras      ^>=0.7.4
-    , template-haskell    >=2.16 && < 2.20
-    , text                ^>=1.2
-    , these               ^>=1.1.1
+    , string-interpolate ^>=0.3
+    , template-haskell    >=2.16 && < 2.21
+    , text                >=1.2 && <2.1
+    , these               >=1.1.1 && < 1.3
 
   exposed-modules:
     DotParse
diff --git a/other/ex.svg b/other/ex.svg
deleted file mode 100644
--- a/other/ex.svg
+++ /dev/null
@@ -1,25 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="444.5569342690883" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.25 -489.73 435.64812 489.98012" height="500.0"><style>svg {
-  color-scheme: light dark;
-}
-{
-  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
-    fill: #0d0d0d;
-  }
-  .ticklines g, .tickglyph g, .legendBorder g {
-    stroke: #0d0d0d;
-  }
-  .legendBorder g {
-    fill: #f0f0f0;
-  }
-}
-@media (prefers-color-scheme:dark) {
-  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
-    fill: #f0f0f0;
-  }
-  .ticklines g, .tickglyph g, .legendBorder g {
-    stroke: #f0f0f0;
-  }
-  .legendBorder g {
-    fill: #0d0d0d;
-  }
-}</style><g class="chart"><g class="edges"><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 365.08,-231.92 C 369.74,-219.55 376.14,-202.55 380.83,-190.12 L 380.94,-189.83"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 345.88,-236.43 C 330.22,-222.58 304.18,-199.5500 288.4,-185.6 L 288.03,-185.27"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 352.92,-231.92 C 348.5200,-220.23 342.56,-204.4 337.96,-192.2100 L 337.85,-191.9200"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 373.16,-160.86 C 369.07,-157.94 364.48,-154.94 360.0,-152.59 C 314.22,-128.55 255.61,-110.4200 226.73,-102.2400 L 226.39,-102.15"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 380.92,-155.6200 C 376.26,-143.2600 369.86,-126.2600 365.17,-113.8300 L 365.06,-113.53"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 393.08,-155.6200 C 397.48,-143.9300 403.44,-128.11 408.04,-115.91 L 408.1500,-115.62"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 206.93,-114.5800 C 203.7400,-142.49 198.0,-199.54 198.0,-248.04 C 198.0,-326.33 198.0,-326.33 198.0,-326.33 C 198.0,-368.23 190.59,-379.02 174.0,-417.4800 C 168.08,-431.2 158.97,-445.51 151.82,-455.7900 L 151.48,-456.2800"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 219.82,-81.8180 C 230.38,-68.517 246.3700,-48.382 257.0,-35.004 L 257.25,-34.689"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 209.7,-78.213 C 210.15,-66.984 210.74,-52.3090 211.21,-40.653 L 211.22,-40.378"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 198.65,-81.47 C 189.33,-68.875 175.63,-50.3620 165.86,-37.1710 L 165.63,-36.861"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 194.12,-85.6940 C 177.33,-74.682 149.19,-56.222 125.0,-40.2960 C 121.09,-37.725 116.9000,-34.956 112.94,-32.344 L 112.56,-32.092"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 157.4200,-463.38 C 188.35,-450.0200 254.93,-421.2500 286.17,-407.76 L 286.53,-407.6"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 125.6700,-461.7600 C 102.19,-448.4 57.559,-423.0000 33.801,-409.4700 L 33.523,-409.32"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 136.37,-453.77 C 129.4000,-427.06 117.0000,-373.02 117.0000,-326.33 C 117.0000,-326.33 117.0000,-326.33 117.0000,-248.04 C 117.0000,-201.1400 114.55,-146.06 113.08,-117.2700 L 113.06,-116.9300"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 296.79,-382.47 C 292.18,-370.61 285.93,-354.5 281.31,-342.58 L 281.2,-342.3000"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 316.44,-387.21 C 331.91,-374.2300 357.26,-352.96 373.54,-339.3 L 373.92,-338.98"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 309.21,-382.47 C 313.56,-371.27 319.38,-356.2800 323.91,-344.61 L 324.02,-344.33"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 288.12,-312.73 C 303.78,-298.8800 329.82,-275.85 345.6,-261.89 L 345.97,-261.56"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 281.29,-308.21 C 285.95,-296.27 292.3,-280.01 297.1,-267.7100 L 297.21,-267.42"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 268.71,-308.21 C 264.11,-296.44 257.88,-280.47 253.1,-268.2400 L 252.99,-267.9500"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 121.5300,-78.586 C 128.3500,-66.5220 137.5,-50.339 144.3500,-38.226 L 144.51,-37.941"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 107.96,-76.697 C 105.56,-65.522 102.51,-51.375 100.09,-40.155 L 100.04,-39.89"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 155.27,-40.632 C 157.03,-69.326 160.0,-124.6400 160.0,-171.74 C 160.0,-326.33 160.0,-326.33 160.0,-326.33 C 160.0,-372.6000 150.26,-426.5 144.73,-453.4 L 144.6600,-453.7100"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 89.524,-39.429 C 80.174,-67.503 64.0,-123.1 64.0,-171.74 C 64.0,-326.33 64.0,-326.33 64.0,-326.33 C 64.0,-380.31 106.53,-433.6800 128.37,-457.52 L 128.63,-457.8000"/></g></g><g class="shapes"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-249.04" cx="359.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-172.74" cx="387.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-96.445" cx="208.99999999999997" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-471.48" cx="141.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-399.48" cx="303.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-325.3299999999999" cx="275.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-172.74" cx="275.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-96.445" cx="359.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-20.148" cx="268.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-399.48" cx="18.0" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-325.3299999999999" cx="389.0" r="20.14812"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-249.04" cx="304.0" r="19.49832"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-172.74" cx="330.99999999999994" r="20.14812"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-96.445" cx="415.0" r="20.14812"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-20.148" cx="212.0" r="20.14812"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-96.445" cx="112.0" r="20.14812"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-325.3299999999999" cx="330.99999999999994" r="20.14812"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-249.04" cx="246.0" r="20.14812"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-20.148" cx="154.0" r="20.14812"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="0.5" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-20.148" cx="96.0" r="20.14812"/></g></g><g class="labels"><g fill="rgb(-51%, 30%, 37%)" stroke="none" stroke-width="0.0" font-size="14.0" fill-opacity="1.0" text-anchor="middle"><text x="359.0" y="-245.33999999999997">0</text><text x="387.0" y="-169.04000000000002">1</text><text x="208.99999999999997" y="-92.745">2</text><text x="141.0" y="-467.78000000000003">3</text><text x="303.0" y="-395.78">4</text><text x="275.0" y="-321.63">5</text><text x="275.0" y="-169.04000000000002">6</text><text x="359.0" y="-92.745">7</text><text x="268.0" y="-16.448">8</text><text x="18.0" y="-395.78">9</text><text x="389.0" y="-321.63">10</text><text x="304.0" y="-245.33999999999997">11</text><text x="330.99999999999994" y="-169.04000000000002">12</text><text x="415.0" y="-92.745">13</text><text x="212.0" y="-16.448">14</text><text x="112.0" y="-92.745">15</text><text x="330.99999999999994" y="-321.63">16</text><text x="246.0" y="-245.33999999999997">17</text><text x="154.0" y="-16.448">18</text><text x="96.0" y="-16.448">19</text></g></g></g><g class="hud"></g></svg>
diff --git a/other/ex0.svg b/other/ex0.svg
--- a/other/ex0.svg
+++ b/other/ex0.svg
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Pages: 1 -->
 <svg width="8pt" height="8pt"
  viewBox="0.00 0.00 8.00 8.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 4)">
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-4 4,-4 4,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-4 4,-4 4,4 -4,4"/>
 </g>
 </svg>
diff --git a/other/ex1.svg b/other/ex1.svg
--- a/other/ex1.svg
+++ b/other/ex1.svg
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: D Pages: 1 -->
 <svg width="188pt" height="116pt"
  viewBox="0.00 0.00 188.00 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112)">
 <title>D</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-112 184,-112 184,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-112 184,-112 184,4 -4,4"/>
 <!-- A -->
 <g id="node1" class="node">
 <title>A</title>
@@ -24,8 +24,8 @@
 <!-- A&#45;&gt;B -->
 <g id="edge1" class="edge">
 <title>A&#45;&gt;B</title>
-<path fill="none" stroke="grey" stroke-dasharray="5,2" d="M80.43,-78.37C72.13,-69.14 59.79,-55.44 49.07,-43.52"/>
-<polygon fill="grey" stroke="grey" points="51.6,-41.1 42.31,-36.01 46.4,-45.78 51.6,-41.1"/>
+<path fill="none" stroke="grey" stroke-dasharray="5,2" d="M80.16,-78.06C72.16,-69.18 60.55,-56.28 50.22,-44.8"/>
+<polygon fill="grey" stroke="grey" points="52.96,-42.61 43.67,-37.52 47.75,-47.29 52.96,-42.61"/>
 </g>
 <!-- C -->
 <g id="node3" class="node">
@@ -36,10 +36,10 @@
 <!-- A&#45;&gt;C -->
 <g id="edge2" class="edge">
 <title>A&#45;&gt;C</title>
-<path fill="none" stroke="black" d="M88,-71.7C88,-63.98 88,-54.71 88,-46.11"/>
-<path fill="none" stroke="transparent" d="M90,-71.7C90,-63.98 90,-54.71 90,-46.11"/>
-<path fill="none" stroke="black" d="M92,-71.7C92,-63.98 92,-54.71 92,-46.11"/>
-<polygon fill="black" stroke="black" points="93.5,-46.1 90,-36.1 86.5,-46.1 93.5,-46.1"/>
+<path fill="none" stroke="black" d="M88,-71.7C88,-64.41 88,-55.73 88,-47.54"/>
+<path fill="none" stroke="none" d="M90,-71.7C90,-64.41 90,-55.73 90,-47.54"/>
+<path fill="none" stroke="black" d="M92,-71.7C92,-64.41 92,-55.73 92,-47.54"/>
+<polygon fill="black" stroke="black" points="93.5,-47.62 90,-37.62 86.5,-47.62 93.5,-47.62"/>
 </g>
 <!-- D -->
 <g id="node4" class="node">
@@ -50,7 +50,7 @@
 <!-- A&#45;&gt;D -->
 <g id="edge3" class="edge">
 <title>A&#45;&gt;D</title>
-<path fill="none" stroke="black" stroke-width="5" d="M99.57,-78.37C110.24,-66.51 127.58,-47.25 139.59,-33.89"/>
+<path fill="none" stroke="black" stroke-width="5" d="M99.84,-78.06C110.5,-66.22 127.57,-47.25 139.48,-34.02"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex10.svg b/other/ex10.svg
--- a/other/ex10.svg
+++ b/other/ex10.svg
@@ -1,22 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: H Pages: 1 -->
-<svg width="97pt" height="62pt"
- viewBox="0.00 0.00 97.00 62.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="96pt" height="62pt"
+ viewBox="0.00 0.00 96.00 62.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 58)">
 <title>H</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-58 93,-58 93,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-58 92,-58 92,4 -4,4"/>
 <!-- aHtmlTable -->
 <g id="node1" class="node">
 <title>aHtmlTable</title>
-<text text-anchor="start" x="18.5" y="-33.8" font-family="Times,serif" font-size="14.00">col 1</text>
-<text text-anchor="start" x="57.5" y="-33.8" font-family="Times,serif" font-size="14.00">foo</text>
-<text text-anchor="start" x="13.5" y="-12.8" font-family="Times,serif" font-size="14.00">COL 2</text>
-<text text-anchor="start" x="58" y="-12.8" font-family="Times,serif" font-size="14.00">bar</text>
-<polygon fill="none" stroke="blue" points="8,-4 8,-50 81,-50 81,-4 8,-4"/>
+<text text-anchor="start" x="17.5" y="-33.8" font-family="Times,serif" font-size="14.00">col 1</text>
+<text text-anchor="start" x="56" y="-33.8" font-family="Times,serif" font-size="14.00">foo</text>
+<text text-anchor="start" x="13" y="-12.8" font-family="Times,serif" font-size="14.00">COL 2</text>
+<text text-anchor="start" x="56.5" y="-12.8" font-family="Times,serif" font-size="14.00">bar</text>
+<polygon fill="none" stroke="blue" points="8,-4 8,-50 80,-50 80,-4 8,-4"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex11.svg b/other/ex11.svg
--- a/other/ex11.svg
+++ b/other/ex11.svg
@@ -1,55 +1,55 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Pages: 1 -->
-<svg width="296pt" height="133pt"
- viewBox="0.00 0.00 296.00 133.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="291pt" height="133pt"
+ viewBox="0.00 0.00 291.00 133.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 129)">
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-129 292,-129 292,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-129 287,-129 287,4 -4,4"/>
 <!-- tbl -->
 <g id="node1" class="node">
 <title>tbl</title>
-<polygon fill="none" stroke="blue" points="8,-99.5 8,-120.5 127,-120.5 127,-99.5 8,-99.5"/>
-<text text-anchor="start" x="58" y="-106.3" font-family="Times,serif" font-size="14.00">foo</text>
-<polygon fill="none" stroke="blue" points="127,-99.5 127,-120.5 202,-120.5 202,-99.5 127,-99.5"/>
-<text text-anchor="start" x="155.5" y="-106.3" font-family="Times,serif" font-size="14.00">bar</text>
-<polygon fill="none" stroke="blue" points="202,-99.5 202,-120.5 280,-120.5 280,-99.5 202,-99.5"/>
-<text text-anchor="start" x="231" y="-106.3" font-family="Times,serif" font-size="14.00">baz</text>
-<polygon fill="none" stroke="blue" points="8,-24.5 8,-99.5 127,-99.5 127,-24.5 8,-24.5"/>
-<polygon fill="none" stroke="orange" points="14,-72.5 14,-93.5 52,-93.5 52,-72.5 14,-72.5"/>
+<polygon fill="none" stroke="blue" points="8.5,-99.5 8.5,-120.5 125.5,-120.5 125.5,-99.5 8.5,-99.5"/>
+<text text-anchor="start" x="57.5" y="-106.3" font-family="Times,serif" font-size="14.00">foo</text>
+<polygon fill="none" stroke="blue" points="125.5,-99.5 125.5,-120.5 199.5,-120.5 199.5,-99.5 125.5,-99.5"/>
+<text text-anchor="start" x="153.5" y="-106.3" font-family="Times,serif" font-size="14.00">bar</text>
+<polygon fill="none" stroke="blue" points="199.5,-99.5 199.5,-120.5 275.5,-120.5 275.5,-99.5 199.5,-99.5"/>
+<text text-anchor="start" x="228" y="-106.3" font-family="Times,serif" font-size="14.00">baz</text>
+<polygon fill="none" stroke="blue" points="8.5,-24.5 8.5,-99.5 125.5,-99.5 125.5,-24.5 8.5,-24.5"/>
+<polygon fill="none" stroke="orange" points="14.5,-72.5 14.5,-93.5 51.5,-93.5 51.5,-72.5 14.5,-72.5"/>
 <text text-anchor="start" x="19" y="-79.3" font-family="Times,serif" font-size="14.00">one &#160;</text>
-<polygon fill="none" stroke="orange" points="52,-72.5 52,-93.5 87,-93.5 87,-72.5 52,-72.5"/>
-<text text-anchor="start" x="55" y="-79.3" font-family="Times,serif" font-size="14.00">two &#160;</text>
-<polygon fill="none" stroke="orange" points="87,-72.5 87,-93.5 121,-93.5 121,-72.5 87,-72.5"/>
-<text text-anchor="start" x="90" y="-79.3" font-family="Times,serif" font-size="14.00">three</text>
-<polygon fill="none" stroke="orange" points="14,-51.5 14,-72.5 52,-72.5 52,-51.5 14,-51.5"/>
+<polygon fill="none" stroke="orange" points="51.5,-72.5 51.5,-93.5 85.5,-93.5 85.5,-72.5 51.5,-72.5"/>
+<text text-anchor="start" x="54.5" y="-79.3" font-family="Times,serif" font-size="14.00">two &#160;</text>
+<polygon fill="none" stroke="orange" points="85.5,-72.5 85.5,-93.5 119.5,-93.5 119.5,-72.5 85.5,-72.5"/>
+<text text-anchor="start" x="88.5" y="-79.3" font-family="Times,serif" font-size="14.00">three</text>
+<polygon fill="none" stroke="orange" points="14.5,-51.5 14.5,-72.5 51.5,-72.5 51.5,-51.5 14.5,-51.5"/>
 <text text-anchor="start" x="19.5" y="-58.3" font-family="Times,serif" font-size="14.00">four </text>
-<polygon fill="none" stroke="orange" points="52,-51.5 52,-72.5 87,-72.5 87,-51.5 52,-51.5"/>
-<text text-anchor="start" x="57" y="-58.3" font-family="Times,serif" font-size="14.00">five </text>
-<polygon fill="none" stroke="orange" points="87,-51.5 87,-72.5 121,-72.5 121,-51.5 87,-51.5"/>
-<text text-anchor="start" x="92" y="-58.3" font-family="Times,serif" font-size="14.00">six &#160;</text>
-<polygon fill="none" stroke="orange" points="14,-30.5 14,-51.5 52,-51.5 52,-30.5 14,-30.5"/>
-<text text-anchor="start" x="17" y="-37.3" font-family="Times,serif" font-size="14.00">seven</text>
-<polygon fill="none" stroke="orange" points="52,-30.5 52,-51.5 87,-51.5 87,-30.5 52,-30.5"/>
-<text text-anchor="start" x="55.5" y="-37.3" font-family="Times,serif" font-size="14.00">eight</text>
-<polygon fill="none" stroke="orange" points="87,-30.5 87,-51.5 121,-51.5 121,-30.5 87,-30.5"/>
-<text text-anchor="start" x="90" y="-37.3" font-family="Times,serif" font-size="14.00">nine </text>
-<polygon fill="none" stroke="orange" points="13,-29.5 13,-94.5 122,-94.5 122,-29.5 13,-29.5"/>
-<polygon fill="none" stroke="blue" points="127,-3.5 127,-99.5 280,-99.5 280,-3.5 127,-3.5"/>
-<polygon fill="none" stroke="pink" points="130,-51.5 130,-96.5 175,-96.5 175,-51.5 130,-51.5"/>
-<text text-anchor="start" x="141" y="-70.3" font-family="Times,serif" font-size="14.00">eins</text>
-<polygon fill="none" stroke="pink" points="175,-51.5 175,-96.5 224,-96.5 224,-51.5 175,-51.5"/>
-<text text-anchor="start" x="186" y="-70.3" font-family="Times,serif" font-size="14.00">zwei</text>
-<polygon fill="none" stroke="pink" points="224,-6.5 224,-96.5 277,-96.5 277,-6.5 224,-6.5"/>
-<text text-anchor="start" x="239.5" y="-55.3" font-family="Times,serif" font-size="14.00">drei</text>
-<text text-anchor="start" x="235" y="-40.3" font-family="Times,serif" font-size="14.00">sechs</text>
-<polygon fill="none" stroke="pink" points="130,-6.5 130,-51.5 175,-51.5 175,-6.5 130,-6.5"/>
-<text text-anchor="start" x="141.5" y="-25.3" font-family="Times,serif" font-size="14.00">vier</text>
-<polygon fill="none" stroke="pink" points="175,-6.5 175,-51.5 224,-51.5 224,-6.5 175,-6.5"/>
-<text text-anchor="start" x="187.5" y="-25.3" font-family="Times,serif" font-size="14.00">fünf</text>
-<polygon fill="none" stroke="blue" points="8,-3.5 8,-24.5 127,-24.5 127,-3.5 8,-3.5"/>
+<polygon fill="none" stroke="orange" points="51.5,-51.5 51.5,-72.5 85.5,-72.5 85.5,-51.5 51.5,-51.5"/>
+<text text-anchor="start" x="56" y="-58.3" font-family="Times,serif" font-size="14.00">five </text>
+<polygon fill="none" stroke="orange" points="85.5,-51.5 85.5,-72.5 119.5,-72.5 119.5,-51.5 85.5,-51.5"/>
+<text text-anchor="start" x="90.5" y="-58.3" font-family="Times,serif" font-size="14.00">six &#160;</text>
+<polygon fill="none" stroke="orange" points="14.5,-30.5 14.5,-51.5 51.5,-51.5 51.5,-30.5 14.5,-30.5"/>
+<text text-anchor="start" x="17.5" y="-37.3" font-family="Times,serif" font-size="14.00">seven</text>
+<polygon fill="none" stroke="orange" points="51.5,-30.5 51.5,-51.5 85.5,-51.5 85.5,-30.5 51.5,-30.5"/>
+<text text-anchor="start" x="54.5" y="-37.3" font-family="Times,serif" font-size="14.00">eight</text>
+<polygon fill="none" stroke="orange" points="85.5,-30.5 85.5,-51.5 119.5,-51.5 119.5,-30.5 85.5,-30.5"/>
+<text text-anchor="start" x="88.5" y="-37.3" font-family="Times,serif" font-size="14.00">nine </text>
+<polygon fill="none" stroke="orange" points="13.5,-29.5 13.5,-94.5 120.5,-94.5 120.5,-29.5 13.5,-29.5"/>
+<polygon fill="none" stroke="blue" points="125.5,-3.5 125.5,-99.5 275.5,-99.5 275.5,-3.5 125.5,-3.5"/>
+<polygon fill="none" stroke="pink" points="128.5,-51.5 128.5,-96.5 172.5,-96.5 172.5,-51.5 128.5,-51.5"/>
+<text text-anchor="start" x="139.5" y="-70.3" font-family="Times,serif" font-size="14.00">eins</text>
+<polygon fill="none" stroke="pink" points="172.5,-51.5 172.5,-96.5 220.5,-96.5 220.5,-51.5 172.5,-51.5"/>
+<text text-anchor="start" x="183.5" y="-70.3" font-family="Times,serif" font-size="14.00">zwei</text>
+<polygon fill="none" stroke="pink" points="220.5,-6.5 220.5,-96.5 272.5,-96.5 272.5,-6.5 220.5,-6.5"/>
+<text text-anchor="start" x="235.5" y="-55.3" font-family="Times,serif" font-size="14.00">drei</text>
+<text text-anchor="start" x="231.5" y="-40.3" font-family="Times,serif" font-size="14.00">sechs</text>
+<polygon fill="none" stroke="pink" points="128.5,-6.5 128.5,-51.5 172.5,-51.5 172.5,-6.5 128.5,-6.5"/>
+<text text-anchor="start" x="139.5" y="-25.3" font-family="Times,serif" font-size="14.00">vier</text>
+<polygon fill="none" stroke="pink" points="172.5,-6.5 172.5,-51.5 220.5,-51.5 220.5,-6.5 172.5,-6.5"/>
+<text text-anchor="start" x="185" y="-25.3" font-family="Times,serif" font-size="14.00">fünf</text>
+<polygon fill="none" stroke="blue" points="8.5,-3.5 8.5,-24.5 125.5,-24.5 125.5,-3.5 8.5,-3.5"/>
 <text text-anchor="start" x="57.5" y="-10.3" font-family="Times,serif" font-size="14.00">abc</text>
 </g>
 </g>
diff --git a/other/ex12.svg b/other/ex12.svg
--- a/other/ex12.svg
+++ b/other/ex12.svg
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: D Pages: 1 -->
 <svg width="62pt" height="79pt"
  viewBox="0.00 0.00 62.00 79.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 75)">
 <title>D</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-75 58,-75 58,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-75 58,-75 58,4 -4,4"/>
 <!-- some_node -->
 <g id="node1" class="node">
 <title>some_node</title>
-<polygon fill="yellow" stroke="transparent" points="13,-45.5 13,-66.5 41,-66.5 41,-45.5 13,-45.5"/>
+<polygon fill="yellow" stroke="none" points="13,-45.5 13,-66.5 41,-66.5 41,-45.5 13,-45.5"/>
 <polygon fill="none" stroke="black" points="13,-45.5 13,-66.5 41,-66.5 41,-45.5 13,-45.5"/>
 <text text-anchor="start" x="16" y="-52.3" font-family="Times,serif" font-size="14.00">Foo</text>
-<polygon fill="lightblue" stroke="transparent" points="13,-24.5 13,-45.5 41,-45.5 41,-24.5 13,-24.5"/>
+<polygon fill="lightblue" stroke="none" points="13,-24.5 13,-45.5 41,-45.5 41,-24.5 13,-24.5"/>
 <polygon fill="none" stroke="black" points="13,-24.5 13,-45.5 41,-45.5 41,-24.5 13,-24.5"/>
-<text text-anchor="start" x="16.5" y="-31.3" font-family="Times,serif" font-size="14.00" fill="#0000ff">Bar</text>
-<polygon fill="#f0e3ff" stroke="transparent" points="13,-3.5 13,-24.5 41,-24.5 41,-3.5 13,-3.5"/>
+<text text-anchor="start" x="17" y="-31.3" font-family="Times,serif" font-size="14.00" fill="#0000ff">Bar</text>
+<polygon fill="#f0e3ff" stroke="none" points="13,-3.5 13,-24.5 41,-24.5 41,-3.5 13,-3.5"/>
 <polygon fill="none" stroke="black" points="13,-3.5 13,-24.5 41,-24.5 41,-3.5 13,-3.5"/>
 <text text-anchor="start" x="16" y="-10.3" font-family="Times,serif" font-size="14.00" fill="#ff1020">Baz</text>
 </g>
diff --git a/other/ex13.svg b/other/ex13.svg
--- a/other/ex13.svg
+++ b/other/ex13.svg
@@ -1,22 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: H Pages: 1 -->
-<svg width="97pt" height="62pt"
- viewBox="0.00 0.00 97.00 62.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="96pt" height="62pt"
+ viewBox="0.00 0.00 96.00 62.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 58)">
 <title>H</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-58 93,-58 93,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-58 92,-58 92,4 -4,4"/>
 <!-- aHtmlTable -->
 <g id="node1" class="node">
 <title>aHtmlTable</title>
-<text text-anchor="start" x="18.5" y="-33.8" font-family="Times,serif" font-size="14.00">col 1</text>
-<text text-anchor="start" x="57.5" y="-33.8" font-family="Times,serif" font-size="14.00">foo</text>
-<text text-anchor="start" x="13.5" y="-12.8" font-family="Times,serif" font-size="14.00">COL 2</text>
-<text text-anchor="start" x="58" y="-12.8" font-family="Times,serif" font-size="14.00">bar</text>
-<path fill="none" stroke="black" d="M20,-4C20,-4 69,-4 69,-4 75,-4 81,-10 81,-16 81,-16 81,-38 81,-38 81,-44 75,-50 69,-50 69,-50 20,-50 20,-50 14,-50 8,-44 8,-38 8,-38 8,-16 8,-16 8,-10 14,-4 20,-4"/>
+<text text-anchor="start" x="17.5" y="-33.8" font-family="Times,serif" font-size="14.00">col 1</text>
+<text text-anchor="start" x="56" y="-33.8" font-family="Times,serif" font-size="14.00">foo</text>
+<text text-anchor="start" x="13" y="-12.8" font-family="Times,serif" font-size="14.00">COL 2</text>
+<text text-anchor="start" x="56.5" y="-12.8" font-family="Times,serif" font-size="14.00">bar</text>
+<path fill="none" stroke="black" d="M20,-4C20,-4 68,-4 68,-4 74,-4 80,-10 80,-16 80,-16 80,-38 80,-38 80,-44 74,-50 68,-50 68,-50 20,-50 20,-50 14,-50 8,-44 8,-38 8,-38 8,-16 8,-16 8,-10 14,-4 20,-4"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex14.svg b/other/ex14.svg
--- a/other/ex14.svg
+++ b/other/ex14.svg
@@ -1,62 +1,62 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: H Pages: 1 -->
-<svg width="230pt" height="138pt"
- viewBox="0.00 0.00 230.00 138.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="225pt" height="138pt"
+ viewBox="0.00 0.00 225.00 138.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 134)">
 <title>H</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-134 226,-134 226,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-134 221,-134 221,4 -4,4"/>
 <!-- parent -->
 <g id="node1" class="node">
 <title>parent</title>
-<polygon fill="none" stroke="black" points="11,-102 11,-123 211,-123 211,-102 11,-102"/>
-<text text-anchor="start" x="32.5" y="-108.8" font-family="Times,serif" font-size="14.00">The foo, the bar and the baz</text>
-<polygon fill="none" stroke="black" points="11,-79 11,-100 69,-100 69,-79 11,-79"/>
-<text text-anchor="start" x="14" y="-85.8" font-family="Times,serif" font-size="14.00">First port</text>
-<polygon fill="none" stroke="black" points="71,-79 71,-100 145,-100 145,-79 71,-79"/>
-<text text-anchor="start" x="74" y="-85.8" font-family="Times,serif" font-size="14.00">Second port</text>
-<polygon fill="none" stroke="black" points="147,-79 147,-100 211,-100 211,-79 147,-79"/>
-<text text-anchor="start" x="150" y="-85.8" font-family="Times,serif" font-size="14.00">Third port</text>
-<polygon fill="none" stroke="black" points="8,-76 8,-126 214,-126 214,-76 8,-76"/>
+<polygon fill="none" stroke="black" points="11.5,-102 11.5,-123 206.5,-123 206.5,-102 11.5,-102"/>
+<text text-anchor="start" x="32" y="-108.8" font-family="Times,serif" font-size="14.00">The foo, the bar and the baz</text>
+<polygon fill="none" stroke="black" points="11.5,-79 11.5,-100 68.5,-100 68.5,-79 11.5,-79"/>
+<text text-anchor="start" x="14.5" y="-85.8" font-family="Times,serif" font-size="14.00">First port</text>
+<polygon fill="none" stroke="black" points="70.5,-79 70.5,-100 142.5,-100 142.5,-79 70.5,-79"/>
+<text text-anchor="start" x="73.5" y="-85.8" font-family="Times,serif" font-size="14.00">Second port</text>
+<polygon fill="none" stroke="black" points="144.5,-79 144.5,-100 206.5,-100 206.5,-79 144.5,-79"/>
+<text text-anchor="start" x="147.5" y="-85.8" font-family="Times,serif" font-size="14.00">Third port</text>
+<polygon fill="none" stroke="black" points="8,-76 8,-126 209,-126 209,-76 8,-76"/>
 </g>
 <!-- child_one -->
 <g id="node2" class="node">
 <title>child_one</title>
-<text text-anchor="start" x="32" y="-13.8" font-family="Times,serif" font-size="14.00">1</text>
-<polygon fill="none" stroke="black" points="27,-5.5 27,-30.5 45,-30.5 45,-5.5 27,-5.5"/>
+<text text-anchor="start" x="31.5" y="-13.8" font-family="Times,serif" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="26,-5.5 26,-30.5 43,-30.5 43,-5.5 26,-5.5"/>
 </g>
 <!-- parent&#45;&gt;child_one -->
 <g id="edge1" class="edge">
 <title>parent:port_one&#45;&gt;child_one</title>
-<path fill="none" stroke="black" d="M40,-78C40,-67.6 39.37,-56.18 38.62,-46.19"/>
-<polygon fill="black" stroke="black" points="42.09,-45.69 37.77,-36.02 35.11,-46.28 42.09,-45.69"/>
+<path fill="none" stroke="black" d="M39.5,-78C39.5,-67.84 38.75,-56.73 37.84,-46.92"/>
+<polygon fill="black" stroke="black" points="41.35,-46.84 36.84,-37.26 34.39,-47.57 41.35,-46.84"/>
 </g>
 <!-- child_two -->
 <g id="node3" class="node">
 <title>child_two</title>
-<text text-anchor="start" x="104" y="-13.8" font-family="Times,serif" font-size="14.00">2</text>
-<polygon fill="none" stroke="black" points="99,-5.5 99,-30.5 117,-30.5 117,-5.5 99,-5.5"/>
+<text text-anchor="start" x="103.5" y="-13.8" font-family="Times,serif" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="98,-5.5 98,-30.5 115,-30.5 115,-5.5 98,-5.5"/>
 </g>
 <!-- parent&#45;&gt;child_two -->
 <g id="edge2" class="edge">
 <title>parent:port_two&#45;&gt;child_two</title>
-<path fill="none" stroke="black" d="M108,-78C108,-67.62 108,-56.21 108,-46.22"/>
-<polygon fill="black" stroke="black" points="111.5,-46.04 108,-36.04 104.5,-46.04 111.5,-46.04"/>
+<path fill="none" stroke="black" d="M106.5,-78C106.5,-67.99 106.5,-57.02 106.5,-47.29"/>
+<polygon fill="black" stroke="black" points="110,-47.3 106.5,-37.3 103,-47.3 110,-47.3"/>
 </g>
 <!-- child_three -->
 <g id="node4" class="node">
 <title>child_three</title>
-<text text-anchor="start" x="176" y="-13.8" font-family="Times,serif" font-size="14.00">3</text>
-<polygon fill="none" stroke="black" points="171,-5.5 171,-30.5 189,-30.5 189,-5.5 171,-5.5"/>
+<text text-anchor="start" x="175.5" y="-13.8" font-family="Times,serif" font-size="14.00">3</text>
+<polygon fill="none" stroke="black" points="170,-5.5 170,-30.5 187,-30.5 187,-5.5 170,-5.5"/>
 </g>
 <!-- parent&#45;&gt;child_three -->
 <g id="edge3" class="edge">
 <title>parent:port_three&#45;&gt;child_three</title>
-<path fill="none" stroke="black" d="M179,-78C179,-67.62 179.16,-56.21 179.35,-46.21"/>
-<polygon fill="black" stroke="black" points="182.85,-46.11 179.56,-36.04 175.85,-45.96 182.85,-46.11"/>
+<path fill="none" stroke="black" d="M175.5,-78C175.5,-67.86 175.95,-56.76 176.5,-46.95"/>
+<polygon fill="black" stroke="black" points="179.97,-47.48 177.1,-37.28 172.98,-47.05 179.97,-47.48"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex15.svg b/other/ex15.svg
--- a/other/ex15.svg
+++ b/other/ex15.svg
@@ -1,91 +1,91 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: D Pages: 1 -->
-<svg width="199pt" height="328pt"
- viewBox="0.00 0.00 198.50 328.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="198pt" height="328pt"
+ viewBox="0.00 0.00 198.00 328.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 324)">
 <title>D</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-324 194.5,-324 194.5,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-324 194,-324 194,4 -4,4"/>
 <!-- task_menu -->
 <g id="node1" class="node">
 <title>task_menu</title>
-<text text-anchor="start" x="15" y="-306.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 1</text>
-<text text-anchor="start" x="15" y="-291.1" font-family="Sans serif" font-size="8.00">Choose Menu</text>
-<text text-anchor="start" x="15" y="-277.1" font-family="Sans serif" font-size="8.00" fill="darkgreen">done</text>
-<polygon fill="none" stroke="black" points="11,-271 11,-316 69,-316 69,-271 11,-271"/>
+<text text-anchor="start" x="14.5" y="-306.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 1</text>
+<text text-anchor="start" x="14.5" y="-291.1" font-family="Sans serif" font-size="8.00">Choose Menu</text>
+<text text-anchor="start" x="14.5" y="-277.1" font-family="Sans serif" font-size="8.00" fill="darkgreen">done</text>
+<polygon fill="none" stroke="black" points="10,-271 10,-316 69,-316 69,-271 10,-271"/>
 </g>
 <!-- task_ingredients -->
 <g id="node2" class="node">
 <title>task_ingredients</title>
-<text text-anchor="start" x="12" y="-217.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 2</text>
-<text text-anchor="start" x="12" y="-202.1" font-family="Sans serif" font-size="8.00">Buy ingredients</text>
-<text text-anchor="start" x="12" y="-188.1" font-family="Sans serif" font-size="8.00" fill="darkgreen">done</text>
-<polygon fill="none" stroke="black" points="8,-182 8,-227 72,-227 72,-182 8,-182"/>
+<text text-anchor="start" x="12.5" y="-217.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 2</text>
+<text text-anchor="start" x="12.5" y="-202.1" font-family="Sans serif" font-size="8.00">Buy ingredients</text>
+<text text-anchor="start" x="12.5" y="-188.1" font-family="Sans serif" font-size="8.00" fill="darkgreen">done</text>
+<polygon fill="none" stroke="black" points="8,-182 8,-227 71,-227 71,-182 8,-182"/>
 </g>
 <!-- task_menu&#45;&gt;task_ingredients -->
 <g id="edge1" class="edge">
 <title>task_menu&#45;&gt;task_ingredients</title>
-<path fill="none" stroke="black" d="M40,-266.87C40,-258.89 40,-249.93 40,-241.38"/>
-<polygon fill="black" stroke="black" points="43.5,-241.25 40,-231.25 36.5,-241.25 43.5,-241.25"/>
+<path fill="none" stroke="black" d="M39.5,-267.34C39.5,-259.47 39.5,-250.62 39.5,-242.14"/>
+<polygon fill="black" stroke="black" points="43,-242.42 39.5,-232.42 36,-242.42 43,-242.42"/>
 </g>
 <!-- task_cook -->
 <g id="node4" class="node">
 <title>task_cook</title>
-<text text-anchor="start" x="76" y="-128.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 5</text>
-<text text-anchor="start" x="76" y="-113.1" font-family="Sans serif" font-size="8.00">Cook</text>
-<text text-anchor="start" x="76" y="-99.1" font-family="Sans serif" font-size="8.00" fill="red">todo</text>
-<polygon fill="none" stroke="black" points="71.5,-93 71.5,-138 104.5,-138 104.5,-93 71.5,-93"/>
+<text text-anchor="start" x="75.5" y="-128.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 5</text>
+<text text-anchor="start" x="75.5" y="-113.1" font-family="Sans serif" font-size="8.00">Cook</text>
+<text text-anchor="start" x="75.5" y="-99.1" font-family="Sans serif" font-size="8.00" fill="red">todo</text>
+<polygon fill="none" stroke="black" points="71,-93 71,-138 104,-138 104,-93 71,-93"/>
 </g>
 <!-- task_ingredients&#45;&gt;task_cook -->
 <g id="edge2" class="edge">
 <title>task_ingredients&#45;&gt;task_cook</title>
-<path fill="none" stroke="black" d="M54.14,-177.87C58.74,-169.53 63.92,-160.14 68.82,-151.26"/>
-<polygon fill="black" stroke="black" points="72.03,-152.7 73.79,-142.25 65.9,-149.31 72.03,-152.7"/>
+<path fill="none" stroke="black" d="M53.38,-178.34C57.92,-170.11 63.05,-160.82 67.92,-151.98"/>
+<polygon fill="black" stroke="black" points="70.98,-153.68 72.75,-143.23 64.85,-150.3 70.98,-153.68"/>
 </g>
 <!-- task_invitation -->
 <g id="node3" class="node">
 <title>task_invitation</title>
-<text text-anchor="start" x="111" y="-217.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 4</text>
-<text text-anchor="start" x="111" y="-202.1" font-family="Sans serif" font-size="8.00">Send invitation</text>
-<text text-anchor="start" x="111" y="-188.1" font-family="Sans serif" font-size="8.00" fill="darkgreen">done</text>
-<polygon fill="none" stroke="black" points="106.5,-182 106.5,-227 167.5,-227 167.5,-182 106.5,-182"/>
+<text text-anchor="start" x="109.5" y="-217.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 4</text>
+<text text-anchor="start" x="109.5" y="-202.1" font-family="Sans serif" font-size="8.00">Send invitation</text>
+<text text-anchor="start" x="109.5" y="-188.1" font-family="Sans serif" font-size="8.00" fill="darkgreen">done</text>
+<polygon fill="none" stroke="black" points="105.5,-182 105.5,-227 165.5,-227 165.5,-182 105.5,-182"/>
 </g>
 <!-- task_invitation&#45;&gt;task_cook -->
 <g id="edge3" class="edge">
 <title>task_invitation&#45;&gt;task_cook</title>
-<path fill="none" stroke="black" d="M122.56,-177.87C117.82,-169.45 112.47,-159.95 107.42,-150.98"/>
-<polygon fill="black" stroke="black" points="110.46,-149.25 102.5,-142.25 104.36,-152.68 110.46,-149.25"/>
+<path fill="none" stroke="black" d="M121.62,-178.34C117.08,-170.11 111.95,-160.82 107.08,-151.98"/>
+<polygon fill="black" stroke="black" points="110.15,-150.3 102.25,-143.23 104.02,-153.68 110.15,-150.3"/>
 </g>
 <!-- task_eat -->
 <g id="node6" class="node">
 <title>task_eat</title>
-<text text-anchor="start" x="113" y="-39.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 6</text>
-<text text-anchor="start" x="113" y="-24.1" font-family="Sans serif" font-size="8.00">Eat</text>
-<text text-anchor="start" x="113" y="-10.1" font-family="Sans serif" font-size="8.00" fill="red">todo</text>
-<polygon fill="none" stroke="black" points="108.5,-4 108.5,-49 141.5,-49 141.5,-4 108.5,-4"/>
+<text text-anchor="start" x="112.5" y="-39.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 6</text>
+<text text-anchor="start" x="112.5" y="-24.1" font-family="Sans serif" font-size="8.00">Eat</text>
+<text text-anchor="start" x="112.5" y="-10.1" font-family="Sans serif" font-size="8.00" fill="red">todo</text>
+<polygon fill="none" stroke="black" points="108,-4 108,-49 141,-49 141,-4 108,-4"/>
 </g>
 <!-- task_cook&#45;&gt;task_eat -->
 <g id="edge5" class="edge">
 <title>task_cook&#45;&gt;task_eat</title>
-<path fill="none" stroke="black" d="M98.9,-88.87C102.41,-80.62 106.36,-71.34 110.1,-62.54"/>
-<polygon fill="black" stroke="black" points="113.36,-63.82 114.05,-53.25 106.91,-61.08 113.36,-63.82"/>
+<path fill="none" stroke="black" d="M98.2,-89.34C101.66,-81.2 105.57,-72.02 109.29,-63.27"/>
+<polygon fill="black" stroke="black" points="112.41,-64.87 113.1,-54.3 105.97,-62.13 112.41,-64.87"/>
 </g>
 <!-- task_table -->
 <g id="node5" class="node">
 <title>task_table</title>
-<text text-anchor="start" x="146" y="-128.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 3</text>
-<text text-anchor="start" x="146" y="-113.1" font-family="Sans serif" font-size="8.00">Lay table</text>
-<text text-anchor="start" x="146" y="-99.1" font-family="Sans serif" font-size="8.00" fill="red">todo</text>
-<polygon fill="none" stroke="black" points="141.5,-93 141.5,-138 182.5,-138 182.5,-93 141.5,-93"/>
+<text text-anchor="start" x="145.5" y="-128.1" font-family="Sans serif" font-weight="bold" font-size="8.00">Task 3</text>
+<text text-anchor="start" x="145.5" y="-113.1" font-family="Sans serif" font-size="8.00">Lay table</text>
+<text text-anchor="start" x="145.5" y="-99.1" font-family="Sans serif" font-size="8.00" fill="red">todo</text>
+<polygon fill="none" stroke="black" points="141,-93 141,-138 182,-138 182,-93 141,-93"/>
 </g>
 <!-- task_table&#45;&gt;task_eat -->
 <g id="edge4" class="edge">
 <title>task_table&#45;&gt;task_eat</title>
-<path fill="none" stroke="black" d="M151.1,-88.87C147.59,-80.62 143.64,-71.34 139.9,-62.54"/>
-<polygon fill="black" stroke="black" points="143.09,-61.08 135.95,-53.25 136.64,-63.82 143.09,-61.08"/>
+<path fill="none" stroke="black" d="M150.8,-89.34C147.34,-81.2 143.43,-72.02 139.71,-63.27"/>
+<polygon fill="black" stroke="black" points="143.03,-62.13 135.9,-54.3 136.59,-64.87 143.03,-62.13"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex2.svg b/other/ex2.svg
--- a/other/ex2.svg
+++ b/other/ex2.svg
@@ -1,32 +1,32 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: D Pages: 1 -->
-<svg width="578pt" height="78pt"
- viewBox="0.00 0.00 578.00 78.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="564pt" height="78pt"
+ viewBox="0.00 0.00 563.50 78.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 74)">
 <title>D</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-74 574,-74 574,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-74 559.5,-74 559.5,4 -4,4"/>
 <!-- node_A -->
 <g id="node1" class="node">
 <title>node_A</title>
-<polygon fill="none" stroke="black" points="0,-0.5 0,-69.5 205,-69.5 205,-0.5 0,-0.5"/>
-<text text-anchor="middle" x="51.5" y="-31.3" font-family="Arial" font-size="14.00">shape=record</text>
-<polyline fill="none" stroke="black" points="103,-0.5 103,-69.5 "/>
-<text text-anchor="middle" x="132" y="-54.3" font-family="Arial" font-size="14.00">above</text>
-<polyline fill="none" stroke="black" points="103,-46.5 161,-46.5 "/>
-<text text-anchor="middle" x="132" y="-31.3" font-family="Arial" font-size="14.00">middle</text>
-<polyline fill="none" stroke="black" points="103,-23.5 161,-23.5 "/>
-<text text-anchor="middle" x="132" y="-8.3" font-family="Arial" font-size="14.00">below</text>
-<polyline fill="none" stroke="black" points="161,-0.5 161,-69.5 "/>
-<text text-anchor="middle" x="183" y="-31.3" font-family="Arial" font-size="14.00">right</text>
+<polygon fill="none" stroke="black" points="0,-0.5 0,-69.5 200,-69.5 200,-0.5 0,-0.5"/>
+<text text-anchor="middle" x="50" y="-31.3" font-family="Arial" font-size="14.00">shape=record</text>
+<polyline fill="none" stroke="black" points="100,-0.5 100,-69.5"/>
+<text text-anchor="middle" x="128.5" y="-54.3" font-family="Arial" font-size="14.00">above</text>
+<polyline fill="none" stroke="black" points="100,-46.5 157,-46.5"/>
+<text text-anchor="middle" x="128.5" y="-31.3" font-family="Arial" font-size="14.00">middle</text>
+<polyline fill="none" stroke="black" points="100,-23.5 157,-23.5"/>
+<text text-anchor="middle" x="128.5" y="-8.3" font-family="Arial" font-size="14.00">below</text>
+<polyline fill="none" stroke="black" points="157,-0.5 157,-69.5"/>
+<text text-anchor="middle" x="178.5" y="-31.3" font-family="Arial" font-size="14.00">right</text>
 </g>
 <!-- node_B -->
 <g id="node2" class="node">
 <title>node_B</title>
-<text text-anchor="middle" x="396.5" y="-31.3" font-family="Arial" font-size="14.00">shape=plaintext|{curly|braces and|bars without}|effect</text>
+<text text-anchor="middle" x="387" y="-31.3" font-family="Arial" font-size="14.00">shape=plaintext|{curly|braces and|bars without}|effect</text>
 </g>
 </g>
 </svg>
diff --git a/other/ex3.svg b/other/ex3.svg
--- a/other/ex3.svg
+++ b/other/ex3.svg
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: D Pages: 1 -->
 <svg width="206pt" height="188pt"
  viewBox="0.00 0.00 206.00 188.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 184)">
 <title>D</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-184 202,-184 202,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-184 202,-184 202,4 -4,4"/>
 <!-- A -->
 <g id="node1" class="node">
 <title>A</title>
@@ -24,8 +24,8 @@
 <!-- A&#45;&gt;B -->
 <g id="edge1" class="edge">
 <title>A&#45;&gt;B</title>
-<path fill="none" stroke="black" d="M84.43,-146.83C74.25,-136.94 60.48,-123.55 48.97,-112.36"/>
-<polygon fill="black" stroke="black" points="51.41,-109.85 41.8,-105.38 46.53,-114.87 51.41,-109.85"/>
+<path fill="none" stroke="black" d="M84.08,-146.5C74.23,-136.92 61.14,-124.19 49.97,-113.34"/>
+<polygon fill="black" stroke="black" points="52.59,-111 42.98,-106.54 47.71,-116.02 52.59,-111"/>
 </g>
 <!-- C -->
 <g id="node3" class="node">
@@ -36,8 +36,8 @@
 <!-- A&#45;&gt;C -->
 <g id="edge2" class="edge">
 <title>A&#45;&gt;C</title>
-<path fill="none" stroke="black" d="M99,-143.7C99,-135.98 99,-126.71 99,-118.11"/>
-<polygon fill="black" stroke="black" points="102.5,-118.1 99,-108.1 95.5,-118.1 102.5,-118.1"/>
+<path fill="none" stroke="black" d="M99,-143.7C99,-136.41 99,-127.73 99,-119.54"/>
+<polygon fill="black" stroke="black" points="102.5,-119.62 99,-109.62 95.5,-119.62 102.5,-119.62"/>
 </g>
 <!-- D -->
 <g id="node4" class="node">
@@ -48,8 +48,8 @@
 <!-- A&#45;&gt;D -->
 <g id="edge3" class="edge">
 <title>A&#45;&gt;D</title>
-<path fill="none" stroke="black" d="M113.57,-146.83C123.75,-136.94 137.52,-123.55 149.03,-112.36"/>
-<polygon fill="black" stroke="black" points="151.47,-114.87 156.2,-105.38 146.59,-109.85 151.47,-114.87"/>
+<path fill="none" stroke="black" d="M113.92,-146.5C123.77,-136.92 136.86,-124.19 148.03,-113.34"/>
+<polygon fill="black" stroke="black" points="150.29,-116.02 155.02,-106.54 145.41,-111 150.29,-116.02"/>
 </g>
 <!-- F -->
 <g id="node5" class="node">
@@ -60,20 +60,20 @@
 <!-- B&#45;&gt;F -->
 <g id="edge4" class="edge">
 <title>B&#45;&gt;F</title>
-<path fill="none" stroke="black" d="M41.57,-74.83C51.75,-64.94 65.52,-51.55 77.03,-40.36"/>
-<polygon fill="black" stroke="black" points="79.47,-42.87 84.2,-33.38 74.59,-37.85 79.47,-42.87"/>
+<path fill="none" stroke="black" d="M41.92,-74.5C51.77,-64.92 64.86,-52.19 76.03,-41.34"/>
+<polygon fill="black" stroke="black" points="78.29,-44.02 83.02,-34.54 73.41,-39 78.29,-44.02"/>
 </g>
 <!-- C&#45;&gt;F -->
 <g id="edge5" class="edge">
 <title>C&#45;&gt;F</title>
-<path fill="none" stroke="black" d="M99,-71.7C99,-63.98 99,-54.71 99,-46.11"/>
-<polygon fill="black" stroke="black" points="102.5,-46.1 99,-36.1 95.5,-46.1 102.5,-46.1"/>
+<path fill="none" stroke="black" d="M99,-71.7C99,-64.41 99,-55.73 99,-47.54"/>
+<polygon fill="black" stroke="black" points="102.5,-47.62 99,-37.62 95.5,-47.62 102.5,-47.62"/>
 </g>
 <!-- D&#45;&gt;F -->
 <g id="edge6" class="edge">
 <title>D&#45;&gt;F</title>
-<path fill="none" stroke="black" d="M156.43,-74.83C146.25,-64.94 132.48,-51.55 120.97,-40.36"/>
-<polygon fill="black" stroke="black" points="123.41,-37.85 113.8,-33.38 118.53,-42.87 123.41,-37.85"/>
+<path fill="none" stroke="black" d="M156.08,-74.5C146.23,-64.92 133.14,-52.19 121.97,-41.34"/>
+<polygon fill="black" stroke="black" points="124.59,-39 114.98,-34.54 119.71,-44.02 124.59,-39"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex4.svg b/other/ex4.svg
--- a/other/ex4.svg
+++ b/other/ex4.svg
@@ -1,49 +1,43 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: L Pages: 1 -->
-<svg width="137pt" height="242pt"
- viewBox="0.00 0.00 137.00 242.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 238)">
+<svg width="211pt" height="191pt"
+ viewBox="0.00 0.00 211.00 191.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 187)">
 <title>L</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-238 133,-238 133,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-187 207,-187 207,4 -4,4"/>
 <!-- a -->
 <g id="node1" class="node">
 <title>a</title>
-<polygon fill="none" stroke="black" points="0,-180.5 0,-233.5 129,-233.5 129,-180.5 0,-180.5"/>
-<text text-anchor="start" x="8" y="-218.3" font-family="Arial" font-size="14.00">one</text>
-<text text-anchor="start" x="8" y="-203.3" font-family="Arial" font-size="14.00">two three</text>
-<text text-anchor="start" x="8" y="-188.3" font-family="Arial" font-size="14.00">four five six seven</text>
+<polygon fill="none" stroke="black" points="0,-146.5 0,-182.5 203,-182.5 203,-146.5 0,-146.5"/>
+<text text-anchor="middle" x="101.5" y="-160.8" font-family="Arial" font-size="14.00">onetwo threefour five six seven</text>
 </g>
 <!-- b -->
 <g id="node2" class="node">
 <title>b</title>
-<polygon fill="none" stroke="black" points="0,-90.5 0,-143.5 129,-143.5 129,-90.5 0,-90.5"/>
-<text text-anchor="middle" x="64.5" y="-128.3" font-family="Arial" font-size="14.00">one</text>
-<text text-anchor="middle" x="64.5" y="-113.3" font-family="Arial" font-size="14.00">two three</text>
-<text text-anchor="middle" x="64.5" y="-98.3" font-family="Arial" font-size="14.00">four five six seven</text>
+<polygon fill="none" stroke="black" points="0,-73.5 0,-109.5 203,-109.5 203,-73.5 0,-73.5"/>
+<text text-anchor="middle" x="101.5" y="-87.8" font-family="Arial" font-size="14.00">onetwo threefour five six seven</text>
 </g>
 <!-- a&#45;&gt;b -->
 <g id="edge1" class="edge">
 <title>a&#45;&gt;b</title>
-<path fill="none" stroke="black" d="M64.5,-180.07C64.5,-171.84 64.5,-162.58 64.5,-153.78"/>
-<polygon fill="black" stroke="black" points="68,-153.74 64.5,-143.74 61,-153.74 68,-153.74"/>
+<path fill="none" stroke="black" d="M101.5,-146.67C101.5,-138.89 101.5,-129.44 101.5,-120.62"/>
+<polygon fill="black" stroke="black" points="105,-120.72 101.5,-110.72 98,-120.72 105,-120.72"/>
 </g>
 <!-- c -->
 <g id="node3" class="node">
 <title>c</title>
-<polygon fill="none" stroke="black" points="0,-0.5 0,-53.5 129,-53.5 129,-0.5 0,-0.5"/>
-<text text-anchor="end" x="121" y="-38.3" font-family="Arial" font-size="14.00">one</text>
-<text text-anchor="end" x="121" y="-23.3" font-family="Arial" font-size="14.00">two three</text>
-<text text-anchor="end" x="121" y="-8.3" font-family="Arial" font-size="14.00">four five six seven</text>
+<polygon fill="none" stroke="black" points="0,-0.5 0,-36.5 203,-36.5 203,-0.5 0,-0.5"/>
+<text text-anchor="middle" x="101.5" y="-14.8" font-family="Arial" font-size="14.00">onetwo threefour five six seven</text>
 </g>
 <!-- b&#45;&gt;c -->
 <g id="edge2" class="edge">
 <title>b&#45;&gt;c</title>
-<path fill="none" stroke="black" d="M64.5,-90.07C64.5,-81.84 64.5,-72.58 64.5,-63.78"/>
-<polygon fill="black" stroke="black" points="68,-63.74 64.5,-53.74 61,-63.74 68,-63.74"/>
+<path fill="none" stroke="black" d="M101.5,-73.67C101.5,-65.89 101.5,-56.44 101.5,-47.62"/>
+<polygon fill="black" stroke="black" points="105,-47.72 101.5,-37.72 98,-47.72 105,-47.72"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex5.svg b/other/ex5.svg
--- a/other/ex5.svg
+++ b/other/ex5.svg
@@ -1,41 +1,41 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: D Pages: 1 -->
-<svg width="181pt" height="139pt"
- viewBox="0.00 0.00 181.00 139.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="178pt" height="139pt"
+ viewBox="0.00 0.00 178.00 139.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 135)">
 <title>D</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-135 177,-135 177,4 -4,4"/>
-<text text-anchor="middle" x="86.5" y="-115.8" font-family="Times,serif" font-size="14.00">The foo, the bar and the baz</text>
+<polygon fill="white" stroke="none" points="-4,4 -4,-135 174,-135 174,4 -4,4"/>
+<text text-anchor="middle" x="85" y="-115.8" font-family="Times,serif" font-size="14.00">The foo, the bar and the baz</text>
 <!-- FOO -->
 <g id="node1" class="node">
 <title>FOO</title>
-<text text-anchor="middle" x="86.5" y="-86.3" font-family="Times,serif" font-size="14.00">FOO</text>
+<text text-anchor="middle" x="85" y="-86.3" font-family="Times,serif" font-size="14.00">FOO</text>
 </g>
 <!-- BAR -->
 <g id="node2" class="node">
 <title>BAR</title>
-<text text-anchor="middle" x="50.5" y="-14.3" font-family="Times,serif" font-size="14.00">BAR</text>
+<text text-anchor="middle" x="49" y="-14.3" font-family="Times,serif" font-size="14.00">BAR</text>
 </g>
 <!-- FOO&#45;&gt;BAR -->
 <g id="edge1" class="edge">
 <title>FOO&#45;&gt;BAR</title>
-<path fill="none" stroke="black" d="M77.6,-71.7C73.5,-63.73 68.55,-54.1 64.01,-45.26"/>
-<polygon fill="black" stroke="black" points="66.98,-43.4 59.3,-36.1 60.76,-46.6 66.98,-43.4"/>
+<path fill="none" stroke="black" d="M76.29,-72.05C72.26,-64.23 67.38,-54.75 62.87,-45.98"/>
+<polygon fill="black" stroke="black" points="66.01,-44.43 58.33,-37.13 59.79,-47.63 66.01,-44.43"/>
 </g>
 <!-- BAZ -->
 <g id="node3" class="node">
 <title>BAZ</title>
-<text text-anchor="middle" x="122.5" y="-14.3" font-family="Times,serif" font-size="14.00">BAZ</text>
+<text text-anchor="middle" x="121" y="-14.3" font-family="Times,serif" font-size="14.00">BAZ</text>
 </g>
 <!-- FOO&#45;&gt;BAZ -->
 <g id="edge2" class="edge">
 <title>FOO&#45;&gt;BAZ</title>
-<path fill="none" stroke="black" d="M95.4,-71.7C99.5,-63.73 104.45,-54.1 108.99,-45.26"/>
-<polygon fill="black" stroke="black" points="112.24,-46.6 113.7,-36.1 106.02,-43.4 112.24,-46.6"/>
+<path fill="none" stroke="black" d="M93.71,-72.05C97.74,-64.23 102.62,-54.75 107.13,-45.98"/>
+<polygon fill="black" stroke="black" points="110.21,-47.63 111.67,-37.13 103.99,-44.43 110.21,-47.63"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex6.svg b/other/ex6.svg
--- a/other/ex6.svg
+++ b/other/ex6.svg
@@ -1,22 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: D Pages: 1 -->
 <svg width="134pt" height="172pt"
  viewBox="0.00 0.00 134.00 172.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 168)">
 <title>D</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-168 130,-168 130,4 -4,4"/>
-<text text-anchor="start" x="38.5" y="-149.8" font-family="Times,serif" font-size="14.00">The </text>
-<text text-anchor="start" x="64.5" y="-149.8" font-family="Times,serif" font-weight="bold" font-size="14.00" fill="red">foo</text>
-<text text-anchor="start" x="83.5" y="-149.8" font-family="Times,serif" font-size="14.00">,</text>
+<polygon fill="white" stroke="none" points="-4,4 -4,-168 130,-168 130,4 -4,4"/>
+<text text-anchor="start" x="39" y="-149.8" font-family="Times,serif" font-size="14.00">The </text>
+<text text-anchor="start" x="64" y="-149.8" font-family="Times,serif" font-weight="bold" font-size="14.00" fill="red">foo</text>
+<text text-anchor="start" x="83" y="-149.8" font-family="Times,serif" font-size="14.00">,</text>
 <text text-anchor="start" x="25.5" y="-131" font-family="Times,serif" font-size="14.00"> the </text>
 <text text-anchor="start" x="50.5" y="-131" font-family="Times,serif" font-size="20.00">bar</text>
 <text text-anchor="start" x="76.5" y="-131" font-family="Times,serif" font-size="14.00"> and</text>
-<text text-anchor="start" x="40.5" y="-115.8" font-family="Times,serif" font-size="14.00"> the </text>
-<text text-anchor="start" x="65.5" y="-115.8" font-family="Times,serif" font-style="italic" font-size="14.00">baz</text>
+<text text-anchor="start" x="41" y="-115.8" font-family="Times,serif" font-size="14.00"> the </text>
+<text text-anchor="start" x="66" y="-115.8" font-family="Times,serif" font-style="italic" font-size="14.00">baz</text>
 <!-- FOO -->
 <g id="node1" class="node">
 <title>FOO</title>
@@ -30,8 +30,8 @@
 <!-- FOO&#45;&gt;BAR -->
 <g id="edge1" class="edge">
 <title>FOO&#45;&gt;BAR</title>
-<path fill="none" stroke="black" d="M54.1,-71.7C50,-63.73 45.05,-54.1 40.51,-45.26"/>
-<polygon fill="black" stroke="black" points="43.48,-43.4 35.8,-36.1 37.26,-46.6 43.48,-43.4"/>
+<path fill="none" stroke="black" d="M54.29,-72.05C50.26,-64.23 45.38,-54.75 40.87,-45.98"/>
+<polygon fill="black" stroke="black" points="44.01,-44.43 36.33,-37.13 37.79,-47.63 44.01,-44.43"/>
 </g>
 <!-- BAZ -->
 <g id="node3" class="node">
@@ -41,8 +41,8 @@
 <!-- FOO&#45;&gt;BAZ -->
 <g id="edge2" class="edge">
 <title>FOO&#45;&gt;BAZ</title>
-<path fill="none" stroke="black" d="M71.9,-71.7C76,-63.73 80.95,-54.1 85.49,-45.26"/>
-<polygon fill="black" stroke="black" points="88.74,-46.6 90.2,-36.1 82.52,-43.4 88.74,-46.6"/>
+<path fill="none" stroke="black" d="M71.71,-72.05C75.74,-64.23 80.62,-54.75 85.13,-45.98"/>
+<polygon fill="black" stroke="black" points="88.21,-47.63 89.67,-37.13 81.99,-44.43 88.21,-47.63"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex7.svg b/other/ex7.svg
--- a/other/ex7.svg
+++ b/other/ex7.svg
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: R Pages: 1 -->
 <svg width="206pt" height="260pt"
  viewBox="0.00 0.00 206.00 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 256)">
 <title>R</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-256 202,-256 202,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-256 202,-256 202,4 -4,4"/>
 <!-- rA -->
 <g id="node1" class="node">
 <title>rA</title>
@@ -24,8 +24,8 @@
 <!-- rA&#45;&gt;sA -->
 <g id="edge1" class="edge">
 <title>rA&#45;&gt;sA</title>
-<path fill="none" stroke="black" d="M54,-162C56.61,-162 59.23,-162 61.84,-162"/>
-<polygon fill="black" stroke="black" points="61.93,-165.5 71.93,-162 61.93,-158.5 61.93,-165.5"/>
+<path fill="none" stroke="black" d="M54.28,-162C56.28,-162 58.28,-162 60.29,-162"/>
+<polygon fill="black" stroke="black" points="60.24,-165.5 70.24,-162 60.24,-158.5 60.24,-165.5"/>
 </g>
 <!-- vB -->
 <g id="node5" class="node">
@@ -36,8 +36,8 @@
 <!-- sA&#45;&gt;vB -->
 <g id="edge2" class="edge">
 <title>sA&#45;&gt;vB</title>
-<path fill="none" stroke="black" d="M99,-143.7C99,-135.98 99,-126.71 99,-118.11"/>
-<polygon fill="black" stroke="black" points="102.5,-118.1 99,-108.1 95.5,-118.1 102.5,-118.1"/>
+<path fill="none" stroke="black" d="M99,-143.7C99,-136.41 99,-127.73 99,-119.54"/>
+<polygon fill="black" stroke="black" points="102.5,-119.62 99,-109.62 95.5,-119.62 102.5,-119.62"/>
 </g>
 <!-- tA -->
 <g id="node3" class="node">
@@ -54,8 +54,8 @@
 <!-- uB&#45;&gt;vB -->
 <g id="edge4" class="edge">
 <title>uB&#45;&gt;vB</title>
-<path fill="none" stroke="black" d="M54,-90C56.61,-90 59.23,-90 61.84,-90"/>
-<polygon fill="black" stroke="black" points="61.93,-93.5 71.93,-90 61.93,-86.5 61.93,-93.5"/>
+<path fill="none" stroke="black" d="M54.28,-90C56.28,-90 58.28,-90 60.29,-90"/>
+<polygon fill="black" stroke="black" points="60.24,-93.5 70.24,-90 60.24,-86.5 60.24,-93.5"/>
 </g>
 <!-- wB -->
 <g id="node6" class="node">
@@ -66,8 +66,8 @@
 <!-- wB&#45;&gt;tA -->
 <g id="edge6" class="edge">
 <title>wB&#45;&gt;tA</title>
-<path fill="none" stroke="black" d="M171,-108.1C171,-115.79 171,-125.05 171,-133.67"/>
-<polygon fill="black" stroke="black" points="167.5,-133.7 171,-143.7 174.5,-133.7 167.5,-133.7"/>
+<path fill="none" stroke="black" d="M171,-108.1C171,-115.37 171,-124.04 171,-132.24"/>
+<polygon fill="black" stroke="black" points="167.5,-132.18 171,-142.18 174.5,-132.18 167.5,-132.18"/>
 </g>
 <!-- u -->
 <g id="node8" class="node">
@@ -78,8 +78,8 @@
 <!-- wB&#45;&gt;u -->
 <g id="edge5" class="edge">
 <title>wB&#45;&gt;u</title>
-<path fill="none" stroke="black" d="M171,-71.7C171,-63.98 171,-54.71 171,-46.11"/>
-<polygon fill="black" stroke="black" points="174.5,-46.1 171,-36.1 167.5,-46.1 174.5,-46.1"/>
+<path fill="none" stroke="black" d="M171,-71.7C171,-64.41 171,-55.73 171,-47.54"/>
+<polygon fill="black" stroke="black" points="174.5,-47.62 171,-37.62 167.5,-47.62 174.5,-47.62"/>
 </g>
 <!-- t -->
 <g id="node7" class="node">
@@ -90,8 +90,8 @@
 <!-- t&#45;&gt;rA -->
 <g id="edge3" class="edge">
 <title>t&#45;&gt;rA</title>
-<path fill="none" stroke="black" d="M27,-215.7C27,-207.98 27,-198.71 27,-190.11"/>
-<polygon fill="black" stroke="black" points="30.5,-190.1 27,-180.1 23.5,-190.1 30.5,-190.1"/>
+<path fill="none" stroke="black" d="M27,-215.7C27,-208.41 27,-199.73 27,-191.54"/>
+<polygon fill="black" stroke="black" points="30.5,-191.62 27,-181.62 23.5,-191.62 30.5,-191.62"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex8.svg b/other/ex8.svg
--- a/other/ex8.svg
+++ b/other/ex8.svg
@@ -1,93 +1,93 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: Q Pages: 1 -->
-<svg width="426pt" height="260pt"
- viewBox="0.00 0.00 426.44 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="421pt" height="260pt"
+ viewBox="0.00 0.00 421.49 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 256)">
 <title>Q</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-256 422.44,-256 422.44,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-256 417.49,-256 417.49,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster_R</title>
-<polygon fill="none" stroke="black" points="8,-64 8,-116 402,-116 402,-64 8,-64"/>
+<polygon fill="none" stroke="black" points="8,-64 8,-116 397,-116 397,-64 8,-64"/>
 </g>
 <!-- nd_1 -->
 <g id="node1" class="node">
 <title>nd_1</title>
-<ellipse fill="none" stroke="black" cx="191" cy="-234" rx="37.09" ry="18"/>
-<text text-anchor="middle" x="191" y="-230.3" font-family="Times,serif" font-size="14.00">Node 1</text>
+<ellipse fill="none" stroke="black" cx="190" cy="-234" rx="36.29" ry="18"/>
+<text text-anchor="middle" x="190" y="-230.3" font-family="Times,serif" font-size="14.00">Node 1</text>
 </g>
 <!-- nd_2 -->
 <g id="node2" class="node">
 <title>nd_2</title>
-<ellipse fill="none" stroke="black" cx="191" cy="-162" rx="37.09" ry="18"/>
-<text text-anchor="middle" x="191" y="-158.3" font-family="Times,serif" font-size="14.00">Node 2</text>
+<ellipse fill="none" stroke="black" cx="190" cy="-162" rx="36.29" ry="18"/>
+<text text-anchor="middle" x="190" y="-158.3" font-family="Times,serif" font-size="14.00">Node 2</text>
 </g>
 <!-- nd_1&#45;&gt;nd_2 -->
 <g id="edge2" class="edge">
 <title>nd_1&#45;&gt;nd_2</title>
-<path fill="none" stroke="black" d="M191,-215.7C191,-207.98 191,-198.71 191,-190.11"/>
-<polygon fill="black" stroke="black" points="194.5,-190.1 191,-180.1 187.5,-190.1 194.5,-190.1"/>
+<path fill="none" stroke="black" d="M190,-215.7C190,-208.41 190,-199.73 190,-191.54"/>
+<polygon fill="black" stroke="black" points="193.5,-191.62 190,-181.62 186.5,-191.62 193.5,-191.62"/>
 </g>
 <!-- nd_3 -->
 <g id="node5" class="node">
 <title>nd_3</title>
-<ellipse fill="none" stroke="black" cx="199" cy="-90" rx="37.09" ry="18"/>
-<text text-anchor="middle" x="199" y="-86.3" font-family="Times,serif" font-size="14.00">Node 3</text>
+<ellipse fill="none" stroke="black" cx="198" cy="-90" rx="36.29" ry="18"/>
+<text text-anchor="middle" x="198" y="-86.3" font-family="Times,serif" font-size="14.00">Node 3</text>
 </g>
 <!-- nd_2&#45;&gt;nd_3 -->
 <g id="edge3" class="edge">
 <title>nd_2&#45;&gt;nd_3</title>
-<path fill="none" stroke="black" d="M192.98,-143.7C193.86,-135.98 194.92,-126.71 195.9,-118.11"/>
-<polygon fill="black" stroke="black" points="199.39,-118.44 197.05,-108.1 192.43,-117.64 199.39,-118.44"/>
+<path fill="none" stroke="black" d="M191.98,-143.7C192.81,-136.41 193.8,-127.73 194.74,-119.54"/>
+<polygon fill="black" stroke="black" points="198.22,-119.94 195.87,-109.61 191.26,-119.15 198.22,-119.94"/>
 </g>
 <!-- nd_3_a -->
 <g id="node3" class="node">
 <title>nd_3_a</title>
-<ellipse fill="none" stroke="black" cx="332" cy="-162" rx="86.38" ry="18"/>
-<text text-anchor="middle" x="332" y="-158.3" font-family="Times,serif" font-size="14.00">Above Right Node 3</text>
+<ellipse fill="none" stroke="black" cx="329" cy="-162" rx="84.49" ry="18"/>
+<text text-anchor="middle" x="329" y="-158.3" font-family="Times,serif" font-size="14.00">Above Right Node 3</text>
 </g>
 <!-- nd_3_r -->
 <g id="node6" class="node">
 <title>nd_3_r</title>
-<ellipse fill="none" stroke="black" cx="324" cy="-90" rx="69.59" ry="18"/>
-<text text-anchor="middle" x="324" y="-86.3" font-family="Times,serif" font-size="14.00">Right of Node 3</text>
+<ellipse fill="none" stroke="black" cx="321" cy="-90" rx="68.49" ry="18"/>
+<text text-anchor="middle" x="321" y="-86.3" font-family="Times,serif" font-size="14.00">Right of Node 3</text>
 </g>
 <!-- nd_3_a&#45;&gt;nd_3_r -->
 <g id="edge1" class="edge">
 <title>nd_3_a&#45;&gt;nd_3_r</title>
-<path fill="none" stroke="black" d="M330.02,-143.7C329.14,-135.98 328.08,-126.71 327.1,-118.11"/>
-<polygon fill="black" stroke="black" points="330.57,-117.64 325.95,-108.1 323.61,-118.44 330.57,-117.64"/>
+<path fill="none" stroke="black" d="M327.02,-143.7C326.19,-136.41 325.2,-127.73 324.26,-119.54"/>
+<polygon fill="black" stroke="black" points="327.74,-119.15 323.13,-109.61 320.78,-119.94 327.74,-119.15"/>
 </g>
 <!-- nd_3_l -->
 <g id="node4" class="node">
 <title>nd_3_l</title>
-<ellipse fill="none" stroke="black" cx="80" cy="-90" rx="64.19" ry="18"/>
+<ellipse fill="none" stroke="black" cx="80" cy="-90" rx="63.89" ry="18"/>
 <text text-anchor="middle" x="80" y="-86.3" font-family="Times,serif" font-size="14.00">Left of Node 3</text>
 </g>
 <!-- nd_3_l&#45;&gt;nd_3 -->
 <g id="edge5" class="edge">
 <title>nd_3_l&#45;&gt;nd_3</title>
-<path fill="none" stroke="grey" d="M144.61,-90C150.28,-90 155.94,-90 161.61,-90"/>
+<path fill="none" stroke="grey" d="M144.07,-90C149.83,-90 155.59,-90 161.34,-90"/>
 </g>
 <!-- nd_3&#45;&gt;nd_3_r -->
 <g id="edge6" class="edge">
 <title>nd_3&#45;&gt;nd_3_r</title>
-<path fill="none" stroke="grey" d="M236.11,-90C242.17,-90 248.24,-90 254.31,-90"/>
+<path fill="none" stroke="grey" d="M234.52,-90C240.37,-90 246.23,-90 252.08,-90"/>
 </g>
 <!-- nd_4 -->
 <g id="node7" class="node">
 <title>nd_4</title>
-<ellipse fill="none" stroke="black" cx="199" cy="-18" rx="37.09" ry="18"/>
-<text text-anchor="middle" x="199" y="-14.3" font-family="Times,serif" font-size="14.00">Node 4</text>
+<ellipse fill="none" stroke="black" cx="198" cy="-18" rx="36.29" ry="18"/>
+<text text-anchor="middle" x="198" y="-14.3" font-family="Times,serif" font-size="14.00">Node 4</text>
 </g>
 <!-- nd_3&#45;&gt;nd_4 -->
 <g id="edge4" class="edge">
 <title>nd_3&#45;&gt;nd_4</title>
-<path fill="none" stroke="black" d="M199,-71.7C199,-63.98 199,-54.71 199,-46.11"/>
-<polygon fill="black" stroke="black" points="202.5,-46.1 199,-36.1 195.5,-46.1 202.5,-46.1"/>
+<path fill="none" stroke="black" d="M198,-71.7C198,-64.41 198,-55.73 198,-47.54"/>
+<polygon fill="black" stroke="black" points="201.5,-47.62 198,-37.62 194.5,-47.62 201.5,-47.62"/>
 </g>
 </g>
 </svg>
diff --git a/other/ex9.svg b/other/ex9.svg
--- a/other/ex9.svg
+++ b/other/ex9.svg
@@ -1,68 +1,68 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.49.3 (20211023.0002)
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
  -->
 <!-- Title: D Pages: 1 -->
-<svg width="461pt" height="177pt"
- viewBox="0.00 0.00 461.00 177.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="457pt" height="177pt"
+ viewBox="0.00 0.00 457.00 177.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 173)">
 <title>D</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-173 457,-173 457,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-173 453,-173 453,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster_p</title>
-<polygon fill="none" stroke="black" points="8,-8 8,-161 445,-161 445,-8 8,-8"/>
-<text text-anchor="middle" x="226.5" y="-145.8" font-family="Times,serif" font-size="14.00">Parent</text>
+<polygon fill="none" stroke="black" points="8,-8 8,-161 441,-161 441,-8 8,-8"/>
+<text text-anchor="middle" x="224.5" y="-145.8" font-family="Times,serif" font-size="14.00">Parent</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster_c1</title>
-<polygon fill="none" stroke="black" points="96,-16 96,-130 437,-130 437,-16 96,-16"/>
-<text text-anchor="middle" x="266.5" y="-114.8" font-family="Times,serif" font-size="14.00">Child one</text>
+<polygon fill="none" stroke="black" points="95,-16 95,-130 433,-130 433,-16 95,-16"/>
+<text text-anchor="middle" x="264" y="-114.8" font-family="Times,serif" font-size="14.00">Child one</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster_gc_1</title>
-<polygon fill="none" stroke="black" points="318,-24 318,-99 429,-99 429,-24 318,-24"/>
-<text text-anchor="middle" x="373.5" y="-83.8" font-family="Times,serif" font-size="14.00">Grand&#45;Child one</text>
+<polygon fill="none" stroke="black" points="317,-24 317,-99 425,-99 425,-24 317,-24"/>
+<text text-anchor="middle" x="371" y="-83.8" font-family="Times,serif" font-size="14.00">Grand&#45;Child one</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster_gc_2</title>
-<polygon fill="none" stroke="black" points="168,-24 168,-99 310,-99 310,-24 168,-24"/>
-<text text-anchor="middle" x="239" y="-83.8" font-family="Times,serif" font-size="14.00">Grand&#45;Child two</text>
+<polygon fill="none" stroke="black" points="167,-24 167,-99 309,-99 309,-24 167,-24"/>
+<text text-anchor="middle" x="238" y="-83.8" font-family="Times,serif" font-size="14.00">Grand&#45;Child two</text>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster_c2</title>
-<polygon fill="none" stroke="black" points="16,-24 16,-99 88,-99 88,-24 16,-24"/>
-<text text-anchor="middle" x="52" y="-83.8" font-family="Times,serif" font-size="14.00">Child two</text>
+<polygon fill="none" stroke="black" points="16,-24 16,-99 87,-99 87,-24 16,-24"/>
+<text text-anchor="middle" x="51.5" y="-83.8" font-family="Times,serif" font-size="14.00">Child two</text>
 </g>
 <!-- a -->
 <g id="node1" class="node">
 <title>a</title>
-<ellipse fill="none" stroke="black" cx="131" cy="-50" rx="27" ry="18"/>
-<text text-anchor="middle" x="131" y="-46.3" font-family="Times,serif" font-size="14.00">a</text>
+<ellipse fill="none" stroke="black" cx="130" cy="-50" rx="27" ry="18"/>
+<text text-anchor="middle" x="130" y="-46.3" font-family="Times,serif" font-size="14.00">a</text>
 </g>
 <!-- b -->
 <g id="node2" class="node">
 <title>b</title>
-<ellipse fill="none" stroke="black" cx="373" cy="-50" rx="27" ry="18"/>
-<text text-anchor="middle" x="373" y="-46.3" font-family="Times,serif" font-size="14.00">b</text>
+<ellipse fill="none" stroke="black" cx="371" cy="-50" rx="27" ry="18"/>
+<text text-anchor="middle" x="371" y="-46.3" font-family="Times,serif" font-size="14.00">b</text>
 </g>
 <!-- c -->
 <g id="node3" class="node">
 <title>c</title>
-<ellipse fill="none" stroke="black" cx="275" cy="-50" rx="27" ry="18"/>
-<text text-anchor="middle" x="275" y="-46.3" font-family="Times,serif" font-size="14.00">c</text>
+<ellipse fill="none" stroke="black" cx="274" cy="-50" rx="27" ry="18"/>
+<text text-anchor="middle" x="274" y="-46.3" font-family="Times,serif" font-size="14.00">c</text>
 </g>
 <!-- d -->
 <g id="node4" class="node">
 <title>d</title>
-<ellipse fill="none" stroke="black" cx="203" cy="-50" rx="27" ry="18"/>
-<text text-anchor="middle" x="203" y="-46.3" font-family="Times,serif" font-size="14.00">d</text>
+<ellipse fill="none" stroke="black" cx="202" cy="-50" rx="27" ry="18"/>
+<text text-anchor="middle" x="202" y="-46.3" font-family="Times,serif" font-size="14.00">d</text>
 </g>
 <!-- e -->
 <g id="node5" class="node">
 <title>e</title>
-<ellipse fill="none" stroke="black" cx="52" cy="-50" rx="27" ry="18"/>
-<text text-anchor="middle" x="52" y="-46.3" font-family="Times,serif" font-size="14.00">e</text>
+<ellipse fill="none" stroke="black" cx="51" cy="-50" rx="27" ry="18"/>
+<text text-anchor="middle" x="51" y="-46.3" font-family="Times,serif" font-size="14.00">e</text>
 </g>
 </g>
 </svg>
diff --git a/other/exdirect.svg b/other/exdirect.svg
new file mode 100644
--- /dev/null
+++ b/other/exdirect.svg
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 7.1.0 (20230121.1956)
+ -->
+<!-- Pages: 1 -->
+<svg width="64pt" height="72pt"
+ viewBox="0.00 0.00 64.01 72.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(0.146645 0.146645) rotate(0) translate(4 486.98)">
+<polygon fill="white" stroke="none" points="-4,4 -4,-486.98 432.5,-486.98 432.5,4 -4,4"/>
+<!-- 9 -->
+<g id="node1" class="node">
+<title>9</title>
+<ellipse fill="none" stroke="black" cx="18" cy="-392.98" rx="18" ry="18"/>
+<text text-anchor="middle" x="18" y="-389.28" font-family="Times,serif" font-size="14.00">9</text>
+</g>
+<!-- 8 -->
+<g id="node2" class="node">
+<title>8</title>
+<ellipse fill="none" stroke="black" cx="265" cy="-19.5" rx="18" ry="18"/>
+<text text-anchor="middle" x="265" y="-15.8" font-family="Times,serif" font-size="14.00">8</text>
+</g>
+<!-- 7 -->
+<g id="node3" class="node">
+<title>7</title>
+<ellipse fill="none" stroke="black" cx="354" cy="-94.49" rx="18" ry="18"/>
+<text text-anchor="middle" x="354" y="-90.79" font-family="Times,serif" font-size="14.00">7</text>
+</g>
+<!-- 6 -->
+<g id="node4" class="node">
+<title>6</title>
+<ellipse fill="none" stroke="black" cx="272" cy="-169.49" rx="18" ry="18"/>
+<text text-anchor="middle" x="272" y="-165.79" font-family="Times,serif" font-size="14.00">6</text>
+</g>
+<!-- 5 -->
+<g id="node5" class="node">
+<title>5</title>
+<ellipse fill="none" stroke="black" cx="271" cy="-319.48" rx="18" ry="18"/>
+<text text-anchor="middle" x="271" y="-315.78" font-family="Times,serif" font-size="14.00">5</text>
+</g>
+<!-- 17 -->
+<g id="node11" class="node">
+<title>17</title>
+<ellipse fill="none" stroke="black" cx="243" cy="-244.49" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="243" y="-240.79" font-family="Times,serif" font-size="14.00">17</text>
+</g>
+<!-- 5&#45;&gt;17 -->
+<g id="edge1" class="edge">
+<title>5&#45;&gt;17</title>
+<path fill="none" stroke="black" d="M264.79,-302.28C261.03,-292.5 256.19,-279.87 252.02,-269"/>
+<polygon fill="black" stroke="black" points="253.75,-268.63 250.33,-264.59 250.48,-269.88 253.75,-268.63"/>
+</g>
+<!-- 11 -->
+<g id="node17" class="node">
+<title>11</title>
+<ellipse fill="none" stroke="black" cx="300" cy="-244.49" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="300" y="-240.79" font-family="Times,serif" font-size="14.00">11</text>
+</g>
+<!-- 5&#45;&gt;11 -->
+<g id="edge2" class="edge">
+<title>5&#45;&gt;11</title>
+<path fill="none" stroke="black" d="M277.44,-302.28C281.32,-292.5 286.34,-279.87 290.66,-269"/>
+<polygon fill="black" stroke="black" points="292.19,-269.88 292.41,-264.58 288.94,-268.58 292.19,-269.88"/>
+</g>
+<!-- 0 -->
+<g id="node20" class="node">
+<title>0</title>
+<ellipse fill="none" stroke="black" cx="355" cy="-244.49" rx="18" ry="18"/>
+<text text-anchor="middle" x="355" y="-240.79" font-family="Times,serif" font-size="14.00">0</text>
+</g>
+<!-- 5&#45;&gt;0 -->
+<g id="edge3" class="edge">
+<title>5&#45;&gt;0</title>
+<path fill="none" stroke="black" d="M284.12,-307.08C298.34,-294.72 321.12,-274.93 337,-261.13"/>
+<polygon fill="black" stroke="black" points="337.92,-262.65 340.55,-258.05 335.63,-260.01 337.92,-262.65"/>
+</g>
+<!-- 4 -->
+<g id="node6" class="node">
+<title>4</title>
+<ellipse fill="none" stroke="black" cx="298" cy="-392.98" rx="18" ry="18"/>
+<text text-anchor="middle" x="298" y="-389.28" font-family="Times,serif" font-size="14.00">4</text>
+</g>
+<!-- 4&#45;&gt;5 -->
+<g id="edge4" class="edge">
+<title>4&#45;&gt;5</title>
+<path fill="none" stroke="black" d="M291.87,-375.76C288.18,-365.98 283.42,-353.38 279.38,-342.69"/>
+<polygon fill="black" stroke="black" points="281.04,-342.12 277.64,-338.06 277.77,-343.36 281.04,-342.12"/>
+</g>
+<!-- 16 -->
+<g id="node12" class="node">
+<title>16</title>
+<ellipse fill="none" stroke="black" cx="326" cy="-319.48" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="326" y="-315.78" font-family="Times,serif" font-size="14.00">16</text>
+</g>
+<!-- 4&#45;&gt;16 -->
+<g id="edge5" class="edge">
+<title>4&#45;&gt;16</title>
+<path fill="none" stroke="black" d="M304.35,-375.76C308.02,-366.39 312.7,-354.44 316.77,-344.05"/>
+<polygon fill="black" stroke="black" points="318.34,-344.85 318.53,-339.56 315.08,-343.57 318.34,-344.85"/>
+</g>
+<!-- 10 -->
+<g id="node18" class="node">
+<title>10</title>
+<ellipse fill="none" stroke="black" cx="383" cy="-319.48" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="383" y="-315.78" font-family="Times,serif" font-size="14.00">10</text>
+</g>
+<!-- 4&#45;&gt;10 -->
+<g id="edge6" class="edge">
+<title>4&#45;&gt;10</title>
+<path fill="none" stroke="black" d="M311.28,-380.81C325.33,-368.99 347.63,-350.23 363.64,-336.77"/>
+<polygon fill="black" stroke="black" points="364.53,-338.31 367.23,-333.75 362.28,-335.63 364.53,-338.31"/>
+</g>
+<!-- 3 -->
+<g id="node7" class="node">
+<title>3</title>
+<ellipse fill="none" stroke="black" cx="138" cy="-464.98" rx="18" ry="18"/>
+<text text-anchor="middle" x="138" y="-461.28" font-family="Times,serif" font-size="14.00">3</text>
+</g>
+<!-- 3&#45;&gt;9 -->
+<g id="edge7" class="edge">
+<title>3&#45;&gt;9</title>
+<path fill="none" stroke="black" d="M122.8,-455.12C101.55,-442.72 62.87,-420.16 38.92,-406.18"/>
+<polygon fill="black" stroke="black" points="39.96,-404.77 34.76,-403.76 38.2,-407.79 39.96,-404.77"/>
+</g>
+<!-- 3&#45;&gt;4 -->
+<g id="edge8" class="edge">
+<title>3&#45;&gt;4</title>
+<path fill="none" stroke="black" d="M154.52,-456.76C183.53,-444.06 243.64,-417.77 276.08,-403.57"/>
+<polygon fill="black" stroke="black" points="276.54,-405.28 280.42,-401.67 275.14,-402.07 276.54,-405.28"/>
+</g>
+<!-- 15 -->
+<g id="node13" class="node">
+<title>15</title>
+<ellipse fill="none" stroke="black" cx="111" cy="-94.49" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="111" y="-90.79" font-family="Times,serif" font-size="14.00">15</text>
+</g>
+<!-- 3&#45;&gt;15 -->
+<g id="edge9" class="edge">
+<title>3&#45;&gt;15</title>
+<path fill="none" stroke="black" d="M133.57,-447.33C126.88,-420.73 115,-366.91 115,-320.48 115,-320.48 115,-320.48 115,-243.49 115,-200.24 113.27,-149.9 112.09,-120.48"/>
+<polygon fill="black" stroke="black" points="113.84,-120.62 111.89,-115.69 110.35,-120.76 113.84,-120.62"/>
+</g>
+<!-- 2 -->
+<g id="node8" class="node">
+<title>2</title>
+<ellipse fill="none" stroke="black" cx="207" cy="-94.49" rx="18" ry="18"/>
+<text text-anchor="middle" x="207" y="-90.79" font-family="Times,serif" font-size="14.00">2</text>
+</g>
+<!-- 2&#45;&gt;8 -->
+<g id="edge10" class="edge">
+<title>2&#45;&gt;8</title>
+<path fill="none" stroke="black" d="M217.91,-79.76C227.06,-68.24 240.22,-51.68 250.3,-38.99"/>
+<polygon fill="black" stroke="black" points="251.46,-40.36 253.2,-35.35 248.72,-38.18 251.46,-40.36"/>
+</g>
+<!-- 2&#45;&gt;3 -->
+<g id="edge11" class="edge">
+<title>2&#45;&gt;3</title>
+<path fill="none" stroke="black" d="M204.88,-112.78C201.68,-140.37 196,-196.08 196,-243.49 196,-320.48 196,-320.48 196,-320.48 196,-362.1 188.77,-372.9 172,-410.98 166.72,-422.97 158.94,-435.35 152.15,-445.12"/>
+<polygon fill="black" stroke="black" points="150.84,-443.94 149.38,-449.03 153.7,-445.96 150.84,-443.94"/>
+</g>
+<!-- 19 -->
+<g id="node9" class="node">
+<title>19</title>
+<ellipse fill="none" stroke="black" cx="96" cy="-19.5" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="96" y="-15.8" font-family="Times,serif" font-size="14.00">19</text>
+</g>
+<!-- 2&#45;&gt;19 -->
+<g id="edge12" class="edge">
+<title>2&#45;&gt;19</title>
+<path fill="none" stroke="black" d="M192.03,-83.65C172.83,-71.02 139.39,-49.03 117.48,-34.62"/>
+<polygon fill="black" stroke="black" points="118.57,-33.25 113.43,-31.96 116.65,-36.17 118.57,-33.25"/>
+</g>
+<!-- 18 -->
+<g id="node10" class="node">
+<title>18</title>
+<ellipse fill="none" stroke="black" cx="153" cy="-19.5" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="153" y="-15.8" font-family="Times,serif" font-size="14.00">18</text>
+</g>
+<!-- 2&#45;&gt;18 -->
+<g id="edge13" class="edge">
+<title>2&#45;&gt;18</title>
+<path fill="none" stroke="black" d="M196.59,-79.42C188.49,-68.47 177.14,-53.13 168.05,-40.85"/>
+<polygon fill="black" stroke="black" points="169.59,-39.99 165.21,-37.01 166.78,-42.07 169.59,-39.99"/>
+</g>
+<!-- 14 -->
+<g id="node14" class="node">
+<title>14</title>
+<ellipse fill="none" stroke="black" cx="210" cy="-19.5" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="210" y="-15.8" font-family="Times,serif" font-size="14.00">14</text>
+</g>
+<!-- 2&#45;&gt;14 -->
+<g id="edge14" class="edge">
+<title>2&#45;&gt;14</title>
+<path fill="none" stroke="black" d="M207.71,-76.2C208.08,-67.13 208.55,-55.87 208.96,-45.84"/>
+<polygon fill="black" stroke="black" points="210.7,-46.05 209.16,-40.98 207.2,-45.9 210.7,-46.05"/>
+</g>
+<!-- 19&#45;&gt;3 -->
+<g id="edge15" class="edge">
+<title>19&#45;&gt;3</title>
+<path fill="none" stroke="black" d="M89.68,-38C80.35,-65.43 64,-120.39 64,-168.49 64,-320.48 64,-320.48 64,-320.48 64,-370.68 100.2,-420.86 121.97,-446.49"/>
+<polygon fill="black" stroke="black" points="120.53,-447.5 125.12,-450.14 123.17,-445.21 120.53,-447.5"/>
+</g>
+<!-- 18&#45;&gt;3 -->
+<g id="edge16" class="edge">
+<title>18&#45;&gt;3</title>
+<path fill="none" stroke="black" d="M154.04,-39.18C155.5,-67.25 158,-121.96 158,-168.49 158,-320.48 158,-320.48 158,-320.48 158,-363.33 149.14,-412.69 143.22,-440.93"/>
+<polygon fill="black" stroke="black" points="141.51,-440.56 142.17,-445.82 144.93,-441.29 141.51,-440.56"/>
+</g>
+<!-- 15&#45;&gt;19 -->
+<g id="edge17" class="edge">
+<title>15&#45;&gt;19</title>
+<path fill="none" stroke="black" d="M107.21,-75.07C105.35,-66 103.07,-54.92 101.06,-45.13"/>
+<polygon fill="black" stroke="black" points="102.81,-44.94 100.09,-40.4 99.38,-45.64 102.81,-44.94"/>
+</g>
+<!-- 15&#45;&gt;18 -->
+<g id="edge18" class="edge">
+<title>15&#45;&gt;18</title>
+<path fill="none" stroke="black" d="M120.53,-76.93C126.38,-66.76 133.95,-53.6 140.31,-42.56"/>
+<polygon fill="black" stroke="black" points="141.78,-43.52 142.75,-38.31 138.74,-41.77 141.78,-43.52"/>
+</g>
+<!-- 13 -->
+<g id="node15" class="node">
+<title>13</title>
+<ellipse fill="none" stroke="black" cx="409" cy="-94.49" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="409" y="-90.79" font-family="Times,serif" font-size="14.00">13</text>
+</g>
+<!-- 12 -->
+<g id="node16" class="node">
+<title>12</title>
+<ellipse fill="none" stroke="black" cx="327" cy="-169.49" rx="19.5" ry="19.5"/>
+<text text-anchor="middle" x="327" y="-165.79" font-family="Times,serif" font-size="14.00">12</text>
+</g>
+<!-- 1 -->
+<g id="node19" class="node">
+<title>1</title>
+<ellipse fill="none" stroke="black" cx="382" cy="-169.49" rx="18" ry="18"/>
+<text text-anchor="middle" x="382" y="-165.79" font-family="Times,serif" font-size="14.00">1</text>
+</g>
+<!-- 1&#45;&gt;7 -->
+<g id="edge19" class="edge">
+<title>1&#45;&gt;7</title>
+<path fill="none" stroke="black" d="M375.79,-152.29C371.87,-142.08 366.76,-128.77 362.48,-117.6"/>
+<polygon fill="black" stroke="black" points="364.16,-117.1 360.74,-113.06 360.9,-118.36 364.16,-117.1"/>
+</g>
+<!-- 1&#45;&gt;2 -->
+<g id="edge20" class="edge">
+<title>1&#45;&gt;2</title>
+<path fill="none" stroke="black" d="M367.84,-157.82C363.81,-155.06 359.34,-152.24 355,-149.99 312.98,-128.29 260.29,-111.07 230.46,-102.16"/>
+<polygon fill="black" stroke="black" points="231.19,-100.55 225.9,-100.81 230.2,-103.9 231.19,-100.55"/>
+</g>
+<!-- 1&#45;&gt;13 -->
+<g id="edge21" class="edge">
+<title>1&#45;&gt;13</title>
+<path fill="none" stroke="black" d="M387.99,-152.29C391.61,-142.51 396.28,-129.88 400.3,-119.01"/>
+<polygon fill="black" stroke="black" points="401.84,-119.9 401.93,-114.6 398.56,-118.68 401.84,-119.9"/>
+</g>
+<!-- 0&#45;&gt;6 -->
+<g id="edge22" class="edge">
+<title>0&#45;&gt;6</title>
+<path fill="none" stroke="black" d="M341.66,-231.76C327.63,-219.41 305.45,-199.91 289.9,-186.23"/>
+<polygon fill="black" stroke="black" points="291.35,-185.18 286.44,-183.19 289.04,-187.81 291.35,-185.18"/>
+</g>
+<!-- 0&#45;&gt;12 -->
+<g id="edge23" class="edge">
+<title>0&#45;&gt;12</title>
+<path fill="none" stroke="black" d="M348.79,-227.29C345.03,-217.51 340.19,-204.87 336.02,-194.01"/>
+<polygon fill="black" stroke="black" points="337.75,-193.63 334.33,-189.59 334.48,-194.89 337.75,-193.63"/>
+</g>
+<!-- 0&#45;&gt;1 -->
+<g id="edge24" class="edge">
+<title>0&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M360.99,-227.29C364.74,-217.15 369.62,-203.95 373.74,-192.83"/>
+<polygon fill="black" stroke="black" points="375.31,-193.61 375.41,-188.32 372.03,-192.4 375.31,-193.61"/>
+</g>
+</g>
+</svg>
diff --git a/other/exga.svg b/other/exga.svg
new file mode 100644
--- /dev/null
+++ b/other/exga.svg
@@ -0,0 +1,25 @@
+<svg height="500" viewBox="-0.25 -483.23 428.9983 483.4803" width="443" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>svg {
+  color-scheme: light dark;
+}
+{
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: rgb(5%, 5%, 5%);
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: rgb(5%, 5%, 5%);
+  }
+  .legendBorder g {
+    fill: rgb(94%, 94%, 94%);
+  }
+}
+@media (prefers-color-scheme:dark) {
+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
+    fill: rgb(94%, 94%, 94%);
+  }
+  .ticklines g, .tickglyph g, .legendBorder g {
+    stroke: rgb(94%, 94%, 94%);
+  }
+  .legendBorder g {
+    fill: rgb(5%, 5%, 5%);
+  }
+}</style><g class="chart"><g class="edges"><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 360.9900,-227.29 C 364.7400,-217.15 369.6200,-203.9500 373.74,-192.83 L 375.9300,-186.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 341.66,-231.76 C 327.63,-219.4100 305.45,-199.91 289.9000,-186.23 L 285.3,-182.19"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 348.79,-227.29 C 345.0300,-217.51 340.19,-204.8700 336.02,-194.01 L 333.78,-188.18"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 367.8400,-157.82 C 363.81,-155.06 359.3400,-152.24 355.0,-149.99 C 312.9800,-128.2900 260.2900,-111.07 230.46,-102.16 L 224.4500,-100.38"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 375.7900,-152.29 C 371.87,-142.08 366.76,-128.77 362.4800,-117.6 L 360.2,-111.65"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 387.99,-152.29 C 391.61,-142.51 396.2800,-129.88 400.3000,-119.01 L 402.4600,-113.18"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 204.88,-112.78 C 201.68,-140.37 196.0000,-196.0800 196.0000,-243.49 C 196.0000,-320.48 196.0000,-320.48 196.0000,-320.48 C 196.0000,-362.1 188.7700,-372.9 172.0,-410.9800 C 166.72,-422.97 158.9400,-435.35 152.1500,-445.12 L 148.5,-450.26"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 217.9100,-79.7650 C 227.0600,-68.243 240.2200,-51.6830 250.3000,-38.994 L 254.1400,-34.167"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 207.7100,-76.196 C 208.08,-67.134 208.5500,-55.866 208.96,-45.841 L 209.2200,-39.467"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 196.59,-79.42 C 188.4900,-68.4730 177.1400,-53.13 168.0500,-40.846 L 164.31,-35.7900"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 192.0300,-83.65 C 172.8300,-71.022 139.39,-49.034 117.4800,-34.622 L 112.17,-31.1320"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 154.52,-456.76 C 183.53,-444.06 243.6400,-417.77 276.08,-403.57 L 281.8100,-401.0700"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 122.8,-455.1200 C 101.55,-442.72 62.8730,-420.16 38.9150,-406.18 L 33.454,-403.0"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 133.57,-447.3300 C 126.8800,-420.73 115.0000,-366.91 115.0000,-320.48 C 115.0000,-320.48 115.0000,-320.48 115.0000,-243.49 C 115.0000,-200.2400 113.2700,-149.9 112.0900,-120.4800 L 111.83,-114.18"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 291.8700,-375.76 C 288.1800,-365.98 283.4200,-353.38 279.38,-342.69 L 277.1,-336.64"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 311.28,-380.81 C 325.33,-368.99 347.6300,-350.2300 363.64,-336.77 L 368.39,-332.78"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 304.35,-375.76 C 308.02,-366.39 312.7,-354.44 316.7700,-344.05 L 319.08,-338.15"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 284.12,-307.08 C 298.3400,-294.72 321.1200,-274.93 337.0,-261.13 L 341.69,-257.0500"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 277.44,-302.28 C 281.32,-292.5 286.34,-279.87 290.66,-269.0 L 292.9700,-263.1800"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 264.7900,-302.28 C 261.03,-292.5 256.19,-279.87 252.02,-269.0 L 249.7800,-263.1800"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 120.53,-76.9310 C 126.38,-66.758 133.95,-53.604 140.31,-42.556 L 143.51,-36.997"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 107.2100,-75.0750 C 105.35,-65.9970 103.0700,-54.924 101.06,-45.13 L 99.7840,-38.912"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 154.0400,-39.181 C 155.5000,-67.246 158.0000,-121.96 158.0000,-168.49 C 158.0000,-320.48 158.0000,-320.48 158.0000,-320.48 C 158.0000,-363.33 149.1400,-412.69 143.2200,-440.93 L 141.86,-447.3000"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 89.6780,-38.0020 C 80.352,-65.432 64.0,-120.3900 64.0,-168.49 C 64.0,-320.48 64.0,-320.48 64.0,-320.48 C 64.0,-370.68 100.2,-420.86 121.9700,-446.49 L 126.11,-451.28"/></g></g><g class="shapes"><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="355.0" cy="-244.49" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="382.0" cy="-169.49" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="207.0000" cy="-94.495" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="138.0" cy="-464.98" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="298.0000" cy="-392.98" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="271.0" cy="-319.48" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="272.0" cy="-169.49" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="354.0" cy="-94.495" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="265.0" cy="-19.498" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="18.0" cy="-392.98" r="18.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="383.0000" cy="-319.48" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="300.0000" cy="-244.49" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="327.0" cy="-169.49" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="409.0" cy="-94.495" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="210.0" cy="-19.498" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="111.0" cy="-94.495" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="326.0" cy="-319.48" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="243.0" cy="-244.49" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="153.0" cy="-19.498" r="19.4983"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="0.5"><circle cx="96.0000" cy="-19.498" r="19.4983"/></g></g><g class="labels"><g fill="rgb(-51%, 30%, 37%)" fill-opacity="1.0" font-size="14.0" stroke="none" stroke-width="0.0" text-anchor="middle"><text x="355.0" y="-240.7900">0</text><text x="382.0" y="-165.7900">1</text><text x="207.0000" y="-90.795">2</text><text x="138.0" y="-461.28">3</text><text x="298.0000" y="-389.2800">4</text><text x="271.0" y="-315.7800">5</text><text x="272.0" y="-165.7900">6</text><text x="354.0" y="-90.795">7</text><text x="265.0" y="-15.7980">8</text><text x="18.0" y="-389.2800">9</text><text x="383.0000" y="-315.7800">10</text><text x="300.0000" y="-240.7900">11</text><text x="327.0" y="-165.7900">12</text><text x="409.0" y="-90.795">13</text><text x="210.0" y="-15.7980">14</text><text x="111.0" y="-90.795">15</text><text x="326.0" y="-315.7800">16</text><text x="243.0" y="-240.7900">17</text><text x="153.0" y="-15.7980">18</text><text x="96.0000" y="-15.7980">19</text></g></g></g><g class="hud"/></svg>
diff --git a/other/nh.svg b/other/nh.svg
--- a/other/nh.svg
+++ b/other/nh.svg
@@ -1,25 +1,25 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="1044.6129846153847" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.5000399999999985 -324.5 678.99844 325.0" height="500.0"><style>svg {
+<svg height="500" viewBox="-314.7 -324.5 1317.75 325.0" width="2027" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>svg {
   color-scheme: light dark;
 }
 {
   .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
-    fill: #0d0d0d;
+    fill: rgb(5%, 5%, 5%);
   }
   .ticklines g, .tickglyph g, .legendBorder g {
-    stroke: #0d0d0d;
+    stroke: rgb(5%, 5%, 5%);
   }
   .legendBorder g {
-    fill: #f0f0f0;
+    fill: rgb(94%, 94%, 94%);
   }
 }
 @media (prefers-color-scheme:dark) {
   .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {
-    fill: #f0f0f0;
+    fill: rgb(94%, 94%, 94%);
   }
   .ticklines g, .tickglyph g, .legendBorder g {
-    stroke: #f0f0f0;
+    stroke: rgb(94%, 94%, 94%);
   }
   .legendBorder g {
-    fill: #0d0d0d;
+    fill: rgb(5%, 5%, 5%);
   }
-}</style><g class="chart"><g class="edges"><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 261.71,-107.24 C 234.9900,-119.71 198.5900,-136.69 173.91,-148.21 L 173.62,-148.34"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 142.14,-252.3000 C 134.45,-263.07 124.6,-276.87 116.9000,-287.64 L 116.72,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 185.57,-252.12 C 205.09,-262.8900 230.21,-276.73 249.85,-287.56 L 250.31,-287.81"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 376.48,-180.1600 C 375.6900,-199.21 372.0100,-230.15 357.5,-252.0000 C 347.61,-266.8900 331.99,-278.84 317.47,-287.6 L 317.13,-287.8000"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 465.63,-36.124 C 446.95,-47.208 422.75,-61.5610 404.29,-72.516 L 403.8500,-72.774"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 376.5,-108.3 C 376.5,-119.07 376.5,-132.87 376.5,-143.64 L 376.5,-143.9"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 349.23,-104.13 C 345.98,-105.5100 342.69,-106.8400 339.5,-108.0000 C 308.87,-119.16 219.46,-142.43 173.89,-154.07 L 173.62,-154.13"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 196.94,-108.3 C 186.63,-119.07 173.43,-132.87 163.11,-143.64 L 162.87,-143.9"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 376.5,-36.303 C 376.5,-47.069 376.5,-60.866 376.5,-71.642 L 376.5,-71.896"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 230.79,-180.12 C 215.26,-190.8900 195.29,-204.7300 179.67,-215.56 L 179.3000,-215.81"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 261.93,-180.3000 C 265.93,-191.07 271.05,-204.8700 275.05,-215.64 L 275.15,-215.9000"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 281.5,-252.3000 C 281.5,-263.07 281.5,-276.87 281.5,-287.64 L 281.5,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 140.48,-108.3 C 141.71,-119.07 143.2800,-132.87 144.52,-143.64 L 144.55,-143.9"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 131.67,-33.503 C 134.99,-34.3890 138.29,-35.2310 141.5,-36.0 C 228.49,-56.813 254.19,-45.118 339.5,-72.0 C 342.64,-72.988 345.85,-74.178 349.02,-75.464 L 349.32,-75.589"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 85.48,-36.185 C 87.094,-54.712 91.3430,-84.678 102.5,-108.0000 C 108.8,-121.1700 119.1,-133.83 128.14,-143.4700 L 128.57,-143.93"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 292.65,-36.124 C 309.72,-46.887 331.67,-60.732 348.84,-71.555 L 349.24,-71.81"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 148.48,-180.3000 C 149.71,-191.07 151.28,-204.8700 152.52,-215.64 L 152.55,-215.9000"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 123.76,-180.3000 C 109.61,-191.07 91.476,-204.8700 77.314,-215.64 L 76.98,-215.9000"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 55.1,-107.24 C 74.311,-118.5400 99.821,-133.54 119.01,-144.83 L 119.46,-145.09"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 66.86,-252.3000 C 74.549,-263.07 84.404,-276.87 92.101,-287.64 L 92.283,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 220.02,-32.535 C 223.22,-33.729 226.41,-34.9 229.5,-36.0 C 277.9500,-53.2750 291.61,-53.2310 339.5,-72.0 C 342.56,-73.199 345.73,-74.524 348.87,-75.889 L 349.17,-76.021"/></g><g fill="rgb(0%, 0%, 0%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.0" stroke-opacity="1.0"><path d="M 555.07,-36.0340 C 507.09,-50.2640 440.79,-69.93 403.97,-80.854 L 403.53,-80.982"/></g></g><g class="shapes"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="71.99992" width="65.00016" y="-324.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="262.00012" width="68.99976000000004" y="-108.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="112.9992" width="83.0016" y="-252.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="344.49996" width="64.00008000000003" y="-180.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="460.50016000000005" width="67.99968000000001" y="-36.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="349.5" width="54.0" y="-108.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="183.50012" width="59.99975999999998" y="-108.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="310.5012" width="131.99760000000003" y="-36.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="225.50012" width="59.99976000000001" y="-180.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="233.5012" width="95.9976" y="-324.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="214.5004" width="133.99919999999997" y="-252.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="111.5" width="54.0" y="-108.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="37.4984" width="94.00319999999999" y="-36.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="238.5" width="54.0" y="-36.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="119.5" width="54.0" y="-180.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-3.999999999848569e-5" width="55.00008" y="-108.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="14.500399999999999" width="79.9992" y="-252.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="151.00012" width="68.99975999999998" y="-36.0" height="36.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(-51%, 30%, 37%)" stroke-width="1.0" fill-opacity="0.2" stroke-opacity="1.0"><rect x="547.0016" width="130.9967999999999" y="-36.0" height="36.0"/></g></g><g class="labels"><g fill="rgb(-51%, 30%, 37%)" stroke="none" stroke-width="0.0" font-size="14.0" fill-opacity="1.0" text-anchor="middle"><text x="104.5" y="-302.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Additive">Additive</a></text><text x="296.5" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Direction">Direction</a></text><text x="154.5" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Distributive.html#t:Distributive">Distributive</a></text><text x="376.5" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Divisive">Divisive</a></text><text x="494.50000000000006" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:ExpField">ExpField</a></text><text x="376.5" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:Field">Field</a></text><text x="213.5" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Integral.html#t:Integral">Integral</a></text><text x="376.5" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:LowerBoundedField">LowerBoundedField</a></text><text x="255.5" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Module.html#t:Module">Module</a></text><text x="281.5" y="-302.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Multiplicative">Multiplicative</a></text><text x="281.5" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Module.html#t:MultiplicativeAction">MultiplicativeAction</a></text><text x="138.5" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Norm">Norm</a></text><text x="84.5" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:QuotientField">QuotientField</a></text><text x="265.5" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Rational.html#t:Ratio">Ratio</a></text><text x="146.5" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Ring.html#t:Ring">Ring</a></text><text x="27.5" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Signed">Signed</a></text><text x="54.5" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Subtractive">Subtractive</a></text><text x="185.5" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:TrigField">TrigField</a></text><text x="612.5" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:UpperBoundedField">UpperBoundedField</a></text></g></g></g><g class="hud"></g></svg>
+}</style><g class="chart"><g class="edges"><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 259.67,-107.24 C 235.33,-118.75 202.8400,-134.12 178.83,-145.47 L 173.23,-148.12"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 142.89,-252.3000 C 136.48,-261.46 128.5400,-272.81 121.66,-282.62 L 117.97,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 185.97,-252.48 C 203.26,-262.25 224.89,-274.46 242.95,-284.65 L 248.42,-287.74"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 372.94,-180.49 C 372.1000,-199.56 368.35,-230.2400 354.0000,-252.0000 C 345.4,-265.0400 332.39,-275.87 319.61,-284.26 L 314.1600,-287.71"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 459.28,-36.4830 C 442.88,-46.465 422.27,-59.009 405.3100,-69.333 L 400.1700,-72.461"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 373.0,-108.3 C 373.0,-117.12 373.0,-127.9700 373.0,-137.53 L 373.0,-143.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 345.6900,-104.49 C 342.7800,-105.7400 339.85,-106.94 337.0,-108.0000 C 308.06,-118.7600 225.8500,-140.48 179.26,-152.5 L 173.2100,-154.06"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 195.69,-108.3 C 186.89,-117.63 175.96,-129.23 166.59,-139.17 L 162.13,-143.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 373.0,-36.303 C 373.0,-45.119 373.0,-55.968 373.0,-65.526 L 373.0,-71.896"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 229.2700,-180.48 C 215.7100,-190.0800 198.79,-202.04 184.53,-212.1200 L 179.41,-215.7400"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 260.18,-180.3000 C 263.36,-189.2000 267.28,-200.18 270.7100,-209.8 L 272.89,-215.9000"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 279.0,-252.3000 C 279.0,-261.1200 279.0,-271.97 279.0,-281.53 L 279.0,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 139.2200,-108.3 C 140.36,-117.12 141.75,-127.9700 142.98,-137.53 L 143.8,-143.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 131.24,-33.243 C 134.87,-34.222 138.49,-35.1540 142.0,-36.0 C 227.68,-56.6240 253.1200,-44.958 337.0,-72.0 C 337.9000,-72.292 338.8200,-72.601 339.73,-72.925 L 345.78,-75.254"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 85.457,-36.2 C 86.536,-54.7390 90.012,-84.716 101.0,-108.0000 C 106.3000,-119.2400 114.6200,-130.01 122.66,-138.87 L 127.08,-143.58"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 291.22,-36.4830 C 306.29,-46.161 325.11,-58.2460 340.9,-68.383 L 346.12,-71.739"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 148.2200,-180.3000 C 149.36,-189.1200 150.75,-199.97 151.98,-209.5300 L 152.8,-215.9000"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 124.0000,-180.3000 C 111.9100,-189.81 96.818,-201.6800 84.019,-211.7500 L 79.055,-215.65"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 54.301,-107.06 C 71.837,-117.37 94.714,-130.83 113.23,-141.72 L 118.83,-145.0200"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 69.112,-252.3000 C 75.521,-261.46 83.464,-272.81 90.336,-282.62 L 94.027,-287.9"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 219.2,-32.726 C 222.1700,-33.855 225.13,-34.96 228.0,-36.0 C 275.96,-53.3860 289.62,-53.072 337.0,-72.0 C 337.88,-72.353 338.77,-72.716 339.6700,-73.089 L 345.64,-75.655"/></g><g fill="rgb(0%, 0%, 0%)" fill-opacity="0" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><path d="M 545.55,-36.4830 C 501.66,-49.843 442.69,-67.791 406.2900,-78.867 L 400.21,-80.718"/></g></g><g class="shapes"><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="64.0001" x="74.0000" y="-324.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="67.9997" x="260.0002" y="-108.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="81.0" x="114.5" y="-252.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="61.9999" x="342.0000" y="-180.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="66.0002" x="454.9999" y="-36.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="346.0" y="-108.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="58.9997" x="182.5002" y="-108.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="128.0016" x="308.9992" y="-36.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="58.9997" x="224.5002" y="-180.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="94.0032" x="231.9984" y="-324.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="130.9968" x="213.5016" y="-252.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="110.0" y="-108.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="92.0016" x="38.9992" y="-36.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="237.0" y="-36.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="119.0" y="-180.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="54.0" x="0" y="-108.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="77.9976" x="18.0012" y="-252.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="67.9997" x="151.0002" y="-36.0"/></g><g fill="rgb(2%, 73%, 80%)" fill-opacity="0.2" stroke="rgb(-51%, 30%, 37%)" stroke-opacity="1.0" stroke-width="1.0"><rect height="36.0" width="127.0008" x="539.4996" y="-36.0"/></g></g><g class="labels"><g fill="rgb(-51%, 30%, 37%)" fill-opacity="1.0" font-size="14.0" stroke="none" stroke-width="0.0" text-anchor="middle"><text x="106.0000" y="-302.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Additive">Additive</a></text><text x="294.0" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Direction">Direction</a></text><text x="155.0" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Distributive.html#t:Distributive">Distributive</a></text><text x="373.0" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Divisive">Divisive</a></text><text x="488.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:ExpField">ExpField</a></text><text x="373.0" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:Field">Field</a></text><text x="212.0000" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Integral.html#t:Integral">Integral</a></text><text x="373.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:LowerBoundedField">LowerBoundedField</a></text><text x="254.0" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Module.html#t:Module">Module</a></text><text x="279.0" y="-302.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Multiplicative">Multiplicative</a></text><text x="279.0" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Module.html#t:MultiplicativeAction">MultiplicativeAction</a></text><text x="137.0" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Norm">Norm</a></text><text x="85.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:QuotientField">QuotientField</a></text><text x="264.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Rational.html#t:Ratio">Ratio</a></text><text x="146.0" y="-158.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Ring.html#t:Ring">Ring</a></text><text x="27.0" y="-86.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Signed">Signed</a></text><text x="57.0" y="-230.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Subtractive">Subtractive</a></text><text x="185.0000" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:TrigField">TrigField</a></text><text x="603.0" y="-14.3"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:UpperBoundedField">UpperBoundedField</a></text></g></g></g><g class="hud"/></svg>
diff --git a/src/DotParse.hs b/src/DotParse.hs
--- a/src/DotParse.hs
+++ b/src/DotParse.hs
@@ -1,23 +1,62 @@
-{-# OPTIONS_HADDOCK prune #-}
 {-# LANGUAGE AllowAmbiguousTypes #-}
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# OPTIONS_HADDOCK prune #-}
 
 -- | Parser & Printer for the dot language of <http://www.graphviz.org/doc/info/lang.html graphviz>
 --
 -- See "DotParse.Examples" for usage.
---
 module DotParse
-  ( module DotParse.Types,
-    module DotParse.FlatParse,
-    module FlatParse.Basic,
-    module NeatInterpolation,
+  (
+    DotConfig(..),
+    defaultDotConfig,
+    DotParse (..),
+    testDotParser,
+    runDotParser,
+
+    Graph (..),
+    defaultGraph,
+    attL,
+    gattL,
+    processDot,
+    processDotWith,
+    processGraph,
+    processGraphWith,
+
+    Strict(..),
+    defStrict,
+    Directed(..),
+    defDirected,
+    ID(..),
+    label,
+    Compass (..),
+    Port (..),
+    AttributeType (..),
+    AttributeStatement (..),
+    NodeStatement (..),
+    EdgeID (..),
+    EdgeOp (..),
+    fromDirected,
+    EdgeStatement (..),
+    edgeID,
+    edgeIDs,
+    edgeIDsNamed,
+    Statement (..),
+    addStatement,
+    addStatements,
+    SubGraphStatement (..),
+
+    -- * Conversion
+    graphToChartWith,
+    graphToChart,
+    ChartConfig (..),
+    defaultChartConfig,
+    toStatements,
+    toDotGraph,
+    toDotGraphWith,
+
   )
 where
 
-import DotParse.FlatParse
 import DotParse.Types
-import FlatParse.Basic hiding (cut, lines)
-import NeatInterpolation
-import Prelude hiding (replicate)
diff --git a/src/DotParse/Examples.hs b/src/DotParse/Examples.hs
--- a/src/DotParse/Examples.hs
+++ b/src/DotParse/Examples.hs
@@ -14,21 +14,26 @@
 {-# OPTIONS_GHC -Wno-unused-local-binds #-}
 
 -- | Examples of conversion from dot ByteStrings
+--
+-- Most examples from https://renenyffenegger.ch/notes/tools/Graphviz/examples/index
 module DotParse.Examples where
 
 import qualified Algebra.Graph as G
-import Control.Monad
-import Data.ByteString hiding (empty, head, length, map, zip, zipWith)
-import Data.Proxy
-import Data.Text.Encoding (encodeUtf8)
+import Control.Monad ( zipWithM_ )
+import Data.ByteString ( ByteString )
+import Data.Proxy ( Proxy(..) )
 import DotParse
-import Optics.Core
 import Prelude hiding (replicate)
+import Data.String.Interpolate
 
 -- $setup
 -- >>> import DotParse
 -- >>> import Data.Proxy
 -- >>> :set -XOverloadedStrings
+-- >>> import Data.String.Interpolate
+-- >>> import qualified Data.ByteString.Char8 as Char8
+-- >>> import Optics.Core
+-- >>> import Chart
 
 -- * examples
 
@@ -40,20 +45,17 @@
 -- >>> testDotParser (Proxy :: Proxy Graph) defaultDotConfig ex0
 ex0 :: ByteString
 ex0 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 graph {}
 |]
 
--- | Examples from https://renenyffenegger.ch/notes/tools/Graphviz/examples/index
---
--- >>> testDotParser (Proxy :: Proxy Graph) defaultDotConfig ex1
---
+-- |
 -- ![Example](other/ex1.svg)
 ex1 :: ByteString
 ex1 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph D {
     A [shape=diamond]
     B [shape=box]
@@ -65,13 +67,11 @@
 |]
 
 -- |
--- >>> testDotParser (Proxy :: Proxy Graph) defaultDotConfig ex2
---
 -- ![Example](other/ex2.svg)
 ex2 :: ByteString
 ex2 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph D {
 
     node [fontname="Arial"];
@@ -83,13 +83,11 @@
 |]
 
 -- |
--- >>> testDotParser (Proxy :: Proxy Graph) defaultDotConfig ex3
---
 -- ![Example](other/ex3.svg)
 ex3 :: ByteString
 ex3 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph D {
   A -> {B, C, D} -> {F}
 }
@@ -100,13 +98,13 @@
 -- ![Example](other/ex4.svg)
 ex4 :: ByteString
 ex4 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph L {
 
   node [shape=record fontname=Arial];
 
-  a  [label="one\ltwo three\lfour five six seven\l"]
+  a  [label="one\ntwo three\nfour five six seven\n"]
   b  [label="one\ntwo three\nfour five six seven"]
   c  [label="one\rtwo three\rfour five six seven\r"]
 
@@ -120,8 +118,8 @@
 -- ![Example](other/ex5.svg)
 ex5 :: ByteString
 ex5 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph D {
 
   label = "The foo, the bar and the baz";
@@ -140,8 +138,8 @@
 -- ![Example](other/ex6.svg)
 ex6 :: ByteString
 ex6 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph D {
 
   label = <The <font color='red'><b>foo</b></font>,<br/> the <font point-size='20'>bar</font> and<br/> the <i>baz</i>>;
@@ -159,8 +157,8 @@
 -- ![Example](other/ex7.svg)
 ex7 :: ByteString
 ex7 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph R {
 
   { rank=same rA sA tA }
@@ -182,8 +180,8 @@
 -- ![Example](other/ex8.svg)
 ex8 :: ByteString
 ex8 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph Q {
 
   nd_1   [label = "Node 1"];
@@ -214,8 +212,8 @@
 -- ![Example](other/ex9.svg)
 ex9 :: ByteString
 ex9 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph D {
 
   subgraph cluster_p {
@@ -250,8 +248,8 @@
 -- ![Example](other/ex10.svg)
 ex10 :: ByteString
 ex10 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph H {
 
   aHtmlTable [
@@ -273,8 +271,8 @@
 -- ![Example](other/ex11.svg)
 ex11 :: ByteString
 ex11 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph {
 
   tbl [
@@ -313,8 +311,7 @@
 -- ![Example](other/ex12.svg)
 ex12 :: ByteString
 ex12 =
-  encodeUtf8
-    [trimming|
+    [i|
 digraph D {
 
   node [shape=plaintext]
@@ -323,8 +320,8 @@
    label=<
      <table border="0" cellborder="1" cellspacing="0">
        <tr><td bgcolor="yellow">Foo</td></tr>
-       <tr><td bgcolor="lightblue"><font color="#0000ff">Bar</font></td></tr>
-       <tr><td bgcolor="#f0e3ff"><font color="#ff1020">Baz</font></td></tr>
+       <tr><td bgcolor="lightblue"><font color="\#0000ff">Bar</font></td></tr>
+       <tr><td bgcolor="\#f0e3ff"><font color="\#ff1020">Baz</font></td></tr>
      </table>>
   ];
 }
@@ -335,8 +332,8 @@
 -- ![Example](other/ex13.svg)
 ex13 :: ByteString
 ex13 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph H {
 
   aHtmlTable [
@@ -358,8 +355,8 @@
 -- ![Example](other/ex14.svg)
 ex14 :: ByteString
 ex14 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph H {
 
   parent [
@@ -407,8 +404,8 @@
 -- ![Example](other/ex15.svg)
 ex15 :: ByteString
 ex15 =
-  encodeUtf8
-    [trimming|
+
+    [i|
 digraph D {
 
   node [shape=plaintext fontname="Sans serif" fontsize="8"];
@@ -540,71 +537,16 @@
     )
 
 -- | algebraic graph example
-exGInt :: G.Graph Int
-exGInt =
+--
+-- >>> exGraph = defaultGraph & addStatements (toStatements Directed (Char8.pack . show <$> exAGraph))
+-- >>> exGraphAugmented <- processGraph exGraph
+-- >>> writeChartOptions "other/exga.svg" (graphToChartWith defaultChartConfig exGraphAugmented)
+--
+-- ![augmentation example](other/exga.svg)
+--
+exAGraph :: G.Graph Int
+exAGraph =
   G.edges $
     [(v, (v + 1) `mod` 6) | v <- [0 .. 5]]
       ++ [(v, v + k) | v <- [0 .. 5], k <- [6, 12]]
       ++ [(2, 18), (2, 19), (15, 18), (15, 19), (18, 3), (19, 3)]
-
--- |
---
--- > exInt = defaultGraph & addStatements (toStatements Directed (packUTF8 . show <$> exGInt))
--- > import qualified Data.ByteString.Char8 as B
--- > g <- processGraph exInt
--- > B.putStrLn $ dotPrint g
--- digraph {
---     graph [bb="0,0,495.65,493.78";overlap=false;size="1!";splines=spline]
---     node [height=0.5;label="\N";shape=circle]
---     edge [arrowsize=0]
---     0 [pos="384.5,475.78";width=0.5]
---     1 [pos="357.5,401.63";width=0.5]
---     0 -> 1 [pos="e,363.57,418.85 378.51,458.77 374.1,446.99 368.12,431.02 363.67,419.13"]
---     6 [pos="411.5,401.63";width=0.5]
---     0 -> 6 [pos="e,405.43,418.85 390.49,458.77 394.9,446.99 400.87,431.02 405.32,419.13"]
---     12 [height=0.55967;pos="467.5,401.63";width=0.55967]
---     0 -> 12 [pos="e,452.8,415.41 397.83,463.19 412.75,450.22 436.85,429.27 452.43,415.73"]
---     2 [pos="330.5,325.33";width=0.5]
---     1 -> 2 [pos="e,336.35,342.42 351.64,384.51 347.15,372.14 340.97,355.15 336.45,342.72"]
---     7 [pos="384.5,325.33";width=0.5]
---     1 -> 7 [pos="e,378.65,342.42 363.36,384.51 367.85,372.14 374.03,355.15 378.54,342.72"]
---     13 [height=0.55967;pos="440.5,325.33";width=0.55967]
---     1 -> 13 [pos="e,425.95,339.36 370.47,389.02 385.4,375.66 409.87,353.75 425.58,339.69"]
---     3 [pos="263.5,249.04";width=0.5]
---     2 -> 3 [pos="e,275.26,263.08 318.83,311.39 306.7,297.94 287.81,277 275.55,263.4"]
---     8 [pos="419.5,249.04";width=0.5]
---     2 -> 8 [pos="e,406.15,261.18 344.02,313.05 360.71,299.11 388.95,275.54 405.75,261.51"]
---     14 [height=0.55967;pos="475.5,249.04";width=0.55967]
---     2 -> 14 [pos="e,459.28,261.56 344.39,313.55 348.48,310.63 353.06,307.61 357.5,305.19 394.93,284.71 408.73,289.04 446.5,269.19 450.64,267.01 454.93,\
--- 264.4 458.9,261.81"]
---     18 [height=0.55967;pos="239.5,96.445";width=0.55967]
---     2 -> 18 [pos="e,221.18,105.3 313.92,317.87 277.75,302.66 192.9,260.73 166.5,192.89 160,176.2 158.52,168.63 166.5,152.59 177.74,130.02 203.11,114.24 \
--- 220.76,105.5"]
---     19 [height=0.55967;pos="335.5,96.445";width=0.55967]
---     2 -> 19 [pos="e,335.94,116.84 331.52,307.33 332.98,282.28 335.56,234 336.5,192.89 336.91,174.98 336.66,170.5 336.5,152.59 336.39,140.81 336.16,\
--- 127.62 335.94,117.09"]
---     4 [pos="101.5,172.74";width=0.5]
---     3 -> 4 [pos="e,117.56,181.11 247.37,240.64 216.44,226.46 149.09,195.57 117.92,181.27"]
---     9 [pos="193.5,172.74";width=0.5]
---     3 -> 9 [pos="e,205.67,186.66 251.62,235.43 238.93,221.96 218.89,200.69 205.97,186.98"]
---     15 [height=0.55967;pos="287.5,172.74";width=0.55967]
---     3 -> 15 [pos="e,281.6,192.01 268.82,231.55 272.58,219.93 277.61,204.35 281.51,192.29"]
---     5 [pos="48.498,96.445";width=0.5]
---     4 -> 5 [pos="e,58.506,111.47 91.279,157.42 81.908,144.28 68.101,124.92 58.727,111.78"]
---     10 [height=0.55967;pos="104.5,96.445";width=0.55967]
---     4 -> 10 [pos="e,103.72,116.67 102.19,154.51 102.65,143.28 103.24,128.61 103.71,116.95"]
---     16 [height=0.55967;pos="162.5,96.445";width=0.55967]
---     4 -> 16 [pos="e,150.12,112.52 112.69,158.11 123.2,145.31 138.91,126.18 149.86,112.83"]
---     5 -> 0 [pos="e,366.23,475.02 49.439,114.6 50.887,142.55 53.498,199.64 53.498,248.04 53.498,326.33 53.498,326.33 53.498,326.33 53.498,464.3 295.89,\
--- 474.85 365.82,475.02"]
---     11 [height=0.54162;pos="19.498,20.148";width=0.54162]
---     5 -> 11 [pos="e,26.284,38.534 42.206,79.323 37.545,67.382 31.197,51.119 26.397,38.823"]
---     17 [height=0.55967;pos="77.498,20.148";width=0.55967]
---     5 -> 17 [pos="e,70.506,39.061 54.791,79.323 59.386,67.552 65.62,51.579 70.394,39.349"]
---     15 -> 18 [pos="e,250.12,113.89 276.85,155.25 268.95,143.04 258.24,126.45 250.31,114.18"]
---     15 -> 19 [pos="e,324.88,113.89 298.15,155.25 306.04,143.04 316.76,126.45 324.69,114.18"]
---     18 -> 3 [pos="e,260.79,231.06 242.53,116.49 247.24,145.99 256.21,202.31 260.74,230.72"]
---     19 -> 3 [pos="e,277.53,237.38 334.82,116.79 333.41,136.85 329.16,168.62 316.5,192.89 307.11,210.88 290.05,227.04 277.82,237.15"]
---     }
-exInt :: Graph
-exInt = defaultGraph & addStatements (toStatements Directed (packUTF8 . show <$> exGInt))
diff --git a/src/DotParse/Examples/NumHask.hs b/src/DotParse/Examples/NumHask.hs
--- a/src/DotParse/Examples/NumHask.hs
+++ b/src/DotParse/Examples/NumHask.hs
@@ -22,6 +22,8 @@
 import GHC.IO.Unsafe
 import Optics.Core
 import Prelude hiding (replicate)
+import Data.String.Interpolate
+import FlatParse.Basic
 
 -- $setup
 -- >>> import DotParse
@@ -219,7 +221,7 @@
 dotGraphNH d =
   defaultGraph
     & #directed .~ Last (Just d)
-    & addStatements (toStatements d (packUTF8 . show <$> graphNHG))
+    & addStatements (toStatements d (strToUtf8 . show <$> graphNHG))
     & attL NodeType (ID "shape") .~ Just (ID "box")
     & gattL (ID "rankdir") .~ Just (IDQuoted "BT")
 
@@ -229,18 +231,17 @@
 {-# NOINLINE dotGraphNH' #-}
 
 -- | Convert a node ID to a label for chart-svg charts
---
 -- Doing this directly in dot doesn't quite work because the engines get the width of the link wrong.
 toLink :: ID -> Text
-toLink i = [trimming|<a href="https://hackage.haskell.org/package/numhask/docs/$m.html#t:$t">$t</a>|]
+toLink id_ =[i|<a href="https://hackage.haskell.org/package/numhask/docs/#{m}.html\#t:#{t}">#{t}</a>|]
   where
-    t = pack (label i)
+    t = pack (label id_)
     m = Map.fromList (first (pack . show) <$> classesModule) Map.! t
 
 -- | A chart-svg chart with label links
 --
--- > writeChartSvg "other/nh.svg" (graphToChart toLink (dotGraphNH' Directed))
+-- > writeChartOptions "other/nh.svg" (graphToChart toLink (dotGraphNH' Directed))
 --
 -- ![NumHask Example](other/nh.svg)
 writeNHChart :: IO ()
-writeNHChart = writeChartSvg "other/nh.svg" (graphToChartWith (defaultChartConfig & #labelf .~ toLink) (dotGraphNH' Directed))
+writeNHChart = writeChartOptions "other/nh.svg" (graphToChartWith (defaultChartConfig & #labelf .~ toLink) (dotGraphNH' Directed))
diff --git a/src/DotParse/FlatParse.hs b/src/DotParse/FlatParse.hs
--- a/src/DotParse/FlatParse.hs
+++ b/src/DotParse/FlatParse.hs
@@ -56,7 +56,7 @@
 import Data.Char hiding (isDigit)
 import Data.List.NonEmpty
 import DotParse.FlatParse.TH hiding (merge)
-import FlatParse.Basic hiding (cut, lines)
+import FlatParse.Basic hiding (cut)
 import GHC.Generics
 import NumHask.Space
 import Prelude hiding (replicate)
@@ -66,7 +66,7 @@
 -- >>> import FlatParse.Basic
 
 -- | Run parser, print pretty error on failure.
-testParser :: Show a => Parser Error a -> ByteString -> IO ()
+testParser :: (Show a) => Parser Error a -> ByteString -> IO ()
 testParser p b =
   case runParser p b of
     Err e -> B.putStrLn $ prettyError b e
@@ -77,14 +77,14 @@
 runParser_ :: Parser Error a -> ByteString -> a
 runParser_ p b = case runParser p b of
   OK r "" -> r
-  OK _ x -> error $ unpackUTF8 $ "leftovers: " <> x
+  OK _ x -> error $ utf8ToStr $ "leftovers: " <> x
   Fail -> error "Fail"
-  Err e -> error $ unpackUTF8 $ prettyError b e
+  Err e -> error $ utf8ToStr $ prettyError b e
 
 -- * parsing
 
 digit :: Parser Error Int
-digit = (\c -> ord c - ord '0') <$> satisfyASCII isDigit
+digit = (\c -> ord c - ord '0') <$> satisfyAscii isDigit
 
 -- | (unsigned) Int parser
 int :: Parser Error Int
@@ -115,7 +115,7 @@
 double :: Parser Error Double
 double = token do
   (placel, nl) <- digits
-  optioned
+  withOption
     ($(char '.') *> digits)
     ( \(placer, nr) ->
         case (placel, placer) of
@@ -130,14 +130,14 @@
 -- |
 -- >>> runParser (signed double) "-1.234x"
 -- OK (-1.234) "x"
-signed :: Num b => Parser e b -> Parser e b
-signed p = optioned $(char '-') (const (((-1) *) <$> p)) p
+signed :: (Num b) => Parser e b -> Parser e b
+signed p = withOption ($(char '-')) (const (((-1) *) <$> p)) p
 
 -- | Looks ahead for a "/"" that may be in the quoted string.
--- >>> runParser quoted (packUTF8 "\"hello\"")
+-- >>> runParser quoted (strToUtf8 "\"hello\"")
 -- OK "hello" ""
 --
--- >>> runParser quoted (packUTF8 "\"hello/\"\"")
+-- >>> runParser quoted (strToUtf8 "\"hello/\"\"")
 -- OK "hello\"" ""
 quoted :: Parser Error String
 quoted =
diff --git a/src/DotParse/FlatParse/TH.hs b/src/DotParse/FlatParse/TH.hs
--- a/src/DotParse/FlatParse/TH.hs
+++ b/src/DotParse/FlatParse/TH.hs
@@ -12,6 +12,7 @@
 
 import Data.ByteString hiding (head, length, reverse)
 import qualified Data.ByteString.Char8 as B
+import Data.Char hiding (isDigit)
 import Data.Functor
 import FlatParse.Basic
 import Language.Haskell.TH
@@ -44,7 +45,7 @@
 -- | Parse a line comment.
 lineComment :: Parser e ()
 lineComment =
-  optioned
+  withOption
     anyWord8
     ( \case
         10 -> ws
@@ -80,8 +81,8 @@
 -- | First character of a dot identifier.
 isValidStartChar :: Char -> Bool
 isValidStartChar c =
-  ('A' <= c && c <= 'Z')
-    || ('a' <= c && c <= 'z')
+  isAsciiUpper c
+    || isAsciiLower c
     || ('\200' <= c && c <= '\377')
     || (c == '_')
 
@@ -107,18 +108,18 @@
 
 -- | Parser a non-keyword string, throw precise error on failure.
 symbol' :: String -> Q Exp
-symbol' str = [|$(symbol str) `cut'` packUTF8 str|]
+symbol' str = [|$(symbol str) `cut'` strToUtf8 str|]
 
 -- | Parse a keyword string, throw precise error on failure.
 keyword' :: String -> Q Exp
-keyword' str = [|$(keyword str) `cut'` packUTF8 str|]
+keyword' str = [|$(keyword str) `cut'` strToUtf8 str|]
 
 -- | Parse an identifier.
 ident :: Parser e ByteString
 ident =
   token $
     byteStringOf $
-      identStartChar *> many_ identChar
+      identStartChar *> skipMany identChar
 
 -- | Parse an identifier, throw a precise error on failure.
 ident' :: Parser Error ByteString
@@ -165,7 +166,7 @@
       ls = B.lines b
       (l, c) = head $ posLineCols b [pos]
       line = if l < length ls then ls !! l else ""
-      linum = packUTF8 $ show l
+      linum = strToUtf8 $ show l
       lpad = B.replicate (B.length linum) ' '
 
       err (Precise _ e) = e
@@ -179,7 +180,10 @@
           go [] = ""
           go [e] = " or " <> e
           go (e : es) = ", " <> e <> go es
-   in packUTF8 (show l) <> ":" <> packUTF8 (show c) <> ":\n"
+   in strToUtf8 (show l)
+        <> ":"
+        <> strToUtf8 (show c)
+        <> ":\n"
         <> lpad
         <> "|\n"
         <> linum
diff --git a/src/DotParse/Types.hs b/src/DotParse/Types.hs
--- a/src/DotParse/Types.hs
+++ b/src/DotParse/Types.hs
@@ -105,20 +105,21 @@
 import Data.Proxy
 import Data.Text (Text)
 import qualified Data.Text as Text
-import Data.Text.Encoding (encodeUtf8)
 import Data.These
 import DotParse.FlatParse
-import FlatParse.Basic hiding (cut, lines)
+import FlatParse.Basic hiding (cut)
 import GHC.Generics
-import NeatInterpolation
 import Optics.Core
 import System.Exit
 import System.Process.ByteString
 import Prelude hiding (replicate)
+import Data.String.Interpolate
 
 -- $setup
 -- >>> import DotParse
 -- >>> import qualified Data.Map as Map
+-- >>> import qualified FlatParse.Basic as FP
+-- >>> import FlatParse.Basic (runParser, Result)
 -- >>> :set -XOverloadedStrings
 
 -- | printing options, for separators.
@@ -237,7 +238,7 @@
   dotPrint _ MergeEdges = "strict"
   dotPrint _ NoMergeEdges = ""
 
-  dotParse = token $ optioned $(keyword "strict") (const $ pure MergeEdges) (pure NoMergeEdges)
+  dotParse = token $ withOption ($(keyword "strict")) (const $ pure MergeEdges) (pure NoMergeEdges)
 
 -- | Default Strict is NoMergeEdges
 defStrict :: Last Strict -> Strict
@@ -301,8 +302,8 @@
 
 instance DotParse ID where
   dotPrint _ (ID s) = s
-  dotPrint _ (IDInt i) = packUTF8 (show i)
-  dotPrint _ (IDDouble x) = packUTF8 (show x)
+  dotPrint _ (IDInt i) = strToUtf8 (show i)
+  dotPrint _ (IDDouble x) = strToUtf8 (show x)
   dotPrint _ (IDQuoted x) =
     wrapQuotePrint x
   dotPrint _ (IDHtml s) = s
@@ -312,8 +313,8 @@
     (ID <$> ident)
       <|> (IDInt <$> (signed int `notFollowedBy` $(char '.')))
       <|> (IDDouble <$> signed double)
-      <|> (IDQuoted . packUTF8 <$> quoted)
-      <|> (IDHtml . packUTF8 <$> htmlLike)
+      <|> (IDQuoted . strToUtf8 <$> quoted)
+      <|> (IDHtml . strToUtf8 <$> htmlLike)
 
 -- | ID as the equivalent plain String
 --
@@ -321,11 +322,11 @@
 --
 -- > x == y if label x == label y
 label :: ID -> String
-label (ID s) = unpackUTF8 s
+label (ID s) = utf8ToStr s
 label (IDInt i) = show i
 label (IDDouble d) = show d
-label (IDQuoted q) = unpackUTF8 q
-label (IDHtml h) = unpackUTF8 h
+label (IDQuoted q) = utf8ToStr q
+label (IDHtml h) = utf8ToStr h
 
 -- | Attribute key-value pair of identifiers
 --
@@ -440,9 +441,11 @@
 
 instance DotParse AttributeStatement where
   dotPrint cfg (AttributeStatement t as) =
-    intercalate
+    bool
+    (intercalate
       " "
-      [dotPrint cfg t, dotPrint cfg as]
+      [dotPrint cfg t, dotPrint cfg as])
+    mempty (mempty == as)
 
   dotParse = AttributeStatement <$> dotParse <*> dotParse
 
@@ -577,15 +580,14 @@
 -- | default dot graph as a ByteString
 defaultBS :: ByteString
 defaultBS =
-  encodeUtf8
-    [trimming|
+    [i|
 digraph {
     node [shape=circle
          ,height=0.5];
     graph [overlap=false
           ,splines=spline
           ,size="1!"];
-    edge [arrowsize=0];
+    edge [arrowsize=0.5];
   }
 |]
 
@@ -596,7 +598,7 @@
 -- digraph {
 --     node [height=0.5;shape=circle]
 --     graph [overlap=false;size="1!";splines=spline]
---     edge [arrowsize=0]
+--     edge [arrowsize=0.5]
 --     }
 defaultGraph :: Graph
 defaultGraph = runDotParser defaultBS
@@ -609,7 +611,7 @@
         UnDirected -> "neato"
   (r, input, e) <- readProcessWithExitCode cmd args i
   bool
-    (error $ unpackUTF8 e)
+    (error $ utf8ToStr e)
     (pure input)
     (r == ExitSuccess)
 
@@ -630,27 +632,27 @@
 instance DotParse (Point Double) where
   dotPrint _ (Point x y) =
     intercalate "," $
-      packUTF8 . show <$> [x, y]
+      strToUtf8 . show <$> [x, y]
 
   dotParse = token pointP
 
 pointI :: Iso' ID (Point Double)
 pointI =
   iso
-    (runParser_ pointP . packUTF8 . label)
+    (runParser_ pointP . strToUtf8 . label)
     (IDQuoted . dotPrint defaultDotConfig)
 
 instance DotParse (Rect Double) where
   dotPrint _ (Rect x z y w) =
     intercalate "," $
-      packUTF8 . show <$> [x, y, z, w]
+      strToUtf8 . show <$> [x, y, z, w]
 
   dotParse = token rectP
 
 rectI :: Iso' ID (Rect Double)
 rectI =
   iso
-    (runParser_ rectP . packUTF8 . label)
+    (runParser_ rectP . strToUtf8 . label)
     (IDQuoted . dotPrint defaultDotConfig)
 
 -- | Bounding box ID lens
@@ -666,7 +668,8 @@
 nodesPortL =
   lens
     ( \g ->
-        g & view #nodes
+        g
+          & view #nodes
           & fmap (\x -> (view #nodeID x, (view #port x, view #nodeAttrs x)))
           & Map.fromList
     )
@@ -677,7 +680,8 @@
 nodesL =
   lens
     ( \g ->
-        g & view #nodes
+        g
+          & view #nodes
           & fmap (\x -> (view #nodeID x, view #nodeAttrs x))
           & Map.fromList
     )
@@ -702,15 +706,15 @@
 setEdges_ g m =
   g
     & #edges
-    .~ ( ( \((x0, x1), as) ->
-             EdgeStatement
-               (fromDirected (defDirected $ view #directed g))
-               (EdgeID x0 Nothing)
-               (EdgeID x1 Nothing :| [])
-               as
+      .~ ( ( \((x0, x1), as) ->
+               EdgeStatement
+                 (fromDirected (defDirected $ view #directed g))
+                 (EdgeID x0 Nothing)
+                 (EdgeID x1 Nothing :| [])
+                 as
+           )
+             <$> Map.toList m
          )
-           <$> Map.toList m
-       )
 
 -- | A specific attribute for all nodes in a graph
 nodesA :: ID -> Graph -> Map.Map ID (Maybe ID)
@@ -834,19 +838,13 @@
 defaultChartConfig :: ChartConfig
 defaultChartConfig = ChartConfig 500 72 0.5 (over lightness' (* 0.5) (palette1 0)) (set opac' 0.2 (palette1 0)) 0.5 0.5 (-3.7) 14 (Text.pack . label)
 
--- | convert a 'Graph' processed via the graphviz commands to a 'ChartSvg'
---
--- >>> import Chart
--- >>> import DotParse.Examples (exInt)
--- >>> ex <- processGraph exInt
--- >>> writeChartSvg "other/ex.svg" (graphToChartWith defaultChartConfig ex)
+-- | convert a 'Graph' processed via the graphviz commands to a 'ChartOptions'
 --
--- ![Example](other/ex.svg)
-graphToChartWith :: ChartConfig -> Graph -> ChartSvg
+graphToChartWith :: ChartConfig -> Graph -> ChartOptions
 graphToChartWith cfg g =
   mempty
     & #charts .~ named "edges" ps <> named "shapes" c0 <> named "labels" [ts]
-    & #svgOptions % #svgHeight .~ (cfg ^. #chartHeight)
+    & #markupOptions % #markupHeight .~ (cfg ^. #chartHeight)
     & #hudOptions .~ (mempty & #chartAspect .~ ChartAspect)
   where
     glyphs w = case view (attL NodeType (ID "shape")) g of
@@ -854,7 +852,7 @@
       Just (ID "box") -> defaultGlyphStyle & #shape .~ RectSharpGlyph (h / w) & #size .~ 72 * w & #borderSize .~ 1 & #borderColor .~ (cfg ^. #chartColor) & #color .~ (cfg ^. #chartBackgroundColor)
       -- defaults to circle
       _ -> defaultGlyphStyle & #shape .~ CircleGlyph & #size .~ 72 * w & #borderSize .~ 1 & #borderColor .~ (cfg ^. #chartColor) & #color .~ (cfg ^. #chartBackgroundColor)
-    h = maybe (cfg ^. #nodeHeight) (runParser_ double . packUTF8 . label) (view (attL NodeType (ID "height")) g)
+    h = maybe (cfg ^. #nodeHeight) (runParser_ double . strToUtf8 . label) (view (attL NodeType (ID "height")) g)
     vshift' = cfg ^. #vshift
     -- node information
     ns = nodeInfo g (cfg ^. #nodeSize)
@@ -868,8 +866,8 @@
     ts =
       TextChart (defaultTextStyle & #size .~ (cfg ^. #textSize) & #color .~ (cfg ^. #chartColor)) ((\(NodeInfo l _ (Point x y)) -> ((cfg ^. #labelf) l, Point x (vshift' + y))) <$> ns)
 
--- | convert a 'Graph' processed via the graphviz commands to a 'ChartSvg' using the default ChartConfig.
-graphToChart :: Graph -> ChartSvg
+-- | convert a 'Graph' processed via the graphviz commands to a 'ChartOptions' using the default ChartConfig.
+graphToChart :: Graph -> ChartOptions
 graphToChart = graphToChartWith defaultChartConfig
 
 -- | Convert an algebraic graph to a dotparse graph.
