aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2025-08-06 15:34:58 +0200
committerJ08nY2025-08-06 15:55:02 +0200
commitcd064d67da2a44d5e42cdbe36c58ed005d0e186f (patch)
tree2eb39964795a2091f0c3ed033139eb1726651e7d
parent8ff2846df2388984a7954584218a200904a3ed1f (diff)
downloadECTester-cd064d67da2a44d5e42cdbe36c58ed005d0e186f.tar.gz
ECTester-cd064d67da2a44d5e42cdbe36c58ed005d0e186f.tar.zst
ECTester-cd064d67da2a44d5e42cdbe36c58ed005d0e186f.zip
Add unravelling diagram.
-rw-r--r--analysis/scalarmults/README.md2
-rw-r--r--analysis/scalarmults/simulate.ipynb5
-rw-r--r--analysis/scalarmults/unravelling.svg618
3 files changed, 624 insertions, 1 deletions
diff --git a/analysis/scalarmults/README.md b/analysis/scalarmults/README.md
new file mode 100644
index 0000000..d66b113
--- /dev/null
+++ b/analysis/scalarmults/README.md
@@ -0,0 +1,2 @@
+# Unravelling scalar multipliers
+![](unravelling.svg)
diff --git a/analysis/scalarmults/simulate.ipynb b/analysis/scalarmults/simulate.ipynb
index cad0c2a..3db4307 100644
--- a/analysis/scalarmults/simulate.ipynb
+++ b/analysis/scalarmults/simulate.ipynb
@@ -17,7 +17,10 @@
"This notebook explores the statistical differences in error rates of scalar multipliers computing on low-order base points\n",
"to reverse-engineer the scalar multipliers and countermeasures, even in the presence of scalar randomization. This\n",
"is possible because we do not care about the actual multiples that happen for any given scalar, but rather the statistical\n",
- "properties, i.e.: For random scalars, how probable is an error for a point of low order, for example, 5?"
+ "properties, i.e.: For random scalars, how probable is an error for a point of low order, for example, 5?\n",
+ "\n",
+ "Examine the figure below that shows the big picture.\n",
+ "![](unravelling.svg)"
]
},
{
diff --git a/analysis/scalarmults/unravelling.svg b/analysis/scalarmults/unravelling.svg
new file mode 100644
index 0000000..9c6aaf7
--- /dev/null
+++ b/analysis/scalarmults/unravelling.svg
@@ -0,0 +1,618 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="148mm"
+ viewBox="0 0 210 148"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
+ sodipodi:docname="unravelling.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#111111"
+ borderopacity="1"
+ inkscape:showpageshadow="0"
+ inkscape:pageopacity="0"
+ inkscape:pagecheckerboard="1"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ inkscape:zoom="2.1813126"
+ inkscape:cx="85.040539"
+ inkscape:cy="110.71315"
+ inkscape:window-width="1440"
+ inkscape:window-height="829"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g3"
+ showguides="false" />
+ <defs
+ id="defs1">
+ <marker
+ style="overflow:visible"
+ id="marker15"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Wide arrow"
+ markerWidth="1"
+ markerHeight="1"
+ viewBox="0 0 1 1"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt"
+ d="M 3,-3 0,0 3,3"
+ transform="rotate(180,0.125,0)"
+ sodipodi:nodetypes="ccc"
+ id="path15" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="ArrowWide"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Wide arrow"
+ markerWidth="1"
+ markerHeight="1"
+ viewBox="0 0 1 1"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt"
+ d="M 3,-3 0,0 3,3"
+ transform="rotate(180,0.125,0)"
+ sodipodi:nodetypes="ccc"
+ id="path1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Triangle-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Triangle arrow"
+ markerWidth="1"
+ markerHeight="1"
+ viewBox="0 0 1 1"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Triangle-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Triangle arrow"
+ markerWidth="1"
+ markerHeight="1"
+ viewBox="0 0 1 1"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135-3-5" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Triangle-9-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Triangle arrow"
+ markerWidth="1"
+ markerHeight="1"
+ viewBox="0 0 1 1"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Triangle-9-7-6"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Triangle arrow"
+ markerWidth="1"
+ markerHeight="1"
+ viewBox="0 0 1 1"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135-3-5-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Triangle-9-0"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Triangle arrow"
+ markerWidth="1"
+ markerHeight="1"
+ viewBox="0 0 1 1"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135-3-6" />
+ </marker>
+ </defs>
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9);paint-order:normal"
+ d="m 36.162513,107.2091 c -10e-6,-9.397124 -10e-6,-9.397124 -10e-6,-9.397124"
+ id="path8-4" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9-0);paint-order:normal"
+ d="m 121.83629,107.2091 c -1e-5,-9.397122 -1e-5,-9.397122 -1e-5,-9.397122"
+ id="path8-4-5" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9-7);paint-order:normal"
+ d="m 36.162493,43.785996 c 1e-5,9.397125 1e-5,9.397125 1e-5,9.397125"
+ id="path8-4-6" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9-7-6);paint-order:normal"
+ d="m 121.83627,43.785996 c 1e-5,9.397125 1e-5,9.397125 1e-5,9.397125"
+ id="path8-4-6-3" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9-1);paint-order:normal"
+ d="m 72.942541,76.354443 c 9.397124,-1e-5 9.397124,-1e-5 9.397124,-1e-5"
+ id="path8-4-9" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g3"
+ transform="translate(7.7874229,3.2630488)"
+ inkscape:label="scalarmult + ctr">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.765;stroke-dasharray:none"
+ id="rect3"
+ width="56.486214"
+ height="32.202419"
+ x="-0.26395428"
+ y="5.015131"
+ inkscape:label="rect3" />
+ <text
+ xml:space="preserve"
+ style="font-size:2.82223px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';text-align:start;letter-spacing:0px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dashoffset:4.62614"
+ x="27.950924"
+ y="16.177456"
+ id="text1"><tspan
+ sodipodi:role="line"
+ id="tspan1"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;text-anchor:middle;stroke-width:0.265"
+ x="27.950924"
+ y="16.177456">Scalar multiplier</tspan><tspan
+ sodipodi:role="line"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;text-anchor:middle;stroke-width:0.265"
+ x="27.950924"
+ y="23.233006"
+ id="tspan2">+</tspan><tspan
+ sodipodi:role="line"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;text-anchor:middle;stroke-width:0.265"
+ x="27.950924"
+ y="30.288557"
+ id="tspan3">Countermeasure</tspan></text>
+ </g>
+ <g
+ id="g3-7"
+ transform="translate(93.857123,3.2630488)"
+ inkscape:label="error model">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;white-space:pre;inline-size:46.4756;display:inline;fill:#000000;stroke-width:0.264583"
+ x="42.141571"
+ y="22.172159"
+ id="text1-5"
+ transform="translate(-30.047743,1.0608465)"><tspan
+ x="42.141571"
+ y="22.172159"
+ id="tspan4">Error model</tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.765;stroke-dasharray:none"
+ id="rect3-9"
+ width="56.486214"
+ height="32.202419"
+ x="-0.26395428"
+ y="5.015131"
+ inkscape:label="rect3" />
+ </g>
+ <g
+ id="g8"
+ transform="translate(-55.033702,56.139921)"
+ inkscape:label="scalars + masks">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765;stroke-dasharray:none"
+ x="91.179276"
+ y="65.765251"
+ id="text4"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765"
+ x="91.179276"
+ y="65.765251"
+ id="tspan7">Random</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765"
+ x="91.179276"
+ y="72.820801"
+ id="tspan8">scalars &amp; masks</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765"
+ x="91.179276"
+ y="79.87635"
+ id="tspan5" /></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-dasharray:none"
+ id="rect8"
+ width="55.694355"
+ height="25.603561"
+ x="63.34903"
+ y="54.37458" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal"
+ x="70.961243"
+ y="59.899075"
+ id="text12-3"><tspan
+ sodipodi:role="line"
+ id="tspan12-6"
+ style="font-size:4.23333px;fill:#000000;stroke:none;stroke-width:0.765"
+ x="70.961243"
+ y="59.899075">1000x</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.704251;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal"
+ id="rect11-4-9"
+ width="15.585739"
+ height="8.0221586"
+ x="63.34903"
+ y="54.37458" />
+ </g>
+ <g
+ id="g8-8"
+ transform="translate(30.640072,56.139921)"
+ inkscape:label="base point orders">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765;stroke-dasharray:none"
+ x="91.049454"
+ y="68.643913"
+ id="text4-4"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765"
+ x="91.049454"
+ y="68.643913"
+ id="tspan5-3">Base point orders</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-dasharray:none"
+ id="rect8-6"
+ width="55.694355"
+ height="25.603561"
+ x="63.34903"
+ y="54.37458" />
+ </g>
+ <g
+ id="g11"
+ transform="translate(-74.189837,58.82259)"
+ inkscape:label="multiples graph">
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.764999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal"
+ id="rect9"
+ width="64.380333"
+ height="32.584919"
+ x="78.16217"
+ y="0.38249949" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal"
+ x="110.437"
+ y="11.086965"
+ id="text9"><tspan
+ sodipodi:role="line"
+ id="tspan9"
+ style="fill:#000000;stroke:none;stroke-width:0.765"
+ x="110.437"
+ y="11.086965">Symbolic</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke:none;stroke-width:0.765"
+ x="110.437"
+ y="18.142515"
+ id="tspan10">scalar multiplication</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke:none;stroke-width:0.765"
+ x="110.437"
+ y="25.198065"
+ id="tspan11">graphs</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal"
+ x="85.774384"
+ y="5.9069943"
+ id="text12"><tspan
+ sodipodi:role="line"
+ id="tspan12"
+ style="font-size:4.23333px;fill:#000000;stroke:none;stroke-width:0.765"
+ x="85.774384"
+ y="5.9069943">1000x</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.704251;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal"
+ id="rect11-4-2"
+ width="15.585739"
+ height="8.0221586"
+ x="78.16217"
+ y="0.38249949" />
+ </g>
+ <g
+ id="g11-6"
+ transform="translate(11.483942,59.679476)"
+ inkscape:label="error probs">
+ <path
+ style="fill:none;stroke:#808080;stroke-width:0.765;stroke-linejoin:round;stroke-dasharray:2.29499996,2.29499996;stroke-dashoffset:1.22399998;stroke-opacity:1"
+ d="M 153.70476,92.52261 V 60.186257"
+ id="path13"
+ transform="translate(-11.483942,-59.679476)" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.780219;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal"
+ id="rect9-5"
+ width="118.51546"
+ height="32.321133"
+ x="78.29406"
+ y="0.51439196" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal"
+ x="110.54989"
+ y="14.614739"
+ id="text17"><tspan
+ sodipodi:role="line"
+ id="tspan17"
+ style="font-size:5.64444px;stroke-width:0.765"
+ x="110.54989"
+ y="14.614739">Error probability</tspan><tspan
+ sodipodi:role="line"
+ style="font-size:5.64444px;stroke-width:0.765"
+ x="110.54989"
+ y="21.67029"
+ id="tspan18">for base point order q</tspan></text>
+ <g
+ id="g17"
+ transform="translate(6.2227239,-1.2849752)">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.447839;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:1.224;stroke-opacity:1;marker-start:url(#marker15);marker-end:url(#ArrowWide)"
+ d="m 147.13481,5.5377021 c 0,0 0,0 0,21.1584829 h 40.26656"
+ id="path14" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ d="m 149.03178,9.5726997 3.99037,0.2574423 4.18345,0.901049 2.25263,10.362083 1.60902,-8.881784 3.86164,1.158494 1.41594,7.980733 1.73774,-6.114272 2.31699,0.965411 1.67338,3.797284 v 0 l 2.33154,1.806072 2.81732,1.21974 6.8866,0.707112"
+ id="path16"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-9"
+ cx="153.02216"
+ cy="9.830142"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-8"
+ cx="157.2056"
+ cy="10.731191"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-85"
+ cx="159.45824"
+ cy="21.093273"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-88"
+ cx="161.06725"
+ cy="12.21149"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-6"
+ cx="164.92889"
+ cy="13.369984"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-86"
+ cx="166.34483"
+ cy="21.350718"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-89"
+ cx="168.08257"
+ cy="15.236445"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-3"
+ cx="170.39957"
+ cy="16.201857"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-2"
+ cx="172.07294"
+ cy="19.99914"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-94"
+ cx="174.40448"
+ cy="21.805212"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-4"
+ cx="177.2218"
+ cy="23.024952"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-81"
+ cx="180.6651"
+ cy="23.378508"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-68"
+ cx="184.1084"
+ cy="23.732063"
+ r="0.32199472" />
+ <circle
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ id="path17-5"
+ cx="149.03178"
+ cy="9.5726995"
+ r="0.32199472" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ x="141.81168"
+ y="25.582594"
+ id="text19"><tspan
+ sodipodi:role="line"
+ id="tspan19"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265"
+ x="141.81168"
+ y="25.582594">0%</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ x="144.97337"
+ y="10.40079"
+ id="text19-5"
+ transform="translate(-6.0966364,-0.02140396)"><tspan
+ sodipodi:role="line"
+ id="tspan19-0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265"
+ x="144.97337"
+ y="10.40079"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px"
+ id="tspan20"
+ dx="0 0 0"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:-0.293687px"
+ id="tspan22">1</tspan>00</tspan>%</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ x="164.39456"
+ y="31.797026"
+ id="text19-58"><tspan
+ sodipodi:role="line"
+ id="tspan19-6"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265"
+ x="164.39456"
+ y="31.797026">q</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ x="152.23193"
+ y="29.905777"
+ id="text19-9"><tspan
+ sodipodi:role="line"
+ id="tspan19-08"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265"
+ x="152.23193"
+ y="29.905777">3</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ x="156.5733"
+ y="29.877554"
+ id="text19-9-1"><tspan
+ sodipodi:role="line"
+ id="tspan19-08-9"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265"
+ x="156.5733"
+ y="29.877554">5</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ x="148.22174"
+ y="29.905777"
+ id="text19-2"><tspan
+ sodipodi:role="line"
+ id="tspan19-4"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265"
+ x="148.22174"
+ y="29.905777">2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1"
+ x="159.93271"
+ y="29.877554"
+ id="text19-9-1-8"><tspan
+ sodipodi:role="line"
+ id="tspan19-08-9-0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265"
+ x="159.93271"
+ y="29.877554">...</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g13"
+ inkscape:label="impl">
+ <rect
+ style="fill:none;stroke:#808080;stroke-width:0.865;stroke-linejoin:round;stroke-dasharray:2.595, 2.595;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6"
+ width="210"
+ height="49.842842"
+ x="-11.483942"
+ y="-59.679478"
+ ry="4.7425818"
+ transform="translate(11.483942,59.679475)" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#757575;stroke-width:0.865;stroke-linejoin:round;stroke-dasharray:2.595, 2.595;stroke-dashoffset:0;stroke-opacity:1"
+ x="155.13759"
+ y="45.436996"
+ id="text6"><tspan
+ sodipodi:role="line"
+ id="tspan6"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#808080;stroke:none;stroke-width:0.865"
+ x="155.13759"
+ y="45.436996">Implementation</tspan></text>
+ </g>
+ </g>
+</svg>