From ccaaaa8c62ddfb5f036ba8e7c86cd15f387416a0 Mon Sep 17 00:00:00 2001
From: Orestis <orestis.malaspinas@pm.me>
Date: Mon, 2 May 2022 23:52:14 +0200
Subject: [PATCH] modif insertion et debut split

---
 slides/cours_23.md                   | 322 +++++++++++++++++++++++++
 slides/figs/barbres_ordre2_supp1.svg | 340 +++++++++++++++++++++++++++
 slides/figs/barbres_ordre2_supp2.svg | 329 ++++++++++++++++++++++++++
 3 files changed, 991 insertions(+)
 create mode 100644 slides/cours_23.md
 create mode 100644 slides/figs/barbres_ordre2_supp1.svg
 create mode 100644 slides/figs/barbres_ordre2_supp2.svg

diff --git a/slides/cours_23.md b/slides/cours_23.md
new file mode 100644
index 0000000..85022b1
--- /dev/null
+++ b/slides/cours_23.md
@@ -0,0 +1,322 @@
+---
+title: "B-Arbres"
+date: "2022-04-13"
+patat:
+  eval:
+    tai:
+      command: fish
+      fragment: false
+      replace: true
+    ccc:
+      command: fish
+      fragment: false
+      replace: true
+  images:
+    backend: auto
+---
+
+# Rappel: Les B-arbres
+
+## Pourquoi utiliser un B-arbre?
+
+. . .
+
+## À quoi ressemble un B-arbre?
+
+. . .
+
+## Qu'est-ce qu'un B-arbre d'ordre $n$
+
+* Chaque page d'un arbre contient au plus $2\cdot n$ *clés*;
+* Chaque page (excepté la racine) contient au moins $n$ clés;
+* Chaque page qui contient $m$ clés contient soit:
+    * $0$ descendants;
+    * $m+1$ descendants.
+* Toutes les pages terminales apparaissent au même niveau.
+
+
+# Rappel: Les B-arbres
+
+## Quelques propriétés
+
+* Dans chaque noeud les clés sont **triées**.
+* Chaque page contient au plus $n$ noeuds: check;
+* Chaque noeud avec $m$ clés a $m+1$ descendants;
+* Toutes les feuilles apparaissent au même niveau.
+
+# Les B-arbres
+
+## Exemple de recherche: trouver `32`
+
+![B-arbre d'ordre 2.](figs/barbres_exemple.png)
+ 
+. . .
+
+* Si `n` plus petit que la 1e clé ou plus grand que la dernière descendre.
+* Sinon parcourir (par bissection ou séquentiellement) jusqu'à trouver ou descendre entre 2 éléments.
+
+# Les B-arbres
+
+## La recherche de la clé `C` algorithme 
+
+0. En partant de la racine.
+1. Si on est dans une feuille:
+    * Si la `C` est dans une page, retourner la page;
+    * Sinon c'est perdu.
+2. Sinon:
+    * Tant que `C > page` passer à la page suivante
+    * Descendre
+
+
+# Les B-arbres
+
+## Exercice: insérer `22, 45, 50, 5, 32, 55, 60, 41` dans l'arbre d'ordre 2
+
+![](figs/barbres_ex1.png)
+
+. . .
+
+![](figs/barbres_ex5.png)
+
+# Les B-arbres
+
+## L'algorithme d'insertion
+
+0. Rechercher la feuille (la page a aucun enfant) où insérer;
+1. Si la page n'est pas pleine insérer dans l'ordre croissant.
+2. Si la page est pleine:
+    1. On décale les éléments plus grand que `N`;
+    2. On insère `N` dans la place "vide";
+    3. On trouve la valeur médiane `M` de la page (quel indice?);
+    4. On crée une nouvelle page de droite;
+    5. On copie les valeur à droite de `M` dans la nouvelle page;
+    6. On promeut `M` dans la page du dessus;
+    7. On connecte le pointeur de gauche de `M` et de droite de `M` avec l'ancienne et la nouvelle page respectivement.
+
+# Les B-arbres
+
+## Pseudo-code structure de données (3min, matrix)?
+
+. . .
+
+```C
+struct page
+    entier ordre, nb
+    element tab[2*ordre + 2]
+```
+
+```C
+struct element
+    int clé
+    page pg
+```
+
+# Les B-arbres
+
+\footnotesize
+
+## Les fonctions utilitaires (5min matrix)
+
+```C
+booléen est_feuille(page)     // la page est elle une feuille?
+entier position(page, valeur) // à quelle indice on insère?
+booléen est_dans_page(page, valeur) // la valeur est dans la page
+```
+
+. . .
+
+```C
+booléen est_feuille(page) 
+    retourne (page.tab[0] == vide)
+entier position(page, valeur)
+    i = 0
+    tant que i < page.nb && val >= page.tab[i]
+        i += 1
+    retourne i
+booléen est_dans_page(page, valeur)
+    i = position(page, valeur)
+    retourne (i > 0 && page.tab[i] == valeur)
+```
+
+# Les B-arbres
+
+\footnotesize
+
+## Les fonctions utilitaires (5min matrix)
+
+```C
+page nouvelle_page(ordre)  // creer une page
+rien liberer_memoire(page) // liberer tout un arbre!
+```
+. . .
+
+```C
+page nouvelle_page(ordre)
+    page = allouer(page)
+    page.ordre = ordre
+    page.nb = 0
+    page.tab = allouer(2*ordre+2)
+    retourner page
+rien liberer_memoire(page)
+    si est_feuille(page)
+        liberer(page.tab)
+        liberer(page)
+    sinon
+        pour fille dans page.tab
+            liberer_memoire(fille)
+        liberer(page.tab)
+        liberer(page)
+```
+
+# Les B-arbres
+
+## Les fonctions (5min matrix)
+
+```C
+page recherche(page, valeur) // retourner la page contenant
+                             // la valeur ou vide 
+```
+
+. . .
+
+```C
+page recherche(page, valeur)
+    si est_dans_page(page, valeur)
+        retourne page
+    sinon si est_feuille(page) && !est_dans_page(page, valeur)
+        retourne vide
+    sinon
+        recherche(page.tab[position(page, valeur)], valeur)
+```
+
+# Les B-arbres
+
+## Les fonctions
+
+```C
+page inserer(page, valeur) // inserer une valeur
+```
+
+. . .
+
+```C
+page inserer(page, valeur)
+    element = nouvel_element(valeur)
+    inserer_element(page, element) // on change elmement pour savoir s'il faut le remonter
+    si element.page != vide
+        page = ajouter_niveau(page, element) // si on atteint le sommet!
+    retourne page
+```
+
+# Les B-arbres
+
+## Les fonctions
+
+```C
+rien inserer_element(page, element) // inserer un element et voir s'il remonte
+```
+
+. . .
+
+```C
+rien inserer_element(page, element)
+    si est_feuille(page)
+        placer(page, element)
+    sinon
+        sous_page = page.tab[position(page, element)].page
+        inserer_element(sous_page, element)
+        si element.page != vide
+            placer(page, element)
+```
+
+# Les B-arbres
+
+## Les fonctions (5min matrix)
+
+```C
+rien placer(page, element) // inserer un élément
+```
+
+. . .
+
+```C
+rien placer(page, element)
+    i = position(page, element.clé)
+    pour i de 2*page.ordre à i+1
+        page.tab[i+1] = page.tab[i]
+    page.tab[i+1] = element
+    page.nb += 1
+    si page.nb > 2*page.ordre
+        scinder(page, element)
+```
+
+# Les B-arbres
+
+## Les fonctions (5min matrix)
+
+```C
+rien scinder(page, element) // casser une page et remonter
+```
+
+. . .
+
+```C
+rien scinder(page, element)
+    new_page = new_page(page.ordre)
+    new_page.nb = page.ordre
+    pour i de 0 à ordre inclu
+        new_page.tab[i] = page.tab[i+ordre+1]
+    element.clé = page.tab[ordre+1].clé
+    element.page = new_page
+```
+
+# Les B-arbres
+
+## Les fonctions (5min matrix)
+
+```C
+page ajouter_niveau(page, element) // si on remonte à la racine...
+                                   // on doit créer une nouvelle racine
+```
+
+. . .
+
+```C
+page ajouter_niveau(page, element) 
+    tmp = nouvelle_page(page.ordre)
+    tmp.tab[0].page = page
+    tmp.tab[1].clé = element.clé
+    tmp.tab[1].page = element.page
+    retourne tmp
+```
+
+# Les B-arbres: suppression
+
+## Cas simplissime
+
+![Suppression de 25.](figs/barbres_ordre2_supp1.svg){width=80%}
+
+. . .
+
+![25 supprimé, on décale juste 27.](figs/barbres_ordre2_supp2.svg){width=80%}
+
+
+<!-- # Les B-arbres -->
+
+<!-- ## Structure de données en C (3min, matrix) -->
+
+<!-- . . . -->
+
+<!-- ```C -->
+<!-- typedef struct _page { -->
+<!--     int order, nb; -->
+<!--     struct _element *tab; -->
+<!-- } page; -->
+<!-- ``` -->
+
+<!-- ```C -->
+<!-- typedef struct element { -->
+<!--     int key; -->
+<!--     struct _page *pg; -->
+<!-- } element; -->
+<!-- ``` -->
diff --git a/slides/figs/barbres_ordre2_supp1.svg b/slides/figs/barbres_ordre2_supp1.svg
new file mode 100644
index 0000000..ba649d5
--- /dev/null
+++ b/slides/figs/barbres_ordre2_supp1.svg
@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="291.39478mm"
+   height="90.311111mm"
+   viewBox="0 0 291.39478 90.311113"
+   version="1.1"
+   id="svg5"
+   inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+   sodipodi:docname="barbres_ordre2_supp1.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="namedview7"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:document-units="mm"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="1.1737386"
+     inkscape:cx="672.21098"
+     inkscape:cy="174.22959"
+     inkscape:window-width="944"
+     inkscape:window-height="1022"
+     inkscape:window-x="14"
+     inkscape:window-y="44"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid824"
+       originx="0.17639326"
+       originy="-15.698609" />
+  </sodipodi:namedview>
+  <defs
+     id="defs2" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0.17639426,-15.698611)">
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848"
+       width="26.458332"
+       height="26.458332"
+       x="74.083328"
+       y="15.875" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6"
+       width="26.458332"
+       height="26.458332"
+       x="105.83333"
+       y="15.874999" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;fill:#020000;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="80.349121"
+       y="32.956631"
+       id="text5839"><tspan
+         sodipodi:role="line"
+         id="tspan5837"
+         style="fill:#020000;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="80.349121"
+         y="32.956631">10</tspan></text>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240"
+       width="5.2916665"
+       height="26.458332"
+       x="100.54166"
+       y="15.874999" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-7"
+       width="5.2916665"
+       height="26.458332"
+       x="68.791664"
+       y="15.875" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5"
+       width="5.2919998"
+       height="26.458332"
+       x="132.29167"
+       y="15.874999" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2"
+       width="26.458332"
+       height="26.458332"
+       x="137.58334"
+       y="15.875001" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9"
+       width="5.2919998"
+       height="26.458332"
+       x="164.0417"
+       y="15.875001" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-7"
+       width="26.458332"
+       height="26.458332"
+       x="169.33334"
+       y="15.875001" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-0"
+       width="5.2919998"
+       height="26.458332"
+       x="195.79169"
+       y="15.875001" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-9"
+       width="26.458332"
+       height="26.458332"
+       x="68.791306"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-3"
+       width="5.2919998"
+       height="26.458332"
+       x="95.249664"
+       y="79.375" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-7-6"
+       width="26.458332"
+       height="26.458332"
+       x="100.54131"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-0-0"
+       width="5.2919998"
+       height="26.458332"
+       x="126.99965"
+       y="79.375" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;fill:#040000;fill-opacity:1;stroke-width:0.264583"
+       x="112.21022"
+       y="32.903568"
+       id="text8608-2"><tspan
+         sodipodi:role="line"
+         id="tspan8606-6"
+         style="fill:#040000;fill-opacity:1;stroke-width:0.264583"
+         x="112.21022"
+         y="32.903568">15</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10.5831px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;fill:#040000;fill-opacity:1;stroke-width:0.264579"
+       x="144.02982"
+       y="32.97282"
+       id="text8608-2-7"
+       transform="scale(0.9999849,1.0000151)"><tspan
+         sodipodi:role="line"
+         id="tspan8606-6-9"
+         style="fill:#040000;fill-opacity:1;stroke-width:0.264579"
+         x="144.02982"
+         y="32.97282">30</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-9"
+       width="26.458332"
+       height="26.458332"
+       x="5.291666"
+       y="79.375" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-3"
+       width="26.458332"
+       height="26.458332"
+       x="37.041664"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-1"
+       width="5.2916665"
+       height="26.458332"
+       x="31.749994"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-7-8"
+       width="5.2916665"
+       height="26.458332"
+       x="-5.7529296e-06"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-7"
+       width="5.2916665"
+       height="26.458332"
+       x="63.500008"
+       y="79.375" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+       x="11.629802"
+       y="96.456635"
+       id="text17588"><tspan
+         sodipodi:role="line"
+         id="tspan17586"
+         style="stroke-width:0.264583"
+         x="11.629802"
+         y="96.456635">13</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+       x="43.253193"
+       y="96.4618"
+       id="text17588-2"><tspan
+         sodipodi:role="line"
+         id="tspan17586-3"
+         style="stroke-width:0.264583"
+         x="43.253193"
+         y="96.4618">14</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-9-9"
+       width="26.458332"
+       height="26.458332"
+       x="164.04167"
+       y="79.375" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-3-2"
+       width="26.458332"
+       height="26.458332"
+       x="195.79167"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-1-3"
+       width="5.2916665"
+       height="26.458332"
+       x="190.5"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-7-8-7"
+       width="5.2916665"
+       height="26.458332"
+       x="158.75"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-7-5"
+       width="5.2916665"
+       height="26.458332"
+       x="222.25002"
+       y="79.375" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;fill:#000000;fill-opacity:1;stroke-width:0.264583"
+       x="170.50125"
+       y="96.382401"
+       id="text17588-9"><tspan
+         sodipodi:role="line"
+         id="tspan17586-2"
+         style="fill:#000000;fill-opacity:1;stroke-width:0.264583"
+         x="170.50125"
+         y="96.382401">20</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 100.54166,42.333334 18.520832,79.375001"
+       id="path19781"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 137.58333,42.333334 174.625,79.375"
+       id="path19783" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-6"
+       width="26.458332"
+       height="26.458332"
+       x="227.54167"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-2"
+       width="5.2919998"
+       height="26.458332"
+       x="254.00003"
+       y="79.375" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-7-61"
+       width="26.458332"
+       height="26.458332"
+       x="259.29166"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-0-8"
+       width="5.2919998"
+       height="26.458332"
+       x="285.75"
+       y="79.375" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+       x="202.36235"
+       y="96.382401"
+       id="text17588-7"><tspan
+         sodipodi:role="line"
+         id="tspan17586-5"
+         style="stroke-width:0.264583"
+         x="202.36235"
+         y="96.382401">25</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+       x="234.10202"
+       y="96.457329"
+       id="text17588-92"><tspan
+         sodipodi:role="line"
+         id="tspan17586-28"
+         style="stroke-width:0.264583"
+         x="234.10202"
+         y="96.457329">27</tspan></text>
+  </g>
+</svg>
diff --git a/slides/figs/barbres_ordre2_supp2.svg b/slides/figs/barbres_ordre2_supp2.svg
new file mode 100644
index 0000000..30a827e
--- /dev/null
+++ b/slides/figs/barbres_ordre2_supp2.svg
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="291.39478mm"
+   height="90.311111mm"
+   viewBox="0 0 291.39478 90.311113"
+   version="1.1"
+   id="svg5"
+   inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+   sodipodi:docname="barbres_ordre2_supp2.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="namedview7"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:document-units="mm"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="1.1737386"
+     inkscape:cx="672.21098"
+     inkscape:cy="174.22959"
+     inkscape:window-width="1920"
+     inkscape:window-height="1080"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid824"
+       originx="0.17639326"
+       originy="-15.698609" />
+  </sodipodi:namedview>
+  <defs
+     id="defs2" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0.17639426,-15.698611)">
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848"
+       width="26.458332"
+       height="26.458332"
+       x="74.083328"
+       y="15.875" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6"
+       width="26.458332"
+       height="26.458332"
+       x="105.83333"
+       y="15.874999" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;fill:#020000;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="80.349121"
+       y="32.956631"
+       id="text5839"><tspan
+         sodipodi:role="line"
+         id="tspan5837"
+         style="fill:#020000;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="80.349121"
+         y="32.956631">10</tspan></text>
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240"
+       width="5.2916665"
+       height="26.458332"
+       x="100.54166"
+       y="15.874999" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-7"
+       width="5.2916665"
+       height="26.458332"
+       x="68.791664"
+       y="15.875" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5"
+       width="5.2919998"
+       height="26.458332"
+       x="132.29167"
+       y="15.874999" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2"
+       width="26.458332"
+       height="26.458332"
+       x="137.58334"
+       y="15.875001" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9"
+       width="5.2919998"
+       height="26.458332"
+       x="164.0417"
+       y="15.875001" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-7"
+       width="26.458332"
+       height="26.458332"
+       x="169.33334"
+       y="15.875001" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-0"
+       width="5.2919998"
+       height="26.458332"
+       x="195.79169"
+       y="15.875001" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-9"
+       width="26.458332"
+       height="26.458332"
+       x="68.791306"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-3"
+       width="5.2919998"
+       height="26.458332"
+       x="95.249664"
+       y="79.375" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-7-6"
+       width="26.458332"
+       height="26.458332"
+       x="100.54131"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-0-0"
+       width="5.2919998"
+       height="26.458332"
+       x="126.99965"
+       y="79.375" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;fill:#040000;fill-opacity:1;stroke-width:0.264583"
+       x="112.21022"
+       y="32.903568"
+       id="text8608-2"><tspan
+         sodipodi:role="line"
+         id="tspan8606-6"
+         style="fill:#040000;fill-opacity:1;stroke-width:0.264583"
+         x="112.21022"
+         y="32.903568">15</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10.5831px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;fill:#040000;fill-opacity:1;stroke-width:0.264579"
+       x="144.02982"
+       y="32.97282"
+       id="text8608-2-7"
+       transform="scale(0.9999849,1.0000151)"><tspan
+         sodipodi:role="line"
+         id="tspan8606-6-9"
+         style="fill:#040000;fill-opacity:1;stroke-width:0.264579"
+         x="144.02982"
+         y="32.97282">30</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-9"
+       width="26.458332"
+       height="26.458332"
+       x="5.291666"
+       y="79.375" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-3"
+       width="26.458332"
+       height="26.458332"
+       x="37.041664"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-1"
+       width="5.2916665"
+       height="26.458332"
+       x="31.749994"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-7-8"
+       width="5.2916665"
+       height="26.458332"
+       x="-5.7529296e-06"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-7"
+       width="5.2916665"
+       height="26.458332"
+       x="63.500008"
+       y="79.375" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+       x="11.629802"
+       y="96.456635"
+       id="text17588"><tspan
+         sodipodi:role="line"
+         id="tspan17586"
+         style="stroke-width:0.264583"
+         x="11.629802"
+         y="96.456635">13</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+       x="43.253193"
+       y="96.4618"
+       id="text17588-2"><tspan
+         sodipodi:role="line"
+         id="tspan17586-3"
+         style="stroke-width:0.264583"
+         x="43.253193"
+         y="96.4618">14</tspan></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-9-9"
+       width="26.458332"
+       height="26.458332"
+       x="164.04167"
+       y="79.375" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-3-2"
+       width="26.458332"
+       height="26.458332"
+       x="195.79167"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-1-3"
+       width="5.2916665"
+       height="26.458332"
+       x="190.5"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-7-8-7"
+       width="5.2916665"
+       height="26.458332"
+       x="158.75"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-7-5"
+       width="5.2916665"
+       height="26.458332"
+       x="222.25002"
+       y="79.375" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;fill:#000000;fill-opacity:1;stroke-width:0.264583"
+       x="170.50125"
+       y="96.382401"
+       id="text17588-9"><tspan
+         sodipodi:role="line"
+         id="tspan17586-2"
+         style="fill:#000000;fill-opacity:1;stroke-width:0.264583"
+         x="170.50125"
+         y="96.382401">20</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 100.54166,42.333334 18.520832,79.375001"
+       id="path19781"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 137.58333,42.333334 174.625,79.375"
+       id="path19783" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-6"
+       width="26.458332"
+       height="26.458332"
+       x="227.54167"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-2"
+       width="5.2919998"
+       height="26.458332"
+       x="254.00003"
+       y="79.375" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect848-6-2-7-61"
+       width="26.458332"
+       height="26.458332"
+       x="259.29166"
+       y="79.375" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#020000;stroke-width:0.352777;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect9240-5-9-0-8"
+       width="5.2919998"
+       height="26.458332"
+       x="285.75"
+       y="79.375" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+       x="202.35202"
+       y="96.457329"
+       id="text17588-92"><tspan
+         sodipodi:role="line"
+         id="tspan17586-28"
+         style="stroke-width:0.264583"
+         x="202.35202"
+         y="96.457329">27</tspan></text>
+  </g>
+</svg>
-- 
GitLab