diff --git a/Doc/Sd1/Ref/LangFundament/genericBinaryOperator.svg b/Doc/Sd1/Ref/LangFundament/genericBinaryOperator.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7c7363360a2708ace71a5705fdc2debf2b7fd5df
--- /dev/null
+++ b/Doc/Sd1/Ref/LangFundament/genericBinaryOperator.svg
@@ -0,0 +1,1010 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:ns1="http://sozi.baierouge.fr"
+   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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="genericBinaryOperator.svg"
+   inkscape:version="0.92.1 r15371"
+   version="1.2"
+   id="svg2"
+   height="220"
+   width="823">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.7079545"
+     inkscape:cx="402.04681"
+     inkscape:cy="31.494139"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1600"
+     inkscape:window-height="1090"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     showguides="false"
+     inkscape:guide-bbox="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1569"
+       originx="-222.69675"
+       originy="-247.13715" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2318"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2316"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4887"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4627"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6797"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         id="path6799"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6793"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         id="path6795"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6778"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6514"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3841"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareM"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareM">
+      <path
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path3914"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path3844"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondM"
+       style="overflow:visible">
+      <path
+         id="path3923"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMH"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMH"
+       style="overflow:visible">
+      <path
+         id="path4656"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendB"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendB"
+       style="overflow:visible">
+      <path
+         id="path4659"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMU"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMU">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path5221"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend3"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend3"
+       style="overflow:visible">
+      <path
+         id="path5224"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMo"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMo"
+       style="overflow:visible">
+      <path
+         id="path5799"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendO"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendO"
+       style="overflow:visible">
+      <path
+         id="path5802"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM1"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondM1"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendV"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendV"
+       style="overflow:visible">
+      <path
+         id="path6396"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMN"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMN">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path7813"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LstartP"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LstartP"
+       style="overflow:visible">
+      <path
+         id="path7816"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMb"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMb">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path9491"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendX"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendX"
+       style="overflow:visible">
+      <path
+         id="path9494"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareM8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareM8">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path10143"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendT"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendT"
+       style="overflow:visible">
+      <path
+         id="path10146"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMNT"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMNT">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path12195"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LstartPJ"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LstartPJ"
+       style="overflow:visible">
+      <path
+         id="path12198"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMNTL"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMNTL">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path12907"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lendx"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lendx"
+       style="overflow:visible">
+      <path
+         id="path12910"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMoY"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMoY"
+       style="overflow:visible">
+      <path
+         id="path13187"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendOe"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendOe"
+       style="overflow:visible">
+      <path
+         id="path13190"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <linearGradient
+       id="linearGradient3928-8">
+      <stop
+         offset="0"
+         style="stop-color:#7c7c7c"
+         id="stop3930-2" />
+      <stop
+         offset="1"
+         style="stop-color:#e6e3e3"
+         id="stop3932-0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8877">
+      <stop
+         style="stop-color:#cecece;stop-opacity:1;"
+         offset="0"
+         id="stop8879" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop8881" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8869">
+      <stop
+         id="stop8871"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop8873"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7421">
+      <stop
+         id="stop7423"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop7425"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7405">
+      <stop
+         style="stop-color:#9e9e9e;stop-opacity:1;"
+         offset="0"
+         id="stop7407" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop7409" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7378">
+      <stop
+         id="stop7380"
+         offset="0"
+         style="stop-color:#9e9e9e;stop-opacity:1;" />
+      <stop
+         id="stop7382"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective6864"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       id="imagebot_16"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-6"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-1"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-8"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-7"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-9"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-2"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-2"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-8"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-9"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-73"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-6"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-1"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="imagebot_16-0">
+      <feGaussianBlur
+         id="imagebot_21-7"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-5"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="imagebot_12-0"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215">
+      <feGaussianBlur
+         id="imagebot_18-4"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-8"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-02"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-9"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-4"
+       y2="0.73097426"
+       xlink:href="#linearGradient3928-8"
+       x2="36.048218"
+       y1="43.90382"
+       x1="35.173683"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-3"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-5"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-17"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616-2"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618-62"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616-9"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-222.69675,-655.38257)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"
+       x="104.51711"
+       y="415.68225"
+       id="text3004"><tspan
+         sodipodi:role="line"
+         id="tspan3006"
+         x="104.51711"
+         y="415.68225"
+         style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672"> </tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 575,677.51972 v 180 l 130,-90 -130,-90"
+       id="path254"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.33333397px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="579.64905"
+       y="740.7041"
+       id="text2900-3"><tspan
+         sodipodi:role="line"
+         x="579.64905"
+         y="740.7041"
+         id="tspan250-5"><tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan4601">+</tspan>,<tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan4605">-</tspan>,</tspan><tspan
+         sodipodi:role="line"
+         x="579.64905"
+         y="777.37079"
+         id="tspan2569"><tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan4609">*</tspan>,<tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan4613">/</tspan>,<tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan4617">%</tspan>,</tspan><tspan
+         sodipodi:role="line"
+         x="579.64905"
+         y="814.03741"
+         id="tspan2585"
+         style="fill:#ff0000;stroke:#ff0000">...</tspan><tspan
+         sodipodi:role="line"
+         x="579.64905"
+         y="850.7041"
+         id="tspan248-3" /><tspan
+         sodipodi:role="line"
+         x="579.64905"
+         y="887.37079"
+         id="tspan2906-5" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11618)"
+       d="m 500,724.49963 h 65"
+       id="path1276"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11618-6)"
+       d="m 500,821.45136 65,-10e-6"
+       id="path1276-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:#000000"
+       x="310.12823"
+       y="730.12268"
+       id="text2900-3-1"><tspan
+         sodipodi:role="line"
+         x="310.12823"
+         y="730.12268"
+         id="tspan250-5-2">Left input type</tspan><tspan
+         sodipodi:role="line"
+         x="310.12823"
+         y="753.45599"
+         id="tspan248-3-7" /><tspan
+         sodipodi:role="line"
+         x="310.12823"
+         y="776.78937"
+         id="tspan2906-5-0" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:#000000"
+       x="310.43506"
+       y="827.0744"
+       id="text2900-3-1-0"><tspan
+         sodipodi:role="line"
+         x="310.43506"
+         y="827.0744"
+         id="tspan250-5-2-2">Right input type</tspan><tspan
+         sodipodi:role="line"
+         x="310.43506"
+         y="850.40771"
+         id="tspan248-3-7-3" /><tspan
+         sodipodi:role="line"
+         x="310.43506"
+         y="873.74109"
+         id="tspan2906-5-0-7" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.66666603px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:#000000"
+       x="799.75916"
+       y="773.66669"
+       id="text2900-3-1-5"><tspan
+         sodipodi:role="line"
+         x="799.75916"
+         y="773.66669"
+         id="tspan250-5-2-9">Output type</tspan><tspan
+         sodipodi:role="line"
+         x="799.75916"
+         y="797"
+         id="tspan248-3-7-2" /><tspan
+         sodipodi:role="line"
+         x="799.75916"
+         y="820.33337"
+         id="tspan2906-5-0-2" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="430"
+       y="792.51971"
+       id="text2575"><tspan
+         sodipodi:role="line"
+         id="tspan2573"
+         x="430"
+         y="806.38489"></tspan><tspan
+         sodipodi:role="line"
+         x="430"
+         y="826.38489"
+         id="tspan2577" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="430"
+       y="782.51971"
+       id="text2581"><tspan
+         sodipodi:role="line"
+         id="tspan2579"
+         x="430"
+         y="796.38489"></tspan><tspan
+         sodipodi:role="line"
+         x="430"
+         y="816.38489"
+         id="tspan2583" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11618-8)"
+       d="m 715,768.76233 h 65"
+       id="path1276-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="320"
+       y="837.51971"
+       id="text3789"><tspan
+         sodipodi:role="line"
+         id="tspan3787"
+         x="320"
+         y="851.38489" /></text>
+  </g>
+  <script
+     ns1:version="14.10-05142318"
+     id="sozi-script">function namespace(b,d,a){var c=b;d.split(&quot;.&quot;).forEach(function(e){if(typeof c[e]===&quot;undefined&quot;){c[e]={}}c=c[e]});if(a){a(c,b)}return c}namespace(this,&quot;sozi.events&quot;,function(b){var a={};b.listen=function(c,d){if(!a.hasOwnProperty(c)){a[c]=[]}a[c].push(d)};b.fire=function(d){var c=Array.prototype.slice.call(arguments,1);if(a.hasOwnProperty(d)){a[d].forEach(function(e){e.apply(null,c)})}}});namespace(this,&quot;sozi.proto&quot;,function(a){a.Object={installConstructors:function(){function b(){}b.prototype=this;this.instance=function(){var c=new b();c.construct.apply(c,arguments);return c};this.subtype=function(d){var c=new b();c.augment(d);c.installConstructors();return c}},construct:function(){},augment:function(c){for(var b in c){if(c.hasOwnProperty(b)){this[b]=c[b]}}return this},bind:function(c){var b=this;return function(){return c.apply(b,arguments)}}};a.Object.installConstructors()});namespace(this,&quot;sozi.actions&quot;,function(A,g){var u=namespace(g,&quot;sozi.player&quot;);var v=namespace(g,&quot;sozi.display&quot;);var n=g.document;var o=0;var w=1;var t=1.05;var y=5;var m=5;var r=false;var i=0;var h=0;function a(C,B,D){u.stop();v.viewPorts.player.zoom(C&gt;0?t:1/t,B,D)}function x(B){u.stop();v.viewPorts.player.rotate(B&gt;0?y:-y)}function s(){if(sozi.framelist.isVisible()){sozi.framelist.hide();u.restart()}else{u.stop();sozi.framelist.show()}}function d(B){return v.viewPorts.player.contains(B.clientX,B.clientY)}function f(B){if(!d(B)){return}if(B.button===o){n.documentElement.addEventListener(&quot;mousemove&quot;,q,false);r=false;i=B.clientX;h=B.clientY}else{if(B.button===w){s()}}B.stopPropagation();B.preventDefault()}function q(B){if(!d(B)){return}u.stop();if(!r&amp;&amp;(Math.abs(B.clientX-i)&gt;m||Math.abs(B.clientY-h)&gt;m)){r=true}if(r){sozi.events.fire(&quot;sozi.player.cleanup&quot;);v.viewPorts.player.drag(B.clientX-i,B.clientY-h);i=B.clientX;h=B.clientY}B.stopPropagation()}function c(B){if(!d(B)){return}if(B.button===o){n.documentElement.removeEventListener(&quot;mousemove&quot;,q,false)}B.stopPropagation();B.preventDefault()}function p(B){if(!d(B)){return}u.moveToPrevious();B.stopPropagation();B.preventDefault()}function e(B){if(!d(B)){return}if(!r&amp;&amp;B.button!==w){u.moveToNext()}B.stopPropagation();B.preventDefault()}function j(B){if(!d(B)){return}if(!B){B=g.event}var C=0;if(B.wheelDelta){C=B.wheelDelta}else{if(B.detail){C=-B.detail}}if(C!==0){if(B.shiftKey){x(C)}else{a(C,B.clientX,B.clientY)}}B.stopPropagation();B.preventDefault()}function l(B){if(B.altKey||B.ctrlKey||B.metaKey){return}switch(B.charCode||B.which){case 43:a(1,g.innerWidth/2,g.innerHeight/2);break;case 45:a(-1,g.innerWidth/2,g.innerHeight/2);break;case 61:u.moveToCurrent();break;case 70:case 102:u.showAll();break;case 84:case 116:s();break;case 82:x(-1);break;case 114:x(1);break;default:return}B.stopPropagation();B.preventDefault()}function b(B){if(B.altKey||B.ctrlKey||B.metaKey){return}switch(B.keyCode){case 36:if(B.shiftKey){u.jumpToFirst()}else{u.moveToFirst()}break;case 35:if(B.shiftKey){u.jumpToLast()}else{u.moveToLast()}break;case 38:case 33:case 37:if(B.shiftKey){u.jumpToPrevious()}else{u.moveToPrevious()}break;case 40:case 34:case 39:case 13:case 32:if(B.shiftKey){u.jumpToNext()}else{u.moveToNext()}break;default:return}B.stopPropagation();B.preventDefault()}function z(B){B.stopPropagation()}function k(){var C=n.getElementsByTagName(&quot;a&quot;);for(var D=0;D&lt;C.length;D+=1){C[D].addEventListener(&quot;click&quot;,z,false);C[D].addEventListener(&quot;contextmenu&quot;,z,false)}var B=n.documentElement;B.addEventListener(&quot;click&quot;,e,false);B.addEventListener(&quot;mousedown&quot;,f,false);B.addEventListener(&quot;mouseup&quot;,c,false);B.addEventListener(&quot;contextmenu&quot;,p,false);B.addEventListener(&quot;DOMMouseScroll&quot;,j,false);g.onmousewheel=j;B.addEventListener(&quot;keypress&quot;,l,false);B.addEventListener(&quot;keydown&quot;,b,false)}sozi.events.listen(&quot;sozi.display.ready&quot;,k)});namespace(this,&quot;sozi.animation&quot;,function(d,g){var h=g.mozRequestAnimationFrame||g.webkitRequestAnimationFrame||g.msRequestAnimationFrame||g.oRequestAnimationFrame;var k=function(){return g.performance&amp;&amp;g.performance.now?g.performance.now():Date.now()};d.setAnimationFrameHandlers=function(l,m){h=l;k=m};var i=40;var c;var j=[];function e(){if(j.length&gt;0){if(h){h(e)}j.forEach(function(l){l.step(k())})}else{if(!h){g.clearInterval(c)}}}function b(){if(h){h(e)}else{c=g.setInterval(function(){e(k())},i)}}function a(l){j.push(l);if(j.length===1){b()}}function f(l){j.splice(j.indexOf(l),1)}d.Animator=sozi.proto.Object.subtype({construct:function(){this.durationMs=0;this.data=null;this.initialTime=0;this.started=false},start:function(l,m){this.durationMs=l;this.data=m;this.initialTime=k();this.onStep(0);if(!this.started){this.started=true;a(this)}},stop:function(){if(this.started){f(this);this.started=false}},step:function(m){var l=m-this.initialTime;if(l&gt;=this.durationMs){this.stop();this.onStep(1);this.onDone()}else{this.onStep(l/this.durationMs)}},onStep:function(l){},onDone:function(){}});d.profiles={linear:function(l){return l},accelerate:function(l){return Math.pow(l,3)},&quot;strong-accelerate&quot;:function(l){return Math.pow(l,5)},decelerate:function(l){return 1-Math.pow(1-l,3)},&quot;strong-decelerate&quot;:function(l){return 1-Math.pow(1-l,5)},&quot;accelerate-decelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=Math.pow(2*m,3)/2;return l&lt;=0.5?n:1-n},&quot;strong-accelerate-decelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=Math.pow(2*m,5)/2;return l&lt;=0.5?n:1-n},&quot;decelerate-accelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=(1-Math.pow(1-2*m,2))/2;return l&lt;=0.5?n:1-n},&quot;strong-decelerate-accelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=(1-Math.pow(1-2*m,3))/2;return l&lt;=0.5?n:1-n},&quot;immediate-beginning&quot;:function(l){return 1},&quot;immediate-end&quot;:function(l){return l===1?1:0},&quot;immediate-middle&quot;:function(l){return l&gt;=0.5?1:0}}});namespace(this,&quot;sozi.display&quot;,function(c,g){var f=&quot;http://www.w3.org/2000/svg&quot;;var b=&quot;http://www.w3.org/1999/xlink&quot;;var i=g.document;var k;var h;var j;c.viewPorts={};var e;c.CameraState=sozi.proto.Object.subtype({construct:function(){this.cx=this.cy=0;this.width=this.height=1;this.angle=0;this.clipped=true;this.transitionZoomPercent=0;this.transitionProfile=sozi.animation.profiles.linear;this.transitionPath=null},setCenter:function(l,m){this.cx=l;this.cy=m;return this},setSize:function(m,l){this.width=m;this.height=l;return this},setClipped:function(l){this.clipped=l;return this},setAngle:function(l){this.angle=(l+180)%360-180;return this},setRawAngle:function(l){this.angle=l;return this},setTransitionZoomPercent:function(l){this.transitionZoomPercent=l;return this},setTransitionProfile:function(l){this.transitionProfile=l;return this},setTransitionPath:function(l){this.transitionPath=l;return this},setAtElement:function(p){var s,o,t,m;if(p.nodeName===&quot;rect&quot;){s=p.x.baseVal.value;o=p.y.baseVal.value;t=p.width.baseVal.value;m=p.height.baseVal.value}else{var q=p.getBBox();s=q.x;o=q.y;t=q.width;m=q.height}var n=i.documentElement.createSVGPoint();n.x=s+t/2;n.y=o+m/2;var r=p.getCTM();n=n.matrixTransform(r);var l=Math.sqrt(r.a*r.a+r.b*r.b);return this.setCenter(n.x,n.y).setSize(t*l,m*l).setAngle(Math.atan2(r.b,r.a)*180/Math.PI)},setAtState:function(l){return this.setCenter(l.cx,l.cy).setSize(l.width,l.height).setAngle(l.angle).setClipped(l.clipped).setTransitionZoomPercent(l.transitionZoomPercent).setTransitionProfile(l.transitionProfile).setTransitionPath(l.transitionPath)},interpolatableAttributes:[&quot;width&quot;,&quot;height&quot;,&quot;angle&quot;],interpolate:function(n,o,t,v,r){var p=1-t;for(var q=0;q&lt;this.interpolatableAttributes.length;q+=1){var s=this.interpolatableAttributes[q];this[s]=o[s]*t+n[s]*p}var l=r?n.transitionPath:o.transitionPath;if(v&amp;&amp;l){var x=l.getTotalLength();if(r){var m=l.getPointAtLength(x);var u=l.getPointAtLength(0);var w=l.getPointAtLength(x*p)}else{var m=l.getPointAtLength(0);var u=l.getPointAtLength(x);var w=l.getPointAtLength(x*t)}this.cx=w.x+(o.cx-u.x)*t+(n.cx-m.x)*p;this.cy=w.y+(o.cy-u.y)*t+(n.cy-m.y)*p}else{this.cx=o.cx*t+n.cx*p;this.cy=o.cy*t+n.cy*p}}});c.Camera=c.CameraState.subtype({construct:function(n,o){c.CameraState.construct.call(this);this.viewPort=n;this.svgClipRect=i.createElementNS(f,&quot;rect&quot;);var m=i.createElementNS(f,&quot;clipPath&quot;);m.setAttribute(&quot;id&quot;,&quot;sozi-clip-path-&quot;+n.id+&quot;-&quot;+o);m.appendChild(this.svgClipRect);n.svgGroup.appendChild(m);var l=i.createElementNS(f,&quot;g&quot;);l.setAttribute(&quot;clip-path&quot;,&quot;url(#sozi-clip-path-&quot;+n.id+&quot;-&quot;+o+&quot;)&quot;);n.svgGroup.appendChild(l);if(n.isPrimary){this.svgLayer=i.createElementNS(f,&quot;g&quot;);this.svgLayer.appendChild(i.getElementById(o))}else{this.svgLayer=i.createElementNS(f,&quot;use&quot;);this.svgLayer.setAttributeNS(b,&quot;href&quot;,&quot;#&quot;+o)}l.appendChild(this.svgLayer)},setAtState:function(l){return c.CameraState.setAtState.call(this,l).update()},getScale:function(){return Math.min(this.viewPort.width/this.width,this.viewPort.height/this.height)},rotate:function(l){return this.setAngle(this.angle+l).update()},zoom:function(m,l,n){return this.setSize(this.width/m,this.height/m).drag((1-m)*(l-this.viewPort.width/2),(1-m)*(n-this.viewPort.height/2))},drag:function(m,l){var q=this.getScale();var o=this.angle*Math.PI/180;var n=Math.sin(o);var p=Math.cos(o);return this.setCenter(this.cx-(m*p-l*n)/q,this.cy-(m*n+l*p)/q).setClipped(false).update()},update:function(){var q=this.getScale();var n=this.width*q;var m=this.height*q;var l=(this.viewPort.width-n)/2;var r=(this.viewPort.height-m)/2;this.svgClipRect.setAttribute(&quot;x&quot;,this.clipped?l:0);this.svgClipRect.setAttribute(&quot;y&quot;,this.clipped?r:0);this.svgClipRect.setAttribute(&quot;width&quot;,this.clipped?n:this.viewPort.width);this.svgClipRect.setAttribute(&quot;height&quot;,this.clipped?m:this.viewPort.height);var p=-this.cx+this.width/2+l/q;var o=-this.cy+this.height/2+r/q;this.svgLayer.setAttribute(&quot;transform&quot;,&quot;scale(&quot;+q+&quot;)translate(&quot;+p+&quot;,&quot;+o+&quot;)rotate(&quot;+(-this.angle)+&quot;,&quot;+this.cx+&quot;,&quot;+this.cy+&quot;)&quot;);return this}});c.ViewPort=sozi.proto.Object.subtype({construct:function(n,m,l){this.id=n;c.viewPorts[n]=this;this.isPrimary=!!l;if(this.isPrimary){if(e){throw&quot;Failed to create a primary viewport. A primary viewport already exists.&quot;}else{e=this}}this.svgGroup=i.createElementNS(f,&quot;g&quot;);this.svgGroup.setAttribute(&quot;class&quot;,&quot;sozi-viewport&quot;);this.svgGroup.setAttribute(&quot;id&quot;,&quot;sozi-viewport-&quot;+n);i.documentElement.appendChild(this.svgGroup);this.setLocation(0,0).setSize(g.innerWidth,g.innerHeight);this.cameras={};m.forEach(function(o){this.cameras[o]=c.Camera.instance(this,o)},this)},setSize:function(m,l){this.width=m;this.height=l;return this},setLocation:function(l,m){this.x=l;this.y=m;return this},contains:function(l,m){return l&gt;=this.x&amp;&amp;l&lt;this.x+this.width&amp;&amp;m&gt;=this.y&amp;&amp;m&lt;this.y+this.height},getDocumentState:function(){var m=c.CameraState.instance().setCenter(k.x+k.width/2,k.y+k.height/2).setSize(k.width,k.height).setClipped(false);var l={};for(var n in this.cameras){l[n]=m}return l},update:function(){this.svgGroup.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+this.x+&quot;,&quot;+this.y+&quot;)&quot;);for(var l in this.cameras){this.cameras[l].update()}return this},showFrame:function(l){for(var m in l.states){this.cameras[m].setAtState(l.states[m])}return this},drag:function(m,l){for(var n in this.cameras){this.cameras[n].drag(m,l)}return this},zoom:function(m,l,o){for(var n in this.cameras){this.cameras[n].zoom(m,l,o)}return this},rotate:function(l){for(var m in this.cameras){this.cameras[m].rotate(l)}return this},onWindowResize:function(m,l){this.setLocation(this.x*m,this.y*l).setSize(this.width*m,this.height*l).update()}});function d(){var l=i.documentElement;k=l.getBBox();h=g.innerWidth;j=g.innerHeight;l.setAttribute(&quot;width&quot;,h);l.setAttribute(&quot;height&quot;,j);sozi.events.fire(&quot;sozi.display.ready&quot;)}function a(){var l=i.documentElement;l.setAttribute(&quot;width&quot;,g.innerWidth);l.setAttribute(&quot;height&quot;,g.innerHeight);for(var m in c.viewPorts){c.viewPorts[m].onWindowResize(g.innerWidth/h,g.innerHeight/j)}h=g.innerWidth;j=g.innerHeight}sozi.events.listen(&quot;sozi.document.ready&quot;,d);g.addEventListener(&quot;resize&quot;,a,false)});namespace(this,&quot;sozi.document&quot;,function(c,e){var g=e.document;var b=&quot;http://sozi.baierouge.fr&quot;;var d={title:&quot;Untitled&quot;,sequence:&quot;0&quot;,hide:&quot;true&quot;,clip:&quot;true&quot;,&quot;show-in-frame-list&quot;:&quot;true&quot;,&quot;timeout-enable&quot;:&quot;false&quot;,&quot;timeout-ms&quot;:&quot;5000&quot;,&quot;transition-duration-ms&quot;:&quot;1000&quot;,&quot;transition-zoom-percent&quot;:&quot;0&quot;,&quot;transition-profile&quot;:&quot;linear&quot;,&quot;transition-path-hide&quot;:&quot;true&quot;};var h=[&quot;g&quot;,&quot;image&quot;,&quot;path&quot;,&quot;rect&quot;,&quot;circle&quot;,&quot;ellipse&quot;,&quot;line&quot;,&quot;polyline&quot;,&quot;polygon&quot;,&quot;text&quot;,&quot;clippath&quot;];c.frames=[];c.idLayerList=[];function j(l,k){return l.getAttributeNS(b,k)||d[k]}function i(o,p,k){var l=o.states[p]=o.states[p]||sozi.display.CameraState.instance();if(typeof l.transitionZoomPercent===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-zoom-percent&quot;)){l.setTransitionZoomPercent(parseInt(j(k,&quot;transition-zoom-percent&quot;),10))}if(typeof l.transitionProfile===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-profile&quot;)){l.setTransitionProfile(sozi.animation.profiles[j(k,&quot;transition-profile&quot;)])}if(typeof l.transitionPath===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-path&quot;)){var n=g.getElementById(k.getAttributeNS(b,&quot;transition-path&quot;));if(n&amp;&amp;n.nodeName===&quot;path&quot;){l.setTransitionPath(n);if(j(k,&quot;transition-path-hide&quot;)===&quot;true&quot;){n.style.visibility=&quot;hidden&quot;}}}if(k.hasAttributeNS(b,&quot;refid&quot;)){var m=g.getElementById(k.getAttributeNS(b,&quot;refid&quot;));if(m){l.setAtElement(m);if(j(k,&quot;hide&quot;)===&quot;true&quot;){m.style.visibility=&quot;hidden&quot;}}}if(k.hasAttributeNS(b,&quot;clip&quot;)){l.setClipped(j(k,&quot;clip&quot;)===&quot;true&quot;)}}function a(){var l=[];var p=g.getElementsByTagNameNS(b,&quot;layer&quot;);for(var n=0;n&lt;p.length;n+=1){var s=p[n].getAttributeNS(b,&quot;group&quot;);if(s&amp;&amp;l.indexOf(s)===-1){l.push(s)}}var r=g.documentElement;var o=&quot;http://www.w3.org/2000/svg&quot;;var q=g.createElementNS(o,&quot;g&quot;);var k=Array.prototype.slice.call(r.childNodes);k.forEach(function(u,t){if(!u.getAttribute){r.removeChild(u)}else{if(l.indexOf(u.getAttribute(&quot;id&quot;))!==-1){if(q.firstChild){q.setAttribute(&quot;id&quot;,&quot;sozi-wrapper-&quot;+t);c.idLayerList.push(&quot;sozi-wrapper-&quot;+t);r.insertBefore(q,u);q=g.createElementNS(o,&quot;g&quot;)}c.idLayerList.push(u.getAttribute(&quot;id&quot;))}else{if(h.indexOf(u.localName.toLowerCase())!==-1){r.removeChild(u);q.appendChild(u)}}}});if(q.firstChild){q.setAttribute(&quot;id&quot;,&quot;sozi-wrapper-&quot;+k.length);c.idLayerList.push(&quot;sozi-wrapper-&quot;+k.length);r.appendChild(q)}var m=Array.prototype.slice.call(g.getElementsByTagNameNS(b,&quot;frame&quot;));m.sort(function(u,t){var w=parseInt(j(u,&quot;sequence&quot;),10);var v=parseInt(j(t,&quot;sequence&quot;),10);return w-v});m.forEach(function(v,u){var x={id:v.getAttribute(&quot;id&quot;),title:j(v,&quot;title&quot;),showInFrameList:j(v,&quot;show-in-frame-list&quot;)===&quot;true&quot;,sequence:parseInt(j(v,&quot;sequence&quot;),10),timeoutEnable:j(v,&quot;timeout-enable&quot;)===&quot;true&quot;,timeoutMs:parseInt(j(v,&quot;timeout-ms&quot;),10),transitionDurationMs:parseInt(j(v,&quot;transition-duration-ms&quot;),10),states:{}};c.idLayerList.forEach(function(A){if(u===0||A.search(&quot;sozi-wrapper-[0-9]+&quot;)!==-1){i(x,A,v)}else{var z=x.states[A]=sozi.display.CameraState.instance();var y=c.frames[c.frames.length-1].states[A];z.setAtState(y)}});var t=Array.prototype.slice.call(v.getElementsByTagNameNS(b,&quot;layer&quot;));t.forEach(function(y){var z=y.getAttributeNS(b,&quot;group&quot;);if(z&amp;&amp;c.idLayerList.indexOf(z)!==-1){i(x,z,y)}});for(var w in x.states){if(x.states.hasOwnProperty(w)){c.frames.push(x);break}}})}c.getFrameIndexForId=function(l){for(var k=0;k&lt;c.frames.length;k+=1){if(c.frames[k].id===l){return k}}return -1};function f(){g.documentElement.removeAttribute(&quot;viewBox&quot;);a();sozi.events.fire(&quot;sozi.document.ready&quot;)}e.addEventListener(&quot;load&quot;,f,false)});namespace(this,&quot;sozi.framelist&quot;,function(u,k){var o=k.document;var c=5;var i;var p;var j=0;var h;var s;var b;var v;var w;var t;var e=300;var f=&quot;decelerate&quot;;var a=&quot;http://www.w3.org/2000/svg&quot;;function n(z){var x=z.relatedTarget,y=o.documentElement;while(x&amp;&amp;x!==i&amp;&amp;x!==y){x=x.parentNode}if(x!==i){u.hide();sozi.player.restart();z.stopPropagation()}}function r(y){var x=p.getCTM().f;if(x&lt;=-k.innerHeight/2){x+=k.innerHeight/2}else{if(x&lt;0){x=0}}p.setAttribute(&quot;transform&quot;,&quot;translate(0,&quot;+x+&quot;)&quot;);y.stopPropagation()}function d(y){var x=p.getCTM().f;if(x+j&gt;=k.innerHeight*3/2){x-=k.innerHeight/2}else{if(x+j&gt;k.innerHeight+2*c){x=k.innerHeight-j-4*c}}p.setAttribute(&quot;transform&quot;,&quot;translate(0,&quot;+x+&quot;)&quot;);y.stopPropagation()}function g(x){return function(y){sozi.player.previewFrame(x);y.stopPropagation()}}function l(x){x.stopPropagation()}function q(){i=o.createElementNS(a,&quot;g&quot;);i.setAttribute(&quot;id&quot;,&quot;sozi-toc&quot;);o.documentElement.appendChild(i);p=o.createElementNS(a,&quot;g&quot;);i.appendChild(p);var y=o.createElementNS(a,&quot;rect&quot;);y.setAttribute(&quot;id&quot;,&quot;sozi-toc-background&quot;);y.setAttribute(&quot;x&quot;,c);y.setAttribute(&quot;y&quot;,c);y.setAttribute(&quot;rx&quot;,c);y.setAttribute(&quot;ry&quot;,c);y.addEventListener(&quot;click&quot;,l,false);y.addEventListener(&quot;mousedown&quot;,l,false);y.addEventListener(&quot;mouseout&quot;,n,false);p.appendChild(y);var A=0;sozi.document.frames.forEach(function(D,E){if(D.showInFrameList){var C=o.createElementNS(a,&quot;text&quot;);C.appendChild(o.createTextNode(D.title));C.setAttribute(&quot;id&quot;,&quot;sozi-toc-&quot;+D.id);p.appendChild(C);if(E===sozi.player.currentFrameIndex){C.setAttribute(&quot;class&quot;,&quot;sozi-toc-current&quot;)}var B=C.getBBox().width;j+=C.getBBox().height;if(B&gt;A){A=B}C.setAttribute(&quot;x&quot;,2*c);C.setAttribute(&quot;y&quot;,j+c);C.addEventListener(&quot;click&quot;,g(E),false);C.addEventListener(&quot;mousedown&quot;,l,false)}});var x=o.createElementNS(a,&quot;path&quot;);x.setAttribute(&quot;class&quot;,&quot;sozi-toc-arrow&quot;);x.setAttribute(&quot;d&quot;,&quot;M&quot;+(A+3*c)+&quot;,&quot;+(5*c)+&quot; l&quot;+(4*c)+&quot;,0 l-&quot;+(2*c)+&quot;,-&quot;+(3*c)+&quot; z&quot;);x.addEventListener(&quot;click&quot;,r,false);x.addEventListener(&quot;mousedown&quot;,l,false);i.appendChild(x);var z=o.createElementNS(a,&quot;path&quot;);z.setAttribute(&quot;class&quot;,&quot;sozi-toc-arrow&quot;);z.setAttribute(&quot;d&quot;,&quot;M&quot;+(A+3*c)+&quot;,&quot;+(7*c)+&quot; l&quot;+(4*c)+&quot;,0 l-&quot;+(2*c)+&quot;,&quot;+(3*c)+&quot; z&quot;);z.addEventListener(&quot;click&quot;,d,false);z.addEventListener(&quot;mousedown&quot;,l,false);i.appendChild(z);y.setAttribute(&quot;width&quot;,A+7*c);y.setAttribute(&quot;height&quot;,j+2*c);h=-A-9*c;s=0;w=v=h;i.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+h+&quot;,0)&quot;);t=sozi.animation.Animator.instance().augment({onStep:function(B){var D=sozi.animation.profiles[f](B),C=1-D;w=v*D+b*C;i.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+w+&quot;,0)&quot;)}})}function m(x){var y=Array.prototype.slice.call(o.getElementsByClassName(&quot;sozi-toc-current&quot;));y.forEach(function(A){A.removeAttribute(&quot;class&quot;)});var z=sozi.document.frames[x];if(z.showInFrameList){o.getElementById(&quot;sozi-toc-&quot;+z.id).setAttribute(&quot;class&quot;,&quot;sozi-toc-current&quot;)}}u.show=function(){o.documentElement.appendChild(i);b=w;v=s;t.start(e)};u.hide=function(){b=w;v=h;t.start(e)};u.isVisible=function(){return v===s};sozi.events.listen(&quot;sozi.player.ready&quot;,q);sozi.events.listen(&quot;sozi.player.cleanup&quot;,u.hide);sozi.events.listen(&quot;sozi.player.framechange&quot;,m)});namespace(this,&quot;sozi.framenumber&quot;,function(a,d){var g=d.document;var e;var k,i;var f;var b=&quot;http://www.w3.org/2000/svg&quot;;function h(){var m=k.getBBox(),n=Math.max(m.width,m.height)*0.75,l=n*1.25;f.setAttribute(&quot;r&quot;,n);e.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+l+&quot;,&quot;+l+&quot;)&quot;)}function c(){e=g.createElementNS(b,&quot;g&quot;);k=g.createElementNS(b,&quot;text&quot;);f=g.createElementNS(b,&quot;circle&quot;);e.setAttribute(&quot;id&quot;,&quot;sozi-framenumber&quot;);f.setAttribute(&quot;cx&quot;,0);f.setAttribute(&quot;cy&quot;,0);e.appendChild(f);i=g.createTextNode(sozi.player.currentFrameIndex+1);k.setAttribute(&quot;text-anchor&quot;,&quot;middle&quot;);k.setAttribute(&quot;dominant-baseline&quot;,&quot;central&quot;);k.setAttribute(&quot;x&quot;,0);k.setAttribute(&quot;y&quot;,0);k.appendChild(i);e.appendChild(k);g.documentElement.appendChild(e);h()}function j(l){i.nodeValue=l+1}sozi.events.listen(&quot;sozi.player.ready&quot;,c);sozi.events.listen(&quot;sozi.player.framechange&quot;,j)});namespace(this,&quot;sozi.links&quot;,function(c,e){var b=&quot;http://www.w3.org/2000/svg&quot;;var a=&quot;http://www.w3.org/1999/xlink&quot;;function f(g){return function(h){sozi.player.moveToFrame(g);h.preventDefault();h.stopPropagation()}}function d(){var h=e.document.getElementsByTagNameNS(b,&quot;a&quot;);for(var j=0;j&lt;h.length;j+=1){var g=h[j].getAttributeNS(a,&quot;href&quot;);if(g&amp;&amp;g[0]===&quot;#&quot;){h[j].addEventListener(&quot;click&quot;,f(sozi.location.getFrameIndexForHash(g)),false)}}}sozi.events.listen(&quot;sozi.document.ready&quot;,d)});namespace(this,&quot;sozi.location&quot;,function(a,d){var b=false;a.getFrameIndex=function(){return a.getFrameIndexForHash(d.location.hash)};a.getFrameIndexForHash=function(g){var h=g?g.slice(1):&quot;1&quot;;var f;if(/^[0-9]+$/.test(h)){f=parseInt(h,10)-1}else{f=sozi.document.getFrameIndexForId(h)}if(f&lt;0){return 0}else{if(f&gt;=sozi.document.frames.length){return sozi.document.frames.length-1}else{return f}}};function e(){var f=a.getFrameIndex();if(!b){sozi.player.moveToFrame(f)}b=false}function c(f){b=true;d.location.hash=&quot;#&quot;+sozi.document.frames[f].id}d.addEventListener(&quot;hashchange&quot;,e,false);sozi.events.listen(&quot;sozi.player.framechange&quot;,c)});namespace(this,&quot;sozi.player&quot;,function(d,g){var l;var c;var i;var e=500;var n=-10;var j=&quot;linear&quot;;var f=0;d.currentFrameIndex=0;var k=false;var m=false;function h(){if(sozi.document.frames[d.currentFrameIndex].timeoutEnable){m=true;var o=(d.currentFrameIndex+1)%sozi.document.frames.length;i=g.setTimeout(function(){d.moveToFrame(o)},sozi.document.frames[d.currentFrameIndex].timeoutMs)}}d.startFromIndex=function(o){k=true;m=false;f=o;d.currentFrameIndex=o;l.showFrame(sozi.document.frames[o]);h()};d.restart=function(){d.startFromIndex(d.currentFrameIndex)};d.stop=function(){c.stop();if(m){g.clearTimeout(i);m=false}k=false;f=d.currentFrameIndex};function b(o,y,w){var z={ss:((o&lt;0)?Math.max(y,w):Math.min(y,w))*(100-o)/100,ts:0.5,k:0};if(o!==0){var s=y-w;var r=y-z.ss;var q=w-z.ss;if(s!==0){var p=Math.sqrt(r*q);var x=(r-p)/s;var t=(r+p)/s;z.ts=(x&gt;0&amp;&amp;x&lt;=1)?x:t}z.k=r/z.ts/z.ts}return z}d.jumpToFrame=function(o){d.stop();sozi.events.fire(&quot;sozi.player.cleanup&quot;);f=o;d.currentFrameIndex=o;l.showFrame(sozi.document.frames[o]);sozi.events.fire(&quot;sozi.player.framechange&quot;,o)};d.getAnimationData=function(o,q,s,p,v,t){var r={};for(var w in o){r[w]={initialState:sozi.display.CameraState.instance(),finalState:sozi.display.CameraState.instance(),useTransitionPath:v,reverseTransitionPath:t};r[w].profile=p||q[w].transitionProfile;r[w].initialState.setAtState(o[w]);if(q.hasOwnProperty(w)){r[w].finalState.setAtState(q[w])}else{r[w].finalState.setAtState(o[w])}if(r[w].finalState.angle-r[w].initialState.angle&gt;180){r[w].finalState.setRawAngle(r[w].finalState.angle-360)}else{if(r[w].finalState.angle-r[w].initialState.angle&lt;-180){r[w].initialState.setRawAngle(r[w].initialState.angle-360)}}var u=s||q[w].transitionZoomPercent;if(u&amp;&amp;q.hasOwnProperty(w)){r[w].zoomWidth=b(u,o[w].width,q[w].width);r[w].zoomHeight=b(u,o[w].height,q[w].height)}}return r};d.previewFrame=function(o){d.currentFrameIndex=o;c.start(e,d.getAnimationData(l.cameras,sozi.document.frames[o].states,n,sozi.animation.profiles[j]),false,false);sozi.events.fire(&quot;sozi.player.framechange&quot;,o)};d.moveToFrame=function(r){if(m){g.clearTimeout(i);m=false}var q,t,s,p,o;if(r===(d.currentFrameIndex-1)%sozi.document.frames.length){q=sozi.document.frames[d.currentFrameIndex].transitionDurationMs;t=undefined;s=undefined;p=true;o=true}else{if(r===(d.currentFrameIndex+1)%sozi.document.frames.length){q=sozi.document.frames[r].transitionDurationMs;t=undefined;s=undefined;p=true;o=false}else{q=e;t=n;s=sozi.animation.profiles[j];p=false;o=false}}sozi.events.fire(&quot;sozi.player.cleanup&quot;);k=true;d.currentFrameIndex=r;c.start(q,d.getAnimationData(l.cameras,sozi.document.frames[r].states,t,s,p,o));sozi.events.fire(&quot;sozi.player.framechange&quot;,r)};d.jumpToFirst=function(){d.jumpToFrame(0)};d.moveToFirst=function(){d.moveToFrame(0)};d.jumpToPrevious=function(){var o=d.currentFrameIndex;if(!c.started||f&lt;=d.currentFrameIndex){o-=1}if(o&gt;=0){d.jumpToFrame(o)}};d.moveToPrevious=function(){for(var o=d.currentFrameIndex-1;o&gt;=0;o-=1){var p=sozi.document.frames[o];if(!p.timeoutEnable||p.timeoutMs!==0){d.moveToFrame(o);break}}};d.jumpToNext=function(){var o=d.currentFrameIndex;if(!c.started||f&gt;=d.currentFrameIndex){o+=1}if(o&lt;sozi.document.frames.length){d.jumpToFrame(o)}};d.moveToNext=function(){if(d.currentFrameIndex&lt;sozi.document.frames.length-1||sozi.document.frames[d.currentFrameIndex].timeoutEnable){d.moveToFrame((d.currentFrameIndex+1)%sozi.document.frames.length)}};d.jumpToLast=function(){d.jumpToFrame(sozi.document.frames.length-1)};d.moveToLast=function(){d.moveToFrame(sozi.document.frames.length-1)};d.moveToCurrent=function(){d.moveToFrame(d.currentFrameIndex)};d.showAll=function(){d.stop();sozi.events.fire(&quot;sozi.player.cleanup&quot;);c.start(e,d.getAnimationData(l.cameras,l.getDocumentState(),n,sozi.animation.profiles[j],false,false))};function a(){l=sozi.display.ViewPort.instance(&quot;player&quot;,sozi.document.idLayerList,true);d.startFromIndex(sozi.location.getFrameIndex());g.setTimeout(l.bind(l.update),1);sozi.events.fire(&quot;sozi.player.ready&quot;)}d.onAnimationStep=function(o,q){for(var s in q){var p=l.cameras[s];p.interpolate(q[s].initialState,q[s].finalState,q[s].profile(o),q[s].useTransitionPath,q[s].reverseTransitionPath);var r;if(q[s].zoomWidth&amp;&amp;q[s].zoomWidth.k!==0){r=o-q[s].zoomWidth.ts;p.width=q[s].zoomWidth.k*r*r+q[s].zoomWidth.ss}if(q[s].zoomHeight&amp;&amp;q[s].zoomHeight.k!==0){r=o-q[s].zoomHeight.ts;p.height=q[s].zoomHeight.k*r*r+q[s].zoomHeight.ss}p.setClipped(q[s].finalState.clipped)}l.update()};c=sozi.animation.Animator.instance().augment({onStep:function(o){d.onAnimationStep(o,this.data)},onDone:function(){for(var o in this.data){l.cameras[o].setAtState(this.data[o].finalState)}l.update();f=d.currentFrameIndex;if(k){h()}}});sozi.events.listen(&quot;sozi.display.ready&quot;,a)});</script>
+  <style
+     ns1:version="14.10-05142318"
+     id="sozi-style">#sozi-toc text{fill:#eff;font-family:Verdana,sans-serif;font-size:12pt}#sozi-toc text:hover{fill:#0cf;cursor:pointer}#sozi-toc text.sozi-toc-current{fill:#fa4}#sozi-toc-background{stroke:#222;stroke-opacity:.1;stroke-width:10;fill:#222;fill-opacity:.9}.sozi-toc-arrow{fill:#eff;fill-opacity:.75;stroke:none}.sozi-toc-arrow:hover{fill:#0cf}#sozi-framenumber circle{stroke:#222;stroke-opacity:.1;stroke-width:4;fill:#222;fill-opacity:.9}#sozi-framenumber text{fill:#eff;font-family:Verdana,sans-serif;font-size:12pt}</style>
+  <ns1:frame
+     ns1:transition-path-hide="true"
+     ns1:transition-profile="linear"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:timeout-ms="5000.0"
+     ns1:timeout-enable="false"
+     ns1:show-in-frame-list="true"
+     ns1:clip="true"
+     ns1:hide="true"
+     ns1:sequence="1"
+     ns1:title="Gcd implementation"
+     ns1:refid="rect10351" />
+  <ns1:frame
+     ns1:refid="rect10841"
+     ns1:title="Gcd maven packaging"
+     ns1:sequence="2"
+     ns1:hide="true"
+     ns1:clip="true"
+     ns1:show-in-frame-list="true"
+     ns1:timeout-enable="false"
+     ns1:timeout-ms="5000.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-profile="linear"
+     ns1:transition-path-hide="true" />
+  <ns1:frame
+     ns1:transition-path-hide="true"
+     ns1:transition-profile="linear"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:timeout-ms="5000.0"
+     ns1:timeout-enable="false"
+     ns1:show-in-frame-list="true"
+     ns1:clip="true"
+     ns1:hide="true"
+     ns1:sequence="3"
+     ns1:title="Using Math.getGcd()"
+     ns1:refid="rect11089" />
+  <ns1:frame
+     ns1:refid="rect11381"
+     ns1:title="Fraction project"
+     ns1:sequence="4"
+     ns1:hide="true"
+     ns1:clip="true"
+     ns1:show-in-frame-list="true"
+     ns1:timeout-enable="false"
+     ns1:timeout-ms="5000.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-profile="linear"
+     ns1:transition-path-hide="true" />
+  <ns1:frame
+     ns1:transition-path-hide="true"
+     ns1:transition-profile="linear"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:timeout-ms="5000.0"
+     ns1:timeout-enable="false"
+     ns1:show-in-frame-list="true"
+     ns1:clip="true"
+     ns1:hide="true"
+     ns1:sequence="5"
+     ns1:title="Maven dependency definition"
+     ns1:refid="rect11637" />
+  <ns1:frame
+     ns1:refid="rect11895"
+     ns1:title="Fraction depends on Gcd"
+     ns1:sequence="6"
+     ns1:hide="true"
+     ns1:clip="true"
+     ns1:show-in-frame-list="true"
+     ns1:timeout-enable="false"
+     ns1:timeout-ms="5000"
+     ns1:transition-duration-ms="1000"
+     ns1:transition-zoom-percent="0"
+     ns1:transition-profile="linear"
+     ns1:transition-path-hide="true" />
+</svg>
diff --git a/Doc/Sd1/Ref/LangFundament/operatorOutputType.svg b/Doc/Sd1/Ref/LangFundament/operatorOutputType.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bcdb7e6fdd39c8a30f5e27baafc3702275a39568
--- /dev/null
+++ b/Doc/Sd1/Ref/LangFundament/operatorOutputType.svg
@@ -0,0 +1,974 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:ns1="http://sozi.baierouge.fr"
+   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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="operatorOutputType.svg"
+   inkscape:version="0.92.1 r15371"
+   version="1.2"
+   id="svg2"
+   height="320"
+   width="823.36237">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.2077062"
+     inkscape:cx="388.04755"
+     inkscape:cy="40.829416"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1600"
+     inkscape:window-height="1090"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     showguides="false"
+     inkscape:guide-bbox="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1569"
+       originx="0"
+       originy="-262.20473" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2318"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2316"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4887"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4627"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6797"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         id="path6799"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6793"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         id="path6795"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6778"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6514"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3841"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareM"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareM">
+      <path
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path3914"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path3844"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondM"
+       style="overflow:visible">
+      <path
+         id="path3923"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMH"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMH"
+       style="overflow:visible">
+      <path
+         id="path4656"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendB"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendB"
+       style="overflow:visible">
+      <path
+         id="path4659"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMU"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMU">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path5221"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend3"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend3"
+       style="overflow:visible">
+      <path
+         id="path5224"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMo"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMo"
+       style="overflow:visible">
+      <path
+         id="path5799"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendO"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendO"
+       style="overflow:visible">
+      <path
+         id="path5802"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM1"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondM1"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendV"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendV"
+       style="overflow:visible">
+      <path
+         id="path6396"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMN"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMN">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path7813"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LstartP"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LstartP"
+       style="overflow:visible">
+      <path
+         id="path7816"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMb"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMb">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path9491"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendX"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendX"
+       style="overflow:visible">
+      <path
+         id="path9494"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareM8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareM8">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path10143"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendT"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendT"
+       style="overflow:visible">
+      <path
+         id="path10146"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMNT"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMNT">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path12195"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LstartPJ"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LstartPJ"
+       style="overflow:visible">
+      <path
+         id="path12198"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMNTL"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMNTL">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path12907"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lendx"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lendx"
+       style="overflow:visible">
+      <path
+         id="path12910"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMoY"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMoY"
+       style="overflow:visible">
+      <path
+         id="path13187"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendOe"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendOe"
+       style="overflow:visible">
+      <path
+         id="path13190"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <linearGradient
+       id="linearGradient3928-8">
+      <stop
+         offset="0"
+         style="stop-color:#7c7c7c"
+         id="stop3930-2" />
+      <stop
+         offset="1"
+         style="stop-color:#e6e3e3"
+         id="stop3932-0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8877">
+      <stop
+         style="stop-color:#cecece;stop-opacity:1;"
+         offset="0"
+         id="stop8879" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop8881" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8869">
+      <stop
+         id="stop8871"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop8873"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7421">
+      <stop
+         id="stop7423"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop7425"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7405">
+      <stop
+         style="stop-color:#9e9e9e;stop-opacity:1;"
+         offset="0"
+         id="stop7407" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop7409" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7378">
+      <stop
+         id="stop7380"
+         offset="0"
+         style="stop-color:#9e9e9e;stop-opacity:1;" />
+      <stop
+         id="stop7382"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective6864"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       id="imagebot_16"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-6"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-1"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-8"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-7"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-9"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-2"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-2"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-8"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-9"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-73"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-6"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-1"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="imagebot_16-0">
+      <feGaussianBlur
+         id="imagebot_21-7"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-5"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="imagebot_12-0"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215">
+      <feGaussianBlur
+         id="imagebot_18-4"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-8"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-02"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-9"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-4"
+       y2="0.73097426"
+       xlink:href="#linearGradient3928-8"
+       x2="36.048218"
+       y1="43.90382"
+       x1="35.173683"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-3"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-5"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-17"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616-2"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618-62"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-540.31498)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"
+       x="104.51711"
+       y="415.68225"
+       id="text3004"><tspan
+         sodipodi:role="line"
+         id="tspan3006"
+         x="104.51711"
+         y="415.68225"
+         style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672"> </tspan></text>
+    <rect
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.85363889;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       id="rect4289"
+       width="470"
+       height="110.00003"
+       x="140"
+       y="542.51971"
+       ry="6.9780188" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.33333397px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="148.47159"
+       y="570.22858"
+       id="text2900"><tspan
+         sodipodi:role="line"
+         x="148.47159"
+         y="570.22858"
+         id="tspan2904"><tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan2496">int a = 7</tspan>;</tspan><tspan
+         sodipodi:role="line"
+         x="148.47159"
+         y="606.89526"
+         id="tspan246"><tspan
+   style="fill:#0000ff;stroke:#0000ff"
+   id="tspan2500">double d = 2.3</tspan>;</tspan><tspan
+         sodipodi:role="line"
+         x="148.47159"
+         y="643.56189"
+         id="tspan250">System.out.println(<tspan
+   style="fill:#00ff00;stroke:#00ff00"
+   id="tspan2504">a + d</tspan>);</tspan><tspan
+         sodipodi:role="line"
+         x="148.47159"
+         y="680.22858"
+         id="tspan248" /><tspan
+         sodipodi:role="line"
+         x="148.47159"
+         y="716.89526"
+         id="tspan2906" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 320,712.51971 V 852.5197 l 100,-69.99999 -100,-70"
+       id="path254"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.33333397px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="344.52142"
+       y="790.48077"
+       id="text2900-3"><tspan
+         sodipodi:role="line"
+         x="344.52142"
+         y="790.48077"
+         id="tspan250-5">+</tspan><tspan
+         sodipodi:role="line"
+         x="344.52142"
+         y="827.14746"
+         id="tspan248-3" /><tspan
+         sodipodi:role="line"
+         x="344.52142"
+         y="863.81409"
+         id="tspan2906-5" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11618)"
+       d="m 250,732.51971 h 60"
+       id="path1276"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11618-6)"
+       d="m 250,832.5197 h 60"
+       id="path1276-9"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.33333397px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch Bold';letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:#ff0000"
+       x="188.0264"
+       y="739.27136"
+       id="text2900-3-1"><tspan
+         sodipodi:role="line"
+         x="188.0264"
+         y="739.27136"
+         id="tspan250-5-2">int</tspan><tspan
+         sodipodi:role="line"
+         x="188.0264"
+         y="775.93805"
+         id="tspan248-3-7" /><tspan
+         sodipodi:role="line"
+         x="188.0264"
+         y="812.60468"
+         id="tspan2906-5-0" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.33333397px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:#0000ff"
+       x="135.79761"
+       y="837.36011"
+       id="text2900-3-1-9"><tspan
+         sodipodi:role="line"
+         x="135.79761"
+         y="837.36011"
+         id="tspan250-5-2-3">double</tspan><tspan
+         sodipodi:role="line"
+         x="135.79761"
+         y="874.02679"
+         id="tspan248-3-7-6" /><tspan
+         sodipodi:role="line"
+         x="135.79761"
+         y="910.69342"
+         id="tspan2906-5-0-0" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11618-62)"
+       d="m 430,782.51972 h 60"
+       id="path1276-1"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.33333397px;line-height:1.25;font-family:'Courier 10 Pitch';-inkscape-font-specification:'Courier 10 Pitch Bold';letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:#00ff00"
+       x="502.99451"
+       y="788.18811"
+       id="text2900-3-1-9-8"><tspan
+         sodipodi:role="line"
+         x="502.99451"
+         y="788.18811"
+         id="tspan250-5-2-3-7">double</tspan><tspan
+         sodipodi:role="line"
+         x="502.99451"
+         y="824.8548"
+         id="tspan248-3-7-6-9" /><tspan
+         sodipodi:role="line"
+         x="502.99451"
+         y="861.52142"
+         id="tspan2906-5-0-0-2" /></text>
+  </g>
+  <script
+     ns1:version="14.10-05142318"
+     id="sozi-script">function namespace(b,d,a){var c=b;d.split(&quot;.&quot;).forEach(function(e){if(typeof c[e]===&quot;undefined&quot;){c[e]={}}c=c[e]});if(a){a(c,b)}return c}namespace(this,&quot;sozi.events&quot;,function(b){var a={};b.listen=function(c,d){if(!a.hasOwnProperty(c)){a[c]=[]}a[c].push(d)};b.fire=function(d){var c=Array.prototype.slice.call(arguments,1);if(a.hasOwnProperty(d)){a[d].forEach(function(e){e.apply(null,c)})}}});namespace(this,&quot;sozi.proto&quot;,function(a){a.Object={installConstructors:function(){function b(){}b.prototype=this;this.instance=function(){var c=new b();c.construct.apply(c,arguments);return c};this.subtype=function(d){var c=new b();c.augment(d);c.installConstructors();return c}},construct:function(){},augment:function(c){for(var b in c){if(c.hasOwnProperty(b)){this[b]=c[b]}}return this},bind:function(c){var b=this;return function(){return c.apply(b,arguments)}}};a.Object.installConstructors()});namespace(this,&quot;sozi.actions&quot;,function(A,g){var u=namespace(g,&quot;sozi.player&quot;);var v=namespace(g,&quot;sozi.display&quot;);var n=g.document;var o=0;var w=1;var t=1.05;var y=5;var m=5;var r=false;var i=0;var h=0;function a(C,B,D){u.stop();v.viewPorts.player.zoom(C&gt;0?t:1/t,B,D)}function x(B){u.stop();v.viewPorts.player.rotate(B&gt;0?y:-y)}function s(){if(sozi.framelist.isVisible()){sozi.framelist.hide();u.restart()}else{u.stop();sozi.framelist.show()}}function d(B){return v.viewPorts.player.contains(B.clientX,B.clientY)}function f(B){if(!d(B)){return}if(B.button===o){n.documentElement.addEventListener(&quot;mousemove&quot;,q,false);r=false;i=B.clientX;h=B.clientY}else{if(B.button===w){s()}}B.stopPropagation();B.preventDefault()}function q(B){if(!d(B)){return}u.stop();if(!r&amp;&amp;(Math.abs(B.clientX-i)&gt;m||Math.abs(B.clientY-h)&gt;m)){r=true}if(r){sozi.events.fire(&quot;sozi.player.cleanup&quot;);v.viewPorts.player.drag(B.clientX-i,B.clientY-h);i=B.clientX;h=B.clientY}B.stopPropagation()}function c(B){if(!d(B)){return}if(B.button===o){n.documentElement.removeEventListener(&quot;mousemove&quot;,q,false)}B.stopPropagation();B.preventDefault()}function p(B){if(!d(B)){return}u.moveToPrevious();B.stopPropagation();B.preventDefault()}function e(B){if(!d(B)){return}if(!r&amp;&amp;B.button!==w){u.moveToNext()}B.stopPropagation();B.preventDefault()}function j(B){if(!d(B)){return}if(!B){B=g.event}var C=0;if(B.wheelDelta){C=B.wheelDelta}else{if(B.detail){C=-B.detail}}if(C!==0){if(B.shiftKey){x(C)}else{a(C,B.clientX,B.clientY)}}B.stopPropagation();B.preventDefault()}function l(B){if(B.altKey||B.ctrlKey||B.metaKey){return}switch(B.charCode||B.which){case 43:a(1,g.innerWidth/2,g.innerHeight/2);break;case 45:a(-1,g.innerWidth/2,g.innerHeight/2);break;case 61:u.moveToCurrent();break;case 70:case 102:u.showAll();break;case 84:case 116:s();break;case 82:x(-1);break;case 114:x(1);break;default:return}B.stopPropagation();B.preventDefault()}function b(B){if(B.altKey||B.ctrlKey||B.metaKey){return}switch(B.keyCode){case 36:if(B.shiftKey){u.jumpToFirst()}else{u.moveToFirst()}break;case 35:if(B.shiftKey){u.jumpToLast()}else{u.moveToLast()}break;case 38:case 33:case 37:if(B.shiftKey){u.jumpToPrevious()}else{u.moveToPrevious()}break;case 40:case 34:case 39:case 13:case 32:if(B.shiftKey){u.jumpToNext()}else{u.moveToNext()}break;default:return}B.stopPropagation();B.preventDefault()}function z(B){B.stopPropagation()}function k(){var C=n.getElementsByTagName(&quot;a&quot;);for(var D=0;D&lt;C.length;D+=1){C[D].addEventListener(&quot;click&quot;,z,false);C[D].addEventListener(&quot;contextmenu&quot;,z,false)}var B=n.documentElement;B.addEventListener(&quot;click&quot;,e,false);B.addEventListener(&quot;mousedown&quot;,f,false);B.addEventListener(&quot;mouseup&quot;,c,false);B.addEventListener(&quot;contextmenu&quot;,p,false);B.addEventListener(&quot;DOMMouseScroll&quot;,j,false);g.onmousewheel=j;B.addEventListener(&quot;keypress&quot;,l,false);B.addEventListener(&quot;keydown&quot;,b,false)}sozi.events.listen(&quot;sozi.display.ready&quot;,k)});namespace(this,&quot;sozi.animation&quot;,function(d,g){var h=g.mozRequestAnimationFrame||g.webkitRequestAnimationFrame||g.msRequestAnimationFrame||g.oRequestAnimationFrame;var k=function(){return g.performance&amp;&amp;g.performance.now?g.performance.now():Date.now()};d.setAnimationFrameHandlers=function(l,m){h=l;k=m};var i=40;var c;var j=[];function e(){if(j.length&gt;0){if(h){h(e)}j.forEach(function(l){l.step(k())})}else{if(!h){g.clearInterval(c)}}}function b(){if(h){h(e)}else{c=g.setInterval(function(){e(k())},i)}}function a(l){j.push(l);if(j.length===1){b()}}function f(l){j.splice(j.indexOf(l),1)}d.Animator=sozi.proto.Object.subtype({construct:function(){this.durationMs=0;this.data=null;this.initialTime=0;this.started=false},start:function(l,m){this.durationMs=l;this.data=m;this.initialTime=k();this.onStep(0);if(!this.started){this.started=true;a(this)}},stop:function(){if(this.started){f(this);this.started=false}},step:function(m){var l=m-this.initialTime;if(l&gt;=this.durationMs){this.stop();this.onStep(1);this.onDone()}else{this.onStep(l/this.durationMs)}},onStep:function(l){},onDone:function(){}});d.profiles={linear:function(l){return l},accelerate:function(l){return Math.pow(l,3)},&quot;strong-accelerate&quot;:function(l){return Math.pow(l,5)},decelerate:function(l){return 1-Math.pow(1-l,3)},&quot;strong-decelerate&quot;:function(l){return 1-Math.pow(1-l,5)},&quot;accelerate-decelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=Math.pow(2*m,3)/2;return l&lt;=0.5?n:1-n},&quot;strong-accelerate-decelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=Math.pow(2*m,5)/2;return l&lt;=0.5?n:1-n},&quot;decelerate-accelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=(1-Math.pow(1-2*m,2))/2;return l&lt;=0.5?n:1-n},&quot;strong-decelerate-accelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=(1-Math.pow(1-2*m,3))/2;return l&lt;=0.5?n:1-n},&quot;immediate-beginning&quot;:function(l){return 1},&quot;immediate-end&quot;:function(l){return l===1?1:0},&quot;immediate-middle&quot;:function(l){return l&gt;=0.5?1:0}}});namespace(this,&quot;sozi.display&quot;,function(c,g){var f=&quot;http://www.w3.org/2000/svg&quot;;var b=&quot;http://www.w3.org/1999/xlink&quot;;var i=g.document;var k;var h;var j;c.viewPorts={};var e;c.CameraState=sozi.proto.Object.subtype({construct:function(){this.cx=this.cy=0;this.width=this.height=1;this.angle=0;this.clipped=true;this.transitionZoomPercent=0;this.transitionProfile=sozi.animation.profiles.linear;this.transitionPath=null},setCenter:function(l,m){this.cx=l;this.cy=m;return this},setSize:function(m,l){this.width=m;this.height=l;return this},setClipped:function(l){this.clipped=l;return this},setAngle:function(l){this.angle=(l+180)%360-180;return this},setRawAngle:function(l){this.angle=l;return this},setTransitionZoomPercent:function(l){this.transitionZoomPercent=l;return this},setTransitionProfile:function(l){this.transitionProfile=l;return this},setTransitionPath:function(l){this.transitionPath=l;return this},setAtElement:function(p){var s,o,t,m;if(p.nodeName===&quot;rect&quot;){s=p.x.baseVal.value;o=p.y.baseVal.value;t=p.width.baseVal.value;m=p.height.baseVal.value}else{var q=p.getBBox();s=q.x;o=q.y;t=q.width;m=q.height}var n=i.documentElement.createSVGPoint();n.x=s+t/2;n.y=o+m/2;var r=p.getCTM();n=n.matrixTransform(r);var l=Math.sqrt(r.a*r.a+r.b*r.b);return this.setCenter(n.x,n.y).setSize(t*l,m*l).setAngle(Math.atan2(r.b,r.a)*180/Math.PI)},setAtState:function(l){return this.setCenter(l.cx,l.cy).setSize(l.width,l.height).setAngle(l.angle).setClipped(l.clipped).setTransitionZoomPercent(l.transitionZoomPercent).setTransitionProfile(l.transitionProfile).setTransitionPath(l.transitionPath)},interpolatableAttributes:[&quot;width&quot;,&quot;height&quot;,&quot;angle&quot;],interpolate:function(n,o,t,v,r){var p=1-t;for(var q=0;q&lt;this.interpolatableAttributes.length;q+=1){var s=this.interpolatableAttributes[q];this[s]=o[s]*t+n[s]*p}var l=r?n.transitionPath:o.transitionPath;if(v&amp;&amp;l){var x=l.getTotalLength();if(r){var m=l.getPointAtLength(x);var u=l.getPointAtLength(0);var w=l.getPointAtLength(x*p)}else{var m=l.getPointAtLength(0);var u=l.getPointAtLength(x);var w=l.getPointAtLength(x*t)}this.cx=w.x+(o.cx-u.x)*t+(n.cx-m.x)*p;this.cy=w.y+(o.cy-u.y)*t+(n.cy-m.y)*p}else{this.cx=o.cx*t+n.cx*p;this.cy=o.cy*t+n.cy*p}}});c.Camera=c.CameraState.subtype({construct:function(n,o){c.CameraState.construct.call(this);this.viewPort=n;this.svgClipRect=i.createElementNS(f,&quot;rect&quot;);var m=i.createElementNS(f,&quot;clipPath&quot;);m.setAttribute(&quot;id&quot;,&quot;sozi-clip-path-&quot;+n.id+&quot;-&quot;+o);m.appendChild(this.svgClipRect);n.svgGroup.appendChild(m);var l=i.createElementNS(f,&quot;g&quot;);l.setAttribute(&quot;clip-path&quot;,&quot;url(#sozi-clip-path-&quot;+n.id+&quot;-&quot;+o+&quot;)&quot;);n.svgGroup.appendChild(l);if(n.isPrimary){this.svgLayer=i.createElementNS(f,&quot;g&quot;);this.svgLayer.appendChild(i.getElementById(o))}else{this.svgLayer=i.createElementNS(f,&quot;use&quot;);this.svgLayer.setAttributeNS(b,&quot;href&quot;,&quot;#&quot;+o)}l.appendChild(this.svgLayer)},setAtState:function(l){return c.CameraState.setAtState.call(this,l).update()},getScale:function(){return Math.min(this.viewPort.width/this.width,this.viewPort.height/this.height)},rotate:function(l){return this.setAngle(this.angle+l).update()},zoom:function(m,l,n){return this.setSize(this.width/m,this.height/m).drag((1-m)*(l-this.viewPort.width/2),(1-m)*(n-this.viewPort.height/2))},drag:function(m,l){var q=this.getScale();var o=this.angle*Math.PI/180;var n=Math.sin(o);var p=Math.cos(o);return this.setCenter(this.cx-(m*p-l*n)/q,this.cy-(m*n+l*p)/q).setClipped(false).update()},update:function(){var q=this.getScale();var n=this.width*q;var m=this.height*q;var l=(this.viewPort.width-n)/2;var r=(this.viewPort.height-m)/2;this.svgClipRect.setAttribute(&quot;x&quot;,this.clipped?l:0);this.svgClipRect.setAttribute(&quot;y&quot;,this.clipped?r:0);this.svgClipRect.setAttribute(&quot;width&quot;,this.clipped?n:this.viewPort.width);this.svgClipRect.setAttribute(&quot;height&quot;,this.clipped?m:this.viewPort.height);var p=-this.cx+this.width/2+l/q;var o=-this.cy+this.height/2+r/q;this.svgLayer.setAttribute(&quot;transform&quot;,&quot;scale(&quot;+q+&quot;)translate(&quot;+p+&quot;,&quot;+o+&quot;)rotate(&quot;+(-this.angle)+&quot;,&quot;+this.cx+&quot;,&quot;+this.cy+&quot;)&quot;);return this}});c.ViewPort=sozi.proto.Object.subtype({construct:function(n,m,l){this.id=n;c.viewPorts[n]=this;this.isPrimary=!!l;if(this.isPrimary){if(e){throw&quot;Failed to create a primary viewport. A primary viewport already exists.&quot;}else{e=this}}this.svgGroup=i.createElementNS(f,&quot;g&quot;);this.svgGroup.setAttribute(&quot;class&quot;,&quot;sozi-viewport&quot;);this.svgGroup.setAttribute(&quot;id&quot;,&quot;sozi-viewport-&quot;+n);i.documentElement.appendChild(this.svgGroup);this.setLocation(0,0).setSize(g.innerWidth,g.innerHeight);this.cameras={};m.forEach(function(o){this.cameras[o]=c.Camera.instance(this,o)},this)},setSize:function(m,l){this.width=m;this.height=l;return this},setLocation:function(l,m){this.x=l;this.y=m;return this},contains:function(l,m){return l&gt;=this.x&amp;&amp;l&lt;this.x+this.width&amp;&amp;m&gt;=this.y&amp;&amp;m&lt;this.y+this.height},getDocumentState:function(){var m=c.CameraState.instance().setCenter(k.x+k.width/2,k.y+k.height/2).setSize(k.width,k.height).setClipped(false);var l={};for(var n in this.cameras){l[n]=m}return l},update:function(){this.svgGroup.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+this.x+&quot;,&quot;+this.y+&quot;)&quot;);for(var l in this.cameras){this.cameras[l].update()}return this},showFrame:function(l){for(var m in l.states){this.cameras[m].setAtState(l.states[m])}return this},drag:function(m,l){for(var n in this.cameras){this.cameras[n].drag(m,l)}return this},zoom:function(m,l,o){for(var n in this.cameras){this.cameras[n].zoom(m,l,o)}return this},rotate:function(l){for(var m in this.cameras){this.cameras[m].rotate(l)}return this},onWindowResize:function(m,l){this.setLocation(this.x*m,this.y*l).setSize(this.width*m,this.height*l).update()}});function d(){var l=i.documentElement;k=l.getBBox();h=g.innerWidth;j=g.innerHeight;l.setAttribute(&quot;width&quot;,h);l.setAttribute(&quot;height&quot;,j);sozi.events.fire(&quot;sozi.display.ready&quot;)}function a(){var l=i.documentElement;l.setAttribute(&quot;width&quot;,g.innerWidth);l.setAttribute(&quot;height&quot;,g.innerHeight);for(var m in c.viewPorts){c.viewPorts[m].onWindowResize(g.innerWidth/h,g.innerHeight/j)}h=g.innerWidth;j=g.innerHeight}sozi.events.listen(&quot;sozi.document.ready&quot;,d);g.addEventListener(&quot;resize&quot;,a,false)});namespace(this,&quot;sozi.document&quot;,function(c,e){var g=e.document;var b=&quot;http://sozi.baierouge.fr&quot;;var d={title:&quot;Untitled&quot;,sequence:&quot;0&quot;,hide:&quot;true&quot;,clip:&quot;true&quot;,&quot;show-in-frame-list&quot;:&quot;true&quot;,&quot;timeout-enable&quot;:&quot;false&quot;,&quot;timeout-ms&quot;:&quot;5000&quot;,&quot;transition-duration-ms&quot;:&quot;1000&quot;,&quot;transition-zoom-percent&quot;:&quot;0&quot;,&quot;transition-profile&quot;:&quot;linear&quot;,&quot;transition-path-hide&quot;:&quot;true&quot;};var h=[&quot;g&quot;,&quot;image&quot;,&quot;path&quot;,&quot;rect&quot;,&quot;circle&quot;,&quot;ellipse&quot;,&quot;line&quot;,&quot;polyline&quot;,&quot;polygon&quot;,&quot;text&quot;,&quot;clippath&quot;];c.frames=[];c.idLayerList=[];function j(l,k){return l.getAttributeNS(b,k)||d[k]}function i(o,p,k){var l=o.states[p]=o.states[p]||sozi.display.CameraState.instance();if(typeof l.transitionZoomPercent===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-zoom-percent&quot;)){l.setTransitionZoomPercent(parseInt(j(k,&quot;transition-zoom-percent&quot;),10))}if(typeof l.transitionProfile===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-profile&quot;)){l.setTransitionProfile(sozi.animation.profiles[j(k,&quot;transition-profile&quot;)])}if(typeof l.transitionPath===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-path&quot;)){var n=g.getElementById(k.getAttributeNS(b,&quot;transition-path&quot;));if(n&amp;&amp;n.nodeName===&quot;path&quot;){l.setTransitionPath(n);if(j(k,&quot;transition-path-hide&quot;)===&quot;true&quot;){n.style.visibility=&quot;hidden&quot;}}}if(k.hasAttributeNS(b,&quot;refid&quot;)){var m=g.getElementById(k.getAttributeNS(b,&quot;refid&quot;));if(m){l.setAtElement(m);if(j(k,&quot;hide&quot;)===&quot;true&quot;){m.style.visibility=&quot;hidden&quot;}}}if(k.hasAttributeNS(b,&quot;clip&quot;)){l.setClipped(j(k,&quot;clip&quot;)===&quot;true&quot;)}}function a(){var l=[];var p=g.getElementsByTagNameNS(b,&quot;layer&quot;);for(var n=0;n&lt;p.length;n+=1){var s=p[n].getAttributeNS(b,&quot;group&quot;);if(s&amp;&amp;l.indexOf(s)===-1){l.push(s)}}var r=g.documentElement;var o=&quot;http://www.w3.org/2000/svg&quot;;var q=g.createElementNS(o,&quot;g&quot;);var k=Array.prototype.slice.call(r.childNodes);k.forEach(function(u,t){if(!u.getAttribute){r.removeChild(u)}else{if(l.indexOf(u.getAttribute(&quot;id&quot;))!==-1){if(q.firstChild){q.setAttribute(&quot;id&quot;,&quot;sozi-wrapper-&quot;+t);c.idLayerList.push(&quot;sozi-wrapper-&quot;+t);r.insertBefore(q,u);q=g.createElementNS(o,&quot;g&quot;)}c.idLayerList.push(u.getAttribute(&quot;id&quot;))}else{if(h.indexOf(u.localName.toLowerCase())!==-1){r.removeChild(u);q.appendChild(u)}}}});if(q.firstChild){q.setAttribute(&quot;id&quot;,&quot;sozi-wrapper-&quot;+k.length);c.idLayerList.push(&quot;sozi-wrapper-&quot;+k.length);r.appendChild(q)}var m=Array.prototype.slice.call(g.getElementsByTagNameNS(b,&quot;frame&quot;));m.sort(function(u,t){var w=parseInt(j(u,&quot;sequence&quot;),10);var v=parseInt(j(t,&quot;sequence&quot;),10);return w-v});m.forEach(function(v,u){var x={id:v.getAttribute(&quot;id&quot;),title:j(v,&quot;title&quot;),showInFrameList:j(v,&quot;show-in-frame-list&quot;)===&quot;true&quot;,sequence:parseInt(j(v,&quot;sequence&quot;),10),timeoutEnable:j(v,&quot;timeout-enable&quot;)===&quot;true&quot;,timeoutMs:parseInt(j(v,&quot;timeout-ms&quot;),10),transitionDurationMs:parseInt(j(v,&quot;transition-duration-ms&quot;),10),states:{}};c.idLayerList.forEach(function(A){if(u===0||A.search(&quot;sozi-wrapper-[0-9]+&quot;)!==-1){i(x,A,v)}else{var z=x.states[A]=sozi.display.CameraState.instance();var y=c.frames[c.frames.length-1].states[A];z.setAtState(y)}});var t=Array.prototype.slice.call(v.getElementsByTagNameNS(b,&quot;layer&quot;));t.forEach(function(y){var z=y.getAttributeNS(b,&quot;group&quot;);if(z&amp;&amp;c.idLayerList.indexOf(z)!==-1){i(x,z,y)}});for(var w in x.states){if(x.states.hasOwnProperty(w)){c.frames.push(x);break}}})}c.getFrameIndexForId=function(l){for(var k=0;k&lt;c.frames.length;k+=1){if(c.frames[k].id===l){return k}}return -1};function f(){g.documentElement.removeAttribute(&quot;viewBox&quot;);a();sozi.events.fire(&quot;sozi.document.ready&quot;)}e.addEventListener(&quot;load&quot;,f,false)});namespace(this,&quot;sozi.framelist&quot;,function(u,k){var o=k.document;var c=5;var i;var p;var j=0;var h;var s;var b;var v;var w;var t;var e=300;var f=&quot;decelerate&quot;;var a=&quot;http://www.w3.org/2000/svg&quot;;function n(z){var x=z.relatedTarget,y=o.documentElement;while(x&amp;&amp;x!==i&amp;&amp;x!==y){x=x.parentNode}if(x!==i){u.hide();sozi.player.restart();z.stopPropagation()}}function r(y){var x=p.getCTM().f;if(x&lt;=-k.innerHeight/2){x+=k.innerHeight/2}else{if(x&lt;0){x=0}}p.setAttribute(&quot;transform&quot;,&quot;translate(0,&quot;+x+&quot;)&quot;);y.stopPropagation()}function d(y){var x=p.getCTM().f;if(x+j&gt;=k.innerHeight*3/2){x-=k.innerHeight/2}else{if(x+j&gt;k.innerHeight+2*c){x=k.innerHeight-j-4*c}}p.setAttribute(&quot;transform&quot;,&quot;translate(0,&quot;+x+&quot;)&quot;);y.stopPropagation()}function g(x){return function(y){sozi.player.previewFrame(x);y.stopPropagation()}}function l(x){x.stopPropagation()}function q(){i=o.createElementNS(a,&quot;g&quot;);i.setAttribute(&quot;id&quot;,&quot;sozi-toc&quot;);o.documentElement.appendChild(i);p=o.createElementNS(a,&quot;g&quot;);i.appendChild(p);var y=o.createElementNS(a,&quot;rect&quot;);y.setAttribute(&quot;id&quot;,&quot;sozi-toc-background&quot;);y.setAttribute(&quot;x&quot;,c);y.setAttribute(&quot;y&quot;,c);y.setAttribute(&quot;rx&quot;,c);y.setAttribute(&quot;ry&quot;,c);y.addEventListener(&quot;click&quot;,l,false);y.addEventListener(&quot;mousedown&quot;,l,false);y.addEventListener(&quot;mouseout&quot;,n,false);p.appendChild(y);var A=0;sozi.document.frames.forEach(function(D,E){if(D.showInFrameList){var C=o.createElementNS(a,&quot;text&quot;);C.appendChild(o.createTextNode(D.title));C.setAttribute(&quot;id&quot;,&quot;sozi-toc-&quot;+D.id);p.appendChild(C);if(E===sozi.player.currentFrameIndex){C.setAttribute(&quot;class&quot;,&quot;sozi-toc-current&quot;)}var B=C.getBBox().width;j+=C.getBBox().height;if(B&gt;A){A=B}C.setAttribute(&quot;x&quot;,2*c);C.setAttribute(&quot;y&quot;,j+c);C.addEventListener(&quot;click&quot;,g(E),false);C.addEventListener(&quot;mousedown&quot;,l,false)}});var x=o.createElementNS(a,&quot;path&quot;);x.setAttribute(&quot;class&quot;,&quot;sozi-toc-arrow&quot;);x.setAttribute(&quot;d&quot;,&quot;M&quot;+(A+3*c)+&quot;,&quot;+(5*c)+&quot; l&quot;+(4*c)+&quot;,0 l-&quot;+(2*c)+&quot;,-&quot;+(3*c)+&quot; z&quot;);x.addEventListener(&quot;click&quot;,r,false);x.addEventListener(&quot;mousedown&quot;,l,false);i.appendChild(x);var z=o.createElementNS(a,&quot;path&quot;);z.setAttribute(&quot;class&quot;,&quot;sozi-toc-arrow&quot;);z.setAttribute(&quot;d&quot;,&quot;M&quot;+(A+3*c)+&quot;,&quot;+(7*c)+&quot; l&quot;+(4*c)+&quot;,0 l-&quot;+(2*c)+&quot;,&quot;+(3*c)+&quot; z&quot;);z.addEventListener(&quot;click&quot;,d,false);z.addEventListener(&quot;mousedown&quot;,l,false);i.appendChild(z);y.setAttribute(&quot;width&quot;,A+7*c);y.setAttribute(&quot;height&quot;,j+2*c);h=-A-9*c;s=0;w=v=h;i.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+h+&quot;,0)&quot;);t=sozi.animation.Animator.instance().augment({onStep:function(B){var D=sozi.animation.profiles[f](B),C=1-D;w=v*D+b*C;i.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+w+&quot;,0)&quot;)}})}function m(x){var y=Array.prototype.slice.call(o.getElementsByClassName(&quot;sozi-toc-current&quot;));y.forEach(function(A){A.removeAttribute(&quot;class&quot;)});var z=sozi.document.frames[x];if(z.showInFrameList){o.getElementById(&quot;sozi-toc-&quot;+z.id).setAttribute(&quot;class&quot;,&quot;sozi-toc-current&quot;)}}u.show=function(){o.documentElement.appendChild(i);b=w;v=s;t.start(e)};u.hide=function(){b=w;v=h;t.start(e)};u.isVisible=function(){return v===s};sozi.events.listen(&quot;sozi.player.ready&quot;,q);sozi.events.listen(&quot;sozi.player.cleanup&quot;,u.hide);sozi.events.listen(&quot;sozi.player.framechange&quot;,m)});namespace(this,&quot;sozi.framenumber&quot;,function(a,d){var g=d.document;var e;var k,i;var f;var b=&quot;http://www.w3.org/2000/svg&quot;;function h(){var m=k.getBBox(),n=Math.max(m.width,m.height)*0.75,l=n*1.25;f.setAttribute(&quot;r&quot;,n);e.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+l+&quot;,&quot;+l+&quot;)&quot;)}function c(){e=g.createElementNS(b,&quot;g&quot;);k=g.createElementNS(b,&quot;text&quot;);f=g.createElementNS(b,&quot;circle&quot;);e.setAttribute(&quot;id&quot;,&quot;sozi-framenumber&quot;);f.setAttribute(&quot;cx&quot;,0);f.setAttribute(&quot;cy&quot;,0);e.appendChild(f);i=g.createTextNode(sozi.player.currentFrameIndex+1);k.setAttribute(&quot;text-anchor&quot;,&quot;middle&quot;);k.setAttribute(&quot;dominant-baseline&quot;,&quot;central&quot;);k.setAttribute(&quot;x&quot;,0);k.setAttribute(&quot;y&quot;,0);k.appendChild(i);e.appendChild(k);g.documentElement.appendChild(e);h()}function j(l){i.nodeValue=l+1}sozi.events.listen(&quot;sozi.player.ready&quot;,c);sozi.events.listen(&quot;sozi.player.framechange&quot;,j)});namespace(this,&quot;sozi.links&quot;,function(c,e){var b=&quot;http://www.w3.org/2000/svg&quot;;var a=&quot;http://www.w3.org/1999/xlink&quot;;function f(g){return function(h){sozi.player.moveToFrame(g);h.preventDefault();h.stopPropagation()}}function d(){var h=e.document.getElementsByTagNameNS(b,&quot;a&quot;);for(var j=0;j&lt;h.length;j+=1){var g=h[j].getAttributeNS(a,&quot;href&quot;);if(g&amp;&amp;g[0]===&quot;#&quot;){h[j].addEventListener(&quot;click&quot;,f(sozi.location.getFrameIndexForHash(g)),false)}}}sozi.events.listen(&quot;sozi.document.ready&quot;,d)});namespace(this,&quot;sozi.location&quot;,function(a,d){var b=false;a.getFrameIndex=function(){return a.getFrameIndexForHash(d.location.hash)};a.getFrameIndexForHash=function(g){var h=g?g.slice(1):&quot;1&quot;;var f;if(/^[0-9]+$/.test(h)){f=parseInt(h,10)-1}else{f=sozi.document.getFrameIndexForId(h)}if(f&lt;0){return 0}else{if(f&gt;=sozi.document.frames.length){return sozi.document.frames.length-1}else{return f}}};function e(){var f=a.getFrameIndex();if(!b){sozi.player.moveToFrame(f)}b=false}function c(f){b=true;d.location.hash=&quot;#&quot;+sozi.document.frames[f].id}d.addEventListener(&quot;hashchange&quot;,e,false);sozi.events.listen(&quot;sozi.player.framechange&quot;,c)});namespace(this,&quot;sozi.player&quot;,function(d,g){var l;var c;var i;var e=500;var n=-10;var j=&quot;linear&quot;;var f=0;d.currentFrameIndex=0;var k=false;var m=false;function h(){if(sozi.document.frames[d.currentFrameIndex].timeoutEnable){m=true;var o=(d.currentFrameIndex+1)%sozi.document.frames.length;i=g.setTimeout(function(){d.moveToFrame(o)},sozi.document.frames[d.currentFrameIndex].timeoutMs)}}d.startFromIndex=function(o){k=true;m=false;f=o;d.currentFrameIndex=o;l.showFrame(sozi.document.frames[o]);h()};d.restart=function(){d.startFromIndex(d.currentFrameIndex)};d.stop=function(){c.stop();if(m){g.clearTimeout(i);m=false}k=false;f=d.currentFrameIndex};function b(o,y,w){var z={ss:((o&lt;0)?Math.max(y,w):Math.min(y,w))*(100-o)/100,ts:0.5,k:0};if(o!==0){var s=y-w;var r=y-z.ss;var q=w-z.ss;if(s!==0){var p=Math.sqrt(r*q);var x=(r-p)/s;var t=(r+p)/s;z.ts=(x&gt;0&amp;&amp;x&lt;=1)?x:t}z.k=r/z.ts/z.ts}return z}d.jumpToFrame=function(o){d.stop();sozi.events.fire(&quot;sozi.player.cleanup&quot;);f=o;d.currentFrameIndex=o;l.showFrame(sozi.document.frames[o]);sozi.events.fire(&quot;sozi.player.framechange&quot;,o)};d.getAnimationData=function(o,q,s,p,v,t){var r={};for(var w in o){r[w]={initialState:sozi.display.CameraState.instance(),finalState:sozi.display.CameraState.instance(),useTransitionPath:v,reverseTransitionPath:t};r[w].profile=p||q[w].transitionProfile;r[w].initialState.setAtState(o[w]);if(q.hasOwnProperty(w)){r[w].finalState.setAtState(q[w])}else{r[w].finalState.setAtState(o[w])}if(r[w].finalState.angle-r[w].initialState.angle&gt;180){r[w].finalState.setRawAngle(r[w].finalState.angle-360)}else{if(r[w].finalState.angle-r[w].initialState.angle&lt;-180){r[w].initialState.setRawAngle(r[w].initialState.angle-360)}}var u=s||q[w].transitionZoomPercent;if(u&amp;&amp;q.hasOwnProperty(w)){r[w].zoomWidth=b(u,o[w].width,q[w].width);r[w].zoomHeight=b(u,o[w].height,q[w].height)}}return r};d.previewFrame=function(o){d.currentFrameIndex=o;c.start(e,d.getAnimationData(l.cameras,sozi.document.frames[o].states,n,sozi.animation.profiles[j]),false,false);sozi.events.fire(&quot;sozi.player.framechange&quot;,o)};d.moveToFrame=function(r){if(m){g.clearTimeout(i);m=false}var q,t,s,p,o;if(r===(d.currentFrameIndex-1)%sozi.document.frames.length){q=sozi.document.frames[d.currentFrameIndex].transitionDurationMs;t=undefined;s=undefined;p=true;o=true}else{if(r===(d.currentFrameIndex+1)%sozi.document.frames.length){q=sozi.document.frames[r].transitionDurationMs;t=undefined;s=undefined;p=true;o=false}else{q=e;t=n;s=sozi.animation.profiles[j];p=false;o=false}}sozi.events.fire(&quot;sozi.player.cleanup&quot;);k=true;d.currentFrameIndex=r;c.start(q,d.getAnimationData(l.cameras,sozi.document.frames[r].states,t,s,p,o));sozi.events.fire(&quot;sozi.player.framechange&quot;,r)};d.jumpToFirst=function(){d.jumpToFrame(0)};d.moveToFirst=function(){d.moveToFrame(0)};d.jumpToPrevious=function(){var o=d.currentFrameIndex;if(!c.started||f&lt;=d.currentFrameIndex){o-=1}if(o&gt;=0){d.jumpToFrame(o)}};d.moveToPrevious=function(){for(var o=d.currentFrameIndex-1;o&gt;=0;o-=1){var p=sozi.document.frames[o];if(!p.timeoutEnable||p.timeoutMs!==0){d.moveToFrame(o);break}}};d.jumpToNext=function(){var o=d.currentFrameIndex;if(!c.started||f&gt;=d.currentFrameIndex){o+=1}if(o&lt;sozi.document.frames.length){d.jumpToFrame(o)}};d.moveToNext=function(){if(d.currentFrameIndex&lt;sozi.document.frames.length-1||sozi.document.frames[d.currentFrameIndex].timeoutEnable){d.moveToFrame((d.currentFrameIndex+1)%sozi.document.frames.length)}};d.jumpToLast=function(){d.jumpToFrame(sozi.document.frames.length-1)};d.moveToLast=function(){d.moveToFrame(sozi.document.frames.length-1)};d.moveToCurrent=function(){d.moveToFrame(d.currentFrameIndex)};d.showAll=function(){d.stop();sozi.events.fire(&quot;sozi.player.cleanup&quot;);c.start(e,d.getAnimationData(l.cameras,l.getDocumentState(),n,sozi.animation.profiles[j],false,false))};function a(){l=sozi.display.ViewPort.instance(&quot;player&quot;,sozi.document.idLayerList,true);d.startFromIndex(sozi.location.getFrameIndex());g.setTimeout(l.bind(l.update),1);sozi.events.fire(&quot;sozi.player.ready&quot;)}d.onAnimationStep=function(o,q){for(var s in q){var p=l.cameras[s];p.interpolate(q[s].initialState,q[s].finalState,q[s].profile(o),q[s].useTransitionPath,q[s].reverseTransitionPath);var r;if(q[s].zoomWidth&amp;&amp;q[s].zoomWidth.k!==0){r=o-q[s].zoomWidth.ts;p.width=q[s].zoomWidth.k*r*r+q[s].zoomWidth.ss}if(q[s].zoomHeight&amp;&amp;q[s].zoomHeight.k!==0){r=o-q[s].zoomHeight.ts;p.height=q[s].zoomHeight.k*r*r+q[s].zoomHeight.ss}p.setClipped(q[s].finalState.clipped)}l.update()};c=sozi.animation.Animator.instance().augment({onStep:function(o){d.onAnimationStep(o,this.data)},onDone:function(){for(var o in this.data){l.cameras[o].setAtState(this.data[o].finalState)}l.update();f=d.currentFrameIndex;if(k){h()}}});sozi.events.listen(&quot;sozi.display.ready&quot;,a)});</script>
+  <style
+     ns1:version="14.10-05142318"
+     id="sozi-style">#sozi-toc text{fill:#eff;font-family:Verdana,sans-serif;font-size:12pt}#sozi-toc text:hover{fill:#0cf;cursor:pointer}#sozi-toc text.sozi-toc-current{fill:#fa4}#sozi-toc-background{stroke:#222;stroke-opacity:.1;stroke-width:10;fill:#222;fill-opacity:.9}.sozi-toc-arrow{fill:#eff;fill-opacity:.75;stroke:none}.sozi-toc-arrow:hover{fill:#0cf}#sozi-framenumber circle{stroke:#222;stroke-opacity:.1;stroke-width:4;fill:#222;fill-opacity:.9}#sozi-framenumber text{fill:#eff;font-family:Verdana,sans-serif;font-size:12pt}</style>
+  <ns1:frame
+     ns1:transition-path-hide="true"
+     ns1:transition-profile="linear"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:timeout-ms="5000.0"
+     ns1:timeout-enable="false"
+     ns1:show-in-frame-list="true"
+     ns1:clip="true"
+     ns1:hide="true"
+     ns1:sequence="1"
+     ns1:title="Gcd implementation"
+     ns1:refid="rect10351" />
+  <ns1:frame
+     ns1:refid="rect10841"
+     ns1:title="Gcd maven packaging"
+     ns1:sequence="2"
+     ns1:hide="true"
+     ns1:clip="true"
+     ns1:show-in-frame-list="true"
+     ns1:timeout-enable="false"
+     ns1:timeout-ms="5000.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-profile="linear"
+     ns1:transition-path-hide="true" />
+  <ns1:frame
+     ns1:transition-path-hide="true"
+     ns1:transition-profile="linear"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:timeout-ms="5000.0"
+     ns1:timeout-enable="false"
+     ns1:show-in-frame-list="true"
+     ns1:clip="true"
+     ns1:hide="true"
+     ns1:sequence="3"
+     ns1:title="Using Math.getGcd()"
+     ns1:refid="rect11089" />
+  <ns1:frame
+     ns1:refid="rect11381"
+     ns1:title="Fraction project"
+     ns1:sequence="4"
+     ns1:hide="true"
+     ns1:clip="true"
+     ns1:show-in-frame-list="true"
+     ns1:timeout-enable="false"
+     ns1:timeout-ms="5000.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-profile="linear"
+     ns1:transition-path-hide="true" />
+  <ns1:frame
+     ns1:transition-path-hide="true"
+     ns1:transition-profile="linear"
+     ns1:transition-zoom-percent="0.0"
+     ns1:transition-duration-ms="1000.0"
+     ns1:timeout-ms="5000.0"
+     ns1:timeout-enable="false"
+     ns1:show-in-frame-list="true"
+     ns1:clip="true"
+     ns1:hide="true"
+     ns1:sequence="5"
+     ns1:title="Maven dependency definition"
+     ns1:refid="rect11637" />
+  <ns1:frame
+     ns1:refid="rect11895"
+     ns1:title="Fraction depends on Gcd"
+     ns1:sequence="6"
+     ns1:hide="true"
+     ns1:clip="true"
+     ns1:show-in-frame-list="true"
+     ns1:timeout-enable="false"
+     ns1:timeout-ms="5000"
+     ns1:transition-duration-ms="1000"
+     ns1:transition-zoom-percent="0"
+     ns1:transition-profile="linear"
+     ns1:transition-path-hide="true" />
+</svg>
diff --git a/Doc/Sd1/languageFundamentals.xml b/Doc/Sd1/languageFundamentals.xml
index 2d6a311db58ea83e059eeb1a57db155c58ffefcd..35455873146a54acdb693b204e70b8bafbfdddc3 100644
--- a/Doc/Sd1/languageFundamentals.xml
+++ b/Doc/Sd1/languageFundamentals.xml
@@ -1120,7 +1120,8 @@ int i = (int) d; // Explicit cast double to int</programlisting>
       System.out.println("Maximum int value:" + maximum);
    }</programlisting>
 
-              <para>BTW: The <xref linkend="glo_JDK"/> does provide maximum value, minimum value and related information for <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-E">char</code>, <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-A">byte</code>, <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> and <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> data types int its related <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html">Character</classname>, <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html">Byte</classname>, <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Short.html">Short</classname> and <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html">Integer</classname> classes. You may want to execute:</para>
+              <para>BTW: The <xref linkend="glo_JDK"/> does provide maximum value, minimum value and related information for <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-E">char</code>, <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-A">byte</code>, <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> and <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> data types int its related <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html">Character</classname>, <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html">Byte</classname>, <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Short.html">Short</classname> and <classname
+              xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html">Integer</classname> classes. You may want to execute:</para>
 
               <programlisting language="java">    System.out.println("int minimum:" + Integer.MIN_VALUE);
     System.out.println("int minimum:" + Integer.MAX_VALUE);
@@ -2437,216 +2438,220 @@ _____________________________________
         </qandadiv>
       </qandaset>
     </section>
-  </section>
 
-  <section xml:id="sd1SectOperator">
-    <title>Operators and expressions</title>
+    <section xml:id="sd1SectOperator">
+      <title>Operators and expressions</title>
+
+      <figure xml:id="sd1_fig_binaryPlusOperator">
+        <title>The binary plus operator</title>
 
-    <figure xml:id="sd1_fig_binaryPlusOperator">
-      <title>The binary plus operator</title>
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="Ref/LangFundament/operatorSum.svg"/>
+          </imageobject>
+        </mediaobject>
+      </figure>
 
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="Ref/LangFundament/operatorSum.svg"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
+      <figure xml:id="sd1_fig_operatorResultType">
+        <title>Binary operator output type</title>
 
-    <qandaset defaultlabel="qanda" xml:id="sd1_qanda_expressionTypes">
-      <title>Expressions and type</title>
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="Ref/LangFundament/operatorOutputType.svg"/>
+          </imageobject>
+        </mediaobject>
+      </figure>
 
-      <qandadiv>
-        <qandaentry>
-          <question>
-            <para>Consider the following code segment:</para>
+      <qandaset defaultlabel="qanda" xml:id="sd1_qanda_expressionTypes">
+        <title>Expressions and type</title>
 
-            <programlisting language="java">short a = 4; <co linkends="sd1_co_expressionTypeIntToShort-1" xml:id="sd1_co_expressionTypeIntToShort-1-co"/>
+        <qandadiv>
+          <qandaentry>
+            <question>
+              <para>Consider the following code segment:</para>
+
+              <programlisting language="java">short a = 4; <co linkends="sd1_co_expressionTypeIntToShort-1" xml:id="sd1_co_expressionTypeIntToShort-1-co"/>
 short sum = a + 7; <co linkends="sd1_co_expressionTypeIntToShort-2" xml:id="sd1_co_expressionTypeIntToShort-2-co"/></programlisting>
 
-            <calloutlist>
-              <callout arearefs="sd1_co_expressionTypeIntToShort-1-co" xml:id="sd1_co_expressionTypeIntToShort-1">
-                <para>Declaring a <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> variable <code>a</code> assigning 4.</para>
-              </callout>
+              <calloutlist>
+                <callout arearefs="sd1_co_expressionTypeIntToShort-1-co" xml:id="sd1_co_expressionTypeIntToShort-1">
+                  <para>Declaring a <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> variable <code>a</code> assigning 4.</para>
+                </callout>
 
-              <callout arearefs="sd1_co_expressionTypeIntToShort-2-co" xml:id="sd1_co_expressionTypeIntToShort-2">
-                <para>Declaring a short variable <code>sum</code> assigning 4 + 7. This yields a compile time error <computeroutput>Type mismatch: cannot convert from int to short</computeroutput>.</para>
-              </callout>
-            </calloutlist>
+                <callout arearefs="sd1_co_expressionTypeIntToShort-2-co" xml:id="sd1_co_expressionTypeIntToShort-2">
+                  <para>Declaring a short variable <code>sum</code> assigning 4 + 7.This yields a compile time error:</para>
 
-            <para>On contrary the following snippet will compile flawlessly:</para>
+                  <screen>Type mismatch: cannot convert from int to short</screen>
+                </callout>
+              </calloutlist>
 
-            <programlisting language="java">short sum = 4 + 7; </programlisting>
+              <para>On contrary the following line will compile flawlessly:</para>
 
-            <para>Explain this strange behaviour.</para>
-          </question>
+              <programlisting language="java">short sum = 4 + 7; </programlisting>
 
-          <answer>
-            <para>The expression <code>a + 7</code> contains an operand of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> to the left of the plus operator and an <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> literal <code>7</code> to its right. Thus the plus operator yields an <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> result (the <quote>biggest</quote> type of both operands) which cannot be assigned to the variable <code>sum</code> of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code>.</para>
+              <para>Explain this strange behaviour.</para>
+            </question>
+
+            <answer>
+              <para>The expression <code>a + 7</code> contains an operand of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> to the left of the plus operator and an <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> literal <code>7</code> to its right. Thus the plus operator yields an <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> result (the <quote>biggest</quote> type of both operands) which cannot be assigned to the variable <code>sum</code> of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code>.</para>
 
-            <para>The very same argument seems to apply for the expression <code>4 + 7</code> even better: This time the plus operator acts on two <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> operands. However the <xref linkend="glo_Java"/> compiler is <quote>clever</quote> enough casting the <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> result 11 to the <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> variable <code>sum</code> without any loss of information.</para>
-          </answer>
-        </qandaentry>
-      </qandadiv>
-    </qandaset>
+              <para>The very same argument seems to apply for the expression <code>4 + 7</code> even better: This time the plus operator acts on two <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> operands. However the <xref linkend="glo_Java"/> compiler is <quote>clever</quote> enough casting the <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> result 11 to the <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> variable <code>sum</code> without any loss of information.</para>
+            </answer>
+          </qandaentry>
+        </qandadiv>
+      </qandaset>
 
-    <qandaset defaultlabel="qanda" xml:id="sd1_qanda_integerDivision">
-      <title>Dividing values</title>
+      <qandaset defaultlabel="qanda" xml:id="sd1_qanda_integerDivision">
+        <title>Dividing values</title>
 
-      <qandadiv>
-        <qandaentry>
-          <question>
-            <para>Consider the following statement:</para>
+        <qandadiv>
+          <qandaentry>
+            <question>
+              <para>Consider the following statement:</para>
 
-            <programlisting language="java">System.out.println(8 / 9);</programlisting>
+              <programlisting language="java">System.out.println(8 / 9);</programlisting>
 
-            <para>The output is <computeroutput>0</computeroutput> rather than <code>0.888888...</code> . Explain this result.</para>
-          </question>
+              <para>The output is <computeroutput>0</computeroutput> rather than <code>0.888888...</code> . Explain this result.</para>
+            </question>
 
-          <answer>
-            <para>The divide operator acts on two <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> literal values 8 an 9. Thus irrespective of the underlying floating point result the resulting type is int .</para>
+            <answer>
+              <para>The divide operator acts on two <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> literal values 8 an 9. Thus irrespective of the underlying floating point result the resulting type is int .</para>
 
-            <para>According to <uri xlink:href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3-300-A-2">http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3-300-A-2</uri> the floating point value 0.88888... will be <quote>rounded toward zero</quote> yielding an int value of <code>0</code> rather than <code>1</code>.</para>
-          </answer>
-        </qandaentry>
-      </qandadiv>
-    </qandaset>
+              <para>According to <uri xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3-300-A-2">https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3-300-A-2</uri> the floating point value 0.88888... will be <quote>rounded toward zero</quote> yielding an int value of <code>0</code> rather than <code>1</code>.</para>
+            </answer>
+          </qandaentry>
+        </qandadiv>
+      </qandaset>
 
-    <qandaset defaultlabel="qanda" xml:id="sd1_qanda_integerSumOverflow">
-      <title>Adding values</title>
+      <qandaset defaultlabel="qanda" xml:id="sd1_qanda_integerSumOverflow">
+        <title>Adding values</title>
 
-      <qandadiv>
-        <qandaentry>
-          <question>
-            <para>Consider the following code:</para>
+        <qandadiv>
+          <qandaentry>
+            <question>
+              <para>Consider the following code:</para>
 
-            <programlisting language="java">System.out.println(2147483647 + 1);
+              <programlisting language="java">System.out.println(2147483647 + 1);
 System.out.println(2147483647 + 1L);</programlisting>
 
-            <para>This yields:</para>
+              <para>This yields:</para>
 
-            <screen>-2147483648
+              <screen>-2147483648
 2147483648</screen>
 
-            <para>Explain this result. Please refrain from answering <quote>Thats what bankers do!</quote></para>
-          </question>
+              <para>Explain this result. Please refrain from answering <quote>Thats what bankers do!</quote></para>
+            </question>
 
-          <answer>
-            <para>The value 2147483647 is actually the largest possible <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> value <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html">Integer</classname>.<property xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</property>. The plus operator in the first expression <code>2147483647 + 1</code> acts on two operands of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code>. Thus the resulting sum will be of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> as well irrespective of its value.</para>
+            <answer>
+              <para>The value 2147483647 is actually the largest possible <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> value <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html">Integer</classname>.<property xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</property>. The plus operator in the first expression <code>2147483647 + 1</code> acts on two operands of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code>. Thus the resulting sum will be of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> as well irrespective of its value.</para>
 
-            <para>On binary level adding an <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> value of <code>1</code> results in:</para>
+              <para>On binary level adding an <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> value of <code>1</code> results in:</para>
 
-            <screen>  01111111_11111111_11111111_11111111    2147483647
+              <screen>  01111111_11111111_11111111_11111111    2147483647
 + 00000000_00000000_00000000_00000001   +         1
 -------------------------------------  ------------
   10000000_00000000_00000000_00000000   -2147483648</screen>
 
-            <para>With respect to two-complement representation of signed <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> values this is actually an overflow error: There simply is no positive <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> value of 2147483648 in <xref linkend="glo_Java"/>. See <uri xlink:href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3-220">http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3-220</uri> for details.</para>
+              <para>With respect to two-complement representation of signed <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> values this is actually an overflow error: There simply is no positive <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> value of 2147483648 in <xref linkend="glo_Java"/>. See <uri xlink:href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3-220">http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3-220</uri> for details.</para>
 
-            <para>On contrary the plus operator in the expression <code>2147483647 + 1L</code> acts on an <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> to its left and a <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-D">long</code> to its right. The result will thus be of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-D">long</code>:</para>
+              <para>On contrary the plus operator in the expression <code>2147483647 + 1L</code> acts on an <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> to its left and a <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-D">long</code> to its right. The result will thus be of type <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-D">long</code>:</para>
 
-            <screen>                                      01111111_11111111_11111111_11111111    2147483647
+              <screen>                                      01111111_11111111_11111111_11111111    2147483647
 + 00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000001   +         1
 -------------------------------------------------------------------------  ------------
   00000000_00000000_00000000_00000000_10000000_00000000_00000000_00000000    2147483648</screen>
 
-            <para>Due to a <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-D">long</code>'s larger allocation of eight rather than four bytes execution reveals no overflow problem thus yielding the expected result.</para>
-          </answer>
-        </qandaentry>
-      </qandadiv>
-    </qandaset>
-  </section>
+              <para>Due to a <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-D">long</code>'s larger allocation of eight rather than four bytes execution reveals no overflow problem thus yielding the expected result.</para>
+            </answer>
+          </qandaentry>
+        </qandadiv>
+      </qandaset>
 
-  <section xml:id="sd1_sect_langFundamental_exercises">
-    <title>Exercises</title>
+      <figure xml:id="sd1_fig_genericBinaryOpType">
+        <title>Generic type behaviour</title>
 
-    <section xml:id="sw1SectSimpleExpressions">
-      <title>Simple expressions</title>
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="Ref/LangFundament/genericBinaryOperator.svg"/>
+          </imageobject>
+        </mediaobject>
+      </figure>
 
-      <qandaset defaultlabel="qanda" xml:id="sw1QandaGuessingResults">
-        <title>Guessing results</title>
+      <figure xml:id="sd1_fig_genericBinaryTypeExamples">
+        <title>Binary operator type examples</title>
 
-        <qandadiv>
-          <qandaentry>
-            <question>
-              <para>Consider the following code segment:</para>
+        <informaltable border="1">
+          <colgroup width="23%"/>
 
-              <programlisting language="java">      int a = 3;
-      a++;          //Incrementing a by 1 --&gt; a==4
+          <colgroup width="23%"/>
 
-      int b = a;    // TODO
+          <colgroup width="17%"/>
 
-      b--;          // TODO
-      --b;          // TODO
+          <colgroup width="37%"/>
 
-      int c = b;    // TODO
+          <tr>
+            <th>Left</th>
 
-      b = ++a;      // TODO
-      int e = a++;  // TODO
+            <th>Right</th>
 
-      a *= b;       // TODO
+            <th>Out</th>
 
-      System.out.println("a=" + a);
-      System.out.println("b=" + b);
-      System.out.println("c=" + c);
-      System.out.println("e=" + e);</programlisting>
+            <th>Examples</th>
+          </tr>
 
-              <para>We want to guess the expected result. Copy/paste the above code into a main() method body within your IDE of choice (probably Eclipse).</para>
+          <tr>
+            <td><code>boolean</code></td>
 
-              <para><emphasis role="bold">Do not execute this code yet</emphasis> but replace the <quote>// TODO</quote> comments by guessing the respective variable's value beforehand:</para>
+            <td><code>boolean</code></td>
 
-              <para><computeroutput>a=...</computeroutput></para>
+            <td><code>boolean</code></td>
 
-              <para><computeroutput>b=...</computeroutput></para>
+            <td><code>|, &amp;, &amp;&amp;, ||, ^</code></td>
+          </tr>
 
-              <para><computeroutput>c=...</computeroutput></para>
+          <tr>
+            <td><code>int</code></td>
 
-              <para><computeroutput>e=...</computeroutput></para>
+            <td><code>int</code></td>
 
-              <para>After finishing your guesses execute your code and (possibly) start wailing about your success rate.</para>
+            <td><code>int</code></td>
 
-              <tip>
-                <para>Both <code>x++</code> (postfix notation) and <code>++x</code> (infix notation) are expressions themselves which might even be rewritten as <code>(x++)</code> and <code>(++x)</code> for the sake of clarity. The difference is not about operator precedence rules but simply about the values of these expressions when being assigned to other variables.</para>
-              </tip>
-            </question>
+            <td rowspan="5"><code>+, -, *, /, %</code></td>
+          </tr>
 
-            <answer>
-              <para>As inferred by the hint the biggest problem is about understanding postfix and infix notation of the operators <code>++</code> and <code>--</code>. A corresponding expression evaluates to:</para>
+          <tr>
+            <td><code>byte</code></td>
 
-              <itemizedlist>
-                <listitem>
-                  <para><code>a = x++</code> yields a ==x: The value of x <emphasis role="bold">before</emphasis> incrementing it.</para>
-                </listitem>
+            <td><code>short</code></td>
 
-                <listitem>
-                  <para><code>a = ++x</code> yields a ==(x + 1): The value of x <emphasis role="bold">after</emphasis> incrementing it.</para>
-                </listitem>
-              </itemizedlist>
+            <td><code>short</code></td>
+          </tr>
 
-              <para>The rest is just obeying the <quote>due diligence</quote> rule set:</para>
+          <tr>
+            <td><code>double</code></td>
 
-              <programlisting language="java">      int a = 3;
-      a++;          //Incrementing a by 1 --&gt; a==4
+            <td><code>float</code></td>
 
-      int b = a;    // Assigning value of a --&gt; b==4
+            <td><code>double</code></td>
+          </tr>
 
-      b--;          // Decrementing b by 1 --&gt; b==3
-      --b;          // Decrementing b by 1 --&gt; b==2
+          <tr>
+            <td><code>int</code></td>
 
-      int c = b;    // c == 2;
+            <td><code>float</code></td>
 
-      b = ++a;      // Incrementing a by 1 --&gt;a==5, then assigning to b --&gt; b == 5
-      int e = a++;  // Assigning a to e --&gt; e==5, then incrementing a --&gt; a==6 
+            <td><code>float</code></td>
+          </tr>
 
-      a *= b;       // Multiplying a with b and assigning the result to a --&gt; a==30
+          <tr>
+            <td><code>char</code></td>
 
-      System.out.println("a=" + a);
-      System.out.println("b=" + b);
-      System.out.println("c=" + c);
-      System.out.println("e=" + e);</programlisting>
-            </answer>
-          </qandaentry>
-        </qandadiv>
-      </qandaset>
+            <td><code>byte</code></td>
+
+            <td><code>char</code></td>
+          </tr>
+        </informaltable>
+      </figure>
 
       <qandaset defaultlabel="qanda" xml:id="sw1QandaCircleArea">
         <title>Calculating a circle area</title>
@@ -2872,74 +2877,6 @@ Seconds:31</screen>
         </qandadiv>
       </qandaset>
 
-      <qandaset defaultlabel="qanda" xml:id="sd1QandaFloatPrecisionProblem">
-        <title>Representational float and double miracles</title>
-
-        <qandadiv>
-          <qandaentry>
-            <question>
-              <para>Consider and execute the following code snippet:</para>
-
-              <programlisting language="java">public static void main(String[] args) {
-  final double a = 0.7;
-  final double b = 0.9;
-  final double x = a + 0.1;
-  final double y = b - 0.1;
-  System.out.println(x == y);
-}</programlisting>
-
-              <para>Explain the result and supply a possible solution.</para>
-            </question>
-
-            <answer>
-              <para>The expression <code>x == y</code> evaluates to <code>false</code>. This surprising result is due to limited precision regarding both <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">float</code> and <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">double</code> IEEE representations: A given value will be approximated as close as possible.</para>
-
-              <para>Adding <code>System.out.println(x - y)</code> yields a value of -1.1102230246251565E-16 denoting the representational deviation of <code>x</code> and <code>y</code>.</para>
-
-              <para>Compare <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">float</code> and <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">double</code> values thus requires providing a representational error limit below which two values will be regarded as equal:</para>
-
-              <programlisting language="java">final double a = 0.7;
-final double b = 0.9;
-final double x = a + 0.1;
-final double y = b - 0.1;
-System.out.println(<link xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#abs-double-">Math.abs</link>(x - y) &lt; 1.E-14);</programlisting>
-
-              <para>This represents the boolean expression <inlineequation>
-                  <m:math display="inline">
-                    <m:mrow>
-                      <m:mrow>
-                        <m:mo>|</m:mo>
-
-                        <m:mrow>
-                          <m:mi>x</m:mi>
-
-                          <m:mo>-</m:mo>
-
-                          <m:mi>y</m:mi>
-                        </m:mrow>
-
-                        <m:mo>|</m:mo>
-                      </m:mrow>
-
-                      <m:mo>&lt;</m:mo>
-
-                      <m:msup>
-                        <m:mi>10</m:mi>
-
-                        <m:mrow>
-                          <m:mo>-</m:mo>
-
-                          <m:mi>14</m:mi>
-                        </m:mrow>
-                      </m:msup>
-                    </m:mrow>
-                  </m:math>
-                </inlineequation>.</para>
-            </answer>
-          </qandaentry>
-        </qandadiv>
-      </qandaset>
-
       <qandaset defaultlabel="qanda" xml:id="sd1QandaInterestSimple">
         <title>Interest calculation</title>
 
@@ -3034,6 +2971,352 @@ Capital after three years:233.31175902999993</screen>
         </qandadiv>
       </qandaset>
 
+      <qandaset defaultlabel="qanda" xml:id="sd1_qanda_opShortChar">
+        <title>Summing short and char</title>
+
+        <qandadiv>
+          <qandaentry>
+            <question>
+              <para>Consider the following snippet:</para>
+
+              <programlisting language="java">short s = 1;
+char c = 'A'; // ASCII 65
+System.out.println(s + c);</programlisting>
+
+              <para>Execution results in <computeroutput>66</computeroutput>. What is the <code>s+c</code> expression's type?</para>
+
+              <tip>
+                <para>Try to assign the expression to another variable and experiment using type candidates. Try to make an educated guess explaining the result.</para>
+              </tip>
+            </question>
+
+            <answer>
+              <para>Both <code>short</code> and <code>char</code> require two bytes in <xref linkend="glo_Java"/>. It is thus surprising that a mixed expression has got neither of both input types:</para>
+
+              <programlisting language="java">short s = 1;
+char c = 'A';
+short resultShort = s + c; // Incompatible types Required: short found: int
+char resultChar= s + c;    // Incompatible types Required: char found: int</programlisting>
+
+              <para>According to the compiler's error message the expression <code>s + c</code> is of type <code>int</code>. Why choosing a result type being twice the size of both input types?</para>
+
+              <para>The two input types have different ranges:</para>
+
+              <glosslist>
+                <glossentry>
+                  <glossterm><code>short</code></glossterm>
+
+                  <glossdef>
+                    <para>Signed integer value ranging from <inlineequation>
+                        <m:math display="inline">
+                          <m:mrow>
+                            <m:mo>-</m:mo>
+
+                            <m:msup>
+                              <m:mi>2</m:mi>
+
+                              <m:mi>15</m:mi>
+                            </m:msup>
+                          </m:mrow>
+                        </m:math>
+                      </inlineequation> to <inlineequation>
+                        <m:math display="inline">
+                          <m:mrow>
+                            <m:msup>
+                              <m:mi>2</m:mi>
+
+                              <m:mi>15</m:mi>
+                            </m:msup>
+
+                            <m:mo>-</m:mo>
+
+                            <m:mi>1</m:mi>
+                          </m:mrow>
+                        </m:math>
+                      </inlineequation>.</para>
+                  </glossdef>
+                </glossentry>
+
+                <glossentry>
+                  <glossterm><code>char</code></glossterm>
+
+                  <glossdef>
+                    <para>Unsigned integer value ranging from 0 to <inlineequation>
+                        <m:math display="inline">
+                          <m:mrow>
+                            <m:msup>
+                              <m:mi>2</m:mi>
+
+                              <m:mi>16</m:mi>
+                            </m:msup>
+
+                            <m:mo>-</m:mo>
+
+                            <m:mi>1</m:mi>
+                          </m:mrow>
+                        </m:math>
+                      </inlineequation>.</para>
+                  </glossdef>
+                </glossentry>
+              </glosslist>
+
+              <para>A promotion to <code>int</code> guarantees correct results in all circumstances.</para>
+            </answer>
+          </qandaentry>
+        </qandadiv>
+      </qandaset>
+
+      <figure xml:id="sd1_fig_OperatorExamples">
+        <title>Operator examples</title>
+
+        <programlisting language="java">i++;             i = i + 1;
+i--;             i = i - 1;
+i += b;          i = i + b;
+i %= 3;          i = i % 3;
+
+// boolean
+b != b;          b = !b; // true &lt;--&gt; false</programlisting>
+      </figure>
+
+      <qandaset defaultlabel="qanda" xml:id="sw1QandaGuessingResults">
+        <title>Guessing results</title>
+
+        <qandadiv>
+          <qandaentry>
+            <question>
+              <para>Consider the following code segment:</para>
+
+              <programlisting language="java" linenumbering="numbered">int a = 3;
+a++;          // Incrementing a by 1 --&gt; a==4
+
+int b = a;    // TODO
+
+b--;          // TODO
+--b;          // TODO
+
+int c = b;    // TODO
+
+b = ++a;      // TODO
+int e = a++;  // TODO
+
+a *= b;       // TODO
+
+System.out.println("a=" + a);
+System.out.println("b=" + b);
+System.out.println("c=" + c);
+System.out.println("e=" + e);</programlisting>
+
+              <para>We want to guess the expected result. Copy/paste the above code into a main() method body within your IDE of choice (probably Eclipse).</para>
+
+              <para><emphasis role="bold">Do not execute this code yet</emphasis> but replace the <quote>TODO</quote> strings by guessing the respective variable's value beforehand as in line 2:</para>
+
+              <para><computeroutput>a=...</computeroutput></para>
+
+              <para><computeroutput>b=...</computeroutput></para>
+
+              <para><computeroutput>c=...</computeroutput></para>
+
+              <para><computeroutput>e=...</computeroutput></para>
+
+              <para>After finishing your guesses execute your code and (possibly) start wailing about your success rate.</para>
+
+              <tip>
+                <para>Both <code>x++</code> (postfix notation) and <code>++x</code> (infix notation) are expressions themselves which might even be rewritten as <code>(x++)</code> and <code>(++x)</code> for the sake of clarity. The difference is not about operator precedence rules but simply about the values of these expressions when being assigned to other variables.</para>
+              </tip>
+            </question>
+
+            <answer>
+              <para>As inferred by the hint the biggest problem is about understanding postfix and infix notation of the operators <code>++</code> and <code>--</code>. A corresponding expression evaluates to:</para>
+
+              <itemizedlist>
+                <listitem>
+                  <para><code>a = x++</code> yields a ==x: The value of x <emphasis role="bold">before</emphasis> incrementing it.</para>
+                </listitem>
+
+                <listitem>
+                  <para><code>a = ++x</code> yields a ==(x + 1): The value of x <emphasis role="bold">after</emphasis> incrementing it.</para>
+                </listitem>
+              </itemizedlist>
+
+              <para>The rest is just obeying the <quote>due diligence</quote> rule set:</para>
+
+              <programlisting language="java">      int a = 3;
+      a++;          //Incrementing a by 1 --&gt; a==4
+
+      int b = a;    // Assigning value of a --&gt; b==4
+
+      b--;          // Decrementing b by 1 --&gt; b==3
+      --b;          // Decrementing b by 1 --&gt; b==2
+
+      int c = b;    // c == 2;
+
+      b = ++a;      // Incrementing a by 1 --&gt;a==5, then assigning to b --&gt; b == 5
+      int e = a++;  // Assigning a to e --&gt; e==5, then incrementing a --&gt; a==6 
+
+      a *= b;       // Multiplying a with b and assigning the result to a --&gt; a==30
+
+      System.out.println("a=" + a);
+      System.out.println("b=" + b);
+      System.out.println("c=" + c);
+      System.out.println("e=" + e);</programlisting>
+            </answer>
+          </qandaentry>
+        </qandadiv>
+      </qandaset>
+
+      <qandaset defaultlabel="qanda" xml:id="sd1_qanda_CleanOperatorMess">
+        <title>Cleaning up the mess</title>
+
+        <qandadiv>
+          <qandaentry>
+            <question>
+              <para>Some developers follow the rule <quote>It was hard to write, it should be hard to understand as well</quote>. One such proponent codes:</para>
+
+              <programlisting language="java">int a = 3, b = 6, c = 2;
+
+a += (a = 2) + ++a - ++b % c--;
+
+System.out.println("a = " + a + ", b = " + b + ", c = " + c);</programlisting>
+
+              <para>Execution results in:</para>
+
+              <screen>a = 7, b = 7, c = 1</screen>
+
+              <para>Decompose this cryptic assignment into a series of multiple elementary ones like e.g. <code>a++</code> by possibly introducing one or more helper variables. Thus your code shall become longer but better to understand.</para>
+
+              <tip>
+                <para>Read about evaluation of expressions and <link xlink:href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html#nutsandbolts-precedence">operator precedence</link>.</para>
+              </tip>
+            </question>
+
+            <answer>
+              <para>We start by modifying the line in question:</para>
+
+              <programlisting language="java">a = a + (a = 2) + ++a - ++b % c--;</programlisting>
+
+              <para>The expression on the right hand side will be decomposed by the <xref linkend="glo_Java"/> compiler into a sum of four subexpressions to be evaluated from left to right:</para>
+
+              <orderedlist>
+                <listitem>
+                  <para><code>a</code></para>
+                </listitem>
+
+                <listitem>
+                  <para><code>a=2</code></para>
+                </listitem>
+
+                <listitem>
+                  <para><code>++a</code></para>
+                </listitem>
+
+                <listitem>
+                  <para><code>++b % c--</code></para>
+
+                  <para>This one deserves further attention: The <code>%</code> operator will act on <code>b</code>'s value <emphasis role="bold">after</emphasis> incrementing (infix notation) and <code>c</code>'s value <emphasis role="bold">before</emphasis> decrementing (postfix notation).</para>
+                </listitem>
+              </orderedlist>
+
+              <para>We introduce a helper variable <code>sum</code> for decomposing our code into the above described four subexpressions:</para>
+
+              <programlisting language="java">int a = 3, b = 6, c = 2;
+
+int sum = a;  // First subexpression
+a = 2;
+sum += a;     // Second subexpression
+a++;
+sum += a;     // Third subexpression
+b++;
+sum -= b % c; // Fourth subexpression
+c--;
+
+a = sum;      // Assigning the result
+
+System.out.println("a = " + a + ", b = " + b + ", c = " + c);</programlisting>
+            </answer>
+          </qandaentry>
+        </qandadiv>
+      </qandaset>
+    </section>
+  </section>
+
+  <section xml:id="sd1_sect_langFundamental_exercises">
+    <title>Exercises</title>
+
+    <section xml:id="sw1SectSimpleExpressions">
+      <title>Simple expressions</title>
+
+      <qandaset defaultlabel="qanda" xml:id="sd1QandaFloatPrecisionProblem">
+        <title>Representational float and double miracles</title>
+
+        <qandadiv>
+          <qandaentry>
+            <question>
+              <para>Consider and execute the following code snippet:</para>
+
+              <programlisting language="java">public static void main(String[] args) {
+  final double a = 0.7;
+  final double b = 0.9;
+  final double x = a + 0.1; // 0.9
+  final double y = b - 0.1; // 0.9
+  System.out.println(x == y);
+}</programlisting>
+
+              <para>Which outcome do you expect? Explain the execution's result and propose a solution.</para>
+
+              <tip>
+                <para>You will have to replace the <quote>==</quote> operator by something more appropriate addressing limited arithmetic precision.</para>
+              </tip>
+            </question>
+
+            <answer>
+              <para>The expression <code>x == y</code> evaluates to <code>false</code>. This surprising result is due to limited precision regarding both <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">float</code> and <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">double</code> IEEE representations: A given value will be approximated as close as possible.</para>
+
+              <para>Adding <code>System.out.println(x - y)</code> yields a value of -1.1102230246251565E-16 denoting the representational deviation of <code>x</code> and <code>y</code>.</para>
+
+              <para>Comparing <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">float</code> and <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">double</code> values thus requires providing a representational distance limit below which two values will be regarded as equal:</para>
+
+              <programlisting language="java">final double a = 0.7;
+final double b = 0.9;
+final double x = a + 0.1;
+final double y = b - 0.1;
+System.out.println(<link xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#abs-double-">Math.abs</link>(x - y) &lt; 1.E-14);</programlisting>
+
+              <para>The last line represents the boolean expression <inlineequation>
+                  <m:math display="inline">
+                    <m:mrow>
+                      <m:mrow>
+                        <m:mo>|</m:mo>
+
+                        <m:mrow>
+                          <m:mi>x</m:mi>
+
+                          <m:mo>-</m:mo>
+
+                          <m:mi>y</m:mi>
+                        </m:mrow>
+
+                        <m:mo>|</m:mo>
+                      </m:mrow>
+
+                      <m:mo>&lt;</m:mo>
+
+                      <m:msup>
+                        <m:mi>10</m:mi>
+
+                        <m:mrow>
+                          <m:mo>-</m:mo>
+
+                          <m:mi>14</m:mi>
+                        </m:mrow>
+                      </m:msup>
+                    </m:mrow>
+                  </m:math>
+                </inlineequation>. So two values will be regarded as equal if their mutual distance is less than </para>
+            </answer>
+          </qandaentry>
+        </qandadiv>
+      </qandaset>
+
       <qandaset defaultlabel="qanda" xml:id="sw1QandaByteOverflow">
         <title>Strange things happen</title>
 
@@ -3306,7 +3589,7 @@ System.out.println("New value=" + a);</programlisting>
 
               <para><computeroutput>The final local variable pi cannot be assigned. It must be blank and not using a compound assignment</computeroutput></para>
 
-              <para>Note the second <code  xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4">final</code> modification in the definition of our variable <code>area</code> to avoid erroneous redefinitions as well.</para>
+              <para>Note the second <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4">final</code> modification in the definition of our variable <code>area</code> to avoid erroneous redefinitions as well.</para>
 
               <para>As a rule of thumb: Whenever you intend a variable not to change after an initial assignment use <code xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4">final</code> declaring it to remain constant.</para>
             </answer>