Add figure of stateful Multiply-Accumulate
authorChristiaan Baaij <baaijcpr@wlan228123.mobiel.utwente.nl>
Mon, 22 Feb 2010 16:07:47 +0000 (17:07 +0100)
committerChristiaan Baaij <baaijcpr@wlan228123.mobiel.utwente.nl>
Mon, 22 Feb 2010 16:07:47 +0000 (17:07 +0100)
cλash.lhs
mac-state.svg [new file with mode: 0644]

index 07a49f494c3d15b4043b4618effce1d65789eaaf..dd08c38a2fcc25c2a5a76ddea67f3e165ffd7ba1 100644 (file)
@@ -751,7 +751,7 @@ by an optimizing \VHDL\ synthesis tool.
     completely new type, for which we provide the \VHDL\ translation
     below. Type synonyms and renamings only define new names for
     existing types, where synonyms are completely interchangeable and
-    renamings need explicit conversion. Therefore, these do not need
+    renamings need explicit conversiona. Therefore, these do not need
     any particular \VHDL\ translation, a synonym or renamed type will
     just use the same representation as the original type. The
     distinction between a renaming and a synonym does no longer matter
@@ -990,12 +990,16 @@ by an optimizing \VHDL\ synthesis tool.
     
     A simple example is the description of an accumulator circuit:
     \begin{code}
-    acc :: Word -> State Word -> (State Word, Word)
-    acc inp (State s) = (State s', outp)
+    macS a b (State c) = (State c', outp)
       where
-        outp  = s + inp
-        s'    = outp
+        outp  = mac a b c
+        c'    = outp
     \end{code}
+    \begin{figure}
+    \centerline{\includegraphics{mac-state}}
+    \caption{Stateful Multiply-Accumulate}
+    \label{img:mac-state}
+    \end{figure}
     This approach makes the state of a function very explicit: which variables 
     are part of the state is completely determined by the type signature. This 
     approach to state is well suited to be used in combination with the 
diff --git a/mac-state.svg b/mac-state.svg
new file mode 100644 (file)
index 0000000..8f40046
--- /dev/null
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:ns0="http://www.iki.fi/pav/software/textext/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.25"
+   height="75.733994"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="mac-state.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4"
+     inkscape:cx="62.817105"
+     inkscape:cy="48.770411"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-grids="true"
+     inkscape:window-width="1091"
+     inkscape:window-height="838"
+     inkscape:window-x="30"
+     inkscape:window-y="154"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       snapvisiblegridlinesonly="true"
+       enabled="true"
+       visible="true"
+       empspacing="5"
+       id="grid2818"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path3732" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Send"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Send">
+      <path
+         transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path3738" />
+    </marker>
+    <inkscape:perspective
+       id="perspective10"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective3098" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective3128" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-379,-568.3352)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <rect
+       y="577.06915"
+       x="394"
+       height="66.500038"
+       width="105"
+       id="rect2925"
+       style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none" />
+    <rect
+       style="fill:#ffffff;stroke:#000000;stroke-width:0.54772252"
+       id="rect5226"
+       width="30"
+       height="29.999987"
+       x="454"
+       y="583.06915" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path2940"
+       d="m 379.5,587.34948 73,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path2942"
+       d="m 379.5,599.34948 73,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path2946"
+       d="m 484,598.06917 25,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
+    <g
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:none;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="content"
+       transform="matrix(1,0,0,-1,159.63335,1243.1404)"
+       xml:space="preserve"
+       stroke-miterlimit="10.433"
+       font-style="normal"
+       font-variant="normal"
+       font-weight="normal"
+       font-stretch="normal"
+       font-size-adjust="none"
+       letter-spacing="normal"
+       word-spacing="normal"
+       ns0:text="$\\mathit{a}$\n"
+       ns0:preamble="">
+<path
+   style="fill:#000000;stroke-width:0"
+   d="m 226.91,657.82 0.01,-0.04 0.01,-0.05 0.02,-0.04 0.01,-0.04 0.02,-0.04 0.02,-0.04 0.02,-0.03 0.02,-0.03 0.02,-0.04 0.02,-0.03 0.02,-0.03 0.03,-0.03 0.02,-0.02 0.03,-0.03 0.03,-0.02 0.02,-0.02 0.03,-0.02 0.03,-0.02 0.03,-0.02 0.03,-0.02 0.03,-0.01 0.03,-0.01 0.03,-0.02 0.04,-0.01 0.03,-0.01 0.03,0 0.03,-0.01 0.04,-0.01 0.03,0 0.03,0 0.03,-0.01 0.04,0 c 0.36,0 0.57,0.25 0.72,0.56 0.18,0.38 0.3,0.96 0.3,0.98 0,0.1 -0.08,0.1 -0.15,0.1 -0.12,0 -0.13,-0.01 -0.19,-0.23 -0.14,-0.56 -0.32,-1.19 -0.66,-1.19 -0.26,0 -0.26,0.27 -0.26,0.41 0,0.07 0,0.23 0.07,0.51 l 0.67,2.71 c 0.04,0.14 0.04,0.16 0.04,0.21 0,0.21 -0.16,0.26 -0.27,0.26 -0.31,0 -0.38,-0.34 -0.39,-0.39 -0.19,0.43 -0.51,0.59 -0.83,0.59 v -0.22 c 0.44,0 0.69,-0.52 0.69,-0.94 0,-0.02 -0.01,-0.07 -0.03,-0.13 h 0 l -0.47,-1.88 c -0.08,-0.32 -0.7,-1.13 -1.25,-1.13 -0.46,0 -0.54,0.59 -0.54,0.89 0,0.5 0.3,1.66 0.48,2.08 0.25,0.61 0.71,1.11 1.12,1.11 v 0.22 c -1.11,0 -2.28,-1.52 -2.28,-2.97 0,-0.85 0.46,-1.55 1.2,-1.55 0.36,0 0.8,0.21 1.2,0.7 z"
+   id="path3817" />
+</g>    <g
+       ns0:preamble=""
+       ns0:text="$\\mathit{b}$\n"
+       word-spacing="normal"
+       letter-spacing="normal"
+       font-size-adjust="none"
+       font-stretch="normal"
+       font-weight="normal"
+       font-variant="normal"
+       font-style="normal"
+       stroke-miterlimit="10.433"
+       xml:space="preserve"
+       transform="matrix(1,0,0,-1,159.97335,1254.9083)"
+       id="g3863"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:none;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0">
+<path
+   id="path3865"
+   d="m 226.45,663.9 0,0 0,0 0,0.01 0.01,0 0,0 0,0.01 0,0 0,0.01 0,0 0,0.01 0,0.01 0.01,0.01 0,0.01 0,0.01 0,0 0,0 0.01,0.01 0,0 0,0.01 0,0 0,0.01 0,0 0,0 0,0.01 0,0 0,0 0,0 0,0.01 c 0,0.09 -0.06,0.12 -0.14,0.12 -0.03,0 -0.13,-0.01 -0.16,-0.02 l -0.98,-0.08 c -0.12,-0.01 -0.23,-0.02 -0.23,-0.21 0,-0.11 0.1,-0.11 0.24,-0.11 0.47,0 0.49,-0.07 0.49,-0.17 0,-0.03 -0.03,-0.16 -0.03,-0.17 l -0.98,-3.94 c -0.01,-0.03 -0.11,-0.43 -0.11,-0.81 0,-0.84 0.42,-1.52 1.14,-1.52 v 0.22 c -0.24,0 -0.57,0.21 -0.57,0.96 0,0.44 0.09,0.79 0.37,1.92 0.07,0.24 0.07,0.26 0.22,0.46 0.29,0.4 0.67,0.74 1.05,0.74 0.45,0 0.55,-0.57 0.55,-0.89 0,-0.42 -0.27,-1.6 -0.56,-2.24 -0.12,-0.25 -0.55,-0.95 -1.06,-0.95 h 0 v -0.22 c 1.12,0 2.29,1.5 2.29,2.96 0,1.07 -0.6,1.56 -1.2,1.56 -0.38,0 -0.72,-0.21 -1.06,-0.53 z"
+   style="fill:#000000;stroke-width:0" />
+</g>    <g
+       id="g2880"
+       transform="translate(-24.5,85)">
+      <rect
+         transform="translate(379,556.3654)"
+         y="-37.796227"
+         x="55"
+         height="30"
+         width="20"
+         id="rect2876"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         transform="translate(379,556.3654)"
+         id="path2878"
+         d="m 55,-12.796227 5,-5 -5,-5"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="M 114.87354,41.78181 115,82.203773 l -95,0 0,-30 8.4,0"
+       id="path2884"
+       transform="translate(379,556.3654)"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+       d="m 429,608.56917 23,0"
+       id="path3856"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path3858"
+       sodipodi:cx="115"
+       sodipodi:cy="37.203773"
+       sodipodi:rx="1"
+       sodipodi:ry="1"
+       d="m 116,37.203773 c 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552284 0.44772,-1 1,-1 0.55228,0 1,0.447716 1,1 z"
+       transform="matrix(1.36125,0,0,1.36125,337.35625,547.42554)" />
+    <g
+       id="g3898"
+       transform="matrix(1,0,0,-1,209.88,1232.5152)"
+       xml:space="preserve"
+       stroke-miterlimit="10.433"
+       font-style="normal"
+       font-variant="normal"
+       font-weight="normal"
+       font-stretch="normal"
+       font-size-adjust="none"
+       letter-spacing="normal"
+       word-spacing="normal"
+       ns0:text="$\\mathbf{macS}$\n\n"
+       ns0:preamble=""
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:none;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0">
+<path
+   style="fill:#000000;stroke-width:0"
+   d="m 224.57,660.78 v -3.08 h -0.69 v -0.47 c 0.28,0.01 0.88,0.03 1.26,0.03 0.38,0 0.97,-0.02 1.25,-0.03 v 0.47 h -0.69 v 2.08 c 0,1.09 0.87,1.58 1.49,1.58 0.34,0 0.56,-0.2 0.56,-0.97 v -2.69 h -0.69 v -0.47 c 0.28,0.01 0.88,0.03 1.25,0.03 0.39,0 0.98,-0.02 1.26,-0.03 v 0.47 h -0.69 v 2.08 c 0,1.09 0.87,1.58 1.49,1.58 0.34,0 0.55,-0.2 0.55,-0.97 v -2.69 h -0.68 v -0.47 c 0.28,0.01 0.87,0.03 1.25,0.03 0.39,0 0.98,-0.02 1.26,-0.03 v 0.47 h -0.69 v 2.58 c 0,1.03 -0.51,1.44 -1.53,1.44 -0.91,0 -1.43,-0.5 -1.69,-0.96 -0.2,0.93 -1.11,0.96 -1.49,0.96 -0.87,0 -1.44,-0.45 -1.76,-1.08 v 1.08 l -1.71,-0.08 v -0.47 c 0.62,0 0.69,0 0.69,-0.39 z"
+   id="path3900" />
+<path
+   style="fill:#000000;stroke-width:0"
+   d="m 236.71,658 0,-0.06 0,-0.06 0,-0.03 0,-0.04 0.01,-0.03 0,-0.03 0.01,-0.03 0.01,-0.03 0.01,-0.04 0.01,-0.03 0.02,-0.03 0.01,-0.03 0.02,-0.03 0.03,-0.03 0.02,-0.03 0.03,-0.02 0.03,-0.03 0.02,-0.01 0.02,-0.02 0.02,-0.01 0.02,-0.01 0.02,-0.01 0.02,-0.01 0.03,-0.01 0.02,-0.01 0.03,-0.01 0.02,-0.01 0.03,-0.01 0.03,-0.01 0.03,-0.01 0.03,0 0.03,-0.01 0.04,-0.01 0.03,0 0.04,-0.01 0.04,0 0.04,-0.01 0.04,0 0.04,0 0.04,0 0.05,-0.01 0.04,0 0.05,0 h 0.48 c 0.2,0 0.32,0 0.32,0.24 0,0.23 -0.13,0.23 -0.26,0.23 -0.61,0.01 -0.61,0.14 -0.61,0.37 v 2.14 c 0,0.89 -0.71,1.54 -2.19,1.54 -0.57,0 -1.78,-0.04 -1.78,-0.92 0,-0.44 0.35,-0.63 0.62,-0.63 0.3,0 0.62,0.21 0.62,0.63 0,0.3 -0.19,0.47 -0.22,0.49 0.28,0.06 0.6,0.07 0.72,0.07 0.75,0 1.1,-0.42 1.1,-1.18 v -0.34 -0.31 -0.94 c 0,-0.96 -0.92,-1.09 -1.17,-1.09 -0.51,0 -0.91,0.35 -0.91,0.79 0,1.07 1.58,1.21 2.08,1.24 h 0 v 0.31 c -0.71,-0.03 -3.24,-0.12 -3.24,-1.56 0,-0.96 1.23,-1.14 1.92,-1.14 0.8,0 1.27,0.41 1.49,0.83 z"
+   id="path3902" />
+<path
+   style="fill:#000000;stroke-width:0"
+   d="m 242.13,661.29 -0.01,-0.02 -0.02,-0.01 -0.01,-0.02 -0.02,-0.01 -0.01,-0.02 -0.01,-0.02 -0.01,-0.01 -0.02,-0.02 -0.01,-0.02 0,-0.01 -0.01,-0.02 -0.01,-0.01 -0.01,-0.02 0,-0.02 -0.01,-0.01 -0.01,-0.02 0,-0.01 0,-0.02 -0.01,-0.01 0,-0.02 -0.01,-0.01 0,-0.02 0,-0.01 0,-0.01 0,-0.02 0,-0.01 -0.01,-0.01 0,-0.01 0,-0.01 0,-0.01 0,-0.01 0,-0.01 c 0,-0.44 0.35,-0.63 0.62,-0.63 0.31,0 0.63,0.21 0.63,0.63 0,0.86 -1.16,0.92 -1.74,0.92 -1.78,0 -2.52,-1.15 -2.52,-2.31 0,-1.32 0.94,-2.27 2.47,-2.27 1.62,0 1.92,1.16 1.92,1.23 0,0.14 -0.14,0.14 -0.24,0.14 -0.18,0 -0.19,-0.02 -0.24,-0.15 -0.26,-0.63 -0.74,-0.82 -1.25,-0.82 -1.38,0 -1.38,1.47 -1.38,1.92 0,0.56 0,1.86 1.28,1.86 0.35,0 0.52,-0.03 0.65,-0.06 z"
+   id="path3904" />
+<path
+   style="fill:#000000;stroke-width:0"
+   d="m 247.64,661.36 -1.44,0.31 c -0.4,0.09 -0.96,0.42 -0.96,1.03 0,0.43 0.28,1.05 1.28,1.05 0.79,0 1.8,-0.34 2.03,-1.7 0.04,-0.23 0.04,-0.26 0.25,-0.26 0.24,0 0.24,0.05 0.24,0.28 v 1.83 c 0,0.19 0,0.28 -0.18,0.28 -0.08,0 -0.09,-0.01 -0.2,-0.11 l -0.45,-0.44 c -0.58,0.46 -1.22,0.55 -1.7,0.55 -1.52,0 -2.24,-0.96 -2.24,-2.01 0,-0.64 0.33,-1.1 0.54,-1.32 0.49,-0.49 0.83,-0.56 1.92,-0.8 0.87,-0.19 1.04,-0.22 1.26,-0.43 0.15,-0.15 0.4,-0.4 0.4,-0.86 0,-0.48 -0.26,-1.17 -1.29,-1.17 -0.76,0 -2.28,0.2 -2.36,1.69 -0.01,0.17 -0.01,0.22 -0.23,0.22 -0.24,0 -0.24,-0.06 -0.24,-0.28 v -1.82 c 0,-0.19 0,-0.28 0.18,-0.28 0.09,0 0.11,0.02 0.19,0.09 l 0.46,0.46 c 0.66,-0.49 1.59,-0.55 2,-0.55 1.64,0 2.26,1.13 2.26,2.14 0,1.1 -0.81,1.91 -1.72,2.1 z"
+   id="path3906" />
+</g>    <g
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:none;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       ns0:preamble=""
+       ns0:text="$\\mathbf{mac}$\n\n"
+       word-spacing="normal"
+       letter-spacing="normal"
+       font-size-adjust="none"
+       font-stretch="normal"
+       font-weight="normal"
+       font-variant="normal"
+       font-style="normal"
+       stroke-miterlimit="10.433"
+       xml:space="preserve"
+       transform="matrix(1,0,0,-1,235.405,1257.5291)"
+       id="g3988">
+<path
+   id="path3990"
+   d="m 224.57,660.78 v -3.08 h -0.69 v -0.47 c 0.28,0.01 0.88,0.03 1.26,0.03 0.38,0 0.97,-0.02 1.25,-0.03 v 0.47 h -0.69 v 2.08 c 0,1.09 0.87,1.58 1.49,1.58 0.34,0 0.56,-0.2 0.56,-0.97 v -2.69 h -0.69 v -0.47 c 0.28,0.01 0.88,0.03 1.25,0.03 0.39,0 0.98,-0.02 1.26,-0.03 v 0.47 h -0.69 v 2.08 c 0,1.09 0.87,1.58 1.49,1.58 0.34,0 0.55,-0.2 0.55,-0.97 v -2.69 h -0.68 v -0.47 c 0.28,0.01 0.87,0.03 1.25,0.03 0.39,0 0.98,-0.02 1.26,-0.03 v 0.47 h -0.69 v 2.58 c 0,1.03 -0.51,1.44 -1.53,1.44 -0.91,0 -1.43,-0.5 -1.69,-0.96 -0.2,0.93 -1.11,0.96 -1.49,0.96 -0.87,0 -1.44,-0.45 -1.76,-1.08 v 1.08 l -1.71,-0.08 v -0.47 c 0.62,0 0.69,0 0.69,-0.39 z"
+   style="fill:#000000;stroke-width:0" />
+<path
+   id="path3992"
+   d="m 236.71,658 0,-0.06 0,-0.06 0,-0.03 0,-0.04 0.01,-0.03 0,-0.03 0.01,-0.03 0.01,-0.03 0.01,-0.04 0.01,-0.03 0.02,-0.03 0.01,-0.03 0.02,-0.03 0.03,-0.03 0.02,-0.03 0.03,-0.02 0.03,-0.03 0.02,-0.01 0.02,-0.02 0.02,-0.01 0.02,-0.01 0.02,-0.01 0.02,-0.01 0.03,-0.01 0.02,-0.01 0.03,-0.01 0.02,-0.01 0.03,-0.01 0.03,-0.01 0.03,-0.01 0.03,0 0.03,-0.01 0.04,-0.01 0.03,0 0.04,-0.01 0.04,0 0.04,-0.01 0.04,0 0.04,0 0.04,0 0.05,-0.01 0.04,0 0.05,0 h 0.48 c 0.2,0 0.32,0 0.32,0.24 0,0.23 -0.13,0.23 -0.26,0.23 -0.61,0.01 -0.61,0.14 -0.61,0.37 v 2.14 c 0,0.89 -0.71,1.54 -2.19,1.54 -0.57,0 -1.78,-0.04 -1.78,-0.92 0,-0.44 0.35,-0.63 0.62,-0.63 0.3,0 0.62,0.21 0.62,0.63 0,0.3 -0.19,0.47 -0.22,0.49 0.28,0.06 0.6,0.07 0.72,0.07 0.75,0 1.1,-0.42 1.1,-1.18 v -0.34 -0.31 -0.94 c 0,-0.96 -0.92,-1.09 -1.17,-1.09 -0.51,0 -0.91,0.35 -0.91,0.79 0,1.07 1.58,1.21 2.08,1.24 h 0 v 0.31 c -0.71,-0.03 -3.24,-0.12 -3.24,-1.56 0,-0.96 1.23,-1.14 1.92,-1.14 0.8,0 1.27,0.41 1.49,0.83 z"
+   style="fill:#000000;stroke-width:0" />
+<path
+   id="path3994"
+   d="m 242.13,661.29 -0.01,-0.02 -0.02,-0.01 -0.01,-0.02 -0.02,-0.01 -0.01,-0.02 -0.01,-0.02 -0.01,-0.01 -0.02,-0.02 -0.01,-0.02 0,-0.01 -0.01,-0.02 -0.01,-0.01 -0.01,-0.02 0,-0.02 -0.01,-0.01 -0.01,-0.02 0,-0.01 0,-0.02 -0.01,-0.01 0,-0.02 -0.01,-0.01 0,-0.02 0,-0.01 0,-0.01 0,-0.02 0,-0.01 -0.01,-0.01 0,-0.01 0,-0.01 0,-0.01 0,-0.01 0,-0.01 c 0,-0.44 0.35,-0.63 0.62,-0.63 0.31,0 0.63,0.21 0.63,0.63 0,0.86 -1.16,0.92 -1.74,0.92 -1.78,0 -2.52,-1.15 -2.52,-2.31 0,-1.32 0.94,-2.27 2.47,-2.27 1.62,0 1.92,1.16 1.92,1.23 0,0.14 -0.14,0.14 -0.24,0.14 -0.18,0 -0.19,-0.02 -0.24,-0.15 -0.26,-0.63 -0.74,-0.82 -1.25,-0.82 -1.38,0 -1.38,1.47 -1.38,1.92 0,0.56 0,1.86 1.28,1.86 0.35,0 0.52,-0.03 0.65,-0.06 z"
+   style="fill:#000000;stroke-width:0" />
+</g>  </g>
+</svg>